From 9bd48287383630685e1e0059e45c32f8369cd665 Mon Sep 17 00:00:00 2001 From: Timo Aaltonen Date: Tue, 9 May 2017 09:06:14 +0100 Subject: [PATCH] Import 389-ds-base_1.3.5.17.orig.tar.bz2 [dgit import orig 389-ds-base_1.3.5.17.orig.tar.bz2] --- .cvsignore | 5 + .gitignore | 162 + 389-doap.rdf | 47 + LICENSE | 27 + LICENSE.GPLv3+ | 674 + LICENSE.openssl | 11 + Makefile.am | 2029 ++ Makefile.in | 10884 +++++++ README | 11 + VERSION.sh | 54 + aclocal.m4 | 1250 + autogen.sh | 92 + buildnum.pl | 62 + compile | 347 + config.guess | 1421 + config.h.in | 474 + config.sub | 1807 ++ configure | 25050 ++++++++++++++++ configure.ac | 768 + depcomp | 791 + dirsrv.pc.in | 7 + dirsrvtests/README | 28 + dirsrvtests/__init__.py | 0 dirsrvtests/cmd/__init__.py | 0 dirsrvtests/cmd/dsadm/__init__.py | 0 dirsrvtests/cmd/dsadm/dsadm.py | 543 + dirsrvtests/create_test.py | 710 + dirsrvtests/tests/data/README | 11 + dirsrvtests/tests/data/__init__.py | 0 dirsrvtests/tests/data/basic/__init__.py | 0 dirsrvtests/tests/data/basic/dse.ldif.broken | 95 + .../tests/data/ticket47953/__init__.py | 0 .../tests/data/ticket47953/ticket47953.ldif | 27 + .../tests/data/ticket47988/__init__.py | 0 .../data/ticket47988/schema_ipa3.3.tar.gz | Bin 0 -> 98049 bytes .../data/ticket47988/schema_ipa4.1.tar.gz | Bin 0 -> 87335 bytes .../tests/data/ticket48212/__init__.py | 0 .../data/ticket48212/example1k_posix.ldif | 17017 +++++++++++ .../tests/data/ticket49121/utf8str.txt | 1 + dirsrvtests/tests/stress/README | 13 + dirsrvtests/tests/stress/__init__.py | 1 + .../tests/stress/reliabilty/__init__.py | 0 .../stress/reliabilty/reliab_7_5_test.py | 568 + .../stress/reliabilty/reliab_conn_test.py | 289 + .../replication/mmr_01_4m-2h-4c_test.py | 969 + .../stress/replication/mmr_01_4m_test.py | 572 + dirsrvtests/tests/suites/__init__.py | 0 .../suites/acct_usability_plugin/__init__.py | 0 .../acct_usability_test.py | 84 + .../suites/acctpolicy_plugin/__init__.py | 0 .../acctpolicy_plugin/acctpolicy_test.py | 81 + dirsrvtests/tests/suites/acl/__init__.py | 0 dirsrvtests/tests/suites/acl/acl_test.py | 1059 + .../tests/suites/attr_encryption/__init__.py | 0 .../attr_encryption/attr_encrypt_test.py | 84 + .../suites/attr_uniqueness_plugin/__init__.py | 0 .../attr_uniqueness_test.py | 236 + .../suites/automember_plugin/__init__.py | 0 .../automember_plugin/automember_test.py | 84 + dirsrvtests/tests/suites/basic/__init__.py | 0 dirsrvtests/tests/suites/basic/basic_test.py | 776 + dirsrvtests/tests/suites/betxns/__init__.py | 0 dirsrvtests/tests/suites/betxns/betxn_test.py | 243 + .../tests/suites/chaining_plugin/__init__.py | 0 .../suites/chaining_plugin/chaining_test.py | 81 + dirsrvtests/tests/suites/clu/__init__.py | 0 dirsrvtests/tests/suites/clu/clu_test.py | 97 + dirsrvtests/tests/suites/clu/db2ldif_test.py | 72 + .../tests/suites/collation_plugin/__init__.py | 0 .../collation_plugin/collatation_test.py | 81 + dirsrvtests/tests/suites/config/__init__.py | 0 .../tests/suites/config/config_test.py | 361 + .../tests/suites/cos_plugin/__init__.py | 0 .../tests/suites/cos_plugin/cos_test.py | 81 + .../tests/suites/deref_plugin/__init__.py | 0 .../tests/suites/deref_plugin/deref_test.py | 81 + .../tests/suites/disk_monitoring/__init__.py | 0 .../disk_monitoring/disk_monitor_test.py | 81 + .../tests/suites/distrib_plugin/__init__.py | 0 .../suites/distrib_plugin/distrib_test.py | 81 + .../tests/suites/dna_plugin/__init__.py | 0 .../tests/suites/dna_plugin/dna_test.py | 229 + dirsrvtests/tests/suites/ds_logs/__init__.py | 0 .../tests/suites/ds_logs/ds_logs_test.py | 81 + .../tests/suites/dynamic-plugins/__init__.py | 0 .../suites/dynamic-plugins/plugin_tests.py | 2483 ++ .../suites/dynamic-plugins/stress_tests.py | 148 + .../dynamic-plugins/test_dynamic_plugins.py | 481 + dirsrvtests/tests/suites/filter/__init__.py | 0 .../tests/suites/filter/filter_test.py | 137 + .../filter/rfc3673_all_oper_attrs_test.py | 209 + .../suites/get_effective_rights/__init__.py | 0 .../suites/get_effective_rights/ger_test.py | 81 + .../suites/gssapi_repl/gssapi_repl_test.py | 217 + dirsrvtests/tests/suites/ldapi/__init__.py | 1 + dirsrvtests/tests/suites/ldapi/ldapi_test.py | 81 + .../suites/linkedattrs_plugin/__init__.py | 0 .../linkedattrs_plugin/linked_attrs_test.py | 81 + .../tests/suites/mapping_tree/__init__.py | 0 .../suites/mapping_tree/mapping_tree_test.py | 81 + .../tests/suites/memberof_plugin/__init__.py | 0 .../suites/memberof_plugin/memberof_test.py | 175 + .../tests/suites/memory_leaks/__init__.py | 0 .../suites/memory_leaks/range_search_test.py | 138 + .../tests/suites/mep_plugin/__init__.py | 0 dirsrvtests/tests/suites/monitor/__init__.py | 0 .../tests/suites/monitor/monitor_test.py | 81 + .../tests/suites/paged_results/__init__.py | 0 .../paged_results/paged_results_test.py | 1317 + .../tests/suites/paged_results/sss_control.py | 127 + .../suites/pam_passthru_plugin/__init__.py | 0 .../suites/pam_passthru_plugin/pam_test.py | 81 + .../tests/suites/passthru_plugin/__init__.py | 0 .../suites/passthru_plugin/passthru_test.py | 81 + dirsrvtests/tests/suites/password/__init__.py | 0 .../tests/suites/password/password_test.py | 131 + .../tests/suites/password/pwdAdmin_test.py | 434 + .../password/pwdPolicy_attribute_test.py | 338 + .../suites/password/pwdPolicy_syntax_test.py | 224 + .../suites/password/pwdPolicy_warning_test.py | 559 + .../tests/suites/password/pwd_algo_test.py | 143 + .../tests/suites/password/pwp_history_test.py | 270 + .../suites/posix_winsync_plugin/__init__.py | 0 .../posix_winsync_test.py | 81 + dirsrvtests/tests/suites/psearch/__init__.py | 0 .../tests/suites/psearch/psearch_test.py | 81 + .../tests/suites/referint_plugin/__init__.py | 0 .../suites/referint_plugin/referint_test.py | 81 + .../tests/suites/replication/__init__.py | 0 .../suites/replication/cleanallruv_test.py | 1215 + .../wait_for_async_feature_test.py | 287 + .../tests/suites/replsync_plugin/__init__.py | 0 .../suites/replsync_plugin/repl_sync_test.py | 81 + .../tests/suites/resource_limits/__init__.py | 0 .../suites/resource_limits/res_limits_test.py | 81 + .../tests/suites/retrocl_plugin/__init__.py | 0 .../suites/retrocl_plugin/retrocl_test.py | 81 + .../tests/suites/reverpwd_plugin/__init__.py | 0 .../suites/reverpwd_plugin/reverpwd_test.py | 81 + .../tests/suites/roles_plugin/__init__.py | 0 .../tests/suites/roles_plugin/roles_test.py | 81 + .../tests/suites/rootdn_plugin/__init__.py | 0 .../rootdn_plugin/rootdn_plugin_test.py | 785 + dirsrvtests/tests/suites/sasl/__init__.py | 0 dirsrvtests/tests/suites/sasl/sasl_test.py | 81 + dirsrvtests/tests/suites/schema/__init__.py | 0 .../tests/suites/schema/test_schema.py | 213 + .../suites/schema_reload_plugin/__init__.py | 0 .../schema_reload_test.py | 81 + dirsrvtests/tests/suites/snmp/__init__.py | 0 dirsrvtests/tests/suites/snmp/snmp_test.py | 81 + dirsrvtests/tests/suites/ssl/__init__.py | 0 dirsrvtests/tests/suites/ssl/ssl_test.py | 81 + .../tests/suites/syntax_plugin/__init__.py | 0 .../tests/suites/syntax_plugin/syntax_test.py | 81 + .../tests/suites/usn_plugin/__init__.py | 0 .../tests/suites/usn_plugin/usn_test.py | 81 + .../tests/suites/views_plugin/__init__.py | 0 .../tests/suites/views_plugin/views_test.py | 81 + dirsrvtests/tests/suites/vlv/__init__.py | 0 dirsrvtests/tests/suites/vlv/vlv_test.py | 81 + .../tests/suites/whoami_plugin/__init__.py | 0 .../tests/suites/whoami_plugin/whoami_test.py | 81 + dirsrvtests/tests/tickets/__init__.py | 0 dirsrvtests/tests/tickets/finalizer.py | 64 + dirsrvtests/tests/tickets/issue48989_test.py | 57 + .../tests/tickets/ticket1347760_test.py | 473 + dirsrvtests/tests/tickets/ticket142_test.py | 307 + dirsrvtests/tests/tickets/ticket365_test.py | 176 + dirsrvtests/tests/tickets/ticket47313_test.py | 158 + dirsrvtests/tests/tickets/ticket47384_test.py | 166 + dirsrvtests/tests/tickets/ticket47431_test.py | 245 + dirsrvtests/tests/tickets/ticket47462_test.py | 433 + dirsrvtests/tests/tickets/ticket47490_test.py | 663 + dirsrvtests/tests/tickets/ticket47536_test.py | 523 + dirsrvtests/tests/tickets/ticket47553_test.py | 166 + dirsrvtests/tests/tickets/ticket47560_test.py | 238 + dirsrvtests/tests/tickets/ticket47573_test.py | 328 + dirsrvtests/tests/tickets/ticket47619_test.py | 194 + dirsrvtests/tests/tickets/ticket47640_test.py | 121 + .../tests/tickets/ticket47653MMR_test.py | 449 + dirsrvtests/tests/tickets/ticket47653_test.py | 356 + dirsrvtests/tests/tickets/ticket47669_test.py | 244 + dirsrvtests/tests/tickets/ticket47676_test.py | 381 + dirsrvtests/tests/tickets/ticket47714_test.py | 242 + dirsrvtests/tests/tickets/ticket47721_test.py | 440 + dirsrvtests/tests/tickets/ticket47781_test.py | 171 + dirsrvtests/tests/tickets/ticket47787_test.py | 537 + dirsrvtests/tests/tickets/ticket47808_test.py | 148 + dirsrvtests/tests/tickets/ticket47815_test.py | 163 + dirsrvtests/tests/tickets/ticket47819_test.py | 287 + dirsrvtests/tests/tickets/ticket47823_test.py | 981 + dirsrvtests/tests/tickets/ticket47828_test.py | 655 + dirsrvtests/tests/tickets/ticket47829_test.py | 615 + dirsrvtests/tests/tickets/ticket47833_test.py | 263 + dirsrvtests/tests/tickets/ticket47838_test.py | 854 + .../tests/tickets/ticket47869MMR_test.py | 323 + dirsrvtests/tests/tickets/ticket47871_test.py | 205 + dirsrvtests/tests/tickets/ticket47900_test.py | 328 + dirsrvtests/tests/tickets/ticket47910_test.py | 205 + dirsrvtests/tests/tickets/ticket47920_test.py | 176 + dirsrvtests/tests/tickets/ticket47921_test.py | 152 + dirsrvtests/tests/tickets/ticket47927_test.py | 296 + dirsrvtests/tests/tickets/ticket47931_test.py | 207 + dirsrvtests/tests/tickets/ticket47937_test.py | 171 + dirsrvtests/tests/tickets/ticket47950_test.py | 206 + dirsrvtests/tests/tickets/ticket47953_test.py | 122 + dirsrvtests/tests/tickets/ticket47963_test.py | 188 + dirsrvtests/tests/tickets/ticket47966_test.py | 214 + dirsrvtests/tests/tickets/ticket47970_test.py | 141 + dirsrvtests/tests/tickets/ticket47973_test.py | 165 + dirsrvtests/tests/tickets/ticket47976_test.py | 203 + dirsrvtests/tests/tickets/ticket47980_test.py | 645 + dirsrvtests/tests/tickets/ticket47981_test.py | 278 + dirsrvtests/tests/tickets/ticket47988_test.py | 481 + dirsrvtests/tests/tickets/ticket48005_test.py | 398 + dirsrvtests/tests/tickets/ticket48013_test.py | 128 + dirsrvtests/tests/tickets/ticket48026_test.py | 155 + dirsrvtests/tests/tickets/ticket48109_test.py | 387 + dirsrvtests/tests/tickets/ticket48170_test.py | 85 + dirsrvtests/tests/tickets/ticket48194_test.py | 495 + dirsrvtests/tests/tickets/ticket48212_test.py | 179 + dirsrvtests/tests/tickets/ticket48214_test.py | 154 + dirsrvtests/tests/tickets/ticket48226_test.py | 244 + dirsrvtests/tests/tickets/ticket48228_test.py | 313 + dirsrvtests/tests/tickets/ticket48233_test.py | 105 + dirsrvtests/tests/tickets/ticket48234_test.py | 139 + dirsrvtests/tests/tickets/ticket48252_test.py | 162 + dirsrvtests/tests/tickets/ticket48265_test.py | 110 + dirsrvtests/tests/tickets/ticket48266_test.py | 431 + dirsrvtests/tests/tickets/ticket48270_test.py | 153 + dirsrvtests/tests/tickets/ticket48294_test.py | 268 + dirsrvtests/tests/tickets/ticket48295_test.py | 191 + dirsrvtests/tests/tickets/ticket48312_test.py | 168 + dirsrvtests/tests/tickets/ticket48325_test.py | 270 + dirsrvtests/tests/tickets/ticket48342_test.py | 316 + dirsrvtests/tests/tickets/ticket48354_test.py | 109 + dirsrvtests/tests/tickets/ticket48362_test.py | 262 + dirsrvtests/tests/tickets/ticket48366_test.py | 195 + dirsrvtests/tests/tickets/ticket48370_test.py | 236 + dirsrvtests/tests/tickets/ticket48383_test.py | 138 + dirsrvtests/tests/tickets/ticket48497_test.py | 158 + dirsrvtests/tests/tickets/ticket48637_test.py | 197 + dirsrvtests/tests/tickets/ticket48665_test.py | 106 + dirsrvtests/tests/tickets/ticket48745_test.py | 171 + dirsrvtests/tests/tickets/ticket48746_test.py | 192 + dirsrvtests/tests/tickets/ticket48755_test.py | 272 + dirsrvtests/tests/tickets/ticket48759_test.py | 270 + dirsrvtests/tests/tickets/ticket48784_test.py | 443 + dirsrvtests/tests/tickets/ticket48798_test.py | 152 + dirsrvtests/tests/tickets/ticket48799_test.py | 174 + dirsrvtests/tests/tickets/ticket48808_test.py | 337 + dirsrvtests/tests/tickets/ticket48844_test.py | 179 + dirsrvtests/tests/tickets/ticket48891_test.py | 152 + dirsrvtests/tests/tickets/ticket48893_test.py | 105 + dirsrvtests/tests/tickets/ticket48916_test.py | 253 + dirsrvtests/tests/tickets/ticket48956_test.py | 167 + dirsrvtests/tests/tickets/ticket49039_test.py | 141 + dirsrvtests/tests/tickets/ticket49095_test.py | 85 + dirsrvtests/tests/tickets/ticket49104_test.py | 80 + dirsrvtests/tests/tickets/ticket49121_test.py | 211 + dirsrvtests/tests/tickets/ticket49122_test.py | 73 + dirsrvtests/tests/tickets/ticket548_test.py | 428 + dirsrvtests/tests/tmp/README | 10 + dirsrvtests/tickets/ticket47966_test.py | 219 + include/base/crit.h | 210 + include/base/dbtbase.h | 227 + include/base/ereport.h | 56 + include/base/file.h | 95 + include/base/fsmutex.h | 98 + include/base/plist.h | 69 + include/base/pool.h | 92 + include/base/shexp.h | 118 + include/base/systems.h | 219 + include/base/systhr.h | 88 + include/base/util.h | 96 + include/i18n.h | 185 + include/ldaputil/cert.h | 31 + include/ldaputil/certmap.h | 130 + include/ldaputil/dbconf.h | 95 + include/ldaputil/encode.h | 33 + include/ldaputil/errors.h | 112 + include/ldaputil/extcmap.h | 627 + include/ldaputil/init.h | 31 + include/ldaputil/ldapauth.h | 40 + include/ldaputil/ldaputil.h | 138 + include/libaccess/acl.h | 48 + include/libaccess/aclerror.h | 306 + include/libaccess/acleval.h | 44 + include/libaccess/aclglobal.h | 60 + include/libaccess/aclproto.h | 153 + include/libaccess/aclstruct.h | 270 + include/libaccess/attrec.h | 165 + include/libaccess/authdb.h | 32 + include/libaccess/dbtlibaccess.h | 172 + include/libaccess/dnfstruct.h | 59 + include/libaccess/ipfstruct.h | 89 + include/libaccess/las.h | 195 + include/libaccess/nsauth.h | 283 + include/libaccess/nsautherr.h | 102 + include/libaccess/nserror.h | 55 + include/libaccess/symbols.h | 99 + include/libaccess/userauth.h | 21 + include/libaccess/usi.h | 89 + include/libaccess/usrcache.h | 108 + include/libadmin/dbtlibadmin.h | 28 + include/libadmin/libadmin.h | 93 + include/netsite.h | 196 + include/public/base/systems.h | 92 + include/public/netsite.h | 29 + include/public/nsacl/aclapi.h | 387 + include/public/nsacl/acldef.h | 473 + include/public/nsacl/nserrdef.h | 108 + include/public/nsacl/plistdef.h | 70 + include/public/nsapi.h | 256 + install-sh | 501 + ldap/admin/src/base-initconfig.in | 49 + ldap/admin/src/defaults.inf.in | 59 + ldap/admin/src/initconfig.in | 12 + ldap/admin/src/logconv.pl | 2806 ++ ldap/admin/src/makemccvlvindexes | 214 + ldap/admin/src/makevlvindex | 112 + ldap/admin/src/makevlvsearch | 141 + ldap/admin/src/scripts/10cleanupldapi.pl | 23 + ldap/admin/src/scripts/10delautodnsuffix.pl | 23 + ldap/admin/src/scripts/10fixrundir.pl | 39 + ldap/admin/src/scripts/20betxn.pl | 74 + ldap/admin/src/scripts/50AES-pbe-plugin.ldif | 16 + .../src/scripts/50acctusabilityplugin.ldif | 21 + .../src/scripts/50addchainingsaslpwroles.ldif | 6 + .../admin/src/scripts/50automemberplugin.ldif | 15 + .../src/scripts/50bitstringsyntaxplugin.ldif | 14 + ldap/admin/src/scripts/50contentsync.ldif | 23 + .../scripts/50deliverymethodsyntaxplugin.ldif | 14 + ldap/admin/src/scripts/50derefplugin.ldif | 16 + .../src/scripts/50disableurisyntaxplugin.ldif | 9 + .../scripts/50enhancedguidesyntaxplugin.ldif | 14 + ldap/admin/src/scripts/50entryusnindex.ldif | 7 + .../src/scripts/50faxnumbersyntaxplugin.ldif | 14 + ldap/admin/src/scripts/50faxsyntaxplugin.ldif | 14 + ldap/admin/src/scripts/50fixNsState.pl | 240 + .../src/scripts/50guidesyntaxplugin.ldif | 14 + .../src/scripts/50linkedattrsplugin.ldif | 16 + .../src/scripts/50managedentriesplugin.ldif | 16 + ldap/admin/src/scripts/50memberofindex.ldif | 6 + ldap/admin/src/scripts/50memberofplugin.ldif | 17 + .../src/scripts/50nameuidsyntaxplugin.ldif | 14 + ldap/admin/src/scripts/50nstombstonecsn.ldif | 7 + .../scripts/50numericstringsyntaxplugin.ldif | 14 + .../50printablestringsyntaxplugin.ldif | 14 + .../admin/src/scripts/50refintprecedence.ldif | 4 + .../src/scripts/50retroclprecedence.ldif | 4 + .../scripts/50rootdnaccesscontrolplugin.ldif | 15 + .../src/scripts/50schemareloadplugin.ldif | 14 + .../src/scripts/50smd5pwdstorageplugin.ldif | 13 + .../src/scripts/50syntaxvalidplugin.ldif | 14 + ldap/admin/src/scripts/50targetuniqueid.ldif | 7 + .../50teletexterminalidsyntaxplugin.ldif | 14 + .../scripts/50telexnumbersyntaxplugin.ldif | 14 + ldap/admin/src/scripts/50updateconfig.ldif | 10 + ldap/admin/src/scripts/50usnplugin.ldif | 15 + ldap/admin/src/scripts/52updateAESplugin.pl | 87 + .../admin/src/scripts/60upgradeconfigfiles.pl | 69 + .../admin/src/scripts/60upgradeschemafiles.pl | 189 + ldap/admin/src/scripts/70upgradefromldif.pl | 108 + .../admin/src/scripts/80upgradednformat.pl.in | 307 + ldap/admin/src/scripts/81changelog.pl | 34 + .../src/scripts/82targetuniqueidindex.pl | 52 + ldap/admin/src/scripts/90subtreerename.pl | 57 + ldap/admin/src/scripts/91reindex.pl.in | 103 + ldap/admin/src/scripts/91subtreereindex.pl | 152 + ldap/admin/src/scripts/DSCreate.pm.in | 1570 + ldap/admin/src/scripts/DSDialogs.pm | 233 + ldap/admin/src/scripts/DSMigration.pm.in | 1175 + ldap/admin/src/scripts/DSSharedLib.in | 223 + ldap/admin/src/scripts/DSUpdate.pm.in | 541 + ldap/admin/src/scripts/DSUpdateDialogs.pm | 152 + ldap/admin/src/scripts/DSUtil.pm.in | 1706 ++ ldap/admin/src/scripts/Dialog.pm | 249 + ldap/admin/src/scripts/DialogManager.pm.in | 212 + ldap/admin/src/scripts/FileConn.pm | 461 + ldap/admin/src/scripts/Inf.pm | 268 + ldap/admin/src/scripts/Migration.pm.in | 327 + ldap/admin/src/scripts/Resource.pm | 137 + ldap/admin/src/scripts/Setup.pm.in | 240 + ldap/admin/src/scripts/SetupDialogs.pm.in | 243 + ldap/admin/src/scripts/SetupLog.pm | 82 + ldap/admin/src/scripts/bak2db.in | 79 + ldap/admin/src/scripts/bak2db.pl.in | 120 + ldap/admin/src/scripts/cl-dump.pl | 312 + ldap/admin/src/scripts/cleanallruv.pl.in | 125 + ldap/admin/src/scripts/db2bak.in | 75 + ldap/admin/src/scripts/db2bak.pl.in | 149 + ldap/admin/src/scripts/db2index.in | 94 + ldap/admin/src/scripts/db2index.pl.in | 184 + ldap/admin/src/scripts/db2ldif.in | 160 + ldap/admin/src/scripts/db2ldif.pl.in | 264 + ldap/admin/src/scripts/dbmon.sh.in | 246 + ldap/admin/src/scripts/dbverify.in | 70 + ldap/admin/src/scripts/dn2rdn.in | 58 + ldap/admin/src/scripts/dnaplugindepends.ldif | 7 + ldap/admin/src/scripts/ds-logpipe.py | 411 + ldap/admin/src/scripts/ds_selinux_enabled.in | 23 + .../src/scripts/ds_selinux_port_query.in | 69 + ldap/admin/src/scripts/dscreate.map.in | 39 + ldap/admin/src/scripts/dsorgentries.map.in | 22 + ldap/admin/src/scripts/dsupdate.map.in | 36 + ldap/admin/src/scripts/exampleupdate.ldif | 11 + ldap/admin/src/scripts/exampleupdate.pl | 27 + ldap/admin/src/scripts/exampleupdate.sh | 34 + ldap/admin/src/scripts/failedbinds.py | 175 + .../admin/src/scripts/fixup-linkedattrs.pl.in | 111 + ldap/admin/src/scripts/fixup-memberof.pl.in | 120 + ldap/admin/src/scripts/ldif2db.in | 109 + ldap/admin/src/scripts/ldif2db.pl.in | 214 + ldap/admin/src/scripts/ldif2ldap.in | 173 + ldap/admin/src/scripts/logregex.py | 28 + ldap/admin/src/scripts/migrate-ds.pl.in | 52 + ldap/admin/src/scripts/migrate-ds.res | 35 + ldap/admin/src/scripts/monitor.in | 170 + ldap/admin/src/scripts/ns-accountstatus.pl.in | 1045 + ldap/admin/src/scripts/ns-activate.pl.in | 742 + ldap/admin/src/scripts/ns-inactivate.pl.in | 625 + ldap/admin/src/scripts/ns-newpwpolicy.pl.in | 188 + ldap/admin/src/scripts/readnsstate.in | 100 + ldap/admin/src/scripts/remove-ds.pl.in | 79 + ldap/admin/src/scripts/repl-monitor.pl.in | 1339 + ldap/admin/src/scripts/restart-dirsrv.in | 63 + ldap/admin/src/scripts/restoreconfig.in | 52 + ldap/admin/src/scripts/saveconfig.in | 53 + ldap/admin/src/scripts/schema-reload.pl.in | 110 + ldap/admin/src/scripts/setup-ds.pl.in | 94 + ldap/admin/src/scripts/setup-ds.res.in | 212 + ldap/admin/src/scripts/start-dirsrv.in | 132 + ldap/admin/src/scripts/status-dirsrv.in | 85 + ldap/admin/src/scripts/stop-dirsrv.in | 117 + ldap/admin/src/scripts/suffix2instance.in | 58 + ldap/admin/src/scripts/syntax-validate.pl.in | 122 + ldap/admin/src/scripts/template-bak2db.in | 4 + ldap/admin/src/scripts/template-bak2db.pl.in | 28 + .../src/scripts/template-cleanallruv.pl.in | 28 + ldap/admin/src/scripts/template-db2bak.in | 4 + ldap/admin/src/scripts/template-db2bak.pl.in | 29 + ldap/admin/src/scripts/template-db2index.in | 4 + .../admin/src/scripts/template-db2index.pl.in | 28 + ldap/admin/src/scripts/template-db2ldif.in | 5 + ldap/admin/src/scripts/template-db2ldif.pl.in | 31 + ldap/admin/src/scripts/template-dbverify.in | 4 + ldap/admin/src/scripts/template-dn2rdn.in | 4 + .../scripts/template-fixup-linkedattrs.pl.in | 28 + .../src/scripts/template-fixup-memberof.pl.in | 28 + .../scripts/template-fixup-memberuid.pl.in | 154 + ldap/admin/src/scripts/template-ldif2db.in | 4 + ldap/admin/src/scripts/template-ldif2db.pl.in | 28 + ldap/admin/src/scripts/template-ldif2ldap.in | 4 + ldap/admin/src/scripts/template-monitor.in | 4 + .../scripts/template-ns-accountstatus.pl.in | 28 + .../src/scripts/template-ns-activate.pl.in | 28 + .../src/scripts/template-ns-inactivate.pl.in | 28 + .../src/scripts/template-ns-newpwpolicy.pl.in | 28 + .../src/scripts/template-restart-slapd.in | 3 + .../src/scripts/template-restoreconfig.in | 4 + ldap/admin/src/scripts/template-saveconfig.in | 4 + .../src/scripts/template-schema-reload.pl.in | 28 + .../admin/src/scripts/template-start-slapd.in | 4 + ldap/admin/src/scripts/template-stop-slapd.in | 3 + .../src/scripts/template-suffix2instance.in | 4 + .../scripts/template-syntax-validate.pl.in | 28 + ldap/admin/src/scripts/template-upgradedb.in | 4 + .../src/scripts/template-upgradednformat.in | 4 + .../template-usn-tombstone-cleanup.pl.in | 27 + .../src/scripts/template-verify-db.pl.in | 27 + ldap/admin/src/scripts/template-vlvindex.in | 4 + ldap/admin/src/scripts/upgradedb.in | 59 + ldap/admin/src/scripts/upgradednformat.in | 71 + .../src/scripts/usn-tombstone-cleanup.pl.in | 126 + ldap/admin/src/scripts/verify-db.pl.in | 239 + ldap/admin/src/scripts/vlvindex.in | 64 + ldap/admin/src/slapd.inf.in | 38 + ldap/admin/src/template-initconfig.in | 22 + ldap/admin/src/upgradeServer | 542 + ldap/include/avl.h | 75 + ldap/include/dblayer.h | 15 + ldap/include/disptmpl.h | 344 + ldap/include/ldaplog.h | 92 + ldap/include/ldaprot.h | 317 + ldap/include/ldbm.h | 388 + ldap/include/portable.h | 388 + ldap/include/regex.h | 71 + ldap/include/srchpref.h | 119 + ldap/include/sysexits-compat.h | 115 + ldap/ldif/50posix-winsync-plugin.ldif | 21 + ldap/ldif/50replication-plugins.ldif | 27 + ldap/ldif/90betxn-plugins.ldif | 0 ldap/ldif/Ace.ldif | 2607 ++ ldap/ldif/European.ldif | 7592 +++++ ldap/ldif/Eurosuffix.ldif | 15 + ldap/ldif/Example-roles.ldif | 2998 ++ ldap/ldif/Example-views.ldif | 3170 ++ ldap/ldif/Example.ldif | 2984 ++ ldap/ldif/template-baseacis.ldif.in | 5 + ldap/ldif/template-bitwise.ldif.in | 14 + ldap/ldif/template-country.ldif.in | 4 + ldap/ldif/template-dnaplugin.ldif.in | 12 + ldap/ldif/template-domain.ldif.in | 4 + ldap/ldif/template-dse.ldif.in | 1068 + ldap/ldif/template-ldapi-autobind.ldif.in | 22 + ldap/ldif/template-ldapi-default.ldif.in | 8 + ldap/ldif/template-ldapi.ldif.in | 7 + ldap/ldif/template-locality.ldif.in | 4 + ldap/ldif/template-org.ldif.in | 4 + ldap/ldif/template-orgunit.ldif.in | 4 + ldap/ldif/template-pampta.ldif.in | 24 + ldap/ldif/template-sasl.ldif.in | 42 + ldap/ldif/template-state.ldif.in | 4 + ldap/ldif/template-suffix-db.ldif.in | 29 + ldap/ldif/template.ldif | 96 + ldap/libraries/libavl/avl.c | 778 + ldap/libraries/libavl/testavl.c | 130 + ldap/schema/00core.ldif | 822 + ldap/schema/01core389.ldif | 324 + ldap/schema/02common.ldif | 164 + ldap/schema/05rfc2927.ldif | 22 + ldap/schema/05rfc4523.ldif | 165 + ldap/schema/05rfc4524.ldif | 296 + ldap/schema/06inetorgperson.ldif | 135 + ldap/schema/10automember-plugin.ldif | 94 + ldap/schema/10dna-plugin.ldif | 219 + ldap/schema/10mep-plugin.ldif | 75 + ldap/schema/10presence.ldif | 28 + ldap/schema/10rfc2307.ldif | 55 + ldap/schema/10rfc2307bis.ldif | 348 + ldap/schema/20subscriber.ldif | 35 + ldap/schema/25java-object.ldif | 27 + ldap/schema/28pilot.ldif | 29 + ldap/schema/30ns-common.ldif | 65 + ldap/schema/50ns-admin.ldif | 45 + ldap/schema/50ns-certificate.ldif | 17 + ldap/schema/50ns-directory.ldif | 93 + ldap/schema/50ns-mail.ldif | 51 + ldap/schema/50ns-value.ldif | 27 + ldap/schema/50ns-web.ldif | 17 + ldap/schema/60acctpolicy.ldif | 47 + ldap/schema/60autofs.ldif | 44 + ldap/schema/60changelog.ldif | 105 + ldap/schema/60eduperson.ldif | 110 + ldap/schema/60inetmail.ldif | 104 + ldap/schema/60kerberos.ldif | 283 + ldap/schema/60krb5kdc.ldif | 159 + ldap/schema/60mozilla.ldif | 233 + ldap/schema/60nis.ldif | 146 + ldap/schema/60nss-ldap.ldif | 29 + ldap/schema/60pam-plugin.ldif | 23 + ldap/schema/60posix-winsync-plugin.ldif | 15 + ldap/schema/60pureftpd.ldif | 129 + ldap/schema/60qmail.ldif | 442 + ldap/schema/60radius.ldif | 559 + ldap/schema/60rfc2739.ldif | 123 + ldap/schema/60rfc3712.ldif | 486 + ldap/schema/60rfc4876.ldif | 198 + ldap/schema/60sabayon.ldif | 66 + ldap/schema/60samba.ldif | 205 + ldap/schema/60samba3.ldif | 566 + ldap/schema/60sendmail.ldif | 54 + ldap/schema/60sudo.ldif | 121 + ldap/schema/60trust.ldif | 47 + ldap/schema/99user.ldif | 14 + ldap/schema/slapd-collations.conf | 263 + .../plugins/acct_usability/acct_usability.c | 428 + .../plugins/acct_usability/acct_usability.h | 34 + ldap/servers/plugins/acctpolicy/acct_config.c | 175 + ldap/servers/plugins/acctpolicy/acct_init.c | 299 + ldap/servers/plugins/acctpolicy/acct_plugin.c | 497 + ldap/servers/plugins/acctpolicy/acct_util.c | 277 + ldap/servers/plugins/acctpolicy/acctpolicy.h | 98 + .../plugins/acctpolicy/sampleconfig.ldif | 40 + .../plugins/acctpolicy/samplepolicy.ldif | 27 + ldap/servers/plugins/acl/ACL-Notes | 218 + ldap/servers/plugins/acl/acl.c | 4331 +++ ldap/servers/plugins/acl/acl.h | 939 + ldap/servers/plugins/acl/acl_ext.c | 1178 + ldap/servers/plugins/acl/aclanom.c | 578 + ldap/servers/plugins/acl/acleffectiverights.c | 1120 + ldap/servers/plugins/acl/aclgroup.c | 462 + ldap/servers/plugins/acl/aclinit.c | 549 + ldap/servers/plugins/acl/acllas.c | 4529 +++ ldap/servers/plugins/acl/acllist.c | 1002 + ldap/servers/plugins/acl/aclparse.c | 2315 ++ ldap/servers/plugins/acl/aclplugin.c | 386 + ldap/servers/plugins/acl/aclutil.c | 1493 + ldap/servers/plugins/automember/automember.c | 2738 ++ ldap/servers/plugins/automember/automember.h | 105 + ldap/servers/plugins/bitwise/bitwise.c | 194 + ldap/servers/plugins/chainingdb/cb.h | 480 + ldap/servers/plugins/chainingdb/cb_abandon.c | 58 + ldap/servers/plugins/chainingdb/cb_acl.c | 68 + ldap/servers/plugins/chainingdb/cb_add.c | 270 + ldap/servers/plugins/chainingdb/cb_bind.c | 326 + ldap/servers/plugins/chainingdb/cb_cleanup.c | 30 + ldap/servers/plugins/chainingdb/cb_close.c | 93 + ldap/servers/plugins/chainingdb/cb_compare.c | 249 + ldap/servers/plugins/chainingdb/cb_config.c | 613 + .../plugins/chainingdb/cb_conn_stateless.c | 968 + ldap/servers/plugins/chainingdb/cb_controls.c | 301 + ldap/servers/plugins/chainingdb/cb_debug.c | 22 + ldap/servers/plugins/chainingdb/cb_delete.c | 240 + ldap/servers/plugins/chainingdb/cb_init.c | 128 + ldap/servers/plugins/chainingdb/cb_instance.c | 2015 ++ ldap/servers/plugins/chainingdb/cb_modify.c | 279 + ldap/servers/plugins/chainingdb/cb_modrdn.c | 257 + ldap/servers/plugins/chainingdb/cb_monitor.c | 236 + ldap/servers/plugins/chainingdb/cb_schema.c | 53 + ldap/servers/plugins/chainingdb/cb_search.c | 765 + ldap/servers/plugins/chainingdb/cb_size.c | 30 + ldap/servers/plugins/chainingdb/cb_start.c | 51 + ldap/servers/plugins/chainingdb/cb_temp.c | 23 + ldap/servers/plugins/chainingdb/cb_test.c | 83 + ldap/servers/plugins/chainingdb/cb_unbind.c | 31 + ldap/servers/plugins/chainingdb/cb_utils.c | 368 + ldap/servers/plugins/collation/collate.c | 488 + ldap/servers/plugins/collation/collate.h | 43 + ldap/servers/plugins/collation/config.c | 184 + ldap/servers/plugins/collation/config.h | 20 + ldap/servers/plugins/collation/debug.c | 13 + ldap/servers/plugins/collation/orfilter.c | 1000 + ldap/servers/plugins/collation/orfilter.h | 18 + ldap/servers/plugins/cos/cos.c | 271 + ldap/servers/plugins/cos/cos_cache.c | 3656 +++ ldap/servers/plugins/cos/cos_cache.h | 28 + ldap/servers/plugins/deref/deref.c | 783 + ldap/servers/plugins/deref/deref.h | 29 + ldap/servers/plugins/distrib/Makefile | 60 + ldap/servers/plugins/distrib/Makefile.HPUX | 30 + ldap/servers/plugins/distrib/Makefile.HPUX64 | 30 + ldap/servers/plugins/distrib/Makefile.Linux | 33 + ldap/servers/plugins/distrib/Makefile.SOLARIS | 33 + .../plugins/distrib/Makefile.SOLARIS64 | 33 + .../plugins/distrib/Makefile.SOLARISx86 | 33 + ldap/servers/plugins/distrib/README | 23 + ldap/servers/plugins/distrib/distrib.c | 229 + ldap/servers/plugins/dna/addentries.sh | 2 + ldap/servers/plugins/dna/config.sh | 5 + ldap/servers/plugins/dna/del_test_entries.dns | 6 + ldap/servers/plugins/dna/delentries.sh | 2 + ldap/servers/plugins/dna/dna.c | 4720 +++ ldap/servers/plugins/dna/editentries.sh | 2 + ldap/servers/plugins/dna/oneentry.sh | 2 + ldap/servers/plugins/dna/posix.ldif | 38 + ldap/servers/plugins/dna/posix_one.ldif | 10 + ldap/servers/plugins/dna/posix_test.ldif | 58 + ldap/servers/plugins/dna/seeconfig.sh | 2 + ldap/servers/plugins/dna/seeentries.sh | 2 + ldap/servers/plugins/dna/subtest.ldif | 31 + ldap/servers/plugins/http/http_client.c | 269 + ldap/servers/plugins/http/http_client.h | 71 + ldap/servers/plugins/http/http_impl.c | 1389 + ldap/servers/plugins/http/http_impl.h | 33 + ldap/servers/plugins/linkedattrs/fixup_task.c | 480 + .../plugins/linkedattrs/linked_attrs.c | 2185 ++ .../plugins/linkedattrs/linked_attrs.h | 113 + ldap/servers/plugins/memberof/memberof.c | 3021 ++ ldap/servers/plugins/memberof/memberof.h | 92 + .../plugins/memberof/memberof_config.c | 1003 + ldap/servers/plugins/mep/mep.c | 2864 ++ ldap/servers/plugins/mep/mep.h | 101 + ldap/servers/plugins/pam_passthru/README | 208 + .../plugins/pam_passthru/pam_passthru.h | 137 + .../plugins/pam_passthru/pam_ptconfig.c | 841 + .../plugins/pam_passthru/pam_ptdebug.c | 22 + .../servers/plugins/pam_passthru/pam_ptimpl.c | 462 + .../plugins/pam_passthru/pam_ptpreop.c | 709 + ldap/servers/plugins/passthru/PT-Notes | 33 + ldap/servers/plugins/passthru/passthru.h | 141 + ldap/servers/plugins/passthru/ptbind.c | 152 + ldap/servers/plugins/passthru/ptconfig.c | 376 + ldap/servers/plugins/passthru/ptconn.c | 428 + ldap/servers/plugins/passthru/ptdebug.c | 23 + ldap/servers/plugins/passthru/ptpreop.c | 266 + ldap/servers/plugins/passthru/ptutil.c | 89 + ldap/servers/plugins/posix-winsync/README | 50 + .../plugins/posix-winsync/posix-group-func.c | 1027 + .../plugins/posix-winsync/posix-group-func.h | 25 + .../plugins/posix-winsync/posix-group-task.c | 520 + .../posix-winsync/posix-winsync-config.c | 301 + .../plugins/posix-winsync/posix-winsync.c | 2117 ++ .../plugins/posix-winsync/posix-wsp-ident.h | 58 + .../plugins/presence/images/aim-offline.gif | Bin 0 -> 113 bytes .../plugins/presence/images/aim-online.gif | Bin 0 -> 895 bytes .../plugins/presence/images/icq-disabled.gif | Bin 0 -> 138 bytes .../plugins/presence/images/icq-offline.gif | Bin 0 -> 198 bytes .../plugins/presence/images/icq-online.gif | Bin 0 -> 198 bytes .../plugins/presence/images/yahoo-offline.gif | Bin 0 -> 84 bytes .../plugins/presence/images/yahoo-online.gif | Bin 0 -> 140 bytes ldap/servers/plugins/presence/presence.c | 1186 + ldap/servers/plugins/presence/presence.ldif | 52 + ldap/servers/plugins/pwdstorage/clear_pwd.c | 77 + ldap/servers/plugins/pwdstorage/crypt_pwd.c | 93 + ldap/servers/plugins/pwdstorage/md5.h | 71 + ldap/servers/plugins/pwdstorage/md5_pwd.c | 106 + ldap/servers/plugins/pwdstorage/md5c.c | 345 + .../plugins/pwdstorage/ns-mta-md5_pwd.bu | 408 + .../plugins/pwdstorage/ns-mta-md5_pwd.c | 90 + ldap/servers/plugins/pwdstorage/pwd_init.c | 338 + ldap/servers/plugins/pwdstorage/pwd_util.c | 44 + ldap/servers/plugins/pwdstorage/pwdstorage.h | 87 + ldap/servers/plugins/pwdstorage/sha_pwd.c | 243 + ldap/servers/plugins/pwdstorage/smd5_pwd.c | 138 + ldap/servers/plugins/pwdstorage/ssha_pwd.c | 173 + ldap/servers/plugins/referint/referint.c | 1795 ++ ldap/servers/plugins/replication/cl4.h | 73 + ldap/servers/plugins/replication/cl4_api.c | 804 + ldap/servers/plugins/replication/cl4_api.h | 75 + ldap/servers/plugins/replication/cl4_init.c | 357 + ldap/servers/plugins/replication/cl5.h | 51 + ldap/servers/plugins/replication/cl5_api.c | 7041 +++++ ldap/servers/plugins/replication/cl5_api.h | 472 + .../servers/plugins/replication/cl5_clcache.c | 1162 + .../servers/plugins/replication/cl5_clcache.h | 31 + ldap/servers/plugins/replication/cl5_config.c | 868 + ldap/servers/plugins/replication/cl5_init.c | 87 + ldap/servers/plugins/replication/cl5_test.c | 840 + ldap/servers/plugins/replication/cl5_test.h | 29 + ldap/servers/plugins/replication/cl_crypt.c | 174 + ldap/servers/plugins/replication/cl_crypt.h | 24 + ldap/servers/plugins/replication/csnpl.c | 401 + ldap/servers/plugins/replication/csnpl.h | 34 + .../plugins/replication/legacy_consumer.c | 701 + ldap/servers/plugins/replication/llist.c | 348 + ldap/servers/plugins/replication/llist.h | 34 + ldap/servers/plugins/replication/profile.c | 49 + .../plugins/replication/repl-session-plugin.h | 86 + ldap/servers/plugins/replication/repl.h | 400 + ldap/servers/plugins/replication/repl5.h | 778 + ldap/servers/plugins/replication/repl5_agmt.c | 3427 +++ .../plugins/replication/repl5_agmtlist.c | 900 + .../plugins/replication/repl5_backoff.c | 240 + .../plugins/replication/repl5_connection.c | 2244 ++ .../plugins/replication/repl5_inc_protocol.c | 2502 ++ ldap/servers/plugins/replication/repl5_init.c | 963 + .../plugins/replication/repl5_mtnode_ext.c | 204 + .../plugins/replication/repl5_plugins.c | 1651 + .../plugins/replication/repl5_prot_private.h | 88 + .../plugins/replication/repl5_protocol.c | 566 + .../plugins/replication/repl5_protocol_util.c | 784 + .../plugins/replication/repl5_replica.c | 4471 +++ .../replication/repl5_replica_config.c | 3640 +++ .../replication/repl5_replica_dnhash.c | 197 + .../plugins/replication/repl5_replica_hash.c | 251 + .../plugins/replication/repl5_replsupplier.c | 174 + ldap/servers/plugins/replication/repl5_ruv.c | 2537 ++ ldap/servers/plugins/replication/repl5_ruv.h | 130 + .../plugins/replication/repl5_schedule.c | 748 + .../plugins/replication/repl5_tot_protocol.c | 923 + .../servers/plugins/replication/repl5_total.c | 887 + .../plugins/replication/repl5_updatedn_list.c | 374 + ldap/servers/plugins/replication/repl_add.c | 38 + ldap/servers/plugins/replication/repl_bind.c | 58 + .../plugins/replication/repl_compare.c | 48 + .../plugins/replication/repl_connext.c | 258 + .../plugins/replication/repl_controls.c | 345 + .../servers/plugins/replication/repl_delete.c | 34 + ldap/servers/plugins/replication/repl_entry.c | 46 + ldap/servers/plugins/replication/repl_ext.c | 121 + ldap/servers/plugins/replication/repl_extop.c | 1926 ++ .../plugins/replication/repl_globals.c | 150 + .../servers/plugins/replication/repl_helper.c | 93 + .../servers/plugins/replication/repl_helper.h | 77 + ldap/servers/plugins/replication/repl_init.c | 302 + .../servers/plugins/replication/repl_modify.c | 37 + .../servers/plugins/replication/repl_modrdn.c | 36 + .../plugins/replication/repl_monitor.c | 73 + .../servers/plugins/replication/repl_objset.c | 529 + .../servers/plugins/replication/repl_objset.h | 45 + ldap/servers/plugins/replication/repl_opext.c | 103 + ldap/servers/plugins/replication/repl_ops.c | 188 + .../plugins/replication/repl_rootdse.c | 87 + .../servers/plugins/replication/repl_search.c | 33 + .../plugins/replication/repl_session_plugin.c | 173 + .../servers/plugins/replication/repl_shared.h | 124 + ldap/servers/plugins/replication/replutil.c | 1094 + .../replication/test_repl_session_plugin.c | 306 + .../plugins/replication/tests/dnp_sim.c | 1041 + .../plugins/replication/tests/dnp_sim2.c | 980 + .../plugins/replication/tests/dnp_sim3.c | 1497 + .../servers/plugins/replication/tests/makesim | 53 + ldap/servers/plugins/replication/urp.c | 1401 + ldap/servers/plugins/replication/urp.h | 55 + ldap/servers/plugins/replication/urp_glue.c | 257 + .../plugins/replication/urp_tombstone.c | 280 + .../plugins/replication/windows_connection.c | 2066 ++ .../replication/windows_inc_protocol.c | 1785 ++ .../plugins/replication/windows_private.c | 2897 ++ .../replication/windows_prot_private.h | 53 + .../replication/windows_protocol_util.c | 6054 ++++ .../replication/windows_tot_protocol.c | 457 + .../servers/plugins/replication/windowsrepl.h | 266 + .../plugins/replication/winsync-plugin.h | 253 + ldap/servers/plugins/retrocl/linktest.c | 24 + ldap/servers/plugins/retrocl/retrocl.c | 667 + ldap/servers/plugins/retrocl/retrocl.h | 147 + ldap/servers/plugins/retrocl/retrocl.txt | 110 + ldap/servers/plugins/retrocl/retrocl_cn.c | 411 + ldap/servers/plugins/retrocl/retrocl_create.c | 336 + ldap/servers/plugins/retrocl/retrocl_po.c | 690 + .../servers/plugins/retrocl/retrocl_rootdse.c | 72 + ldap/servers/plugins/retrocl/retrocl_trim.c | 484 + ldap/servers/plugins/rever/pbe.c | 591 + ldap/servers/plugins/rever/rever.c | 148 + ldap/servers/plugins/rever/rever.h | 43 + ldap/servers/plugins/roles/roles_cache.c | 2222 ++ ldap/servers/plugins/roles/roles_cache.h | 63 + ldap/servers/plugins/roles/roles_plugin.c | 347 + .../plugins/rootdn_access/rootdn_access.c | 722 + .../plugins/rootdn_access/rootdn_access.h | 26 + .../plugins/schema_reload/schema_reload.c | 300 + .../servers/plugins/statechange/statechange.c | 503 + ldap/servers/plugins/sync/sync.h | 175 + ldap/servers/plugins/sync/sync_init.c | 148 + ldap/servers/plugins/sync/sync_persist.c | 694 + ldap/servers/plugins/sync/sync_refresh.c | 743 + ldap/servers/plugins/sync/sync_util.c | 715 + ldap/servers/plugins/syntaxes/bin.c | 349 + ldap/servers/plugins/syntaxes/bitstring.c | 228 + ldap/servers/plugins/syntaxes/ces.c | 379 + ldap/servers/plugins/syntaxes/cis.c | 1083 + ldap/servers/plugins/syntaxes/debug.c | 20 + .../servers/plugins/syntaxes/deliverymethod.c | 316 + ldap/servers/plugins/syntaxes/dn.c | 192 + ldap/servers/plugins/syntaxes/facsimile.c | 322 + ldap/servers/plugins/syntaxes/guide.c | 733 + ldap/servers/plugins/syntaxes/int.c | 236 + ldap/servers/plugins/syntaxes/nameoptuid.c | 271 + ldap/servers/plugins/syntaxes/numericstring.c | 241 + ldap/servers/plugins/syntaxes/phonetic.c | 641 + ldap/servers/plugins/syntaxes/sicis.c | 178 + ldap/servers/plugins/syntaxes/string.c | 967 + ldap/servers/plugins/syntaxes/syntax.h | 154 + ldap/servers/plugins/syntaxes/syntax_common.c | 89 + ldap/servers/plugins/syntaxes/tel.c | 268 + ldap/servers/plugins/syntaxes/teletex.c | 341 + ldap/servers/plugins/syntaxes/telex.c | 255 + ldap/servers/plugins/syntaxes/validate.c | 565 + ldap/servers/plugins/syntaxes/validate_task.c | 292 + ldap/servers/plugins/syntaxes/value.c | 388 + ldap/servers/plugins/uiduniq/7bit.c | 790 + ldap/servers/plugins/uiduniq/UID-Notes | 96 + ldap/servers/plugins/uiduniq/plugin-utils.h | 63 + ldap/servers/plugins/uiduniq/uid.c | 1613 + ldap/servers/plugins/uiduniq/utils.c | 220 + ldap/servers/plugins/usn/usn.c | 731 + ldap/servers/plugins/usn/usn.h | 29 + ldap/servers/plugins/usn/usn_cleanup.c | 364 + .../plugins/vattrsp_template/vattrsp.c | 388 + ldap/servers/plugins/views/views.c | 1887 ++ ldap/servers/plugins/whoami/whoami.c | 119 + ldap/servers/slapd/abandon.c | 147 + ldap/servers/slapd/add.c | 1039 + ldap/servers/slapd/agtmmap.c | 326 + ldap/servers/slapd/agtmmap.h | 192 + ldap/servers/slapd/apibroker.c | 313 + ldap/servers/slapd/attr.c | 1044 + ldap/servers/slapd/attrlist.c | 332 + ldap/servers/slapd/attrsyntax.c | 1683 ++ ldap/servers/slapd/auditlog.c | 404 + ldap/servers/slapd/auth.c | 534 + ldap/servers/slapd/auth.h | 23 + ldap/servers/slapd/ava.c | 73 + ldap/servers/slapd/back-ldbm/ancestorid.c | 1047 + ldap/servers/slapd/back-ldbm/archive.c | 503 + ldap/servers/slapd/back-ldbm/attrcrypt.h | 41 + ldap/servers/slapd/back-ldbm/back-ldbm.h | 871 + ldap/servers/slapd/back-ldbm/backentry.c | 134 + ldap/servers/slapd/back-ldbm/cache.c | 2109 ++ ldap/servers/slapd/back-ldbm/cleanup.c | 59 + ldap/servers/slapd/back-ldbm/close.c | 60 + ldap/servers/slapd/back-ldbm/dbhelp.c | 335 + ldap/servers/slapd/back-ldbm/dblayer.c | 7647 +++++ ldap/servers/slapd/back-ldbm/dblayer.h | 189 + ldap/servers/slapd/back-ldbm/dbsize.c | 34 + ldap/servers/slapd/back-ldbm/dbverify.c | 264 + ldap/servers/slapd/back-ldbm/dbversion.c | 206 + ldap/servers/slapd/back-ldbm/dn2entry.c | 295 + ldap/servers/slapd/back-ldbm/entrystore.c | 20 + ldap/servers/slapd/back-ldbm/filterindex.c | 1020 + ldap/servers/slapd/back-ldbm/findentry.c | 409 + ldap/servers/slapd/back-ldbm/haschildren.c | 16 + ldap/servers/slapd/back-ldbm/id2entry.c | 467 + ldap/servers/slapd/back-ldbm/idl.c | 1604 + ldap/servers/slapd/back-ldbm/idl_common.c | 488 + ldap/servers/slapd/back-ldbm/idl_new.c | 1127 + ldap/servers/slapd/back-ldbm/idl_shim.c | 137 + ldap/servers/slapd/back-ldbm/idlapi.h | 38 + ldap/servers/slapd/back-ldbm/import-merge.c | 687 + ldap/servers/slapd/back-ldbm/import-threads.c | 4006 +++ ldap/servers/slapd/back-ldbm/import.c | 1749 ++ ldap/servers/slapd/back-ldbm/import.h | 236 + ldap/servers/slapd/back-ldbm/index.c | 2456 ++ ldap/servers/slapd/back-ldbm/init.c | 240 + ldap/servers/slapd/back-ldbm/instance.c | 442 + ldap/servers/slapd/back-ldbm/ldbm_abandon.c | 22 + ldap/servers/slapd/back-ldbm/ldbm_add.c | 1437 + ldap/servers/slapd/back-ldbm/ldbm_attr.c | 1250 + ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c | 1651 + .../slapd/back-ldbm/ldbm_attrcrypt_config.c | 306 + ldap/servers/slapd/back-ldbm/ldbm_bind.c | 116 + ldap/servers/slapd/back-ldbm/ldbm_compare.c | 104 + ldap/servers/slapd/back-ldbm/ldbm_config.c | 2231 ++ ldap/servers/slapd/back-ldbm/ldbm_config.h | 160 + ldap/servers/slapd/back-ldbm/ldbm_delete.c | 1501 + ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c | 3605 +++ .../slapd/back-ldbm/ldbm_index_config.c | 434 + .../slapd/back-ldbm/ldbm_instance_config.c | 1244 + ldap/servers/slapd/back-ldbm/ldbm_modify.c | 1062 + ldap/servers/slapd/back-ldbm/ldbm_modrdn.c | 2251 ++ ldap/servers/slapd/back-ldbm/ldbm_search.c | 1957 ++ ldap/servers/slapd/back-ldbm/ldbm_unbind.c | 22 + ldap/servers/slapd/back-ldbm/ldbm_usn.c | 209 + ldap/servers/slapd/back-ldbm/ldif2ldbm.c | 3845 +++ ldap/servers/slapd/back-ldbm/matchrule.c | 166 + ldap/servers/slapd/back-ldbm/misc.c | 688 + ldap/servers/slapd/back-ldbm/monitor.c | 300 + ldap/servers/slapd/back-ldbm/nextid.c | 220 + ldap/servers/slapd/back-ldbm/parents.c | 185 + ldap/servers/slapd/back-ldbm/perfctrs.c | 316 + ldap/servers/slapd/back-ldbm/perfctrs.h | 61 + .../servers/slapd/back-ldbm/proto-back-ldbm.h | 709 + ldap/servers/slapd/back-ldbm/rmdb.c | 62 + ldap/servers/slapd/back-ldbm/seq.c | 307 + ldap/servers/slapd/back-ldbm/sort.c | 851 + ldap/servers/slapd/back-ldbm/start.c | 355 + .../back-ldbm/tools/index_dump/index_dump.c | 214 + ldap/servers/slapd/back-ldbm/uniqueid2entry.c | 83 + ldap/servers/slapd/back-ldbm/upgrade.c | 440 + ldap/servers/slapd/back-ldbm/vlv.c | 2161 ++ ldap/servers/slapd/back-ldbm/vlv_key.c | 77 + ldap/servers/slapd/back-ldbm/vlv_key.h | 30 + ldap/servers/slapd/back-ldbm/vlv_srch.c | 933 + ldap/servers/slapd/back-ldbm/vlv_srch.h | 150 + ldap/servers/slapd/back-ldif/add.c | 204 + ldap/servers/slapd/back-ldif/back-ldif.h | 91 + ldap/servers/slapd/back-ldif/bind.c | 116 + ldap/servers/slapd/back-ldif/close.c | 87 + ldap/servers/slapd/back-ldif/compare.c | 90 + ldap/servers/slapd/back-ldif/config.c | 211 + ldap/servers/slapd/back-ldif/delete.c | 144 + ldap/servers/slapd/back-ldif/init.c | 114 + ldap/servers/slapd/back-ldif/modify.c | 572 + ldap/servers/slapd/back-ldif/modrdn.c | 290 + ldap/servers/slapd/back-ldif/monitor.c | 132 + ldap/servers/slapd/back-ldif/search.c | 205 + ldap/servers/slapd/back-ldif/start.c | 39 + ldap/servers/slapd/back-ldif/unbind.c | 35 + ldap/servers/slapd/backend.c | 691 + ldap/servers/slapd/backend_manager.c | 524 + ldap/servers/slapd/bind.c | 931 + ldap/servers/slapd/bitset.c | 55 + ldap/servers/slapd/bulk_import.c | 154 + ldap/servers/slapd/ch_malloc.c | 414 + ldap/servers/slapd/charray.c | 476 + ldap/servers/slapd/compare.c | 184 + ldap/servers/slapd/computed.c | 320 + ldap/servers/slapd/config.c | 608 + ldap/servers/slapd/configdse.c | 600 + ldap/servers/slapd/connection.c | 2351 ++ ldap/servers/slapd/conntable.c | 551 + ldap/servers/slapd/control.c | 680 + ldap/servers/slapd/counters.c | 159 + ldap/servers/slapd/csn.c | 408 + ldap/servers/slapd/csngen.c | 892 + ldap/servers/slapd/csngen.h | 35 + ldap/servers/slapd/csnset.c | 370 + ldap/servers/slapd/daemon.c | 3431 +++ ldap/servers/slapd/defbackend.c | 212 + ldap/servers/slapd/delete.c | 391 + ldap/servers/slapd/detach.c | 299 + ldap/servers/slapd/disconnect_error_strings.h | 38 + ldap/servers/slapd/disconnect_errors.h | 40 + ldap/servers/slapd/dl.c | 240 + ldap/servers/slapd/dn.c | 3192 ++ ldap/servers/slapd/dse.c | 2839 ++ ldap/servers/slapd/dynalib.c | 141 + ldap/servers/slapd/entry.c | 4350 +++ ldap/servers/slapd/entrywsi.c | 1563 + ldap/servers/slapd/errormap.c | 186 + ldap/servers/slapd/eventq.c | 492 + ldap/servers/slapd/extendop.c | 447 + ldap/servers/slapd/factory.c | 476 + ldap/servers/slapd/fe.h | 162 + ldap/servers/slapd/features.c | 54 + ldap/servers/slapd/fedse.c | 1980 ++ ldap/servers/slapd/fileio.c | 84 + ldap/servers/slapd/filter.c | 1665 + ldap/servers/slapd/filter.h | 44 + ldap/servers/slapd/filtercmp.c | 421 + ldap/servers/slapd/filterentry.c | 1101 + ldap/servers/slapd/generation.c | 143 + ldap/servers/slapd/getfilelist.c | 234 + ldap/servers/slapd/getopt_ext.c | 242 + ldap/servers/slapd/getopt_ext.h | 108 + ldap/servers/slapd/getsocketpeer.c | 136 + ldap/servers/slapd/getsocketpeer.h | 16 + ldap/servers/slapd/globals.c | 92 + ldap/servers/slapd/house.c | 99 + ldap/servers/slapd/http.h | 50 + ldap/servers/slapd/index_subsys.h | 56 + ldap/servers/slapd/index_subsystem.c | 1299 + ldap/servers/slapd/init.c | 53 + ldap/servers/slapd/intrinsics.h | 82 + ldap/servers/slapd/ldaputil.c | 2464 ++ ldap/servers/slapd/ldbmlinktest.c | 46 + ldap/servers/slapd/lenstr.c | 92 + ldap/servers/slapd/libglobs.c | 8323 +++++ ldap/servers/slapd/libmakefile | 130 + ldap/servers/slapd/listConfigAttrs.pl | 109 + ldap/servers/slapd/localhost.c | 237 + ldap/servers/slapd/lock.c | 75 + ldap/servers/slapd/log.c | 5089 ++++ ldap/servers/slapd/log.h | 231 + ldap/servers/slapd/main.c | 3004 ++ ldap/servers/slapd/mapping_tree.c | 3886 +++ ldap/servers/slapd/match.c | 345 + ldap/servers/slapd/mempool.c | 786 + ldap/servers/slapd/mkDBErrStrs.pl | 86 + ldap/servers/slapd/modify.c | 1531 + ldap/servers/slapd/modrdn.c | 733 + ldap/servers/slapd/modutil.c | 858 + ldap/servers/slapd/monitor.c | 149 + ldap/servers/slapd/mozldap.h | 45 + ldap/servers/slapd/object.c | 103 + ldap/servers/slapd/objset.c | 388 + ldap/servers/slapd/openldapber.h | 25 + ldap/servers/slapd/operation.c | 628 + ldap/servers/slapd/opshared.c | 1758 ++ ldap/servers/slapd/pagedresults.c | 1060 + ldap/servers/slapd/passwd_extop.c | 924 + ldap/servers/slapd/pblock.c | 3781 +++ ldap/servers/slapd/plugin.c | 4632 +++ ldap/servers/slapd/plugin_acl.c | 222 + ldap/servers/slapd/plugin_internal_op.c | 936 + ldap/servers/slapd/plugin_mr.c | 692 + ldap/servers/slapd/plugin_role.c | 38 + ldap/servers/slapd/plugin_syntax.c | 1029 + ldap/servers/slapd/poll_using_select.c | 130 + ldap/servers/slapd/poll_using_select.h | 51 + ldap/servers/slapd/prerrstrs.h | 142 + ldap/servers/slapd/protect_db.c | 522 + ldap/servers/slapd/protect_db.h | 89 + ldap/servers/slapd/proto-slap.h | 1539 + ldap/servers/slapd/proxyauth.c | 224 + ldap/servers/slapd/psearch.c | 743 + ldap/servers/slapd/pw.c | 2944 ++ ldap/servers/slapd/pw.h | 50 + ldap/servers/slapd/pw_mgmt.c | 270 + ldap/servers/slapd/pw_retry.c | 272 + ldap/servers/slapd/rdn.c | 1185 + ldap/servers/slapd/referral.c | 522 + ldap/servers/slapd/regex.c | 211 + ldap/servers/slapd/resourcelimit.c | 626 + ldap/servers/slapd/result.c | 2298 ++ ldap/servers/slapd/rootdse.c | 354 + ldap/servers/slapd/sasl_io.c | 801 + ldap/servers/slapd/sasl_map.c | 702 + ldap/servers/slapd/saslbind.c | 1070 + ldap/servers/slapd/schema.c | 7858 +++++ ldap/servers/slapd/schemaparse.c | 283 + ldap/servers/slapd/search.c | 387 + ldap/servers/slapd/secerrstrs.h | 574 + ldap/servers/slapd/security_wrappers.c | 388 + ldap/servers/slapd/slap.h | 2595 ++ ldap/servers/slapd/slapd.lite.key | 11 + ldap/servers/slapd/slapd.normal.key | 12 + ldap/servers/slapd/slapd_plhash.c | 67 + ldap/servers/slapd/slapi-plugin-compat4.h | 146 + ldap/servers/slapd/slapi-plugin.h | 8039 +++++ ldap/servers/slapd/slapi-private.h | 1379 + ldap/servers/slapd/slapi2nspr.c | 276 + ldap/servers/slapd/slapi_counter.c | 324 + .../slapd/slapi_counter_sunos_sparcv9.S | 105 + ldap/servers/slapd/snmp_collator.c | 827 + ldap/servers/slapd/snmp_collator.h | 35 + ldap/servers/slapd/snoop.c | 47 + ldap/servers/slapd/sort.c | 106 + ldap/servers/slapd/ssl.c | 3182 ++ ldap/servers/slapd/sslerrstrs.h | 426 + ldap/servers/slapd/start_tls_extop.c | 417 + ldap/servers/slapd/statechange.h | 57 + ldap/servers/slapd/str2filter.c | 502 + ldap/servers/slapd/strdup.c | 33 + ldap/servers/slapd/stubrepl.c | 50 + ldap/servers/slapd/stubs.c | 35 + ldap/servers/slapd/subentry.c | 64 + ldap/servers/slapd/task.c | 2886 ++ ldap/servers/slapd/tempnam.c | 52 + ldap/servers/slapd/test-plugins/Makefile | 52 + ldap/servers/slapd/test-plugins/Makefile.AIX | 39 + ldap/servers/slapd/test-plugins/Makefile.BSDI | 34 + ldap/servers/slapd/test-plugins/Makefile.HPUX | 28 + .../slapd/test-plugins/Makefile.HPUX64 | 27 + ldap/servers/slapd/test-plugins/Makefile.IRIX | 34 + .../servers/slapd/test-plugins/Makefile.Linux | 34 + ldap/servers/slapd/test-plugins/Makefile.OSF1 | 33 + .../slapd/test-plugins/Makefile.ReliantUNIX | 34 + .../slapd/test-plugins/Makefile.SOLARIS | 31 + .../slapd/test-plugins/Makefile.SOLARIS64 | 31 + .../slapd/test-plugins/Makefile.SOLARISx86 | 34 + .../slapd/test-plugins/Makefile.UnixWare | 34 + .../slapd/test-plugins/Makefile.UnixWareUDK | 34 + .../slapd/test-plugins/Makefile.server | 59 + ldap/servers/slapd/test-plugins/README | 190 + .../servers/slapd/test-plugins/clients/README | 48 + .../slapd/test-plugins/clients/ReqExtOp.java | 80 + .../slapd/test-plugins/clients/reqextop.c | 93 + ldap/servers/slapd/test-plugins/installDse.pl | 138 + ldap/servers/slapd/test-plugins/nicknames | 13 + ldap/servers/slapd/test-plugins/sampletask.c | 211 + ldap/servers/slapd/test-plugins/testbind.c | 258 + .../slapd/test-plugins/testdatainterop.c | 317 + .../slapd/test-plugins/testdbinterop.c | 183 + .../slapd/test-plugins/testdbinterop.h | 29 + ldap/servers/slapd/test-plugins/testentry.c | 135 + .../slapd/test-plugins/testextendedop.c | 193 + ldap/servers/slapd/test-plugins/testgetip.c | 144 + ldap/servers/slapd/test-plugins/testpostop.c | 373 + ldap/servers/slapd/test-plugins/testpreop.c | 243 + .../servers/slapd/test-plugins/testsaslbind.c | 150 + ldap/servers/slapd/thread_data.c | 214 + ldap/servers/slapd/time.c | 676 + ldap/servers/slapd/tools/dbscan.c | 1341 + ldap/servers/slapd/tools/eggencode.c | 65 + ldap/servers/slapd/tools/ldaptool-sasl.c | 338 + ldap/servers/slapd/tools/ldaptool-sasl.h | 45 + ldap/servers/slapd/tools/ldaptool.h | 177 + ldap/servers/slapd/tools/ldclt/README | 1 + ldap/servers/slapd/tools/ldclt/data.c | 404 + .../slapd/tools/ldclt/examples/001/add.ksh | 26 + .../tools/ldclt/examples/001/add_incr.ksh | 29 + .../slapd/tools/ldclt/examples/001/config.ksh | 27 + .../slapd/tools/ldclt/examples/001/delete.ksh | 27 + .../slapd/tools/ldclt/examples/001/env.ksh | 22 + .../slapd/tools/ldclt/examples/001/search.ksh | 27 + .../slapd/tools/ldclt/examples/002/add.ksh | 30 + .../slapd/tools/ldclt/examples/002/config.ksh | 28 + .../slapd/tools/ldclt/examples/002/env.ksh | 22 + .../slapd/tools/ldclt/examples/002/ldif01.ksh | 31 + .../slapd/tools/ldclt/examples/002/ldif02.ksh | 31 + .../slapd/tools/ldclt/examples/002/ldif03.ksh | 31 + .../slapd/tools/ldclt/examples/002/ofile | 12 + .../servers/slapd/tools/ldclt/examples/README | 52 + ldap/servers/slapd/tools/ldclt/ldap-private.h | 297 + ldap/servers/slapd/tools/ldclt/ldapfct.c | 4066 +++ ldap/servers/slapd/tools/ldclt/ldclt.c | 2985 ++ ldap/servers/slapd/tools/ldclt/ldclt.h | 764 + ldap/servers/slapd/tools/ldclt/ldclt.man | 754 + ldap/servers/slapd/tools/ldclt/ldclt.use | 87 + ldap/servers/slapd/tools/ldclt/ldcltU.c | 230 + ldap/servers/slapd/tools/ldclt/opCheck.c | 867 + ldap/servers/slapd/tools/ldclt/parser.c | 540 + ldap/servers/slapd/tools/ldclt/port.c | 85 + ldap/servers/slapd/tools/ldclt/port.h | 60 + ldap/servers/slapd/tools/ldclt/remote.h | 45 + ldap/servers/slapd/tools/ldclt/repcheck.c | 142 + ldap/servers/slapd/tools/ldclt/repslave.c | 321 + ldap/servers/slapd/tools/ldclt/scalab01.c | 1013 + ldap/servers/slapd/tools/ldclt/scalab01.h | 96 + ldap/servers/slapd/tools/ldclt/srv.c | 99 + ldap/servers/slapd/tools/ldclt/threadMain.c | 1161 + ldap/servers/slapd/tools/ldclt/utils.c | 217 + ldap/servers/slapd/tools/ldclt/utils.h | 53 + ldap/servers/slapd/tools/ldclt/version.c | 1 + ldap/servers/slapd/tools/ldclt/workarounds.c | 82 + ldap/servers/slapd/tools/ldif.c | 156 + ldap/servers/slapd/tools/migratecred.c | 160 + ldap/servers/slapd/tools/mkdep.c | 269 + ldap/servers/slapd/tools/mmldif.c | 1731 ++ ldap/servers/slapd/tools/pwenc.c | 442 + ldap/servers/slapd/tools/rsearch/addthread.c | 431 + ldap/servers/slapd/tools/rsearch/addthread.h | 29 + ldap/servers/slapd/tools/rsearch/infadd.c | 332 + ldap/servers/slapd/tools/rsearch/infadd.h | 31 + ldap/servers/slapd/tools/rsearch/main.c | 281 + ldap/servers/slapd/tools/rsearch/nametable.c | 180 + ldap/servers/slapd/tools/rsearch/nametable.h | 41 + ldap/servers/slapd/tools/rsearch/rsearch.c | 514 + ldap/servers/slapd/tools/rsearch/rsearch.h | 55 + .../tools/rsearch/scripts/dbgen-FamilyNames | 13419 +++++++++ .../tools/rsearch/scripts/dbgen-GivenNames | 8606 ++++++ .../tools/rsearch/scripts/dbgen-OrgUnits | 5 + .../slapd/tools/rsearch/scripts/dbgen.pl.in | 1178 + ldap/servers/slapd/tools/rsearch/sdattable.c | 223 + ldap/servers/slapd/tools/rsearch/sdattable.h | 40 + .../slapd/tools/rsearch/searchthread.c | 685 + .../slapd/tools/rsearch/searchthread.h | 28 + ldap/servers/slapd/unbind.c | 92 + ldap/servers/slapd/uniqueid.c | 282 + ldap/servers/slapd/uniqueidgen.c | 223 + ldap/servers/slapd/utf8.c | 280 + ldap/servers/slapd/utf8compare.c | 2315 ++ ldap/servers/slapd/util.c | 1843 ++ ldap/servers/slapd/uuid.c | 908 + ldap/servers/slapd/uuid.h | 119 + ldap/servers/slapd/value.c | 592 + ldap/servers/slapd/valueset.c | 1455 + ldap/servers/slapd/vattr.c | 2415 ++ ldap/servers/slapd/vattr_spi.h | 64 + ldap/servers/slapd/views.h | 37 + ldap/servers/snmp/ldap-agent.c | 760 + ldap/servers/snmp/ldap-agent.conf.in | 30 + ldap/servers/snmp/ldap-agent.h | 192 + ldap/servers/snmp/main.c | 531 + ldap/servers/snmp/redhat-directory.mib | 766 + ldap/systools/README | 31 + ldap/systools/getHPPatches.pl | 91 + ldap/systools/getSolPatches.pl | 72 + ldap/systools/hp_patches.c | 24 + ldap/systools/idsktune.c | 2904 ++ ldap/systools/mergeSolPatches.pl | 65 + ldap/systools/pio.c | 101 + ldap/systools/pio.h | 40 + ldap/systools/sol_patches.c | 183 + ldap/systools/viewcore.c | 470 + lib/base/.cvsignore | 1 + lib/base/crit.cpp | 393 + lib/base/dns.cpp | 142 + lib/base/dnsdmain.cpp | 156 + lib/base/ereport.cpp | 70 + lib/base/file.cpp | 356 + lib/base/fsmutex.cpp | 155 + lib/base/lexer_pvt.h | 38 + lib/base/net.cpp | 66 + lib/base/nscperror.c | 170 + lib/base/plist.cpp | 1163 + lib/base/plist_pvt.h | 127 + lib/base/pool.cpp | 628 + lib/base/shexp.cpp | 290 + lib/base/system.cpp | 244 + lib/base/systhr.cpp | 180 + lib/base/util.cpp | 475 + lib/ldaputil/.cvsignore | 1 + lib/ldaputil/cert.c | 468 + lib/ldaputil/certmap.c | 1630 + lib/ldaputil/certmap.conf | 51 + lib/ldaputil/dbconf.c | 662 + lib/ldaputil/encode.c | 150 + lib/ldaputil/errors.c | 210 + lib/ldaputil/examples/Makefile | 89 + lib/ldaputil/examples/README | 100 + lib/ldaputil/examples/init.c | 43 + lib/ldaputil/examples/plugin.c | 243 + lib/ldaputil/examples/plugin.h | 41 + lib/ldaputil/init.c | 191 + lib/ldaputil/ldapauth.c | 217 + lib/ldaputil/ldapu-changes.html | 406 + lib/ldaputil/ldaputili.h | 70 + lib/ldaputil/vtable.c | 213 + lib/libaccess/.cvsignore | 1 + lib/libaccess/access_plhash.cpp | 73 + lib/libaccess/access_plhash.h | 25 + lib/libaccess/acl.tab.cpp | 1703 ++ lib/libaccess/acl.tab.h | 52 + lib/libaccess/acl.yy.cpp | 2005 ++ lib/libaccess/aclcache.cpp | 492 + lib/libaccess/aclcache.h | 34 + lib/libaccess/aclerror.cpp | 254 + lib/libaccess/acleval.cpp | 564 + lib/libaccess/aclflush.cpp | 185 + lib/libaccess/aclpriv.h | 180 + lib/libaccess/aclscan.h | 34 + lib/libaccess/aclscan.l | 379 + lib/libaccess/aclspace.cpp | 45 + lib/libaccess/acltext.y | 928 + lib/libaccess/acltools.cpp | 1749 ++ lib/libaccess/aclutil.cpp | 234 + lib/libaccess/aclutil.h | 33 + lib/libaccess/authdb.cpp | 231 + lib/libaccess/las.h | 61 + lib/libaccess/lasdns.cpp | 382 + lib/libaccess/lasdns.h | 18 + lib/libaccess/lasgroup.cpp | 174 + lib/libaccess/lasip.cpp | 734 + lib/libaccess/lasip.h | 22 + lib/libaccess/lastod.cpp | 187 + lib/libaccess/lasuser.cpp | 162 + lib/libaccess/ldapauth.h | 50 + lib/libaccess/method.cpp | 171 + lib/libaccess/nsautherr.cpp | 134 + lib/libaccess/nseframe.cpp | 216 + lib/libaccess/oneeval.cpp | 1057 + lib/libaccess/oneeval.h | 25 + lib/libaccess/parse.h | 29 + lib/libaccess/permhash.h | 79 + lib/libaccess/register.cpp | 871 + lib/libaccess/symbols.cpp | 353 + lib/libaccess/usi.cpp | 379 + lib/libaccess/usrcache.cpp | 654 + lib/libaccess/yy-sed | 24 + lib/libadmin/.cvsignore | 1 + lib/libadmin/error.c | 102 + lib/libadmin/template.c | 70 + lib/libadmin/util.c | 187 + lib/libsi18n/getstrmem.h | 1155 + lib/libsi18n/getstrprop.c | 87 + lib/libsi18n/gsslapd.h | 34 + lib/libsi18n/makstrdb.c | 216 + lib/libsi18n/reshash.c | 287 + lib/libsi18n/reshash.h | 62 + lib/libsi18n/txtfile.c | 138 + lib/libsi18n/txtfile.h | 53 + ltmain.sh | 11147 +++++++ m4/db.m4 | 126 + m4/fhs.m4 | 40 + m4/icu.m4 | 94 + m4/kerberos.m4 | 187 + m4/libtool.m4 | 8372 ++++++ m4/ltoptions.m4 | 437 + m4/ltsugar.m4 | 124 + m4/ltversion.m4 | 23 + m4/lt~obsolete.m4 | 99 + m4/mozldap.m4 | 164 + m4/netsnmp.m4 | 96 + m4/nspr.m4 | 88 + m4/nss.m4 | 88 + m4/nunc-stans.m4 | 63 + m4/openldap.m4 | 151 + m4/pcre.m4 | 80 + m4/sasl.m4 | 95 + m4/selinux.m4 | 23 + m4/svrcore.m4 | 109 + m4/systemd.m4 | 123 + man/man1/cl-dump.1 | 96 + man/man1/dbgen.pl.1 | 93 + man/man1/dbscan.1 | 106 + man/man1/ds-logpipe.py.1 | 100 + man/man1/dsktune.1 | 64 + man/man1/infadd.1 | 82 + man/man1/ldap-agent.1 | 59 + man/man1/ldclt.1 | 235 + man/man1/ldif.1 | 55 + man/man1/logconv.pl.1 | 139 + man/man1/migratecred.1 | 65 + man/man1/mmldif.1 | 61 + man/man1/pwdhash.1 | 62 + man/man1/readnsstate.1 | 50 + man/man1/repl-monitor.1 | 138 + man/man1/rsearch.1 | 138 + man/man8/bak2db.8 | 58 + man/man8/bak2db.pl.8 | 82 + man/man8/cleanallruv.pl.8 | 85 + man/man8/db2bak.8 | 59 + man/man8/db2bak.pl.8 | 81 + man/man8/db2index.8 | 63 + man/man8/db2index.pl.8 | 85 + man/man8/db2ldif.8 | 102 + man/man8/db2ldif.pl.8 | 124 + man/man8/dbmon.sh.8 | 54 + man/man8/dbverify.8 | 63 + man/man8/dn2rdn.8 | 58 + man/man8/fixup-linkedattrs.pl.8 | 76 + man/man8/fixup-memberof.pl.8 | 80 + man/man8/ldif2db.8 | 85 + man/man8/ldif2db.pl.8 | 102 + man/man8/ldif2ldap.8 | 62 + man/man8/migrate-ds.pl.8 | 164 + man/man8/monitor.8 | 67 + man/man8/ns-accountstatus.pl.8 | 95 + man/man8/ns-activate.pl.8 | 73 + man/man8/ns-inactivate.pl.8 | 72 + man/man8/ns-newpwpolicy.pl.8 | 79 + man/man8/ns-slapd.8 | 60 + man/man8/remove-ds.pl.8 | 58 + man/man8/restart-dirsrv.8 | 50 + man/man8/restoreconfig.8 | 48 + man/man8/saveconfig.8 | 48 + man/man8/schema-reload.pl.8 | 74 + man/man8/setup-ds.pl.8 | 116 + man/man8/start-dirsrv.8 | 50 + man/man8/status-dirsrv.8 | 55 + man/man8/stop-dirsrv.8 | 50 + man/man8/suffix2instance.8 | 51 + man/man8/syntax-validate.pl.8 | 77 + man/man8/upgradedb.8 | 56 + man/man8/upgradednformat.8 | 55 + man/man8/usn-tombstone-cleanup.pl.8 | 80 + man/man8/verify-db.pl.8 | 49 + man/man8/vlvindex.8 | 58 + missing | 215 + rpm.mk | 86 + rpm/389-ds-base-devel.README | 4 + rpm/389-ds-base-git.sh | 16 + rpm/389-ds-base.spec.in | 1771 ++ rpm/add_patches.sh | 55 + rpm/rpmverrel.sh | 17 + selinux/Makefile | 17 + selinux/dirsrv.fc.in | 24 + selinux/dirsrv.if | 193 + selinux/dirsrv.te | 212 + slapi.doxy | 1417 + wrappers/cl-dump.in | 28 + wrappers/dbscan.in | 64 + wrappers/ds_systemd_ask_password_acl.in | 34 + wrappers/dsktune.in | 58 + wrappers/infadd.in | 66 + wrappers/initscript.in | 360 + wrappers/ldap-agent-initscript.in | 227 + wrappers/ldap-agent.in | 69 + wrappers/ldclt.in | 68 + wrappers/ldif.in | 66 + wrappers/migratecred.in | 68 + wrappers/mmldif.in | 68 + wrappers/pwdhash.in | 68 + wrappers/repl-monitor.in | 28 + wrappers/rsearch.in | 66 + wrappers/systemd-snmp.service.in | 16 + wrappers/systemd.group.in | 6 + wrappers/systemd.template.asan.service.in | 36 + wrappers/systemd.template.service.in | 33 + wrappers/systemd.template.sysconfig | 6 + 1416 files changed, 655649 insertions(+) create mode 100644 .cvsignore create mode 100644 .gitignore create mode 100644 389-doap.rdf create mode 100644 LICENSE create mode 100644 LICENSE.GPLv3+ create mode 100644 LICENSE.openssl create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 README create mode 100644 VERSION.sh create mode 100644 aclocal.m4 create mode 100755 autogen.sh create mode 100755 buildnum.pl create mode 100755 compile create mode 100755 config.guess create mode 100644 config.h.in create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.ac create mode 100755 depcomp create mode 100644 dirsrv.pc.in create mode 100644 dirsrvtests/README create mode 100644 dirsrvtests/__init__.py create mode 100644 dirsrvtests/cmd/__init__.py create mode 100644 dirsrvtests/cmd/dsadm/__init__.py create mode 100755 dirsrvtests/cmd/dsadm/dsadm.py create mode 100755 dirsrvtests/create_test.py create mode 100644 dirsrvtests/tests/data/README create mode 100644 dirsrvtests/tests/data/__init__.py create mode 100644 dirsrvtests/tests/data/basic/__init__.py create mode 100644 dirsrvtests/tests/data/basic/dse.ldif.broken create mode 100644 dirsrvtests/tests/data/ticket47953/__init__.py create mode 100644 dirsrvtests/tests/data/ticket47953/ticket47953.ldif create mode 100644 dirsrvtests/tests/data/ticket47988/__init__.py create mode 100644 dirsrvtests/tests/data/ticket47988/schema_ipa3.3.tar.gz create mode 100644 dirsrvtests/tests/data/ticket47988/schema_ipa4.1.tar.gz create mode 100644 dirsrvtests/tests/data/ticket48212/__init__.py create mode 100644 dirsrvtests/tests/data/ticket48212/example1k_posix.ldif create mode 100644 dirsrvtests/tests/data/ticket49121/utf8str.txt create mode 100644 dirsrvtests/tests/stress/README create mode 100644 dirsrvtests/tests/stress/__init__.py create mode 100644 dirsrvtests/tests/stress/reliabilty/__init__.py create mode 100644 dirsrvtests/tests/stress/reliabilty/reliab_7_5_test.py create mode 100644 dirsrvtests/tests/stress/reliabilty/reliab_conn_test.py create mode 100644 dirsrvtests/tests/stress/replication/mmr_01_4m-2h-4c_test.py create mode 100644 dirsrvtests/tests/stress/replication/mmr_01_4m_test.py create mode 100644 dirsrvtests/tests/suites/__init__.py create mode 100644 dirsrvtests/tests/suites/acct_usability_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/acct_usability_plugin/acct_usability_test.py create mode 100644 dirsrvtests/tests/suites/acctpolicy_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/acctpolicy_plugin/acctpolicy_test.py create mode 100644 dirsrvtests/tests/suites/acl/__init__.py create mode 100644 dirsrvtests/tests/suites/acl/acl_test.py create mode 100644 dirsrvtests/tests/suites/attr_encryption/__init__.py create mode 100644 dirsrvtests/tests/suites/attr_encryption/attr_encrypt_test.py create mode 100644 dirsrvtests/tests/suites/attr_uniqueness_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/attr_uniqueness_plugin/attr_uniqueness_test.py create mode 100644 dirsrvtests/tests/suites/automember_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/automember_plugin/automember_test.py create mode 100644 dirsrvtests/tests/suites/basic/__init__.py create mode 100644 dirsrvtests/tests/suites/basic/basic_test.py create mode 100644 dirsrvtests/tests/suites/betxns/__init__.py create mode 100644 dirsrvtests/tests/suites/betxns/betxn_test.py create mode 100644 dirsrvtests/tests/suites/chaining_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/chaining_plugin/chaining_test.py create mode 100644 dirsrvtests/tests/suites/clu/__init__.py create mode 100644 dirsrvtests/tests/suites/clu/clu_test.py create mode 100644 dirsrvtests/tests/suites/clu/db2ldif_test.py create mode 100644 dirsrvtests/tests/suites/collation_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/collation_plugin/collatation_test.py create mode 100644 dirsrvtests/tests/suites/config/__init__.py create mode 100644 dirsrvtests/tests/suites/config/config_test.py create mode 100644 dirsrvtests/tests/suites/cos_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/cos_plugin/cos_test.py create mode 100644 dirsrvtests/tests/suites/deref_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/deref_plugin/deref_test.py create mode 100644 dirsrvtests/tests/suites/disk_monitoring/__init__.py create mode 100644 dirsrvtests/tests/suites/disk_monitoring/disk_monitor_test.py create mode 100644 dirsrvtests/tests/suites/distrib_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/distrib_plugin/distrib_test.py create mode 100644 dirsrvtests/tests/suites/dna_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/dna_plugin/dna_test.py create mode 100644 dirsrvtests/tests/suites/ds_logs/__init__.py create mode 100644 dirsrvtests/tests/suites/ds_logs/ds_logs_test.py create mode 100644 dirsrvtests/tests/suites/dynamic-plugins/__init__.py create mode 100644 dirsrvtests/tests/suites/dynamic-plugins/plugin_tests.py create mode 100644 dirsrvtests/tests/suites/dynamic-plugins/stress_tests.py create mode 100644 dirsrvtests/tests/suites/dynamic-plugins/test_dynamic_plugins.py create mode 100644 dirsrvtests/tests/suites/filter/__init__.py create mode 100644 dirsrvtests/tests/suites/filter/filter_test.py create mode 100644 dirsrvtests/tests/suites/filter/rfc3673_all_oper_attrs_test.py create mode 100644 dirsrvtests/tests/suites/get_effective_rights/__init__.py create mode 100644 dirsrvtests/tests/suites/get_effective_rights/ger_test.py create mode 100644 dirsrvtests/tests/suites/gssapi_repl/gssapi_repl_test.py create mode 100644 dirsrvtests/tests/suites/ldapi/__init__.py create mode 100644 dirsrvtests/tests/suites/ldapi/ldapi_test.py create mode 100644 dirsrvtests/tests/suites/linkedattrs_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/linkedattrs_plugin/linked_attrs_test.py create mode 100644 dirsrvtests/tests/suites/mapping_tree/__init__.py create mode 100644 dirsrvtests/tests/suites/mapping_tree/mapping_tree_test.py create mode 100644 dirsrvtests/tests/suites/memberof_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/memberof_plugin/memberof_test.py create mode 100644 dirsrvtests/tests/suites/memory_leaks/__init__.py create mode 100644 dirsrvtests/tests/suites/memory_leaks/range_search_test.py create mode 100644 dirsrvtests/tests/suites/mep_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/monitor/__init__.py create mode 100644 dirsrvtests/tests/suites/monitor/monitor_test.py create mode 100644 dirsrvtests/tests/suites/paged_results/__init__.py create mode 100644 dirsrvtests/tests/suites/paged_results/paged_results_test.py create mode 100644 dirsrvtests/tests/suites/paged_results/sss_control.py create mode 100644 dirsrvtests/tests/suites/pam_passthru_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/pam_passthru_plugin/pam_test.py create mode 100644 dirsrvtests/tests/suites/passthru_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/passthru_plugin/passthru_test.py create mode 100644 dirsrvtests/tests/suites/password/__init__.py create mode 100644 dirsrvtests/tests/suites/password/password_test.py create mode 100644 dirsrvtests/tests/suites/password/pwdAdmin_test.py create mode 100644 dirsrvtests/tests/suites/password/pwdPolicy_attribute_test.py create mode 100644 dirsrvtests/tests/suites/password/pwdPolicy_syntax_test.py create mode 100644 dirsrvtests/tests/suites/password/pwdPolicy_warning_test.py create mode 100644 dirsrvtests/tests/suites/password/pwd_algo_test.py create mode 100644 dirsrvtests/tests/suites/password/pwp_history_test.py create mode 100644 dirsrvtests/tests/suites/posix_winsync_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/posix_winsync_plugin/posix_winsync_test.py create mode 100644 dirsrvtests/tests/suites/psearch/__init__.py create mode 100644 dirsrvtests/tests/suites/psearch/psearch_test.py create mode 100644 dirsrvtests/tests/suites/referint_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/referint_plugin/referint_test.py create mode 100644 dirsrvtests/tests/suites/replication/__init__.py create mode 100644 dirsrvtests/tests/suites/replication/cleanallruv_test.py create mode 100644 dirsrvtests/tests/suites/replication/wait_for_async_feature_test.py create mode 100644 dirsrvtests/tests/suites/replsync_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/replsync_plugin/repl_sync_test.py create mode 100644 dirsrvtests/tests/suites/resource_limits/__init__.py create mode 100644 dirsrvtests/tests/suites/resource_limits/res_limits_test.py create mode 100644 dirsrvtests/tests/suites/retrocl_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/retrocl_plugin/retrocl_test.py create mode 100644 dirsrvtests/tests/suites/reverpwd_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/reverpwd_plugin/reverpwd_test.py create mode 100644 dirsrvtests/tests/suites/roles_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/roles_plugin/roles_test.py create mode 100644 dirsrvtests/tests/suites/rootdn_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/rootdn_plugin/rootdn_plugin_test.py create mode 100644 dirsrvtests/tests/suites/sasl/__init__.py create mode 100644 dirsrvtests/tests/suites/sasl/sasl_test.py create mode 100644 dirsrvtests/tests/suites/schema/__init__.py create mode 100644 dirsrvtests/tests/suites/schema/test_schema.py create mode 100644 dirsrvtests/tests/suites/schema_reload_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/schema_reload_plugin/schema_reload_test.py create mode 100644 dirsrvtests/tests/suites/snmp/__init__.py create mode 100644 dirsrvtests/tests/suites/snmp/snmp_test.py create mode 100644 dirsrvtests/tests/suites/ssl/__init__.py create mode 100644 dirsrvtests/tests/suites/ssl/ssl_test.py create mode 100644 dirsrvtests/tests/suites/syntax_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/syntax_plugin/syntax_test.py create mode 100644 dirsrvtests/tests/suites/usn_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/usn_plugin/usn_test.py create mode 100644 dirsrvtests/tests/suites/views_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/views_plugin/views_test.py create mode 100644 dirsrvtests/tests/suites/vlv/__init__.py create mode 100644 dirsrvtests/tests/suites/vlv/vlv_test.py create mode 100644 dirsrvtests/tests/suites/whoami_plugin/__init__.py create mode 100644 dirsrvtests/tests/suites/whoami_plugin/whoami_test.py create mode 100644 dirsrvtests/tests/tickets/__init__.py create mode 100644 dirsrvtests/tests/tickets/finalizer.py create mode 100644 dirsrvtests/tests/tickets/issue48989_test.py create mode 100644 dirsrvtests/tests/tickets/ticket1347760_test.py create mode 100644 dirsrvtests/tests/tickets/ticket142_test.py create mode 100644 dirsrvtests/tests/tickets/ticket365_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47313_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47384_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47431_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47462_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47490_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47536_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47553_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47560_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47573_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47619_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47640_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47653MMR_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47653_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47669_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47676_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47714_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47721_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47781_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47787_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47808_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47815_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47819_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47823_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47828_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47829_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47833_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47838_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47869MMR_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47871_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47900_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47910_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47920_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47921_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47927_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47931_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47937_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47950_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47953_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47963_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47966_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47970_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47973_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47976_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47980_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47981_test.py create mode 100644 dirsrvtests/tests/tickets/ticket47988_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48005_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48013_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48026_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48109_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48170_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48194_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48212_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48214_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48226_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48228_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48233_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48234_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48252_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48265_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48266_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48270_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48294_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48295_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48312_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48325_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48342_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48354_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48362_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48366_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48370_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48383_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48497_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48637_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48665_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48745_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48746_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48755_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48759_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48784_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48798_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48799_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48808_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48844_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48891_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48893_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48916_test.py create mode 100644 dirsrvtests/tests/tickets/ticket48956_test.py create mode 100644 dirsrvtests/tests/tickets/ticket49039_test.py create mode 100644 dirsrvtests/tests/tickets/ticket49095_test.py create mode 100644 dirsrvtests/tests/tickets/ticket49104_test.py create mode 100644 dirsrvtests/tests/tickets/ticket49121_test.py create mode 100644 dirsrvtests/tests/tickets/ticket49122_test.py create mode 100644 dirsrvtests/tests/tickets/ticket548_test.py create mode 100644 dirsrvtests/tests/tmp/README create mode 100644 dirsrvtests/tickets/ticket47966_test.py create mode 100644 include/base/crit.h create mode 100644 include/base/dbtbase.h create mode 100644 include/base/ereport.h create mode 100644 include/base/file.h create mode 100644 include/base/fsmutex.h create mode 100644 include/base/plist.h create mode 100644 include/base/pool.h create mode 100644 include/base/shexp.h create mode 100644 include/base/systems.h create mode 100644 include/base/systhr.h create mode 100644 include/base/util.h create mode 100644 include/i18n.h create mode 100644 include/ldaputil/cert.h create mode 100644 include/ldaputil/certmap.h create mode 100644 include/ldaputil/dbconf.h create mode 100644 include/ldaputil/encode.h create mode 100644 include/ldaputil/errors.h create mode 100644 include/ldaputil/extcmap.h create mode 100644 include/ldaputil/init.h create mode 100644 include/ldaputil/ldapauth.h create mode 100644 include/ldaputil/ldaputil.h create mode 100644 include/libaccess/acl.h create mode 100644 include/libaccess/aclerror.h create mode 100644 include/libaccess/acleval.h create mode 100644 include/libaccess/aclglobal.h create mode 100644 include/libaccess/aclproto.h create mode 100644 include/libaccess/aclstruct.h create mode 100644 include/libaccess/attrec.h create mode 100644 include/libaccess/authdb.h create mode 100644 include/libaccess/dbtlibaccess.h create mode 100644 include/libaccess/dnfstruct.h create mode 100644 include/libaccess/ipfstruct.h create mode 100644 include/libaccess/las.h create mode 100644 include/libaccess/nsauth.h create mode 100644 include/libaccess/nsautherr.h create mode 100644 include/libaccess/nserror.h create mode 100644 include/libaccess/symbols.h create mode 100644 include/libaccess/userauth.h create mode 100644 include/libaccess/usi.h create mode 100644 include/libaccess/usrcache.h create mode 100644 include/libadmin/dbtlibadmin.h create mode 100644 include/libadmin/libadmin.h create mode 100644 include/netsite.h create mode 100644 include/public/base/systems.h create mode 100644 include/public/netsite.h create mode 100644 include/public/nsacl/aclapi.h create mode 100644 include/public/nsacl/acldef.h create mode 100644 include/public/nsacl/nserrdef.h create mode 100644 include/public/nsacl/plistdef.h create mode 100644 include/public/nsapi.h create mode 100755 install-sh create mode 100644 ldap/admin/src/base-initconfig.in create mode 100644 ldap/admin/src/defaults.inf.in create mode 100644 ldap/admin/src/initconfig.in create mode 100755 ldap/admin/src/logconv.pl create mode 100644 ldap/admin/src/makemccvlvindexes create mode 100644 ldap/admin/src/makevlvindex create mode 100644 ldap/admin/src/makevlvsearch create mode 100644 ldap/admin/src/scripts/10cleanupldapi.pl create mode 100644 ldap/admin/src/scripts/10delautodnsuffix.pl create mode 100644 ldap/admin/src/scripts/10fixrundir.pl create mode 100644 ldap/admin/src/scripts/20betxn.pl create mode 100644 ldap/admin/src/scripts/50AES-pbe-plugin.ldif create mode 100644 ldap/admin/src/scripts/50acctusabilityplugin.ldif create mode 100644 ldap/admin/src/scripts/50addchainingsaslpwroles.ldif create mode 100644 ldap/admin/src/scripts/50automemberplugin.ldif create mode 100644 ldap/admin/src/scripts/50bitstringsyntaxplugin.ldif create mode 100644 ldap/admin/src/scripts/50contentsync.ldif create mode 100644 ldap/admin/src/scripts/50deliverymethodsyntaxplugin.ldif create mode 100644 ldap/admin/src/scripts/50derefplugin.ldif create mode 100644 ldap/admin/src/scripts/50disableurisyntaxplugin.ldif create mode 100644 ldap/admin/src/scripts/50enhancedguidesyntaxplugin.ldif create mode 100644 ldap/admin/src/scripts/50entryusnindex.ldif create mode 100644 ldap/admin/src/scripts/50faxnumbersyntaxplugin.ldif create mode 100644 ldap/admin/src/scripts/50faxsyntaxplugin.ldif create mode 100644 ldap/admin/src/scripts/50fixNsState.pl create mode 100644 ldap/admin/src/scripts/50guidesyntaxplugin.ldif create mode 100644 ldap/admin/src/scripts/50linkedattrsplugin.ldif create mode 100644 ldap/admin/src/scripts/50managedentriesplugin.ldif create mode 100644 ldap/admin/src/scripts/50memberofindex.ldif create mode 100644 ldap/admin/src/scripts/50memberofplugin.ldif create mode 100644 ldap/admin/src/scripts/50nameuidsyntaxplugin.ldif create mode 100644 ldap/admin/src/scripts/50nstombstonecsn.ldif create mode 100644 ldap/admin/src/scripts/50numericstringsyntaxplugin.ldif create mode 100644 ldap/admin/src/scripts/50printablestringsyntaxplugin.ldif create mode 100644 ldap/admin/src/scripts/50refintprecedence.ldif create mode 100644 ldap/admin/src/scripts/50retroclprecedence.ldif create mode 100644 ldap/admin/src/scripts/50rootdnaccesscontrolplugin.ldif create mode 100644 ldap/admin/src/scripts/50schemareloadplugin.ldif create mode 100644 ldap/admin/src/scripts/50smd5pwdstorageplugin.ldif create mode 100644 ldap/admin/src/scripts/50syntaxvalidplugin.ldif create mode 100644 ldap/admin/src/scripts/50targetuniqueid.ldif create mode 100644 ldap/admin/src/scripts/50teletexterminalidsyntaxplugin.ldif create mode 100644 ldap/admin/src/scripts/50telexnumbersyntaxplugin.ldif create mode 100644 ldap/admin/src/scripts/50updateconfig.ldif create mode 100644 ldap/admin/src/scripts/50usnplugin.ldif create mode 100644 ldap/admin/src/scripts/52updateAESplugin.pl create mode 100644 ldap/admin/src/scripts/60upgradeconfigfiles.pl create mode 100644 ldap/admin/src/scripts/60upgradeschemafiles.pl create mode 100644 ldap/admin/src/scripts/70upgradefromldif.pl create mode 100644 ldap/admin/src/scripts/80upgradednformat.pl.in create mode 100644 ldap/admin/src/scripts/81changelog.pl create mode 100644 ldap/admin/src/scripts/82targetuniqueidindex.pl create mode 100644 ldap/admin/src/scripts/90subtreerename.pl create mode 100644 ldap/admin/src/scripts/91reindex.pl.in create mode 100644 ldap/admin/src/scripts/91subtreereindex.pl create mode 100644 ldap/admin/src/scripts/DSCreate.pm.in create mode 100644 ldap/admin/src/scripts/DSDialogs.pm create mode 100644 ldap/admin/src/scripts/DSMigration.pm.in create mode 100644 ldap/admin/src/scripts/DSSharedLib.in create mode 100644 ldap/admin/src/scripts/DSUpdate.pm.in create mode 100644 ldap/admin/src/scripts/DSUpdateDialogs.pm create mode 100644 ldap/admin/src/scripts/DSUtil.pm.in create mode 100644 ldap/admin/src/scripts/Dialog.pm create mode 100644 ldap/admin/src/scripts/DialogManager.pm.in create mode 100644 ldap/admin/src/scripts/FileConn.pm create mode 100644 ldap/admin/src/scripts/Inf.pm create mode 100644 ldap/admin/src/scripts/Migration.pm.in create mode 100644 ldap/admin/src/scripts/Resource.pm create mode 100644 ldap/admin/src/scripts/Setup.pm.in create mode 100644 ldap/admin/src/scripts/SetupDialogs.pm.in create mode 100644 ldap/admin/src/scripts/SetupLog.pm create mode 100755 ldap/admin/src/scripts/bak2db.in create mode 100644 ldap/admin/src/scripts/bak2db.pl.in create mode 100755 ldap/admin/src/scripts/cl-dump.pl create mode 100644 ldap/admin/src/scripts/cleanallruv.pl.in create mode 100755 ldap/admin/src/scripts/db2bak.in create mode 100644 ldap/admin/src/scripts/db2bak.pl.in create mode 100755 ldap/admin/src/scripts/db2index.in create mode 100644 ldap/admin/src/scripts/db2index.pl.in create mode 100755 ldap/admin/src/scripts/db2ldif.in create mode 100644 ldap/admin/src/scripts/db2ldif.pl.in create mode 100644 ldap/admin/src/scripts/dbmon.sh.in create mode 100755 ldap/admin/src/scripts/dbverify.in create mode 100755 ldap/admin/src/scripts/dn2rdn.in create mode 100644 ldap/admin/src/scripts/dnaplugindepends.ldif create mode 100644 ldap/admin/src/scripts/ds-logpipe.py create mode 100755 ldap/admin/src/scripts/ds_selinux_enabled.in create mode 100644 ldap/admin/src/scripts/ds_selinux_port_query.in create mode 100644 ldap/admin/src/scripts/dscreate.map.in create mode 100644 ldap/admin/src/scripts/dsorgentries.map.in create mode 100644 ldap/admin/src/scripts/dsupdate.map.in create mode 100644 ldap/admin/src/scripts/exampleupdate.ldif create mode 100644 ldap/admin/src/scripts/exampleupdate.pl create mode 100644 ldap/admin/src/scripts/exampleupdate.sh create mode 100644 ldap/admin/src/scripts/failedbinds.py create mode 100644 ldap/admin/src/scripts/fixup-linkedattrs.pl.in create mode 100644 ldap/admin/src/scripts/fixup-memberof.pl.in create mode 100755 ldap/admin/src/scripts/ldif2db.in create mode 100644 ldap/admin/src/scripts/ldif2db.pl.in create mode 100755 ldap/admin/src/scripts/ldif2ldap.in create mode 100644 ldap/admin/src/scripts/logregex.py create mode 100644 ldap/admin/src/scripts/migrate-ds.pl.in create mode 100644 ldap/admin/src/scripts/migrate-ds.res create mode 100755 ldap/admin/src/scripts/monitor.in create mode 100644 ldap/admin/src/scripts/ns-accountstatus.pl.in create mode 100644 ldap/admin/src/scripts/ns-activate.pl.in create mode 100644 ldap/admin/src/scripts/ns-inactivate.pl.in create mode 100755 ldap/admin/src/scripts/ns-newpwpolicy.pl.in create mode 100644 ldap/admin/src/scripts/readnsstate.in create mode 100755 ldap/admin/src/scripts/remove-ds.pl.in create mode 100755 ldap/admin/src/scripts/repl-monitor.pl.in create mode 100644 ldap/admin/src/scripts/restart-dirsrv.in create mode 100755 ldap/admin/src/scripts/restoreconfig.in create mode 100755 ldap/admin/src/scripts/saveconfig.in create mode 100644 ldap/admin/src/scripts/schema-reload.pl.in create mode 100644 ldap/admin/src/scripts/setup-ds.pl.in create mode 100644 ldap/admin/src/scripts/setup-ds.res.in create mode 100755 ldap/admin/src/scripts/start-dirsrv.in create mode 100755 ldap/admin/src/scripts/status-dirsrv.in create mode 100755 ldap/admin/src/scripts/stop-dirsrv.in create mode 100755 ldap/admin/src/scripts/suffix2instance.in create mode 100644 ldap/admin/src/scripts/syntax-validate.pl.in create mode 100755 ldap/admin/src/scripts/template-bak2db.in create mode 100644 ldap/admin/src/scripts/template-bak2db.pl.in create mode 100644 ldap/admin/src/scripts/template-cleanallruv.pl.in create mode 100755 ldap/admin/src/scripts/template-db2bak.in create mode 100644 ldap/admin/src/scripts/template-db2bak.pl.in create mode 100755 ldap/admin/src/scripts/template-db2index.in create mode 100644 ldap/admin/src/scripts/template-db2index.pl.in create mode 100755 ldap/admin/src/scripts/template-db2ldif.in create mode 100644 ldap/admin/src/scripts/template-db2ldif.pl.in create mode 100755 ldap/admin/src/scripts/template-dbverify.in create mode 100755 ldap/admin/src/scripts/template-dn2rdn.in create mode 100644 ldap/admin/src/scripts/template-fixup-linkedattrs.pl.in create mode 100644 ldap/admin/src/scripts/template-fixup-memberof.pl.in create mode 100644 ldap/admin/src/scripts/template-fixup-memberuid.pl.in create mode 100755 ldap/admin/src/scripts/template-ldif2db.in create mode 100644 ldap/admin/src/scripts/template-ldif2db.pl.in create mode 100755 ldap/admin/src/scripts/template-ldif2ldap.in create mode 100755 ldap/admin/src/scripts/template-monitor.in create mode 100644 ldap/admin/src/scripts/template-ns-accountstatus.pl.in create mode 100644 ldap/admin/src/scripts/template-ns-activate.pl.in create mode 100644 ldap/admin/src/scripts/template-ns-inactivate.pl.in create mode 100755 ldap/admin/src/scripts/template-ns-newpwpolicy.pl.in create mode 100644 ldap/admin/src/scripts/template-restart-slapd.in create mode 100755 ldap/admin/src/scripts/template-restoreconfig.in create mode 100755 ldap/admin/src/scripts/template-saveconfig.in create mode 100644 ldap/admin/src/scripts/template-schema-reload.pl.in create mode 100755 ldap/admin/src/scripts/template-start-slapd.in create mode 100755 ldap/admin/src/scripts/template-stop-slapd.in create mode 100755 ldap/admin/src/scripts/template-suffix2instance.in create mode 100644 ldap/admin/src/scripts/template-syntax-validate.pl.in create mode 100755 ldap/admin/src/scripts/template-upgradedb.in create mode 100755 ldap/admin/src/scripts/template-upgradednformat.in create mode 100644 ldap/admin/src/scripts/template-usn-tombstone-cleanup.pl.in create mode 100644 ldap/admin/src/scripts/template-verify-db.pl.in create mode 100755 ldap/admin/src/scripts/template-vlvindex.in create mode 100755 ldap/admin/src/scripts/upgradedb.in create mode 100755 ldap/admin/src/scripts/upgradednformat.in create mode 100644 ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in create mode 100644 ldap/admin/src/scripts/verify-db.pl.in create mode 100755 ldap/admin/src/scripts/vlvindex.in create mode 100644 ldap/admin/src/slapd.inf.in create mode 100644 ldap/admin/src/template-initconfig.in create mode 100755 ldap/admin/src/upgradeServer create mode 100644 ldap/include/avl.h create mode 100644 ldap/include/dblayer.h create mode 100644 ldap/include/disptmpl.h create mode 100644 ldap/include/ldaplog.h create mode 100644 ldap/include/ldaprot.h create mode 100644 ldap/include/ldbm.h create mode 100644 ldap/include/portable.h create mode 100644 ldap/include/regex.h create mode 100644 ldap/include/srchpref.h create mode 100644 ldap/include/sysexits-compat.h create mode 100644 ldap/ldif/50posix-winsync-plugin.ldif create mode 100644 ldap/ldif/50replication-plugins.ldif create mode 100644 ldap/ldif/90betxn-plugins.ldif create mode 100644 ldap/ldif/Ace.ldif create mode 100644 ldap/ldif/European.ldif create mode 100644 ldap/ldif/Eurosuffix.ldif create mode 100644 ldap/ldif/Example-roles.ldif create mode 100644 ldap/ldif/Example-views.ldif create mode 100644 ldap/ldif/Example.ldif create mode 100644 ldap/ldif/template-baseacis.ldif.in create mode 100644 ldap/ldif/template-bitwise.ldif.in create mode 100644 ldap/ldif/template-country.ldif.in create mode 100644 ldap/ldif/template-dnaplugin.ldif.in create mode 100644 ldap/ldif/template-domain.ldif.in create mode 100644 ldap/ldif/template-dse.ldif.in create mode 100644 ldap/ldif/template-ldapi-autobind.ldif.in create mode 100644 ldap/ldif/template-ldapi-default.ldif.in create mode 100644 ldap/ldif/template-ldapi.ldif.in create mode 100644 ldap/ldif/template-locality.ldif.in create mode 100644 ldap/ldif/template-org.ldif.in create mode 100644 ldap/ldif/template-orgunit.ldif.in create mode 100644 ldap/ldif/template-pampta.ldif.in create mode 100644 ldap/ldif/template-sasl.ldif.in create mode 100644 ldap/ldif/template-state.ldif.in create mode 100644 ldap/ldif/template-suffix-db.ldif.in create mode 100644 ldap/ldif/template.ldif create mode 100644 ldap/libraries/libavl/avl.c create mode 100644 ldap/libraries/libavl/testavl.c create mode 100644 ldap/schema/00core.ldif create mode 100644 ldap/schema/01core389.ldif create mode 100644 ldap/schema/02common.ldif create mode 100644 ldap/schema/05rfc2927.ldif create mode 100644 ldap/schema/05rfc4523.ldif create mode 100644 ldap/schema/05rfc4524.ldif create mode 100644 ldap/schema/06inetorgperson.ldif create mode 100644 ldap/schema/10automember-plugin.ldif create mode 100644 ldap/schema/10dna-plugin.ldif create mode 100644 ldap/schema/10mep-plugin.ldif create mode 100644 ldap/schema/10presence.ldif create mode 100644 ldap/schema/10rfc2307.ldif create mode 100644 ldap/schema/10rfc2307bis.ldif create mode 100644 ldap/schema/20subscriber.ldif create mode 100644 ldap/schema/25java-object.ldif create mode 100644 ldap/schema/28pilot.ldif create mode 100644 ldap/schema/30ns-common.ldif create mode 100644 ldap/schema/50ns-admin.ldif create mode 100644 ldap/schema/50ns-certificate.ldif create mode 100644 ldap/schema/50ns-directory.ldif create mode 100644 ldap/schema/50ns-mail.ldif create mode 100644 ldap/schema/50ns-value.ldif create mode 100644 ldap/schema/50ns-web.ldif create mode 100644 ldap/schema/60acctpolicy.ldif create mode 100644 ldap/schema/60autofs.ldif create mode 100644 ldap/schema/60changelog.ldif create mode 100644 ldap/schema/60eduperson.ldif create mode 100644 ldap/schema/60inetmail.ldif create mode 100644 ldap/schema/60kerberos.ldif create mode 100644 ldap/schema/60krb5kdc.ldif create mode 100644 ldap/schema/60mozilla.ldif create mode 100644 ldap/schema/60nis.ldif create mode 100644 ldap/schema/60nss-ldap.ldif create mode 100644 ldap/schema/60pam-plugin.ldif create mode 100644 ldap/schema/60posix-winsync-plugin.ldif create mode 100644 ldap/schema/60pureftpd.ldif create mode 100644 ldap/schema/60qmail.ldif create mode 100644 ldap/schema/60radius.ldif create mode 100644 ldap/schema/60rfc2739.ldif create mode 100644 ldap/schema/60rfc3712.ldif create mode 100644 ldap/schema/60rfc4876.ldif create mode 100644 ldap/schema/60sabayon.ldif create mode 100644 ldap/schema/60samba.ldif create mode 100644 ldap/schema/60samba3.ldif create mode 100644 ldap/schema/60sendmail.ldif create mode 100644 ldap/schema/60sudo.ldif create mode 100644 ldap/schema/60trust.ldif create mode 100644 ldap/schema/99user.ldif create mode 100644 ldap/schema/slapd-collations.conf create mode 100644 ldap/servers/plugins/acct_usability/acct_usability.c create mode 100644 ldap/servers/plugins/acct_usability/acct_usability.h create mode 100644 ldap/servers/plugins/acctpolicy/acct_config.c create mode 100644 ldap/servers/plugins/acctpolicy/acct_init.c create mode 100644 ldap/servers/plugins/acctpolicy/acct_plugin.c create mode 100644 ldap/servers/plugins/acctpolicy/acct_util.c create mode 100644 ldap/servers/plugins/acctpolicy/acctpolicy.h create mode 100644 ldap/servers/plugins/acctpolicy/sampleconfig.ldif create mode 100644 ldap/servers/plugins/acctpolicy/samplepolicy.ldif create mode 100644 ldap/servers/plugins/acl/ACL-Notes create mode 100644 ldap/servers/plugins/acl/acl.c create mode 100644 ldap/servers/plugins/acl/acl.h create mode 100644 ldap/servers/plugins/acl/acl_ext.c create mode 100644 ldap/servers/plugins/acl/aclanom.c create mode 100644 ldap/servers/plugins/acl/acleffectiverights.c create mode 100644 ldap/servers/plugins/acl/aclgroup.c create mode 100644 ldap/servers/plugins/acl/aclinit.c create mode 100644 ldap/servers/plugins/acl/acllas.c create mode 100644 ldap/servers/plugins/acl/acllist.c create mode 100644 ldap/servers/plugins/acl/aclparse.c create mode 100644 ldap/servers/plugins/acl/aclplugin.c create mode 100644 ldap/servers/plugins/acl/aclutil.c create mode 100644 ldap/servers/plugins/automember/automember.c create mode 100644 ldap/servers/plugins/automember/automember.h create mode 100644 ldap/servers/plugins/bitwise/bitwise.c create mode 100644 ldap/servers/plugins/chainingdb/cb.h create mode 100644 ldap/servers/plugins/chainingdb/cb_abandon.c create mode 100644 ldap/servers/plugins/chainingdb/cb_acl.c create mode 100644 ldap/servers/plugins/chainingdb/cb_add.c create mode 100644 ldap/servers/plugins/chainingdb/cb_bind.c create mode 100644 ldap/servers/plugins/chainingdb/cb_cleanup.c create mode 100644 ldap/servers/plugins/chainingdb/cb_close.c create mode 100644 ldap/servers/plugins/chainingdb/cb_compare.c create mode 100644 ldap/servers/plugins/chainingdb/cb_config.c create mode 100644 ldap/servers/plugins/chainingdb/cb_conn_stateless.c create mode 100644 ldap/servers/plugins/chainingdb/cb_controls.c create mode 100644 ldap/servers/plugins/chainingdb/cb_debug.c create mode 100644 ldap/servers/plugins/chainingdb/cb_delete.c create mode 100644 ldap/servers/plugins/chainingdb/cb_init.c create mode 100644 ldap/servers/plugins/chainingdb/cb_instance.c create mode 100644 ldap/servers/plugins/chainingdb/cb_modify.c create mode 100644 ldap/servers/plugins/chainingdb/cb_modrdn.c create mode 100644 ldap/servers/plugins/chainingdb/cb_monitor.c create mode 100644 ldap/servers/plugins/chainingdb/cb_schema.c create mode 100644 ldap/servers/plugins/chainingdb/cb_search.c create mode 100644 ldap/servers/plugins/chainingdb/cb_size.c create mode 100644 ldap/servers/plugins/chainingdb/cb_start.c create mode 100644 ldap/servers/plugins/chainingdb/cb_temp.c create mode 100644 ldap/servers/plugins/chainingdb/cb_test.c create mode 100644 ldap/servers/plugins/chainingdb/cb_unbind.c create mode 100644 ldap/servers/plugins/chainingdb/cb_utils.c create mode 100644 ldap/servers/plugins/collation/collate.c create mode 100644 ldap/servers/plugins/collation/collate.h create mode 100644 ldap/servers/plugins/collation/config.c create mode 100644 ldap/servers/plugins/collation/config.h create mode 100644 ldap/servers/plugins/collation/debug.c create mode 100644 ldap/servers/plugins/collation/orfilter.c create mode 100644 ldap/servers/plugins/collation/orfilter.h create mode 100644 ldap/servers/plugins/cos/cos.c create mode 100644 ldap/servers/plugins/cos/cos_cache.c create mode 100644 ldap/servers/plugins/cos/cos_cache.h create mode 100644 ldap/servers/plugins/deref/deref.c create mode 100644 ldap/servers/plugins/deref/deref.h create mode 100644 ldap/servers/plugins/distrib/Makefile create mode 100644 ldap/servers/plugins/distrib/Makefile.HPUX create mode 100644 ldap/servers/plugins/distrib/Makefile.HPUX64 create mode 100644 ldap/servers/plugins/distrib/Makefile.Linux create mode 100644 ldap/servers/plugins/distrib/Makefile.SOLARIS create mode 100644 ldap/servers/plugins/distrib/Makefile.SOLARIS64 create mode 100644 ldap/servers/plugins/distrib/Makefile.SOLARISx86 create mode 100644 ldap/servers/plugins/distrib/README create mode 100644 ldap/servers/plugins/distrib/distrib.c create mode 100755 ldap/servers/plugins/dna/addentries.sh create mode 100755 ldap/servers/plugins/dna/config.sh create mode 100644 ldap/servers/plugins/dna/del_test_entries.dns create mode 100755 ldap/servers/plugins/dna/delentries.sh create mode 100644 ldap/servers/plugins/dna/dna.c create mode 100755 ldap/servers/plugins/dna/editentries.sh create mode 100755 ldap/servers/plugins/dna/oneentry.sh create mode 100644 ldap/servers/plugins/dna/posix.ldif create mode 100644 ldap/servers/plugins/dna/posix_one.ldif create mode 100644 ldap/servers/plugins/dna/posix_test.ldif create mode 100755 ldap/servers/plugins/dna/seeconfig.sh create mode 100755 ldap/servers/plugins/dna/seeentries.sh create mode 100644 ldap/servers/plugins/dna/subtest.ldif create mode 100644 ldap/servers/plugins/http/http_client.c create mode 100644 ldap/servers/plugins/http/http_client.h create mode 100644 ldap/servers/plugins/http/http_impl.c create mode 100644 ldap/servers/plugins/http/http_impl.h create mode 100644 ldap/servers/plugins/linkedattrs/fixup_task.c create mode 100644 ldap/servers/plugins/linkedattrs/linked_attrs.c create mode 100644 ldap/servers/plugins/linkedattrs/linked_attrs.h create mode 100644 ldap/servers/plugins/memberof/memberof.c create mode 100644 ldap/servers/plugins/memberof/memberof.h create mode 100644 ldap/servers/plugins/memberof/memberof_config.c create mode 100644 ldap/servers/plugins/mep/mep.c create mode 100644 ldap/servers/plugins/mep/mep.h create mode 100644 ldap/servers/plugins/pam_passthru/README create mode 100644 ldap/servers/plugins/pam_passthru/pam_passthru.h create mode 100644 ldap/servers/plugins/pam_passthru/pam_ptconfig.c create mode 100644 ldap/servers/plugins/pam_passthru/pam_ptdebug.c create mode 100644 ldap/servers/plugins/pam_passthru/pam_ptimpl.c create mode 100644 ldap/servers/plugins/pam_passthru/pam_ptpreop.c create mode 100644 ldap/servers/plugins/passthru/PT-Notes create mode 100644 ldap/servers/plugins/passthru/passthru.h create mode 100644 ldap/servers/plugins/passthru/ptbind.c create mode 100644 ldap/servers/plugins/passthru/ptconfig.c create mode 100644 ldap/servers/plugins/passthru/ptconn.c create mode 100644 ldap/servers/plugins/passthru/ptdebug.c create mode 100644 ldap/servers/plugins/passthru/ptpreop.c create mode 100644 ldap/servers/plugins/passthru/ptutil.c create mode 100644 ldap/servers/plugins/posix-winsync/README create mode 100644 ldap/servers/plugins/posix-winsync/posix-group-func.c create mode 100644 ldap/servers/plugins/posix-winsync/posix-group-func.h create mode 100644 ldap/servers/plugins/posix-winsync/posix-group-task.c create mode 100644 ldap/servers/plugins/posix-winsync/posix-winsync-config.c create mode 100644 ldap/servers/plugins/posix-winsync/posix-winsync.c create mode 100644 ldap/servers/plugins/posix-winsync/posix-wsp-ident.h create mode 100644 ldap/servers/plugins/presence/images/aim-offline.gif create mode 100644 ldap/servers/plugins/presence/images/aim-online.gif create mode 100644 ldap/servers/plugins/presence/images/icq-disabled.gif create mode 100644 ldap/servers/plugins/presence/images/icq-offline.gif create mode 100644 ldap/servers/plugins/presence/images/icq-online.gif create mode 100644 ldap/servers/plugins/presence/images/yahoo-offline.gif create mode 100644 ldap/servers/plugins/presence/images/yahoo-online.gif create mode 100644 ldap/servers/plugins/presence/presence.c create mode 100644 ldap/servers/plugins/presence/presence.ldif create mode 100644 ldap/servers/plugins/pwdstorage/clear_pwd.c create mode 100644 ldap/servers/plugins/pwdstorage/crypt_pwd.c create mode 100644 ldap/servers/plugins/pwdstorage/md5.h create mode 100644 ldap/servers/plugins/pwdstorage/md5_pwd.c create mode 100644 ldap/servers/plugins/pwdstorage/md5c.c create mode 100644 ldap/servers/plugins/pwdstorage/ns-mta-md5_pwd.bu create mode 100644 ldap/servers/plugins/pwdstorage/ns-mta-md5_pwd.c create mode 100644 ldap/servers/plugins/pwdstorage/pwd_init.c create mode 100644 ldap/servers/plugins/pwdstorage/pwd_util.c create mode 100644 ldap/servers/plugins/pwdstorage/pwdstorage.h create mode 100644 ldap/servers/plugins/pwdstorage/sha_pwd.c create mode 100644 ldap/servers/plugins/pwdstorage/smd5_pwd.c create mode 100644 ldap/servers/plugins/pwdstorage/ssha_pwd.c create mode 100644 ldap/servers/plugins/referint/referint.c create mode 100644 ldap/servers/plugins/replication/cl4.h create mode 100644 ldap/servers/plugins/replication/cl4_api.c create mode 100644 ldap/servers/plugins/replication/cl4_api.h create mode 100644 ldap/servers/plugins/replication/cl4_init.c create mode 100644 ldap/servers/plugins/replication/cl5.h create mode 100644 ldap/servers/plugins/replication/cl5_api.c create mode 100644 ldap/servers/plugins/replication/cl5_api.h create mode 100644 ldap/servers/plugins/replication/cl5_clcache.c create mode 100644 ldap/servers/plugins/replication/cl5_clcache.h create mode 100644 ldap/servers/plugins/replication/cl5_config.c create mode 100644 ldap/servers/plugins/replication/cl5_init.c create mode 100644 ldap/servers/plugins/replication/cl5_test.c create mode 100644 ldap/servers/plugins/replication/cl5_test.h create mode 100644 ldap/servers/plugins/replication/cl_crypt.c create mode 100644 ldap/servers/plugins/replication/cl_crypt.h create mode 100644 ldap/servers/plugins/replication/csnpl.c create mode 100644 ldap/servers/plugins/replication/csnpl.h create mode 100644 ldap/servers/plugins/replication/legacy_consumer.c create mode 100644 ldap/servers/plugins/replication/llist.c create mode 100644 ldap/servers/plugins/replication/llist.h create mode 100644 ldap/servers/plugins/replication/profile.c create mode 100644 ldap/servers/plugins/replication/repl-session-plugin.h create mode 100644 ldap/servers/plugins/replication/repl.h create mode 100644 ldap/servers/plugins/replication/repl5.h create mode 100644 ldap/servers/plugins/replication/repl5_agmt.c create mode 100644 ldap/servers/plugins/replication/repl5_agmtlist.c create mode 100644 ldap/servers/plugins/replication/repl5_backoff.c create mode 100644 ldap/servers/plugins/replication/repl5_connection.c create mode 100644 ldap/servers/plugins/replication/repl5_inc_protocol.c create mode 100644 ldap/servers/plugins/replication/repl5_init.c create mode 100644 ldap/servers/plugins/replication/repl5_mtnode_ext.c create mode 100644 ldap/servers/plugins/replication/repl5_plugins.c create mode 100644 ldap/servers/plugins/replication/repl5_prot_private.h create mode 100644 ldap/servers/plugins/replication/repl5_protocol.c create mode 100644 ldap/servers/plugins/replication/repl5_protocol_util.c create mode 100644 ldap/servers/plugins/replication/repl5_replica.c create mode 100644 ldap/servers/plugins/replication/repl5_replica_config.c create mode 100644 ldap/servers/plugins/replication/repl5_replica_dnhash.c create mode 100644 ldap/servers/plugins/replication/repl5_replica_hash.c create mode 100644 ldap/servers/plugins/replication/repl5_replsupplier.c create mode 100644 ldap/servers/plugins/replication/repl5_ruv.c create mode 100644 ldap/servers/plugins/replication/repl5_ruv.h create mode 100644 ldap/servers/plugins/replication/repl5_schedule.c create mode 100644 ldap/servers/plugins/replication/repl5_tot_protocol.c create mode 100644 ldap/servers/plugins/replication/repl5_total.c create mode 100644 ldap/servers/plugins/replication/repl5_updatedn_list.c create mode 100644 ldap/servers/plugins/replication/repl_add.c create mode 100644 ldap/servers/plugins/replication/repl_bind.c create mode 100644 ldap/servers/plugins/replication/repl_compare.c create mode 100644 ldap/servers/plugins/replication/repl_connext.c create mode 100644 ldap/servers/plugins/replication/repl_controls.c create mode 100644 ldap/servers/plugins/replication/repl_delete.c create mode 100644 ldap/servers/plugins/replication/repl_entry.c create mode 100644 ldap/servers/plugins/replication/repl_ext.c create mode 100644 ldap/servers/plugins/replication/repl_extop.c create mode 100644 ldap/servers/plugins/replication/repl_globals.c create mode 100644 ldap/servers/plugins/replication/repl_helper.c create mode 100644 ldap/servers/plugins/replication/repl_helper.h create mode 100644 ldap/servers/plugins/replication/repl_init.c create mode 100644 ldap/servers/plugins/replication/repl_modify.c create mode 100644 ldap/servers/plugins/replication/repl_modrdn.c create mode 100644 ldap/servers/plugins/replication/repl_monitor.c create mode 100644 ldap/servers/plugins/replication/repl_objset.c create mode 100644 ldap/servers/plugins/replication/repl_objset.h create mode 100644 ldap/servers/plugins/replication/repl_opext.c create mode 100644 ldap/servers/plugins/replication/repl_ops.c create mode 100644 ldap/servers/plugins/replication/repl_rootdse.c create mode 100644 ldap/servers/plugins/replication/repl_search.c create mode 100644 ldap/servers/plugins/replication/repl_session_plugin.c create mode 100644 ldap/servers/plugins/replication/repl_shared.h create mode 100644 ldap/servers/plugins/replication/replutil.c create mode 100644 ldap/servers/plugins/replication/test_repl_session_plugin.c create mode 100644 ldap/servers/plugins/replication/tests/dnp_sim.c create mode 100644 ldap/servers/plugins/replication/tests/dnp_sim2.c create mode 100644 ldap/servers/plugins/replication/tests/dnp_sim3.c create mode 100755 ldap/servers/plugins/replication/tests/makesim create mode 100644 ldap/servers/plugins/replication/urp.c create mode 100644 ldap/servers/plugins/replication/urp.h create mode 100644 ldap/servers/plugins/replication/urp_glue.c create mode 100644 ldap/servers/plugins/replication/urp_tombstone.c create mode 100644 ldap/servers/plugins/replication/windows_connection.c create mode 100644 ldap/servers/plugins/replication/windows_inc_protocol.c create mode 100644 ldap/servers/plugins/replication/windows_private.c create mode 100644 ldap/servers/plugins/replication/windows_prot_private.h create mode 100644 ldap/servers/plugins/replication/windows_protocol_util.c create mode 100644 ldap/servers/plugins/replication/windows_tot_protocol.c create mode 100644 ldap/servers/plugins/replication/windowsrepl.h create mode 100644 ldap/servers/plugins/replication/winsync-plugin.h create mode 100644 ldap/servers/plugins/retrocl/linktest.c create mode 100644 ldap/servers/plugins/retrocl/retrocl.c create mode 100644 ldap/servers/plugins/retrocl/retrocl.h create mode 100644 ldap/servers/plugins/retrocl/retrocl.txt create mode 100644 ldap/servers/plugins/retrocl/retrocl_cn.c create mode 100644 ldap/servers/plugins/retrocl/retrocl_create.c create mode 100644 ldap/servers/plugins/retrocl/retrocl_po.c create mode 100644 ldap/servers/plugins/retrocl/retrocl_rootdse.c create mode 100644 ldap/servers/plugins/retrocl/retrocl_trim.c create mode 100644 ldap/servers/plugins/rever/pbe.c create mode 100644 ldap/servers/plugins/rever/rever.c create mode 100644 ldap/servers/plugins/rever/rever.h create mode 100644 ldap/servers/plugins/roles/roles_cache.c create mode 100644 ldap/servers/plugins/roles/roles_cache.h create mode 100644 ldap/servers/plugins/roles/roles_plugin.c create mode 100644 ldap/servers/plugins/rootdn_access/rootdn_access.c create mode 100644 ldap/servers/plugins/rootdn_access/rootdn_access.h create mode 100644 ldap/servers/plugins/schema_reload/schema_reload.c create mode 100644 ldap/servers/plugins/statechange/statechange.c create mode 100644 ldap/servers/plugins/sync/sync.h create mode 100644 ldap/servers/plugins/sync/sync_init.c create mode 100644 ldap/servers/plugins/sync/sync_persist.c create mode 100644 ldap/servers/plugins/sync/sync_refresh.c create mode 100644 ldap/servers/plugins/sync/sync_util.c create mode 100644 ldap/servers/plugins/syntaxes/bin.c create mode 100644 ldap/servers/plugins/syntaxes/bitstring.c create mode 100644 ldap/servers/plugins/syntaxes/ces.c create mode 100644 ldap/servers/plugins/syntaxes/cis.c create mode 100644 ldap/servers/plugins/syntaxes/debug.c create mode 100644 ldap/servers/plugins/syntaxes/deliverymethod.c create mode 100644 ldap/servers/plugins/syntaxes/dn.c create mode 100644 ldap/servers/plugins/syntaxes/facsimile.c create mode 100644 ldap/servers/plugins/syntaxes/guide.c create mode 100644 ldap/servers/plugins/syntaxes/int.c create mode 100644 ldap/servers/plugins/syntaxes/nameoptuid.c create mode 100644 ldap/servers/plugins/syntaxes/numericstring.c create mode 100644 ldap/servers/plugins/syntaxes/phonetic.c create mode 100644 ldap/servers/plugins/syntaxes/sicis.c create mode 100644 ldap/servers/plugins/syntaxes/string.c create mode 100644 ldap/servers/plugins/syntaxes/syntax.h create mode 100644 ldap/servers/plugins/syntaxes/syntax_common.c create mode 100644 ldap/servers/plugins/syntaxes/tel.c create mode 100644 ldap/servers/plugins/syntaxes/teletex.c create mode 100644 ldap/servers/plugins/syntaxes/telex.c create mode 100644 ldap/servers/plugins/syntaxes/validate.c create mode 100644 ldap/servers/plugins/syntaxes/validate_task.c create mode 100644 ldap/servers/plugins/syntaxes/value.c create mode 100644 ldap/servers/plugins/uiduniq/7bit.c create mode 100644 ldap/servers/plugins/uiduniq/UID-Notes create mode 100644 ldap/servers/plugins/uiduniq/plugin-utils.h create mode 100644 ldap/servers/plugins/uiduniq/uid.c create mode 100644 ldap/servers/plugins/uiduniq/utils.c create mode 100644 ldap/servers/plugins/usn/usn.c create mode 100644 ldap/servers/plugins/usn/usn.h create mode 100644 ldap/servers/plugins/usn/usn_cleanup.c create mode 100644 ldap/servers/plugins/vattrsp_template/vattrsp.c create mode 100644 ldap/servers/plugins/views/views.c create mode 100644 ldap/servers/plugins/whoami/whoami.c create mode 100644 ldap/servers/slapd/abandon.c create mode 100644 ldap/servers/slapd/add.c create mode 100644 ldap/servers/slapd/agtmmap.c create mode 100644 ldap/servers/slapd/agtmmap.h create mode 100644 ldap/servers/slapd/apibroker.c create mode 100644 ldap/servers/slapd/attr.c create mode 100644 ldap/servers/slapd/attrlist.c create mode 100644 ldap/servers/slapd/attrsyntax.c create mode 100644 ldap/servers/slapd/auditlog.c create mode 100644 ldap/servers/slapd/auth.c create mode 100644 ldap/servers/slapd/auth.h create mode 100644 ldap/servers/slapd/ava.c create mode 100644 ldap/servers/slapd/back-ldbm/ancestorid.c create mode 100644 ldap/servers/slapd/back-ldbm/archive.c create mode 100644 ldap/servers/slapd/back-ldbm/attrcrypt.h create mode 100644 ldap/servers/slapd/back-ldbm/back-ldbm.h create mode 100644 ldap/servers/slapd/back-ldbm/backentry.c create mode 100644 ldap/servers/slapd/back-ldbm/cache.c create mode 100644 ldap/servers/slapd/back-ldbm/cleanup.c create mode 100644 ldap/servers/slapd/back-ldbm/close.c create mode 100644 ldap/servers/slapd/back-ldbm/dbhelp.c create mode 100644 ldap/servers/slapd/back-ldbm/dblayer.c create mode 100644 ldap/servers/slapd/back-ldbm/dblayer.h create mode 100644 ldap/servers/slapd/back-ldbm/dbsize.c create mode 100644 ldap/servers/slapd/back-ldbm/dbverify.c create mode 100644 ldap/servers/slapd/back-ldbm/dbversion.c create mode 100644 ldap/servers/slapd/back-ldbm/dn2entry.c create mode 100644 ldap/servers/slapd/back-ldbm/entrystore.c create mode 100644 ldap/servers/slapd/back-ldbm/filterindex.c create mode 100644 ldap/servers/slapd/back-ldbm/findentry.c create mode 100644 ldap/servers/slapd/back-ldbm/haschildren.c create mode 100644 ldap/servers/slapd/back-ldbm/id2entry.c create mode 100644 ldap/servers/slapd/back-ldbm/idl.c create mode 100644 ldap/servers/slapd/back-ldbm/idl_common.c create mode 100644 ldap/servers/slapd/back-ldbm/idl_new.c create mode 100644 ldap/servers/slapd/back-ldbm/idl_shim.c create mode 100644 ldap/servers/slapd/back-ldbm/idlapi.h create mode 100644 ldap/servers/slapd/back-ldbm/import-merge.c create mode 100644 ldap/servers/slapd/back-ldbm/import-threads.c create mode 100644 ldap/servers/slapd/back-ldbm/import.c create mode 100644 ldap/servers/slapd/back-ldbm/import.h create mode 100644 ldap/servers/slapd/back-ldbm/index.c create mode 100644 ldap/servers/slapd/back-ldbm/init.c create mode 100644 ldap/servers/slapd/back-ldbm/instance.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_abandon.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_add.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_attr.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_attrcrypt_config.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_bind.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_compare.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_config.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_config.h create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_delete.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_index_config.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_instance_config.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_modify.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_modrdn.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_search.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_unbind.c create mode 100644 ldap/servers/slapd/back-ldbm/ldbm_usn.c create mode 100644 ldap/servers/slapd/back-ldbm/ldif2ldbm.c create mode 100644 ldap/servers/slapd/back-ldbm/matchrule.c create mode 100644 ldap/servers/slapd/back-ldbm/misc.c create mode 100644 ldap/servers/slapd/back-ldbm/monitor.c create mode 100644 ldap/servers/slapd/back-ldbm/nextid.c create mode 100644 ldap/servers/slapd/back-ldbm/parents.c create mode 100644 ldap/servers/slapd/back-ldbm/perfctrs.c create mode 100644 ldap/servers/slapd/back-ldbm/perfctrs.h create mode 100644 ldap/servers/slapd/back-ldbm/proto-back-ldbm.h create mode 100644 ldap/servers/slapd/back-ldbm/rmdb.c create mode 100644 ldap/servers/slapd/back-ldbm/seq.c create mode 100644 ldap/servers/slapd/back-ldbm/sort.c create mode 100644 ldap/servers/slapd/back-ldbm/start.c create mode 100644 ldap/servers/slapd/back-ldbm/tools/index_dump/index_dump.c create mode 100644 ldap/servers/slapd/back-ldbm/uniqueid2entry.c create mode 100644 ldap/servers/slapd/back-ldbm/upgrade.c create mode 100644 ldap/servers/slapd/back-ldbm/vlv.c create mode 100644 ldap/servers/slapd/back-ldbm/vlv_key.c create mode 100644 ldap/servers/slapd/back-ldbm/vlv_key.h create mode 100644 ldap/servers/slapd/back-ldbm/vlv_srch.c create mode 100644 ldap/servers/slapd/back-ldbm/vlv_srch.h create mode 100644 ldap/servers/slapd/back-ldif/add.c create mode 100644 ldap/servers/slapd/back-ldif/back-ldif.h create mode 100644 ldap/servers/slapd/back-ldif/bind.c create mode 100644 ldap/servers/slapd/back-ldif/close.c create mode 100644 ldap/servers/slapd/back-ldif/compare.c create mode 100644 ldap/servers/slapd/back-ldif/config.c create mode 100644 ldap/servers/slapd/back-ldif/delete.c create mode 100644 ldap/servers/slapd/back-ldif/init.c create mode 100644 ldap/servers/slapd/back-ldif/modify.c create mode 100644 ldap/servers/slapd/back-ldif/modrdn.c create mode 100644 ldap/servers/slapd/back-ldif/monitor.c create mode 100644 ldap/servers/slapd/back-ldif/search.c create mode 100644 ldap/servers/slapd/back-ldif/start.c create mode 100644 ldap/servers/slapd/back-ldif/unbind.c create mode 100644 ldap/servers/slapd/backend.c create mode 100644 ldap/servers/slapd/backend_manager.c create mode 100644 ldap/servers/slapd/bind.c create mode 100644 ldap/servers/slapd/bitset.c create mode 100644 ldap/servers/slapd/bulk_import.c create mode 100644 ldap/servers/slapd/ch_malloc.c create mode 100644 ldap/servers/slapd/charray.c create mode 100644 ldap/servers/slapd/compare.c create mode 100644 ldap/servers/slapd/computed.c create mode 100644 ldap/servers/slapd/config.c create mode 100644 ldap/servers/slapd/configdse.c create mode 100644 ldap/servers/slapd/connection.c create mode 100644 ldap/servers/slapd/conntable.c create mode 100644 ldap/servers/slapd/control.c create mode 100644 ldap/servers/slapd/counters.c create mode 100644 ldap/servers/slapd/csn.c create mode 100644 ldap/servers/slapd/csngen.c create mode 100644 ldap/servers/slapd/csngen.h create mode 100644 ldap/servers/slapd/csnset.c create mode 100644 ldap/servers/slapd/daemon.c create mode 100644 ldap/servers/slapd/defbackend.c create mode 100644 ldap/servers/slapd/delete.c create mode 100644 ldap/servers/slapd/detach.c create mode 100644 ldap/servers/slapd/disconnect_error_strings.h create mode 100644 ldap/servers/slapd/disconnect_errors.h create mode 100644 ldap/servers/slapd/dl.c create mode 100644 ldap/servers/slapd/dn.c create mode 100644 ldap/servers/slapd/dse.c create mode 100644 ldap/servers/slapd/dynalib.c create mode 100644 ldap/servers/slapd/entry.c create mode 100644 ldap/servers/slapd/entrywsi.c create mode 100644 ldap/servers/slapd/errormap.c create mode 100644 ldap/servers/slapd/eventq.c create mode 100644 ldap/servers/slapd/extendop.c create mode 100644 ldap/servers/slapd/factory.c create mode 100644 ldap/servers/slapd/fe.h create mode 100644 ldap/servers/slapd/features.c create mode 100644 ldap/servers/slapd/fedse.c create mode 100644 ldap/servers/slapd/fileio.c create mode 100644 ldap/servers/slapd/filter.c create mode 100644 ldap/servers/slapd/filter.h create mode 100644 ldap/servers/slapd/filtercmp.c create mode 100644 ldap/servers/slapd/filterentry.c create mode 100644 ldap/servers/slapd/generation.c create mode 100644 ldap/servers/slapd/getfilelist.c create mode 100644 ldap/servers/slapd/getopt_ext.c create mode 100644 ldap/servers/slapd/getopt_ext.h create mode 100644 ldap/servers/slapd/getsocketpeer.c create mode 100644 ldap/servers/slapd/getsocketpeer.h create mode 100644 ldap/servers/slapd/globals.c create mode 100644 ldap/servers/slapd/house.c create mode 100644 ldap/servers/slapd/http.h create mode 100644 ldap/servers/slapd/index_subsys.h create mode 100644 ldap/servers/slapd/index_subsystem.c create mode 100644 ldap/servers/slapd/init.c create mode 100644 ldap/servers/slapd/intrinsics.h create mode 100644 ldap/servers/slapd/ldaputil.c create mode 100644 ldap/servers/slapd/ldbmlinktest.c create mode 100644 ldap/servers/slapd/lenstr.c create mode 100644 ldap/servers/slapd/libglobs.c create mode 100644 ldap/servers/slapd/libmakefile create mode 100644 ldap/servers/slapd/listConfigAttrs.pl create mode 100644 ldap/servers/slapd/localhost.c create mode 100644 ldap/servers/slapd/lock.c create mode 100644 ldap/servers/slapd/log.c create mode 100644 ldap/servers/slapd/log.h create mode 100644 ldap/servers/slapd/main.c create mode 100644 ldap/servers/slapd/mapping_tree.c create mode 100644 ldap/servers/slapd/match.c create mode 100644 ldap/servers/slapd/mempool.c create mode 100755 ldap/servers/slapd/mkDBErrStrs.pl create mode 100644 ldap/servers/slapd/modify.c create mode 100644 ldap/servers/slapd/modrdn.c create mode 100644 ldap/servers/slapd/modutil.c create mode 100644 ldap/servers/slapd/monitor.c create mode 100644 ldap/servers/slapd/mozldap.h create mode 100644 ldap/servers/slapd/object.c create mode 100644 ldap/servers/slapd/objset.c create mode 100644 ldap/servers/slapd/openldapber.h create mode 100644 ldap/servers/slapd/operation.c create mode 100644 ldap/servers/slapd/opshared.c create mode 100644 ldap/servers/slapd/pagedresults.c create mode 100644 ldap/servers/slapd/passwd_extop.c create mode 100644 ldap/servers/slapd/pblock.c create mode 100644 ldap/servers/slapd/plugin.c create mode 100644 ldap/servers/slapd/plugin_acl.c create mode 100644 ldap/servers/slapd/plugin_internal_op.c create mode 100644 ldap/servers/slapd/plugin_mr.c create mode 100644 ldap/servers/slapd/plugin_role.c create mode 100644 ldap/servers/slapd/plugin_syntax.c create mode 100644 ldap/servers/slapd/poll_using_select.c create mode 100644 ldap/servers/slapd/poll_using_select.h create mode 100644 ldap/servers/slapd/prerrstrs.h create mode 100644 ldap/servers/slapd/protect_db.c create mode 100644 ldap/servers/slapd/protect_db.h create mode 100644 ldap/servers/slapd/proto-slap.h create mode 100644 ldap/servers/slapd/proxyauth.c create mode 100644 ldap/servers/slapd/psearch.c create mode 100644 ldap/servers/slapd/pw.c create mode 100644 ldap/servers/slapd/pw.h create mode 100644 ldap/servers/slapd/pw_mgmt.c create mode 100644 ldap/servers/slapd/pw_retry.c create mode 100644 ldap/servers/slapd/rdn.c create mode 100644 ldap/servers/slapd/referral.c create mode 100644 ldap/servers/slapd/regex.c create mode 100644 ldap/servers/slapd/resourcelimit.c create mode 100644 ldap/servers/slapd/result.c create mode 100644 ldap/servers/slapd/rootdse.c create mode 100644 ldap/servers/slapd/sasl_io.c create mode 100644 ldap/servers/slapd/sasl_map.c create mode 100644 ldap/servers/slapd/saslbind.c create mode 100644 ldap/servers/slapd/schema.c create mode 100644 ldap/servers/slapd/schemaparse.c create mode 100644 ldap/servers/slapd/search.c create mode 100644 ldap/servers/slapd/secerrstrs.h create mode 100644 ldap/servers/slapd/security_wrappers.c create mode 100644 ldap/servers/slapd/slap.h create mode 100644 ldap/servers/slapd/slapd.lite.key create mode 100644 ldap/servers/slapd/slapd.normal.key create mode 100644 ldap/servers/slapd/slapd_plhash.c create mode 100644 ldap/servers/slapd/slapi-plugin-compat4.h create mode 100644 ldap/servers/slapd/slapi-plugin.h create mode 100644 ldap/servers/slapd/slapi-private.h create mode 100644 ldap/servers/slapd/slapi2nspr.c create mode 100644 ldap/servers/slapd/slapi_counter.c create mode 100644 ldap/servers/slapd/slapi_counter_sunos_sparcv9.S create mode 100644 ldap/servers/slapd/snmp_collator.c create mode 100644 ldap/servers/slapd/snmp_collator.h create mode 100644 ldap/servers/slapd/snoop.c create mode 100644 ldap/servers/slapd/sort.c create mode 100644 ldap/servers/slapd/ssl.c create mode 100644 ldap/servers/slapd/sslerrstrs.h create mode 100644 ldap/servers/slapd/start_tls_extop.c create mode 100644 ldap/servers/slapd/statechange.h create mode 100644 ldap/servers/slapd/str2filter.c create mode 100644 ldap/servers/slapd/strdup.c create mode 100644 ldap/servers/slapd/stubrepl.c create mode 100644 ldap/servers/slapd/stubs.c create mode 100644 ldap/servers/slapd/subentry.c create mode 100644 ldap/servers/slapd/task.c create mode 100644 ldap/servers/slapd/tempnam.c create mode 100644 ldap/servers/slapd/test-plugins/Makefile create mode 100644 ldap/servers/slapd/test-plugins/Makefile.AIX create mode 100644 ldap/servers/slapd/test-plugins/Makefile.BSDI create mode 100644 ldap/servers/slapd/test-plugins/Makefile.HPUX create mode 100644 ldap/servers/slapd/test-plugins/Makefile.HPUX64 create mode 100644 ldap/servers/slapd/test-plugins/Makefile.IRIX create mode 100644 ldap/servers/slapd/test-plugins/Makefile.Linux create mode 100644 ldap/servers/slapd/test-plugins/Makefile.OSF1 create mode 100644 ldap/servers/slapd/test-plugins/Makefile.ReliantUNIX create mode 100644 ldap/servers/slapd/test-plugins/Makefile.SOLARIS create mode 100644 ldap/servers/slapd/test-plugins/Makefile.SOLARIS64 create mode 100644 ldap/servers/slapd/test-plugins/Makefile.SOLARISx86 create mode 100644 ldap/servers/slapd/test-plugins/Makefile.UnixWare create mode 100644 ldap/servers/slapd/test-plugins/Makefile.UnixWareUDK create mode 100644 ldap/servers/slapd/test-plugins/Makefile.server create mode 100644 ldap/servers/slapd/test-plugins/README create mode 100644 ldap/servers/slapd/test-plugins/clients/README create mode 100644 ldap/servers/slapd/test-plugins/clients/ReqExtOp.java create mode 100644 ldap/servers/slapd/test-plugins/clients/reqextop.c create mode 100755 ldap/servers/slapd/test-plugins/installDse.pl create mode 100644 ldap/servers/slapd/test-plugins/nicknames create mode 100644 ldap/servers/slapd/test-plugins/sampletask.c create mode 100644 ldap/servers/slapd/test-plugins/testbind.c create mode 100644 ldap/servers/slapd/test-plugins/testdatainterop.c create mode 100644 ldap/servers/slapd/test-plugins/testdbinterop.c create mode 100644 ldap/servers/slapd/test-plugins/testdbinterop.h create mode 100644 ldap/servers/slapd/test-plugins/testentry.c create mode 100644 ldap/servers/slapd/test-plugins/testextendedop.c create mode 100644 ldap/servers/slapd/test-plugins/testgetip.c create mode 100644 ldap/servers/slapd/test-plugins/testpostop.c create mode 100644 ldap/servers/slapd/test-plugins/testpreop.c create mode 100644 ldap/servers/slapd/test-plugins/testsaslbind.c create mode 100644 ldap/servers/slapd/thread_data.c create mode 100644 ldap/servers/slapd/time.c create mode 100644 ldap/servers/slapd/tools/dbscan.c create mode 100644 ldap/servers/slapd/tools/eggencode.c create mode 100755 ldap/servers/slapd/tools/ldaptool-sasl.c create mode 100644 ldap/servers/slapd/tools/ldaptool-sasl.h create mode 100644 ldap/servers/slapd/tools/ldaptool.h create mode 100644 ldap/servers/slapd/tools/ldclt/README create mode 100644 ldap/servers/slapd/tools/ldclt/data.c create mode 100644 ldap/servers/slapd/tools/ldclt/examples/001/add.ksh create mode 100644 ldap/servers/slapd/tools/ldclt/examples/001/add_incr.ksh create mode 100644 ldap/servers/slapd/tools/ldclt/examples/001/config.ksh create mode 100644 ldap/servers/slapd/tools/ldclt/examples/001/delete.ksh create mode 100644 ldap/servers/slapd/tools/ldclt/examples/001/env.ksh create mode 100644 ldap/servers/slapd/tools/ldclt/examples/001/search.ksh create mode 100644 ldap/servers/slapd/tools/ldclt/examples/002/add.ksh create mode 100644 ldap/servers/slapd/tools/ldclt/examples/002/config.ksh create mode 100644 ldap/servers/slapd/tools/ldclt/examples/002/env.ksh create mode 100644 ldap/servers/slapd/tools/ldclt/examples/002/ldif01.ksh create mode 100644 ldap/servers/slapd/tools/ldclt/examples/002/ldif02.ksh create mode 100644 ldap/servers/slapd/tools/ldclt/examples/002/ldif03.ksh create mode 100644 ldap/servers/slapd/tools/ldclt/examples/002/ofile create mode 100644 ldap/servers/slapd/tools/ldclt/examples/README create mode 100644 ldap/servers/slapd/tools/ldclt/ldap-private.h create mode 100644 ldap/servers/slapd/tools/ldclt/ldapfct.c create mode 100644 ldap/servers/slapd/tools/ldclt/ldclt.c create mode 100644 ldap/servers/slapd/tools/ldclt/ldclt.h create mode 100644 ldap/servers/slapd/tools/ldclt/ldclt.man create mode 100644 ldap/servers/slapd/tools/ldclt/ldclt.use create mode 100644 ldap/servers/slapd/tools/ldclt/ldcltU.c create mode 100644 ldap/servers/slapd/tools/ldclt/opCheck.c create mode 100644 ldap/servers/slapd/tools/ldclt/parser.c create mode 100644 ldap/servers/slapd/tools/ldclt/port.c create mode 100644 ldap/servers/slapd/tools/ldclt/port.h create mode 100644 ldap/servers/slapd/tools/ldclt/remote.h create mode 100644 ldap/servers/slapd/tools/ldclt/repcheck.c create mode 100644 ldap/servers/slapd/tools/ldclt/repslave.c create mode 100644 ldap/servers/slapd/tools/ldclt/scalab01.c create mode 100644 ldap/servers/slapd/tools/ldclt/scalab01.h create mode 100644 ldap/servers/slapd/tools/ldclt/srv.c create mode 100644 ldap/servers/slapd/tools/ldclt/threadMain.c create mode 100644 ldap/servers/slapd/tools/ldclt/utils.c create mode 100644 ldap/servers/slapd/tools/ldclt/utils.h create mode 100644 ldap/servers/slapd/tools/ldclt/version.c create mode 100644 ldap/servers/slapd/tools/ldclt/workarounds.c create mode 100644 ldap/servers/slapd/tools/ldif.c create mode 100644 ldap/servers/slapd/tools/migratecred.c create mode 100644 ldap/servers/slapd/tools/mkdep.c create mode 100644 ldap/servers/slapd/tools/mmldif.c create mode 100644 ldap/servers/slapd/tools/pwenc.c create mode 100644 ldap/servers/slapd/tools/rsearch/addthread.c create mode 100644 ldap/servers/slapd/tools/rsearch/addthread.h create mode 100644 ldap/servers/slapd/tools/rsearch/infadd.c create mode 100644 ldap/servers/slapd/tools/rsearch/infadd.h create mode 100644 ldap/servers/slapd/tools/rsearch/main.c create mode 100644 ldap/servers/slapd/tools/rsearch/nametable.c create mode 100644 ldap/servers/slapd/tools/rsearch/nametable.h create mode 100644 ldap/servers/slapd/tools/rsearch/rsearch.c create mode 100644 ldap/servers/slapd/tools/rsearch/rsearch.h create mode 100644 ldap/servers/slapd/tools/rsearch/scripts/dbgen-FamilyNames create mode 100644 ldap/servers/slapd/tools/rsearch/scripts/dbgen-GivenNames create mode 100644 ldap/servers/slapd/tools/rsearch/scripts/dbgen-OrgUnits create mode 100755 ldap/servers/slapd/tools/rsearch/scripts/dbgen.pl.in create mode 100644 ldap/servers/slapd/tools/rsearch/sdattable.c create mode 100644 ldap/servers/slapd/tools/rsearch/sdattable.h create mode 100644 ldap/servers/slapd/tools/rsearch/searchthread.c create mode 100644 ldap/servers/slapd/tools/rsearch/searchthread.h create mode 100644 ldap/servers/slapd/unbind.c create mode 100644 ldap/servers/slapd/uniqueid.c create mode 100644 ldap/servers/slapd/uniqueidgen.c create mode 100644 ldap/servers/slapd/utf8.c create mode 100644 ldap/servers/slapd/utf8compare.c create mode 100644 ldap/servers/slapd/util.c create mode 100644 ldap/servers/slapd/uuid.c create mode 100644 ldap/servers/slapd/uuid.h create mode 100644 ldap/servers/slapd/value.c create mode 100644 ldap/servers/slapd/valueset.c create mode 100644 ldap/servers/slapd/vattr.c create mode 100644 ldap/servers/slapd/vattr_spi.h create mode 100644 ldap/servers/slapd/views.h create mode 100644 ldap/servers/snmp/ldap-agent.c create mode 100644 ldap/servers/snmp/ldap-agent.conf.in create mode 100644 ldap/servers/snmp/ldap-agent.h create mode 100644 ldap/servers/snmp/main.c create mode 100644 ldap/servers/snmp/redhat-directory.mib create mode 100644 ldap/systools/README create mode 100755 ldap/systools/getHPPatches.pl create mode 100755 ldap/systools/getSolPatches.pl create mode 100644 ldap/systools/hp_patches.c create mode 100644 ldap/systools/idsktune.c create mode 100755 ldap/systools/mergeSolPatches.pl create mode 100644 ldap/systools/pio.c create mode 100644 ldap/systools/pio.h create mode 100644 ldap/systools/sol_patches.c create mode 100644 ldap/systools/viewcore.c create mode 100644 lib/base/.cvsignore create mode 100644 lib/base/crit.cpp create mode 100644 lib/base/dns.cpp create mode 100644 lib/base/dnsdmain.cpp create mode 100644 lib/base/ereport.cpp create mode 100644 lib/base/file.cpp create mode 100644 lib/base/fsmutex.cpp create mode 100644 lib/base/lexer_pvt.h create mode 100644 lib/base/net.cpp create mode 100644 lib/base/nscperror.c create mode 100644 lib/base/plist.cpp create mode 100644 lib/base/plist_pvt.h create mode 100644 lib/base/pool.cpp create mode 100644 lib/base/shexp.cpp create mode 100644 lib/base/system.cpp create mode 100644 lib/base/systhr.cpp create mode 100644 lib/base/util.cpp create mode 100644 lib/ldaputil/.cvsignore create mode 100644 lib/ldaputil/cert.c create mode 100644 lib/ldaputil/certmap.c create mode 100644 lib/ldaputil/certmap.conf create mode 100644 lib/ldaputil/dbconf.c create mode 100644 lib/ldaputil/encode.c create mode 100644 lib/ldaputil/errors.c create mode 100644 lib/ldaputil/examples/Makefile create mode 100644 lib/ldaputil/examples/README create mode 100644 lib/ldaputil/examples/init.c create mode 100644 lib/ldaputil/examples/plugin.c create mode 100644 lib/ldaputil/examples/plugin.h create mode 100644 lib/ldaputil/init.c create mode 100644 lib/ldaputil/ldapauth.c create mode 100644 lib/ldaputil/ldapu-changes.html create mode 100644 lib/ldaputil/ldaputili.h create mode 100644 lib/ldaputil/vtable.c create mode 100644 lib/libaccess/.cvsignore create mode 100644 lib/libaccess/access_plhash.cpp create mode 100644 lib/libaccess/access_plhash.h create mode 100644 lib/libaccess/acl.tab.cpp create mode 100644 lib/libaccess/acl.tab.h create mode 100644 lib/libaccess/acl.yy.cpp create mode 100644 lib/libaccess/aclcache.cpp create mode 100644 lib/libaccess/aclcache.h create mode 100644 lib/libaccess/aclerror.cpp create mode 100644 lib/libaccess/acleval.cpp create mode 100644 lib/libaccess/aclflush.cpp create mode 100644 lib/libaccess/aclpriv.h create mode 100644 lib/libaccess/aclscan.h create mode 100644 lib/libaccess/aclscan.l create mode 100644 lib/libaccess/aclspace.cpp create mode 100644 lib/libaccess/acltext.y create mode 100644 lib/libaccess/acltools.cpp create mode 100644 lib/libaccess/aclutil.cpp create mode 100644 lib/libaccess/aclutil.h create mode 100644 lib/libaccess/authdb.cpp create mode 100644 lib/libaccess/las.h create mode 100644 lib/libaccess/lasdns.cpp create mode 100644 lib/libaccess/lasdns.h create mode 100644 lib/libaccess/lasgroup.cpp create mode 100644 lib/libaccess/lasip.cpp create mode 100644 lib/libaccess/lasip.h create mode 100644 lib/libaccess/lastod.cpp create mode 100644 lib/libaccess/lasuser.cpp create mode 100644 lib/libaccess/ldapauth.h create mode 100644 lib/libaccess/method.cpp create mode 100644 lib/libaccess/nsautherr.cpp create mode 100644 lib/libaccess/nseframe.cpp create mode 100644 lib/libaccess/oneeval.cpp create mode 100644 lib/libaccess/oneeval.h create mode 100644 lib/libaccess/parse.h create mode 100644 lib/libaccess/permhash.h create mode 100644 lib/libaccess/register.cpp create mode 100644 lib/libaccess/symbols.cpp create mode 100644 lib/libaccess/usi.cpp create mode 100644 lib/libaccess/usrcache.cpp create mode 100644 lib/libaccess/yy-sed create mode 100644 lib/libadmin/.cvsignore create mode 100644 lib/libadmin/error.c create mode 100644 lib/libadmin/template.c create mode 100644 lib/libadmin/util.c create mode 100644 lib/libsi18n/getstrmem.h create mode 100644 lib/libsi18n/getstrprop.c create mode 100644 lib/libsi18n/gsslapd.h create mode 100644 lib/libsi18n/makstrdb.c create mode 100644 lib/libsi18n/reshash.c create mode 100644 lib/libsi18n/reshash.h create mode 100644 lib/libsi18n/txtfile.c create mode 100644 lib/libsi18n/txtfile.h create mode 100644 ltmain.sh create mode 100644 m4/db.m4 create mode 100644 m4/fhs.m4 create mode 100644 m4/icu.m4 create mode 100644 m4/kerberos.m4 create mode 100644 m4/libtool.m4 create mode 100644 m4/ltoptions.m4 create mode 100644 m4/ltsugar.m4 create mode 100644 m4/ltversion.m4 create mode 100644 m4/lt~obsolete.m4 create mode 100644 m4/mozldap.m4 create mode 100644 m4/netsnmp.m4 create mode 100644 m4/nspr.m4 create mode 100644 m4/nss.m4 create mode 100644 m4/nunc-stans.m4 create mode 100644 m4/openldap.m4 create mode 100644 m4/pcre.m4 create mode 100644 m4/sasl.m4 create mode 100644 m4/selinux.m4 create mode 100644 m4/svrcore.m4 create mode 100644 m4/systemd.m4 create mode 100644 man/man1/cl-dump.1 create mode 100644 man/man1/dbgen.pl.1 create mode 100644 man/man1/dbscan.1 create mode 100644 man/man1/ds-logpipe.py.1 create mode 100644 man/man1/dsktune.1 create mode 100644 man/man1/infadd.1 create mode 100644 man/man1/ldap-agent.1 create mode 100644 man/man1/ldclt.1 create mode 100644 man/man1/ldif.1 create mode 100644 man/man1/logconv.pl.1 create mode 100644 man/man1/migratecred.1 create mode 100644 man/man1/mmldif.1 create mode 100644 man/man1/pwdhash.1 create mode 100644 man/man1/readnsstate.1 create mode 100644 man/man1/repl-monitor.1 create mode 100644 man/man1/rsearch.1 create mode 100644 man/man8/bak2db.8 create mode 100644 man/man8/bak2db.pl.8 create mode 100644 man/man8/cleanallruv.pl.8 create mode 100644 man/man8/db2bak.8 create mode 100644 man/man8/db2bak.pl.8 create mode 100644 man/man8/db2index.8 create mode 100644 man/man8/db2index.pl.8 create mode 100644 man/man8/db2ldif.8 create mode 100644 man/man8/db2ldif.pl.8 create mode 100644 man/man8/dbmon.sh.8 create mode 100644 man/man8/dbverify.8 create mode 100644 man/man8/dn2rdn.8 create mode 100644 man/man8/fixup-linkedattrs.pl.8 create mode 100644 man/man8/fixup-memberof.pl.8 create mode 100644 man/man8/ldif2db.8 create mode 100644 man/man8/ldif2db.pl.8 create mode 100644 man/man8/ldif2ldap.8 create mode 100644 man/man8/migrate-ds.pl.8 create mode 100644 man/man8/monitor.8 create mode 100644 man/man8/ns-accountstatus.pl.8 create mode 100644 man/man8/ns-activate.pl.8 create mode 100644 man/man8/ns-inactivate.pl.8 create mode 100644 man/man8/ns-newpwpolicy.pl.8 create mode 100644 man/man8/ns-slapd.8 create mode 100644 man/man8/remove-ds.pl.8 create mode 100644 man/man8/restart-dirsrv.8 create mode 100644 man/man8/restoreconfig.8 create mode 100644 man/man8/saveconfig.8 create mode 100644 man/man8/schema-reload.pl.8 create mode 100644 man/man8/setup-ds.pl.8 create mode 100644 man/man8/start-dirsrv.8 create mode 100644 man/man8/status-dirsrv.8 create mode 100644 man/man8/stop-dirsrv.8 create mode 100644 man/man8/suffix2instance.8 create mode 100644 man/man8/syntax-validate.pl.8 create mode 100644 man/man8/upgradedb.8 create mode 100644 man/man8/upgradednformat.8 create mode 100644 man/man8/usn-tombstone-cleanup.pl.8 create mode 100644 man/man8/verify-db.pl.8 create mode 100644 man/man8/vlvindex.8 create mode 100755 missing create mode 100644 rpm.mk create mode 100644 rpm/389-ds-base-devel.README create mode 100644 rpm/389-ds-base-git.sh create mode 100644 rpm/389-ds-base.spec.in create mode 100755 rpm/add_patches.sh create mode 100755 rpm/rpmverrel.sh create mode 100644 selinux/Makefile create mode 100644 selinux/dirsrv.fc.in create mode 100644 selinux/dirsrv.if create mode 100644 selinux/dirsrv.te create mode 100644 slapi.doxy create mode 100755 wrappers/cl-dump.in create mode 100755 wrappers/dbscan.in create mode 100644 wrappers/ds_systemd_ask_password_acl.in create mode 100755 wrappers/dsktune.in create mode 100755 wrappers/infadd.in create mode 100644 wrappers/initscript.in create mode 100644 wrappers/ldap-agent-initscript.in create mode 100755 wrappers/ldap-agent.in create mode 100755 wrappers/ldclt.in create mode 100755 wrappers/ldif.in create mode 100755 wrappers/migratecred.in create mode 100755 wrappers/mmldif.in create mode 100755 wrappers/pwdhash.in create mode 100755 wrappers/repl-monitor.in create mode 100755 wrappers/rsearch.in create mode 100644 wrappers/systemd-snmp.service.in create mode 100644 wrappers/systemd.group.in create mode 100644 wrappers/systemd.template.asan.service.in create mode 100644 wrappers/systemd.template.service.in create mode 100644 wrappers/systemd.template.sysconfig diff --git a/.cvsignore b/.cvsignore new file mode 100644 index 0000000..e50a4a3 --- /dev/null +++ b/.cvsignore @@ -0,0 +1,5 @@ +Linux +built +modules.mk +pumpkin.dat +.cvsignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f92bcd8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,162 @@ +autom4te.cache +*~ +*.patch +.autotools +.cproject +.project +.settings +.cache +*.a +*.dirstamp +*.la +*.lo +*.o +*.pyc +__pycache__ +.libs +.deps +rpmbuild +rpm/389-ds-base.spec +Makefile +config.h +config.log +config.status +dberrstrs.h +dbscan-bin +dirsrv.pc +dsktune-bin +infadd-bin +ldap-agent-bin +ldclt-bin +ldif-bin +libtool +makstrdb +migratecred-bin +mmldif-bin +ns-slapd +ns-slapd.properties +pwdhash-bin +rsearch-bin +stamp-h1 +ldap/admin/src/dirsrv +ldap/admin/src/scripts/80upgradednformat.pl +ldap/admin/src/scripts/DSCreate.pm +ldap/admin/src/scripts/DSMigration.pm +ldap/admin/src/scripts/DSSharedLib +ldap/admin/src/scripts/DSUpdate.pm +ldap/admin/src/scripts/DSUtil.pm +ldap/admin/src/scripts/DialogManager.pm +ldap/admin/src/scripts/Migration.pm +ldap/admin/src/scripts/Setup.pm +ldap/admin/src/scripts/SetupDialogs.pm +ldap/admin/src/scripts/bak2db +ldap/admin/src/scripts/bak2db.pl +ldap/admin/src/scripts/cleanallruv.pl +ldap/admin/src/scripts/db2bak +ldap/admin/src/scripts/db2bak.pl +ldap/admin/src/scripts/db2index +ldap/admin/src/scripts/db2index.pl +ldap/admin/src/scripts/db2ldif +ldap/admin/src/scripts/db2ldif.pl +ldap/admin/src/scripts/dbverify +ldap/admin/src/scripts/dn2rdn +ldap/admin/src/scripts/dscreate.map +ldap/admin/src/scripts/dsorgentries.map +ldap/admin/src/scripts/dsupdate.map +ldap/admin/src/scripts/fixup-linkedattrs.pl +ldap/admin/src/scripts/fixup-memberof.pl +ldap/admin/src/scripts/ldif2db +ldap/admin/src/scripts/ldif2db.pl +ldap/admin/src/scripts/ldif2ldap +ldap/admin/src/scripts/migrate-ds.pl +ldap/admin/src/scripts/monitor +ldap/admin/src/scripts/ns-accountstatus.pl +ldap/admin/src/scripts/ns-activate.pl +ldap/admin/src/scripts/ns-inactivate.pl +ldap/admin/src/scripts/ns-newpwpolicy.pl +ldap/admin/src/scripts/remove-ds.pl +ldap/admin/src/scripts/repl-monitor.pl +ldap/admin/src/scripts/restart-dirsrv +ldap/admin/src/scripts/restoreconfig +ldap/admin/src/scripts/saveconfig +ldap/admin/src/scripts/schema-reload.pl +ldap/admin/src/scripts/setup-ds.pl +ldap/admin/src/scripts/setup-ds.res +ldap/admin/src/scripts/start-dirsrv +ldap/admin/src/scripts/stop-dirsrv +ldap/admin/src/scripts/suffix2instance +ldap/admin/src/scripts/syntax-validate.pl +ldap/admin/src/scripts/template-bak2db +ldap/admin/src/scripts/template-bak2db.pl +ldap/admin/src/scripts/template-cleanallruv.pl +ldap/admin/src/scripts/template-db2bak +ldap/admin/src/scripts/template-db2bak.pl +ldap/admin/src/scripts/template-db2index +ldap/admin/src/scripts/template-db2index.pl +ldap/admin/src/scripts/template-db2ldif +ldap/admin/src/scripts/template-db2ldif.pl +ldap/admin/src/scripts/template-dbverify +ldap/admin/src/scripts/template-dn2rdn +ldap/admin/src/scripts/template-fixup-linkedattrs.pl +ldap/admin/src/scripts/template-fixup-memberof.pl +ldap/admin/src/scripts/template-fixup-memberuid.pl +ldap/admin/src/scripts/template-ldif2db +ldap/admin/src/scripts/template-ldif2db.pl +ldap/admin/src/scripts/template-ldif2ldap +ldap/admin/src/scripts/template-monitor +ldap/admin/src/scripts/template-ns-accountstatus.pl +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-restart-slapd +ldap/admin/src/scripts/template-restoreconfig +ldap/admin/src/scripts/template-saveconfig +ldap/admin/src/scripts/template-schema-reload.pl +ldap/admin/src/scripts/template-start-slapd +ldap/admin/src/scripts/template-stop-slapd +ldap/admin/src/scripts/template-suffix2instance +ldap/admin/src/scripts/template-syntax-validate.pl +ldap/admin/src/scripts/template-upgradednformat +ldap/admin/src/scripts/template-usn-tombstone-cleanup.pl +ldap/admin/src/scripts/template-verify-db.pl +ldap/admin/src/scripts/template-vlvindex +ldap/admin/src/scripts/upgradedb +ldap/admin/src/scripts/upgradednformat +ldap/admin/src/scripts/usn-tombstone-cleanup.pl +ldap/admin/src/scripts/verify-db.pl +ldap/admin/src/scripts/vlvindex +ldap/admin/src/slapd.inf +ldap/admin/src/template-initconfig +ldap/ldif/template-baseacis.ldif +ldap/ldif/template-bitwise.ldif +ldap/ldif/template-country.ldif +ldap/ldif/template-dnaplugin.ldif +ldap/ldif/template-domain.ldif +ldap/ldif/template-dse.ldif +ldap/ldif/template-ldapi-autobind.ldif +ldap/ldif/template-ldapi-default.ldif +ldap/ldif/template-ldapi.ldif +ldap/ldif/template-locality.ldif +ldap/ldif/template-org.ldif +ldap/ldif/template-orgunit.ldif +ldap/ldif/template-pampta.ldif +ldap/ldif/template-sasl.ldif +ldap/ldif/template-state.ldif +ldap/ldif/template-suffix-db.ldif +ldap/servers/slapd/tools/rsearch/scripts/dbgen.pl +ldap/servers/snmp/ldap-agent.conf +wrappers/cl-dump +wrappers/dbscan +wrappers/dirsrv +wrappers/dirsrv-snmp +wrappers/dsktune +wrappers/infadd +wrappers/ldap-agent +wrappers/ldclt +wrappers/ldif +wrappers/migratecred +wrappers/mmldif +wrappers/pwdhash +wrappers/repl-monitor +wrappers/rsearch + diff --git a/389-doap.rdf b/389-doap.rdf new file mode 100644 index 0000000..56be064 --- /dev/null +++ b/389-doap.rdf @@ -0,0 +1,47 @@ + + + + + 2005-06-01 + 389 Project + 389 + + Directory Server, Admin Server, Graphical Management Console, web based tools + The 389 Project provides an LDAPv3 compliant directory server, HTTP based administration server, graphical management console, and web based tools. + LDAPv3 - IETF RFC 4511-4518 + + + 389-devel@lists.fedoraproject.org + 389-users@lists.fedoraproject.org + 389-announce@lists.fedoraproject.org + 389-commits@lists.fedoraproject.org + + + C + Perl + Java + + + stable + 389-ds-base-1.2.11 + 2012-10-09 + 1.2.11.16 + + + + + + + + + + + Rich Megginson + + + + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e75ac72 --- /dev/null +++ b/LICENSE @@ -0,0 +1,27 @@ +Copyright (C) 2015 Red Hat +See files 'LICENSE.GPLv3+' and 'LICENSE.openssl' for more information. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Additional permission under GPLv3 section 7: + +If you modify this Program, or any covered work, by linking or +combining it with OpenSSL, or a modified version of OpenSSL licensed +under the OpenSSL license +(https://www.openssl.org/source/license.html), the licensors of this +Program grant you additional permission to convey the resulting +work. Corresponding Source for a non-source form of such a +combination shall include the source code for the parts that are +licensed under the OpenSSL license as well as that of the covered +work. diff --git a/LICENSE.GPLv3+ b/LICENSE.GPLv3+ new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/LICENSE.GPLv3+ @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/LICENSE.openssl b/LICENSE.openssl new file mode 100644 index 0000000..1625bce --- /dev/null +++ b/LICENSE.openssl @@ -0,0 +1,11 @@ +Additional permission under GPLv3 section 7: + +If you modify this Program, or any covered work, by linking or +combining it with OpenSSL, or a modified version of OpenSSL licensed +under the OpenSSL license +(https://www.openssl.org/source/license.html), the licensors of this +Program grant you additional permission to convey the resulting +work. Corresponding Source for a non-source form of such a +combination shall include the source code for the parts that are +licensed under the OpenSSL license as well as that of the covered +work. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..d54a2cc --- /dev/null +++ b/Makefile.am @@ -0,0 +1,2029 @@ +# look for included m4 files in the ./m4/ directory +ACLOCAL_AMFLAGS = -I m4 +NULLSTRING := +SPACE := $(NULLSTRING) # the space is between the ) and the # +COLON := $(NULLSTRING):# a colon +QUOTE := $(NULLSTRING)"# a double quote" + +#------------------------ +# Compiler Flags +#------------------------ +BUILDNUM := $(shell perl $(srcdir)/buildnum.pl) +NQBUILDNUM := $(subst \,,$(subst $(QUOTE),,$(BUILDNUM))) +DEBUG_DEFINES = @debug_defs@ +GCCSEC_DEFINES = @gccsec_defs@ +ASAN_DEFINES = @asan_defs@ +SYSTEMD_DEFINES = @systemd_defs@ +# the -U undefines these symbols - should use the corresponding DS_ ones instead - see configure.ac +DS_DEFINES = -DBUILD_NUM=$(BUILDNUM) -DVENDOR="\"$(vendor)\"" -DBRAND="\"$(brand)\"" -DCAPBRAND="\"$(capbrand)\"" \ + -UPACKAGE_VERSION -UPACKAGE_TARNAME -UPACKAGE_STRING -UPACKAGE_BUGREPORT +if enable_nunc_stans +NUNC_STANS_INCLUDES = $(nunc_stans_inc) +NUNC_STANS_LINK = $(nunc_stans_lib) -lnunc-stans +NUNC_STANS_ON = 1 +else +NUNC_STANS_ON = 0 +endif +DS_INCLUDES = -I$(srcdir)/ldap/include -I$(srcdir)/ldap/servers/slapd -I$(srcdir)/include -I. $(NUNC_STANS_INCLUDES) + +if enable_asan +ASAN_ON = 1 +else +ASAN_ON = 0 +endif + + +if SYSTEMD +WITH_SYSTEMD = 1 +else +WITH_SYSTEMD = 0 +endif + +# these paths are dependent on the settings of prefix and exec_prefix which may be specified +# at make time. So we cannot use AC_DEFINE in the configure.ac because that would set the +# values prior to their being defined. Defining them here ensures that they are properly +# expanded before use. See create_instance.h for more details. The quoting ensures that +# the values are quoted for the shell command, and the value expands to a quoted string +# value in the header file e.g. +# #define LOCALSTATEDIR "/var" +# without the quotes, it would be +# #define LOCALSTATEDIR /var +# which would be an error +PATH_DEFINES = -DLOCALSTATEDIR="\"$(localstatedir)\"" -DSYSCONFDIR="\"$(sysconfdir)\"" \ + -DLIBDIR="\"$(libdir)\"" -DBINDIR="\"$(bindir)\"" \ + -DDATADIR="\"$(datadir)\"" -DDOCDIR="\"$(docdir)\"" \ + -DSBINDIR="\"$(sbindir)\"" -DPLUGINDIR="\"$(serverplugindir)\"" -DTEMPLATEDIR="\"$(sampledatadir)\"" + +AM_CPPFLAGS = $(DEBUG_DEFINES) $(GCCSEC_DEFINES) $(ASAN_DEFINES) $(DS_DEFINES) $(DS_INCLUDES) $(PATH_DEFINES) $(SYSTEMD_DEFINES) +PLUGIN_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ @systemd_inc@ +# We need to make sure that libpthread is linked before libc on HP-UX. +if HPUX +AM_LDFLAGS = -lpthread +else +#AM_LDFLAGS = -Wl,-z,defs +AM_LDFLAGS = $(ASAN_DEFINES) +endif + +#------------------------ +# Linker Flags +#------------------------ +NSPR_LINK = @nspr_lib@ -lplc4 -lplds4 -lnspr4 +NSS_LINK = @nss_lib@ -lssl3 -lnss3 +if OPENLDAP +# with recent versions of openldap - if you link with both ldap_r and ldap, the +# shared lib _fini for one will stomp on the other, and the program will crash +LDAPSDK_LINK_NOTHR = @openldap_lib@ -lldap@ol_libver@ @ldap_lib_ldif@ -llber@ol_libver@ +LDAPSDK_LINK = @openldap_lib@ -lldap_r@ol_libver@ @ldap_lib_ldif@ -llber@ol_libver@ +ldaplib = openldap +ldaplib_defs = -DUSE_OPENLDAP +else +LDAPSDK_LINK = @ldapsdk_lib@ -lssldap60 -lprldap60 -lldap60 -lldif60 +LDAPSDK_LINK_NOTHR = $(LDAPSDK_LINK) +ldaplib = mozldap +ldaplib_defs = +endif +DB_LINK = @db_lib@ -ldb-@db_libver@ +SASL_LINK = @sasl_lib@ -lsasl2 +SVRCORE_LINK = @svrcore_lib@ -lsvrcore +ICU_LINK = @icu_lib@ -licui18n -licuuc -licudata +PCRE_LINK = @pcre_lib@ -lpcre +NETSNMP_LINK = @netsnmp_lib@ @netsnmp_link@ +PAM_LINK = -lpam +KERBEROS_LINK = $(kerberos_lib) +DLOPEN_LINK = -ldl +SYSTEMD_LINK = @systemd_lib@ + + +LIBSOCKET=@LIBSOCKET@ +LIBNSL=@LIBNSL@ +LIBDL=@LIBDL@ +LIBCSTD=@LIBCSTD@ +LIBCRUN=@LIBCRUN@ +THREADLIB=@THREADLIB@ +LIBCRYPT=@LIBCRYPT@ + +#------------------------ +# Generated Sources +#------------------------ +BUILT_SOURCES = dberrstrs.h \ + $(POLICY_FC) + +if enable_posix_winsync +LIBPOSIX_WINSYNC_PLUGIN = libposix-winsync-plugin.la +POSIX_WINSYNC_PLUGIN_LDIF = ldap/ldif/50posix-winsync-plugin.ldif +endif + +CLEANFILES = dberrstrs.h ns-slapd.properties \ + ldap/admin/src/scripts/template-dbverify ldap/admin/src/template-initconfig \ + ldap/admin/src/scripts/dscreate.map ldap/admin/src/scripts/remove-ds.pl \ + ldap/admin/src/scripts/DSCreate.pm ldap/admin/src/scripts/DSMigration.pm \ + ldap/admin/src/scripts/DSUpdate.pm ldap/admin/src/scripts/dsupdate.map \ + ldap/admin/src/scripts/dsorgentries.map ldap/admin/src/scripts/migrate-ds.pl \ + ldap/admin/src/scripts/Migration.pm ldap/admin/src/scripts/SetupDialogs.pm \ + ldap/admin/src/scripts/setup-ds.pl ldap/admin/src/scripts/setup-ds.res \ + ldap/admin/src/scripts/start-dirsrv ldap/admin/src/scripts/stop-dirsrv \ + ldap/admin/src/scripts/restart-dirsrv ldap/admin/src/scripts/Setup.pm \ + ldap/admin/src/scripts/status-dirsrv \ + ldap/admin/src/scripts/template-bak2db ldap/admin/src/scripts/template-bak2db.pl \ + ldap/admin/src/scripts/template-db2bak ldap/admin/src/scripts/template-db2bak.pl \ + ldap/admin/src/scripts/template-db2index ldap/admin/src/scripts/template-db2index.pl \ + ldap/admin/src/scripts/template-db2ldif ldap/admin/src/scripts/template-db2ldif.pl \ + ldap/admin/src/scripts/template-ldif2db ldap/admin/src/scripts/template-ldif2db.pl \ + ldap/admin/src/scripts/template-ldif2ldap ldap/admin/src/scripts/template-monitor \ + ldap/admin/src/scripts/template-ns-accountstatus.pl 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-restart-slapd ldap/admin/src/scripts/template-restoreconfig \ + ldap/admin/src/scripts/template-saveconfig ldap/admin/src/scripts/template-start-slapd \ + ldap/admin/src/scripts/template-stop-slapd ldap/admin/src/scripts/template-suffix2instance \ + ldap/admin/src/scripts/template-upgradedb \ + ldap/admin/src/scripts/template-upgradednformat \ + ldap/admin/src/scripts/template-usn-tombstone-cleanup.pl \ + ldap/admin/src/scripts/template-verify-db.pl \ + ldap/admin/src/scripts/template-vlvindex ldap/admin/src/scripts/DSUtil.pm \ + ldap/ldif/template-baseacis.ldif ldap/ldif/template-bitwise.ldif ldap/ldif/template-country.ldif \ + ldap/ldif/template-dnaplugin.ldif ldap/ldif/template-domain.ldif ldap/ldif/template-dse.ldif \ + ldap/ldif/template-ldapi-autobind.ldif ldap/ldif/template-ldapi-default.ldif \ + ldap/ldif/template-ldapi.ldif ldap/ldif/template-locality.ldif ldap/ldif/template-org.ldif \ + ldap/ldif/template-orgunit.ldif ldap/ldif/template-pampta.ldif ldap/ldif/template-sasl.ldif \ + ldap/ldif/template-state.ldif ldap/ldif/template-suffix-db.ldif \ + ldap/admin/src/scripts/bak2db ldap/admin/src/scripts/db2bak ldap/admin/src/scripts/upgradedb \ + ldap/admin/src/scripts/db2index ldap/admin/src/scripts/db2ldif \ + ldap/admin/src/scripts/dn2rdn ldap/admin/src/scripts/ldif2db \ + ldap/admin/src/scripts/ldif2ldap ldap/admin/src/scripts/monitor \ + ldap/admin/src/scripts/restoreconfig ldap/admin/src/scripts/saveconfig \ + ldap/admin/src/scripts/suffix2instance \ + ldap/admin/src/scripts/upgradednformat ldap/admin/src/scripts/vlvindex \ + ldap/admin/src/scripts/bak2db.pl ldap/admin/src/scripts/db2bak.pl \ + ldap/admin/src/scripts/db2index.pl ldap/admin/src/scripts/db2ldif.pl \ + ldap/admin/src/scripts/fixup-linkedattrs.pl ldap/admin/src/scripts/fixup-memberof.pl \ + ldap/admin/src/scripts/cleanallruv.pl ldap/admin/src/scripts/ldif2db.pl \ + ldap/admin/src/scripts/ns-accountstatus.pl ldap/admin/src/scripts/ns-activate.pl \ + ldap/admin/src/scripts/ns-inactivate.pl ldap/admin/src/scripts/ns-newpwpolicy.pl \ + ldap/admin/src/scripts/schema-reload.pl ldap/admin/src/scripts/syntax-validate.pl \ + ldap/admin/src/scripts/usn-tombstone-cleanup.pl ldap/admin/src/scripts/verify-db.pl \ + ldap/admin/src/scripts/ds_selinux_port_query ldap/admin/src/scripts/ds_selinux_enabled \ + ldap/admin/src/scripts/dbverify ldap/admin/src/scripts/readnsstate \ + ldap/admin/src/scripts/dbmon.sh \ + $(NULL) + +clean-local: + -rm -rf dist + -rm -rf selinux-built + +dberrstrs.h: Makefile + perl $(srcdir)/ldap/servers/slapd/mkDBErrStrs.pl -i @db_incdir@ -o . + +selinux-built: + cp -r $(srcdir)/selinux $@ + +selinux-built/dirsrv.fc: selinux-built + $(fixupcmd) selinux-built/dirsrv.fc.in > $@ + + +#------------------------ +# Install Paths +#------------------------ +prefixdir = @prefixdir@ +configdir = $(sysconfdir)@configdir@ +sampledatadir = $(datadir)@sampledatadir@ +propertydir = $(datadir)@propertydir@ +schemadir = $(sysconfdir)@schemadir@ +serverdir = $(libdir)@serverdir@ +serverplugindir = $(libdir)@serverplugindir@ +taskdir = $(datadir)@scripttemplatedir@ +systemdsystemunitdir = @with_systemdsystemunitdir@ +systemdsystemconfdir = @with_systemdsystemconfdir@ +systemdgroupname = @with_systemdgroupname@ +initdir = @initdir@ +initconfigdir = $(sysconfdir)@initconfigdir@ +instconfigdir = @instconfigdir@ +perldir = $(libdir)@perldir@ +pythondir = $(libdir)@pythondir@ +infdir = $(datadir)@infdir@ +mibdir = $(datadir)@mibdir@ +updatedir = $(datadir)@updatedir@ +pkgconfigdir = $(libdir)/pkgconfig +serverincdir = $(includedir)@serverincdir@ + +defaultuser=@defaultuser@ +defaultgroup=@defaultgroup@ + +#------------------------ +# Build Products +#------------------------ +sbin_PROGRAMS = ns-slapd ldap-agent-bin + +bin_PROGRAMS = dbscan-bin dsktune-bin infadd-bin ldclt-bin \ + ldif-bin migratecred-bin mmldif-bin pwdhash-bin rsearch-bin + +server_LTLIBRARIES = libslapd.la libns-dshttpd.la + +# this is how to add optional plugins +if enable_pam_passthru +LIBPAM_PASSTHRU_PLUGIN = libpam-passthru-plugin.la +enable_pam_passthru = 1 +endif +if enable_dna +LIBDNA_PLUGIN = libdna-plugin.la +enable_dna = 1 +endif + +if enable_bitwise +LIBBITWISE_PLUGIN = libbitwise-plugin.la +enable_bitwise = 1 +endif + +if enable_presence +LIBPRESENCE_PLUGIN = libpresence-plugin.la +LIBPRESENCE_SCHEMA = $(srcdir)/ldap/schema/10presence.ldif +enable_presence = on +else +enable_presence = off +endif + +if SELINUX +POLICY_FC = selinux-built/dirsrv.fc +endif + +if enable_acctpolicy +LIBACCTPOLICY_PLUGIN = libacctpolicy-plugin.la +LIBACCTPOLICY_SCHEMA = $(srcdir)/ldap/schema/60acctpolicy.ldif +enable_acctpolicy = 1 +endif + +serverplugin_LTLIBRARIES = libacl-plugin.la libattr-unique-plugin.la \ + libautomember-plugin.la libback-ldbm.la libchainingdb-plugin.la \ + libcollation-plugin.la libcos-plugin.la libderef-plugin.la \ + libpbe-plugin.la libdistrib-plugin.la libhttp-client-plugin.la \ + liblinkedattrs-plugin.la libmanagedentries-plugin.la \ + libmemberof-plugin.la libpassthru-plugin.la libpwdstorage-plugin.la \ + libcontentsync-plugin.la \ + libreferint-plugin.la libreplication-plugin.la libretrocl-plugin.la \ + libroles-plugin.la libstatechange-plugin.la libsyntax-plugin.la \ + libviews-plugin.la libschemareload-plugin.la libusn-plugin.la \ + libacctusability-plugin.la librootdn-access-plugin.la \ + libwhoami-plugin.la $(LIBACCTPOLICY_PLUGIN) \ + $(LIBPAM_PASSTHRU_PLUGIN) $(LIBDNA_PLUGIN) \ + $(LIBBITWISE_PLUGIN) $(LIBPRESENCE_PLUGIN) $(LIBPOSIX_WINSYNC_PLUGIN) + +nodist_property_DATA = ns-slapd.properties + +noinst_PROGRAMS = makstrdb + +noinst_LIBRARIES = libavl.a libldaputil.a + +dist_noinst_HEADERS = \ + include/i18n.h \ + include/netsite.h \ + include/base/crit.h \ + include/base/dbtbase.h \ + include/base/ereport.h \ + include/base/file.h \ + include/base/fsmutex.h \ + include/base/plist.h \ + include/base/pool.h \ + include/base/shexp.h \ + include/base/systems.h \ + include/base/systhr.h \ + include/base/util.h \ + include/ldaputil/cert.h \ + include/ldaputil/certmap.h \ + include/ldaputil/dbconf.h \ + include/ldaputil/encode.h \ + include/ldaputil/errors.h \ + include/ldaputil/extcmap.h \ + include/ldaputil/init.h \ + include/ldaputil/ldapauth.h \ + include/ldaputil/ldaputil.h \ + include/libaccess/aclerror.h \ + include/libaccess/acleval.h \ + include/libaccess/aclglobal.h \ + include/libaccess/acl.h \ + include/libaccess/aclproto.h \ + include/libaccess/aclstruct.h \ + include/libaccess/attrec.h \ + include/libaccess/authdb.h \ + include/libaccess/dbtlibaccess.h \ + include/libaccess/dnfstruct.h \ + include/libaccess/ipfstruct.h \ + include/libaccess/las.h \ + include/libaccess/nsautherr.h \ + include/libaccess/nsauth.h \ + include/libaccess/nserror.h \ + include/libaccess/symbols.h \ + include/libaccess/userauth.h \ + include/libaccess/usi.h \ + include/libaccess/usrcache.h \ + include/libadmin/dbtlibadmin.h \ + include/libadmin/libadmin.h \ + include/public/netsite.h \ + include/public/nsapi.h \ + include/public/base/systems.h \ + include/public/nsacl/aclapi.h \ + include/public/nsacl/acldef.h \ + include/public/nsacl/nserrdef.h \ + include/public/nsacl/plistdef.h \ + ldap/include/avl.h \ + ldap/include/dblayer.h \ + ldap/include/disptmpl.h \ + ldap/include/ldaplog.h \ + ldap/include/ldaprot.h \ + ldap/include/ldbm.h \ + ldap/include/portable.h \ + ldap/include/regex.h \ + ldap/include/srchpref.h \ + ldap/include/sysexits-compat.h \ + ldap/servers/plugins/collation/config.h \ + ldap/servers/plugins/collation/collate.h \ + ldap/servers/plugins/collation/orfilter.h \ + ldap/servers/plugins/chainingdb/cb.h \ + ldap/servers/plugins/deref/deref.h \ + ldap/servers/plugins/acctpolicy/acctpolicy.h \ + ldap/servers/plugins/posix-winsync/posix-wsp-ident.h \ + ldap/servers/plugins/posix-winsync/posix-group-func.h \ + ldap/servers/plugins/roles/roles_cache.h \ + ldap/servers/plugins/usn/usn.h \ + ldap/servers/plugins/pwdstorage/pwdstorage.h \ + ldap/servers/plugins/pwdstorage/md5.h \ + ldap/servers/plugins/acl/acl.h \ + ldap/servers/plugins/linkedattrs/linked_attrs.h \ + ldap/servers/plugins/rootdn_access/rootdn_access.h \ + ldap/servers/plugins/acct_usability/acct_usability.h \ + ldap/servers/plugins/retrocl/retrocl.h \ + ldap/servers/plugins/uiduniq/plugin-utils.h \ + ldap/servers/plugins/memberof/memberof.h \ + ldap/servers/plugins/replication/cl5_api.h \ + ldap/servers/plugins/replication/cl4_api.h \ + ldap/servers/plugins/replication/llist.h \ + ldap/servers/plugins/replication/repl_shared.h \ + ldap/servers/plugins/replication/csnpl.h \ + ldap/servers/plugins/replication/cl5.h \ + ldap/servers/plugins/replication/repl-session-plugin.h \ + ldap/servers/plugins/replication/repl.h \ + ldap/servers/plugins/replication/windows_prot_private.h \ + ldap/servers/plugins/replication/repl_helper.h \ + ldap/servers/plugins/replication/repl_objset.h \ + ldap/servers/plugins/replication/repl5.h \ + ldap/servers/plugins/replication/cl5_test.h \ + ldap/servers/plugins/replication/repl5_ruv.h \ + ldap/servers/plugins/replication/cl5_clcache.h \ + ldap/servers/plugins/replication/cl4.h \ + ldap/servers/plugins/replication/cl_crypt.h \ + ldap/servers/plugins/replication/urp.h \ + ldap/servers/plugins/replication/winsync-plugin.h \ + ldap/servers/plugins/replication/windowsrepl.h \ + ldap/servers/plugins/replication/repl5_prot_private.h \ + ldap/servers/plugins/pam_passthru/pam_passthru.h \ + ldap/servers/plugins/syntaxes/syntax.h \ + ldap/servers/plugins/cos/cos_cache.h \ + ldap/servers/plugins/sync/sync.h \ + ldap/servers/plugins/passthru/passthru.h \ + ldap/servers/plugins/rever/rever.h \ + ldap/servers/plugins/http/http_client.h \ + ldap/servers/plugins/http/http_impl.h \ + ldap/servers/plugins/automember/automember.h \ + ldap/servers/plugins/mep/mep.h \ + ldap/servers/slapd/agtmmap.h \ + ldap/servers/slapd/auth.h \ + ldap/servers/slapd/csngen.h \ + ldap/servers/slapd/disconnect_errors.h \ + ldap/servers/slapd/disconnect_error_strings.h \ + ldap/servers/slapd/fe.h \ + ldap/servers/slapd/filter.h \ + ldap/servers/slapd/getopt_ext.h \ + ldap/servers/slapd/getsocketpeer.h \ + ldap/servers/slapd/http.h \ + ldap/servers/slapd/index_subsys.h \ + ldap/servers/slapd/intrinsics.h \ + ldap/servers/slapd/log.h \ + ldap/servers/slapd/mozldap.h \ + ldap/servers/slapd/openldapber.h \ + ldap/servers/slapd/poll_using_select.h \ + ldap/servers/slapd/prerrstrs.h \ + ldap/servers/slapd/protect_db.h \ + ldap/servers/slapd/proto-slap.h \ + ldap/servers/slapd/pw.h \ + ldap/servers/slapd/secerrstrs.h \ + ldap/servers/slapd/slap.h \ + ldap/servers/slapd/slapi-plugin-compat4.h \ + ldap/servers/slapd/slapi-plugin.h \ + ldap/servers/slapd/slapi-private.h \ + ldap/servers/slapd/snmp_collator.h \ + ldap/servers/slapd/sslerrstrs.h \ + ldap/servers/slapd/statechange.h \ + ldap/servers/slapd/uuid.h \ + ldap/servers/slapd/vattr_spi.h \ + ldap/servers/slapd/views.h \ + ldap/servers/slapd/back-ldbm/attrcrypt.h \ + ldap/servers/slapd/back-ldbm/back-ldbm.h \ + ldap/servers/slapd/back-ldbm/dblayer.h \ + ldap/servers/slapd/back-ldbm/idlapi.h \ + ldap/servers/slapd/back-ldbm/import.h \ + ldap/servers/slapd/back-ldbm/ldbm_config.h \ + ldap/servers/slapd/back-ldbm/perfctrs.h \ + ldap/servers/slapd/back-ldbm/proto-back-ldbm.h \ + ldap/servers/slapd/back-ldbm/vlv_key.h \ + ldap/servers/slapd/back-ldbm/vlv_srch.h \ + ldap/servers/slapd/tools/ldaptool.h \ + ldap/servers/slapd/tools/ldaptool-sasl.h \ + ldap/servers/slapd/tools/ldclt/ldap-private.h \ + ldap/servers/slapd/tools/ldclt/ldclt.h \ + ldap/servers/slapd/tools/ldclt/port.h \ + ldap/servers/slapd/tools/ldclt/remote.h \ + ldap/servers/slapd/tools/ldclt/scalab01.h \ + ldap/servers/slapd/tools/ldclt/utils.h \ + ldap/servers/slapd/tools/rsearch/addthread.h \ + ldap/servers/slapd/tools/rsearch/infadd.h \ + ldap/servers/slapd/tools/rsearch/nametable.h \ + ldap/servers/slapd/tools/rsearch/rsearch.h \ + ldap/servers/slapd/tools/rsearch/sdattable.h \ + ldap/servers/slapd/tools/rsearch/searchthread.h \ + ldap/servers/snmp/ldap-agent.h \ + ldap/systools/pio.h \ + lib/base/lexer_pvt.h \ + lib/base/plist_pvt.h \ + lib/ldaputil/ldaputili.h \ + lib/libaccess/access_plhash.h \ + lib/libaccess/aclcache.h \ + lib/libaccess/aclpriv.h \ + lib/libaccess/aclscan.h \ + lib/libaccess/acl.tab.h \ + lib/libaccess/aclutil.h \ + lib/libaccess/lasdns.h \ + lib/libaccess/las.h \ + lib/libaccess/lasip.h \ + lib/libaccess/ldapauth.h \ + lib/libaccess/oneeval.h \ + lib/libaccess/parse.h \ + lib/libaccess/permhash.h \ + lib/libsi18n/getstrmem.h \ + lib/libsi18n/gsslapd.h \ + lib/libsi18n/reshash.h \ + lib/libsi18n/txtfile.h \ + $(NULL) + +dist_noinst_DATA = \ + $(srcdir)/buildnum.pl \ + $(srcdir)/dirsrv.pc.in \ + $(srcdir)/ldap/admin/src/*.pl \ + $(srcdir)/ldap/admin/src/*.in \ + $(srcdir)/ldap/admin/src/scripts/*.in \ + $(srcdir)/ldap/admin/src/scripts/*.ldif \ + $(srcdir)/ldap/admin/src/scripts/*.pl \ + $(srcdir)/ldap/admin/src/scripts/*.pm \ + $(srcdir)/ldap/admin/src/scripts/*.py \ + $(srcdir)/ldap/admin/src/scripts/*.sh \ + $(srcdir)/ldap/admin/src/scripts/migrate-ds.res \ + $(srcdir)/ldap/ldif/*.in \ + $(srcdir)/ldap/ldif/*.ldif \ + $(srcdir)/ldap/schema/*.ldif \ + $(srcdir)/ldap/schema/slapd-collations.conf \ + $(srcdir)/ldap/servers/slapd/mkDBErrStrs.pl \ + $(srcdir)/ldap/servers/slapd/tools/rsearch/scripts/dbgen* \ + $(srcdir)/ldap/servers/snmp/ldap-agent.conf \ + $(srcdir)/ldap/servers/snmp/redhat-directory.mib \ + $(srcdir)/lib/ldaputil/certmap.conf \ + $(srcdir)/m4 \ + $(srcdir)/rpm/389-ds-base.spec.in \ + $(srcdir)/rpm/389-ds-base-devel.README \ + $(srcdir)/rpm/389-ds-base-git.sh \ + $(srcdir)/selinux \ + $(srcdir)/README \ + $(srcdir)/LICENSE \ + $(srcdir)/LICENSE.* \ + $(srcdir)/VERSION.sh \ + $(srcdir)/wrappers/*.in \ + $(srcdir)/wrappers/systemd.template.sysconfig \ + $(srcdir)/dirsrvtests \ + $(NULL) + +#------------------------ +# Installed Files +#------------------------ +config_DATA = $(srcdir)/lib/ldaputil/certmap.conf \ + $(srcdir)/ldap/schema/slapd-collations.conf \ + ldap/admin/src/template-initconfig \ + ldap/servers/snmp/ldap-agent.conf + +# the schema files in this list are either not +# standard schema, not tested, or not compatible +# with the default schema e.g. there is +# considerable overlap of 60changelog.ldif and 01common.ldif +# and 60inetmail.ldif and 50ns-mail.ldif among others +sampledata_DATA = ldap/admin/src/scripts/DSSharedLib \ + $(srcdir)/ldap/ldif/Ace.ldif \ + $(srcdir)/ldap/ldif/European.ldif \ + $(srcdir)/ldap/ldif/Eurosuffix.ldif \ + $(srcdir)/ldap/ldif/Example.ldif \ + $(srcdir)/ldap/ldif/Example-roles.ldif \ + $(srcdir)/ldap/ldif/Example-views.ldif \ + $(srcdir)/ldap/ldif/template.ldif \ + ldap/ldif/template-dse.ldif \ + ldap/ldif/template-suffix-db.ldif \ + ldap/ldif/template-ldapi.ldif \ + ldap/ldif/template-ldapi-default.ldif \ + ldap/ldif/template-ldapi-autobind.ldif \ + ldap/ldif/template-pampta.ldif \ + ldap/ldif/template-dnaplugin.ldif \ + ldap/ldif/template-bitwise.ldif \ + ldap/ldif/template-org.ldif \ + ldap/ldif/template-domain.ldif \ + ldap/ldif/template-state.ldif \ + ldap/ldif/template-locality.ldif \ + ldap/ldif/template-country.ldif \ + ldap/ldif/template-orgunit.ldif \ + ldap/ldif/template-baseacis.ldif \ + ldap/ldif/template-sasl.ldif \ + ldap/ldif/90betxn-plugins.ldif \ + $(srcdir)/ldap/servers/slapd/tools/rsearch/scripts/dbgen-FamilyNames \ + $(srcdir)/ldap/servers/slapd/tools/rsearch/scripts/dbgen-GivenNames \ + $(srcdir)/ldap/servers/slapd/tools/rsearch/scripts/dbgen-OrgUnits \ + $(srcdir)/ldap/schema/10rfc2307bis.ldif \ + $(srcdir)/ldap/schema/60changelog.ldif \ + $(srcdir)/ldap/schema/60inetmail.ldif \ + $(srcdir)/ldap/schema/60krb5kdc.ldif \ + $(srcdir)/ldap/schema/60kerberos.ldif \ + $(srcdir)/ldap/schema/60nis.ldif \ + $(srcdir)/ldap/schema/60qmail.ldif \ + $(srcdir)/ldap/schema/60radius.ldif \ + $(srcdir)/ldap/schema/60rfc4876.ldif \ + $(srcdir)/ldap/schema/60samba.ldif \ + $(srcdir)/ldap/schema/60samba3.ldif \ + $(srcdir)/ldap/schema/60sendmail.ldif \ + $(LIBPRESENCE_SCHEMA) + +schema_DATA = $(srcdir)/ldap/schema/00core.ldif \ + $(srcdir)/ldap/schema/01core389.ldif \ + $(srcdir)/ldap/schema/02common.ldif \ + $(srcdir)/ldap/schema/05rfc2927.ldif \ + $(srcdir)/ldap/schema/05rfc4523.ldif \ + $(srcdir)/ldap/schema/05rfc4524.ldif \ + $(srcdir)/ldap/schema/06inetorgperson.ldif \ + $(srcdir)/ldap/schema/10automember-plugin.ldif \ + $(srcdir)/ldap/schema/10dna-plugin.ldif \ + $(srcdir)/ldap/schema/10mep-plugin.ldif \ + $(srcdir)/ldap/schema/10rfc2307.ldif \ + $(srcdir)/ldap/schema/20subscriber.ldif \ + $(srcdir)/ldap/schema/25java-object.ldif \ + $(srcdir)/ldap/schema/28pilot.ldif \ + $(srcdir)/ldap/schema/30ns-common.ldif \ + $(srcdir)/ldap/schema/50ns-admin.ldif \ + $(srcdir)/ldap/schema/50ns-certificate.ldif \ + $(srcdir)/ldap/schema/50ns-directory.ldif \ + $(srcdir)/ldap/schema/50ns-mail.ldif \ + $(srcdir)/ldap/schema/50ns-value.ldif \ + $(srcdir)/ldap/schema/50ns-web.ldif \ + $(srcdir)/ldap/schema/60pam-plugin.ldif \ + $(srcdir)/ldap/schema/60posix-winsync-plugin.ldif \ + $(srcdir)/ldap/schema/60autofs.ldif \ + $(srcdir)/ldap/schema/60eduperson.ldif \ + $(srcdir)/ldap/schema/60mozilla.ldif \ + $(srcdir)/ldap/schema/60pureftpd.ldif \ + $(srcdir)/ldap/schema/60rfc2739.ldif \ + $(srcdir)/ldap/schema/60rfc3712.ldif \ + $(srcdir)/ldap/schema/60sabayon.ldif \ + $(srcdir)/ldap/schema/60sudo.ldif \ + $(srcdir)/ldap/schema/60trust.ldif \ + $(srcdir)/ldap/schema/60nss-ldap.ldif \ + $(srcdir)/ldap/schema/99user.ldif \ + $(LIBACCTPOLICY_SCHEMA) + +sbin_SCRIPTS = ldap/admin/src/scripts/setup-ds.pl \ + ldap/admin/src/scripts/migrate-ds.pl \ + ldap/admin/src/scripts/remove-ds.pl \ + ldap/admin/src/scripts/start-dirsrv \ + ldap/admin/src/scripts/stop-dirsrv \ + ldap/admin/src/scripts/restart-dirsrv \ + ldap/admin/src/scripts/status-dirsrv \ + ldap/admin/src/scripts/bak2db \ + ldap/admin/src/scripts/db2bak \ + ldap/admin/src/scripts/db2index \ + ldap/admin/src/scripts/db2ldif \ + ldap/admin/src/scripts/dn2rdn \ + ldap/admin/src/scripts/ldif2db \ + ldap/admin/src/scripts/ldif2ldap \ + ldap/admin/src/scripts/monitor \ + ldap/admin/src/scripts/restoreconfig \ + ldap/admin/src/scripts/saveconfig \ + ldap/admin/src/scripts/suffix2instance \ + ldap/admin/src/scripts/upgradednformat \ + ldap/admin/src/scripts/vlvindex \ + ldap/admin/src/scripts/bak2db.pl \ + ldap/admin/src/scripts/db2bak.pl \ + ldap/admin/src/scripts/db2index.pl \ + ldap/admin/src/scripts/db2ldif.pl \ + ldap/admin/src/scripts/fixup-linkedattrs.pl \ + ldap/admin/src/scripts/fixup-memberof.pl \ + ldap/admin/src/scripts/cleanallruv.pl \ + ldap/admin/src/scripts/ldif2db.pl \ + ldap/admin/src/scripts/ns-accountstatus.pl \ + ldap/admin/src/scripts/ns-activate.pl \ + ldap/admin/src/scripts/ns-inactivate.pl \ + ldap/admin/src/scripts/ns-newpwpolicy.pl \ + ldap/admin/src/scripts/schema-reload.pl \ + ldap/admin/src/scripts/syntax-validate.pl \ + ldap/admin/src/scripts/usn-tombstone-cleanup.pl \ + ldap/admin/src/scripts/verify-db.pl \ + ldap/admin/src/scripts/dbverify \ + ldap/admin/src/scripts/upgradedb \ + ldap/admin/src/scripts/dbmon.sh \ + ldap/admin/src/scripts/ds_selinux_enabled \ + ldap/admin/src/scripts/ds_selinux_port_query \ + wrappers/ds_systemd_ask_password_acl \ + wrappers/ldap-agent + +bin_SCRIPTS = ldap/servers/slapd/tools/rsearch/scripts/dbgen.pl \ + wrappers/dbscan \ + wrappers/dsktune \ + wrappers/infadd \ + wrappers/ldclt \ + wrappers/ldif \ + $(srcdir)/ldap/admin/src/logconv.pl \ + wrappers/migratecred \ + wrappers/mmldif \ + wrappers/pwdhash \ + wrappers/rsearch \ + wrappers/cl-dump \ + ldap/admin/src/scripts/cl-dump.pl \ + wrappers/repl-monitor \ + ldap/admin/src/scripts/repl-monitor.pl \ + ldap/admin/src/scripts/readnsstate \ + ldap/admin/src/scripts/ds-logpipe.py + +# SCRIPTS makes them executables - these are perl modules +# and should not be marked as executable - so use DATA +perl_DATA = ldap/admin/src/scripts/SetupLog.pm \ + ldap/admin/src/scripts/Resource.pm \ + ldap/admin/src/scripts/DSUtil.pm \ + ldap/admin/src/scripts/Setup.pm \ + ldap/admin/src/scripts/SetupDialogs.pm \ + ldap/admin/src/scripts/Inf.pm \ + ldap/admin/src/scripts/DialogManager.pm \ + ldap/admin/src/scripts/Dialog.pm \ + ldap/admin/src/scripts/DSDialogs.pm \ + ldap/admin/src/scripts/Migration.pm \ + ldap/admin/src/scripts/DSMigration.pm \ + ldap/admin/src/scripts/FileConn.pm \ + ldap/admin/src/scripts/DSCreate.pm \ + ldap/admin/src/scripts/DSUpdate.pm \ + ldap/admin/src/scripts/DSUpdateDialogs.pm + +python_DATA = ldap/admin/src/scripts/failedbinds.py \ + ldap/admin/src/scripts/logregex.py + +property_DATA = ldap/admin/src/scripts/setup-ds.res \ + ldap/admin/src/scripts/migrate-ds.res + +task_SCRIPTS = ldap/admin/src/scripts/template-bak2db \ + ldap/admin/src/scripts/template-db2bak \ + ldap/admin/src/scripts/template-db2index \ + ldap/admin/src/scripts/template-db2ldif \ + ldap/admin/src/scripts/template-dn2rdn \ + ldap/admin/src/scripts/template-ldif2db \ + ldap/admin/src/scripts/template-ldif2ldap \ + ldap/admin/src/scripts/template-monitor \ + ldap/admin/src/scripts/template-restart-slapd \ + ldap/admin/src/scripts/template-restoreconfig \ + ldap/admin/src/scripts/template-saveconfig \ + ldap/admin/src/scripts/template-start-slapd \ + ldap/admin/src/scripts/template-stop-slapd \ + ldap/admin/src/scripts/template-suffix2instance \ + ldap/admin/src/scripts/template-upgradednformat \ + ldap/admin/src/scripts/template-vlvindex \ + ldap/admin/src/scripts/template-bak2db.pl \ + ldap/admin/src/scripts/template-db2bak.pl \ + ldap/admin/src/scripts/template-db2index.pl \ + ldap/admin/src/scripts/template-db2ldif.pl \ + ldap/admin/src/scripts/template-fixup-linkedattrs.pl \ + ldap/admin/src/scripts/template-fixup-memberof.pl \ + ldap/admin/src/scripts/template-fixup-memberuid.pl \ + ldap/admin/src/scripts/template-cleanallruv.pl \ + ldap/admin/src/scripts/template-ldif2db.pl \ + ldap/admin/src/scripts/template-ns-accountstatus.pl \ + 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-schema-reload.pl \ + ldap/admin/src/scripts/template-syntax-validate.pl \ + ldap/admin/src/scripts/template-usn-tombstone-cleanup.pl \ + ldap/admin/src/scripts/template-verify-db.pl \ + ldap/admin/src/scripts/template-dbverify + +if SYSTEMD +# yes, that is an @ in the filename . . . +systemdsystemunit_DATA = wrappers/$(PACKAGE_NAME)@.service \ + wrappers/$(systemdgroupname) \ + wrappers/$(PACKAGE_NAME)-snmp.service +else +if INITDDIR +init_SCRIPTS = wrappers/$(PACKAGE_NAME) \ + wrappers/$(PACKAGE_NAME)-snmp +endif +endif + +if SYSTEMD +initconfig_DATA = ldap/admin/src/$(PACKAGE_NAME) \ + wrappers/$(PACKAGE_NAME).systemd +else +if INITDDIR +initconfig_DATA = ldap/admin/src/$(PACKAGE_NAME) +endif +endif + +inf_DATA = ldap/admin/src/slapd.inf \ + ldap/admin/src/scripts/dscreate.map \ + ldap/admin/src/scripts/dsupdate.map \ + ldap/admin/src/scripts/dsorgentries.map \ + ldap/admin/src/defaults.inf + +mib_DATA = ldap/servers/snmp/redhat-directory.mib + +pkgconfig_DATA = $(PACKAGE_NAME).pc + +#------------------------ +# header files +#------------------------ +serverinc_HEADERS = ldap/servers/plugins/replication/repl-session-plugin.h \ + ldap/servers/slapd/slapi-plugin.h \ + ldap/servers/plugins/replication/winsync-plugin.h + +#------------------------ +# man pages +#------------------------ +dist_man_MANS = man/man1/dbscan.1 \ + man/man1/cl-dump.1 \ + man/man1/dbgen.pl.1 \ + man/man1/ds-logpipe.py.1 \ + man/man1/dsktune.1 \ + man/man1/infadd.1 \ + man/man1/ldap-agent.1 \ + man/man1/ldclt.1 \ + man/man1/ldif.1 \ + man/man1/logconv.pl.1 \ + man/man1/migratecred.1 \ + man/man1/mmldif.1 \ + man/man1/pwdhash.1 \ + man/man1/repl-monitor.1 \ + man/man1/rsearch.1 \ + man/man1/readnsstate.1 \ + man/man8/migrate-ds.pl.8 \ + man/man8/ns-slapd.8 \ + man/man8/restart-dirsrv.8 \ + man/man8/setup-ds.pl.8 \ + man/man8/start-dirsrv.8 \ + man/man8/stop-dirsrv.8 \ + man/man8/status-dirsrv.8 \ + man/man8/bak2db.8 man/man8/bak2db.pl.8 \ + man/man8/db2bak.8 man/man8/db2bak.pl.8 \ + man/man8/db2ldif.8 man/man8/db2ldif.pl.8 \ + man/man8/db2index.8 man/man8/db2index.pl.8 \ + man/man8/ldif2db.8 man/man8/ldif2db.pl.8 \ + man/man8/dbverify.8 man/man8/verify-db.pl.8 \ + man/man8/dbmon.sh.8 \ + man/man8/dn2rdn.8 man/man8/ldif2ldap.8 \ + man/man8/restoreconfig.8 man/man8/saveconfig.8 \ + man/man8/suffix2instance.8 man/man8/monitor.8 \ + man/man8/upgradednformat.8 man/man8/vlvindex.8 \ + man/man8/cleanallruv.pl.8 man/man8/schema-reload.pl.8 \ + man/man8/fixup-linkedattrs.pl.8 man/man8/fixup-memberof.pl.8 \ + man/man8/syntax-validate.pl.8 man/man8/usn-tombstone-cleanup.pl.8 \ + man/man8/ns-accountstatus.pl.8 man/man8/ns-newpwpolicy.pl.8 \ + man/man8/ns-activate.pl.8 man/man8/ns-inactivate.pl.8 \ + man/man8/upgradedb.8 man/man8/remove-ds.pl.8 + +#------------------------ +# updates +# the first 3 are just the examples provided - since they +# do not begin with two digits, they will be ignored +# the remaining items should begin with two digits that +# correspond to the order in which they should be applied +# perl files and LDIF files are DATA - not executable +# processed by the update script +# shell scripts and other files are SCRIPTS - executable +#------------------------ +update_DATA = ldap/admin/src/scripts/exampleupdate.pl \ + ldap/admin/src/scripts/exampleupdate.ldif \ + ldap/admin/src/scripts/10cleanupldapi.pl \ + ldap/admin/src/scripts/10delautodnsuffix.pl \ + ldap/admin/src/scripts/10fixrundir.pl \ + ldap/admin/src/scripts/20betxn.pl \ + ldap/admin/src/scripts/50addchainingsaslpwroles.ldif \ + ldap/admin/src/scripts/50acctusabilityplugin.ldif \ + ldap/admin/src/scripts/50automemberplugin.ldif \ + ldap/admin/src/scripts/50memberofindex.ldif \ + ldap/admin/src/scripts/50nstombstonecsn.ldif \ + ldap/admin/src/scripts/50bitstringsyntaxplugin.ldif \ + ldap/admin/src/scripts/50managedentriesplugin.ldif \ + ldap/admin/src/scripts/50memberofplugin.ldif \ + ldap/admin/src/scripts/50deliverymethodsyntaxplugin.ldif \ + ldap/admin/src/scripts/50nameuidsyntaxplugin.ldif \ + ldap/admin/src/scripts/50derefplugin.ldif \ + ldap/admin/src/scripts/50numericstringsyntaxplugin.ldif \ + ldap/admin/src/scripts/50disableurisyntaxplugin.ldif \ + ldap/admin/src/scripts/50printablestringsyntaxplugin.ldif \ + ldap/admin/src/scripts/50enhancedguidesyntaxplugin.ldif \ + ldap/admin/src/scripts/50schemareloadplugin.ldif \ + ldap/admin/src/scripts/50entryusnindex.ldif \ + ldap/admin/src/scripts/50syntaxvalidplugin.ldif \ + ldap/admin/src/scripts/50faxnumbersyntaxplugin.ldif \ + ldap/admin/src/scripts/50teletexterminalidsyntaxplugin.ldif \ + ldap/admin/src/scripts/50faxsyntaxplugin.ldif \ + ldap/admin/src/scripts/50fixNsState.pl \ + ldap/admin/src/scripts/50telexnumbersyntaxplugin.ldif \ + ldap/admin/src/scripts/50guidesyntaxplugin.ldif \ + ldap/admin/src/scripts/50targetuniqueid.ldif \ + ldap/ldif/50replication-plugins.ldif \ + ldap/admin/src/scripts/50linkedattrsplugin.ldif \ + $(POSIX_WINSYNC_PLUGIN_LDIF) \ + ldap/admin/src/scripts/50usnplugin.ldif \ + ldap/admin/src/scripts/50smd5pwdstorageplugin.ldif \ + ldap/admin/src/scripts/50refintprecedence.ldif \ + ldap/admin/src/scripts/50retroclprecedence.ldif \ + ldap/admin/src/scripts/50rootdnaccesscontrolplugin.ldif \ + ldap/admin/src/scripts/50contentsync.ldif \ + ldap/admin/src/scripts/60upgradeschemafiles.pl \ + ldap/admin/src/scripts/60upgradeconfigfiles.pl \ + ldap/admin/src/scripts/70upgradefromldif.pl \ + ldap/admin/src/scripts/80upgradednformat.pl \ + ldap/admin/src/scripts/81changelog.pl \ + ldap/admin/src/scripts/82targetuniqueidindex.pl \ + ldap/admin/src/scripts/90subtreerename.pl \ + ldap/admin/src/scripts/91subtreereindex.pl \ + ldap/admin/src/scripts/50AES-pbe-plugin.ldif\ + ldap/admin/src/scripts/50updateconfig.ldif \ + ldap/admin/src/scripts/52updateAESplugin.pl \ + ldap/admin/src/scripts/dnaplugindepends.ldif \ + ldap/admin/src/scripts/91reindex.pl + +update_SCRIPTS = ldap/admin/src/scripts/exampleupdate.sh + +#//////////////////////////////////////////////////////////////// +# +# Server Strings +# +#//////////////////////////////////////////////////////////////// +#------------------------ +# makstrdb +#------------------------ +makstrdb_SOURCES = lib/libsi18n/makstrdb.c + +makstrdb_CPPFLAGS = $(AM_CPPFLAGS) @nspr_inc@ + +#------------------------ +# ns-slapd.properties +#------------------------ +ns-slapd.properties: makstrdb + ./makstrdb + + +#//////////////////////////////////////////////////////////////// +# +# Static Server Libraries +# +#//////////////////////////////////////////////////////////////// +#------------------------ +# libavl +#------------------------ +libavl_a_SOURCES = ldap/libraries/libavl/avl.c + +#------------------------ +# libldaputil +#------------------------ +libldaputil_a_SOURCES = lib/ldaputil/cert.c \ + lib/ldaputil/certmap.c \ + lib/ldaputil/dbconf.c \ + lib/ldaputil/encode.c \ + lib/ldaputil/errors.c \ + lib/ldaputil/init.c \ + lib/ldaputil/ldapauth.c \ + lib/ldaputil/vtable.c + +libldaputil_a_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/lib/ldaputil @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ + + +#//////////////////////////////////////////////////////////////// +# +# Dynamic Server Libraries +# +#//////////////////////////////////////////////////////////////// + +#------------------------ +# libns-dshttpd +#------------------------ +libns_dshttpd_la_SOURCES = lib/libaccess/access_plhash.cpp \ + lib/libaccess/acl.tab.cpp \ + lib/libaccess/acl.yy.cpp \ + lib/libaccess/aclcache.cpp \ + lib/libaccess/aclerror.cpp \ + lib/libaccess/acleval.cpp \ + lib/libaccess/aclflush.cpp \ + lib/libaccess/aclspace.cpp \ + lib/libaccess/acltools.cpp \ + lib/libaccess/aclutil.cpp \ + lib/libaccess/authdb.cpp \ + lib/libaccess/lasdns.cpp \ + lib/libaccess/lasgroup.cpp \ + lib/libaccess/lasip.cpp \ + lib/libaccess/lastod.cpp \ + lib/libaccess/lasuser.cpp \ + lib/libaccess/method.cpp \ + lib/libaccess/nseframe.cpp \ + lib/libaccess/nsautherr.cpp \ + lib/libaccess/oneeval.cpp \ + lib/libaccess/register.cpp \ + lib/libaccess/symbols.cpp \ + lib/libaccess/usi.cpp \ + lib/libaccess/usrcache.cpp \ + lib/libadmin/error.c \ + lib/libadmin/template.c \ + lib/libadmin/util.c \ + lib/base/crit.cpp \ + lib/base/dns.cpp \ + lib/base/dnsdmain.cpp \ + lib/base/ereport.cpp \ + lib/base/file.cpp \ + lib/base/fsmutex.cpp \ + lib/base/net.cpp \ + lib/base/nscperror.c \ + lib/base/plist.cpp \ + lib/base/pool.cpp \ + lib/base/shexp.cpp \ + lib/base/system.cpp \ + lib/base/systhr.cpp \ + lib/base/util.cpp \ + lib/libsi18n/getstrprop.c \ + lib/libsi18n/reshash.c \ + lib/libsi18n/txtfile.c \ + $(libldaputil_a_SOURCES) + +libns_dshttpd_la_CPPFLAGS = -I$(srcdir)/include/base $(AM_CPPFLAGS) -I$(srcdir)/lib/ldaputil @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +libns_dshttpd_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(SASL_LINK) $(NSS_LINK) $(NSPR_LINK) + +#------------------------ +# libslapd +#------------------------ +libslapd_la_SOURCES = ldap/servers/slapd/add.c \ + ldap/servers/slapd/agtmmap.c \ + ldap/servers/slapd/apibroker.c \ + ldap/servers/slapd/attr.c \ + ldap/servers/slapd/attrlist.c \ + ldap/servers/slapd/attrsyntax.c \ + ldap/servers/slapd/auditlog.c \ + ldap/servers/slapd/ava.c \ + ldap/servers/slapd/backend.c \ + ldap/servers/slapd/backend_manager.c \ + ldap/servers/slapd/bitset.c \ + ldap/servers/slapd/bulk_import.c \ + ldap/servers/slapd/charray.c \ + ldap/servers/slapd/ch_malloc.c \ + ldap/servers/slapd/computed.c \ + ldap/servers/slapd/control.c \ + ldap/servers/slapd/counters.c \ + ldap/servers/slapd/csn.c \ + ldap/servers/slapd/csngen.c \ + ldap/servers/slapd/csnset.c \ + ldap/servers/slapd/defbackend.c \ + ldap/servers/slapd/delete.c \ + ldap/servers/slapd/dl.c \ + ldap/servers/slapd/dn.c \ + ldap/servers/slapd/dse.c \ + ldap/servers/slapd/dynalib.c \ + ldap/servers/slapd/entry.c \ + ldap/servers/slapd/entrywsi.c \ + ldap/servers/slapd/errormap.c \ + ldap/servers/slapd/eventq.c \ + ldap/servers/slapd/factory.c \ + ldap/servers/slapd/features.c \ + ldap/servers/slapd/fileio.c \ + ldap/servers/slapd/filter.c \ + ldap/servers/slapd/filtercmp.c \ + ldap/servers/slapd/filterentry.c \ + ldap/servers/slapd/generation.c \ + ldap/servers/slapd/getfilelist.c \ + ldap/servers/slapd/index_subsystem.c \ + ldap/servers/slapd/ldaputil.c \ + ldap/servers/slapd/lenstr.c \ + ldap/servers/slapd/libglobs.c \ + ldap/servers/slapd/localhost.c \ + ldap/servers/slapd/log.c \ + ldap/servers/slapd/mapping_tree.c \ + ldap/servers/slapd/match.c \ + ldap/servers/slapd/modify.c \ + ldap/servers/slapd/modrdn.c \ + ldap/servers/slapd/modutil.c \ + ldap/servers/slapd/object.c \ + ldap/servers/slapd/objset.c \ + ldap/servers/slapd/operation.c \ + ldap/servers/slapd/opshared.c \ + ldap/servers/slapd/pagedresults.c \ + ldap/servers/slapd/pblock.c \ + ldap/servers/slapd/plugin.c \ + ldap/servers/slapd/plugin_acl.c \ + ldap/servers/slapd/plugin_internal_op.c \ + ldap/servers/slapd/plugin_mr.c \ + ldap/servers/slapd/plugin_role.c \ + ldap/servers/slapd/plugin_syntax.c \ + ldap/servers/slapd/protect_db.c \ + ldap/servers/slapd/proxyauth.c \ + ldap/servers/slapd/pw.c \ + ldap/servers/slapd/pw_retry.c \ + ldap/servers/slapd/rdn.c \ + ldap/servers/slapd/referral.c \ + ldap/servers/slapd/regex.c \ + ldap/servers/slapd/resourcelimit.c \ + ldap/servers/slapd/result.c \ + ldap/servers/slapd/sasl_map.c \ + ldap/servers/slapd/schema.c \ + ldap/servers/slapd/schemaparse.c \ + ldap/servers/slapd/security_wrappers.c \ + ldap/servers/slapd/slapd_plhash.c \ + ldap/servers/slapd/slapi_counter.c \ + ldap/servers/slapd/slapi2nspr.c \ + ldap/servers/slapd/snmp_collator.c \ + ldap/servers/slapd/sort.c \ + ldap/servers/slapd/ssl.c \ + ldap/servers/slapd/str2filter.c \ + ldap/servers/slapd/subentry.c \ + ldap/servers/slapd/task.c \ + ldap/servers/slapd/time.c \ + ldap/servers/slapd/thread_data.c \ + ldap/servers/slapd/uniqueid.c \ + ldap/servers/slapd/uniqueidgen.c \ + ldap/servers/slapd/utf8.c \ + ldap/servers/slapd/utf8compare.c \ + ldap/servers/slapd/util.c \ + ldap/servers/slapd/uuid.c \ + ldap/servers/slapd/value.c \ + ldap/servers/slapd/valueset.c \ + ldap/servers/slapd/vattr.c \ + $(libavl_a_SOURCES) + +libslapd_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) @sasl_inc@ @db_inc@ @svrcore_inc@ @kerberos_inc@ @pcre_inc@ +if SPARC +libslapd_la_SOURCES += ldap/servers/slapd/slapi_counter_sunos_sparcv9.S +endif +libslapd_la_LIBADD = $(LDAPSDK_LINK) $(SASL_LINK) $(NUNC_STANS_LINK) $(SVRCORE_LINK) $(NSS_LINK) $(NSPR_LINK) $(KERBEROS_LINK) $(PCRE_LINK) $(THREADLIB) $(SYSTEMD_LINK) + + +#//////////////////////////////////////////////////////////////// +# +# Plugins +# +#//////////////////////////////////////////////////////////////// +#------------------------ +# libback-ldbm +#------------------------ +libback_ldbm_la_SOURCES = ldap/servers/slapd/back-ldbm/ancestorid.c \ + ldap/servers/slapd/back-ldbm/archive.c \ + ldap/servers/slapd/back-ldbm/backentry.c \ + ldap/servers/slapd/back-ldbm/cache.c \ + ldap/servers/slapd/back-ldbm/cleanup.c \ + ldap/servers/slapd/back-ldbm/close.c \ + ldap/servers/slapd/back-ldbm/dbhelp.c \ + ldap/servers/slapd/back-ldbm/dblayer.c \ + ldap/servers/slapd/back-ldbm/dbsize.c \ + ldap/servers/slapd/back-ldbm/dbversion.c \ + ldap/servers/slapd/back-ldbm/dn2entry.c \ + ldap/servers/slapd/back-ldbm/entrystore.c \ + ldap/servers/slapd/back-ldbm/filterindex.c \ + ldap/servers/slapd/back-ldbm/findentry.c \ + ldap/servers/slapd/back-ldbm/haschildren.c \ + ldap/servers/slapd/back-ldbm/id2entry.c \ + ldap/servers/slapd/back-ldbm/idl.c \ + ldap/servers/slapd/back-ldbm/idl_shim.c \ + ldap/servers/slapd/back-ldbm/idl_new.c \ + ldap/servers/slapd/back-ldbm/idl_common.c \ + ldap/servers/slapd/back-ldbm/import.c \ + ldap/servers/slapd/back-ldbm/import-merge.c \ + ldap/servers/slapd/back-ldbm/import-threads.c \ + ldap/servers/slapd/back-ldbm/index.c \ + ldap/servers/slapd/back-ldbm/init.c \ + ldap/servers/slapd/back-ldbm/instance.c \ + ldap/servers/slapd/back-ldbm/ldbm_abandon.c \ + ldap/servers/slapd/back-ldbm/ldbm_add.c \ + ldap/servers/slapd/back-ldbm/ldbm_attr.c \ + ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c \ + ldap/servers/slapd/back-ldbm/ldbm_attrcrypt_config.c \ + ldap/servers/slapd/back-ldbm/ldbm_bind.c \ + ldap/servers/slapd/back-ldbm/ldbm_compare.c \ + ldap/servers/slapd/back-ldbm/ldbm_config.c \ + ldap/servers/slapd/back-ldbm/ldbm_delete.c \ + ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c \ + ldap/servers/slapd/back-ldbm/ldbm_index_config.c \ + ldap/servers/slapd/back-ldbm/ldbm_instance_config.c \ + ldap/servers/slapd/back-ldbm/ldbm_modify.c \ + ldap/servers/slapd/back-ldbm/ldbm_modrdn.c \ + ldap/servers/slapd/back-ldbm/ldbm_search.c \ + ldap/servers/slapd/back-ldbm/ldbm_unbind.c \ + ldap/servers/slapd/back-ldbm/ldbm_usn.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 \ + ldap/servers/slapd/back-ldbm/nextid.c \ + ldap/servers/slapd/back-ldbm/parents.c \ + ldap/servers/slapd/back-ldbm/perfctrs.c \ + ldap/servers/slapd/back-ldbm/rmdb.c \ + ldap/servers/slapd/back-ldbm/seq.c \ + ldap/servers/slapd/back-ldbm/sort.c \ + ldap/servers/slapd/back-ldbm/start.c \ + ldap/servers/slapd/back-ldbm/uniqueid2entry.c \ + ldap/servers/slapd/back-ldbm/upgrade.c \ + ldap/servers/slapd/back-ldbm/vlv.c \ + ldap/servers/slapd/back-ldbm/vlv_key.c \ + ldap/servers/slapd/back-ldbm/vlv_srch.c + +libback_ldbm_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) @db_inc@ +libback_ldbm_la_LIBADD = libslapd.la $(DB_LINK) $(LDAPSDK_LINK) $(NSPR_LINK) +libback_ldbm_la_LDFLAGS = -avoid-version + +#------------------------ +# libacctpolicy-plugin +#------------------------ +libacctpolicy_plugin_la_SOURCES = ldap/servers/plugins/acctpolicy/acct_config.c \ + ldap/servers/plugins/acctpolicy/acct_init.c \ + ldap/servers/plugins/acctpolicy/acct_plugin.c \ + ldap/servers/plugins/acctpolicy/acct_util.c + +libacctpolicy_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libacctpolicy_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libacctpolicy_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libacctusability-plugin +#------------------------ +libacctusability_plugin_la_SOURCES = ldap/servers/plugins/acct_usability/acct_usability.c + +libacctusability_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libacctusability_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libacctusability_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libacl-plugin +#------------------------ +libacl_plugin_la_SOURCES = ldap/servers/plugins/acl/acl.c \ + ldap/servers/plugins/acl/acl_ext.c \ + ldap/servers/plugins/acl/aclanom.c \ + ldap/servers/plugins/acl/acleffectiverights.c \ + ldap/servers/plugins/acl/aclgroup.c \ + ldap/servers/plugins/acl/aclinit.c \ + ldap/servers/plugins/acl/acllas.c \ + ldap/servers/plugins/acl/acllist.c \ + ldap/servers/plugins/acl/aclparse.c \ + ldap/servers/plugins/acl/aclplugin.c \ + ldap/servers/plugins/acl/aclutil.c + +libacl_plugin_la_CPPFLAGS = -I$(srcdir)/include/libaccess $(PLUGIN_CPPFLAGS) +libacl_plugin_la_LIBADD = libslapd.la libns-dshttpd.la $(LDAPSDK_LINK) $(NSPR_LINK) $(LIBCSTD) $(LIBCRUN) +libacl_plugin_la_LDFLAGS = -avoid-version +libacl_plugin_la_LINK = $(CXXLINK) -avoid-version + +#------------------------ +# librootdn-access-plugin +#------------------------ +# +librootdn_access_plugin_la_SOURCES = ldap/servers/plugins/rootdn_access/rootdn_access.c + +librootdn_access_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +librootdn_access_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +librootdn_access_plugin_la_LDFLAGS = -avoid-version + + +#------------------------ +# libautomember-plugin +#------------------------ +libautomember_plugin_la_SOURCES = ldap/servers/plugins/automember/automember.c + +libautomember_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libautomember_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libautomember_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libattr-unique-plugin +#------------------------ +libattr_unique_plugin_la_SOURCES = ldap/servers/plugins/uiduniq/7bit.c \ + ldap/servers/plugins/uiduniq/uid.c \ + ldap/servers/plugins/uiduniq/utils.c + +libattr_unique_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libattr_unique_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libattr_unique_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libbitwise-plugin +#------------------------ +libbitwise_plugin_la_SOURCES = ldap/servers/plugins/bitwise/bitwise.c + +libbitwise_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libbitwise_plugin_la_LIBADD = libslapd.la +libbitwise_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libchainingdb-plugin +#------------------------ +libchainingdb_plugin_la_SOURCES = ldap/servers/plugins/chainingdb/cb_abandon.c \ + ldap/servers/plugins/chainingdb/cb_acl.c \ + ldap/servers/plugins/chainingdb/cb_add.c \ + ldap/servers/plugins/chainingdb/cb_bind.c \ + ldap/servers/plugins/chainingdb/cb_cleanup.c \ + ldap/servers/plugins/chainingdb/cb_close.c \ + ldap/servers/plugins/chainingdb/cb_compare.c \ + ldap/servers/plugins/chainingdb/cb_config.c \ + ldap/servers/plugins/chainingdb/cb_conn_stateless.c \ + ldap/servers/plugins/chainingdb/cb_controls.c \ + ldap/servers/plugins/chainingdb/cb_debug.c \ + ldap/servers/plugins/chainingdb/cb_delete.c \ + ldap/servers/plugins/chainingdb/cb_init.c \ + ldap/servers/plugins/chainingdb/cb_instance.c \ + ldap/servers/plugins/chainingdb/cb_modify.c \ + ldap/servers/plugins/chainingdb/cb_modrdn.c \ + ldap/servers/plugins/chainingdb/cb_monitor.c \ + ldap/servers/plugins/chainingdb/cb_schema.c \ + ldap/servers/plugins/chainingdb/cb_search.c \ + ldap/servers/plugins/chainingdb/cb_size.c \ + ldap/servers/plugins/chainingdb/cb_start.c \ + ldap/servers/plugins/chainingdb/cb_temp.c \ + ldap/servers/plugins/chainingdb/cb_test.c \ + ldap/servers/plugins/chainingdb/cb_unbind.c \ + ldap/servers/plugins/chainingdb/cb_utils.c + +libchainingdb_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libchainingdb_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libchainingdb_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libcollation-plugin +#------------------------ +libcollation_plugin_la_SOURCES = ldap/servers/plugins/collation/collate.c \ + ldap/servers/plugins/collation/config.c \ + ldap/servers/plugins/collation/orfilter.c + +libcollation_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) @icu_inc@ +libcollation_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) $(ICU_LINK) $(LIBCSTD) $(LIBCRUN) +libcollation_plugin_la_LDFLAGS = -avoid-version +libcollation_plugin_la_LINK = $(CXXLINK) -avoid-version + +#------------------------ +# libcos-plugin +#------------------------ +libcos_plugin_la_SOURCES = ldap/servers/plugins/cos/cos.c \ + ldap/servers/plugins/cos/cos_cache.c + +libcos_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libcos_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libcos_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libderef-plugin +#----------------------- +libderef_plugin_la_SOURCES = ldap/servers/plugins/deref/deref.c + +libderef_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libderef_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libderef_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libpbe-plugin +#----------------------- +libpbe_plugin_la_SOURCES = ldap/servers/plugins/rever/pbe.c \ + ldap/servers/plugins/rever/rever.c + +libpbe_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) @svrcore_inc@ +libpbe_plugin_la_LIBADD = libslapd.la $(NSS_LINK) +libpbe_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libdistrib-plugin +#------------------------ +libdistrib_plugin_la_SOURCES = ldap/servers/plugins/distrib/distrib.c + +libdistrib_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libdistrib_plugin_la_LIBADD = libslapd.la +libdistrib_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libdna-plugin +#------------------------ +libdna_plugin_la_SOURCES = ldap/servers/plugins/dna/dna.c + +libdna_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libdna_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libdna_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libhttp-client-plugin +#------------------------ +libhttp_client_plugin_la_SOURCES = ldap/servers/plugins/http/http_client.c \ + ldap/servers/plugins/http/http_impl.c + +libhttp_client_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libhttp_client_plugin_la_LIBADD = libslapd.la $(NSS_LINK) $(NSPR_LINK) +libhttp_client_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# liblinkedattrs-plugin +#------------------------ +liblinkedattrs_plugin_la_SOURCES = ldap/servers/plugins/linkedattrs/fixup_task.c \ + ldap/servers/plugins/linkedattrs/linked_attrs.c + +liblinkedattrs_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +liblinkedattrs_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +liblinkedattrs_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libmanagedentries-plugin +#------------------------ +libmanagedentries_plugin_la_SOURCES = ldap/servers/plugins/mep/mep.c + +libmanagedentries_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libmanagedentries_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libmanagedentries_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libmemberof-plugin +#------------------------ +libmemberof_plugin_la_SOURCES= ldap/servers/plugins/memberof/memberof.c \ + ldap/servers/plugins/memberof/memberof_config.c + +libmemberof_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libmemberof_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libmemberof_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libpam-passthru-plugin +#------------------------ +libpam_passthru_plugin_la_SOURCES = ldap/servers/plugins/pam_passthru/pam_ptconfig.c \ + ldap/servers/plugins/pam_passthru/pam_ptdebug.c \ + ldap/servers/plugins/pam_passthru/pam_ptimpl.c \ + ldap/servers/plugins/pam_passthru/pam_ptpreop.c + +libpam_passthru_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libpam_passthru_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) $(PAM_LINK) +libpam_passthru_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libpassthru-plugin +#------------------------ +libpassthru_plugin_la_SOURCES = ldap/servers/plugins/passthru/ptbind.c \ + ldap/servers/plugins/passthru/ptconfig.c \ + ldap/servers/plugins/passthru/ptconn.c \ + ldap/servers/plugins/passthru/ptdebug.c \ + ldap/servers/plugins/passthru/ptpreop.c \ + ldap/servers/plugins/passthru/ptutil.c + +libpassthru_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libpassthru_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libpassthru_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libposix-winsync-plugin +#------------------------ +libposix_winsync_plugin_la_SOURCES = ldap/servers/plugins/posix-winsync/posix-winsync.c \ + ldap/servers/plugins/posix-winsync/posix-group-func.c \ + ldap/servers/plugins/posix-winsync/posix-group-task.c \ + ldap/servers/plugins/posix-winsync/posix-winsync-config.c + +libposix_winsync_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) -DWINSYNC_TEST_POSIX \ + -I$(srcdir)/ldap/servers/plugins/replication +libposix_winsync_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libposix_winsync_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libpresence-plugin +#------------------------ +libpresence_plugin_la_SOURCES = ldap/servers/plugins/presence/presence.c + +libpresence_plugin_la_CPPFLAGS = -I$(srcdir)/ldap/servers/plugins/http $(PLUGIN_CPPFLAGS) +libpresence_plugin_la_LIBADD = libslapd.la +libpresence_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libpwdstorage-plugin +#------------------------ +libpwdstorage_plugin_la_SOURCES = ldap/servers/plugins/pwdstorage/clear_pwd.c \ + ldap/servers/plugins/pwdstorage/crypt_pwd.c \ + ldap/servers/plugins/pwdstorage/md5_pwd.c \ + ldap/servers/plugins/pwdstorage/md5c.c \ + ldap/servers/plugins/pwdstorage/ns-mta-md5_pwd.c \ + ldap/servers/plugins/pwdstorage/pwd_init.c \ + ldap/servers/plugins/pwdstorage/pwd_util.c \ + ldap/servers/plugins/pwdstorage/sha_pwd.c \ + ldap/servers/plugins/pwdstorage/smd5_pwd.c \ + ldap/servers/plugins/pwdstorage/ssha_pwd.c + +libpwdstorage_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libpwdstorage_plugin_la_LIBADD = libslapd.la $(NSS_LINK) $(NSPR_LINK) $(LIBCRYPT) +libpwdstorage_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libcontentsync-plugin +#------------------------ +libcontentsync_plugin_la_SOURCES = ldap/servers/plugins/sync/sync_init.c \ + ldap/servers/plugins/sync/sync_util.c \ + ldap/servers/plugins/sync/sync_refresh.c \ + ldap/servers/plugins/sync/sync_persist.c + +libcontentsync_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libcontentsync_plugin_la_LIBADD = libslapd.la $(NSS_LINK) $(NSPR_LINK) $(LIBCRYPT) +libcontentsync_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libreferint-plugin +#------------------------ +libreferint_plugin_la_SOURCES = ldap/servers/plugins/referint/referint.c + +libreferint_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libreferint_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libreferint_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libreplication-plugin +#------------------------ +libreplication_plugin_la_SOURCES = ldap/servers/plugins/replication/cl5_api.c \ + ldap/servers/plugins/replication/cl5_clcache.c \ + ldap/servers/plugins/replication/cl5_config.c \ + ldap/servers/plugins/replication/cl5_init.c \ + ldap/servers/plugins/replication/cl_crypt.c \ + ldap/servers/plugins/replication/csnpl.c \ + ldap/servers/plugins/replication/legacy_consumer.c \ + ldap/servers/plugins/replication/llist.c \ + ldap/servers/plugins/replication/repl_add.c \ + ldap/servers/plugins/replication/repl_bind.c \ + ldap/servers/plugins/replication/repl_compare.c \ + ldap/servers/plugins/replication/repl_connext.c \ + ldap/servers/plugins/replication/repl_controls.c \ + ldap/servers/plugins/replication/repl_delete.c \ + ldap/servers/plugins/replication/repl_entry.c \ + ldap/servers/plugins/replication/repl_ext.c \ + ldap/servers/plugins/replication/repl_extop.c \ + ldap/servers/plugins/replication/repl_globals.c \ + ldap/servers/plugins/replication/repl_init.c \ + ldap/servers/plugins/replication/repl_modify.c \ + ldap/servers/plugins/replication/repl_modrdn.c \ + ldap/servers/plugins/replication/repl_monitor.c \ + ldap/servers/plugins/replication/repl_objset.c \ + ldap/servers/plugins/replication/repl_opext.c \ + ldap/servers/plugins/replication/repl_ops.c \ + ldap/servers/plugins/replication/repl_rootdse.c \ + ldap/servers/plugins/replication/repl_search.c \ + ldap/servers/plugins/replication/repl_session_plugin.c \ + ldap/servers/plugins/replication/repl5_agmt.c \ + ldap/servers/plugins/replication/repl5_agmtlist.c \ + ldap/servers/plugins/replication/repl5_backoff.c \ + ldap/servers/plugins/replication/repl5_connection.c \ + ldap/servers/plugins/replication/repl5_inc_protocol.c \ + ldap/servers/plugins/replication/repl5_init.c \ + ldap/servers/plugins/replication/repl5_mtnode_ext.c \ + ldap/servers/plugins/replication/repl5_plugins.c \ + ldap/servers/plugins/replication/repl5_protocol.c \ + ldap/servers/plugins/replication/repl5_protocol_util.c \ + ldap/servers/plugins/replication/repl5_replica.c \ + ldap/servers/plugins/replication/repl5_replica_config.c \ + ldap/servers/plugins/replication/repl5_replica_dnhash.c \ + ldap/servers/plugins/replication/repl5_replica_hash.c \ + ldap/servers/plugins/replication/repl5_ruv.c \ + ldap/servers/plugins/replication/repl5_schedule.c \ + ldap/servers/plugins/replication/repl5_tot_protocol.c \ + ldap/servers/plugins/replication/repl5_total.c \ + ldap/servers/plugins/replication/repl5_updatedn_list.c \ + ldap/servers/plugins/replication/replutil.c \ + ldap/servers/plugins/replication/urp.c \ + ldap/servers/plugins/replication/urp_glue.c \ + ldap/servers/plugins/replication/urp_tombstone.c \ + ldap/servers/plugins/replication/windows_connection.c \ + ldap/servers/plugins/replication/windows_inc_protocol.c \ + ldap/servers/plugins/replication/windows_private.c \ + ldap/servers/plugins/replication/windows_protocol_util.c \ + ldap/servers/plugins/replication/windows_tot_protocol.c + +libreplication_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) @icu_inc@ @db_inc@ +libreplication_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSS_LINK) $(NSPR_LINK) $(ICU_LINK) $(DB_LINK) +libreplication_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libretrocl-plugin +#------------------------ +libretrocl_plugin_la_SOURCES = ldap/servers/plugins/retrocl/retrocl.c \ + ldap/servers/plugins/retrocl/retrocl_cn.c \ + ldap/servers/plugins/retrocl/retrocl_create.c \ + ldap/servers/plugins/retrocl/retrocl_po.c \ + ldap/servers/plugins/retrocl/retrocl_rootdse.c \ + ldap/servers/plugins/retrocl/retrocl_trim.c + +libretrocl_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libretrocl_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libretrocl_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libroles-plugin +#------------------------ +libroles_plugin_la_SOURCES = ldap/servers/plugins/roles/roles_cache.c \ + ldap/servers/plugins/roles/roles_plugin.c + +libroles_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libroles_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libroles_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libschemareload-plugin +#------------------------ +libschemareload_plugin_la_SOURCES = ldap/servers/plugins/schema_reload/schema_reload.c + +libschemareload_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libschemareload_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libschemareload_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libstatechange-plugin +#------------------------ +libstatechange_plugin_la_SOURCES = ldap/servers/plugins/statechange/statechange.c + +libstatechange_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libstatechange_plugin_la_LIBADD = libslapd.la +libstatechange_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libsyntax-plugin +#------------------------ +libsyntax_plugin_la_SOURCES = ldap/servers/plugins/syntaxes/bin.c \ + ldap/servers/plugins/syntaxes/bitstring.c \ + ldap/servers/plugins/syntaxes/ces.c \ + ldap/servers/plugins/syntaxes/cis.c \ + ldap/servers/plugins/syntaxes/debug.c \ + ldap/servers/plugins/syntaxes/dn.c \ + ldap/servers/plugins/syntaxes/deliverymethod.c \ + ldap/servers/plugins/syntaxes/facsimile.c \ + ldap/servers/plugins/syntaxes/guide.c \ + ldap/servers/plugins/syntaxes/int.c \ + ldap/servers/plugins/syntaxes/nameoptuid.c \ + ldap/servers/plugins/syntaxes/numericstring.c \ + ldap/servers/plugins/syntaxes/phonetic.c \ + ldap/servers/plugins/syntaxes/sicis.c \ + ldap/servers/plugins/syntaxes/string.c \ + ldap/servers/plugins/syntaxes/syntax_common.c \ + ldap/servers/plugins/syntaxes/tel.c \ + ldap/servers/plugins/syntaxes/telex.c \ + ldap/servers/plugins/syntaxes/teletex.c \ + ldap/servers/plugins/syntaxes/validate.c \ + ldap/servers/plugins/syntaxes/validate_task.c \ + ldap/servers/plugins/syntaxes/value.c + +libsyntax_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libsyntax_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libsyntax_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libusn-plugin +#------------------------ +libusn_plugin_la_SOURCES = ldap/servers/plugins/usn/usn.c \ + ldap/servers/plugins/usn/usn_cleanup.c + +libusn_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libusn_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libusn_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libviews-plugin +#------------------------ +libviews_plugin_la_SOURCES = ldap/servers/plugins/views/views.c + +libviews_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libviews_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libviews_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libwhoami-plugin +#------------------------ +libwhoami_plugin_la_SOURCES = ldap/servers/plugins/whoami/whoami.c + +libwhoami_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libwhoami_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libwhoami_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +#//////////////////////////////////////////////////////////////// +# +# Programs +# +#//////////////////////////////////////////////////////////////// +#------------------------ +# dbscan +#------------------------ +dbscan_bin_SOURCES = ldap/servers/slapd/tools/dbscan.c + +dbscan_bin_CPPFLAGS = @db_inc@ @nspr_inc@ $(AM_CPPFLAGS) +dbscan_bin_LDADD = $(NSPR_LINK) $(DB_LINK) + +#------------------------ +# dsktune +#------------------------ +dsktune_bin_SOURCES = ldap/systools/idsktune.c \ + ldap/systools/pio.c + +#------------------------ +# infadd +#------------------------ +infadd_bin_SOURCES = ldap/servers/slapd/tools/rsearch/addthread.c \ + ldap/servers/slapd/tools/rsearch/infadd.c \ + ldap/servers/slapd/tools/rsearch/nametable.c + +infadd_bin_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +infadd_bin_LDADD = $(NSPR_LINK) $(NSS_LINK) $(LDAPSDK_LINK) $(SASL_LINK) $(LIBSOCKET) + +#------------------------ +# ldap-agent +#------------------------ +ldap_agent_bin_SOURCES = ldap/servers/snmp/main.c \ + ldap/servers/snmp/ldap-agent.c \ + ldap/servers/slapd/agtmmap.c + +ldap_agent_bin_CPPFLAGS = $(AM_CPPFLAGS) @netsnmp_inc@ @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +ldap_agent_bin_LDADD = $(LDAPSDK_LINK_NOTHR) $(SASL_LINK) $(NSS_LINK) $(NSPR_LINK) $(NETSNMP_LINK) $(THREADLIB) +if SOLARIS +ldap_agent_bin_LDADD += -lrt +endif + + +#------------------------ +# ldclt +#------------------------ +ldclt_bin_SOURCES = ldap/servers/slapd/tools/ldaptool-sasl.c \ + ldap/servers/slapd/tools/ldclt/data.c \ + ldap/servers/slapd/tools/ldclt/ldapfct.c \ + ldap/servers/slapd/tools/ldclt/ldclt.c \ + ldap/servers/slapd/tools/ldclt/ldcltU.c \ + ldap/servers/slapd/tools/ldclt/parser.c \ + ldap/servers/slapd/tools/ldclt/port.c \ + ldap/servers/slapd/tools/ldclt/scalab01.c \ + ldap/servers/slapd/tools/ldclt/threadMain.c \ + ldap/servers/slapd/tools/ldclt/utils.c \ + ldap/servers/slapd/tools/ldclt/version.c \ + ldap/servers/slapd/tools/ldclt/workarounds.c + +if SOLARIS +ldclt_bin_SOURCES += ldap/servers/slapd/tools/ldclt/opCheck.c +endif + +ldclt_bin_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/ldap/servers/slapd/tools @openldap_inc@ @ldapsdk_inc@ @sasl_inc@ @nss_inc@ @nspr_inc@ +ldclt_bin_LDADD = $(NSPR_LINK) $(NSS_LINK) $(LDAPSDK_LINK) $(SASL_LINK) $(LIBNSL) $(LIBSOCKET) $(LIBDL) $(THREADLIB) + +#------------------------ +# ldif +#------------------------ +ldif_bin_SOURCES = ldap/servers/slapd/tools/ldif.c + +ldif_bin_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +ldif_bin_LDADD = $(NSPR_LINK) $(NSS_LINK) $(LDAPSDK_LINK_NOTHR) $(SASL_LINK) + +#------------------------ +# migratecred +#------------------------ +migratecred_bin_SOURCES = ldap/servers/slapd/tools/migratecred.c + +migratecred_bin_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +migratecred_bin_LDADD = libslapd.la $(NSPR_LINK) $(NSS_LINK) $(SVRCORE_LINK) $(LDAPSDK_LINK) $(SASL_LINK) + +#------------------------ +# mmldif +#------------------------ +mmldif_bin_SOURCES = ldap/servers/slapd/tools/mmldif.c + +mmldif_bin_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +mmldif_bin_LDADD = libslapd.la $(NSPR_LINK) $(NSS_LINK) $(SVRCORE_LINK) $(LDAPSDK_LINK_NOTHR) $(SASL_LINK) + +#------------------------ +# ns-slapd +#------------------------ +if enable_ldapi + GETSOCKETPEER=ldap/servers/slapd/getsocketpeer.c + enable_ldapi = 1 +endif +if enable_autobind + enable_autobind = 1 +endif +if enable_auto_dn_suffix + enable_auto_dn_suffix = 1 +endif + +ns_slapd_SOURCES = ldap/servers/slapd/abandon.c \ + ldap/servers/slapd/auth.c \ + ldap/servers/slapd/bind.c \ + ldap/servers/slapd/compare.c \ + ldap/servers/slapd/config.c \ + ldap/servers/slapd/configdse.c \ + ldap/servers/slapd/connection.c \ + ldap/servers/slapd/conntable.c \ + ldap/servers/slapd/daemon.c \ + ldap/servers/slapd/detach.c \ + ldap/servers/slapd/extendop.c \ + ldap/servers/slapd/fedse.c \ + ldap/servers/slapd/fileio.c \ + ldap/servers/slapd/getopt_ext.c \ + ldap/servers/slapd/globals.c \ + ldap/servers/slapd/house.c \ + ldap/servers/slapd/init.c \ + ldap/servers/slapd/main.c \ + ldap/servers/slapd/monitor.c \ + ldap/servers/slapd/passwd_extop.c \ + ldap/servers/slapd/psearch.c \ + ldap/servers/slapd/pw_mgmt.c \ + ldap/servers/slapd/rootdse.c \ + ldap/servers/slapd/sasl_io.c \ + ldap/servers/slapd/saslbind.c \ + ldap/servers/slapd/search.c \ + ldap/servers/slapd/start_tls_extop.c \ + ldap/servers/slapd/strdup.c \ + ldap/servers/slapd/stubs.c \ + ldap/servers/slapd/tempnam.c \ + ldap/servers/slapd/unbind.c \ + $(GETSOCKETPEER) + +ns_slapd_CPPFLAGS = $(AM_CPPFLAGS) @sasl_inc@ @openldap_inc@ @ldapsdk_inc@ @nss_inc@ \ + @nspr_inc@ @svrcore_inc@ @systemd_inc@ +ns_slapd_LDADD = libslapd.la libldaputil.a $(LDAPSDK_LINK) $(NSS_LINK) $(DLOPEN_LINK) \ + $(NSPR_LINK) $(SASL_LINK) $(SVRCORE_LINK) $(LIBNSL) $(LIBSOCKET) $(THREADLIB) $(SYSTEMD_LINK) +# We need to link ns-slapd with the C++ compiler on HP-UX since we load +# some C++ shared libraries (such as icu). +if HPUX +ns_slapd_LINK = $(CXXLINK) +else +ns_slapd_LINK = $(LINK) +endif + +#------------------------ +# pwdhash +#------------------------ +pwdhash_bin_SOURCES = ldap/servers/slapd/tools/pwenc.c + +pwdhash_bin_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +pwdhash_bin_LDADD = libslapd.la $(NSPR_LINK) $(NSS_LINK) $(SVRCORE_LINK) $(LDAPSDK_LINK) $(SASL_LINK) + +#------------------------ +# rsearch +#------------------------ +rsearch_bin_SOURCES = ldap/servers/slapd/tools/rsearch/nametable.c \ + ldap/servers/slapd/tools/rsearch/rsearch.c \ + ldap/servers/slapd/tools/rsearch/sdattable.c \ + ldap/servers/slapd/tools/rsearch/searchthread.c + +rsearch_bin_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +rsearch_bin_LDADD = $(NSPR_LINK) $(NSS_LINK) $(LDAPSDK_LINK) $(SASL_LINK) $(LIBSOCKET) + +# these are for the config files and scripts that we need to generate and replace +# the paths and other tokens with the real values set during configure/make +# note that we cannot just use AC_OUTPUT to do this for us, since it will do things like this: +# LD_LIBRARY_PATH = ${prefix}/lib/dirsrv +# i.e. it literally copies in '${prefix}' rather than expanding it out - we want this instead: +# LD_LIBRARY_PATH = /usr/lib/dirsrv +if BUNDLE +# on the systems on which we bundle, perldap will be in libdir/perl, so we need to point +# the perlpath there - on other systems, perldap will be installed as a site module into +# the system perl +fixupcmd = sed \ + -e 's,@bindir\@,$(bindir),g' \ + -e 's,@sbindir\@,$(sbindir),g' \ + -e 's,@libdir\@,$(libdir),g' \ + -e 's,@nspr_libdir\@,$(libdir),g' \ + -e 's,@nss_libdir\@,$(libdir),g' \ + -e 's,@ldapsdk_libdir\@,$(libdir),g' \ + -e 's,@ldapsdk_bindir\@,$(bindir),g' \ + -e 's,@ldaptool_bindir\@,$(bindir),g' \ + -e 's,@ldaptool_opts\@,$(ldaptool_opts),g' \ + -e 's,@plainldif_opts\@,$(plainldif_opts),g' \ + -e 's,@db_libdir\@,$(libdir),g' \ + -e 's,@db_bindir\@,$(bindir),g' \ + -e 's,@sasl_libdir\@,$(libdir),g' \ + -e 's,@sasl_path\@,$(libdir)/sasl2,g' \ + -e 's,@netsnmp_libdir\@,$(libdir),g' \ + -e 's,@pcre_libdir\@,$(libdir),g' \ + -e 's,@propertydir\@,$(propertydir),g' \ + -e 's,@datadir\@,$(datadir),g' \ + -e 's,@schemadir\@,$(schemadir),g' \ + -e 's,@serverdir\@,$(serverdir),g' \ + -e 's,@serverincdir\@,$(serverincdir),g' \ + -e 's,@serverplugindir\@,$(serverplugindir),g' \ + -e 's,@taskdir\@,$(taskdir),g' \ + -e 's,@configdir\@,$(configdir),g' \ + -e 's,@sysconfdir\@,$(sysconfdir),g' \ + -e 's,@localrundir\@,$(localrundir),g' \ + -e 's,@localstatedir\@,$(localstatedir),g' \ + -e 's,@infdir\@,$(infdir),g' \ + -e 's,@mibdir\@,$(mibdir),g' \ + -e 's,@templatedir\@,$(sampledatadir),g' \ + -e 's,@package_name\@,$(PACKAGE_NAME),g' \ + -e 's,@instconfigdir\@,$(instconfigdir),g' \ + -e 's,@enable_ldapi\@,$(enable_ldapi),g' \ + -e 's,@enable_pam_passthru\@,$(enable_pam_passthru),g' \ + -e 's,@enable_bitwise\@,$(enable_bitwise),g' \ + -e 's,@enable_dna\@,$(enable_dna),g' \ + -e 's,@enable_autobind\@,$(enable_autobind),g' \ + -e 's,@enable_auto_dn_suffix\@,$(enable_auto_dn_suffix),g' \ + -e 's,@enable_presence\@,$(enable_presence),g' \ + -e 's,@enable_asan\@,$(ASAN_ON),g' \ + -e 's,@ECHO_N\@,$(ECHO_N),g' \ + -e 's,@ECHO_C\@,$(ECHO_C),g' \ + -e 's,@brand\@,$(brand),g' \ + -e 's,@capbrand\@,$(capbrand),g' \ + -e 's,@vendor\@,$(vendor),g' \ + -e 's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g' \ + -e 's,@PACKAGE_VERSION\@,$(PACKAGE_VERSION),g' \ + -e 's,@PACKAGE_BASE_VERSION\@,$(PACKAGE_BASE_VERSION),g' \ + -e 's,@CONSOLE_VERSION\@,$(CONSOLE_VERSION),g' \ + -e 's,@BUILDNUM\@,$(BUILDNUM),g' \ + -e 's,@NQBUILD_NUM\@,$(NQBUILDNUM),g' \ + -e 's,@perlpath\@,$(perldir) $(libdir)/perl/arch $(libdir)/perl,g' \ + -e 's,@defaultuser\@,$(defaultuser),g' \ + -e 's,@defaultgroup\@,$(defaultgroup),g' \ + -e 's,@with_fhs_opt\@,@with_fhs_opt@,g' \ + -e 's,@with_selinux\@,@with_selinux@,g' \ + -e 's,@with_tmpfiles_d\@,@with_tmpfiles_d@,g' \ + -e 's,@perlexec\@,@perlexec@,g' \ + -e 's,@pythonexec\@,@pythonexec@,g' \ + -e 's,@sttyexec\@,@sttyexec@,g' \ + -e 's,@initconfigdir\@,$(initconfigdir),g'\ + -e 's,@updatedir\@,$(updatedir),g' \ + -e 's,@ldaplib\@,$(ldaplib),g' \ + -e 's,@ldaplib_defs\@,$(ldaplib_defs),g' \ + -e 's,@with_systemd\@,$(WITH_SYSTEMD),g' \ + -e 's,@systemdsystemunitdir\@,$(systemdsystemunitdir),g' \ + -e 's,@systemdsystemconfdir\@,$(systemdsystemconfdir),g' \ + -e 's,@systemdgroupname\@,$(systemdgroupname),g' \ + -e 's,@prefixdir\@,$(prefixdir),g' +else +fixupcmd = sed \ + -e 's,@bindir\@,$(bindir),g' \ + -e 's,@sbindir\@,$(sbindir),g' \ + -e 's,@libdir\@,$(libdir),g' \ + -e 's,@nspr_libdir\@,$(nspr_libdir),g' \ + -e 's,@nss_libdir\@,$(nss_libdir),g' \ + -e 's,@ldapsdk_libdir\@,$(ldapsdk_libdir),g' \ + -e 's,@ldapsdk_bindir\@,$(ldapsdk_bindir),g' \ + -e 's,@ldaptool_bindir\@,$(ldaptool_bindir),g' \ + -e 's,@ldaptool_opts\@,$(ldaptool_opts),g' \ + -e 's,@plainldif_opts\@,$(plainldif_opts),g' \ + -e 's,@db_libdir\@,$(db_libdir),g' \ + -e 's,@db_bindir\@,$(db_bindir),g' \ + -e 's,@sasl_libdir\@,$(sasl_libdir),g' \ + -e 's,@sasl_path\@,@sasl_path@,g' \ + -e 's,@netsnmp_libdir\@,$(netsnmp_libdir),g' \ + -e 's,@pcre_libdir\@,$(pcre_libdir),g' \ + -e 's,@propertydir\@,$(propertydir),g' \ + -e 's,@datadir\@,$(datadir),g' \ + -e 's,@schemadir\@,$(schemadir),g' \ + -e 's,@serverdir\@,$(serverdir),g' \ + -e 's,@serverincdir\@,$(serverincdir),g' \ + -e 's,@serverplugindir\@,$(serverplugindir),g' \ + -e 's,@taskdir\@,$(taskdir),g' \ + -e 's,@configdir\@,$(configdir),g' \ + -e 's,@sysconfdir\@,$(sysconfdir),g' \ + -e 's,@localstatedir\@,$(localstatedir),g' \ + -e 's,@localrundir\@,$(localrundir),g' \ + -e 's,@infdir\@,$(infdir),g' \ + -e 's,@mibdir\@,$(mibdir),g' \ + -e 's,@templatedir\@,$(sampledatadir),g' \ + -e 's,@package_name\@,$(PACKAGE_NAME),g' \ + -e 's,@instconfigdir\@,$(instconfigdir),g' \ + -e 's,@enable_ldapi\@,$(enable_ldapi),g' \ + -e 's,@enable_pam_passthru\@,$(enable_pam_passthru),g' \ + -e 's,@enable_bitwise\@,$(enable_bitwise),g' \ + -e 's,@enable_dna\@,$(enable_dna),g' \ + -e 's,@enable_autobind\@,$(enable_autobind),g' \ + -e 's,@enable_auto_dn_suffix\@,$(enable_auto_dn_suffix),g' \ + -e 's,@enable_presence\@,$(enable_presence),g' \ + -e 's,@enable_asan\@,$(ASAN_ON),g' \ + -e 's,@ECHO_N\@,$(ECHO_N),g' \ + -e 's,@ECHO_C\@,$(ECHO_C),g' \ + -e 's,@brand\@,$(brand),g' \ + -e 's,@capbrand\@,$(capbrand),g' \ + -e 's,@vendor\@,$(vendor),g' \ + -e 's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g' \ + -e 's,@PACKAGE_VERSION\@,$(PACKAGE_VERSION),g' \ + -e 's,@PACKAGE_BASE_VERSION\@,$(PACKAGE_BASE_VERSION),g' \ + -e 's,@CONSOLE_VERSION\@,$(CONSOLE_VERSION),g' \ + -e 's,@BUILDNUM\@,$(BUILDNUM),g' \ + -e 's,@NQBUILD_NUM\@,$(NQBUILDNUM),g' \ + -e 's,@perlpath\@,$(perldir),g' \ + -e 's,@defaultuser\@,$(defaultuser),g' \ + -e 's,@defaultgroup\@,$(defaultgroup),g' \ + -e 's,@with_fhs_opt\@,@with_fhs_opt@,g' \ + -e 's,@with_selinux\@,@with_selinux@,g' \ + -e 's,@with_tmpfiles_d\@,@with_tmpfiles_d@,g' \ + -e 's,@perlexec\@,@perlexec@,g' \ + -e 's,@pythonexec\@,@pythonexec@,g' \ + -e 's,@sttyexec\@,@sttyexec@,g' \ + -e 's,@initconfigdir\@,$(initconfigdir),g' \ + -e 's,@updatedir\@,$(updatedir),g' \ + -e 's,@ldaplib\@,$(ldaplib),g' \ + -e 's,@ldaplib_defs\@,$(ldaplib_defs),g' \ + -e 's,@with_systemd\@,$(WITH_SYSTEMD),g' \ + -e 's,@systemdsystemunitdir\@,$(systemdsystemunitdir),g' \ + -e 's,@systemdsystemconfdir\@,$(systemdsystemconfdir),g' \ + -e 's,@systemdgroupname\@,$(systemdgroupname),g' \ + -e 's,@prefixdir\@,$(prefixdir),g' +endif + +%: %.in + mkdir -p $(dir $@) + $(fixupcmd) $^ > $@ + +%/$(PACKAGE_NAME): %/initscript.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ + +%/$(PACKAGE_NAME): %/base-initconfig.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi +if SYSTEMD + $(fixupcmd) $^ | sed -e 's/@preamble@/# This file is in systemd EnvironmentFile format - see man systemd.exec/' > $@ +else + $(fixupcmd) $^ | sed -n -e 's/@preamble@//' -e '/^#/{p;d}' -e '/^$$/{p;d}' -e 's/^\([^=]*\)\(=.*\)$$/\1\2 ; export \1/ ; p' > $@ + $(fixupcmd) $(srcdir)/ldap/admin/src/initconfig.in >> $@ +endif + +%/template-initconfig: %/template-initconfig.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi +if SYSTEMD + $(fixupcmd) $^ | sed -e 's/@preamble@/# This file is in systemd EnvironmentFile format - see man systemd.exec/' > $@ +else + $(fixupcmd) $^ | sed -n -e 's/@preamble@//' -e '/^#/{p;d}' -e '/^$$/{p;d}' -e 's/^\([^=]*\)\(=.*\)$$/\1\2 ; export \1/ ; p' > $@ +endif + +%/$(PACKAGE_NAME).pc: %/dirsrv.pc.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ + +%/$(PACKAGE_NAME)-snmp: %/ldap-agent-initscript.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ + + +if enable_asan +# yes, that is an @ in the filename . . . +%/$(PACKAGE_NAME)@.service: %/systemd.template.asan.service.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ +else +# yes, that is an @ in the filename . . . +%/$(PACKAGE_NAME)@.service: %/systemd.template.service.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ +endif + +%/$(PACKAGE_NAME).systemd: %/systemd.template.sysconfig + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ + +%/$(systemdgroupname): %/systemd.group.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ + +%/$(PACKAGE_NAME)-snmp.service: %/systemd-snmp.service.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ + +# if distdir is a git tag, use that for the git archive tag, else +# just assume a developer build and use HEAD +git-archive: + if [ -n "$(SRCDISTDIR)" -a -d "$(SRCDISTDIR)" ] ; then \ + srcdistdir=$(SRCDISTDIR) ; \ + else \ + srcdistdir=`pwd` ; \ + fi ; \ + cd $(srcdir) ; \ + if git show-ref --tags -q $(distdir) ; then \ + gittag=$(distdir) ; \ + else \ + gittag=HEAD ; \ + fi ; \ + git archive --prefix=$(distdir)/ $$gittag | bzip2 > $$srcdistdir/$(distdir).tar.bz2 + + +# RPM-related tasks + +RPMBUILD ?= $(abs_builddir)/rpmbuild + +rpmroot: + $(MKDIR_P) $(RPMBUILD)/BUILD + $(MKDIR_P) $(RPMBUILD)/RPMS + $(MKDIR_P) $(RPMBUILD)/SOURCES + $(MKDIR_P) $(RPMBUILD)/SPECS + $(MKDIR_P) $(RPMBUILD)/SRPMS + +rpmbrprep: dist-bzip2 rpmroot + cp $(distdir).tar.bz2 $(RPMBUILD)/SOURCES + cp $(srcdir)/rpm/389-ds-base-git.sh $(RPMBUILD)/SOURCES + cp $(srcdir)/rpm/389-ds-base-devel.README $(RPMBUILD)/SOURCES + sed -e "s/__VERSION__/$(RPM_VERSION)/" -e "s/__RELEASE__/$(RPM_RELEASE)/" -e "s/__VERSION_PREREL__/$(VERSION_PREREL)/" -e "s/__NUNC_STANS_ON__/$(NUNC_STANS_ON)/" -e "s/__ASAN_ON__/$(ASAN_ON)/" < $(abs_builddir)/rpm/389-ds-base.spec > $(RPMBUILD)/SPECS/389-ds-base.spec + +# Requires rpmdevtools. Consider making this a dependancy of rpms. +rpmsources: rpmbrprep + spectool -g -S -C $(RPMBUILD)/SOURCES $(RPMBUILD)/SPECS/389-ds-base.spec + +rpms: rpmbrprep + cd $(RPMBUILD); \ + rpmbuild --define "_topdir $(RPMBUILD)" -ba SPECS/389-ds-base.spec + +srpm: rpmbrprep + cd $(RPMBUILD); \ + rpmbuild --define "_topdir $(RPMBUILD)" \ + -bs SPECS/389-ds-base.spec diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..21460d0 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,10884 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + + + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +sbin_PROGRAMS = ns-slapd$(EXEEXT) ldap-agent-bin$(EXEEXT) +bin_PROGRAMS = dbscan-bin$(EXEEXT) dsktune-bin$(EXEEXT) \ + infadd-bin$(EXEEXT) ldclt-bin$(EXEEXT) ldif-bin$(EXEEXT) \ + migratecred-bin$(EXEEXT) mmldif-bin$(EXEEXT) \ + pwdhash-bin$(EXEEXT) rsearch-bin$(EXEEXT) +noinst_PROGRAMS = makstrdb$(EXEEXT) +@SPARC_TRUE@am__append_1 = ldap/servers/slapd/slapi_counter_sunos_sparcv9.S +@SOLARIS_TRUE@am__append_2 = -lrt +@SOLARIS_TRUE@am__append_3 = ldap/servers/slapd/tools/ldclt/opCheck.c +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/fhs.m4 $(top_srcdir)/m4/nspr.m4 \ + $(top_srcdir)/m4/nss.m4 $(top_srcdir)/m4/openldap.m4 \ + $(top_srcdir)/m4/mozldap.m4 $(top_srcdir)/m4/db.m4 \ + $(top_srcdir)/m4/sasl.m4 $(top_srcdir)/m4/svrcore.m4 \ + $(top_srcdir)/m4/icu.m4 $(top_srcdir)/m4/netsnmp.m4 \ + $(top_srcdir)/m4/kerberos.m4 $(top_srcdir)/m4/pcre.m4 \ + $(top_srcdir)/m4/selinux.m4 $(top_srcdir)/m4/nunc-stans.m4 \ + $(top_srcdir)/m4/systemd.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(dist_noinst_DATA) \ + $(dist_noinst_HEADERS) $(serverinc_HEADERS) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = rpm/389-ds-base.spec +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = +libavl_a_AR = $(AR) $(ARFLAGS) +libavl_a_LIBADD = +am__dirstamp = $(am__leading_dot)dirstamp +am_libavl_a_OBJECTS = ldap/libraries/libavl/avl.$(OBJEXT) +libavl_a_OBJECTS = $(am_libavl_a_OBJECTS) +libldaputil_a_AR = $(AR) $(ARFLAGS) +libldaputil_a_LIBADD = +am_libldaputil_a_OBJECTS = lib/ldaputil/libldaputil_a-cert.$(OBJEXT) \ + lib/ldaputil/libldaputil_a-certmap.$(OBJEXT) \ + lib/ldaputil/libldaputil_a-dbconf.$(OBJEXT) \ + lib/ldaputil/libldaputil_a-encode.$(OBJEXT) \ + lib/ldaputil/libldaputil_a-errors.$(OBJEXT) \ + lib/ldaputil/libldaputil_a-init.$(OBJEXT) \ + lib/ldaputil/libldaputil_a-ldapauth.$(OBJEXT) \ + lib/ldaputil/libldaputil_a-vtable.$(OBJEXT) +libldaputil_a_OBJECTS = $(am_libldaputil_a_OBJECTS) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(serverdir)" \ + "$(DESTDIR)$(serverplugindir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(initdir)" "$(DESTDIR)$(sbindir)" \ + "$(DESTDIR)$(taskdir)" "$(DESTDIR)$(updatedir)" \ + "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)" \ + "$(DESTDIR)$(configdir)" "$(DESTDIR)$(infdir)" \ + "$(DESTDIR)$(initconfigdir)" "$(DESTDIR)$(mibdir)" \ + "$(DESTDIR)$(propertydir)" "$(DESTDIR)$(perldir)" \ + "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(propertydir)" \ + "$(DESTDIR)$(pythondir)" "$(DESTDIR)$(sampledatadir)" \ + "$(DESTDIR)$(schemadir)" "$(DESTDIR)$(systemdsystemunitdir)" \ + "$(DESTDIR)$(updatedir)" "$(DESTDIR)$(serverincdir)" +LTLIBRARIES = $(server_LTLIBRARIES) $(serverplugin_LTLIBRARIES) +am__DEPENDENCIES_1 = +libacctpolicy_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) +am_libacctpolicy_plugin_la_OBJECTS = ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_config.lo \ + ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_init.lo \ + ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_plugin.lo \ + ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_util.lo +libacctpolicy_plugin_la_OBJECTS = \ + $(am_libacctpolicy_plugin_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libacctpolicy_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libacctpolicy_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +@enable_acctpolicy_TRUE@am_libacctpolicy_plugin_la_rpath = -rpath \ +@enable_acctpolicy_TRUE@ $(serverplugindir) +libacctusability_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) +am_libacctusability_plugin_la_OBJECTS = ldap/servers/plugins/acct_usability/libacctusability_plugin_la-acct_usability.lo +libacctusability_plugin_la_OBJECTS = \ + $(am_libacctusability_plugin_la_OBJECTS) +libacctusability_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libacctusability_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libacl_plugin_la_DEPENDENCIES = libslapd.la libns-dshttpd.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_libacl_plugin_la_OBJECTS = \ + ldap/servers/plugins/acl/libacl_plugin_la-acl.lo \ + ldap/servers/plugins/acl/libacl_plugin_la-acl_ext.lo \ + ldap/servers/plugins/acl/libacl_plugin_la-aclanom.lo \ + ldap/servers/plugins/acl/libacl_plugin_la-acleffectiverights.lo \ + ldap/servers/plugins/acl/libacl_plugin_la-aclgroup.lo \ + ldap/servers/plugins/acl/libacl_plugin_la-aclinit.lo \ + ldap/servers/plugins/acl/libacl_plugin_la-acllas.lo \ + ldap/servers/plugins/acl/libacl_plugin_la-acllist.lo \ + ldap/servers/plugins/acl/libacl_plugin_la-aclparse.lo \ + ldap/servers/plugins/acl/libacl_plugin_la-aclplugin.lo \ + ldap/servers/plugins/acl/libacl_plugin_la-aclutil.lo +libacl_plugin_la_OBJECTS = $(am_libacl_plugin_la_OBJECTS) +libattr_unique_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) +am_libattr_unique_plugin_la_OBJECTS = \ + ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-7bit.lo \ + ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-uid.lo \ + ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-utils.lo +libattr_unique_plugin_la_OBJECTS = \ + $(am_libattr_unique_plugin_la_OBJECTS) +libattr_unique_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libattr_unique_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libautomember_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) +am_libautomember_plugin_la_OBJECTS = ldap/servers/plugins/automember/libautomember_plugin_la-automember.lo +libautomember_plugin_la_OBJECTS = \ + $(am_libautomember_plugin_la_OBJECTS) +libautomember_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libautomember_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libback_ldbm_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_libback_ldbm_la_OBJECTS = \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ancestorid.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-archive.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-backentry.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-cache.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-cleanup.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-close.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbhelp.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-dblayer.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbsize.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbversion.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-dn2entry.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-entrystore.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-filterindex.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-findentry.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-haschildren.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-id2entry.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_shim.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_new.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_common.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-import.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-import-merge.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-import-threads.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-index.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-init.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-instance.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_abandon.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_add.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attr.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attrcrypt.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attrcrypt_config.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_bind.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_compare.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_config.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_delete.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_entryrdn.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_index_config.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_instance_config.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_modify.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_modrdn.lo \ + 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-ldbm_usn.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 \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-nextid.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-parents.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-perfctrs.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-rmdb.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-seq.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-sort.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-start.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-uniqueid2entry.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-upgrade.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv_key.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv_srch.lo +libback_ldbm_la_OBJECTS = $(am_libback_ldbm_la_OBJECTS) +libback_ldbm_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libback_ldbm_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +libbitwise_plugin_la_DEPENDENCIES = libslapd.la +am_libbitwise_plugin_la_OBJECTS = \ + ldap/servers/plugins/bitwise/libbitwise_plugin_la-bitwise.lo +libbitwise_plugin_la_OBJECTS = $(am_libbitwise_plugin_la_OBJECTS) +libbitwise_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libbitwise_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +@enable_bitwise_TRUE@am_libbitwise_plugin_la_rpath = -rpath \ +@enable_bitwise_TRUE@ $(serverplugindir) +libchainingdb_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_libchainingdb_plugin_la_OBJECTS = ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_abandon.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_acl.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_add.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_bind.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_cleanup.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_close.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_compare.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_config.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_conn_stateless.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_controls.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_debug.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_delete.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_init.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_instance.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modify.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modrdn.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_monitor.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_schema.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_search.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_size.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_start.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_temp.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_test.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_unbind.lo \ + ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_utils.lo +libchainingdb_plugin_la_OBJECTS = \ + $(am_libchainingdb_plugin_la_OBJECTS) +libchainingdb_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libchainingdb_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libcollation_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libcollation_plugin_la_OBJECTS = ldap/servers/plugins/collation/libcollation_plugin_la-collate.lo \ + ldap/servers/plugins/collation/libcollation_plugin_la-config.lo \ + ldap/servers/plugins/collation/libcollation_plugin_la-orfilter.lo +libcollation_plugin_la_OBJECTS = $(am_libcollation_plugin_la_OBJECTS) +libcontentsync_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libcontentsync_plugin_la_OBJECTS = ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_init.lo \ + ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_util.lo \ + ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_refresh.lo \ + ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_persist.lo +libcontentsync_plugin_la_OBJECTS = \ + $(am_libcontentsync_plugin_la_OBJECTS) +libcontentsync_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libcontentsync_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libcos_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libcos_plugin_la_OBJECTS = \ + ldap/servers/plugins/cos/libcos_plugin_la-cos.lo \ + ldap/servers/plugins/cos/libcos_plugin_la-cos_cache.lo +libcos_plugin_la_OBJECTS = $(am_libcos_plugin_la_OBJECTS) +libcos_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libcos_plugin_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +libderef_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libderef_plugin_la_OBJECTS = \ + ldap/servers/plugins/deref/libderef_plugin_la-deref.lo +libderef_plugin_la_OBJECTS = $(am_libderef_plugin_la_OBJECTS) +libderef_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libderef_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libdistrib_plugin_la_DEPENDENCIES = libslapd.la +am_libdistrib_plugin_la_OBJECTS = \ + ldap/servers/plugins/distrib/libdistrib_plugin_la-distrib.lo +libdistrib_plugin_la_OBJECTS = $(am_libdistrib_plugin_la_OBJECTS) +libdistrib_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libdistrib_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libdna_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libdna_plugin_la_OBJECTS = \ + ldap/servers/plugins/dna/libdna_plugin_la-dna.lo +libdna_plugin_la_OBJECTS = $(am_libdna_plugin_la_OBJECTS) +libdna_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libdna_plugin_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +@enable_dna_TRUE@am_libdna_plugin_la_rpath = -rpath $(serverplugindir) +libhttp_client_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_libhttp_client_plugin_la_OBJECTS = ldap/servers/plugins/http/libhttp_client_plugin_la-http_client.lo \ + ldap/servers/plugins/http/libhttp_client_plugin_la-http_impl.lo +libhttp_client_plugin_la_OBJECTS = \ + $(am_libhttp_client_plugin_la_OBJECTS) +libhttp_client_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libhttp_client_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +liblinkedattrs_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) +am_liblinkedattrs_plugin_la_OBJECTS = ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-fixup_task.lo \ + ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-linked_attrs.lo +liblinkedattrs_plugin_la_OBJECTS = \ + $(am_liblinkedattrs_plugin_la_OBJECTS) +liblinkedattrs_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(liblinkedattrs_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libmanagedentries_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) +am_libmanagedentries_plugin_la_OBJECTS = \ + ldap/servers/plugins/mep/libmanagedentries_plugin_la-mep.lo +libmanagedentries_plugin_la_OBJECTS = \ + $(am_libmanagedentries_plugin_la_OBJECTS) +libmanagedentries_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libmanagedentries_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libmemberof_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libmemberof_plugin_la_OBJECTS = ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof.lo \ + ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof_config.lo +libmemberof_plugin_la_OBJECTS = $(am_libmemberof_plugin_la_OBJECTS) +libmemberof_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libmemberof_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libns_dshttpd_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am__objects_1 = lib/ldaputil/libns_dshttpd_la-cert.lo \ + lib/ldaputil/libns_dshttpd_la-certmap.lo \ + lib/ldaputil/libns_dshttpd_la-dbconf.lo \ + lib/ldaputil/libns_dshttpd_la-encode.lo \ + lib/ldaputil/libns_dshttpd_la-errors.lo \ + lib/ldaputil/libns_dshttpd_la-init.lo \ + lib/ldaputil/libns_dshttpd_la-ldapauth.lo \ + lib/ldaputil/libns_dshttpd_la-vtable.lo +am_libns_dshttpd_la_OBJECTS = \ + lib/libaccess/libns_dshttpd_la-access_plhash.lo \ + lib/libaccess/libns_dshttpd_la-acl.tab.lo \ + lib/libaccess/libns_dshttpd_la-acl.yy.lo \ + lib/libaccess/libns_dshttpd_la-aclcache.lo \ + lib/libaccess/libns_dshttpd_la-aclerror.lo \ + lib/libaccess/libns_dshttpd_la-acleval.lo \ + lib/libaccess/libns_dshttpd_la-aclflush.lo \ + lib/libaccess/libns_dshttpd_la-aclspace.lo \ + lib/libaccess/libns_dshttpd_la-acltools.lo \ + lib/libaccess/libns_dshttpd_la-aclutil.lo \ + lib/libaccess/libns_dshttpd_la-authdb.lo \ + lib/libaccess/libns_dshttpd_la-lasdns.lo \ + lib/libaccess/libns_dshttpd_la-lasgroup.lo \ + lib/libaccess/libns_dshttpd_la-lasip.lo \ + lib/libaccess/libns_dshttpd_la-lastod.lo \ + lib/libaccess/libns_dshttpd_la-lasuser.lo \ + lib/libaccess/libns_dshttpd_la-method.lo \ + lib/libaccess/libns_dshttpd_la-nseframe.lo \ + lib/libaccess/libns_dshttpd_la-nsautherr.lo \ + lib/libaccess/libns_dshttpd_la-oneeval.lo \ + lib/libaccess/libns_dshttpd_la-register.lo \ + lib/libaccess/libns_dshttpd_la-symbols.lo \ + lib/libaccess/libns_dshttpd_la-usi.lo \ + lib/libaccess/libns_dshttpd_la-usrcache.lo \ + lib/libadmin/libns_dshttpd_la-error.lo \ + lib/libadmin/libns_dshttpd_la-template.lo \ + lib/libadmin/libns_dshttpd_la-util.lo \ + lib/base/libns_dshttpd_la-crit.lo \ + lib/base/libns_dshttpd_la-dns.lo \ + lib/base/libns_dshttpd_la-dnsdmain.lo \ + lib/base/libns_dshttpd_la-ereport.lo \ + lib/base/libns_dshttpd_la-file.lo \ + lib/base/libns_dshttpd_la-fsmutex.lo \ + lib/base/libns_dshttpd_la-net.lo \ + lib/base/libns_dshttpd_la-nscperror.lo \ + lib/base/libns_dshttpd_la-plist.lo \ + lib/base/libns_dshttpd_la-pool.lo \ + lib/base/libns_dshttpd_la-shexp.lo \ + lib/base/libns_dshttpd_la-system.lo \ + lib/base/libns_dshttpd_la-systhr.lo \ + lib/base/libns_dshttpd_la-util.lo \ + lib/libsi18n/libns_dshttpd_la-getstrprop.lo \ + lib/libsi18n/libns_dshttpd_la-reshash.lo \ + lib/libsi18n/libns_dshttpd_la-txtfile.lo $(am__objects_1) +libns_dshttpd_la_OBJECTS = $(am_libns_dshttpd_la_OBJECTS) +libpam_passthru_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libpam_passthru_plugin_la_OBJECTS = ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptconfig.lo \ + ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptdebug.lo \ + ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptimpl.lo \ + ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptpreop.lo +libpam_passthru_plugin_la_OBJECTS = \ + $(am_libpam_passthru_plugin_la_OBJECTS) +libpam_passthru_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libpam_passthru_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +@enable_pam_passthru_TRUE@am_libpam_passthru_plugin_la_rpath = -rpath \ +@enable_pam_passthru_TRUE@ $(serverplugindir) +libpassthru_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libpassthru_plugin_la_OBJECTS = \ + ldap/servers/plugins/passthru/libpassthru_plugin_la-ptbind.lo \ + ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconfig.lo \ + ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconn.lo \ + ldap/servers/plugins/passthru/libpassthru_plugin_la-ptdebug.lo \ + ldap/servers/plugins/passthru/libpassthru_plugin_la-ptpreop.lo \ + ldap/servers/plugins/passthru/libpassthru_plugin_la-ptutil.lo +libpassthru_plugin_la_OBJECTS = $(am_libpassthru_plugin_la_OBJECTS) +libpassthru_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libpassthru_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libpbe_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) +am_libpbe_plugin_la_OBJECTS = \ + ldap/servers/plugins/rever/libpbe_plugin_la-pbe.lo \ + ldap/servers/plugins/rever/libpbe_plugin_la-rever.lo +libpbe_plugin_la_OBJECTS = $(am_libpbe_plugin_la_OBJECTS) +libpbe_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libpbe_plugin_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +libposix_winsync_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_libposix_winsync_plugin_la_OBJECTS = ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo \ + ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo \ + ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo \ + ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo +libposix_winsync_plugin_la_OBJECTS = \ + $(am_libposix_winsync_plugin_la_OBJECTS) +libposix_winsync_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libposix_winsync_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +@enable_posix_winsync_TRUE@am_libposix_winsync_plugin_la_rpath = \ +@enable_posix_winsync_TRUE@ -rpath $(serverplugindir) +libpresence_plugin_la_DEPENDENCIES = libslapd.la +am_libpresence_plugin_la_OBJECTS = ldap/servers/plugins/presence/libpresence_plugin_la-presence.lo +libpresence_plugin_la_OBJECTS = $(am_libpresence_plugin_la_OBJECTS) +libpresence_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libpresence_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +@enable_presence_TRUE@am_libpresence_plugin_la_rpath = -rpath \ +@enable_presence_TRUE@ $(serverplugindir) +libpwdstorage_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libpwdstorage_plugin_la_OBJECTS = ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-clear_pwd.lo \ + ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-crypt_pwd.lo \ + ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5_pwd.lo \ + ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5c.lo \ + ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ns-mta-md5_pwd.lo \ + ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_init.lo \ + ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_util.lo \ + ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-sha_pwd.lo \ + ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-smd5_pwd.lo \ + ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ssha_pwd.lo +libpwdstorage_plugin_la_OBJECTS = \ + $(am_libpwdstorage_plugin_la_OBJECTS) +libpwdstorage_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libpwdstorage_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libreferint_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libreferint_plugin_la_OBJECTS = ldap/servers/plugins/referint/libreferint_plugin_la-referint.lo +libreferint_plugin_la_OBJECTS = $(am_libreferint_plugin_la_OBJECTS) +libreferint_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libreferint_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libreplication_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libreplication_plugin_la_OBJECTS = ldap/servers/plugins/replication/libreplication_plugin_la-cl5_api.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-cl5_clcache.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-cl5_config.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-cl5_init.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-cl_crypt.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-csnpl.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-legacy_consumer.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-llist.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_add.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_bind.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_compare.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_connext.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_controls.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_delete.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_entry.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_ext.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_extop.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_globals.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_init.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_modify.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_modrdn.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_monitor.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_objset.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_opext.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_ops.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_rootdse.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_search.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl_session_plugin.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmt.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmtlist.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_backoff.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_connection.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_inc_protocol.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_init.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_mtnode_ext.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_plugins.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol_util.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_config.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_dnhash.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_hash.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_ruv.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_schedule.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_tot_protocol.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_total.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-repl5_updatedn_list.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-replutil.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-urp.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-urp_glue.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-urp_tombstone.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-windows_connection.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-windows_inc_protocol.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-windows_private.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-windows_protocol_util.lo \ + ldap/servers/plugins/replication/libreplication_plugin_la-windows_tot_protocol.lo +libreplication_plugin_la_OBJECTS = \ + $(am_libreplication_plugin_la_OBJECTS) +libreplication_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libreplication_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libretrocl_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libretrocl_plugin_la_OBJECTS = \ + ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl.lo \ + ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_cn.lo \ + ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_create.lo \ + ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_po.lo \ + ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_rootdse.lo \ + ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_trim.lo +libretrocl_plugin_la_OBJECTS = $(am_libretrocl_plugin_la_OBJECTS) +libretrocl_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libretrocl_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libroles_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) +am_libroles_plugin_la_OBJECTS = \ + ldap/servers/plugins/roles/libroles_plugin_la-roles_cache.lo \ + ldap/servers/plugins/roles/libroles_plugin_la-roles_plugin.lo +libroles_plugin_la_OBJECTS = $(am_libroles_plugin_la_OBJECTS) +libroles_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libroles_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +librootdn_access_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) +am_librootdn_access_plugin_la_OBJECTS = ldap/servers/plugins/rootdn_access/librootdn_access_plugin_la-rootdn_access.lo +librootdn_access_plugin_la_OBJECTS = \ + $(am_librootdn_access_plugin_la_OBJECTS) +librootdn_access_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(librootdn_access_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libschemareload_plugin_la_DEPENDENCIES = libslapd.la \ + $(am__DEPENDENCIES_1) +am_libschemareload_plugin_la_OBJECTS = ldap/servers/plugins/schema_reload/libschemareload_plugin_la-schema_reload.lo +libschemareload_plugin_la_OBJECTS = \ + $(am_libschemareload_plugin_la_OBJECTS) +libschemareload_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libschemareload_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +@enable_nunc_stans_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) +libslapd_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am__libslapd_la_SOURCES_DIST = ldap/servers/slapd/add.c \ + ldap/servers/slapd/agtmmap.c ldap/servers/slapd/apibroker.c \ + ldap/servers/slapd/attr.c ldap/servers/slapd/attrlist.c \ + ldap/servers/slapd/attrsyntax.c ldap/servers/slapd/auditlog.c \ + ldap/servers/slapd/ava.c ldap/servers/slapd/backend.c \ + ldap/servers/slapd/backend_manager.c \ + ldap/servers/slapd/bitset.c ldap/servers/slapd/bulk_import.c \ + ldap/servers/slapd/charray.c ldap/servers/slapd/ch_malloc.c \ + ldap/servers/slapd/computed.c ldap/servers/slapd/control.c \ + ldap/servers/slapd/counters.c ldap/servers/slapd/csn.c \ + ldap/servers/slapd/csngen.c ldap/servers/slapd/csnset.c \ + ldap/servers/slapd/defbackend.c ldap/servers/slapd/delete.c \ + ldap/servers/slapd/dl.c ldap/servers/slapd/dn.c \ + ldap/servers/slapd/dse.c ldap/servers/slapd/dynalib.c \ + ldap/servers/slapd/entry.c ldap/servers/slapd/entrywsi.c \ + ldap/servers/slapd/errormap.c ldap/servers/slapd/eventq.c \ + ldap/servers/slapd/factory.c ldap/servers/slapd/features.c \ + ldap/servers/slapd/fileio.c ldap/servers/slapd/filter.c \ + ldap/servers/slapd/filtercmp.c \ + ldap/servers/slapd/filterentry.c \ + ldap/servers/slapd/generation.c \ + ldap/servers/slapd/getfilelist.c \ + ldap/servers/slapd/index_subsystem.c \ + ldap/servers/slapd/ldaputil.c ldap/servers/slapd/lenstr.c \ + ldap/servers/slapd/libglobs.c ldap/servers/slapd/localhost.c \ + ldap/servers/slapd/log.c ldap/servers/slapd/mapping_tree.c \ + ldap/servers/slapd/match.c ldap/servers/slapd/modify.c \ + ldap/servers/slapd/modrdn.c ldap/servers/slapd/modutil.c \ + ldap/servers/slapd/object.c ldap/servers/slapd/objset.c \ + ldap/servers/slapd/operation.c ldap/servers/slapd/opshared.c \ + ldap/servers/slapd/pagedresults.c ldap/servers/slapd/pblock.c \ + ldap/servers/slapd/plugin.c ldap/servers/slapd/plugin_acl.c \ + ldap/servers/slapd/plugin_internal_op.c \ + ldap/servers/slapd/plugin_mr.c \ + ldap/servers/slapd/plugin_role.c \ + ldap/servers/slapd/plugin_syntax.c \ + ldap/servers/slapd/protect_db.c ldap/servers/slapd/proxyauth.c \ + ldap/servers/slapd/pw.c ldap/servers/slapd/pw_retry.c \ + ldap/servers/slapd/rdn.c ldap/servers/slapd/referral.c \ + ldap/servers/slapd/regex.c ldap/servers/slapd/resourcelimit.c \ + ldap/servers/slapd/result.c ldap/servers/slapd/sasl_map.c \ + ldap/servers/slapd/schema.c ldap/servers/slapd/schemaparse.c \ + ldap/servers/slapd/security_wrappers.c \ + ldap/servers/slapd/slapd_plhash.c \ + ldap/servers/slapd/slapi_counter.c \ + ldap/servers/slapd/slapi2nspr.c \ + ldap/servers/slapd/snmp_collator.c ldap/servers/slapd/sort.c \ + ldap/servers/slapd/ssl.c ldap/servers/slapd/str2filter.c \ + ldap/servers/slapd/subentry.c ldap/servers/slapd/task.c \ + ldap/servers/slapd/time.c ldap/servers/slapd/thread_data.c \ + ldap/servers/slapd/uniqueid.c ldap/servers/slapd/uniqueidgen.c \ + ldap/servers/slapd/utf8.c ldap/servers/slapd/utf8compare.c \ + ldap/servers/slapd/util.c ldap/servers/slapd/uuid.c \ + ldap/servers/slapd/value.c ldap/servers/slapd/valueset.c \ + ldap/servers/slapd/vattr.c ldap/libraries/libavl/avl.c \ + ldap/servers/slapd/slapi_counter_sunos_sparcv9.S +am__objects_2 = ldap/libraries/libavl/libslapd_la-avl.lo +@SPARC_TRUE@am__objects_3 = ldap/servers/slapd/libslapd_la-slapi_counter_sunos_sparcv9.lo +am_libslapd_la_OBJECTS = ldap/servers/slapd/libslapd_la-add.lo \ + ldap/servers/slapd/libslapd_la-agtmmap.lo \ + ldap/servers/slapd/libslapd_la-apibroker.lo \ + ldap/servers/slapd/libslapd_la-attr.lo \ + ldap/servers/slapd/libslapd_la-attrlist.lo \ + ldap/servers/slapd/libslapd_la-attrsyntax.lo \ + ldap/servers/slapd/libslapd_la-auditlog.lo \ + ldap/servers/slapd/libslapd_la-ava.lo \ + ldap/servers/slapd/libslapd_la-backend.lo \ + ldap/servers/slapd/libslapd_la-backend_manager.lo \ + ldap/servers/slapd/libslapd_la-bitset.lo \ + ldap/servers/slapd/libslapd_la-bulk_import.lo \ + ldap/servers/slapd/libslapd_la-charray.lo \ + ldap/servers/slapd/libslapd_la-ch_malloc.lo \ + ldap/servers/slapd/libslapd_la-computed.lo \ + ldap/servers/slapd/libslapd_la-control.lo \ + ldap/servers/slapd/libslapd_la-counters.lo \ + ldap/servers/slapd/libslapd_la-csn.lo \ + ldap/servers/slapd/libslapd_la-csngen.lo \ + ldap/servers/slapd/libslapd_la-csnset.lo \ + ldap/servers/slapd/libslapd_la-defbackend.lo \ + ldap/servers/slapd/libslapd_la-delete.lo \ + ldap/servers/slapd/libslapd_la-dl.lo \ + ldap/servers/slapd/libslapd_la-dn.lo \ + ldap/servers/slapd/libslapd_la-dse.lo \ + ldap/servers/slapd/libslapd_la-dynalib.lo \ + ldap/servers/slapd/libslapd_la-entry.lo \ + ldap/servers/slapd/libslapd_la-entrywsi.lo \ + ldap/servers/slapd/libslapd_la-errormap.lo \ + ldap/servers/slapd/libslapd_la-eventq.lo \ + ldap/servers/slapd/libslapd_la-factory.lo \ + ldap/servers/slapd/libslapd_la-features.lo \ + ldap/servers/slapd/libslapd_la-fileio.lo \ + ldap/servers/slapd/libslapd_la-filter.lo \ + ldap/servers/slapd/libslapd_la-filtercmp.lo \ + ldap/servers/slapd/libslapd_la-filterentry.lo \ + ldap/servers/slapd/libslapd_la-generation.lo \ + ldap/servers/slapd/libslapd_la-getfilelist.lo \ + ldap/servers/slapd/libslapd_la-index_subsystem.lo \ + ldap/servers/slapd/libslapd_la-ldaputil.lo \ + ldap/servers/slapd/libslapd_la-lenstr.lo \ + ldap/servers/slapd/libslapd_la-libglobs.lo \ + ldap/servers/slapd/libslapd_la-localhost.lo \ + ldap/servers/slapd/libslapd_la-log.lo \ + ldap/servers/slapd/libslapd_la-mapping_tree.lo \ + ldap/servers/slapd/libslapd_la-match.lo \ + ldap/servers/slapd/libslapd_la-modify.lo \ + ldap/servers/slapd/libslapd_la-modrdn.lo \ + ldap/servers/slapd/libslapd_la-modutil.lo \ + ldap/servers/slapd/libslapd_la-object.lo \ + ldap/servers/slapd/libslapd_la-objset.lo \ + ldap/servers/slapd/libslapd_la-operation.lo \ + ldap/servers/slapd/libslapd_la-opshared.lo \ + ldap/servers/slapd/libslapd_la-pagedresults.lo \ + ldap/servers/slapd/libslapd_la-pblock.lo \ + ldap/servers/slapd/libslapd_la-plugin.lo \ + ldap/servers/slapd/libslapd_la-plugin_acl.lo \ + ldap/servers/slapd/libslapd_la-plugin_internal_op.lo \ + ldap/servers/slapd/libslapd_la-plugin_mr.lo \ + ldap/servers/slapd/libslapd_la-plugin_role.lo \ + ldap/servers/slapd/libslapd_la-plugin_syntax.lo \ + ldap/servers/slapd/libslapd_la-protect_db.lo \ + ldap/servers/slapd/libslapd_la-proxyauth.lo \ + ldap/servers/slapd/libslapd_la-pw.lo \ + ldap/servers/slapd/libslapd_la-pw_retry.lo \ + ldap/servers/slapd/libslapd_la-rdn.lo \ + ldap/servers/slapd/libslapd_la-referral.lo \ + ldap/servers/slapd/libslapd_la-regex.lo \ + ldap/servers/slapd/libslapd_la-resourcelimit.lo \ + ldap/servers/slapd/libslapd_la-result.lo \ + ldap/servers/slapd/libslapd_la-sasl_map.lo \ + ldap/servers/slapd/libslapd_la-schema.lo \ + ldap/servers/slapd/libslapd_la-schemaparse.lo \ + ldap/servers/slapd/libslapd_la-security_wrappers.lo \ + ldap/servers/slapd/libslapd_la-slapd_plhash.lo \ + ldap/servers/slapd/libslapd_la-slapi_counter.lo \ + ldap/servers/slapd/libslapd_la-slapi2nspr.lo \ + ldap/servers/slapd/libslapd_la-snmp_collator.lo \ + ldap/servers/slapd/libslapd_la-sort.lo \ + ldap/servers/slapd/libslapd_la-ssl.lo \ + ldap/servers/slapd/libslapd_la-str2filter.lo \ + ldap/servers/slapd/libslapd_la-subentry.lo \ + ldap/servers/slapd/libslapd_la-task.lo \ + ldap/servers/slapd/libslapd_la-time.lo \ + ldap/servers/slapd/libslapd_la-thread_data.lo \ + ldap/servers/slapd/libslapd_la-uniqueid.lo \ + ldap/servers/slapd/libslapd_la-uniqueidgen.lo \ + ldap/servers/slapd/libslapd_la-utf8.lo \ + ldap/servers/slapd/libslapd_la-utf8compare.lo \ + ldap/servers/slapd/libslapd_la-util.lo \ + ldap/servers/slapd/libslapd_la-uuid.lo \ + ldap/servers/slapd/libslapd_la-value.lo \ + ldap/servers/slapd/libslapd_la-valueset.lo \ + ldap/servers/slapd/libslapd_la-vattr.lo $(am__objects_2) \ + $(am__objects_3) +libslapd_la_OBJECTS = $(am_libslapd_la_OBJECTS) +libstatechange_plugin_la_DEPENDENCIES = libslapd.la +am_libstatechange_plugin_la_OBJECTS = ldap/servers/plugins/statechange/libstatechange_plugin_la-statechange.lo +libstatechange_plugin_la_OBJECTS = \ + $(am_libstatechange_plugin_la_OBJECTS) +libstatechange_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libstatechange_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libsyntax_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libsyntax_plugin_la_OBJECTS = \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bin.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bitstring.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-ces.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-cis.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-debug.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-dn.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-deliverymethod.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-facsimile.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-guide.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-int.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-nameoptuid.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-numericstring.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-phonetic.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-sicis.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-string.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-syntax_common.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-tel.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-telex.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-teletex.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate_task.lo \ + ldap/servers/plugins/syntaxes/libsyntax_plugin_la-value.lo +libsyntax_plugin_la_OBJECTS = $(am_libsyntax_plugin_la_OBJECTS) +libsyntax_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libsyntax_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libusn_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libusn_plugin_la_OBJECTS = \ + ldap/servers/plugins/usn/libusn_plugin_la-usn.lo \ + ldap/servers/plugins/usn/libusn_plugin_la-usn_cleanup.lo +libusn_plugin_la_OBJECTS = $(am_libusn_plugin_la_OBJECTS) +libusn_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libusn_plugin_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +libviews_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libviews_plugin_la_OBJECTS = \ + ldap/servers/plugins/views/libviews_plugin_la-views.lo +libviews_plugin_la_OBJECTS = $(am_libviews_plugin_la_OBJECTS) +libviews_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libviews_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +libwhoami_plugin_la_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libwhoami_plugin_la_OBJECTS = \ + ldap/servers/plugins/whoami/libwhoami_plugin_la-whoami.lo +libwhoami_plugin_la_OBJECTS = $(am_libwhoami_plugin_la_OBJECTS) +libwhoami_plugin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libwhoami_plugin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(sbin_PROGRAMS) +am_dbscan_bin_OBJECTS = \ + ldap/servers/slapd/tools/dbscan_bin-dbscan.$(OBJEXT) +dbscan_bin_OBJECTS = $(am_dbscan_bin_OBJECTS) +dbscan_bin_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_dsktune_bin_OBJECTS = ldap/systools/idsktune.$(OBJEXT) \ + ldap/systools/pio.$(OBJEXT) +dsktune_bin_OBJECTS = $(am_dsktune_bin_OBJECTS) +dsktune_bin_LDADD = $(LDADD) +am_infadd_bin_OBJECTS = ldap/servers/slapd/tools/rsearch/infadd_bin-addthread.$(OBJEXT) \ + ldap/servers/slapd/tools/rsearch/infadd_bin-infadd.$(OBJEXT) \ + ldap/servers/slapd/tools/rsearch/infadd_bin-nametable.$(OBJEXT) +infadd_bin_OBJECTS = $(am_infadd_bin_OBJECTS) +infadd_bin_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_ldap_agent_bin_OBJECTS = \ + ldap/servers/snmp/ldap_agent_bin-main.$(OBJEXT) \ + ldap/servers/snmp/ldap_agent_bin-ldap-agent.$(OBJEXT) \ + ldap/servers/slapd/ldap_agent_bin-agtmmap.$(OBJEXT) +ldap_agent_bin_OBJECTS = $(am_ldap_agent_bin_OBJECTS) +@OPENLDAP_FALSE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) +ldap_agent_bin_DEPENDENCIES = $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am__ldclt_bin_SOURCES_DIST = ldap/servers/slapd/tools/ldaptool-sasl.c \ + ldap/servers/slapd/tools/ldclt/data.c \ + ldap/servers/slapd/tools/ldclt/ldapfct.c \ + ldap/servers/slapd/tools/ldclt/ldclt.c \ + ldap/servers/slapd/tools/ldclt/ldcltU.c \ + ldap/servers/slapd/tools/ldclt/parser.c \ + ldap/servers/slapd/tools/ldclt/port.c \ + ldap/servers/slapd/tools/ldclt/scalab01.c \ + ldap/servers/slapd/tools/ldclt/threadMain.c \ + ldap/servers/slapd/tools/ldclt/utils.c \ + ldap/servers/slapd/tools/ldclt/version.c \ + ldap/servers/slapd/tools/ldclt/workarounds.c \ + ldap/servers/slapd/tools/ldclt/opCheck.c +@SOLARIS_TRUE@am__objects_4 = ldap/servers/slapd/tools/ldclt/ldclt_bin-opCheck.$(OBJEXT) +am_ldclt_bin_OBJECTS = \ + ldap/servers/slapd/tools/ldclt_bin-ldaptool-sasl.$(OBJEXT) \ + ldap/servers/slapd/tools/ldclt/ldclt_bin-data.$(OBJEXT) \ + ldap/servers/slapd/tools/ldclt/ldclt_bin-ldapfct.$(OBJEXT) \ + ldap/servers/slapd/tools/ldclt/ldclt_bin-ldclt.$(OBJEXT) \ + ldap/servers/slapd/tools/ldclt/ldclt_bin-ldcltU.$(OBJEXT) \ + ldap/servers/slapd/tools/ldclt/ldclt_bin-parser.$(OBJEXT) \ + ldap/servers/slapd/tools/ldclt/ldclt_bin-port.$(OBJEXT) \ + ldap/servers/slapd/tools/ldclt/ldclt_bin-scalab01.$(OBJEXT) \ + ldap/servers/slapd/tools/ldclt/ldclt_bin-threadMain.$(OBJEXT) \ + ldap/servers/slapd/tools/ldclt/ldclt_bin-utils.$(OBJEXT) \ + ldap/servers/slapd/tools/ldclt/ldclt_bin-version.$(OBJEXT) \ + ldap/servers/slapd/tools/ldclt/ldclt_bin-workarounds.$(OBJEXT) \ + $(am__objects_4) +ldclt_bin_OBJECTS = $(am_ldclt_bin_OBJECTS) +ldclt_bin_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_ldif_bin_OBJECTS = \ + ldap/servers/slapd/tools/ldif_bin-ldif.$(OBJEXT) +ldif_bin_OBJECTS = $(am_ldif_bin_OBJECTS) +ldif_bin_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +am_makstrdb_OBJECTS = lib/libsi18n/makstrdb-makstrdb.$(OBJEXT) +makstrdb_OBJECTS = $(am_makstrdb_OBJECTS) +makstrdb_LDADD = $(LDADD) +am_migratecred_bin_OBJECTS = ldap/servers/slapd/tools/migratecred_bin-migratecred.$(OBJEXT) +migratecred_bin_OBJECTS = $(am_migratecred_bin_OBJECTS) +migratecred_bin_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_mmldif_bin_OBJECTS = \ + ldap/servers/slapd/tools/mmldif_bin-mmldif.$(OBJEXT) +mmldif_bin_OBJECTS = $(am_mmldif_bin_OBJECTS) +mmldif_bin_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +am__ns_slapd_SOURCES_DIST = ldap/servers/slapd/abandon.c \ + ldap/servers/slapd/auth.c ldap/servers/slapd/bind.c \ + ldap/servers/slapd/compare.c ldap/servers/slapd/config.c \ + ldap/servers/slapd/configdse.c ldap/servers/slapd/connection.c \ + ldap/servers/slapd/conntable.c ldap/servers/slapd/daemon.c \ + ldap/servers/slapd/detach.c ldap/servers/slapd/extendop.c \ + ldap/servers/slapd/fedse.c ldap/servers/slapd/fileio.c \ + ldap/servers/slapd/getopt_ext.c ldap/servers/slapd/globals.c \ + ldap/servers/slapd/house.c ldap/servers/slapd/init.c \ + ldap/servers/slapd/main.c ldap/servers/slapd/monitor.c \ + ldap/servers/slapd/passwd_extop.c ldap/servers/slapd/psearch.c \ + ldap/servers/slapd/pw_mgmt.c ldap/servers/slapd/rootdse.c \ + ldap/servers/slapd/sasl_io.c ldap/servers/slapd/saslbind.c \ + ldap/servers/slapd/search.c \ + ldap/servers/slapd/start_tls_extop.c \ + ldap/servers/slapd/strdup.c ldap/servers/slapd/stubs.c \ + ldap/servers/slapd/tempnam.c ldap/servers/slapd/unbind.c \ + ldap/servers/slapd/getsocketpeer.c +@enable_ldapi_TRUE@am__objects_5 = ldap/servers/slapd/ns_slapd-getsocketpeer.$(OBJEXT) +am_ns_slapd_OBJECTS = ldap/servers/slapd/ns_slapd-abandon.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-auth.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-bind.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-compare.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-config.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-configdse.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-connection.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-conntable.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-daemon.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-detach.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-extendop.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-fedse.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-fileio.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-getopt_ext.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-globals.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-house.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-init.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-main.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-monitor.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-passwd_extop.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-psearch.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-pw_mgmt.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-rootdse.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-sasl_io.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-saslbind.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-search.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-start_tls_extop.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-strdup.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-stubs.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-tempnam.$(OBJEXT) \ + ldap/servers/slapd/ns_slapd-unbind.$(OBJEXT) $(am__objects_5) +ns_slapd_OBJECTS = $(am_ns_slapd_OBJECTS) +ns_slapd_DEPENDENCIES = libslapd.la libldaputil.a \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_pwdhash_bin_OBJECTS = \ + ldap/servers/slapd/tools/pwdhash_bin-pwenc.$(OBJEXT) +pwdhash_bin_OBJECTS = $(am_pwdhash_bin_OBJECTS) +pwdhash_bin_DEPENDENCIES = libslapd.la $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_rsearch_bin_OBJECTS = ldap/servers/slapd/tools/rsearch/rsearch_bin-nametable.$(OBJEXT) \ + ldap/servers/slapd/tools/rsearch/rsearch_bin-rsearch.$(OBJEXT) \ + ldap/servers/slapd/tools/rsearch/rsearch_bin-sdattable.$(OBJEXT) \ + ldap/servers/slapd/tools/rsearch/rsearch_bin-searchthread.$(OBJEXT) +rsearch_bin_OBJECTS = $(am_rsearch_bin_OBJECTS) +rsearch_bin_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +SCRIPTS = $(bin_SCRIPTS) $(init_SCRIPTS) $(sbin_SCRIPTS) \ + $(task_SCRIPTS) $(update_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) +LTCPPASCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CCASFLAGS) $(CCASFLAGS) +AM_V_CPPAS = $(am__v_CPPAS_@AM_V@) +am__v_CPPAS_ = $(am__v_CPPAS_@AM_DEFAULT_V@) +am__v_CPPAS_0 = @echo " CPPAS " $@; +am__v_CPPAS_1 = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +SOURCES = $(libavl_a_SOURCES) $(libldaputil_a_SOURCES) \ + $(libacctpolicy_plugin_la_SOURCES) \ + $(libacctusability_plugin_la_SOURCES) \ + $(libacl_plugin_la_SOURCES) \ + $(libattr_unique_plugin_la_SOURCES) \ + $(libautomember_plugin_la_SOURCES) $(libback_ldbm_la_SOURCES) \ + $(libbitwise_plugin_la_SOURCES) \ + $(libchainingdb_plugin_la_SOURCES) \ + $(libcollation_plugin_la_SOURCES) \ + $(libcontentsync_plugin_la_SOURCES) \ + $(libcos_plugin_la_SOURCES) $(libderef_plugin_la_SOURCES) \ + $(libdistrib_plugin_la_SOURCES) $(libdna_plugin_la_SOURCES) \ + $(libhttp_client_plugin_la_SOURCES) \ + $(liblinkedattrs_plugin_la_SOURCES) \ + $(libmanagedentries_plugin_la_SOURCES) \ + $(libmemberof_plugin_la_SOURCES) $(libns_dshttpd_la_SOURCES) \ + $(libpam_passthru_plugin_la_SOURCES) \ + $(libpassthru_plugin_la_SOURCES) $(libpbe_plugin_la_SOURCES) \ + $(libposix_winsync_plugin_la_SOURCES) \ + $(libpresence_plugin_la_SOURCES) \ + $(libpwdstorage_plugin_la_SOURCES) \ + $(libreferint_plugin_la_SOURCES) \ + $(libreplication_plugin_la_SOURCES) \ + $(libretrocl_plugin_la_SOURCES) $(libroles_plugin_la_SOURCES) \ + $(librootdn_access_plugin_la_SOURCES) \ + $(libschemareload_plugin_la_SOURCES) $(libslapd_la_SOURCES) \ + $(libstatechange_plugin_la_SOURCES) \ + $(libsyntax_plugin_la_SOURCES) $(libusn_plugin_la_SOURCES) \ + $(libviews_plugin_la_SOURCES) $(libwhoami_plugin_la_SOURCES) \ + $(dbscan_bin_SOURCES) $(dsktune_bin_SOURCES) \ + $(infadd_bin_SOURCES) $(ldap_agent_bin_SOURCES) \ + $(ldclt_bin_SOURCES) $(ldif_bin_SOURCES) $(makstrdb_SOURCES) \ + $(migratecred_bin_SOURCES) $(mmldif_bin_SOURCES) \ + $(ns_slapd_SOURCES) $(pwdhash_bin_SOURCES) \ + $(rsearch_bin_SOURCES) +DIST_SOURCES = $(libavl_a_SOURCES) $(libldaputil_a_SOURCES) \ + $(libacctpolicy_plugin_la_SOURCES) \ + $(libacctusability_plugin_la_SOURCES) \ + $(libacl_plugin_la_SOURCES) \ + $(libattr_unique_plugin_la_SOURCES) \ + $(libautomember_plugin_la_SOURCES) $(libback_ldbm_la_SOURCES) \ + $(libbitwise_plugin_la_SOURCES) \ + $(libchainingdb_plugin_la_SOURCES) \ + $(libcollation_plugin_la_SOURCES) \ + $(libcontentsync_plugin_la_SOURCES) \ + $(libcos_plugin_la_SOURCES) $(libderef_plugin_la_SOURCES) \ + $(libdistrib_plugin_la_SOURCES) $(libdna_plugin_la_SOURCES) \ + $(libhttp_client_plugin_la_SOURCES) \ + $(liblinkedattrs_plugin_la_SOURCES) \ + $(libmanagedentries_plugin_la_SOURCES) \ + $(libmemberof_plugin_la_SOURCES) $(libns_dshttpd_la_SOURCES) \ + $(libpam_passthru_plugin_la_SOURCES) \ + $(libpassthru_plugin_la_SOURCES) $(libpbe_plugin_la_SOURCES) \ + $(libposix_winsync_plugin_la_SOURCES) \ + $(libpresence_plugin_la_SOURCES) \ + $(libpwdstorage_plugin_la_SOURCES) \ + $(libreferint_plugin_la_SOURCES) \ + $(libreplication_plugin_la_SOURCES) \ + $(libretrocl_plugin_la_SOURCES) $(libroles_plugin_la_SOURCES) \ + $(librootdn_access_plugin_la_SOURCES) \ + $(libschemareload_plugin_la_SOURCES) \ + $(am__libslapd_la_SOURCES_DIST) \ + $(libstatechange_plugin_la_SOURCES) \ + $(libsyntax_plugin_la_SOURCES) $(libusn_plugin_la_SOURCES) \ + $(libviews_plugin_la_SOURCES) $(libwhoami_plugin_la_SOURCES) \ + $(dbscan_bin_SOURCES) $(dsktune_bin_SOURCES) \ + $(infadd_bin_SOURCES) $(ldap_agent_bin_SOURCES) \ + $(am__ldclt_bin_SOURCES_DIST) $(ldif_bin_SOURCES) \ + $(makstrdb_SOURCES) $(migratecred_bin_SOURCES) \ + $(mmldif_bin_SOURCES) $(am__ns_slapd_SOURCES_DIST) \ + $(pwdhash_bin_SOURCES) $(rsearch_bin_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +man1dir = $(mandir)/man1 +man8dir = $(mandir)/man8 +NROFF = nroff +MANS = $(dist_man_MANS) +DATA = $(config_DATA) $(dist_noinst_DATA) $(inf_DATA) \ + $(initconfig_DATA) $(mib_DATA) $(nodist_property_DATA) \ + $(perl_DATA) $(pkgconfig_DATA) $(property_DATA) $(python_DATA) \ + $(sampledata_DATA) $(schema_DATA) $(systemdsystemunit_DATA) \ + $(update_DATA) +HEADERS = $(dist_noinst_HEADERS) $(serverinc_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +AM_RECURSIVE_TARGETS = cscope +am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in $(top_srcdir)/rpm/389-ds-base.spec.in \ + README compile config.guess config.sub depcomp install-sh \ + ltmain.sh missing +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +GZIP_ENV = --best +DIST_ARCHIVES = $(distdir).tar.bz2 +DIST_TARGETS = dist-bzip2 +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONSOLE_VERSION = @CONSOLE_VERSION@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +ICU_CONFIG = @ICU_CONFIG@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KRB5_CONFIG_BIN = @KRB5_CONFIG_BIN@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBCRUN = @LIBCRUN@ +LIBCRYPT = @LIBCRYPT@ +LIBCSTD = @LIBCSTD@ +LIBDL = @LIBDL@ +LIBNSL = @LIBNSL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSOCKET = @LIBSOCKET@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NETSNMP_CONFIG = @NETSNMP_CONFIG@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BASE_VERSION = @PACKAGE_BASE_VERSION@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +RPM_RELEASE = @RPM_RELEASE@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THREADLIB = @THREADLIB@ +VERSION = @VERSION@ +VERSION_PREREL = @VERSION_PREREL@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +asan_defs = @asan_defs@ +bindir = @bindir@ +brand = @brand@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +capbrand = @capbrand@ +configdir = $(sysconfdir)@configdir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +db_bindir = @db_bindir@ +db_inc = @db_inc@ +db_incdir = @db_incdir@ +db_lib = @db_lib@ +db_libdir = @db_libdir@ +db_libver = @db_libver@ +debug_defs = @debug_defs@ +defaultgroup = @defaultgroup@ +defaultuser = @defaultuser@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gccsec_defs = @gccsec_defs@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +icu_bin = @icu_bin@ +icu_inc = @icu_inc@ +icu_lib = @icu_lib@ +includedir = @includedir@ +infdir = $(datadir)@infdir@ +infodir = @infodir@ +initconfigdir = $(sysconfdir)@initconfigdir@ +initdir = @initdir@ +install_sh = @install_sh@ +instconfigdir = @instconfigdir@ +kerberos_inc = @kerberos_inc@ +kerberos_lib = @kerberos_lib@ +kerberos_libdir = @kerberos_libdir@ +ldap_lib_ldif = @ldap_lib_ldif@ +ldapsdk_bindir = @ldapsdk_bindir@ +ldapsdk_inc = @ldapsdk_inc@ +ldapsdk_lib = @ldapsdk_lib@ +ldapsdk_libdir = @ldapsdk_libdir@ +ldaptool_bindir = @ldaptool_bindir@ +ldaptool_opts = @ldaptool_opts@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localrundir = @localrundir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mibdir = $(datadir)@mibdir@ +mkdir_p = @mkdir_p@ +netsnmp_inc = @netsnmp_inc@ +netsnmp_lib = @netsnmp_lib@ +netsnmp_libdir = @netsnmp_libdir@ +netsnmp_link = @netsnmp_link@ +nspr_inc = @nspr_inc@ +nspr_lib = @nspr_lib@ +nspr_libdir = @nspr_libdir@ +nss_inc = @nss_inc@ +nss_lib = @nss_lib@ +nss_libdir = @nss_libdir@ +nunc_stans_inc = @nunc_stans_inc@ +nunc_stans_lib = @nunc_stans_lib@ +nunc_stans_libdir = @nunc_stans_libdir@ +ol_libver = @ol_libver@ +oldincludedir = @oldincludedir@ +openldap_bindir = @openldap_bindir@ +openldap_inc = @openldap_inc@ +openldap_lib = @openldap_lib@ +openldap_libdir = @openldap_libdir@ +pcre_inc = @pcre_inc@ +pcre_lib = @pcre_lib@ +pcre_libdir = @pcre_libdir@ +pdfdir = @pdfdir@ +perldir = $(libdir)@perldir@ +perlexec = @perlexec@ +plainldif_opts = @plainldif_opts@ +prefix = @prefix@ + +#------------------------ +# Install Paths +#------------------------ +prefixdir = @prefixdir@ +program_transform_name = @program_transform_name@ +propertydir = $(datadir)@propertydir@ +psdir = @psdir@ +pythondir = $(libdir)@pythondir@ +pythonexec = @pythonexec@ +sampledatadir = $(datadir)@sampledatadir@ +sasl_inc = @sasl_inc@ +sasl_lib = @sasl_lib@ +sasl_libdir = @sasl_libdir@ +sasl_path = @sasl_path@ +sbindir = @sbindir@ +schemadir = $(sysconfdir)@schemadir@ +scripttemplatedir = @scripttemplatedir@ +serverdir = $(libdir)@serverdir@ +serverincdir = $(includedir)@serverincdir@ +serverplugindir = $(libdir)@serverplugindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sttyexec = @sttyexec@ +svrcore_inc = @svrcore_inc@ +svrcore_lib = @svrcore_lib@ +sysconfdir = @sysconfdir@ +systemd_defs = @systemd_defs@ +systemd_inc = @systemd_inc@ +systemd_lib = @systemd_lib@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +updatedir = $(datadir)@updatedir@ +vendor = @vendor@ +with_fhs_opt = @with_fhs_opt@ +with_selinux = @with_selinux@ +with_systemdgroupname = @with_systemdgroupname@ +with_systemdsystemconfdir = @with_systemdsystemconfdir@ +with_systemdsystemunitdir = @with_systemdsystemunitdir@ +with_tmpfiles_d = @with_tmpfiles_d@ + +# look for included m4 files in the ./m4/ directory +ACLOCAL_AMFLAGS = -I m4 +NULLSTRING := +SPACE := $(NULLSTRING) # the space is between the ) and the # +COLON := $(NULLSTRING):# a colon +QUOTE := $(NULLSTRING)"# a double quote" + +#------------------------ +# Compiler Flags +#------------------------ +BUILDNUM := $(shell perl $(srcdir)/buildnum.pl) +NQBUILDNUM := $(subst \,,$(subst $(QUOTE),,$(BUILDNUM))) +DEBUG_DEFINES = @debug_defs@ +GCCSEC_DEFINES = @gccsec_defs@ +ASAN_DEFINES = @asan_defs@ +SYSTEMD_DEFINES = @systemd_defs@ +# the -U undefines these symbols - should use the corresponding DS_ ones instead - see configure.ac +DS_DEFINES = -DBUILD_NUM=$(BUILDNUM) -DVENDOR="\"$(vendor)\"" -DBRAND="\"$(brand)\"" -DCAPBRAND="\"$(capbrand)\"" \ + -UPACKAGE_VERSION -UPACKAGE_TARNAME -UPACKAGE_STRING -UPACKAGE_BUGREPORT + +@enable_nunc_stans_TRUE@NUNC_STANS_INCLUDES = $(nunc_stans_inc) +@enable_nunc_stans_TRUE@NUNC_STANS_LINK = $(nunc_stans_lib) -lnunc-stans +@enable_nunc_stans_FALSE@NUNC_STANS_ON = 0 +@enable_nunc_stans_TRUE@NUNC_STANS_ON = 1 +DS_INCLUDES = -I$(srcdir)/ldap/include -I$(srcdir)/ldap/servers/slapd -I$(srcdir)/include -I. $(NUNC_STANS_INCLUDES) +@enable_asan_FALSE@ASAN_ON = 0 +@enable_asan_TRUE@ASAN_ON = 1 + +# these paths are dependent on the settings of prefix and exec_prefix which may be specified +# at make time. So we cannot use AC_DEFINE in the configure.ac because that would set the +# values prior to their being defined. Defining them here ensures that they are properly +# expanded before use. See create_instance.h for more details. The quoting ensures that +# the values are quoted for the shell command, and the value expands to a quoted string +# value in the header file e.g. +# #define LOCALSTATEDIR "/var" +# without the quotes, it would be +# #define LOCALSTATEDIR /var +# which would be an error +PATH_DEFINES = -DLOCALSTATEDIR="\"$(localstatedir)\"" -DSYSCONFDIR="\"$(sysconfdir)\"" \ + -DLIBDIR="\"$(libdir)\"" -DBINDIR="\"$(bindir)\"" \ + -DDATADIR="\"$(datadir)\"" -DDOCDIR="\"$(docdir)\"" \ + -DSBINDIR="\"$(sbindir)\"" -DPLUGINDIR="\"$(serverplugindir)\"" -DTEMPLATEDIR="\"$(sampledatadir)\"" + +AM_CPPFLAGS = $(DEBUG_DEFINES) $(GCCSEC_DEFINES) $(ASAN_DEFINES) $(DS_DEFINES) $(DS_INCLUDES) $(PATH_DEFINES) $(SYSTEMD_DEFINES) +PLUGIN_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ @systemd_inc@ +#AM_LDFLAGS = -Wl,-z,defs +@HPUX_FALSE@AM_LDFLAGS = $(ASAN_DEFINES) +# We need to make sure that libpthread is linked before libc on HP-UX. +@HPUX_TRUE@AM_LDFLAGS = -lpthread + +#------------------------ +# Linker Flags +#------------------------ +NSPR_LINK = @nspr_lib@ -lplc4 -lplds4 -lnspr4 +NSS_LINK = @nss_lib@ -lssl3 -lnss3 +@OPENLDAP_FALSE@LDAPSDK_LINK_NOTHR = $(LDAPSDK_LINK) +# with recent versions of openldap - if you link with both ldap_r and ldap, the +# shared lib _fini for one will stomp on the other, and the program will crash +@OPENLDAP_TRUE@LDAPSDK_LINK_NOTHR = @openldap_lib@ -lldap@ol_libver@ @ldap_lib_ldif@ -llber@ol_libver@ +@OPENLDAP_FALSE@LDAPSDK_LINK = @ldapsdk_lib@ -lssldap60 -lprldap60 -lldap60 -lldif60 +@OPENLDAP_TRUE@LDAPSDK_LINK = @openldap_lib@ -lldap_r@ol_libver@ @ldap_lib_ldif@ -llber@ol_libver@ +@OPENLDAP_FALSE@ldaplib = mozldap +@OPENLDAP_TRUE@ldaplib = openldap +@OPENLDAP_FALSE@ldaplib_defs = +@OPENLDAP_TRUE@ldaplib_defs = -DUSE_OPENLDAP +DB_LINK = @db_lib@ -ldb-@db_libver@ +SASL_LINK = @sasl_lib@ -lsasl2 +SVRCORE_LINK = @svrcore_lib@ -lsvrcore +ICU_LINK = @icu_lib@ -licui18n -licuuc -licudata +PCRE_LINK = @pcre_lib@ -lpcre +NETSNMP_LINK = @netsnmp_lib@ @netsnmp_link@ +PAM_LINK = -lpam +KERBEROS_LINK = $(kerberos_lib) +DLOPEN_LINK = -ldl +SYSTEMD_LINK = @systemd_lib@ + +#------------------------ +# Generated Sources +#------------------------ +BUILT_SOURCES = dberrstrs.h \ + $(POLICY_FC) + +@enable_posix_winsync_TRUE@LIBPOSIX_WINSYNC_PLUGIN = libposix-winsync-plugin.la +@enable_posix_winsync_TRUE@POSIX_WINSYNC_PLUGIN_LDIF = ldap/ldif/50posix-winsync-plugin.ldif +CLEANFILES = dberrstrs.h ns-slapd.properties \ + ldap/admin/src/scripts/template-dbverify ldap/admin/src/template-initconfig \ + ldap/admin/src/scripts/dscreate.map ldap/admin/src/scripts/remove-ds.pl \ + ldap/admin/src/scripts/DSCreate.pm ldap/admin/src/scripts/DSMigration.pm \ + ldap/admin/src/scripts/DSUpdate.pm ldap/admin/src/scripts/dsupdate.map \ + ldap/admin/src/scripts/dsorgentries.map ldap/admin/src/scripts/migrate-ds.pl \ + ldap/admin/src/scripts/Migration.pm ldap/admin/src/scripts/SetupDialogs.pm \ + ldap/admin/src/scripts/setup-ds.pl ldap/admin/src/scripts/setup-ds.res \ + ldap/admin/src/scripts/start-dirsrv ldap/admin/src/scripts/stop-dirsrv \ + ldap/admin/src/scripts/restart-dirsrv ldap/admin/src/scripts/Setup.pm \ + ldap/admin/src/scripts/status-dirsrv \ + ldap/admin/src/scripts/template-bak2db ldap/admin/src/scripts/template-bak2db.pl \ + ldap/admin/src/scripts/template-db2bak ldap/admin/src/scripts/template-db2bak.pl \ + ldap/admin/src/scripts/template-db2index ldap/admin/src/scripts/template-db2index.pl \ + ldap/admin/src/scripts/template-db2ldif ldap/admin/src/scripts/template-db2ldif.pl \ + ldap/admin/src/scripts/template-ldif2db ldap/admin/src/scripts/template-ldif2db.pl \ + ldap/admin/src/scripts/template-ldif2ldap ldap/admin/src/scripts/template-monitor \ + ldap/admin/src/scripts/template-ns-accountstatus.pl 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-restart-slapd ldap/admin/src/scripts/template-restoreconfig \ + ldap/admin/src/scripts/template-saveconfig ldap/admin/src/scripts/template-start-slapd \ + ldap/admin/src/scripts/template-stop-slapd ldap/admin/src/scripts/template-suffix2instance \ + ldap/admin/src/scripts/template-upgradedb \ + ldap/admin/src/scripts/template-upgradednformat \ + ldap/admin/src/scripts/template-usn-tombstone-cleanup.pl \ + ldap/admin/src/scripts/template-verify-db.pl \ + ldap/admin/src/scripts/template-vlvindex ldap/admin/src/scripts/DSUtil.pm \ + ldap/ldif/template-baseacis.ldif ldap/ldif/template-bitwise.ldif ldap/ldif/template-country.ldif \ + ldap/ldif/template-dnaplugin.ldif ldap/ldif/template-domain.ldif ldap/ldif/template-dse.ldif \ + ldap/ldif/template-ldapi-autobind.ldif ldap/ldif/template-ldapi-default.ldif \ + ldap/ldif/template-ldapi.ldif ldap/ldif/template-locality.ldif ldap/ldif/template-org.ldif \ + ldap/ldif/template-orgunit.ldif ldap/ldif/template-pampta.ldif ldap/ldif/template-sasl.ldif \ + ldap/ldif/template-state.ldif ldap/ldif/template-suffix-db.ldif \ + ldap/admin/src/scripts/bak2db ldap/admin/src/scripts/db2bak ldap/admin/src/scripts/upgradedb \ + ldap/admin/src/scripts/db2index ldap/admin/src/scripts/db2ldif \ + ldap/admin/src/scripts/dn2rdn ldap/admin/src/scripts/ldif2db \ + ldap/admin/src/scripts/ldif2ldap ldap/admin/src/scripts/monitor \ + ldap/admin/src/scripts/restoreconfig ldap/admin/src/scripts/saveconfig \ + ldap/admin/src/scripts/suffix2instance \ + ldap/admin/src/scripts/upgradednformat ldap/admin/src/scripts/vlvindex \ + ldap/admin/src/scripts/bak2db.pl ldap/admin/src/scripts/db2bak.pl \ + ldap/admin/src/scripts/db2index.pl ldap/admin/src/scripts/db2ldif.pl \ + ldap/admin/src/scripts/fixup-linkedattrs.pl ldap/admin/src/scripts/fixup-memberof.pl \ + ldap/admin/src/scripts/cleanallruv.pl ldap/admin/src/scripts/ldif2db.pl \ + ldap/admin/src/scripts/ns-accountstatus.pl ldap/admin/src/scripts/ns-activate.pl \ + ldap/admin/src/scripts/ns-inactivate.pl ldap/admin/src/scripts/ns-newpwpolicy.pl \ + ldap/admin/src/scripts/schema-reload.pl ldap/admin/src/scripts/syntax-validate.pl \ + ldap/admin/src/scripts/usn-tombstone-cleanup.pl ldap/admin/src/scripts/verify-db.pl \ + ldap/admin/src/scripts/ds_selinux_port_query ldap/admin/src/scripts/ds_selinux_enabled \ + ldap/admin/src/scripts/dbverify ldap/admin/src/scripts/readnsstate \ + $(NULL) + +taskdir = $(datadir)@scripttemplatedir@ +systemdsystemunitdir = @with_systemdsystemunitdir@ +systemdsystemconfdir = @with_systemdsystemconfdir@ +systemdgroupname = @with_systemdgroupname@ +pkgconfigdir = $(libdir)/pkgconfig +server_LTLIBRARIES = libslapd.la libns-dshttpd.la + +# this is how to add optional plugins +@enable_pam_passthru_TRUE@LIBPAM_PASSTHRU_PLUGIN = libpam-passthru-plugin.la +@enable_pam_passthru_TRUE@enable_pam_passthru = 1 +@enable_dna_TRUE@LIBDNA_PLUGIN = libdna-plugin.la +@enable_dna_TRUE@enable_dna = 1 +@enable_bitwise_TRUE@LIBBITWISE_PLUGIN = libbitwise-plugin.la +@enable_bitwise_TRUE@enable_bitwise = 1 +@enable_presence_TRUE@LIBPRESENCE_PLUGIN = libpresence-plugin.la +@enable_presence_TRUE@LIBPRESENCE_SCHEMA = $(srcdir)/ldap/schema/10presence.ldif +@enable_presence_FALSE@enable_presence = off +@enable_presence_TRUE@enable_presence = on +@SELINUX_TRUE@POLICY_FC = selinux-built/dirsrv.fc +@enable_acctpolicy_TRUE@LIBACCTPOLICY_PLUGIN = libacctpolicy-plugin.la +@enable_acctpolicy_TRUE@LIBACCTPOLICY_SCHEMA = $(srcdir)/ldap/schema/60acctpolicy.ldif +@enable_acctpolicy_TRUE@enable_acctpolicy = 1 +serverplugin_LTLIBRARIES = libacl-plugin.la libattr-unique-plugin.la \ + libautomember-plugin.la libback-ldbm.la libchainingdb-plugin.la \ + libcollation-plugin.la libcos-plugin.la libderef-plugin.la \ + libpbe-plugin.la libdistrib-plugin.la libhttp-client-plugin.la \ + liblinkedattrs-plugin.la libmanagedentries-plugin.la \ + libmemberof-plugin.la libpassthru-plugin.la libpwdstorage-plugin.la \ + libcontentsync-plugin.la \ + libreferint-plugin.la libreplication-plugin.la libretrocl-plugin.la \ + libroles-plugin.la libstatechange-plugin.la libsyntax-plugin.la \ + libviews-plugin.la libschemareload-plugin.la libusn-plugin.la \ + libacctusability-plugin.la librootdn-access-plugin.la \ + libwhoami-plugin.la $(LIBACCTPOLICY_PLUGIN) \ + $(LIBPAM_PASSTHRU_PLUGIN) $(LIBDNA_PLUGIN) \ + $(LIBBITWISE_PLUGIN) $(LIBPRESENCE_PLUGIN) $(LIBPOSIX_WINSYNC_PLUGIN) + +nodist_property_DATA = ns-slapd.properties +noinst_LIBRARIES = libavl.a libldaputil.a +dist_noinst_HEADERS = \ + include/i18n.h \ + include/netsite.h \ + include/base/crit.h \ + include/base/dbtbase.h \ + include/base/ereport.h \ + include/base/file.h \ + include/base/fsmutex.h \ + include/base/plist.h \ + include/base/pool.h \ + include/base/shexp.h \ + include/base/systems.h \ + include/base/systhr.h \ + include/base/util.h \ + include/ldaputil/cert.h \ + include/ldaputil/certmap.h \ + include/ldaputil/dbconf.h \ + include/ldaputil/encode.h \ + include/ldaputil/errors.h \ + include/ldaputil/extcmap.h \ + include/ldaputil/init.h \ + include/ldaputil/ldapauth.h \ + include/ldaputil/ldaputil.h \ + include/libaccess/aclerror.h \ + include/libaccess/acleval.h \ + include/libaccess/aclglobal.h \ + include/libaccess/acl.h \ + include/libaccess/aclproto.h \ + include/libaccess/aclstruct.h \ + include/libaccess/attrec.h \ + include/libaccess/authdb.h \ + include/libaccess/dbtlibaccess.h \ + include/libaccess/dnfstruct.h \ + include/libaccess/ipfstruct.h \ + include/libaccess/las.h \ + include/libaccess/nsautherr.h \ + include/libaccess/nsauth.h \ + include/libaccess/nserror.h \ + include/libaccess/symbols.h \ + include/libaccess/userauth.h \ + include/libaccess/usi.h \ + include/libaccess/usrcache.h \ + include/libadmin/dbtlibadmin.h \ + include/libadmin/libadmin.h \ + include/public/netsite.h \ + include/public/nsapi.h \ + include/public/base/systems.h \ + include/public/nsacl/aclapi.h \ + include/public/nsacl/acldef.h \ + include/public/nsacl/nserrdef.h \ + include/public/nsacl/plistdef.h \ + ldap/include/avl.h \ + ldap/include/dblayer.h \ + ldap/include/disptmpl.h \ + ldap/include/ldaplog.h \ + ldap/include/ldaprot.h \ + ldap/include/ldbm.h \ + ldap/include/portable.h \ + ldap/include/regex.h \ + ldap/include/srchpref.h \ + ldap/include/sysexits-compat.h \ + ldap/servers/plugins/collation/config.h \ + ldap/servers/plugins/collation/collate.h \ + ldap/servers/plugins/collation/orfilter.h \ + ldap/servers/plugins/chainingdb/cb.h \ + ldap/servers/plugins/deref/deref.h \ + ldap/servers/plugins/acctpolicy/acctpolicy.h \ + ldap/servers/plugins/posix-winsync/posix-wsp-ident.h \ + ldap/servers/plugins/posix-winsync/posix-group-func.h \ + ldap/servers/plugins/roles/roles_cache.h \ + ldap/servers/plugins/usn/usn.h \ + ldap/servers/plugins/pwdstorage/pwdstorage.h \ + ldap/servers/plugins/pwdstorage/md5.h \ + ldap/servers/plugins/acl/acl.h \ + ldap/servers/plugins/linkedattrs/linked_attrs.h \ + ldap/servers/plugins/rootdn_access/rootdn_access.h \ + ldap/servers/plugins/acct_usability/acct_usability.h \ + ldap/servers/plugins/retrocl/retrocl.h \ + ldap/servers/plugins/uiduniq/plugin-utils.h \ + ldap/servers/plugins/memberof/memberof.h \ + ldap/servers/plugins/replication/cl5_api.h \ + ldap/servers/plugins/replication/cl4_api.h \ + ldap/servers/plugins/replication/llist.h \ + ldap/servers/plugins/replication/repl_shared.h \ + ldap/servers/plugins/replication/csnpl.h \ + ldap/servers/plugins/replication/cl5.h \ + ldap/servers/plugins/replication/repl-session-plugin.h \ + ldap/servers/plugins/replication/repl.h \ + ldap/servers/plugins/replication/windows_prot_private.h \ + ldap/servers/plugins/replication/repl_helper.h \ + ldap/servers/plugins/replication/repl_objset.h \ + ldap/servers/plugins/replication/repl5.h \ + ldap/servers/plugins/replication/cl5_test.h \ + ldap/servers/plugins/replication/repl5_ruv.h \ + ldap/servers/plugins/replication/cl5_clcache.h \ + ldap/servers/plugins/replication/cl4.h \ + ldap/servers/plugins/replication/cl_crypt.h \ + ldap/servers/plugins/replication/urp.h \ + ldap/servers/plugins/replication/winsync-plugin.h \ + ldap/servers/plugins/replication/windowsrepl.h \ + ldap/servers/plugins/replication/repl5_prot_private.h \ + ldap/servers/plugins/pam_passthru/pam_passthru.h \ + ldap/servers/plugins/syntaxes/syntax.h \ + ldap/servers/plugins/cos/cos_cache.h \ + ldap/servers/plugins/sync/sync.h \ + ldap/servers/plugins/passthru/passthru.h \ + ldap/servers/plugins/rever/rever.h \ + ldap/servers/plugins/http/http_client.h \ + ldap/servers/plugins/http/http_impl.h \ + ldap/servers/plugins/automember/automember.h \ + ldap/servers/plugins/mep/mep.h \ + ldap/servers/slapd/agtmmap.h \ + ldap/servers/slapd/auth.h \ + ldap/servers/slapd/csngen.h \ + ldap/servers/slapd/disconnect_errors.h \ + ldap/servers/slapd/disconnect_error_strings.h \ + ldap/servers/slapd/fe.h \ + ldap/servers/slapd/filter.h \ + ldap/servers/slapd/getopt_ext.h \ + ldap/servers/slapd/getsocketpeer.h \ + ldap/servers/slapd/http.h \ + ldap/servers/slapd/index_subsys.h \ + ldap/servers/slapd/intrinsics.h \ + ldap/servers/slapd/log.h \ + ldap/servers/slapd/mozldap.h \ + ldap/servers/slapd/openldapber.h \ + ldap/servers/slapd/poll_using_select.h \ + ldap/servers/slapd/prerrstrs.h \ + ldap/servers/slapd/protect_db.h \ + ldap/servers/slapd/proto-slap.h \ + ldap/servers/slapd/pw.h \ + ldap/servers/slapd/secerrstrs.h \ + ldap/servers/slapd/slap.h \ + ldap/servers/slapd/slapi-plugin-compat4.h \ + ldap/servers/slapd/slapi-plugin.h \ + ldap/servers/slapd/slapi-private.h \ + ldap/servers/slapd/snmp_collator.h \ + ldap/servers/slapd/sslerrstrs.h \ + ldap/servers/slapd/statechange.h \ + ldap/servers/slapd/uuid.h \ + ldap/servers/slapd/vattr_spi.h \ + ldap/servers/slapd/views.h \ + ldap/servers/slapd/back-ldbm/attrcrypt.h \ + ldap/servers/slapd/back-ldbm/back-ldbm.h \ + ldap/servers/slapd/back-ldbm/dblayer.h \ + ldap/servers/slapd/back-ldbm/idlapi.h \ + ldap/servers/slapd/back-ldbm/import.h \ + ldap/servers/slapd/back-ldbm/ldbm_config.h \ + ldap/servers/slapd/back-ldbm/perfctrs.h \ + ldap/servers/slapd/back-ldbm/proto-back-ldbm.h \ + ldap/servers/slapd/back-ldbm/vlv_key.h \ + ldap/servers/slapd/back-ldbm/vlv_srch.h \ + ldap/servers/slapd/tools/ldaptool.h \ + ldap/servers/slapd/tools/ldaptool-sasl.h \ + ldap/servers/slapd/tools/ldclt/ldap-private.h \ + ldap/servers/slapd/tools/ldclt/ldclt.h \ + ldap/servers/slapd/tools/ldclt/port.h \ + ldap/servers/slapd/tools/ldclt/remote.h \ + ldap/servers/slapd/tools/ldclt/scalab01.h \ + ldap/servers/slapd/tools/ldclt/utils.h \ + ldap/servers/slapd/tools/rsearch/addthread.h \ + ldap/servers/slapd/tools/rsearch/infadd.h \ + ldap/servers/slapd/tools/rsearch/nametable.h \ + ldap/servers/slapd/tools/rsearch/rsearch.h \ + ldap/servers/slapd/tools/rsearch/sdattable.h \ + ldap/servers/slapd/tools/rsearch/searchthread.h \ + ldap/servers/snmp/ldap-agent.h \ + ldap/systools/pio.h \ + lib/base/lexer_pvt.h \ + lib/base/plist_pvt.h \ + lib/ldaputil/ldaputili.h \ + lib/libaccess/access_plhash.h \ + lib/libaccess/aclcache.h \ + lib/libaccess/aclpriv.h \ + lib/libaccess/aclscan.h \ + lib/libaccess/acl.tab.h \ + lib/libaccess/aclutil.h \ + lib/libaccess/lasdns.h \ + lib/libaccess/las.h \ + lib/libaccess/lasip.h \ + lib/libaccess/ldapauth.h \ + lib/libaccess/oneeval.h \ + lib/libaccess/parse.h \ + lib/libaccess/permhash.h \ + lib/libsi18n/getstrmem.h \ + lib/libsi18n/gsslapd.h \ + lib/libsi18n/reshash.h \ + lib/libsi18n/txtfile.h \ + $(NULL) + +dist_noinst_DATA = \ + $(srcdir)/buildnum.pl \ + $(srcdir)/dirsrv.pc.in \ + $(srcdir)/ldap/admin/src/*.pl \ + $(srcdir)/ldap/admin/src/*.in \ + $(srcdir)/ldap/admin/src/scripts/*.in \ + $(srcdir)/ldap/admin/src/scripts/*.ldif \ + $(srcdir)/ldap/admin/src/scripts/*.pl \ + $(srcdir)/ldap/admin/src/scripts/*.pm \ + $(srcdir)/ldap/admin/src/scripts/*.py \ + $(srcdir)/ldap/admin/src/scripts/*.sh \ + $(srcdir)/ldap/admin/src/scripts/migrate-ds.res \ + $(srcdir)/ldap/ldif/*.in \ + $(srcdir)/ldap/ldif/*.ldif \ + $(srcdir)/ldap/schema/*.ldif \ + $(srcdir)/ldap/schema/slapd-collations.conf \ + $(srcdir)/ldap/servers/slapd/mkDBErrStrs.pl \ + $(srcdir)/ldap/servers/slapd/tools/rsearch/scripts/dbgen* \ + $(srcdir)/ldap/servers/snmp/ldap-agent.conf \ + $(srcdir)/ldap/servers/snmp/redhat-directory.mib \ + $(srcdir)/lib/ldaputil/certmap.conf \ + $(srcdir)/m4 \ + $(srcdir)/rpm/389-ds-base.spec.in \ + $(srcdir)/rpm/389-ds-base-devel.README \ + $(srcdir)/rpm/389-ds-base-git.sh \ + $(srcdir)/selinux \ + $(srcdir)/README \ + $(srcdir)/LICENSE \ + $(srcdir)/LICENSE.* \ + $(srcdir)/VERSION.sh \ + $(srcdir)/wrappers/*.in \ + $(srcdir)/wrappers/systemd.template.sysconfig \ + $(srcdir)/dirsrvtests \ + $(NULL) + + +#------------------------ +# Installed Files +#------------------------ +config_DATA = $(srcdir)/lib/ldaputil/certmap.conf \ + $(srcdir)/ldap/schema/slapd-collations.conf \ + ldap/admin/src/template-initconfig \ + ldap/servers/snmp/ldap-agent.conf + + +# the schema files in this list are either not +# standard schema, not tested, or not compatible +# with the default schema e.g. there is +# considerable overlap of 60changelog.ldif and 01common.ldif +# and 60inetmail.ldif and 50ns-mail.ldif among others +sampledata_DATA = ldap/admin/src/scripts/DSSharedLib \ + $(srcdir)/ldap/ldif/Ace.ldif \ + $(srcdir)/ldap/ldif/European.ldif \ + $(srcdir)/ldap/ldif/Eurosuffix.ldif \ + $(srcdir)/ldap/ldif/Example.ldif \ + $(srcdir)/ldap/ldif/Example-roles.ldif \ + $(srcdir)/ldap/ldif/Example-views.ldif \ + $(srcdir)/ldap/ldif/template.ldif \ + ldap/ldif/template-dse.ldif \ + ldap/ldif/template-suffix-db.ldif \ + ldap/ldif/template-ldapi.ldif \ + ldap/ldif/template-ldapi-default.ldif \ + ldap/ldif/template-ldapi-autobind.ldif \ + ldap/ldif/template-pampta.ldif \ + ldap/ldif/template-dnaplugin.ldif \ + ldap/ldif/template-bitwise.ldif \ + ldap/ldif/template-org.ldif \ + ldap/ldif/template-domain.ldif \ + ldap/ldif/template-state.ldif \ + ldap/ldif/template-locality.ldif \ + ldap/ldif/template-country.ldif \ + ldap/ldif/template-orgunit.ldif \ + ldap/ldif/template-baseacis.ldif \ + ldap/ldif/template-sasl.ldif \ + ldap/ldif/90betxn-plugins.ldif \ + $(srcdir)/ldap/servers/slapd/tools/rsearch/scripts/dbgen-FamilyNames \ + $(srcdir)/ldap/servers/slapd/tools/rsearch/scripts/dbgen-GivenNames \ + $(srcdir)/ldap/servers/slapd/tools/rsearch/scripts/dbgen-OrgUnits \ + $(srcdir)/ldap/schema/10rfc2307bis.ldif \ + $(srcdir)/ldap/schema/60changelog.ldif \ + $(srcdir)/ldap/schema/60inetmail.ldif \ + $(srcdir)/ldap/schema/60krb5kdc.ldif \ + $(srcdir)/ldap/schema/60kerberos.ldif \ + $(srcdir)/ldap/schema/60nis.ldif \ + $(srcdir)/ldap/schema/60qmail.ldif \ + $(srcdir)/ldap/schema/60radius.ldif \ + $(srcdir)/ldap/schema/60rfc4876.ldif \ + $(srcdir)/ldap/schema/60samba.ldif \ + $(srcdir)/ldap/schema/60samba3.ldif \ + $(srcdir)/ldap/schema/60sendmail.ldif \ + $(LIBPRESENCE_SCHEMA) + +schema_DATA = $(srcdir)/ldap/schema/00core.ldif \ + $(srcdir)/ldap/schema/01core389.ldif \ + $(srcdir)/ldap/schema/02common.ldif \ + $(srcdir)/ldap/schema/05rfc2927.ldif \ + $(srcdir)/ldap/schema/05rfc4523.ldif \ + $(srcdir)/ldap/schema/05rfc4524.ldif \ + $(srcdir)/ldap/schema/06inetorgperson.ldif \ + $(srcdir)/ldap/schema/10automember-plugin.ldif \ + $(srcdir)/ldap/schema/10dna-plugin.ldif \ + $(srcdir)/ldap/schema/10mep-plugin.ldif \ + $(srcdir)/ldap/schema/10rfc2307.ldif \ + $(srcdir)/ldap/schema/20subscriber.ldif \ + $(srcdir)/ldap/schema/25java-object.ldif \ + $(srcdir)/ldap/schema/28pilot.ldif \ + $(srcdir)/ldap/schema/30ns-common.ldif \ + $(srcdir)/ldap/schema/50ns-admin.ldif \ + $(srcdir)/ldap/schema/50ns-certificate.ldif \ + $(srcdir)/ldap/schema/50ns-directory.ldif \ + $(srcdir)/ldap/schema/50ns-mail.ldif \ + $(srcdir)/ldap/schema/50ns-value.ldif \ + $(srcdir)/ldap/schema/50ns-web.ldif \ + $(srcdir)/ldap/schema/60pam-plugin.ldif \ + $(srcdir)/ldap/schema/60posix-winsync-plugin.ldif \ + $(srcdir)/ldap/schema/60autofs.ldif \ + $(srcdir)/ldap/schema/60eduperson.ldif \ + $(srcdir)/ldap/schema/60mozilla.ldif \ + $(srcdir)/ldap/schema/60pureftpd.ldif \ + $(srcdir)/ldap/schema/60rfc2739.ldif \ + $(srcdir)/ldap/schema/60rfc3712.ldif \ + $(srcdir)/ldap/schema/60sabayon.ldif \ + $(srcdir)/ldap/schema/60sudo.ldif \ + $(srcdir)/ldap/schema/60trust.ldif \ + $(srcdir)/ldap/schema/60nss-ldap.ldif \ + $(srcdir)/ldap/schema/99user.ldif \ + $(LIBACCTPOLICY_SCHEMA) + +sbin_SCRIPTS = ldap/admin/src/scripts/setup-ds.pl \ + ldap/admin/src/scripts/migrate-ds.pl \ + ldap/admin/src/scripts/remove-ds.pl \ + ldap/admin/src/scripts/start-dirsrv \ + ldap/admin/src/scripts/stop-dirsrv \ + ldap/admin/src/scripts/restart-dirsrv \ + ldap/admin/src/scripts/status-dirsrv \ + ldap/admin/src/scripts/bak2db \ + ldap/admin/src/scripts/db2bak \ + ldap/admin/src/scripts/db2index \ + ldap/admin/src/scripts/db2ldif \ + ldap/admin/src/scripts/dn2rdn \ + ldap/admin/src/scripts/ldif2db \ + ldap/admin/src/scripts/ldif2ldap \ + ldap/admin/src/scripts/monitor \ + ldap/admin/src/scripts/restoreconfig \ + ldap/admin/src/scripts/saveconfig \ + ldap/admin/src/scripts/suffix2instance \ + ldap/admin/src/scripts/upgradednformat \ + ldap/admin/src/scripts/vlvindex \ + ldap/admin/src/scripts/bak2db.pl \ + ldap/admin/src/scripts/db2bak.pl \ + ldap/admin/src/scripts/db2index.pl \ + ldap/admin/src/scripts/db2ldif.pl \ + ldap/admin/src/scripts/fixup-linkedattrs.pl \ + ldap/admin/src/scripts/fixup-memberof.pl \ + ldap/admin/src/scripts/cleanallruv.pl \ + ldap/admin/src/scripts/ldif2db.pl \ + ldap/admin/src/scripts/ns-accountstatus.pl \ + ldap/admin/src/scripts/ns-activate.pl \ + ldap/admin/src/scripts/ns-inactivate.pl \ + ldap/admin/src/scripts/ns-newpwpolicy.pl \ + ldap/admin/src/scripts/schema-reload.pl \ + ldap/admin/src/scripts/syntax-validate.pl \ + ldap/admin/src/scripts/usn-tombstone-cleanup.pl \ + ldap/admin/src/scripts/verify-db.pl \ + ldap/admin/src/scripts/dbverify \ + ldap/admin/src/scripts/upgradedb \ + ldap/admin/src/scripts/dbmon.sh \ + ldap/admin/src/scripts/ds_selinux_enabled \ + ldap/admin/src/scripts/ds_selinux_port_query \ + wrappers/ds_systemd_ask_password_acl \ + wrappers/ldap-agent + +bin_SCRIPTS = ldap/servers/slapd/tools/rsearch/scripts/dbgen.pl \ + wrappers/dbscan \ + wrappers/dsktune \ + wrappers/infadd \ + wrappers/ldclt \ + wrappers/ldif \ + $(srcdir)/ldap/admin/src/logconv.pl \ + wrappers/migratecred \ + wrappers/mmldif \ + wrappers/pwdhash \ + wrappers/rsearch \ + wrappers/cl-dump \ + ldap/admin/src/scripts/cl-dump.pl \ + wrappers/repl-monitor \ + ldap/admin/src/scripts/repl-monitor.pl \ + ldap/admin/src/scripts/readnsstate \ + ldap/admin/src/scripts/ds-logpipe.py + + +# SCRIPTS makes them executables - these are perl modules +# and should not be marked as executable - so use DATA +perl_DATA = ldap/admin/src/scripts/SetupLog.pm \ + ldap/admin/src/scripts/Resource.pm \ + ldap/admin/src/scripts/DSUtil.pm \ + ldap/admin/src/scripts/Setup.pm \ + ldap/admin/src/scripts/SetupDialogs.pm \ + ldap/admin/src/scripts/Inf.pm \ + ldap/admin/src/scripts/DialogManager.pm \ + ldap/admin/src/scripts/Dialog.pm \ + ldap/admin/src/scripts/DSDialogs.pm \ + ldap/admin/src/scripts/Migration.pm \ + ldap/admin/src/scripts/DSMigration.pm \ + ldap/admin/src/scripts/FileConn.pm \ + ldap/admin/src/scripts/DSCreate.pm \ + ldap/admin/src/scripts/DSUpdate.pm \ + ldap/admin/src/scripts/DSUpdateDialogs.pm + +python_DATA = ldap/admin/src/scripts/failedbinds.py \ + ldap/admin/src/scripts/logregex.py + +property_DATA = ldap/admin/src/scripts/setup-ds.res \ + ldap/admin/src/scripts/migrate-ds.res + +task_SCRIPTS = ldap/admin/src/scripts/template-bak2db \ + ldap/admin/src/scripts/template-db2bak \ + ldap/admin/src/scripts/template-db2index \ + ldap/admin/src/scripts/template-db2ldif \ + ldap/admin/src/scripts/template-dn2rdn \ + ldap/admin/src/scripts/template-ldif2db \ + ldap/admin/src/scripts/template-ldif2ldap \ + ldap/admin/src/scripts/template-monitor \ + ldap/admin/src/scripts/template-restart-slapd \ + ldap/admin/src/scripts/template-restoreconfig \ + ldap/admin/src/scripts/template-saveconfig \ + ldap/admin/src/scripts/template-start-slapd \ + ldap/admin/src/scripts/template-stop-slapd \ + ldap/admin/src/scripts/template-suffix2instance \ + ldap/admin/src/scripts/template-upgradednformat \ + ldap/admin/src/scripts/template-vlvindex \ + ldap/admin/src/scripts/template-bak2db.pl \ + ldap/admin/src/scripts/template-db2bak.pl \ + ldap/admin/src/scripts/template-db2index.pl \ + ldap/admin/src/scripts/template-db2ldif.pl \ + ldap/admin/src/scripts/template-fixup-linkedattrs.pl \ + ldap/admin/src/scripts/template-fixup-memberof.pl \ + ldap/admin/src/scripts/template-fixup-memberuid.pl \ + ldap/admin/src/scripts/template-cleanallruv.pl \ + ldap/admin/src/scripts/template-ldif2db.pl \ + ldap/admin/src/scripts/template-ns-accountstatus.pl \ + 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-schema-reload.pl \ + ldap/admin/src/scripts/template-syntax-validate.pl \ + ldap/admin/src/scripts/template-usn-tombstone-cleanup.pl \ + ldap/admin/src/scripts/template-verify-db.pl \ + ldap/admin/src/scripts/template-dbverify + + +# yes, that is an @ in the filename . . . +@SYSTEMD_TRUE@systemdsystemunit_DATA = wrappers/$(PACKAGE_NAME)@.service \ +@SYSTEMD_TRUE@ wrappers/$(systemdgroupname) \ +@SYSTEMD_TRUE@ wrappers/$(PACKAGE_NAME)-snmp.service + +@INITDDIR_TRUE@@SYSTEMD_FALSE@init_SCRIPTS = wrappers/$(PACKAGE_NAME) \ +@INITDDIR_TRUE@@SYSTEMD_FALSE@ wrappers/$(PACKAGE_NAME)-snmp + +@INITDDIR_TRUE@@SYSTEMD_FALSE@initconfig_DATA = ldap/admin/src/$(PACKAGE_NAME) +@SYSTEMD_TRUE@initconfig_DATA = ldap/admin/src/$(PACKAGE_NAME) \ +@SYSTEMD_TRUE@ wrappers/$(PACKAGE_NAME).systemd + +inf_DATA = ldap/admin/src/slapd.inf \ + ldap/admin/src/scripts/dscreate.map \ + ldap/admin/src/scripts/dsupdate.map \ + ldap/admin/src/scripts/dsorgentries.map \ + ldap/admin/src/defaults.inf + +mib_DATA = ldap/servers/snmp/redhat-directory.mib +pkgconfig_DATA = $(PACKAGE_NAME).pc + +#------------------------ +# header files +#------------------------ +serverinc_HEADERS = ldap/servers/plugins/replication/repl-session-plugin.h \ + ldap/servers/slapd/slapi-plugin.h \ + ldap/servers/plugins/replication/winsync-plugin.h + + +#------------------------ +# man pages +#------------------------ +dist_man_MANS = man/man1/dbscan.1 \ + man/man1/cl-dump.1 \ + man/man1/dbgen.pl.1 \ + man/man1/ds-logpipe.py.1 \ + man/man1/dsktune.1 \ + man/man1/infadd.1 \ + man/man1/ldap-agent.1 \ + man/man1/ldclt.1 \ + man/man1/ldif.1 \ + man/man1/logconv.pl.1 \ + man/man1/migratecred.1 \ + man/man1/mmldif.1 \ + man/man1/pwdhash.1 \ + man/man1/repl-monitor.1 \ + man/man1/rsearch.1 \ + man/man1/readnsstate.1 \ + man/man8/migrate-ds.pl.8 \ + man/man8/ns-slapd.8 \ + man/man8/restart-dirsrv.8 \ + man/man8/setup-ds.pl.8 \ + man/man8/start-dirsrv.8 \ + man/man8/stop-dirsrv.8 \ + man/man8/status-dirsrv.8 \ + man/man8/bak2db.8 man/man8/bak2db.pl.8 \ + man/man8/db2bak.8 man/man8/db2bak.pl.8 \ + man/man8/db2ldif.8 man/man8/db2ldif.pl.8 \ + man/man8/db2index.8 man/man8/db2index.pl.8 \ + man/man8/ldif2db.8 man/man8/ldif2db.pl.8 \ + man/man8/dbverify.8 man/man8/verify-db.pl.8 \ + man/man8/dbmon.sh.8 \ + man/man8/dn2rdn.8 man/man8/ldif2ldap.8 \ + man/man8/restoreconfig.8 man/man8/saveconfig.8 \ + man/man8/suffix2instance.8 man/man8/monitor.8 \ + man/man8/upgradednformat.8 man/man8/vlvindex.8 \ + man/man8/cleanallruv.pl.8 man/man8/schema-reload.pl.8 \ + man/man8/fixup-linkedattrs.pl.8 man/man8/fixup-memberof.pl.8 \ + man/man8/syntax-validate.pl.8 man/man8/usn-tombstone-cleanup.pl.8 \ + man/man8/ns-accountstatus.pl.8 man/man8/ns-newpwpolicy.pl.8 \ + man/man8/ns-activate.pl.8 man/man8/ns-inactivate.pl.8 \ + man/man8/upgradedb.8 man/man8/remove-ds.pl.8 + + +#------------------------ +# updates +# the first 3 are just the examples provided - since they +# do not begin with two digits, they will be ignored +# the remaining items should begin with two digits that +# correspond to the order in which they should be applied +# perl files and LDIF files are DATA - not executable +# processed by the update script +# shell scripts and other files are SCRIPTS - executable +#------------------------ +update_DATA = ldap/admin/src/scripts/exampleupdate.pl \ + ldap/admin/src/scripts/exampleupdate.ldif \ + ldap/admin/src/scripts/10cleanupldapi.pl \ + ldap/admin/src/scripts/10delautodnsuffix.pl \ + ldap/admin/src/scripts/10fixrundir.pl \ + ldap/admin/src/scripts/20betxn.pl \ + ldap/admin/src/scripts/50addchainingsaslpwroles.ldif \ + ldap/admin/src/scripts/50acctusabilityplugin.ldif \ + ldap/admin/src/scripts/50automemberplugin.ldif \ + ldap/admin/src/scripts/50memberofindex.ldif \ + ldap/admin/src/scripts/50nstombstonecsn.ldif \ + ldap/admin/src/scripts/50bitstringsyntaxplugin.ldif \ + ldap/admin/src/scripts/50managedentriesplugin.ldif \ + ldap/admin/src/scripts/50memberofplugin.ldif \ + ldap/admin/src/scripts/50deliverymethodsyntaxplugin.ldif \ + ldap/admin/src/scripts/50nameuidsyntaxplugin.ldif \ + ldap/admin/src/scripts/50derefplugin.ldif \ + ldap/admin/src/scripts/50numericstringsyntaxplugin.ldif \ + ldap/admin/src/scripts/50disableurisyntaxplugin.ldif \ + ldap/admin/src/scripts/50printablestringsyntaxplugin.ldif \ + ldap/admin/src/scripts/50enhancedguidesyntaxplugin.ldif \ + ldap/admin/src/scripts/50schemareloadplugin.ldif \ + ldap/admin/src/scripts/50entryusnindex.ldif \ + ldap/admin/src/scripts/50syntaxvalidplugin.ldif \ + ldap/admin/src/scripts/50faxnumbersyntaxplugin.ldif \ + ldap/admin/src/scripts/50teletexterminalidsyntaxplugin.ldif \ + ldap/admin/src/scripts/50faxsyntaxplugin.ldif \ + ldap/admin/src/scripts/50fixNsState.pl \ + ldap/admin/src/scripts/50telexnumbersyntaxplugin.ldif \ + ldap/admin/src/scripts/50guidesyntaxplugin.ldif \ + ldap/admin/src/scripts/50targetuniqueid.ldif \ + ldap/ldif/50replication-plugins.ldif \ + ldap/admin/src/scripts/50linkedattrsplugin.ldif \ + $(POSIX_WINSYNC_PLUGIN_LDIF) \ + ldap/admin/src/scripts/50usnplugin.ldif \ + ldap/admin/src/scripts/50smd5pwdstorageplugin.ldif \ + ldap/admin/src/scripts/50refintprecedence.ldif \ + ldap/admin/src/scripts/50retroclprecedence.ldif \ + ldap/admin/src/scripts/50rootdnaccesscontrolplugin.ldif \ + ldap/admin/src/scripts/50contentsync.ldif \ + ldap/admin/src/scripts/60upgradeschemafiles.pl \ + ldap/admin/src/scripts/60upgradeconfigfiles.pl \ + ldap/admin/src/scripts/70upgradefromldif.pl \ + ldap/admin/src/scripts/80upgradednformat.pl \ + ldap/admin/src/scripts/81changelog.pl \ + ldap/admin/src/scripts/82targetuniqueidindex.pl \ + ldap/admin/src/scripts/90subtreerename.pl \ + ldap/admin/src/scripts/91subtreereindex.pl \ + ldap/admin/src/scripts/50AES-pbe-plugin.ldif\ + ldap/admin/src/scripts/50updateconfig.ldif \ + ldap/admin/src/scripts/52updateAESplugin.pl \ + ldap/admin/src/scripts/dnaplugindepends.ldif \ + ldap/admin/src/scripts/91reindex.pl + +update_SCRIPTS = ldap/admin/src/scripts/exampleupdate.sh + +#//////////////////////////////////////////////////////////////// +# +# Server Strings +# +#//////////////////////////////////////////////////////////////// +#------------------------ +# makstrdb +#------------------------ +makstrdb_SOURCES = lib/libsi18n/makstrdb.c +makstrdb_CPPFLAGS = $(AM_CPPFLAGS) @nspr_inc@ + +#//////////////////////////////////////////////////////////////// +# +# Static Server Libraries +# +#//////////////////////////////////////////////////////////////// +#------------------------ +# libavl +#------------------------ +libavl_a_SOURCES = ldap/libraries/libavl/avl.c + +#------------------------ +# libldaputil +#------------------------ +libldaputil_a_SOURCES = lib/ldaputil/cert.c \ + lib/ldaputil/certmap.c \ + lib/ldaputil/dbconf.c \ + lib/ldaputil/encode.c \ + lib/ldaputil/errors.c \ + lib/ldaputil/init.c \ + lib/ldaputil/ldapauth.c \ + lib/ldaputil/vtable.c + +libldaputil_a_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/lib/ldaputil @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ + +#//////////////////////////////////////////////////////////////// +# +# Dynamic Server Libraries +# +#//////////////////////////////////////////////////////////////// + +#------------------------ +# libns-dshttpd +#------------------------ +libns_dshttpd_la_SOURCES = lib/libaccess/access_plhash.cpp \ + lib/libaccess/acl.tab.cpp \ + lib/libaccess/acl.yy.cpp \ + lib/libaccess/aclcache.cpp \ + lib/libaccess/aclerror.cpp \ + lib/libaccess/acleval.cpp \ + lib/libaccess/aclflush.cpp \ + lib/libaccess/aclspace.cpp \ + lib/libaccess/acltools.cpp \ + lib/libaccess/aclutil.cpp \ + lib/libaccess/authdb.cpp \ + lib/libaccess/lasdns.cpp \ + lib/libaccess/lasgroup.cpp \ + lib/libaccess/lasip.cpp \ + lib/libaccess/lastod.cpp \ + lib/libaccess/lasuser.cpp \ + lib/libaccess/method.cpp \ + lib/libaccess/nseframe.cpp \ + lib/libaccess/nsautherr.cpp \ + lib/libaccess/oneeval.cpp \ + lib/libaccess/register.cpp \ + lib/libaccess/symbols.cpp \ + lib/libaccess/usi.cpp \ + lib/libaccess/usrcache.cpp \ + lib/libadmin/error.c \ + lib/libadmin/template.c \ + lib/libadmin/util.c \ + lib/base/crit.cpp \ + lib/base/dns.cpp \ + lib/base/dnsdmain.cpp \ + lib/base/ereport.cpp \ + lib/base/file.cpp \ + lib/base/fsmutex.cpp \ + lib/base/net.cpp \ + lib/base/nscperror.c \ + lib/base/plist.cpp \ + lib/base/pool.cpp \ + lib/base/shexp.cpp \ + lib/base/system.cpp \ + lib/base/systhr.cpp \ + lib/base/util.cpp \ + lib/libsi18n/getstrprop.c \ + lib/libsi18n/reshash.c \ + lib/libsi18n/txtfile.c \ + $(libldaputil_a_SOURCES) + +libns_dshttpd_la_CPPFLAGS = -I$(srcdir)/include/base $(AM_CPPFLAGS) -I$(srcdir)/lib/ldaputil @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +libns_dshttpd_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(SASL_LINK) $(NSS_LINK) $(NSPR_LINK) + +#------------------------ +# libslapd +#------------------------ +libslapd_la_SOURCES = ldap/servers/slapd/add.c \ + ldap/servers/slapd/agtmmap.c ldap/servers/slapd/apibroker.c \ + ldap/servers/slapd/attr.c ldap/servers/slapd/attrlist.c \ + ldap/servers/slapd/attrsyntax.c ldap/servers/slapd/auditlog.c \ + ldap/servers/slapd/ava.c ldap/servers/slapd/backend.c \ + ldap/servers/slapd/backend_manager.c \ + ldap/servers/slapd/bitset.c ldap/servers/slapd/bulk_import.c \ + ldap/servers/slapd/charray.c ldap/servers/slapd/ch_malloc.c \ + ldap/servers/slapd/computed.c ldap/servers/slapd/control.c \ + ldap/servers/slapd/counters.c ldap/servers/slapd/csn.c \ + ldap/servers/slapd/csngen.c ldap/servers/slapd/csnset.c \ + ldap/servers/slapd/defbackend.c ldap/servers/slapd/delete.c \ + ldap/servers/slapd/dl.c ldap/servers/slapd/dn.c \ + ldap/servers/slapd/dse.c ldap/servers/slapd/dynalib.c \ + ldap/servers/slapd/entry.c ldap/servers/slapd/entrywsi.c \ + ldap/servers/slapd/errormap.c ldap/servers/slapd/eventq.c \ + ldap/servers/slapd/factory.c ldap/servers/slapd/features.c \ + ldap/servers/slapd/fileio.c ldap/servers/slapd/filter.c \ + ldap/servers/slapd/filtercmp.c \ + ldap/servers/slapd/filterentry.c \ + ldap/servers/slapd/generation.c \ + ldap/servers/slapd/getfilelist.c \ + ldap/servers/slapd/index_subsystem.c \ + ldap/servers/slapd/ldaputil.c ldap/servers/slapd/lenstr.c \ + ldap/servers/slapd/libglobs.c ldap/servers/slapd/localhost.c \ + ldap/servers/slapd/log.c ldap/servers/slapd/mapping_tree.c \ + ldap/servers/slapd/match.c ldap/servers/slapd/modify.c \ + ldap/servers/slapd/modrdn.c ldap/servers/slapd/modutil.c \ + ldap/servers/slapd/object.c ldap/servers/slapd/objset.c \ + ldap/servers/slapd/operation.c ldap/servers/slapd/opshared.c \ + ldap/servers/slapd/pagedresults.c ldap/servers/slapd/pblock.c \ + ldap/servers/slapd/plugin.c ldap/servers/slapd/plugin_acl.c \ + ldap/servers/slapd/plugin_internal_op.c \ + ldap/servers/slapd/plugin_mr.c \ + ldap/servers/slapd/plugin_role.c \ + ldap/servers/slapd/plugin_syntax.c \ + ldap/servers/slapd/protect_db.c ldap/servers/slapd/proxyauth.c \ + ldap/servers/slapd/pw.c ldap/servers/slapd/pw_retry.c \ + ldap/servers/slapd/rdn.c ldap/servers/slapd/referral.c \ + ldap/servers/slapd/regex.c ldap/servers/slapd/resourcelimit.c \ + ldap/servers/slapd/result.c ldap/servers/slapd/sasl_map.c \ + ldap/servers/slapd/schema.c ldap/servers/slapd/schemaparse.c \ + ldap/servers/slapd/security_wrappers.c \ + ldap/servers/slapd/slapd_plhash.c \ + ldap/servers/slapd/slapi_counter.c \ + ldap/servers/slapd/slapi2nspr.c \ + ldap/servers/slapd/snmp_collator.c ldap/servers/slapd/sort.c \ + ldap/servers/slapd/ssl.c ldap/servers/slapd/str2filter.c \ + ldap/servers/slapd/subentry.c ldap/servers/slapd/task.c \ + ldap/servers/slapd/time.c ldap/servers/slapd/thread_data.c \ + ldap/servers/slapd/uniqueid.c ldap/servers/slapd/uniqueidgen.c \ + ldap/servers/slapd/utf8.c ldap/servers/slapd/utf8compare.c \ + ldap/servers/slapd/util.c ldap/servers/slapd/uuid.c \ + ldap/servers/slapd/value.c ldap/servers/slapd/valueset.c \ + ldap/servers/slapd/vattr.c $(libavl_a_SOURCES) $(am__append_1) +libslapd_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) @sasl_inc@ @db_inc@ @svrcore_inc@ @kerberos_inc@ @pcre_inc@ +libslapd_la_LIBADD = $(LDAPSDK_LINK) $(SASL_LINK) $(NUNC_STANS_LINK) $(SVRCORE_LINK) $(NSS_LINK) $(NSPR_LINK) $(KERBEROS_LINK) $(PCRE_LINK) $(THREADLIB) $(SYSTEMD_LINK) + +#//////////////////////////////////////////////////////////////// +# +# Plugins +# +#//////////////////////////////////////////////////////////////// +#------------------------ +# libback-ldbm +#------------------------ +libback_ldbm_la_SOURCES = ldap/servers/slapd/back-ldbm/ancestorid.c \ + ldap/servers/slapd/back-ldbm/archive.c \ + ldap/servers/slapd/back-ldbm/backentry.c \ + ldap/servers/slapd/back-ldbm/cache.c \ + ldap/servers/slapd/back-ldbm/cleanup.c \ + ldap/servers/slapd/back-ldbm/close.c \ + ldap/servers/slapd/back-ldbm/dbhelp.c \ + ldap/servers/slapd/back-ldbm/dblayer.c \ + ldap/servers/slapd/back-ldbm/dbsize.c \ + ldap/servers/slapd/back-ldbm/dbversion.c \ + ldap/servers/slapd/back-ldbm/dn2entry.c \ + ldap/servers/slapd/back-ldbm/entrystore.c \ + ldap/servers/slapd/back-ldbm/filterindex.c \ + ldap/servers/slapd/back-ldbm/findentry.c \ + ldap/servers/slapd/back-ldbm/haschildren.c \ + ldap/servers/slapd/back-ldbm/id2entry.c \ + ldap/servers/slapd/back-ldbm/idl.c \ + ldap/servers/slapd/back-ldbm/idl_shim.c \ + ldap/servers/slapd/back-ldbm/idl_new.c \ + ldap/servers/slapd/back-ldbm/idl_common.c \ + ldap/servers/slapd/back-ldbm/import.c \ + ldap/servers/slapd/back-ldbm/import-merge.c \ + ldap/servers/slapd/back-ldbm/import-threads.c \ + ldap/servers/slapd/back-ldbm/index.c \ + ldap/servers/slapd/back-ldbm/init.c \ + ldap/servers/slapd/back-ldbm/instance.c \ + ldap/servers/slapd/back-ldbm/ldbm_abandon.c \ + ldap/servers/slapd/back-ldbm/ldbm_add.c \ + ldap/servers/slapd/back-ldbm/ldbm_attr.c \ + ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c \ + ldap/servers/slapd/back-ldbm/ldbm_attrcrypt_config.c \ + ldap/servers/slapd/back-ldbm/ldbm_bind.c \ + ldap/servers/slapd/back-ldbm/ldbm_compare.c \ + ldap/servers/slapd/back-ldbm/ldbm_config.c \ + ldap/servers/slapd/back-ldbm/ldbm_delete.c \ + ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c \ + ldap/servers/slapd/back-ldbm/ldbm_index_config.c \ + ldap/servers/slapd/back-ldbm/ldbm_instance_config.c \ + ldap/servers/slapd/back-ldbm/ldbm_modify.c \ + ldap/servers/slapd/back-ldbm/ldbm_modrdn.c \ + ldap/servers/slapd/back-ldbm/ldbm_search.c \ + ldap/servers/slapd/back-ldbm/ldbm_unbind.c \ + ldap/servers/slapd/back-ldbm/ldbm_usn.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 \ + ldap/servers/slapd/back-ldbm/nextid.c \ + ldap/servers/slapd/back-ldbm/parents.c \ + ldap/servers/slapd/back-ldbm/perfctrs.c \ + ldap/servers/slapd/back-ldbm/rmdb.c \ + ldap/servers/slapd/back-ldbm/seq.c \ + ldap/servers/slapd/back-ldbm/sort.c \ + ldap/servers/slapd/back-ldbm/start.c \ + ldap/servers/slapd/back-ldbm/uniqueid2entry.c \ + ldap/servers/slapd/back-ldbm/upgrade.c \ + ldap/servers/slapd/back-ldbm/vlv.c \ + ldap/servers/slapd/back-ldbm/vlv_key.c \ + ldap/servers/slapd/back-ldbm/vlv_srch.c + +libback_ldbm_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) @db_inc@ +libback_ldbm_la_LIBADD = libslapd.la $(DB_LINK) $(LDAPSDK_LINK) $(NSPR_LINK) +libback_ldbm_la_LDFLAGS = -avoid-version + +#------------------------ +# libacctpolicy-plugin +#------------------------ +libacctpolicy_plugin_la_SOURCES = ldap/servers/plugins/acctpolicy/acct_config.c \ + ldap/servers/plugins/acctpolicy/acct_init.c \ + ldap/servers/plugins/acctpolicy/acct_plugin.c \ + ldap/servers/plugins/acctpolicy/acct_util.c + +libacctpolicy_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libacctpolicy_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libacctpolicy_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libacctusability-plugin +#------------------------ +libacctusability_plugin_la_SOURCES = ldap/servers/plugins/acct_usability/acct_usability.c +libacctusability_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libacctusability_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libacctusability_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libacl-plugin +#------------------------ +libacl_plugin_la_SOURCES = ldap/servers/plugins/acl/acl.c \ + ldap/servers/plugins/acl/acl_ext.c \ + ldap/servers/plugins/acl/aclanom.c \ + ldap/servers/plugins/acl/acleffectiverights.c \ + ldap/servers/plugins/acl/aclgroup.c \ + ldap/servers/plugins/acl/aclinit.c \ + ldap/servers/plugins/acl/acllas.c \ + ldap/servers/plugins/acl/acllist.c \ + ldap/servers/plugins/acl/aclparse.c \ + ldap/servers/plugins/acl/aclplugin.c \ + ldap/servers/plugins/acl/aclutil.c + +libacl_plugin_la_CPPFLAGS = -I$(srcdir)/include/libaccess $(PLUGIN_CPPFLAGS) +libacl_plugin_la_LIBADD = libslapd.la libns-dshttpd.la $(LDAPSDK_LINK) $(NSPR_LINK) $(LIBCSTD) $(LIBCRUN) +libacl_plugin_la_LDFLAGS = -avoid-version +libacl_plugin_la_LINK = $(CXXLINK) -avoid-version + +#------------------------ +# librootdn-access-plugin +#------------------------ +# +librootdn_access_plugin_la_SOURCES = ldap/servers/plugins/rootdn_access/rootdn_access.c +librootdn_access_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +librootdn_access_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +librootdn_access_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libautomember-plugin +#------------------------ +libautomember_plugin_la_SOURCES = ldap/servers/plugins/automember/automember.c +libautomember_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libautomember_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libautomember_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libattr-unique-plugin +#------------------------ +libattr_unique_plugin_la_SOURCES = ldap/servers/plugins/uiduniq/7bit.c \ + ldap/servers/plugins/uiduniq/uid.c \ + ldap/servers/plugins/uiduniq/utils.c + +libattr_unique_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libattr_unique_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libattr_unique_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libbitwise-plugin +#------------------------ +libbitwise_plugin_la_SOURCES = ldap/servers/plugins/bitwise/bitwise.c +libbitwise_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libbitwise_plugin_la_LIBADD = libslapd.la +libbitwise_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libchainingdb-plugin +#------------------------ +libchainingdb_plugin_la_SOURCES = ldap/servers/plugins/chainingdb/cb_abandon.c \ + ldap/servers/plugins/chainingdb/cb_acl.c \ + ldap/servers/plugins/chainingdb/cb_add.c \ + ldap/servers/plugins/chainingdb/cb_bind.c \ + ldap/servers/plugins/chainingdb/cb_cleanup.c \ + ldap/servers/plugins/chainingdb/cb_close.c \ + ldap/servers/plugins/chainingdb/cb_compare.c \ + ldap/servers/plugins/chainingdb/cb_config.c \ + ldap/servers/plugins/chainingdb/cb_conn_stateless.c \ + ldap/servers/plugins/chainingdb/cb_controls.c \ + ldap/servers/plugins/chainingdb/cb_debug.c \ + ldap/servers/plugins/chainingdb/cb_delete.c \ + ldap/servers/plugins/chainingdb/cb_init.c \ + ldap/servers/plugins/chainingdb/cb_instance.c \ + ldap/servers/plugins/chainingdb/cb_modify.c \ + ldap/servers/plugins/chainingdb/cb_modrdn.c \ + ldap/servers/plugins/chainingdb/cb_monitor.c \ + ldap/servers/plugins/chainingdb/cb_schema.c \ + ldap/servers/plugins/chainingdb/cb_search.c \ + ldap/servers/plugins/chainingdb/cb_size.c \ + ldap/servers/plugins/chainingdb/cb_start.c \ + ldap/servers/plugins/chainingdb/cb_temp.c \ + ldap/servers/plugins/chainingdb/cb_test.c \ + ldap/servers/plugins/chainingdb/cb_unbind.c \ + ldap/servers/plugins/chainingdb/cb_utils.c + +libchainingdb_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libchainingdb_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libchainingdb_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libcollation-plugin +#------------------------ +libcollation_plugin_la_SOURCES = ldap/servers/plugins/collation/collate.c \ + ldap/servers/plugins/collation/config.c \ + ldap/servers/plugins/collation/orfilter.c + +libcollation_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) @icu_inc@ +libcollation_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) $(ICU_LINK) $(LIBCSTD) $(LIBCRUN) +libcollation_plugin_la_LDFLAGS = -avoid-version +libcollation_plugin_la_LINK = $(CXXLINK) -avoid-version + +#------------------------ +# libcos-plugin +#------------------------ +libcos_plugin_la_SOURCES = ldap/servers/plugins/cos/cos.c \ + ldap/servers/plugins/cos/cos_cache.c + +libcos_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libcos_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libcos_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libderef-plugin +#----------------------- +libderef_plugin_la_SOURCES = ldap/servers/plugins/deref/deref.c +libderef_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libderef_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libderef_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libpbe-plugin +#----------------------- +libpbe_plugin_la_SOURCES = ldap/servers/plugins/rever/pbe.c \ + ldap/servers/plugins/rever/rever.c + +libpbe_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) @svrcore_inc@ +libpbe_plugin_la_LIBADD = libslapd.la $(NSS_LINK) +libpbe_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libdistrib-plugin +#------------------------ +libdistrib_plugin_la_SOURCES = ldap/servers/plugins/distrib/distrib.c +libdistrib_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libdistrib_plugin_la_LIBADD = libslapd.la +libdistrib_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libdna-plugin +#------------------------ +libdna_plugin_la_SOURCES = ldap/servers/plugins/dna/dna.c +libdna_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libdna_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libdna_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libhttp-client-plugin +#------------------------ +libhttp_client_plugin_la_SOURCES = ldap/servers/plugins/http/http_client.c \ + ldap/servers/plugins/http/http_impl.c + +libhttp_client_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libhttp_client_plugin_la_LIBADD = libslapd.la $(NSS_LINK) $(NSPR_LINK) +libhttp_client_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# liblinkedattrs-plugin +#------------------------ +liblinkedattrs_plugin_la_SOURCES = ldap/servers/plugins/linkedattrs/fixup_task.c \ + ldap/servers/plugins/linkedattrs/linked_attrs.c + +liblinkedattrs_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +liblinkedattrs_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +liblinkedattrs_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libmanagedentries-plugin +#------------------------ +libmanagedentries_plugin_la_SOURCES = ldap/servers/plugins/mep/mep.c +libmanagedentries_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libmanagedentries_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libmanagedentries_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libmemberof-plugin +#------------------------ +libmemberof_plugin_la_SOURCES = ldap/servers/plugins/memberof/memberof.c \ + ldap/servers/plugins/memberof/memberof_config.c + +libmemberof_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libmemberof_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libmemberof_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libpam-passthru-plugin +#------------------------ +libpam_passthru_plugin_la_SOURCES = ldap/servers/plugins/pam_passthru/pam_ptconfig.c \ + ldap/servers/plugins/pam_passthru/pam_ptdebug.c \ + ldap/servers/plugins/pam_passthru/pam_ptimpl.c \ + ldap/servers/plugins/pam_passthru/pam_ptpreop.c + +libpam_passthru_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libpam_passthru_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) $(PAM_LINK) +libpam_passthru_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libpassthru-plugin +#------------------------ +libpassthru_plugin_la_SOURCES = ldap/servers/plugins/passthru/ptbind.c \ + ldap/servers/plugins/passthru/ptconfig.c \ + ldap/servers/plugins/passthru/ptconn.c \ + ldap/servers/plugins/passthru/ptdebug.c \ + ldap/servers/plugins/passthru/ptpreop.c \ + ldap/servers/plugins/passthru/ptutil.c + +libpassthru_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libpassthru_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libpassthru_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libposix-winsync-plugin +#------------------------ +libposix_winsync_plugin_la_SOURCES = ldap/servers/plugins/posix-winsync/posix-winsync.c \ + ldap/servers/plugins/posix-winsync/posix-group-func.c \ + ldap/servers/plugins/posix-winsync/posix-group-task.c \ + ldap/servers/plugins/posix-winsync/posix-winsync-config.c + +libposix_winsync_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) -DWINSYNC_TEST_POSIX \ + -I$(srcdir)/ldap/servers/plugins/replication + +libposix_winsync_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libposix_winsync_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libpresence-plugin +#------------------------ +libpresence_plugin_la_SOURCES = ldap/servers/plugins/presence/presence.c +libpresence_plugin_la_CPPFLAGS = -I$(srcdir)/ldap/servers/plugins/http $(PLUGIN_CPPFLAGS) +libpresence_plugin_la_LIBADD = libslapd.la +libpresence_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libpwdstorage-plugin +#------------------------ +libpwdstorage_plugin_la_SOURCES = ldap/servers/plugins/pwdstorage/clear_pwd.c \ + ldap/servers/plugins/pwdstorage/crypt_pwd.c \ + ldap/servers/plugins/pwdstorage/md5_pwd.c \ + ldap/servers/plugins/pwdstorage/md5c.c \ + ldap/servers/plugins/pwdstorage/ns-mta-md5_pwd.c \ + ldap/servers/plugins/pwdstorage/pwd_init.c \ + ldap/servers/plugins/pwdstorage/pwd_util.c \ + ldap/servers/plugins/pwdstorage/sha_pwd.c \ + ldap/servers/plugins/pwdstorage/smd5_pwd.c \ + ldap/servers/plugins/pwdstorage/ssha_pwd.c + +libpwdstorage_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libpwdstorage_plugin_la_LIBADD = libslapd.la $(NSS_LINK) $(NSPR_LINK) $(LIBCRYPT) +libpwdstorage_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libcontentsync-plugin +#------------------------ +libcontentsync_plugin_la_SOURCES = ldap/servers/plugins/sync/sync_init.c \ + ldap/servers/plugins/sync/sync_util.c \ + ldap/servers/plugins/sync/sync_refresh.c \ + ldap/servers/plugins/sync/sync_persist.c + +libcontentsync_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libcontentsync_plugin_la_LIBADD = libslapd.la $(NSS_LINK) $(NSPR_LINK) $(LIBCRYPT) +libcontentsync_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libreferint-plugin +#------------------------ +libreferint_plugin_la_SOURCES = ldap/servers/plugins/referint/referint.c +libreferint_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libreferint_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libreferint_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libreplication-plugin +#------------------------ +libreplication_plugin_la_SOURCES = ldap/servers/plugins/replication/cl5_api.c \ + ldap/servers/plugins/replication/cl5_clcache.c \ + ldap/servers/plugins/replication/cl5_config.c \ + ldap/servers/plugins/replication/cl5_init.c \ + ldap/servers/plugins/replication/cl_crypt.c \ + ldap/servers/plugins/replication/csnpl.c \ + ldap/servers/plugins/replication/legacy_consumer.c \ + ldap/servers/plugins/replication/llist.c \ + ldap/servers/plugins/replication/repl_add.c \ + ldap/servers/plugins/replication/repl_bind.c \ + ldap/servers/plugins/replication/repl_compare.c \ + ldap/servers/plugins/replication/repl_connext.c \ + ldap/servers/plugins/replication/repl_controls.c \ + ldap/servers/plugins/replication/repl_delete.c \ + ldap/servers/plugins/replication/repl_entry.c \ + ldap/servers/plugins/replication/repl_ext.c \ + ldap/servers/plugins/replication/repl_extop.c \ + ldap/servers/plugins/replication/repl_globals.c \ + ldap/servers/plugins/replication/repl_init.c \ + ldap/servers/plugins/replication/repl_modify.c \ + ldap/servers/plugins/replication/repl_modrdn.c \ + ldap/servers/plugins/replication/repl_monitor.c \ + ldap/servers/plugins/replication/repl_objset.c \ + ldap/servers/plugins/replication/repl_opext.c \ + ldap/servers/plugins/replication/repl_ops.c \ + ldap/servers/plugins/replication/repl_rootdse.c \ + ldap/servers/plugins/replication/repl_search.c \ + ldap/servers/plugins/replication/repl_session_plugin.c \ + ldap/servers/plugins/replication/repl5_agmt.c \ + ldap/servers/plugins/replication/repl5_agmtlist.c \ + ldap/servers/plugins/replication/repl5_backoff.c \ + ldap/servers/plugins/replication/repl5_connection.c \ + ldap/servers/plugins/replication/repl5_inc_protocol.c \ + ldap/servers/plugins/replication/repl5_init.c \ + ldap/servers/plugins/replication/repl5_mtnode_ext.c \ + ldap/servers/plugins/replication/repl5_plugins.c \ + ldap/servers/plugins/replication/repl5_protocol.c \ + ldap/servers/plugins/replication/repl5_protocol_util.c \ + ldap/servers/plugins/replication/repl5_replica.c \ + ldap/servers/plugins/replication/repl5_replica_config.c \ + ldap/servers/plugins/replication/repl5_replica_dnhash.c \ + ldap/servers/plugins/replication/repl5_replica_hash.c \ + ldap/servers/plugins/replication/repl5_ruv.c \ + ldap/servers/plugins/replication/repl5_schedule.c \ + ldap/servers/plugins/replication/repl5_tot_protocol.c \ + ldap/servers/plugins/replication/repl5_total.c \ + ldap/servers/plugins/replication/repl5_updatedn_list.c \ + ldap/servers/plugins/replication/replutil.c \ + ldap/servers/plugins/replication/urp.c \ + ldap/servers/plugins/replication/urp_glue.c \ + ldap/servers/plugins/replication/urp_tombstone.c \ + ldap/servers/plugins/replication/windows_connection.c \ + ldap/servers/plugins/replication/windows_inc_protocol.c \ + ldap/servers/plugins/replication/windows_private.c \ + ldap/servers/plugins/replication/windows_protocol_util.c \ + ldap/servers/plugins/replication/windows_tot_protocol.c + +libreplication_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) @icu_inc@ @db_inc@ +libreplication_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSS_LINK) $(NSPR_LINK) $(ICU_LINK) $(DB_LINK) +libreplication_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libretrocl-plugin +#------------------------ +libretrocl_plugin_la_SOURCES = ldap/servers/plugins/retrocl/retrocl.c \ + ldap/servers/plugins/retrocl/retrocl_cn.c \ + ldap/servers/plugins/retrocl/retrocl_create.c \ + ldap/servers/plugins/retrocl/retrocl_po.c \ + ldap/servers/plugins/retrocl/retrocl_rootdse.c \ + ldap/servers/plugins/retrocl/retrocl_trim.c + +libretrocl_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libretrocl_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libretrocl_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libroles-plugin +#------------------------ +libroles_plugin_la_SOURCES = ldap/servers/plugins/roles/roles_cache.c \ + ldap/servers/plugins/roles/roles_plugin.c + +libroles_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libroles_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libroles_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libschemareload-plugin +#------------------------ +libschemareload_plugin_la_SOURCES = ldap/servers/plugins/schema_reload/schema_reload.c +libschemareload_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libschemareload_plugin_la_LIBADD = libslapd.la $(NSPR_LINK) +libschemareload_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libstatechange-plugin +#------------------------ +libstatechange_plugin_la_SOURCES = ldap/servers/plugins/statechange/statechange.c +libstatechange_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libstatechange_plugin_la_LIBADD = libslapd.la +libstatechange_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libsyntax-plugin +#------------------------ +libsyntax_plugin_la_SOURCES = ldap/servers/plugins/syntaxes/bin.c \ + ldap/servers/plugins/syntaxes/bitstring.c \ + ldap/servers/plugins/syntaxes/ces.c \ + ldap/servers/plugins/syntaxes/cis.c \ + ldap/servers/plugins/syntaxes/debug.c \ + ldap/servers/plugins/syntaxes/dn.c \ + ldap/servers/plugins/syntaxes/deliverymethod.c \ + ldap/servers/plugins/syntaxes/facsimile.c \ + ldap/servers/plugins/syntaxes/guide.c \ + ldap/servers/plugins/syntaxes/int.c \ + ldap/servers/plugins/syntaxes/nameoptuid.c \ + ldap/servers/plugins/syntaxes/numericstring.c \ + ldap/servers/plugins/syntaxes/phonetic.c \ + ldap/servers/plugins/syntaxes/sicis.c \ + ldap/servers/plugins/syntaxes/string.c \ + ldap/servers/plugins/syntaxes/syntax_common.c \ + ldap/servers/plugins/syntaxes/tel.c \ + ldap/servers/plugins/syntaxes/telex.c \ + ldap/servers/plugins/syntaxes/teletex.c \ + ldap/servers/plugins/syntaxes/validate.c \ + ldap/servers/plugins/syntaxes/validate_task.c \ + ldap/servers/plugins/syntaxes/value.c + +libsyntax_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libsyntax_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libsyntax_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libusn-plugin +#------------------------ +libusn_plugin_la_SOURCES = ldap/servers/plugins/usn/usn.c \ + ldap/servers/plugins/usn/usn_cleanup.c + +libusn_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libusn_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libusn_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libviews-plugin +#------------------------ +libviews_plugin_la_SOURCES = ldap/servers/plugins/views/views.c +libviews_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libviews_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libviews_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +# libwhoami-plugin +#------------------------ +libwhoami_plugin_la_SOURCES = ldap/servers/plugins/whoami/whoami.c +libwhoami_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) +libwhoami_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK) +libwhoami_plugin_la_LDFLAGS = -avoid-version + +#------------------------ +#//////////////////////////////////////////////////////////////// +# +# Programs +# +#//////////////////////////////////////////////////////////////// +#------------------------ +# dbscan +#------------------------ +dbscan_bin_SOURCES = ldap/servers/slapd/tools/dbscan.c +dbscan_bin_CPPFLAGS = @db_inc@ @nspr_inc@ $(AM_CPPFLAGS) +dbscan_bin_LDADD = $(NSPR_LINK) $(DB_LINK) + +#------------------------ +# dsktune +#------------------------ +dsktune_bin_SOURCES = ldap/systools/idsktune.c \ + ldap/systools/pio.c + + +#------------------------ +# infadd +#------------------------ +infadd_bin_SOURCES = ldap/servers/slapd/tools/rsearch/addthread.c \ + ldap/servers/slapd/tools/rsearch/infadd.c \ + ldap/servers/slapd/tools/rsearch/nametable.c + +infadd_bin_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +infadd_bin_LDADD = $(NSPR_LINK) $(NSS_LINK) $(LDAPSDK_LINK) $(SASL_LINK) $(LIBSOCKET) + +#------------------------ +# ldap-agent +#------------------------ +ldap_agent_bin_SOURCES = ldap/servers/snmp/main.c \ + ldap/servers/snmp/ldap-agent.c \ + ldap/servers/slapd/agtmmap.c + +ldap_agent_bin_CPPFLAGS = $(AM_CPPFLAGS) @netsnmp_inc@ @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +ldap_agent_bin_LDADD = $(LDAPSDK_LINK_NOTHR) $(SASL_LINK) $(NSS_LINK) \ + $(NSPR_LINK) $(NETSNMP_LINK) $(THREADLIB) $(am__append_2) + +#------------------------ +# ldclt +#------------------------ +ldclt_bin_SOURCES = ldap/servers/slapd/tools/ldaptool-sasl.c \ + ldap/servers/slapd/tools/ldclt/data.c \ + ldap/servers/slapd/tools/ldclt/ldapfct.c \ + ldap/servers/slapd/tools/ldclt/ldclt.c \ + ldap/servers/slapd/tools/ldclt/ldcltU.c \ + ldap/servers/slapd/tools/ldclt/parser.c \ + ldap/servers/slapd/tools/ldclt/port.c \ + ldap/servers/slapd/tools/ldclt/scalab01.c \ + ldap/servers/slapd/tools/ldclt/threadMain.c \ + ldap/servers/slapd/tools/ldclt/utils.c \ + ldap/servers/slapd/tools/ldclt/version.c \ + ldap/servers/slapd/tools/ldclt/workarounds.c $(am__append_3) +ldclt_bin_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/ldap/servers/slapd/tools @openldap_inc@ @ldapsdk_inc@ @sasl_inc@ @nss_inc@ @nspr_inc@ +ldclt_bin_LDADD = $(NSPR_LINK) $(NSS_LINK) $(LDAPSDK_LINK) $(SASL_LINK) $(LIBNSL) $(LIBSOCKET) $(LIBDL) $(THREADLIB) + +#------------------------ +# ldif +#------------------------ +ldif_bin_SOURCES = ldap/servers/slapd/tools/ldif.c +ldif_bin_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +ldif_bin_LDADD = $(NSPR_LINK) $(NSS_LINK) $(LDAPSDK_LINK_NOTHR) $(SASL_LINK) + +#------------------------ +# migratecred +#------------------------ +migratecred_bin_SOURCES = ldap/servers/slapd/tools/migratecred.c +migratecred_bin_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +migratecred_bin_LDADD = libslapd.la $(NSPR_LINK) $(NSS_LINK) $(SVRCORE_LINK) $(LDAPSDK_LINK) $(SASL_LINK) + +#------------------------ +# mmldif +#------------------------ +mmldif_bin_SOURCES = ldap/servers/slapd/tools/mmldif.c +mmldif_bin_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +mmldif_bin_LDADD = libslapd.la $(NSPR_LINK) $(NSS_LINK) $(SVRCORE_LINK) $(LDAPSDK_LINK_NOTHR) $(SASL_LINK) + +#------------------------ +# ns-slapd +#------------------------ +@enable_ldapi_TRUE@GETSOCKETPEER = ldap/servers/slapd/getsocketpeer.c +@enable_ldapi_TRUE@enable_ldapi = 1 +@enable_autobind_TRUE@enable_autobind = 1 +@enable_auto_dn_suffix_TRUE@enable_auto_dn_suffix = 1 +ns_slapd_SOURCES = ldap/servers/slapd/abandon.c \ + ldap/servers/slapd/auth.c \ + ldap/servers/slapd/bind.c \ + ldap/servers/slapd/compare.c \ + ldap/servers/slapd/config.c \ + ldap/servers/slapd/configdse.c \ + ldap/servers/slapd/connection.c \ + ldap/servers/slapd/conntable.c \ + ldap/servers/slapd/daemon.c \ + ldap/servers/slapd/detach.c \ + ldap/servers/slapd/extendop.c \ + ldap/servers/slapd/fedse.c \ + ldap/servers/slapd/fileio.c \ + ldap/servers/slapd/getopt_ext.c \ + ldap/servers/slapd/globals.c \ + ldap/servers/slapd/house.c \ + ldap/servers/slapd/init.c \ + ldap/servers/slapd/main.c \ + ldap/servers/slapd/monitor.c \ + ldap/servers/slapd/passwd_extop.c \ + ldap/servers/slapd/psearch.c \ + ldap/servers/slapd/pw_mgmt.c \ + ldap/servers/slapd/rootdse.c \ + ldap/servers/slapd/sasl_io.c \ + ldap/servers/slapd/saslbind.c \ + ldap/servers/slapd/search.c \ + ldap/servers/slapd/start_tls_extop.c \ + ldap/servers/slapd/strdup.c \ + ldap/servers/slapd/stubs.c \ + ldap/servers/slapd/tempnam.c \ + ldap/servers/slapd/unbind.c \ + $(GETSOCKETPEER) + +ns_slapd_CPPFLAGS = $(AM_CPPFLAGS) @sasl_inc@ @openldap_inc@ @ldapsdk_inc@ @nss_inc@ \ + @nspr_inc@ @svrcore_inc@ @systemd_inc@ + +ns_slapd_LDADD = libslapd.la libldaputil.a $(LDAPSDK_LINK) $(NSS_LINK) $(DLOPEN_LINK) \ + $(NSPR_LINK) $(SASL_LINK) $(SVRCORE_LINK) $(LIBNSL) $(LIBSOCKET) $(THREADLIB) $(SYSTEMD_LINK) + +@HPUX_FALSE@ns_slapd_LINK = $(LINK) +# We need to link ns-slapd with the C++ compiler on HP-UX since we load +# some C++ shared libraries (such as icu). +@HPUX_TRUE@ns_slapd_LINK = $(CXXLINK) + +#------------------------ +# pwdhash +#------------------------ +pwdhash_bin_SOURCES = ldap/servers/slapd/tools/pwenc.c +pwdhash_bin_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +pwdhash_bin_LDADD = libslapd.la $(NSPR_LINK) $(NSS_LINK) $(SVRCORE_LINK) $(LDAPSDK_LINK) $(SASL_LINK) + +#------------------------ +# rsearch +#------------------------ +rsearch_bin_SOURCES = ldap/servers/slapd/tools/rsearch/nametable.c \ + ldap/servers/slapd/tools/rsearch/rsearch.c \ + ldap/servers/slapd/tools/rsearch/sdattable.c \ + ldap/servers/slapd/tools/rsearch/searchthread.c + +rsearch_bin_CPPFLAGS = $(AM_CPPFLAGS) @openldap_inc@ @ldapsdk_inc@ @nss_inc@ @nspr_inc@ +rsearch_bin_LDADD = $(NSPR_LINK) $(NSS_LINK) $(LDAPSDK_LINK) $(SASL_LINK) $(LIBSOCKET) +@BUNDLE_FALSE@fixupcmd = sed \ +@BUNDLE_FALSE@ -e 's,@bindir\@,$(bindir),g' \ +@BUNDLE_FALSE@ -e 's,@sbindir\@,$(sbindir),g' \ +@BUNDLE_FALSE@ -e 's,@libdir\@,$(libdir),g' \ +@BUNDLE_FALSE@ -e 's,@nspr_libdir\@,$(nspr_libdir),g' \ +@BUNDLE_FALSE@ -e 's,@nss_libdir\@,$(nss_libdir),g' \ +@BUNDLE_FALSE@ -e 's,@ldapsdk_libdir\@,$(ldapsdk_libdir),g' \ +@BUNDLE_FALSE@ -e 's,@ldapsdk_bindir\@,$(ldapsdk_bindir),g' \ +@BUNDLE_FALSE@ -e 's,@ldaptool_bindir\@,$(ldaptool_bindir),g' \ +@BUNDLE_FALSE@ -e 's,@ldaptool_opts\@,$(ldaptool_opts),g' \ +@BUNDLE_FALSE@ -e 's,@plainldif_opts\@,$(plainldif_opts),g' \ +@BUNDLE_FALSE@ -e 's,@db_libdir\@,$(db_libdir),g' \ +@BUNDLE_FALSE@ -e 's,@db_bindir\@,$(db_bindir),g' \ +@BUNDLE_FALSE@ -e 's,@sasl_libdir\@,$(sasl_libdir),g' \ +@BUNDLE_FALSE@ -e 's,@sasl_path\@,@sasl_path@,g' \ +@BUNDLE_FALSE@ -e 's,@netsnmp_libdir\@,$(netsnmp_libdir),g' \ +@BUNDLE_FALSE@ -e 's,@pcre_libdir\@,$(pcre_libdir),g' \ +@BUNDLE_FALSE@ -e 's,@propertydir\@,$(propertydir),g' \ +@BUNDLE_FALSE@ -e 's,@datadir\@,$(datadir),g' \ +@BUNDLE_FALSE@ -e 's,@schemadir\@,$(schemadir),g' \ +@BUNDLE_FALSE@ -e 's,@serverdir\@,$(serverdir),g' \ +@BUNDLE_FALSE@ -e 's,@serverincdir\@,$(serverincdir),g' \ +@BUNDLE_FALSE@ -e 's,@serverplugindir\@,$(serverplugindir),g' \ +@BUNDLE_FALSE@ -e 's,@taskdir\@,$(taskdir),g' \ +@BUNDLE_FALSE@ -e 's,@configdir\@,$(configdir),g' \ +@BUNDLE_FALSE@ -e 's,@sysconfdir\@,$(sysconfdir),g' \ +@BUNDLE_FALSE@ -e 's,@localstatedir\@,$(localstatedir),g' \ +@BUNDLE_FALSE@ -e 's,@localrundir\@,$(localrundir),g' \ +@BUNDLE_FALSE@ -e 's,@infdir\@,$(infdir),g' \ +@BUNDLE_FALSE@ -e 's,@mibdir\@,$(mibdir),g' \ +@BUNDLE_FALSE@ -e 's,@templatedir\@,$(sampledatadir),g' \ +@BUNDLE_FALSE@ -e 's,@package_name\@,$(PACKAGE_NAME),g' \ +@BUNDLE_FALSE@ -e 's,@instconfigdir\@,$(instconfigdir),g' \ +@BUNDLE_FALSE@ -e 's,@enable_ldapi\@,$(enable_ldapi),g' \ +@BUNDLE_FALSE@ -e 's,@enable_pam_passthru\@,$(enable_pam_passthru),g' \ +@BUNDLE_FALSE@ -e 's,@enable_bitwise\@,$(enable_bitwise),g' \ +@BUNDLE_FALSE@ -e 's,@enable_dna\@,$(enable_dna),g' \ +@BUNDLE_FALSE@ -e 's,@enable_autobind\@,$(enable_autobind),g' \ +@BUNDLE_FALSE@ -e 's,@enable_auto_dn_suffix\@,$(enable_auto_dn_suffix),g' \ +@BUNDLE_FALSE@ -e 's,@enable_presence\@,$(enable_presence),g' \ +@BUNDLE_FALSE@ -e 's,@enable_asan\@,$(ASAN_ON),g' \ +@BUNDLE_FALSE@ -e 's,@ECHO_N\@,$(ECHO_N),g' \ +@BUNDLE_FALSE@ -e 's,@ECHO_C\@,$(ECHO_C),g' \ +@BUNDLE_FALSE@ -e 's,@brand\@,$(brand),g' \ +@BUNDLE_FALSE@ -e 's,@capbrand\@,$(capbrand),g' \ +@BUNDLE_FALSE@ -e 's,@vendor\@,$(vendor),g' \ +@BUNDLE_FALSE@ -e 's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g' \ +@BUNDLE_FALSE@ -e 's,@PACKAGE_VERSION\@,$(PACKAGE_VERSION),g' \ +@BUNDLE_FALSE@ -e 's,@PACKAGE_BASE_VERSION\@,$(PACKAGE_BASE_VERSION),g' \ +@BUNDLE_FALSE@ -e 's,@CONSOLE_VERSION\@,$(CONSOLE_VERSION),g' \ +@BUNDLE_FALSE@ -e 's,@BUILDNUM\@,$(BUILDNUM),g' \ +@BUNDLE_FALSE@ -e 's,@NQBUILD_NUM\@,$(NQBUILDNUM),g' \ +@BUNDLE_FALSE@ -e 's,@perlpath\@,$(perldir),g' \ +@BUNDLE_FALSE@ -e 's,@defaultuser\@,$(defaultuser),g' \ +@BUNDLE_FALSE@ -e 's,@defaultgroup\@,$(defaultgroup),g' \ +@BUNDLE_FALSE@ -e 's,@with_fhs_opt\@,@with_fhs_opt@,g' \ +@BUNDLE_FALSE@ -e 's,@with_selinux\@,@with_selinux@,g' \ +@BUNDLE_FALSE@ -e 's,@with_tmpfiles_d\@,@with_tmpfiles_d@,g' \ +@BUNDLE_FALSE@ -e 's,@perlexec\@,@perlexec@,g' \ +@BUNDLE_FALSE@ -e 's,@pythonexec\@,@pythonexec@,g' \ +@BUNDLE_FALSE@ -e 's,@sttyexec\@,@sttyexec@,g' \ +@BUNDLE_FALSE@ -e 's,@initconfigdir\@,$(initconfigdir),g' \ +@BUNDLE_FALSE@ -e 's,@updatedir\@,$(updatedir),g' \ +@BUNDLE_FALSE@ -e 's,@ldaplib\@,$(ldaplib),g' \ +@BUNDLE_FALSE@ -e 's,@ldaplib_defs\@,$(ldaplib_defs),g' \ +@BUNDLE_FALSE@ -e 's,@systemdsystemunitdir\@,$(systemdsystemunitdir),g' \ +@BUNDLE_FALSE@ -e 's,@systemdsystemconfdir\@,$(systemdsystemconfdir),g' \ +@BUNDLE_FALSE@ -e 's,@systemdgroupname\@,$(systemdgroupname),g' \ +@BUNDLE_FALSE@ -e 's,@prefixdir\@,$(prefixdir),g' + + +# these are for the config files and scripts that we need to generate and replace +# the paths and other tokens with the real values set during configure/make +# note that we cannot just use AC_OUTPUT to do this for us, since it will do things like this: +# LD_LIBRARY_PATH = ${prefix}/lib/dirsrv +# i.e. it literally copies in '${prefix}' rather than expanding it out - we want this instead: +# LD_LIBRARY_PATH = /usr/lib/dirsrv +# on the systems on which we bundle, perldap will be in libdir/perl, so we need to point +# the perlpath there - on other systems, perldap will be installed as a site module into +# the system perl +@BUNDLE_TRUE@fixupcmd = sed \ +@BUNDLE_TRUE@ -e 's,@bindir\@,$(bindir),g' \ +@BUNDLE_TRUE@ -e 's,@sbindir\@,$(sbindir),g' \ +@BUNDLE_TRUE@ -e 's,@libdir\@,$(libdir),g' \ +@BUNDLE_TRUE@ -e 's,@nspr_libdir\@,$(libdir),g' \ +@BUNDLE_TRUE@ -e 's,@nss_libdir\@,$(libdir),g' \ +@BUNDLE_TRUE@ -e 's,@ldapsdk_libdir\@,$(libdir),g' \ +@BUNDLE_TRUE@ -e 's,@ldapsdk_bindir\@,$(bindir),g' \ +@BUNDLE_TRUE@ -e 's,@ldaptool_bindir\@,$(bindir),g' \ +@BUNDLE_TRUE@ -e 's,@ldaptool_opts\@,$(ldaptool_opts),g' \ +@BUNDLE_TRUE@ -e 's,@plainldif_opts\@,$(plainldif_opts),g' \ +@BUNDLE_TRUE@ -e 's,@db_libdir\@,$(libdir),g' \ +@BUNDLE_TRUE@ -e 's,@db_bindir\@,$(bindir),g' \ +@BUNDLE_TRUE@ -e 's,@sasl_libdir\@,$(libdir),g' \ +@BUNDLE_TRUE@ -e 's,@sasl_path\@,$(libdir)/sasl2,g' \ +@BUNDLE_TRUE@ -e 's,@netsnmp_libdir\@,$(libdir),g' \ +@BUNDLE_TRUE@ -e 's,@pcre_libdir\@,$(libdir),g' \ +@BUNDLE_TRUE@ -e 's,@propertydir\@,$(propertydir),g' \ +@BUNDLE_TRUE@ -e 's,@datadir\@,$(datadir),g' \ +@BUNDLE_TRUE@ -e 's,@schemadir\@,$(schemadir),g' \ +@BUNDLE_TRUE@ -e 's,@serverdir\@,$(serverdir),g' \ +@BUNDLE_TRUE@ -e 's,@serverincdir\@,$(serverincdir),g' \ +@BUNDLE_TRUE@ -e 's,@serverplugindir\@,$(serverplugindir),g' \ +@BUNDLE_TRUE@ -e 's,@taskdir\@,$(taskdir),g' \ +@BUNDLE_TRUE@ -e 's,@configdir\@,$(configdir),g' \ +@BUNDLE_TRUE@ -e 's,@sysconfdir\@,$(sysconfdir),g' \ +@BUNDLE_TRUE@ -e 's,@localrundir\@,$(localrundir),g' \ +@BUNDLE_TRUE@ -e 's,@localstatedir\@,$(localstatedir),g' \ +@BUNDLE_TRUE@ -e 's,@infdir\@,$(infdir),g' \ +@BUNDLE_TRUE@ -e 's,@mibdir\@,$(mibdir),g' \ +@BUNDLE_TRUE@ -e 's,@templatedir\@,$(sampledatadir),g' \ +@BUNDLE_TRUE@ -e 's,@package_name\@,$(PACKAGE_NAME),g' \ +@BUNDLE_TRUE@ -e 's,@instconfigdir\@,$(instconfigdir),g' \ +@BUNDLE_TRUE@ -e 's,@enable_ldapi\@,$(enable_ldapi),g' \ +@BUNDLE_TRUE@ -e 's,@enable_pam_passthru\@,$(enable_pam_passthru),g' \ +@BUNDLE_TRUE@ -e 's,@enable_bitwise\@,$(enable_bitwise),g' \ +@BUNDLE_TRUE@ -e 's,@enable_dna\@,$(enable_dna),g' \ +@BUNDLE_TRUE@ -e 's,@enable_autobind\@,$(enable_autobind),g' \ +@BUNDLE_TRUE@ -e 's,@enable_auto_dn_suffix\@,$(enable_auto_dn_suffix),g' \ +@BUNDLE_TRUE@ -e 's,@enable_presence\@,$(enable_presence),g' \ +@BUNDLE_TRUE@ -e 's,@enable_asan\@,$(ASAN_ON),g' \ +@BUNDLE_TRUE@ -e 's,@ECHO_N\@,$(ECHO_N),g' \ +@BUNDLE_TRUE@ -e 's,@ECHO_C\@,$(ECHO_C),g' \ +@BUNDLE_TRUE@ -e 's,@brand\@,$(brand),g' \ +@BUNDLE_TRUE@ -e 's,@capbrand\@,$(capbrand),g' \ +@BUNDLE_TRUE@ -e 's,@vendor\@,$(vendor),g' \ +@BUNDLE_TRUE@ -e 's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g' \ +@BUNDLE_TRUE@ -e 's,@PACKAGE_VERSION\@,$(PACKAGE_VERSION),g' \ +@BUNDLE_TRUE@ -e 's,@PACKAGE_BASE_VERSION\@,$(PACKAGE_BASE_VERSION),g' \ +@BUNDLE_TRUE@ -e 's,@CONSOLE_VERSION\@,$(CONSOLE_VERSION),g' \ +@BUNDLE_TRUE@ -e 's,@BUILDNUM\@,$(BUILDNUM),g' \ +@BUNDLE_TRUE@ -e 's,@NQBUILD_NUM\@,$(NQBUILDNUM),g' \ +@BUNDLE_TRUE@ -e 's,@perlpath\@,$(perldir) $(libdir)/perl/arch $(libdir)/perl,g' \ +@BUNDLE_TRUE@ -e 's,@defaultuser\@,$(defaultuser),g' \ +@BUNDLE_TRUE@ -e 's,@defaultgroup\@,$(defaultgroup),g' \ +@BUNDLE_TRUE@ -e 's,@with_fhs_opt\@,@with_fhs_opt@,g' \ +@BUNDLE_TRUE@ -e 's,@with_selinux\@,@with_selinux@,g' \ +@BUNDLE_TRUE@ -e 's,@with_tmpfiles_d\@,@with_tmpfiles_d@,g' \ +@BUNDLE_TRUE@ -e 's,@perlexec\@,@perlexec@,g' \ +@BUNDLE_TRUE@ -e 's,@pythonexec\@,@pythonexec@,g' \ +@BUNDLE_TRUE@ -e 's,@sttyexec\@,@sttyexec@,g' \ +@BUNDLE_TRUE@ -e 's,@initconfigdir\@,$(initconfigdir),g'\ +@BUNDLE_TRUE@ -e 's,@updatedir\@,$(updatedir),g' \ +@BUNDLE_TRUE@ -e 's,@ldaplib\@,$(ldaplib),g' \ +@BUNDLE_TRUE@ -e 's,@ldaplib_defs\@,$(ldaplib_defs),g' \ +@BUNDLE_TRUE@ -e 's,@systemdsystemunitdir\@,$(systemdsystemunitdir),g' \ +@BUNDLE_TRUE@ -e 's,@systemdsystemconfdir\@,$(systemdsystemconfdir),g' \ +@BUNDLE_TRUE@ -e 's,@systemdgroupname\@,$(systemdgroupname),g' \ +@BUNDLE_TRUE@ -e 's,@prefixdir\@,$(prefixdir),g' + +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .S .c .cpp .lo .o .obj +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +rpm/389-ds-base.spec: $(top_builddir)/config.status $(top_srcdir)/rpm/389-ds-base.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +ldap/libraries/libavl/$(am__dirstamp): + @$(MKDIR_P) ldap/libraries/libavl + @: > ldap/libraries/libavl/$(am__dirstamp) +ldap/libraries/libavl/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/libraries/libavl/$(DEPDIR) + @: > ldap/libraries/libavl/$(DEPDIR)/$(am__dirstamp) +ldap/libraries/libavl/avl.$(OBJEXT): \ + ldap/libraries/libavl/$(am__dirstamp) \ + ldap/libraries/libavl/$(DEPDIR)/$(am__dirstamp) + +libavl.a: $(libavl_a_OBJECTS) $(libavl_a_DEPENDENCIES) $(EXTRA_libavl_a_DEPENDENCIES) + $(AM_V_at)-rm -f libavl.a + $(AM_V_AR)$(libavl_a_AR) libavl.a $(libavl_a_OBJECTS) $(libavl_a_LIBADD) + $(AM_V_at)$(RANLIB) libavl.a +lib/ldaputil/$(am__dirstamp): + @$(MKDIR_P) lib/ldaputil + @: > lib/ldaputil/$(am__dirstamp) +lib/ldaputil/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/ldaputil/$(DEPDIR) + @: > lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libldaputil_a-cert.$(OBJEXT): \ + lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libldaputil_a-certmap.$(OBJEXT): \ + lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libldaputil_a-dbconf.$(OBJEXT): \ + lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libldaputil_a-encode.$(OBJEXT): \ + lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libldaputil_a-errors.$(OBJEXT): \ + lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libldaputil_a-init.$(OBJEXT): \ + lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libldaputil_a-ldapauth.$(OBJEXT): \ + lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libldaputil_a-vtable.$(OBJEXT): \ + lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) + +libldaputil.a: $(libldaputil_a_OBJECTS) $(libldaputil_a_DEPENDENCIES) $(EXTRA_libldaputil_a_DEPENDENCIES) + $(AM_V_at)-rm -f libldaputil.a + $(AM_V_AR)$(libldaputil_a_AR) libldaputil.a $(libldaputil_a_OBJECTS) $(libldaputil_a_LIBADD) + $(AM_V_at)$(RANLIB) libldaputil.a + +install-serverLTLIBRARIES: $(server_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(server_LTLIBRARIES)'; test -n "$(serverdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(serverdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(serverdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(serverdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(serverdir)"; \ + } + +uninstall-serverLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(server_LTLIBRARIES)'; test -n "$(serverdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(serverdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(serverdir)/$$f"; \ + done + +clean-serverLTLIBRARIES: + -test -z "$(server_LTLIBRARIES)" || rm -f $(server_LTLIBRARIES) + @list='$(server_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +install-serverpluginLTLIBRARIES: $(serverplugin_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(serverplugin_LTLIBRARIES)'; test -n "$(serverplugindir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(serverplugindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(serverplugindir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(serverplugindir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(serverplugindir)"; \ + } + +uninstall-serverpluginLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(serverplugin_LTLIBRARIES)'; test -n "$(serverplugindir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(serverplugindir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(serverplugindir)/$$f"; \ + done + +clean-serverpluginLTLIBRARIES: + -test -z "$(serverplugin_LTLIBRARIES)" || rm -f $(serverplugin_LTLIBRARIES) + @list='$(serverplugin_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +ldap/servers/plugins/acctpolicy/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/acctpolicy + @: > ldap/servers/plugins/acctpolicy/$(am__dirstamp) +ldap/servers/plugins/acctpolicy/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/acctpolicy/$(DEPDIR) + @: > ldap/servers/plugins/acctpolicy/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_config.lo: \ + ldap/servers/plugins/acctpolicy/$(am__dirstamp) \ + ldap/servers/plugins/acctpolicy/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_init.lo: \ + ldap/servers/plugins/acctpolicy/$(am__dirstamp) \ + ldap/servers/plugins/acctpolicy/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_plugin.lo: \ + ldap/servers/plugins/acctpolicy/$(am__dirstamp) \ + ldap/servers/plugins/acctpolicy/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_util.lo: \ + ldap/servers/plugins/acctpolicy/$(am__dirstamp) \ + ldap/servers/plugins/acctpolicy/$(DEPDIR)/$(am__dirstamp) + +libacctpolicy-plugin.la: $(libacctpolicy_plugin_la_OBJECTS) $(libacctpolicy_plugin_la_DEPENDENCIES) $(EXTRA_libacctpolicy_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libacctpolicy_plugin_la_LINK) $(am_libacctpolicy_plugin_la_rpath) $(libacctpolicy_plugin_la_OBJECTS) $(libacctpolicy_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/acct_usability/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/acct_usability + @: > ldap/servers/plugins/acct_usability/$(am__dirstamp) +ldap/servers/plugins/acct_usability/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/acct_usability/$(DEPDIR) + @: > ldap/servers/plugins/acct_usability/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acct_usability/libacctusability_plugin_la-acct_usability.lo: \ + ldap/servers/plugins/acct_usability/$(am__dirstamp) \ + ldap/servers/plugins/acct_usability/$(DEPDIR)/$(am__dirstamp) + +libacctusability-plugin.la: $(libacctusability_plugin_la_OBJECTS) $(libacctusability_plugin_la_DEPENDENCIES) $(EXTRA_libacctusability_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libacctusability_plugin_la_LINK) -rpath $(serverplugindir) $(libacctusability_plugin_la_OBJECTS) $(libacctusability_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/acl/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/acl + @: > ldap/servers/plugins/acl/$(am__dirstamp) +ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/acl/$(DEPDIR) + @: > ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acl/libacl_plugin_la-acl.lo: \ + ldap/servers/plugins/acl/$(am__dirstamp) \ + ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acl/libacl_plugin_la-acl_ext.lo: \ + ldap/servers/plugins/acl/$(am__dirstamp) \ + ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acl/libacl_plugin_la-aclanom.lo: \ + ldap/servers/plugins/acl/$(am__dirstamp) \ + ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acl/libacl_plugin_la-acleffectiverights.lo: \ + ldap/servers/plugins/acl/$(am__dirstamp) \ + ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acl/libacl_plugin_la-aclgroup.lo: \ + ldap/servers/plugins/acl/$(am__dirstamp) \ + ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acl/libacl_plugin_la-aclinit.lo: \ + ldap/servers/plugins/acl/$(am__dirstamp) \ + ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acl/libacl_plugin_la-acllas.lo: \ + ldap/servers/plugins/acl/$(am__dirstamp) \ + ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acl/libacl_plugin_la-acllist.lo: \ + ldap/servers/plugins/acl/$(am__dirstamp) \ + ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acl/libacl_plugin_la-aclparse.lo: \ + ldap/servers/plugins/acl/$(am__dirstamp) \ + ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acl/libacl_plugin_la-aclplugin.lo: \ + ldap/servers/plugins/acl/$(am__dirstamp) \ + ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/acl/libacl_plugin_la-aclutil.lo: \ + ldap/servers/plugins/acl/$(am__dirstamp) \ + ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) + +libacl-plugin.la: $(libacl_plugin_la_OBJECTS) $(libacl_plugin_la_DEPENDENCIES) $(EXTRA_libacl_plugin_la_DEPENDENCIES) + $(AM_V_GEN)$(libacl_plugin_la_LINK) -rpath $(serverplugindir) $(libacl_plugin_la_OBJECTS) $(libacl_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/uiduniq/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/uiduniq + @: > ldap/servers/plugins/uiduniq/$(am__dirstamp) +ldap/servers/plugins/uiduniq/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/uiduniq/$(DEPDIR) + @: > ldap/servers/plugins/uiduniq/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-7bit.lo: \ + ldap/servers/plugins/uiduniq/$(am__dirstamp) \ + ldap/servers/plugins/uiduniq/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-uid.lo: \ + ldap/servers/plugins/uiduniq/$(am__dirstamp) \ + ldap/servers/plugins/uiduniq/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-utils.lo: \ + ldap/servers/plugins/uiduniq/$(am__dirstamp) \ + ldap/servers/plugins/uiduniq/$(DEPDIR)/$(am__dirstamp) + +libattr-unique-plugin.la: $(libattr_unique_plugin_la_OBJECTS) $(libattr_unique_plugin_la_DEPENDENCIES) $(EXTRA_libattr_unique_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libattr_unique_plugin_la_LINK) -rpath $(serverplugindir) $(libattr_unique_plugin_la_OBJECTS) $(libattr_unique_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/automember/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/automember + @: > ldap/servers/plugins/automember/$(am__dirstamp) +ldap/servers/plugins/automember/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/automember/$(DEPDIR) + @: > ldap/servers/plugins/automember/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/automember/libautomember_plugin_la-automember.lo: \ + ldap/servers/plugins/automember/$(am__dirstamp) \ + ldap/servers/plugins/automember/$(DEPDIR)/$(am__dirstamp) + +libautomember-plugin.la: $(libautomember_plugin_la_OBJECTS) $(libautomember_plugin_la_DEPENDENCIES) $(EXTRA_libautomember_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libautomember_plugin_la_LINK) -rpath $(serverplugindir) $(libautomember_plugin_la_OBJECTS) $(libautomember_plugin_la_LIBADD) $(LIBS) +ldap/servers/slapd/back-ldbm/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/slapd/back-ldbm + @: > ldap/servers/slapd/back-ldbm/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/slapd/back-ldbm/$(DEPDIR) + @: > ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ancestorid.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-archive.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-backentry.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-cache.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-cleanup.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-close.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbhelp.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-dblayer.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbsize.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbversion.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-dn2entry.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-entrystore.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-filterindex.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-findentry.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-haschildren.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-id2entry.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_shim.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_new.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_common.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-import.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-import-merge.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-import-threads.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-index.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-init.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-instance.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_abandon.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_add.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attr.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attrcrypt.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attrcrypt_config.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_bind.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_compare.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_config.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_delete.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_entryrdn.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_index_config.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_instance_config.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_modify.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_modrdn.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_search.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_unbind.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_usn.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +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) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-misc.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-monitor.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-nextid.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-parents.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-perfctrs.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-rmdb.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-seq.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-sort.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-start.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-uniqueid2entry.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-upgrade.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv_key.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv_srch.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) + +libback-ldbm.la: $(libback_ldbm_la_OBJECTS) $(libback_ldbm_la_DEPENDENCIES) $(EXTRA_libback_ldbm_la_DEPENDENCIES) + $(AM_V_CCLD)$(libback_ldbm_la_LINK) -rpath $(serverplugindir) $(libback_ldbm_la_OBJECTS) $(libback_ldbm_la_LIBADD) $(LIBS) +ldap/servers/plugins/bitwise/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/bitwise + @: > ldap/servers/plugins/bitwise/$(am__dirstamp) +ldap/servers/plugins/bitwise/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/bitwise/$(DEPDIR) + @: > ldap/servers/plugins/bitwise/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/bitwise/libbitwise_plugin_la-bitwise.lo: \ + ldap/servers/plugins/bitwise/$(am__dirstamp) \ + ldap/servers/plugins/bitwise/$(DEPDIR)/$(am__dirstamp) + +libbitwise-plugin.la: $(libbitwise_plugin_la_OBJECTS) $(libbitwise_plugin_la_DEPENDENCIES) $(EXTRA_libbitwise_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libbitwise_plugin_la_LINK) $(am_libbitwise_plugin_la_rpath) $(libbitwise_plugin_la_OBJECTS) $(libbitwise_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/chainingdb/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/chainingdb + @: > ldap/servers/plugins/chainingdb/$(am__dirstamp) +ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/chainingdb/$(DEPDIR) + @: > ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_abandon.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_acl.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_add.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_bind.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_cleanup.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_close.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_compare.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_config.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_conn_stateless.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_controls.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_debug.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_delete.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_init.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_instance.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modify.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modrdn.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_monitor.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_schema.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_search.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_size.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_start.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_temp.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_test.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_unbind.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_utils.lo: \ + ldap/servers/plugins/chainingdb/$(am__dirstamp) \ + ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) + +libchainingdb-plugin.la: $(libchainingdb_plugin_la_OBJECTS) $(libchainingdb_plugin_la_DEPENDENCIES) $(EXTRA_libchainingdb_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libchainingdb_plugin_la_LINK) -rpath $(serverplugindir) $(libchainingdb_plugin_la_OBJECTS) $(libchainingdb_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/collation/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/collation + @: > ldap/servers/plugins/collation/$(am__dirstamp) +ldap/servers/plugins/collation/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/collation/$(DEPDIR) + @: > ldap/servers/plugins/collation/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/collation/libcollation_plugin_la-collate.lo: \ + ldap/servers/plugins/collation/$(am__dirstamp) \ + ldap/servers/plugins/collation/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/collation/libcollation_plugin_la-config.lo: \ + ldap/servers/plugins/collation/$(am__dirstamp) \ + ldap/servers/plugins/collation/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/collation/libcollation_plugin_la-orfilter.lo: \ + ldap/servers/plugins/collation/$(am__dirstamp) \ + ldap/servers/plugins/collation/$(DEPDIR)/$(am__dirstamp) + +libcollation-plugin.la: $(libcollation_plugin_la_OBJECTS) $(libcollation_plugin_la_DEPENDENCIES) $(EXTRA_libcollation_plugin_la_DEPENDENCIES) + $(AM_V_GEN)$(libcollation_plugin_la_LINK) -rpath $(serverplugindir) $(libcollation_plugin_la_OBJECTS) $(libcollation_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/sync/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/sync + @: > ldap/servers/plugins/sync/$(am__dirstamp) +ldap/servers/plugins/sync/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/sync/$(DEPDIR) + @: > ldap/servers/plugins/sync/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_init.lo: \ + ldap/servers/plugins/sync/$(am__dirstamp) \ + ldap/servers/plugins/sync/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_util.lo: \ + ldap/servers/plugins/sync/$(am__dirstamp) \ + ldap/servers/plugins/sync/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_refresh.lo: \ + ldap/servers/plugins/sync/$(am__dirstamp) \ + ldap/servers/plugins/sync/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_persist.lo: \ + ldap/servers/plugins/sync/$(am__dirstamp) \ + ldap/servers/plugins/sync/$(DEPDIR)/$(am__dirstamp) + +libcontentsync-plugin.la: $(libcontentsync_plugin_la_OBJECTS) $(libcontentsync_plugin_la_DEPENDENCIES) $(EXTRA_libcontentsync_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libcontentsync_plugin_la_LINK) -rpath $(serverplugindir) $(libcontentsync_plugin_la_OBJECTS) $(libcontentsync_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/cos/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/cos + @: > ldap/servers/plugins/cos/$(am__dirstamp) +ldap/servers/plugins/cos/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/cos/$(DEPDIR) + @: > ldap/servers/plugins/cos/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/cos/libcos_plugin_la-cos.lo: \ + ldap/servers/plugins/cos/$(am__dirstamp) \ + ldap/servers/plugins/cos/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/cos/libcos_plugin_la-cos_cache.lo: \ + ldap/servers/plugins/cos/$(am__dirstamp) \ + ldap/servers/plugins/cos/$(DEPDIR)/$(am__dirstamp) + +libcos-plugin.la: $(libcos_plugin_la_OBJECTS) $(libcos_plugin_la_DEPENDENCIES) $(EXTRA_libcos_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libcos_plugin_la_LINK) -rpath $(serverplugindir) $(libcos_plugin_la_OBJECTS) $(libcos_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/deref/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/deref + @: > ldap/servers/plugins/deref/$(am__dirstamp) +ldap/servers/plugins/deref/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/deref/$(DEPDIR) + @: > ldap/servers/plugins/deref/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/deref/libderef_plugin_la-deref.lo: \ + ldap/servers/plugins/deref/$(am__dirstamp) \ + ldap/servers/plugins/deref/$(DEPDIR)/$(am__dirstamp) + +libderef-plugin.la: $(libderef_plugin_la_OBJECTS) $(libderef_plugin_la_DEPENDENCIES) $(EXTRA_libderef_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libderef_plugin_la_LINK) -rpath $(serverplugindir) $(libderef_plugin_la_OBJECTS) $(libderef_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/distrib/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/distrib + @: > ldap/servers/plugins/distrib/$(am__dirstamp) +ldap/servers/plugins/distrib/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/distrib/$(DEPDIR) + @: > ldap/servers/plugins/distrib/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/distrib/libdistrib_plugin_la-distrib.lo: \ + ldap/servers/plugins/distrib/$(am__dirstamp) \ + ldap/servers/plugins/distrib/$(DEPDIR)/$(am__dirstamp) + +libdistrib-plugin.la: $(libdistrib_plugin_la_OBJECTS) $(libdistrib_plugin_la_DEPENDENCIES) $(EXTRA_libdistrib_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libdistrib_plugin_la_LINK) -rpath $(serverplugindir) $(libdistrib_plugin_la_OBJECTS) $(libdistrib_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/dna/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/dna + @: > ldap/servers/plugins/dna/$(am__dirstamp) +ldap/servers/plugins/dna/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/dna/$(DEPDIR) + @: > ldap/servers/plugins/dna/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/dna/libdna_plugin_la-dna.lo: \ + ldap/servers/plugins/dna/$(am__dirstamp) \ + ldap/servers/plugins/dna/$(DEPDIR)/$(am__dirstamp) + +libdna-plugin.la: $(libdna_plugin_la_OBJECTS) $(libdna_plugin_la_DEPENDENCIES) $(EXTRA_libdna_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libdna_plugin_la_LINK) $(am_libdna_plugin_la_rpath) $(libdna_plugin_la_OBJECTS) $(libdna_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/http/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/http + @: > ldap/servers/plugins/http/$(am__dirstamp) +ldap/servers/plugins/http/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/http/$(DEPDIR) + @: > ldap/servers/plugins/http/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/http/libhttp_client_plugin_la-http_client.lo: \ + ldap/servers/plugins/http/$(am__dirstamp) \ + ldap/servers/plugins/http/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/http/libhttp_client_plugin_la-http_impl.lo: \ + ldap/servers/plugins/http/$(am__dirstamp) \ + ldap/servers/plugins/http/$(DEPDIR)/$(am__dirstamp) + +libhttp-client-plugin.la: $(libhttp_client_plugin_la_OBJECTS) $(libhttp_client_plugin_la_DEPENDENCIES) $(EXTRA_libhttp_client_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libhttp_client_plugin_la_LINK) -rpath $(serverplugindir) $(libhttp_client_plugin_la_OBJECTS) $(libhttp_client_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/linkedattrs/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/linkedattrs + @: > ldap/servers/plugins/linkedattrs/$(am__dirstamp) +ldap/servers/plugins/linkedattrs/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/linkedattrs/$(DEPDIR) + @: > ldap/servers/plugins/linkedattrs/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-fixup_task.lo: \ + ldap/servers/plugins/linkedattrs/$(am__dirstamp) \ + ldap/servers/plugins/linkedattrs/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-linked_attrs.lo: \ + ldap/servers/plugins/linkedattrs/$(am__dirstamp) \ + ldap/servers/plugins/linkedattrs/$(DEPDIR)/$(am__dirstamp) + +liblinkedattrs-plugin.la: $(liblinkedattrs_plugin_la_OBJECTS) $(liblinkedattrs_plugin_la_DEPENDENCIES) $(EXTRA_liblinkedattrs_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(liblinkedattrs_plugin_la_LINK) -rpath $(serverplugindir) $(liblinkedattrs_plugin_la_OBJECTS) $(liblinkedattrs_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/mep/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/mep + @: > ldap/servers/plugins/mep/$(am__dirstamp) +ldap/servers/plugins/mep/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/mep/$(DEPDIR) + @: > ldap/servers/plugins/mep/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/mep/libmanagedentries_plugin_la-mep.lo: \ + ldap/servers/plugins/mep/$(am__dirstamp) \ + ldap/servers/plugins/mep/$(DEPDIR)/$(am__dirstamp) + +libmanagedentries-plugin.la: $(libmanagedentries_plugin_la_OBJECTS) $(libmanagedentries_plugin_la_DEPENDENCIES) $(EXTRA_libmanagedentries_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libmanagedentries_plugin_la_LINK) -rpath $(serverplugindir) $(libmanagedentries_plugin_la_OBJECTS) $(libmanagedentries_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/memberof/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/memberof + @: > ldap/servers/plugins/memberof/$(am__dirstamp) +ldap/servers/plugins/memberof/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/memberof/$(DEPDIR) + @: > ldap/servers/plugins/memberof/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof.lo: \ + ldap/servers/plugins/memberof/$(am__dirstamp) \ + ldap/servers/plugins/memberof/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof_config.lo: \ + ldap/servers/plugins/memberof/$(am__dirstamp) \ + ldap/servers/plugins/memberof/$(DEPDIR)/$(am__dirstamp) + +libmemberof-plugin.la: $(libmemberof_plugin_la_OBJECTS) $(libmemberof_plugin_la_DEPENDENCIES) $(EXTRA_libmemberof_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libmemberof_plugin_la_LINK) -rpath $(serverplugindir) $(libmemberof_plugin_la_OBJECTS) $(libmemberof_plugin_la_LIBADD) $(LIBS) +lib/libaccess/$(am__dirstamp): + @$(MKDIR_P) lib/libaccess + @: > lib/libaccess/$(am__dirstamp) +lib/libaccess/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/libaccess/$(DEPDIR) + @: > lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-access_plhash.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-acl.tab.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-acl.yy.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-aclcache.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-aclerror.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-acleval.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-aclflush.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-aclspace.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-acltools.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-aclutil.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-authdb.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-lasdns.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-lasgroup.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-lasip.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-lastod.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-lasuser.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-method.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-nseframe.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-nsautherr.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-oneeval.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-register.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-symbols.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-usi.lo: lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libaccess/libns_dshttpd_la-usrcache.lo: \ + lib/libaccess/$(am__dirstamp) \ + lib/libaccess/$(DEPDIR)/$(am__dirstamp) +lib/libadmin/$(am__dirstamp): + @$(MKDIR_P) lib/libadmin + @: > lib/libadmin/$(am__dirstamp) +lib/libadmin/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/libadmin/$(DEPDIR) + @: > lib/libadmin/$(DEPDIR)/$(am__dirstamp) +lib/libadmin/libns_dshttpd_la-error.lo: lib/libadmin/$(am__dirstamp) \ + lib/libadmin/$(DEPDIR)/$(am__dirstamp) +lib/libadmin/libns_dshttpd_la-template.lo: \ + lib/libadmin/$(am__dirstamp) \ + lib/libadmin/$(DEPDIR)/$(am__dirstamp) +lib/libadmin/libns_dshttpd_la-util.lo: lib/libadmin/$(am__dirstamp) \ + lib/libadmin/$(DEPDIR)/$(am__dirstamp) +lib/base/$(am__dirstamp): + @$(MKDIR_P) lib/base + @: > lib/base/$(am__dirstamp) +lib/base/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/base/$(DEPDIR) + @: > lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-crit.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-dns.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-dnsdmain.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-ereport.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-file.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-fsmutex.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-net.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-nscperror.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-plist.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-pool.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-shexp.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-system.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-systhr.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/base/libns_dshttpd_la-util.lo: lib/base/$(am__dirstamp) \ + lib/base/$(DEPDIR)/$(am__dirstamp) +lib/libsi18n/$(am__dirstamp): + @$(MKDIR_P) lib/libsi18n + @: > lib/libsi18n/$(am__dirstamp) +lib/libsi18n/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/libsi18n/$(DEPDIR) + @: > lib/libsi18n/$(DEPDIR)/$(am__dirstamp) +lib/libsi18n/libns_dshttpd_la-getstrprop.lo: \ + lib/libsi18n/$(am__dirstamp) \ + lib/libsi18n/$(DEPDIR)/$(am__dirstamp) +lib/libsi18n/libns_dshttpd_la-reshash.lo: \ + lib/libsi18n/$(am__dirstamp) \ + lib/libsi18n/$(DEPDIR)/$(am__dirstamp) +lib/libsi18n/libns_dshttpd_la-txtfile.lo: \ + lib/libsi18n/$(am__dirstamp) \ + lib/libsi18n/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libns_dshttpd_la-cert.lo: lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libns_dshttpd_la-certmap.lo: \ + lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libns_dshttpd_la-dbconf.lo: lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libns_dshttpd_la-encode.lo: lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libns_dshttpd_la-errors.lo: lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libns_dshttpd_la-init.lo: lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libns_dshttpd_la-ldapauth.lo: \ + lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) +lib/ldaputil/libns_dshttpd_la-vtable.lo: lib/ldaputil/$(am__dirstamp) \ + lib/ldaputil/$(DEPDIR)/$(am__dirstamp) + +libns-dshttpd.la: $(libns_dshttpd_la_OBJECTS) $(libns_dshttpd_la_DEPENDENCIES) $(EXTRA_libns_dshttpd_la_DEPENDENCIES) + $(AM_V_CXXLD)$(CXXLINK) -rpath $(serverdir) $(libns_dshttpd_la_OBJECTS) $(libns_dshttpd_la_LIBADD) $(LIBS) +ldap/servers/plugins/pam_passthru/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/pam_passthru + @: > ldap/servers/plugins/pam_passthru/$(am__dirstamp) +ldap/servers/plugins/pam_passthru/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/pam_passthru/$(DEPDIR) + @: > ldap/servers/plugins/pam_passthru/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptconfig.lo: \ + ldap/servers/plugins/pam_passthru/$(am__dirstamp) \ + ldap/servers/plugins/pam_passthru/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptdebug.lo: \ + ldap/servers/plugins/pam_passthru/$(am__dirstamp) \ + ldap/servers/plugins/pam_passthru/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptimpl.lo: \ + ldap/servers/plugins/pam_passthru/$(am__dirstamp) \ + ldap/servers/plugins/pam_passthru/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptpreop.lo: \ + ldap/servers/plugins/pam_passthru/$(am__dirstamp) \ + ldap/servers/plugins/pam_passthru/$(DEPDIR)/$(am__dirstamp) + +libpam-passthru-plugin.la: $(libpam_passthru_plugin_la_OBJECTS) $(libpam_passthru_plugin_la_DEPENDENCIES) $(EXTRA_libpam_passthru_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libpam_passthru_plugin_la_LINK) $(am_libpam_passthru_plugin_la_rpath) $(libpam_passthru_plugin_la_OBJECTS) $(libpam_passthru_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/passthru/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/passthru + @: > ldap/servers/plugins/passthru/$(am__dirstamp) +ldap/servers/plugins/passthru/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/passthru/$(DEPDIR) + @: > ldap/servers/plugins/passthru/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/passthru/libpassthru_plugin_la-ptbind.lo: \ + ldap/servers/plugins/passthru/$(am__dirstamp) \ + ldap/servers/plugins/passthru/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconfig.lo: \ + ldap/servers/plugins/passthru/$(am__dirstamp) \ + ldap/servers/plugins/passthru/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconn.lo: \ + ldap/servers/plugins/passthru/$(am__dirstamp) \ + ldap/servers/plugins/passthru/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/passthru/libpassthru_plugin_la-ptdebug.lo: \ + ldap/servers/plugins/passthru/$(am__dirstamp) \ + ldap/servers/plugins/passthru/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/passthru/libpassthru_plugin_la-ptpreop.lo: \ + ldap/servers/plugins/passthru/$(am__dirstamp) \ + ldap/servers/plugins/passthru/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/passthru/libpassthru_plugin_la-ptutil.lo: \ + ldap/servers/plugins/passthru/$(am__dirstamp) \ + ldap/servers/plugins/passthru/$(DEPDIR)/$(am__dirstamp) + +libpassthru-plugin.la: $(libpassthru_plugin_la_OBJECTS) $(libpassthru_plugin_la_DEPENDENCIES) $(EXTRA_libpassthru_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libpassthru_plugin_la_LINK) -rpath $(serverplugindir) $(libpassthru_plugin_la_OBJECTS) $(libpassthru_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/rever/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/rever + @: > ldap/servers/plugins/rever/$(am__dirstamp) +ldap/servers/plugins/rever/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/rever/$(DEPDIR) + @: > ldap/servers/plugins/rever/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/rever/libpbe_plugin_la-pbe.lo: \ + ldap/servers/plugins/rever/$(am__dirstamp) \ + ldap/servers/plugins/rever/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/rever/libpbe_plugin_la-rever.lo: \ + ldap/servers/plugins/rever/$(am__dirstamp) \ + ldap/servers/plugins/rever/$(DEPDIR)/$(am__dirstamp) + +libpbe-plugin.la: $(libpbe_plugin_la_OBJECTS) $(libpbe_plugin_la_DEPENDENCIES) $(EXTRA_libpbe_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libpbe_plugin_la_LINK) -rpath $(serverplugindir) $(libpbe_plugin_la_OBJECTS) $(libpbe_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/posix-winsync/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/posix-winsync + @: > ldap/servers/plugins/posix-winsync/$(am__dirstamp) +ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/posix-winsync/$(DEPDIR) + @: > ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo: \ + ldap/servers/plugins/posix-winsync/$(am__dirstamp) \ + ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo: \ + ldap/servers/plugins/posix-winsync/$(am__dirstamp) \ + ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo: \ + ldap/servers/plugins/posix-winsync/$(am__dirstamp) \ + ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo: \ + ldap/servers/plugins/posix-winsync/$(am__dirstamp) \ + ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp) + +libposix-winsync-plugin.la: $(libposix_winsync_plugin_la_OBJECTS) $(libposix_winsync_plugin_la_DEPENDENCIES) $(EXTRA_libposix_winsync_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libposix_winsync_plugin_la_LINK) $(am_libposix_winsync_plugin_la_rpath) $(libposix_winsync_plugin_la_OBJECTS) $(libposix_winsync_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/presence/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/presence + @: > ldap/servers/plugins/presence/$(am__dirstamp) +ldap/servers/plugins/presence/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/presence/$(DEPDIR) + @: > ldap/servers/plugins/presence/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/presence/libpresence_plugin_la-presence.lo: \ + ldap/servers/plugins/presence/$(am__dirstamp) \ + ldap/servers/plugins/presence/$(DEPDIR)/$(am__dirstamp) + +libpresence-plugin.la: $(libpresence_plugin_la_OBJECTS) $(libpresence_plugin_la_DEPENDENCIES) $(EXTRA_libpresence_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libpresence_plugin_la_LINK) $(am_libpresence_plugin_la_rpath) $(libpresence_plugin_la_OBJECTS) $(libpresence_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/pwdstorage/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/pwdstorage + @: > ldap/servers/plugins/pwdstorage/$(am__dirstamp) +ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/pwdstorage/$(DEPDIR) + @: > ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-clear_pwd.lo: \ + ldap/servers/plugins/pwdstorage/$(am__dirstamp) \ + ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-crypt_pwd.lo: \ + ldap/servers/plugins/pwdstorage/$(am__dirstamp) \ + ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5_pwd.lo: \ + ldap/servers/plugins/pwdstorage/$(am__dirstamp) \ + ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5c.lo: \ + ldap/servers/plugins/pwdstorage/$(am__dirstamp) \ + ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ns-mta-md5_pwd.lo: \ + ldap/servers/plugins/pwdstorage/$(am__dirstamp) \ + ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_init.lo: \ + ldap/servers/plugins/pwdstorage/$(am__dirstamp) \ + ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_util.lo: \ + ldap/servers/plugins/pwdstorage/$(am__dirstamp) \ + ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-sha_pwd.lo: \ + ldap/servers/plugins/pwdstorage/$(am__dirstamp) \ + ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-smd5_pwd.lo: \ + ldap/servers/plugins/pwdstorage/$(am__dirstamp) \ + ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ssha_pwd.lo: \ + ldap/servers/plugins/pwdstorage/$(am__dirstamp) \ + ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp) + +libpwdstorage-plugin.la: $(libpwdstorage_plugin_la_OBJECTS) $(libpwdstorage_plugin_la_DEPENDENCIES) $(EXTRA_libpwdstorage_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libpwdstorage_plugin_la_LINK) -rpath $(serverplugindir) $(libpwdstorage_plugin_la_OBJECTS) $(libpwdstorage_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/referint/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/referint + @: > ldap/servers/plugins/referint/$(am__dirstamp) +ldap/servers/plugins/referint/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/referint/$(DEPDIR) + @: > ldap/servers/plugins/referint/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/referint/libreferint_plugin_la-referint.lo: \ + ldap/servers/plugins/referint/$(am__dirstamp) \ + ldap/servers/plugins/referint/$(DEPDIR)/$(am__dirstamp) + +libreferint-plugin.la: $(libreferint_plugin_la_OBJECTS) $(libreferint_plugin_la_DEPENDENCIES) $(EXTRA_libreferint_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libreferint_plugin_la_LINK) -rpath $(serverplugindir) $(libreferint_plugin_la_OBJECTS) $(libreferint_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/replication/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/replication + @: > ldap/servers/plugins/replication/$(am__dirstamp) +ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/replication/$(DEPDIR) + @: > ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-cl5_api.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-cl5_clcache.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-cl5_config.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-cl5_init.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-cl_crypt.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-csnpl.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-legacy_consumer.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-llist.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_add.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_bind.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_compare.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_connext.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_controls.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_delete.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_entry.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_ext.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_extop.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_globals.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_init.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_modify.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_modrdn.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_monitor.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_objset.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_opext.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_ops.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_rootdse.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_search.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl_session_plugin.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmt.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmtlist.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_backoff.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_connection.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_inc_protocol.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_init.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_mtnode_ext.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_plugins.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol_util.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_config.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_dnhash.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_hash.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_ruv.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_schedule.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_tot_protocol.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_total.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_updatedn_list.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-replutil.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-urp.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-urp_glue.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-urp_tombstone.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-windows_connection.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-windows_inc_protocol.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-windows_private.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-windows_protocol_util.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/replication/libreplication_plugin_la-windows_tot_protocol.lo: \ + ldap/servers/plugins/replication/$(am__dirstamp) \ + ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) + +libreplication-plugin.la: $(libreplication_plugin_la_OBJECTS) $(libreplication_plugin_la_DEPENDENCIES) $(EXTRA_libreplication_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libreplication_plugin_la_LINK) -rpath $(serverplugindir) $(libreplication_plugin_la_OBJECTS) $(libreplication_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/retrocl/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/retrocl + @: > ldap/servers/plugins/retrocl/$(am__dirstamp) +ldap/servers/plugins/retrocl/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/retrocl/$(DEPDIR) + @: > ldap/servers/plugins/retrocl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl.lo: \ + ldap/servers/plugins/retrocl/$(am__dirstamp) \ + ldap/servers/plugins/retrocl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_cn.lo: \ + ldap/servers/plugins/retrocl/$(am__dirstamp) \ + ldap/servers/plugins/retrocl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_create.lo: \ + ldap/servers/plugins/retrocl/$(am__dirstamp) \ + ldap/servers/plugins/retrocl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_po.lo: \ + ldap/servers/plugins/retrocl/$(am__dirstamp) \ + ldap/servers/plugins/retrocl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_rootdse.lo: \ + ldap/servers/plugins/retrocl/$(am__dirstamp) \ + ldap/servers/plugins/retrocl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_trim.lo: \ + ldap/servers/plugins/retrocl/$(am__dirstamp) \ + ldap/servers/plugins/retrocl/$(DEPDIR)/$(am__dirstamp) + +libretrocl-plugin.la: $(libretrocl_plugin_la_OBJECTS) $(libretrocl_plugin_la_DEPENDENCIES) $(EXTRA_libretrocl_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libretrocl_plugin_la_LINK) -rpath $(serverplugindir) $(libretrocl_plugin_la_OBJECTS) $(libretrocl_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/roles/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/roles + @: > ldap/servers/plugins/roles/$(am__dirstamp) +ldap/servers/plugins/roles/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/roles/$(DEPDIR) + @: > ldap/servers/plugins/roles/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/roles/libroles_plugin_la-roles_cache.lo: \ + ldap/servers/plugins/roles/$(am__dirstamp) \ + ldap/servers/plugins/roles/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/roles/libroles_plugin_la-roles_plugin.lo: \ + ldap/servers/plugins/roles/$(am__dirstamp) \ + ldap/servers/plugins/roles/$(DEPDIR)/$(am__dirstamp) + +libroles-plugin.la: $(libroles_plugin_la_OBJECTS) $(libroles_plugin_la_DEPENDENCIES) $(EXTRA_libroles_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libroles_plugin_la_LINK) -rpath $(serverplugindir) $(libroles_plugin_la_OBJECTS) $(libroles_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/rootdn_access/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/rootdn_access + @: > ldap/servers/plugins/rootdn_access/$(am__dirstamp) +ldap/servers/plugins/rootdn_access/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/rootdn_access/$(DEPDIR) + @: > ldap/servers/plugins/rootdn_access/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/rootdn_access/librootdn_access_plugin_la-rootdn_access.lo: \ + ldap/servers/plugins/rootdn_access/$(am__dirstamp) \ + ldap/servers/plugins/rootdn_access/$(DEPDIR)/$(am__dirstamp) + +librootdn-access-plugin.la: $(librootdn_access_plugin_la_OBJECTS) $(librootdn_access_plugin_la_DEPENDENCIES) $(EXTRA_librootdn_access_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(librootdn_access_plugin_la_LINK) -rpath $(serverplugindir) $(librootdn_access_plugin_la_OBJECTS) $(librootdn_access_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/schema_reload/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/schema_reload + @: > ldap/servers/plugins/schema_reload/$(am__dirstamp) +ldap/servers/plugins/schema_reload/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/schema_reload/$(DEPDIR) + @: > ldap/servers/plugins/schema_reload/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/schema_reload/libschemareload_plugin_la-schema_reload.lo: \ + ldap/servers/plugins/schema_reload/$(am__dirstamp) \ + ldap/servers/plugins/schema_reload/$(DEPDIR)/$(am__dirstamp) + +libschemareload-plugin.la: $(libschemareload_plugin_la_OBJECTS) $(libschemareload_plugin_la_DEPENDENCIES) $(EXTRA_libschemareload_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libschemareload_plugin_la_LINK) -rpath $(serverplugindir) $(libschemareload_plugin_la_OBJECTS) $(libschemareload_plugin_la_LIBADD) $(LIBS) +ldap/servers/slapd/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/slapd + @: > ldap/servers/slapd/$(am__dirstamp) +ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/slapd/$(DEPDIR) + @: > ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-add.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-agtmmap.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-apibroker.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-attr.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-attrlist.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-attrsyntax.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-auditlog.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-ava.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-backend.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-backend_manager.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-bitset.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-bulk_import.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-charray.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-ch_malloc.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-computed.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-control.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-counters.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-csn.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-csngen.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-csnset.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-defbackend.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-delete.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-dl.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-dn.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-dse.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-dynalib.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-entry.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-entrywsi.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-errormap.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-eventq.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-factory.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-features.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-fileio.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-filter.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-filtercmp.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-filterentry.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-generation.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-getfilelist.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-index_subsystem.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-ldaputil.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-lenstr.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-libglobs.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-localhost.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-log.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-mapping_tree.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-match.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-modify.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-modrdn.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-modutil.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-object.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-objset.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-operation.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-opshared.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-pagedresults.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-pblock.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-plugin.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-plugin_acl.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-plugin_internal_op.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-plugin_mr.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-plugin_role.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-plugin_syntax.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-protect_db.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-proxyauth.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-pw.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-pw_retry.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-rdn.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-referral.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-regex.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-resourcelimit.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-result.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-sasl_map.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-schema.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-schemaparse.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-security_wrappers.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-slapd_plhash.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-slapi_counter.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-slapi2nspr.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-snmp_collator.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-sort.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-ssl.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-str2filter.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-subentry.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-task.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-time.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-thread_data.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-uniqueid.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-uniqueidgen.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-utf8.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-utf8compare.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-util.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-uuid.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-value.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-valueset.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-vattr.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/libraries/libavl/libslapd_la-avl.lo: \ + ldap/libraries/libavl/$(am__dirstamp) \ + ldap/libraries/libavl/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/libslapd_la-slapi_counter_sunos_sparcv9.lo: \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) + +libslapd.la: $(libslapd_la_OBJECTS) $(libslapd_la_DEPENDENCIES) $(EXTRA_libslapd_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(serverdir) $(libslapd_la_OBJECTS) $(libslapd_la_LIBADD) $(LIBS) +ldap/servers/plugins/statechange/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/statechange + @: > ldap/servers/plugins/statechange/$(am__dirstamp) +ldap/servers/plugins/statechange/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/statechange/$(DEPDIR) + @: > ldap/servers/plugins/statechange/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/statechange/libstatechange_plugin_la-statechange.lo: \ + ldap/servers/plugins/statechange/$(am__dirstamp) \ + ldap/servers/plugins/statechange/$(DEPDIR)/$(am__dirstamp) + +libstatechange-plugin.la: $(libstatechange_plugin_la_OBJECTS) $(libstatechange_plugin_la_DEPENDENCIES) $(EXTRA_libstatechange_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libstatechange_plugin_la_LINK) -rpath $(serverplugindir) $(libstatechange_plugin_la_OBJECTS) $(libstatechange_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/syntaxes/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/syntaxes + @: > ldap/servers/plugins/syntaxes/$(am__dirstamp) +ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/syntaxes/$(DEPDIR) + @: > ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bin.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bitstring.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-ces.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-cis.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-debug.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-dn.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-deliverymethod.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-facsimile.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-guide.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-int.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-nameoptuid.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-numericstring.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-phonetic.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-sicis.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-string.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-syntax_common.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-tel.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-telex.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-teletex.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate_task.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-value.lo: \ + ldap/servers/plugins/syntaxes/$(am__dirstamp) \ + ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) + +libsyntax-plugin.la: $(libsyntax_plugin_la_OBJECTS) $(libsyntax_plugin_la_DEPENDENCIES) $(EXTRA_libsyntax_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libsyntax_plugin_la_LINK) -rpath $(serverplugindir) $(libsyntax_plugin_la_OBJECTS) $(libsyntax_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/usn/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/usn + @: > ldap/servers/plugins/usn/$(am__dirstamp) +ldap/servers/plugins/usn/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/usn/$(DEPDIR) + @: > ldap/servers/plugins/usn/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/usn/libusn_plugin_la-usn.lo: \ + ldap/servers/plugins/usn/$(am__dirstamp) \ + ldap/servers/plugins/usn/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/usn/libusn_plugin_la-usn_cleanup.lo: \ + ldap/servers/plugins/usn/$(am__dirstamp) \ + ldap/servers/plugins/usn/$(DEPDIR)/$(am__dirstamp) + +libusn-plugin.la: $(libusn_plugin_la_OBJECTS) $(libusn_plugin_la_DEPENDENCIES) $(EXTRA_libusn_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libusn_plugin_la_LINK) -rpath $(serverplugindir) $(libusn_plugin_la_OBJECTS) $(libusn_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/views/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/views + @: > ldap/servers/plugins/views/$(am__dirstamp) +ldap/servers/plugins/views/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/views/$(DEPDIR) + @: > ldap/servers/plugins/views/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/views/libviews_plugin_la-views.lo: \ + ldap/servers/plugins/views/$(am__dirstamp) \ + ldap/servers/plugins/views/$(DEPDIR)/$(am__dirstamp) + +libviews-plugin.la: $(libviews_plugin_la_OBJECTS) $(libviews_plugin_la_DEPENDENCIES) $(EXTRA_libviews_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libviews_plugin_la_LINK) -rpath $(serverplugindir) $(libviews_plugin_la_OBJECTS) $(libviews_plugin_la_LIBADD) $(LIBS) +ldap/servers/plugins/whoami/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/whoami + @: > ldap/servers/plugins/whoami/$(am__dirstamp) +ldap/servers/plugins/whoami/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/plugins/whoami/$(DEPDIR) + @: > ldap/servers/plugins/whoami/$(DEPDIR)/$(am__dirstamp) +ldap/servers/plugins/whoami/libwhoami_plugin_la-whoami.lo: \ + ldap/servers/plugins/whoami/$(am__dirstamp) \ + ldap/servers/plugins/whoami/$(DEPDIR)/$(am__dirstamp) + +libwhoami-plugin.la: $(libwhoami_plugin_la_OBJECTS) $(libwhoami_plugin_la_DEPENDENCIES) $(EXTRA_libwhoami_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libwhoami_plugin_la_LINK) -rpath $(serverplugindir) $(libwhoami_plugin_la_OBJECTS) $(libwhoami_plugin_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sbindir)" && rm -f $$files + +clean-sbinPROGRAMS: + @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +ldap/servers/slapd/tools/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/slapd/tools + @: > ldap/servers/slapd/tools/$(am__dirstamp) +ldap/servers/slapd/tools/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/slapd/tools/$(DEPDIR) + @: > ldap/servers/slapd/tools/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/dbscan_bin-dbscan.$(OBJEXT): \ + ldap/servers/slapd/tools/$(am__dirstamp) \ + ldap/servers/slapd/tools/$(DEPDIR)/$(am__dirstamp) + +dbscan-bin$(EXEEXT): $(dbscan_bin_OBJECTS) $(dbscan_bin_DEPENDENCIES) $(EXTRA_dbscan_bin_DEPENDENCIES) + @rm -f dbscan-bin$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dbscan_bin_OBJECTS) $(dbscan_bin_LDADD) $(LIBS) +ldap/systools/$(am__dirstamp): + @$(MKDIR_P) ldap/systools + @: > ldap/systools/$(am__dirstamp) +ldap/systools/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/systools/$(DEPDIR) + @: > ldap/systools/$(DEPDIR)/$(am__dirstamp) +ldap/systools/idsktune.$(OBJEXT): ldap/systools/$(am__dirstamp) \ + ldap/systools/$(DEPDIR)/$(am__dirstamp) +ldap/systools/pio.$(OBJEXT): ldap/systools/$(am__dirstamp) \ + ldap/systools/$(DEPDIR)/$(am__dirstamp) + +dsktune-bin$(EXEEXT): $(dsktune_bin_OBJECTS) $(dsktune_bin_DEPENDENCIES) $(EXTRA_dsktune_bin_DEPENDENCIES) + @rm -f dsktune-bin$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dsktune_bin_OBJECTS) $(dsktune_bin_LDADD) $(LIBS) +ldap/servers/slapd/tools/rsearch/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/slapd/tools/rsearch + @: > ldap/servers/slapd/tools/rsearch/$(am__dirstamp) +ldap/servers/slapd/tools/rsearch/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/slapd/tools/rsearch/$(DEPDIR) + @: > ldap/servers/slapd/tools/rsearch/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/rsearch/infadd_bin-addthread.$(OBJEXT): \ + ldap/servers/slapd/tools/rsearch/$(am__dirstamp) \ + ldap/servers/slapd/tools/rsearch/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/rsearch/infadd_bin-infadd.$(OBJEXT): \ + ldap/servers/slapd/tools/rsearch/$(am__dirstamp) \ + ldap/servers/slapd/tools/rsearch/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/rsearch/infadd_bin-nametable.$(OBJEXT): \ + ldap/servers/slapd/tools/rsearch/$(am__dirstamp) \ + ldap/servers/slapd/tools/rsearch/$(DEPDIR)/$(am__dirstamp) + +infadd-bin$(EXEEXT): $(infadd_bin_OBJECTS) $(infadd_bin_DEPENDENCIES) $(EXTRA_infadd_bin_DEPENDENCIES) + @rm -f infadd-bin$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(infadd_bin_OBJECTS) $(infadd_bin_LDADD) $(LIBS) +ldap/servers/snmp/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/snmp + @: > ldap/servers/snmp/$(am__dirstamp) +ldap/servers/snmp/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/snmp/$(DEPDIR) + @: > ldap/servers/snmp/$(DEPDIR)/$(am__dirstamp) +ldap/servers/snmp/ldap_agent_bin-main.$(OBJEXT): \ + ldap/servers/snmp/$(am__dirstamp) \ + ldap/servers/snmp/$(DEPDIR)/$(am__dirstamp) +ldap/servers/snmp/ldap_agent_bin-ldap-agent.$(OBJEXT): \ + ldap/servers/snmp/$(am__dirstamp) \ + ldap/servers/snmp/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ldap_agent_bin-agtmmap.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) + +ldap-agent-bin$(EXEEXT): $(ldap_agent_bin_OBJECTS) $(ldap_agent_bin_DEPENDENCIES) $(EXTRA_ldap_agent_bin_DEPENDENCIES) + @rm -f ldap-agent-bin$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(ldap_agent_bin_OBJECTS) $(ldap_agent_bin_LDADD) $(LIBS) +ldap/servers/slapd/tools/ldclt_bin-ldaptool-sasl.$(OBJEXT): \ + ldap/servers/slapd/tools/$(am__dirstamp) \ + ldap/servers/slapd/tools/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/slapd/tools/ldclt + @: > ldap/servers/slapd/tools/ldclt/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ldap/servers/slapd/tools/ldclt/$(DEPDIR) + @: > ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/ldclt_bin-data.$(OBJEXT): \ + ldap/servers/slapd/tools/ldclt/$(am__dirstamp) \ + ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/ldclt_bin-ldapfct.$(OBJEXT): \ + ldap/servers/slapd/tools/ldclt/$(am__dirstamp) \ + ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/ldclt_bin-ldclt.$(OBJEXT): \ + ldap/servers/slapd/tools/ldclt/$(am__dirstamp) \ + ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/ldclt_bin-ldcltU.$(OBJEXT): \ + ldap/servers/slapd/tools/ldclt/$(am__dirstamp) \ + ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/ldclt_bin-parser.$(OBJEXT): \ + ldap/servers/slapd/tools/ldclt/$(am__dirstamp) \ + ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/ldclt_bin-port.$(OBJEXT): \ + ldap/servers/slapd/tools/ldclt/$(am__dirstamp) \ + ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/ldclt_bin-scalab01.$(OBJEXT): \ + ldap/servers/slapd/tools/ldclt/$(am__dirstamp) \ + ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/ldclt_bin-threadMain.$(OBJEXT): \ + ldap/servers/slapd/tools/ldclt/$(am__dirstamp) \ + ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/ldclt_bin-utils.$(OBJEXT): \ + ldap/servers/slapd/tools/ldclt/$(am__dirstamp) \ + ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/ldclt_bin-version.$(OBJEXT): \ + ldap/servers/slapd/tools/ldclt/$(am__dirstamp) \ + ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/ldclt_bin-workarounds.$(OBJEXT): \ + ldap/servers/slapd/tools/ldclt/$(am__dirstamp) \ + ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/ldclt/ldclt_bin-opCheck.$(OBJEXT): \ + ldap/servers/slapd/tools/ldclt/$(am__dirstamp) \ + ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) + +ldclt-bin$(EXEEXT): $(ldclt_bin_OBJECTS) $(ldclt_bin_DEPENDENCIES) $(EXTRA_ldclt_bin_DEPENDENCIES) + @rm -f ldclt-bin$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(ldclt_bin_OBJECTS) $(ldclt_bin_LDADD) $(LIBS) +ldap/servers/slapd/tools/ldif_bin-ldif.$(OBJEXT): \ + ldap/servers/slapd/tools/$(am__dirstamp) \ + ldap/servers/slapd/tools/$(DEPDIR)/$(am__dirstamp) + +ldif-bin$(EXEEXT): $(ldif_bin_OBJECTS) $(ldif_bin_DEPENDENCIES) $(EXTRA_ldif_bin_DEPENDENCIES) + @rm -f ldif-bin$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(ldif_bin_OBJECTS) $(ldif_bin_LDADD) $(LIBS) +lib/libsi18n/makstrdb-makstrdb.$(OBJEXT): \ + lib/libsi18n/$(am__dirstamp) \ + lib/libsi18n/$(DEPDIR)/$(am__dirstamp) + +makstrdb$(EXEEXT): $(makstrdb_OBJECTS) $(makstrdb_DEPENDENCIES) $(EXTRA_makstrdb_DEPENDENCIES) + @rm -f makstrdb$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(makstrdb_OBJECTS) $(makstrdb_LDADD) $(LIBS) +ldap/servers/slapd/tools/migratecred_bin-migratecred.$(OBJEXT): \ + ldap/servers/slapd/tools/$(am__dirstamp) \ + ldap/servers/slapd/tools/$(DEPDIR)/$(am__dirstamp) + +migratecred-bin$(EXEEXT): $(migratecred_bin_OBJECTS) $(migratecred_bin_DEPENDENCIES) $(EXTRA_migratecred_bin_DEPENDENCIES) + @rm -f migratecred-bin$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(migratecred_bin_OBJECTS) $(migratecred_bin_LDADD) $(LIBS) +ldap/servers/slapd/tools/mmldif_bin-mmldif.$(OBJEXT): \ + ldap/servers/slapd/tools/$(am__dirstamp) \ + ldap/servers/slapd/tools/$(DEPDIR)/$(am__dirstamp) + +mmldif-bin$(EXEEXT): $(mmldif_bin_OBJECTS) $(mmldif_bin_DEPENDENCIES) $(EXTRA_mmldif_bin_DEPENDENCIES) + @rm -f mmldif-bin$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(mmldif_bin_OBJECTS) $(mmldif_bin_LDADD) $(LIBS) +ldap/servers/slapd/ns_slapd-abandon.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-auth.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-bind.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-compare.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-config.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-configdse.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-connection.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-conntable.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-daemon.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-detach.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-extendop.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-fedse.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-fileio.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-getopt_ext.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-globals.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-house.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-init.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-main.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-monitor.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-passwd_extop.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-psearch.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-pw_mgmt.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-rootdse.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-sasl_io.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-saslbind.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-search.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-start_tls_extop.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-strdup.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-stubs.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-tempnam.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-unbind.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/ns_slapd-getsocketpeer.$(OBJEXT): \ + ldap/servers/slapd/$(am__dirstamp) \ + ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) + +ns-slapd$(EXEEXT): $(ns_slapd_OBJECTS) $(ns_slapd_DEPENDENCIES) $(EXTRA_ns_slapd_DEPENDENCIES) + @rm -f ns-slapd$(EXEEXT) + $(AM_V_GEN)$(ns_slapd_LINK) $(ns_slapd_OBJECTS) $(ns_slapd_LDADD) $(LIBS) +ldap/servers/slapd/tools/pwdhash_bin-pwenc.$(OBJEXT): \ + ldap/servers/slapd/tools/$(am__dirstamp) \ + ldap/servers/slapd/tools/$(DEPDIR)/$(am__dirstamp) + +pwdhash-bin$(EXEEXT): $(pwdhash_bin_OBJECTS) $(pwdhash_bin_DEPENDENCIES) $(EXTRA_pwdhash_bin_DEPENDENCIES) + @rm -f pwdhash-bin$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(pwdhash_bin_OBJECTS) $(pwdhash_bin_LDADD) $(LIBS) +ldap/servers/slapd/tools/rsearch/rsearch_bin-nametable.$(OBJEXT): \ + ldap/servers/slapd/tools/rsearch/$(am__dirstamp) \ + ldap/servers/slapd/tools/rsearch/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/rsearch/rsearch_bin-rsearch.$(OBJEXT): \ + ldap/servers/slapd/tools/rsearch/$(am__dirstamp) \ + ldap/servers/slapd/tools/rsearch/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/rsearch/rsearch_bin-sdattable.$(OBJEXT): \ + ldap/servers/slapd/tools/rsearch/$(am__dirstamp) \ + ldap/servers/slapd/tools/rsearch/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/tools/rsearch/rsearch_bin-searchthread.$(OBJEXT): \ + ldap/servers/slapd/tools/rsearch/$(am__dirstamp) \ + ldap/servers/slapd/tools/rsearch/$(DEPDIR)/$(am__dirstamp) + +rsearch-bin$(EXEEXT): $(rsearch_bin_OBJECTS) $(rsearch_bin_DEPENDENCIES) $(EXTRA_rsearch_bin_DEPENDENCIES) + @rm -f rsearch-bin$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(rsearch_bin_OBJECTS) $(rsearch_bin_LDADD) $(LIBS) +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) +install-initSCRIPTS: $(init_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(init_SCRIPTS)'; test -n "$(initdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(initdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(initdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(initdir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(initdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-initSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(init_SCRIPTS)'; test -n "$(initdir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(initdir)'; $(am__uninstall_files_from_dir) +install-sbinSCRIPTS: $(sbin_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-sbinSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(sbindir)'; $(am__uninstall_files_from_dir) +install-taskSCRIPTS: $(task_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(task_SCRIPTS)'; test -n "$(taskdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(taskdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(taskdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(taskdir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(taskdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-taskSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(task_SCRIPTS)'; test -n "$(taskdir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(taskdir)'; $(am__uninstall_files_from_dir) +install-updateSCRIPTS: $(update_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(update_SCRIPTS)'; test -n "$(updatedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(updatedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(updatedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(updatedir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(updatedir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-updateSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(update_SCRIPTS)'; test -n "$(updatedir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(updatedir)'; $(am__uninstall_files_from_dir) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f ldap/libraries/libavl/*.$(OBJEXT) + -rm -f ldap/libraries/libavl/*.lo + -rm -f ldap/servers/plugins/acct_usability/*.$(OBJEXT) + -rm -f ldap/servers/plugins/acct_usability/*.lo + -rm -f ldap/servers/plugins/acctpolicy/*.$(OBJEXT) + -rm -f ldap/servers/plugins/acctpolicy/*.lo + -rm -f ldap/servers/plugins/acl/*.$(OBJEXT) + -rm -f ldap/servers/plugins/acl/*.lo + -rm -f ldap/servers/plugins/automember/*.$(OBJEXT) + -rm -f ldap/servers/plugins/automember/*.lo + -rm -f ldap/servers/plugins/bitwise/*.$(OBJEXT) + -rm -f ldap/servers/plugins/bitwise/*.lo + -rm -f ldap/servers/plugins/chainingdb/*.$(OBJEXT) + -rm -f ldap/servers/plugins/chainingdb/*.lo + -rm -f ldap/servers/plugins/collation/*.$(OBJEXT) + -rm -f ldap/servers/plugins/collation/*.lo + -rm -f ldap/servers/plugins/cos/*.$(OBJEXT) + -rm -f ldap/servers/plugins/cos/*.lo + -rm -f ldap/servers/plugins/deref/*.$(OBJEXT) + -rm -f ldap/servers/plugins/deref/*.lo + -rm -f ldap/servers/plugins/distrib/*.$(OBJEXT) + -rm -f ldap/servers/plugins/distrib/*.lo + -rm -f ldap/servers/plugins/dna/*.$(OBJEXT) + -rm -f ldap/servers/plugins/dna/*.lo + -rm -f ldap/servers/plugins/http/*.$(OBJEXT) + -rm -f ldap/servers/plugins/http/*.lo + -rm -f ldap/servers/plugins/linkedattrs/*.$(OBJEXT) + -rm -f ldap/servers/plugins/linkedattrs/*.lo + -rm -f ldap/servers/plugins/memberof/*.$(OBJEXT) + -rm -f ldap/servers/plugins/memberof/*.lo + -rm -f ldap/servers/plugins/mep/*.$(OBJEXT) + -rm -f ldap/servers/plugins/mep/*.lo + -rm -f ldap/servers/plugins/pam_passthru/*.$(OBJEXT) + -rm -f ldap/servers/plugins/pam_passthru/*.lo + -rm -f ldap/servers/plugins/passthru/*.$(OBJEXT) + -rm -f ldap/servers/plugins/passthru/*.lo + -rm -f ldap/servers/plugins/posix-winsync/*.$(OBJEXT) + -rm -f ldap/servers/plugins/posix-winsync/*.lo + -rm -f ldap/servers/plugins/presence/*.$(OBJEXT) + -rm -f ldap/servers/plugins/presence/*.lo + -rm -f ldap/servers/plugins/pwdstorage/*.$(OBJEXT) + -rm -f ldap/servers/plugins/pwdstorage/*.lo + -rm -f ldap/servers/plugins/referint/*.$(OBJEXT) + -rm -f ldap/servers/plugins/referint/*.lo + -rm -f ldap/servers/plugins/replication/*.$(OBJEXT) + -rm -f ldap/servers/plugins/replication/*.lo + -rm -f ldap/servers/plugins/retrocl/*.$(OBJEXT) + -rm -f ldap/servers/plugins/retrocl/*.lo + -rm -f ldap/servers/plugins/rever/*.$(OBJEXT) + -rm -f ldap/servers/plugins/rever/*.lo + -rm -f ldap/servers/plugins/roles/*.$(OBJEXT) + -rm -f ldap/servers/plugins/roles/*.lo + -rm -f ldap/servers/plugins/rootdn_access/*.$(OBJEXT) + -rm -f ldap/servers/plugins/rootdn_access/*.lo + -rm -f ldap/servers/plugins/schema_reload/*.$(OBJEXT) + -rm -f ldap/servers/plugins/schema_reload/*.lo + -rm -f ldap/servers/plugins/statechange/*.$(OBJEXT) + -rm -f ldap/servers/plugins/statechange/*.lo + -rm -f ldap/servers/plugins/sync/*.$(OBJEXT) + -rm -f ldap/servers/plugins/sync/*.lo + -rm -f ldap/servers/plugins/syntaxes/*.$(OBJEXT) + -rm -f ldap/servers/plugins/syntaxes/*.lo + -rm -f ldap/servers/plugins/uiduniq/*.$(OBJEXT) + -rm -f ldap/servers/plugins/uiduniq/*.lo + -rm -f ldap/servers/plugins/usn/*.$(OBJEXT) + -rm -f ldap/servers/plugins/usn/*.lo + -rm -f ldap/servers/plugins/views/*.$(OBJEXT) + -rm -f ldap/servers/plugins/views/*.lo + -rm -f ldap/servers/plugins/whoami/*.$(OBJEXT) + -rm -f ldap/servers/plugins/whoami/*.lo + -rm -f ldap/servers/slapd/*.$(OBJEXT) + -rm -f ldap/servers/slapd/*.lo + -rm -f ldap/servers/slapd/back-ldbm/*.$(OBJEXT) + -rm -f ldap/servers/slapd/back-ldbm/*.lo + -rm -f ldap/servers/slapd/tools/*.$(OBJEXT) + -rm -f ldap/servers/slapd/tools/ldclt/*.$(OBJEXT) + -rm -f ldap/servers/slapd/tools/rsearch/*.$(OBJEXT) + -rm -f ldap/servers/snmp/*.$(OBJEXT) + -rm -f ldap/systools/*.$(OBJEXT) + -rm -f lib/base/*.$(OBJEXT) + -rm -f lib/base/*.lo + -rm -f lib/ldaputil/*.$(OBJEXT) + -rm -f lib/ldaputil/*.lo + -rm -f lib/libaccess/*.$(OBJEXT) + -rm -f lib/libaccess/*.lo + -rm -f lib/libadmin/*.$(OBJEXT) + -rm -f lib/libadmin/*.lo + -rm -f lib/libsi18n/*.$(OBJEXT) + -rm -f lib/libsi18n/*.lo + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@ldap/libraries/libavl/$(DEPDIR)/avl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/libraries/libavl/$(DEPDIR)/libslapd_la-avl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acct_usability/$(DEPDIR)/libacctusability_plugin_la-acct_usability.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_config.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_plugin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acl_ext.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclanom.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acleffectiverights.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclgroup.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclinit.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acllas.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acllist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclparse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclplugin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclutil.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/automember/$(DEPDIR)/libautomember_plugin_la-automember.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/bitwise/$(DEPDIR)/libbitwise_plugin_la-bitwise.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_abandon.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_acl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_add.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_bind.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_cleanup.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_close.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_compare.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_config.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_conn_stateless.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_controls.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_debug.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_delete.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_instance.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_modify.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_modrdn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_monitor.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_schema.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_search.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_size.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_start.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_temp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_test.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_unbind.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/collation/$(DEPDIR)/libcollation_plugin_la-collate.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/collation/$(DEPDIR)/libcollation_plugin_la-config.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/collation/$(DEPDIR)/libcollation_plugin_la-orfilter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/cos/$(DEPDIR)/libcos_plugin_la-cos.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/cos/$(DEPDIR)/libcos_plugin_la-cos_cache.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/deref/$(DEPDIR)/libderef_plugin_la-deref.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/distrib/$(DEPDIR)/libdistrib_plugin_la-distrib.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/dna/$(DEPDIR)/libdna_plugin_la-dna.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/http/$(DEPDIR)/libhttp_client_plugin_la-http_client.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/http/$(DEPDIR)/libhttp_client_plugin_la-http_impl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/linkedattrs/$(DEPDIR)/liblinkedattrs_plugin_la-fixup_task.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/linkedattrs/$(DEPDIR)/liblinkedattrs_plugin_la-linked_attrs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/memberof/$(DEPDIR)/libmemberof_plugin_la-memberof.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/memberof/$(DEPDIR)/libmemberof_plugin_la-memberof_config.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/mep/$(DEPDIR)/libmanagedentries_plugin_la-mep.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptconfig.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptdebug.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptimpl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptpreop.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptbind.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptconfig.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptconn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptdebug.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptpreop.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptutil.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-func.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-task.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync-config.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/presence/$(DEPDIR)/libpresence_plugin_la-presence.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-clear_pwd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-crypt_pwd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-md5_pwd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-md5c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-ns-mta-md5_pwd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-pwd_init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-pwd_util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-sha_pwd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-smd5_pwd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-ssha_pwd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/referint/$(DEPDIR)/libreferint_plugin_la-referint.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_api.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_clcache.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_config.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl_crypt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-csnpl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-legacy_consumer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-llist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_agmt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_agmtlist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_backoff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_connection.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_inc_protocol.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_mtnode_ext.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_plugins.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_protocol.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_protocol_util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica_config.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica_dnhash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica_hash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_ruv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_schedule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_tot_protocol.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_total.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_updatedn_list.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_add.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_bind.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_compare.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_connext.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_controls.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_delete.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_entry.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_ext.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_extop.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_globals.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_modify.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_modrdn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_monitor.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_objset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_opext.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_ops.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_rootdse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_search.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_session_plugin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-replutil.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-urp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-urp_glue.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-urp_tombstone.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_connection.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_inc_protocol.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_private.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_protocol_util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_tot_protocol.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_cn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_create.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_po.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_rootdse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_trim.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/rever/$(DEPDIR)/libpbe_plugin_la-pbe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/rever/$(DEPDIR)/libpbe_plugin_la-rever.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/roles/$(DEPDIR)/libroles_plugin_la-roles_cache.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/roles/$(DEPDIR)/libroles_plugin_la-roles_plugin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/rootdn_access/$(DEPDIR)/librootdn_access_plugin_la-rootdn_access.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/schema_reload/$(DEPDIR)/libschemareload_plugin_la-schema_reload.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/statechange/$(DEPDIR)/libstatechange_plugin_la-statechange.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_persist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_refresh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-bin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-bitstring.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-ces.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-cis.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-debug.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-deliverymethod.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-dn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-facsimile.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-guide.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-int.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-nameoptuid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-numericstring.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-phonetic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-sicis.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-string.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-syntax_common.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-tel.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-teletex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-telex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-validate.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-validate_task.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-value.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/uiduniq/$(DEPDIR)/libattr_unique_plugin_la-7bit.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/uiduniq/$(DEPDIR)/libattr_unique_plugin_la-uid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/uiduniq/$(DEPDIR)/libattr_unique_plugin_la-utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/usn/$(DEPDIR)/libusn_plugin_la-usn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/usn/$(DEPDIR)/libusn_plugin_la-usn_cleanup.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/views/$(DEPDIR)/libviews_plugin_la-views.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/whoami/$(DEPDIR)/libwhoami_plugin_la-whoami.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ldap_agent_bin-agtmmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-add.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-agtmmap.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-apibroker.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-attr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-attrlist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-attrsyntax.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-auditlog.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-ava.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-backend.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-backend_manager.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-bitset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-bulk_import.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-ch_malloc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-charray.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-computed.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-control.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-counters.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-csn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-csngen.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-csnset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-defbackend.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-delete.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-dl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-dn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-dse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-dynalib.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-entry.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-entrywsi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-errormap.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-eventq.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-factory.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-features.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-fileio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-filter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-filtercmp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-filterentry.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-generation.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-getfilelist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-index_subsystem.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-ldaputil.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-lenstr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-libglobs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-localhost.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-log.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-mapping_tree.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-match.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-modify.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-modrdn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-modutil.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-object.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-objset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-operation.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-opshared.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-pagedresults.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-pblock.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_acl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_internal_op.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_mr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_role.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_syntax.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-protect_db.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-proxyauth.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-pw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-pw_retry.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-rdn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-referral.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-regex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-resourcelimit.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-result.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-sasl_map.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-schema.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-schemaparse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-security_wrappers.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapd_plhash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapi2nspr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapi_counter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapi_counter_sunos_sparcv9.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-snmp_collator.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-sort.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-ssl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-str2filter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-subentry.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-task.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-thread_data.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-time.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-uniqueid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-uniqueidgen.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-utf8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-utf8compare.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-uuid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-value.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-valueset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/libslapd_la-vattr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-abandon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-auth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-bind.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-compare.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-configdse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-connection.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-conntable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-daemon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-detach.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-extendop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-fedse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-fileio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-getopt_ext.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-getsocketpeer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-globals.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-house.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-monitor.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-passwd_extop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-psearch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-pw_mgmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-rootdse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-sasl_io.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-saslbind.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-search.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-start_tls_extop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-strdup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-stubs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-tempnam.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/$(DEPDIR)/ns_slapd-unbind.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ancestorid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-archive.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-backentry.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-cache.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-cleanup.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-close.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbhelp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dblayer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbsize.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbverify.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbversion.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dn2entry.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-entrystore.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-filterindex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-findentry.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-haschildren.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-id2entry.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl_common.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl_new.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl_shim.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-import-merge.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-import-threads.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-import.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-index.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-instance.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_abandon.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_add.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_attr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_attrcrypt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_attrcrypt_config.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_bind.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_compare.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_config.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_delete.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_entryrdn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_index_config.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_instance_config.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_modify.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_modrdn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_search.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_unbind.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_usn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldif2ldbm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-matchrule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-misc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-monitor.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-nextid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-parents.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-perfctrs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-rmdb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-seq.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-sort.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-start.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-uniqueid2entry.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-upgrade.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-vlv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-vlv_key.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-vlv_srch.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/$(DEPDIR)/dbscan_bin-dbscan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/$(DEPDIR)/ldclt_bin-ldaptool-sasl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/$(DEPDIR)/ldif_bin-ldif.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/$(DEPDIR)/migratecred_bin-migratecred.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/$(DEPDIR)/mmldif_bin-mmldif.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/$(DEPDIR)/pwdhash_bin-pwenc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-data.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldapfct.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldclt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldcltU.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-opCheck.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-parser.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-port.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-scalab01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-threadMain.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-utils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-version.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-workarounds.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-addthread.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-infadd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-nametable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-nametable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-rsearch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-sdattable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-searchthread.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-ldap-agent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/systools/$(DEPDIR)/idsktune.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ldap/systools/$(DEPDIR)/pio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-crit.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-dns.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-dnsdmain.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-ereport.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-file.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-fsmutex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-net.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-nscperror.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-plist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-pool.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-shexp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-system.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-systhr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/base/$(DEPDIR)/libns_dshttpd_la-util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libldaputil_a-cert.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libldaputil_a-certmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libldaputil_a-dbconf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libldaputil_a-encode.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libldaputil_a-errors.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libldaputil_a-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libldaputil_a-ldapauth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libldaputil_a-vtable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-cert.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-certmap.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-dbconf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-encode.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-errors.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-ldapauth.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-vtable.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-access_plhash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acl.tab.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acl.yy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclcache.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclerror.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acleval.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclflush.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclspace.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acltools.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclutil.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-authdb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasdns.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasgroup.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasip.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lastod.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasuser.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-method.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-nsautherr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-nseframe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-oneeval.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-register.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-symbols.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-usi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libaccess/$(DEPDIR)/libns_dshttpd_la-usrcache.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libadmin/$(DEPDIR)/libns_dshttpd_la-error.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libadmin/$(DEPDIR)/libns_dshttpd_la-template.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libadmin/$(DEPDIR)/libns_dshttpd_la-util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libsi18n/$(DEPDIR)/libns_dshttpd_la-getstrprop.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libsi18n/$(DEPDIR)/libns_dshttpd_la-reshash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libsi18n/$(DEPDIR)/libns_dshttpd_la-txtfile.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libsi18n/$(DEPDIR)/makstrdb-makstrdb.Po@am__quote@ + +.S.o: +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ $< + +.S.obj: +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.S.lo: +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(LTCPPASCOMPILE) -c -o $@ $< + +ldap/servers/slapd/libslapd_la-slapi_counter_sunos_sparcv9.lo: ldap/servers/slapd/slapi_counter_sunos_sparcv9.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT ldap/servers/slapd/libslapd_la-slapi_counter_sunos_sparcv9.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapi_counter_sunos_sparcv9.Tpo -c -o ldap/servers/slapd/libslapd_la-slapi_counter_sunos_sparcv9.lo `test -f 'ldap/servers/slapd/slapi_counter_sunos_sparcv9.S' || echo '$(srcdir)/'`ldap/servers/slapd/slapi_counter_sunos_sparcv9.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapi_counter_sunos_sparcv9.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapi_counter_sunos_sparcv9.Plo +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='ldap/servers/slapd/slapi_counter_sunos_sparcv9.S' object='ldap/servers/slapd/libslapd_la-slapi_counter_sunos_sparcv9.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o ldap/servers/slapd/libslapd_la-slapi_counter_sunos_sparcv9.lo `test -f 'ldap/servers/slapd/slapi_counter_sunos_sparcv9.S' || echo '$(srcdir)/'`ldap/servers/slapd/slapi_counter_sunos_sparcv9.S + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +lib/ldaputil/libldaputil_a-cert.o: lib/ldaputil/cert.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-cert.o -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-cert.Tpo -c -o lib/ldaputil/libldaputil_a-cert.o `test -f 'lib/ldaputil/cert.c' || echo '$(srcdir)/'`lib/ldaputil/cert.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-cert.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-cert.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/cert.c' object='lib/ldaputil/libldaputil_a-cert.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-cert.o `test -f 'lib/ldaputil/cert.c' || echo '$(srcdir)/'`lib/ldaputil/cert.c + +lib/ldaputil/libldaputil_a-cert.obj: lib/ldaputil/cert.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-cert.obj -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-cert.Tpo -c -o lib/ldaputil/libldaputil_a-cert.obj `if test -f 'lib/ldaputil/cert.c'; then $(CYGPATH_W) 'lib/ldaputil/cert.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/cert.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-cert.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-cert.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/cert.c' object='lib/ldaputil/libldaputil_a-cert.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-cert.obj `if test -f 'lib/ldaputil/cert.c'; then $(CYGPATH_W) 'lib/ldaputil/cert.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/cert.c'; fi` + +lib/ldaputil/libldaputil_a-certmap.o: lib/ldaputil/certmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-certmap.o -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-certmap.Tpo -c -o lib/ldaputil/libldaputil_a-certmap.o `test -f 'lib/ldaputil/certmap.c' || echo '$(srcdir)/'`lib/ldaputil/certmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-certmap.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-certmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/certmap.c' object='lib/ldaputil/libldaputil_a-certmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-certmap.o `test -f 'lib/ldaputil/certmap.c' || echo '$(srcdir)/'`lib/ldaputil/certmap.c + +lib/ldaputil/libldaputil_a-certmap.obj: lib/ldaputil/certmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-certmap.obj -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-certmap.Tpo -c -o lib/ldaputil/libldaputil_a-certmap.obj `if test -f 'lib/ldaputil/certmap.c'; then $(CYGPATH_W) 'lib/ldaputil/certmap.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/certmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-certmap.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-certmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/certmap.c' object='lib/ldaputil/libldaputil_a-certmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-certmap.obj `if test -f 'lib/ldaputil/certmap.c'; then $(CYGPATH_W) 'lib/ldaputil/certmap.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/certmap.c'; fi` + +lib/ldaputil/libldaputil_a-dbconf.o: lib/ldaputil/dbconf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-dbconf.o -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-dbconf.Tpo -c -o lib/ldaputil/libldaputil_a-dbconf.o `test -f 'lib/ldaputil/dbconf.c' || echo '$(srcdir)/'`lib/ldaputil/dbconf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-dbconf.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-dbconf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/dbconf.c' object='lib/ldaputil/libldaputil_a-dbconf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-dbconf.o `test -f 'lib/ldaputil/dbconf.c' || echo '$(srcdir)/'`lib/ldaputil/dbconf.c + +lib/ldaputil/libldaputil_a-dbconf.obj: lib/ldaputil/dbconf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-dbconf.obj -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-dbconf.Tpo -c -o lib/ldaputil/libldaputil_a-dbconf.obj `if test -f 'lib/ldaputil/dbconf.c'; then $(CYGPATH_W) 'lib/ldaputil/dbconf.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/dbconf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-dbconf.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-dbconf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/dbconf.c' object='lib/ldaputil/libldaputil_a-dbconf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-dbconf.obj `if test -f 'lib/ldaputil/dbconf.c'; then $(CYGPATH_W) 'lib/ldaputil/dbconf.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/dbconf.c'; fi` + +lib/ldaputil/libldaputil_a-encode.o: lib/ldaputil/encode.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-encode.o -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-encode.Tpo -c -o lib/ldaputil/libldaputil_a-encode.o `test -f 'lib/ldaputil/encode.c' || echo '$(srcdir)/'`lib/ldaputil/encode.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-encode.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-encode.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/encode.c' object='lib/ldaputil/libldaputil_a-encode.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-encode.o `test -f 'lib/ldaputil/encode.c' || echo '$(srcdir)/'`lib/ldaputil/encode.c + +lib/ldaputil/libldaputil_a-encode.obj: lib/ldaputil/encode.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-encode.obj -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-encode.Tpo -c -o lib/ldaputil/libldaputil_a-encode.obj `if test -f 'lib/ldaputil/encode.c'; then $(CYGPATH_W) 'lib/ldaputil/encode.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/encode.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-encode.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-encode.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/encode.c' object='lib/ldaputil/libldaputil_a-encode.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-encode.obj `if test -f 'lib/ldaputil/encode.c'; then $(CYGPATH_W) 'lib/ldaputil/encode.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/encode.c'; fi` + +lib/ldaputil/libldaputil_a-errors.o: lib/ldaputil/errors.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-errors.o -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-errors.Tpo -c -o lib/ldaputil/libldaputil_a-errors.o `test -f 'lib/ldaputil/errors.c' || echo '$(srcdir)/'`lib/ldaputil/errors.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-errors.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-errors.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/errors.c' object='lib/ldaputil/libldaputil_a-errors.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-errors.o `test -f 'lib/ldaputil/errors.c' || echo '$(srcdir)/'`lib/ldaputil/errors.c + +lib/ldaputil/libldaputil_a-errors.obj: lib/ldaputil/errors.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-errors.obj -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-errors.Tpo -c -o lib/ldaputil/libldaputil_a-errors.obj `if test -f 'lib/ldaputil/errors.c'; then $(CYGPATH_W) 'lib/ldaputil/errors.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/errors.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-errors.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-errors.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/errors.c' object='lib/ldaputil/libldaputil_a-errors.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-errors.obj `if test -f 'lib/ldaputil/errors.c'; then $(CYGPATH_W) 'lib/ldaputil/errors.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/errors.c'; fi` + +lib/ldaputil/libldaputil_a-init.o: lib/ldaputil/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-init.o -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-init.Tpo -c -o lib/ldaputil/libldaputil_a-init.o `test -f 'lib/ldaputil/init.c' || echo '$(srcdir)/'`lib/ldaputil/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-init.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/init.c' object='lib/ldaputil/libldaputil_a-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-init.o `test -f 'lib/ldaputil/init.c' || echo '$(srcdir)/'`lib/ldaputil/init.c + +lib/ldaputil/libldaputil_a-init.obj: lib/ldaputil/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-init.obj -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-init.Tpo -c -o lib/ldaputil/libldaputil_a-init.obj `if test -f 'lib/ldaputil/init.c'; then $(CYGPATH_W) 'lib/ldaputil/init.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-init.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/init.c' object='lib/ldaputil/libldaputil_a-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-init.obj `if test -f 'lib/ldaputil/init.c'; then $(CYGPATH_W) 'lib/ldaputil/init.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/init.c'; fi` + +lib/ldaputil/libldaputil_a-ldapauth.o: lib/ldaputil/ldapauth.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-ldapauth.o -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-ldapauth.Tpo -c -o lib/ldaputil/libldaputil_a-ldapauth.o `test -f 'lib/ldaputil/ldapauth.c' || echo '$(srcdir)/'`lib/ldaputil/ldapauth.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-ldapauth.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-ldapauth.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/ldapauth.c' object='lib/ldaputil/libldaputil_a-ldapauth.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-ldapauth.o `test -f 'lib/ldaputil/ldapauth.c' || echo '$(srcdir)/'`lib/ldaputil/ldapauth.c + +lib/ldaputil/libldaputil_a-ldapauth.obj: lib/ldaputil/ldapauth.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-ldapauth.obj -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-ldapauth.Tpo -c -o lib/ldaputil/libldaputil_a-ldapauth.obj `if test -f 'lib/ldaputil/ldapauth.c'; then $(CYGPATH_W) 'lib/ldaputil/ldapauth.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/ldapauth.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-ldapauth.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-ldapauth.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/ldapauth.c' object='lib/ldaputil/libldaputil_a-ldapauth.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-ldapauth.obj `if test -f 'lib/ldaputil/ldapauth.c'; then $(CYGPATH_W) 'lib/ldaputil/ldapauth.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/ldapauth.c'; fi` + +lib/ldaputil/libldaputil_a-vtable.o: lib/ldaputil/vtable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-vtable.o -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-vtable.Tpo -c -o lib/ldaputil/libldaputil_a-vtable.o `test -f 'lib/ldaputil/vtable.c' || echo '$(srcdir)/'`lib/ldaputil/vtable.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-vtable.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-vtable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/vtable.c' object='lib/ldaputil/libldaputil_a-vtable.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-vtable.o `test -f 'lib/ldaputil/vtable.c' || echo '$(srcdir)/'`lib/ldaputil/vtable.c + +lib/ldaputil/libldaputil_a-vtable.obj: lib/ldaputil/vtable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libldaputil_a-vtable.obj -MD -MP -MF lib/ldaputil/$(DEPDIR)/libldaputil_a-vtable.Tpo -c -o lib/ldaputil/libldaputil_a-vtable.obj `if test -f 'lib/ldaputil/vtable.c'; then $(CYGPATH_W) 'lib/ldaputil/vtable.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/vtable.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libldaputil_a-vtable.Tpo lib/ldaputil/$(DEPDIR)/libldaputil_a-vtable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/vtable.c' object='lib/ldaputil/libldaputil_a-vtable.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libldaputil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libldaputil_a-vtable.obj `if test -f 'lib/ldaputil/vtable.c'; then $(CYGPATH_W) 'lib/ldaputil/vtable.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldaputil/vtable.c'; fi` + +ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_config.lo: ldap/servers/plugins/acctpolicy/acct_config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacctpolicy_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_config.lo -MD -MP -MF ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_config.Tpo -c -o ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_config.lo `test -f 'ldap/servers/plugins/acctpolicy/acct_config.c' || echo '$(srcdir)/'`ldap/servers/plugins/acctpolicy/acct_config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_config.Tpo ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_config.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acctpolicy/acct_config.c' object='ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_config.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacctpolicy_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_config.lo `test -f 'ldap/servers/plugins/acctpolicy/acct_config.c' || echo '$(srcdir)/'`ldap/servers/plugins/acctpolicy/acct_config.c + +ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_init.lo: ldap/servers/plugins/acctpolicy/acct_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacctpolicy_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_init.lo -MD -MP -MF ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_init.Tpo -c -o ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_init.lo `test -f 'ldap/servers/plugins/acctpolicy/acct_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/acctpolicy/acct_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_init.Tpo ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_init.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acctpolicy/acct_init.c' object='ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_init.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacctpolicy_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_init.lo `test -f 'ldap/servers/plugins/acctpolicy/acct_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/acctpolicy/acct_init.c + +ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_plugin.lo: ldap/servers/plugins/acctpolicy/acct_plugin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacctpolicy_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_plugin.lo -MD -MP -MF ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_plugin.Tpo -c -o ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_plugin.lo `test -f 'ldap/servers/plugins/acctpolicy/acct_plugin.c' || echo '$(srcdir)/'`ldap/servers/plugins/acctpolicy/acct_plugin.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_plugin.Tpo ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_plugin.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acctpolicy/acct_plugin.c' object='ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_plugin.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacctpolicy_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_plugin.lo `test -f 'ldap/servers/plugins/acctpolicy/acct_plugin.c' || echo '$(srcdir)/'`ldap/servers/plugins/acctpolicy/acct_plugin.c + +ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_util.lo: ldap/servers/plugins/acctpolicy/acct_util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacctpolicy_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_util.lo -MD -MP -MF ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_util.Tpo -c -o ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_util.lo `test -f 'ldap/servers/plugins/acctpolicy/acct_util.c' || echo '$(srcdir)/'`ldap/servers/plugins/acctpolicy/acct_util.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_util.Tpo ldap/servers/plugins/acctpolicy/$(DEPDIR)/libacctpolicy_plugin_la-acct_util.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acctpolicy/acct_util.c' object='ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_util.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacctpolicy_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acctpolicy/libacctpolicy_plugin_la-acct_util.lo `test -f 'ldap/servers/plugins/acctpolicy/acct_util.c' || echo '$(srcdir)/'`ldap/servers/plugins/acctpolicy/acct_util.c + +ldap/servers/plugins/acct_usability/libacctusability_plugin_la-acct_usability.lo: ldap/servers/plugins/acct_usability/acct_usability.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacctusability_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acct_usability/libacctusability_plugin_la-acct_usability.lo -MD -MP -MF ldap/servers/plugins/acct_usability/$(DEPDIR)/libacctusability_plugin_la-acct_usability.Tpo -c -o ldap/servers/plugins/acct_usability/libacctusability_plugin_la-acct_usability.lo `test -f 'ldap/servers/plugins/acct_usability/acct_usability.c' || echo '$(srcdir)/'`ldap/servers/plugins/acct_usability/acct_usability.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acct_usability/$(DEPDIR)/libacctusability_plugin_la-acct_usability.Tpo ldap/servers/plugins/acct_usability/$(DEPDIR)/libacctusability_plugin_la-acct_usability.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acct_usability/acct_usability.c' object='ldap/servers/plugins/acct_usability/libacctusability_plugin_la-acct_usability.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacctusability_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acct_usability/libacctusability_plugin_la-acct_usability.lo `test -f 'ldap/servers/plugins/acct_usability/acct_usability.c' || echo '$(srcdir)/'`ldap/servers/plugins/acct_usability/acct_usability.c + +ldap/servers/plugins/acl/libacl_plugin_la-acl.lo: ldap/servers/plugins/acl/acl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acl/libacl_plugin_la-acl.lo -MD -MP -MF ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acl.Tpo -c -o ldap/servers/plugins/acl/libacl_plugin_la-acl.lo `test -f 'ldap/servers/plugins/acl/acl.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/acl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acl.Tpo ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acl/acl.c' object='ldap/servers/plugins/acl/libacl_plugin_la-acl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acl/libacl_plugin_la-acl.lo `test -f 'ldap/servers/plugins/acl/acl.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/acl.c + +ldap/servers/plugins/acl/libacl_plugin_la-acl_ext.lo: ldap/servers/plugins/acl/acl_ext.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acl/libacl_plugin_la-acl_ext.lo -MD -MP -MF ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acl_ext.Tpo -c -o ldap/servers/plugins/acl/libacl_plugin_la-acl_ext.lo `test -f 'ldap/servers/plugins/acl/acl_ext.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/acl_ext.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acl_ext.Tpo ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acl_ext.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acl/acl_ext.c' object='ldap/servers/plugins/acl/libacl_plugin_la-acl_ext.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acl/libacl_plugin_la-acl_ext.lo `test -f 'ldap/servers/plugins/acl/acl_ext.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/acl_ext.c + +ldap/servers/plugins/acl/libacl_plugin_la-aclanom.lo: ldap/servers/plugins/acl/aclanom.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acl/libacl_plugin_la-aclanom.lo -MD -MP -MF ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclanom.Tpo -c -o ldap/servers/plugins/acl/libacl_plugin_la-aclanom.lo `test -f 'ldap/servers/plugins/acl/aclanom.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/aclanom.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclanom.Tpo ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclanom.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acl/aclanom.c' object='ldap/servers/plugins/acl/libacl_plugin_la-aclanom.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acl/libacl_plugin_la-aclanom.lo `test -f 'ldap/servers/plugins/acl/aclanom.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/aclanom.c + +ldap/servers/plugins/acl/libacl_plugin_la-acleffectiverights.lo: ldap/servers/plugins/acl/acleffectiverights.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acl/libacl_plugin_la-acleffectiverights.lo -MD -MP -MF ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acleffectiverights.Tpo -c -o ldap/servers/plugins/acl/libacl_plugin_la-acleffectiverights.lo `test -f 'ldap/servers/plugins/acl/acleffectiverights.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/acleffectiverights.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acleffectiverights.Tpo ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acleffectiverights.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acl/acleffectiverights.c' object='ldap/servers/plugins/acl/libacl_plugin_la-acleffectiverights.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acl/libacl_plugin_la-acleffectiverights.lo `test -f 'ldap/servers/plugins/acl/acleffectiverights.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/acleffectiverights.c + +ldap/servers/plugins/acl/libacl_plugin_la-aclgroup.lo: ldap/servers/plugins/acl/aclgroup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acl/libacl_plugin_la-aclgroup.lo -MD -MP -MF ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclgroup.Tpo -c -o ldap/servers/plugins/acl/libacl_plugin_la-aclgroup.lo `test -f 'ldap/servers/plugins/acl/aclgroup.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/aclgroup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclgroup.Tpo ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclgroup.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acl/aclgroup.c' object='ldap/servers/plugins/acl/libacl_plugin_la-aclgroup.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acl/libacl_plugin_la-aclgroup.lo `test -f 'ldap/servers/plugins/acl/aclgroup.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/aclgroup.c + +ldap/servers/plugins/acl/libacl_plugin_la-aclinit.lo: ldap/servers/plugins/acl/aclinit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acl/libacl_plugin_la-aclinit.lo -MD -MP -MF ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclinit.Tpo -c -o ldap/servers/plugins/acl/libacl_plugin_la-aclinit.lo `test -f 'ldap/servers/plugins/acl/aclinit.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/aclinit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclinit.Tpo ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclinit.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acl/aclinit.c' object='ldap/servers/plugins/acl/libacl_plugin_la-aclinit.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acl/libacl_plugin_la-aclinit.lo `test -f 'ldap/servers/plugins/acl/aclinit.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/aclinit.c + +ldap/servers/plugins/acl/libacl_plugin_la-acllas.lo: ldap/servers/plugins/acl/acllas.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acl/libacl_plugin_la-acllas.lo -MD -MP -MF ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acllas.Tpo -c -o ldap/servers/plugins/acl/libacl_plugin_la-acllas.lo `test -f 'ldap/servers/plugins/acl/acllas.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/acllas.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acllas.Tpo ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acllas.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acl/acllas.c' object='ldap/servers/plugins/acl/libacl_plugin_la-acllas.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acl/libacl_plugin_la-acllas.lo `test -f 'ldap/servers/plugins/acl/acllas.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/acllas.c + +ldap/servers/plugins/acl/libacl_plugin_la-acllist.lo: ldap/servers/plugins/acl/acllist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acl/libacl_plugin_la-acllist.lo -MD -MP -MF ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acllist.Tpo -c -o ldap/servers/plugins/acl/libacl_plugin_la-acllist.lo `test -f 'ldap/servers/plugins/acl/acllist.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/acllist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acllist.Tpo ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-acllist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acl/acllist.c' object='ldap/servers/plugins/acl/libacl_plugin_la-acllist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acl/libacl_plugin_la-acllist.lo `test -f 'ldap/servers/plugins/acl/acllist.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/acllist.c + +ldap/servers/plugins/acl/libacl_plugin_la-aclparse.lo: ldap/servers/plugins/acl/aclparse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acl/libacl_plugin_la-aclparse.lo -MD -MP -MF ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclparse.Tpo -c -o ldap/servers/plugins/acl/libacl_plugin_la-aclparse.lo `test -f 'ldap/servers/plugins/acl/aclparse.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/aclparse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclparse.Tpo ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclparse.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acl/aclparse.c' object='ldap/servers/plugins/acl/libacl_plugin_la-aclparse.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acl/libacl_plugin_la-aclparse.lo `test -f 'ldap/servers/plugins/acl/aclparse.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/aclparse.c + +ldap/servers/plugins/acl/libacl_plugin_la-aclplugin.lo: ldap/servers/plugins/acl/aclplugin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acl/libacl_plugin_la-aclplugin.lo -MD -MP -MF ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclplugin.Tpo -c -o ldap/servers/plugins/acl/libacl_plugin_la-aclplugin.lo `test -f 'ldap/servers/plugins/acl/aclplugin.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/aclplugin.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclplugin.Tpo ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclplugin.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acl/aclplugin.c' object='ldap/servers/plugins/acl/libacl_plugin_la-aclplugin.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acl/libacl_plugin_la-aclplugin.lo `test -f 'ldap/servers/plugins/acl/aclplugin.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/aclplugin.c + +ldap/servers/plugins/acl/libacl_plugin_la-aclutil.lo: ldap/servers/plugins/acl/aclutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/acl/libacl_plugin_la-aclutil.lo -MD -MP -MF ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclutil.Tpo -c -o ldap/servers/plugins/acl/libacl_plugin_la-aclutil.lo `test -f 'ldap/servers/plugins/acl/aclutil.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/aclutil.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclutil.Tpo ldap/servers/plugins/acl/$(DEPDIR)/libacl_plugin_la-aclutil.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/acl/aclutil.c' object='ldap/servers/plugins/acl/libacl_plugin_la-aclutil.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libacl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/acl/libacl_plugin_la-aclutil.lo `test -f 'ldap/servers/plugins/acl/aclutil.c' || echo '$(srcdir)/'`ldap/servers/plugins/acl/aclutil.c + +ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-7bit.lo: ldap/servers/plugins/uiduniq/7bit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libattr_unique_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-7bit.lo -MD -MP -MF ldap/servers/plugins/uiduniq/$(DEPDIR)/libattr_unique_plugin_la-7bit.Tpo -c -o ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-7bit.lo `test -f 'ldap/servers/plugins/uiduniq/7bit.c' || echo '$(srcdir)/'`ldap/servers/plugins/uiduniq/7bit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/uiduniq/$(DEPDIR)/libattr_unique_plugin_la-7bit.Tpo ldap/servers/plugins/uiduniq/$(DEPDIR)/libattr_unique_plugin_la-7bit.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/uiduniq/7bit.c' object='ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-7bit.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libattr_unique_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-7bit.lo `test -f 'ldap/servers/plugins/uiduniq/7bit.c' || echo '$(srcdir)/'`ldap/servers/plugins/uiduniq/7bit.c + +ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-uid.lo: ldap/servers/plugins/uiduniq/uid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libattr_unique_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-uid.lo -MD -MP -MF ldap/servers/plugins/uiduniq/$(DEPDIR)/libattr_unique_plugin_la-uid.Tpo -c -o ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-uid.lo `test -f 'ldap/servers/plugins/uiduniq/uid.c' || echo '$(srcdir)/'`ldap/servers/plugins/uiduniq/uid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/uiduniq/$(DEPDIR)/libattr_unique_plugin_la-uid.Tpo ldap/servers/plugins/uiduniq/$(DEPDIR)/libattr_unique_plugin_la-uid.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/uiduniq/uid.c' object='ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-uid.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libattr_unique_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-uid.lo `test -f 'ldap/servers/plugins/uiduniq/uid.c' || echo '$(srcdir)/'`ldap/servers/plugins/uiduniq/uid.c + +ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-utils.lo: ldap/servers/plugins/uiduniq/utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libattr_unique_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-utils.lo -MD -MP -MF ldap/servers/plugins/uiduniq/$(DEPDIR)/libattr_unique_plugin_la-utils.Tpo -c -o ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-utils.lo `test -f 'ldap/servers/plugins/uiduniq/utils.c' || echo '$(srcdir)/'`ldap/servers/plugins/uiduniq/utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/uiduniq/$(DEPDIR)/libattr_unique_plugin_la-utils.Tpo ldap/servers/plugins/uiduniq/$(DEPDIR)/libattr_unique_plugin_la-utils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/uiduniq/utils.c' object='ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libattr_unique_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/uiduniq/libattr_unique_plugin_la-utils.lo `test -f 'ldap/servers/plugins/uiduniq/utils.c' || echo '$(srcdir)/'`ldap/servers/plugins/uiduniq/utils.c + +ldap/servers/plugins/automember/libautomember_plugin_la-automember.lo: ldap/servers/plugins/automember/automember.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libautomember_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/automember/libautomember_plugin_la-automember.lo -MD -MP -MF ldap/servers/plugins/automember/$(DEPDIR)/libautomember_plugin_la-automember.Tpo -c -o ldap/servers/plugins/automember/libautomember_plugin_la-automember.lo `test -f 'ldap/servers/plugins/automember/automember.c' || echo '$(srcdir)/'`ldap/servers/plugins/automember/automember.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/automember/$(DEPDIR)/libautomember_plugin_la-automember.Tpo ldap/servers/plugins/automember/$(DEPDIR)/libautomember_plugin_la-automember.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/automember/automember.c' object='ldap/servers/plugins/automember/libautomember_plugin_la-automember.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libautomember_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/automember/libautomember_plugin_la-automember.lo `test -f 'ldap/servers/plugins/automember/automember.c' || echo '$(srcdir)/'`ldap/servers/plugins/automember/automember.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ancestorid.lo: ldap/servers/slapd/back-ldbm/ancestorid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ancestorid.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ancestorid.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ancestorid.lo `test -f 'ldap/servers/slapd/back-ldbm/ancestorid.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ancestorid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ancestorid.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ancestorid.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ancestorid.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ancestorid.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ancestorid.lo `test -f 'ldap/servers/slapd/back-ldbm/ancestorid.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ancestorid.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-archive.lo: ldap/servers/slapd/back-ldbm/archive.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-archive.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-archive.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-archive.lo `test -f 'ldap/servers/slapd/back-ldbm/archive.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/archive.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-archive.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-archive.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/archive.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-archive.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-archive.lo `test -f 'ldap/servers/slapd/back-ldbm/archive.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/archive.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-backentry.lo: ldap/servers/slapd/back-ldbm/backentry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-backentry.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-backentry.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-backentry.lo `test -f 'ldap/servers/slapd/back-ldbm/backentry.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/backentry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-backentry.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-backentry.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/backentry.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-backentry.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-backentry.lo `test -f 'ldap/servers/slapd/back-ldbm/backentry.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/backentry.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-cache.lo: ldap/servers/slapd/back-ldbm/cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-cache.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-cache.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-cache.lo `test -f 'ldap/servers/slapd/back-ldbm/cache.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/cache.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-cache.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-cache.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/cache.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-cache.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-cache.lo `test -f 'ldap/servers/slapd/back-ldbm/cache.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/cache.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-cleanup.lo: ldap/servers/slapd/back-ldbm/cleanup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-cleanup.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-cleanup.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-cleanup.lo `test -f 'ldap/servers/slapd/back-ldbm/cleanup.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/cleanup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-cleanup.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-cleanup.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/cleanup.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-cleanup.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-cleanup.lo `test -f 'ldap/servers/slapd/back-ldbm/cleanup.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/cleanup.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-close.lo: ldap/servers/slapd/back-ldbm/close.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-close.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-close.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-close.lo `test -f 'ldap/servers/slapd/back-ldbm/close.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/close.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-close.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-close.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/close.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-close.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-close.lo `test -f 'ldap/servers/slapd/back-ldbm/close.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/close.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbhelp.lo: ldap/servers/slapd/back-ldbm/dbhelp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbhelp.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbhelp.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbhelp.lo `test -f 'ldap/servers/slapd/back-ldbm/dbhelp.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/dbhelp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbhelp.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbhelp.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/dbhelp.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbhelp.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-dbhelp.lo `test -f 'ldap/servers/slapd/back-ldbm/dbhelp.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/dbhelp.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-dblayer.lo: ldap/servers/slapd/back-ldbm/dblayer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-dblayer.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dblayer.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-dblayer.lo `test -f 'ldap/servers/slapd/back-ldbm/dblayer.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/dblayer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dblayer.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dblayer.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/dblayer.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-dblayer.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-dblayer.lo `test -f 'ldap/servers/slapd/back-ldbm/dblayer.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/dblayer.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbsize.lo: ldap/servers/slapd/back-ldbm/dbsize.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbsize.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbsize.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbsize.lo `test -f 'ldap/servers/slapd/back-ldbm/dbsize.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/dbsize.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbsize.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbsize.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/dbsize.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbsize.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-dbsize.lo `test -f 'ldap/servers/slapd/back-ldbm/dbsize.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/dbsize.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbversion.lo: ldap/servers/slapd/back-ldbm/dbversion.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbversion.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbversion.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbversion.lo `test -f 'ldap/servers/slapd/back-ldbm/dbversion.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/dbversion.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbversion.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbversion.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/dbversion.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbversion.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-dbversion.lo `test -f 'ldap/servers/slapd/back-ldbm/dbversion.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/dbversion.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-dn2entry.lo: ldap/servers/slapd/back-ldbm/dn2entry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-dn2entry.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dn2entry.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-dn2entry.lo `test -f 'ldap/servers/slapd/back-ldbm/dn2entry.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/dn2entry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dn2entry.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dn2entry.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/dn2entry.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-dn2entry.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-dn2entry.lo `test -f 'ldap/servers/slapd/back-ldbm/dn2entry.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/dn2entry.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-entrystore.lo: ldap/servers/slapd/back-ldbm/entrystore.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-entrystore.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-entrystore.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-entrystore.lo `test -f 'ldap/servers/slapd/back-ldbm/entrystore.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/entrystore.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-entrystore.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-entrystore.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/entrystore.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-entrystore.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-entrystore.lo `test -f 'ldap/servers/slapd/back-ldbm/entrystore.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/entrystore.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-filterindex.lo: ldap/servers/slapd/back-ldbm/filterindex.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-filterindex.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-filterindex.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-filterindex.lo `test -f 'ldap/servers/slapd/back-ldbm/filterindex.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/filterindex.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-filterindex.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-filterindex.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/filterindex.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-filterindex.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-filterindex.lo `test -f 'ldap/servers/slapd/back-ldbm/filterindex.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/filterindex.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-findentry.lo: ldap/servers/slapd/back-ldbm/findentry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-findentry.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-findentry.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-findentry.lo `test -f 'ldap/servers/slapd/back-ldbm/findentry.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/findentry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-findentry.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-findentry.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/findentry.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-findentry.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-findentry.lo `test -f 'ldap/servers/slapd/back-ldbm/findentry.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/findentry.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-haschildren.lo: ldap/servers/slapd/back-ldbm/haschildren.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-haschildren.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-haschildren.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-haschildren.lo `test -f 'ldap/servers/slapd/back-ldbm/haschildren.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/haschildren.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-haschildren.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-haschildren.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/haschildren.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-haschildren.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-haschildren.lo `test -f 'ldap/servers/slapd/back-ldbm/haschildren.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/haschildren.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-id2entry.lo: ldap/servers/slapd/back-ldbm/id2entry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-id2entry.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-id2entry.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-id2entry.lo `test -f 'ldap/servers/slapd/back-ldbm/id2entry.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/id2entry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-id2entry.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-id2entry.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/id2entry.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-id2entry.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-id2entry.lo `test -f 'ldap/servers/slapd/back-ldbm/id2entry.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/id2entry.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl.lo: ldap/servers/slapd/back-ldbm/idl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl.lo `test -f 'ldap/servers/slapd/back-ldbm/idl.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/idl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/idl.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-idl.lo `test -f 'ldap/servers/slapd/back-ldbm/idl.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/idl.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_shim.lo: ldap/servers/slapd/back-ldbm/idl_shim.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_shim.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl_shim.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_shim.lo `test -f 'ldap/servers/slapd/back-ldbm/idl_shim.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/idl_shim.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl_shim.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl_shim.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/idl_shim.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_shim.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-idl_shim.lo `test -f 'ldap/servers/slapd/back-ldbm/idl_shim.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/idl_shim.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_new.lo: ldap/servers/slapd/back-ldbm/idl_new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_new.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl_new.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_new.lo `test -f 'ldap/servers/slapd/back-ldbm/idl_new.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/idl_new.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl_new.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl_new.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/idl_new.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_new.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-idl_new.lo `test -f 'ldap/servers/slapd/back-ldbm/idl_new.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/idl_new.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_common.lo: ldap/servers/slapd/back-ldbm/idl_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_common.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl_common.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_common.lo `test -f 'ldap/servers/slapd/back-ldbm/idl_common.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/idl_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl_common.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-idl_common.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/idl_common.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-idl_common.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-idl_common.lo `test -f 'ldap/servers/slapd/back-ldbm/idl_common.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/idl_common.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-import.lo: ldap/servers/slapd/back-ldbm/import.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-import.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-import.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-import.lo `test -f 'ldap/servers/slapd/back-ldbm/import.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/import.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-import.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-import.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/import.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-import.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-import.lo `test -f 'ldap/servers/slapd/back-ldbm/import.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/import.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-import-merge.lo: ldap/servers/slapd/back-ldbm/import-merge.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-import-merge.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-import-merge.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-import-merge.lo `test -f 'ldap/servers/slapd/back-ldbm/import-merge.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/import-merge.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-import-merge.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-import-merge.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/import-merge.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-import-merge.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-import-merge.lo `test -f 'ldap/servers/slapd/back-ldbm/import-merge.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/import-merge.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-import-threads.lo: ldap/servers/slapd/back-ldbm/import-threads.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-import-threads.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-import-threads.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-import-threads.lo `test -f 'ldap/servers/slapd/back-ldbm/import-threads.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/import-threads.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-import-threads.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-import-threads.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/import-threads.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-import-threads.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-import-threads.lo `test -f 'ldap/servers/slapd/back-ldbm/import-threads.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/import-threads.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-index.lo: ldap/servers/slapd/back-ldbm/index.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-index.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-index.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-index.lo `test -f 'ldap/servers/slapd/back-ldbm/index.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/index.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-index.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-index.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/index.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-index.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-index.lo `test -f 'ldap/servers/slapd/back-ldbm/index.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/index.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-init.lo: ldap/servers/slapd/back-ldbm/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-init.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-init.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-init.lo `test -f 'ldap/servers/slapd/back-ldbm/init.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-init.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-init.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/init.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-init.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-init.lo `test -f 'ldap/servers/slapd/back-ldbm/init.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/init.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-instance.lo: ldap/servers/slapd/back-ldbm/instance.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-instance.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-instance.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-instance.lo `test -f 'ldap/servers/slapd/back-ldbm/instance.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/instance.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-instance.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-instance.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/instance.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-instance.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-instance.lo `test -f 'ldap/servers/slapd/back-ldbm/instance.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/instance.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_abandon.lo: ldap/servers/slapd/back-ldbm/ldbm_abandon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_abandon.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_abandon.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_abandon.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_abandon.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_abandon.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_abandon.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_abandon.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_abandon.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_abandon.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_abandon.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_abandon.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_abandon.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_add.lo: ldap/servers/slapd/back-ldbm/ldbm_add.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_add.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_add.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_add.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_add.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_add.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_add.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_add.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_add.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_add.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_add.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_add.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_add.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attr.lo: ldap/servers/slapd/back-ldbm/ldbm_attr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attr.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_attr.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attr.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_attr.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_attr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_attr.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_attr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_attr.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_attr.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_attr.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_attr.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attrcrypt.lo: ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attrcrypt.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_attrcrypt.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attrcrypt.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_attrcrypt.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_attrcrypt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attrcrypt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_attrcrypt.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attrcrypt_config.lo: ldap/servers/slapd/back-ldbm/ldbm_attrcrypt_config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attrcrypt_config.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_attrcrypt_config.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attrcrypt_config.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_attrcrypt_config.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_attrcrypt_config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_attrcrypt_config.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_attrcrypt_config.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_attrcrypt_config.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_attrcrypt_config.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_attrcrypt_config.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_attrcrypt_config.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_attrcrypt_config.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_bind.lo: ldap/servers/slapd/back-ldbm/ldbm_bind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_bind.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_bind.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_bind.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_bind.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_bind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_bind.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_bind.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_bind.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_bind.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_bind.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_bind.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_bind.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_compare.lo: ldap/servers/slapd/back-ldbm/ldbm_compare.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_compare.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_compare.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_compare.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_compare.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_compare.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_compare.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_compare.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_compare.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_compare.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_compare.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_compare.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_compare.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_config.lo: ldap/servers/slapd/back-ldbm/ldbm_config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_config.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_config.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_config.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_config.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_config.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_config.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_config.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_config.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_config.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_config.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_config.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_delete.lo: ldap/servers/slapd/back-ldbm/ldbm_delete.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_delete.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_delete.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_delete.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_delete.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_delete.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_delete.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_delete.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_delete.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_delete.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_delete.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_delete.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_delete.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_entryrdn.lo: ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_entryrdn.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_entryrdn.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_entryrdn.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_entryrdn.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_entryrdn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_entryrdn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_entryrdn.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_index_config.lo: ldap/servers/slapd/back-ldbm/ldbm_index_config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_index_config.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_index_config.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_index_config.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_index_config.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_index_config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_index_config.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_index_config.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_index_config.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_index_config.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_index_config.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_index_config.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_index_config.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_instance_config.lo: ldap/servers/slapd/back-ldbm/ldbm_instance_config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_instance_config.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_instance_config.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_instance_config.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_instance_config.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_instance_config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_instance_config.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_instance_config.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_instance_config.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_instance_config.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_instance_config.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_instance_config.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_instance_config.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_modify.lo: ldap/servers/slapd/back-ldbm/ldbm_modify.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_modify.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_modify.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_modify.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_modify.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_modify.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_modify.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_modify.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_modify.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_modify.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_modify.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_modify.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_modify.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_modrdn.lo: ldap/servers/slapd/back-ldbm/ldbm_modrdn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_modrdn.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_modrdn.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_modrdn.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_modrdn.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_modrdn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_modrdn.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_modrdn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_modrdn.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_modrdn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_modrdn.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_modrdn.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_modrdn.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_search.lo: ldap/servers/slapd/back-ldbm/ldbm_search.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_search.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_search.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_search.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_search.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_search.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_search.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_search.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_search.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_search.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_search.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_search.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_search.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_unbind.lo: ldap/servers/slapd/back-ldbm/ldbm_unbind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_unbind.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_unbind.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_unbind.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_unbind.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_unbind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_unbind.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_unbind.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_unbind.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_unbind.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_unbind.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_unbind.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_unbind.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_usn.lo: ldap/servers/slapd/back-ldbm/ldbm_usn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_usn.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_usn.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_usn.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_usn.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_usn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_usn.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldbm_usn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldbm_usn.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_usn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-ldbm_usn.lo `test -f 'ldap/servers/slapd/back-ldbm/ldbm_usn.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldbm_usn.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldif2ldbm.lo: ldap/servers/slapd/back-ldbm/ldif2ldbm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldif2ldbm.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldif2ldbm.Tpo -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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldif2ldbm.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-ldif2ldbm.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/ldif2ldbm.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldif2ldbm.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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 +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbverify.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbverify.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/dbverify.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbverify.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-matchrule.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-matchrule.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/matchrule.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-matchrule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-matchrule.lo `test -f 'ldap/servers/slapd/back-ldbm/matchrule.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/matchrule.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-misc.lo: ldap/servers/slapd/back-ldbm/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-misc.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-misc.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-misc.lo `test -f 'ldap/servers/slapd/back-ldbm/misc.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-misc.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-misc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/misc.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-misc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-misc.lo `test -f 'ldap/servers/slapd/back-ldbm/misc.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/misc.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-monitor.lo: ldap/servers/slapd/back-ldbm/monitor.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-monitor.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-monitor.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-monitor.lo `test -f 'ldap/servers/slapd/back-ldbm/monitor.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/monitor.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-monitor.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-monitor.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/monitor.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-monitor.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-monitor.lo `test -f 'ldap/servers/slapd/back-ldbm/monitor.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/monitor.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-nextid.lo: ldap/servers/slapd/back-ldbm/nextid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-nextid.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-nextid.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-nextid.lo `test -f 'ldap/servers/slapd/back-ldbm/nextid.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/nextid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-nextid.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-nextid.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/nextid.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-nextid.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-nextid.lo `test -f 'ldap/servers/slapd/back-ldbm/nextid.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/nextid.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-parents.lo: ldap/servers/slapd/back-ldbm/parents.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-parents.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-parents.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-parents.lo `test -f 'ldap/servers/slapd/back-ldbm/parents.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/parents.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-parents.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-parents.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/parents.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-parents.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-parents.lo `test -f 'ldap/servers/slapd/back-ldbm/parents.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/parents.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-perfctrs.lo: ldap/servers/slapd/back-ldbm/perfctrs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-perfctrs.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-perfctrs.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-perfctrs.lo `test -f 'ldap/servers/slapd/back-ldbm/perfctrs.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/perfctrs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-perfctrs.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-perfctrs.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/perfctrs.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-perfctrs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-perfctrs.lo `test -f 'ldap/servers/slapd/back-ldbm/perfctrs.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/perfctrs.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-rmdb.lo: ldap/servers/slapd/back-ldbm/rmdb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-rmdb.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-rmdb.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-rmdb.lo `test -f 'ldap/servers/slapd/back-ldbm/rmdb.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/rmdb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-rmdb.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-rmdb.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/rmdb.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-rmdb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-rmdb.lo `test -f 'ldap/servers/slapd/back-ldbm/rmdb.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/rmdb.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-seq.lo: ldap/servers/slapd/back-ldbm/seq.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-seq.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-seq.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-seq.lo `test -f 'ldap/servers/slapd/back-ldbm/seq.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/seq.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-seq.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-seq.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/seq.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-seq.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-seq.lo `test -f 'ldap/servers/slapd/back-ldbm/seq.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/seq.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-sort.lo: ldap/servers/slapd/back-ldbm/sort.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-sort.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-sort.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-sort.lo `test -f 'ldap/servers/slapd/back-ldbm/sort.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/sort.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-sort.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-sort.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/sort.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-sort.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-sort.lo `test -f 'ldap/servers/slapd/back-ldbm/sort.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/sort.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-start.lo: ldap/servers/slapd/back-ldbm/start.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-start.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-start.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-start.lo `test -f 'ldap/servers/slapd/back-ldbm/start.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/start.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-start.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-start.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/start.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-start.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-start.lo `test -f 'ldap/servers/slapd/back-ldbm/start.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/start.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-uniqueid2entry.lo: ldap/servers/slapd/back-ldbm/uniqueid2entry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-uniqueid2entry.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-uniqueid2entry.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-uniqueid2entry.lo `test -f 'ldap/servers/slapd/back-ldbm/uniqueid2entry.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/uniqueid2entry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-uniqueid2entry.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-uniqueid2entry.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/uniqueid2entry.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-uniqueid2entry.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-uniqueid2entry.lo `test -f 'ldap/servers/slapd/back-ldbm/uniqueid2entry.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/uniqueid2entry.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-upgrade.lo: ldap/servers/slapd/back-ldbm/upgrade.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-upgrade.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-upgrade.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-upgrade.lo `test -f 'ldap/servers/slapd/back-ldbm/upgrade.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/upgrade.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-upgrade.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-upgrade.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/upgrade.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-upgrade.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-upgrade.lo `test -f 'ldap/servers/slapd/back-ldbm/upgrade.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/upgrade.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv.lo: ldap/servers/slapd/back-ldbm/vlv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-vlv.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv.lo `test -f 'ldap/servers/slapd/back-ldbm/vlv.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/vlv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-vlv.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-vlv.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/vlv.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-vlv.lo `test -f 'ldap/servers/slapd/back-ldbm/vlv.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/vlv.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv_key.lo: ldap/servers/slapd/back-ldbm/vlv_key.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv_key.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-vlv_key.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv_key.lo `test -f 'ldap/servers/slapd/back-ldbm/vlv_key.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/vlv_key.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-vlv_key.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-vlv_key.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/vlv_key.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv_key.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-vlv_key.lo `test -f 'ldap/servers/slapd/back-ldbm/vlv_key.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/vlv_key.c + +ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv_srch.lo: ldap/servers/slapd/back-ldbm/vlv_srch.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv_srch.lo -MD -MP -MF ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-vlv_srch.Tpo -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv_srch.lo `test -f 'ldap/servers/slapd/back-ldbm/vlv_srch.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/vlv_srch.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-vlv_srch.Tpo ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-vlv_srch.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/back-ldbm/vlv_srch.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-vlv_srch.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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-vlv_srch.lo `test -f 'ldap/servers/slapd/back-ldbm/vlv_srch.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/vlv_srch.c + +ldap/servers/plugins/bitwise/libbitwise_plugin_la-bitwise.lo: ldap/servers/plugins/bitwise/bitwise.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbitwise_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/bitwise/libbitwise_plugin_la-bitwise.lo -MD -MP -MF ldap/servers/plugins/bitwise/$(DEPDIR)/libbitwise_plugin_la-bitwise.Tpo -c -o ldap/servers/plugins/bitwise/libbitwise_plugin_la-bitwise.lo `test -f 'ldap/servers/plugins/bitwise/bitwise.c' || echo '$(srcdir)/'`ldap/servers/plugins/bitwise/bitwise.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/bitwise/$(DEPDIR)/libbitwise_plugin_la-bitwise.Tpo ldap/servers/plugins/bitwise/$(DEPDIR)/libbitwise_plugin_la-bitwise.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/bitwise/bitwise.c' object='ldap/servers/plugins/bitwise/libbitwise_plugin_la-bitwise.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbitwise_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/bitwise/libbitwise_plugin_la-bitwise.lo `test -f 'ldap/servers/plugins/bitwise/bitwise.c' || echo '$(srcdir)/'`ldap/servers/plugins/bitwise/bitwise.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_abandon.lo: ldap/servers/plugins/chainingdb/cb_abandon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_abandon.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_abandon.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_abandon.lo `test -f 'ldap/servers/plugins/chainingdb/cb_abandon.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_abandon.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_abandon.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_abandon.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_abandon.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_abandon.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_abandon.lo `test -f 'ldap/servers/plugins/chainingdb/cb_abandon.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_abandon.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_acl.lo: ldap/servers/plugins/chainingdb/cb_acl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_acl.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_acl.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_acl.lo `test -f 'ldap/servers/plugins/chainingdb/cb_acl.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_acl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_acl.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_acl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_acl.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_acl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_acl.lo `test -f 'ldap/servers/plugins/chainingdb/cb_acl.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_acl.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_add.lo: ldap/servers/plugins/chainingdb/cb_add.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_add.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_add.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_add.lo `test -f 'ldap/servers/plugins/chainingdb/cb_add.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_add.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_add.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_add.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_add.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_add.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_add.lo `test -f 'ldap/servers/plugins/chainingdb/cb_add.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_add.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_bind.lo: ldap/servers/plugins/chainingdb/cb_bind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_bind.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_bind.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_bind.lo `test -f 'ldap/servers/plugins/chainingdb/cb_bind.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_bind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_bind.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_bind.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_bind.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_bind.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_bind.lo `test -f 'ldap/servers/plugins/chainingdb/cb_bind.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_bind.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_cleanup.lo: ldap/servers/plugins/chainingdb/cb_cleanup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_cleanup.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_cleanup.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_cleanup.lo `test -f 'ldap/servers/plugins/chainingdb/cb_cleanup.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_cleanup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_cleanup.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_cleanup.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_cleanup.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_cleanup.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_cleanup.lo `test -f 'ldap/servers/plugins/chainingdb/cb_cleanup.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_cleanup.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_close.lo: ldap/servers/plugins/chainingdb/cb_close.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_close.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_close.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_close.lo `test -f 'ldap/servers/plugins/chainingdb/cb_close.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_close.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_close.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_close.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_close.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_close.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_close.lo `test -f 'ldap/servers/plugins/chainingdb/cb_close.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_close.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_compare.lo: ldap/servers/plugins/chainingdb/cb_compare.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_compare.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_compare.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_compare.lo `test -f 'ldap/servers/plugins/chainingdb/cb_compare.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_compare.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_compare.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_compare.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_compare.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_compare.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_compare.lo `test -f 'ldap/servers/plugins/chainingdb/cb_compare.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_compare.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_config.lo: ldap/servers/plugins/chainingdb/cb_config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_config.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_config.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_config.lo `test -f 'ldap/servers/plugins/chainingdb/cb_config.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_config.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_config.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_config.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_config.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_config.lo `test -f 'ldap/servers/plugins/chainingdb/cb_config.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_config.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_conn_stateless.lo: ldap/servers/plugins/chainingdb/cb_conn_stateless.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_conn_stateless.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_conn_stateless.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_conn_stateless.lo `test -f 'ldap/servers/plugins/chainingdb/cb_conn_stateless.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_conn_stateless.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_conn_stateless.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_conn_stateless.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_conn_stateless.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_conn_stateless.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_conn_stateless.lo `test -f 'ldap/servers/plugins/chainingdb/cb_conn_stateless.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_conn_stateless.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_controls.lo: ldap/servers/plugins/chainingdb/cb_controls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_controls.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_controls.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_controls.lo `test -f 'ldap/servers/plugins/chainingdb/cb_controls.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_controls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_controls.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_controls.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_controls.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_controls.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_controls.lo `test -f 'ldap/servers/plugins/chainingdb/cb_controls.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_controls.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_debug.lo: ldap/servers/plugins/chainingdb/cb_debug.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_debug.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_debug.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_debug.lo `test -f 'ldap/servers/plugins/chainingdb/cb_debug.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_debug.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_debug.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_debug.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_debug.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_debug.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_debug.lo `test -f 'ldap/servers/plugins/chainingdb/cb_debug.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_debug.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_delete.lo: ldap/servers/plugins/chainingdb/cb_delete.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_delete.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_delete.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_delete.lo `test -f 'ldap/servers/plugins/chainingdb/cb_delete.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_delete.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_delete.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_delete.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_delete.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_delete.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_delete.lo `test -f 'ldap/servers/plugins/chainingdb/cb_delete.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_delete.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_init.lo: ldap/servers/plugins/chainingdb/cb_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_init.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_init.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_init.lo `test -f 'ldap/servers/plugins/chainingdb/cb_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_init.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_init.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_init.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_init.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_init.lo `test -f 'ldap/servers/plugins/chainingdb/cb_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_init.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_instance.lo: ldap/servers/plugins/chainingdb/cb_instance.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_instance.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_instance.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_instance.lo `test -f 'ldap/servers/plugins/chainingdb/cb_instance.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_instance.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_instance.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_instance.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_instance.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_instance.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_instance.lo `test -f 'ldap/servers/plugins/chainingdb/cb_instance.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_instance.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modify.lo: ldap/servers/plugins/chainingdb/cb_modify.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modify.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_modify.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modify.lo `test -f 'ldap/servers/plugins/chainingdb/cb_modify.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_modify.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_modify.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_modify.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_modify.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modify.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modify.lo `test -f 'ldap/servers/plugins/chainingdb/cb_modify.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_modify.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modrdn.lo: ldap/servers/plugins/chainingdb/cb_modrdn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modrdn.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_modrdn.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modrdn.lo `test -f 'ldap/servers/plugins/chainingdb/cb_modrdn.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_modrdn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_modrdn.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_modrdn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_modrdn.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modrdn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_modrdn.lo `test -f 'ldap/servers/plugins/chainingdb/cb_modrdn.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_modrdn.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_monitor.lo: ldap/servers/plugins/chainingdb/cb_monitor.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_monitor.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_monitor.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_monitor.lo `test -f 'ldap/servers/plugins/chainingdb/cb_monitor.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_monitor.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_monitor.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_monitor.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_monitor.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_monitor.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_monitor.lo `test -f 'ldap/servers/plugins/chainingdb/cb_monitor.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_monitor.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_schema.lo: ldap/servers/plugins/chainingdb/cb_schema.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_schema.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_schema.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_schema.lo `test -f 'ldap/servers/plugins/chainingdb/cb_schema.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_schema.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_schema.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_schema.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_schema.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_schema.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_schema.lo `test -f 'ldap/servers/plugins/chainingdb/cb_schema.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_schema.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_search.lo: ldap/servers/plugins/chainingdb/cb_search.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_search.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_search.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_search.lo `test -f 'ldap/servers/plugins/chainingdb/cb_search.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_search.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_search.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_search.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_search.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_search.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_search.lo `test -f 'ldap/servers/plugins/chainingdb/cb_search.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_search.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_size.lo: ldap/servers/plugins/chainingdb/cb_size.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_size.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_size.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_size.lo `test -f 'ldap/servers/plugins/chainingdb/cb_size.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_size.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_size.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_size.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_size.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_size.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_size.lo `test -f 'ldap/servers/plugins/chainingdb/cb_size.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_size.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_start.lo: ldap/servers/plugins/chainingdb/cb_start.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_start.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_start.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_start.lo `test -f 'ldap/servers/plugins/chainingdb/cb_start.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_start.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_start.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_start.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_start.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_start.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_start.lo `test -f 'ldap/servers/plugins/chainingdb/cb_start.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_start.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_temp.lo: ldap/servers/plugins/chainingdb/cb_temp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_temp.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_temp.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_temp.lo `test -f 'ldap/servers/plugins/chainingdb/cb_temp.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_temp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_temp.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_temp.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_temp.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_temp.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_temp.lo `test -f 'ldap/servers/plugins/chainingdb/cb_temp.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_temp.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_test.lo: ldap/servers/plugins/chainingdb/cb_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_test.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_test.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_test.lo `test -f 'ldap/servers/plugins/chainingdb/cb_test.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_test.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_test.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_test.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_test.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_test.lo `test -f 'ldap/servers/plugins/chainingdb/cb_test.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_test.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_unbind.lo: ldap/servers/plugins/chainingdb/cb_unbind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_unbind.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_unbind.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_unbind.lo `test -f 'ldap/servers/plugins/chainingdb/cb_unbind.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_unbind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_unbind.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_unbind.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_unbind.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_unbind.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_unbind.lo `test -f 'ldap/servers/plugins/chainingdb/cb_unbind.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_unbind.c + +ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_utils.lo: ldap/servers/plugins/chainingdb/cb_utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_utils.lo -MD -MP -MF ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_utils.Tpo -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_utils.lo `test -f 'ldap/servers/plugins/chainingdb/cb_utils.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_utils.Tpo ldap/servers/plugins/chainingdb/$(DEPDIR)/libchainingdb_plugin_la-cb_utils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/chainingdb/cb_utils.c' object='ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libchainingdb_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/chainingdb/libchainingdb_plugin_la-cb_utils.lo `test -f 'ldap/servers/plugins/chainingdb/cb_utils.c' || echo '$(srcdir)/'`ldap/servers/plugins/chainingdb/cb_utils.c + +ldap/servers/plugins/collation/libcollation_plugin_la-collate.lo: ldap/servers/plugins/collation/collate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcollation_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/collation/libcollation_plugin_la-collate.lo -MD -MP -MF ldap/servers/plugins/collation/$(DEPDIR)/libcollation_plugin_la-collate.Tpo -c -o ldap/servers/plugins/collation/libcollation_plugin_la-collate.lo `test -f 'ldap/servers/plugins/collation/collate.c' || echo '$(srcdir)/'`ldap/servers/plugins/collation/collate.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/collation/$(DEPDIR)/libcollation_plugin_la-collate.Tpo ldap/servers/plugins/collation/$(DEPDIR)/libcollation_plugin_la-collate.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/collation/collate.c' object='ldap/servers/plugins/collation/libcollation_plugin_la-collate.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcollation_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/collation/libcollation_plugin_la-collate.lo `test -f 'ldap/servers/plugins/collation/collate.c' || echo '$(srcdir)/'`ldap/servers/plugins/collation/collate.c + +ldap/servers/plugins/collation/libcollation_plugin_la-config.lo: ldap/servers/plugins/collation/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcollation_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/collation/libcollation_plugin_la-config.lo -MD -MP -MF ldap/servers/plugins/collation/$(DEPDIR)/libcollation_plugin_la-config.Tpo -c -o ldap/servers/plugins/collation/libcollation_plugin_la-config.lo `test -f 'ldap/servers/plugins/collation/config.c' || echo '$(srcdir)/'`ldap/servers/plugins/collation/config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/collation/$(DEPDIR)/libcollation_plugin_la-config.Tpo ldap/servers/plugins/collation/$(DEPDIR)/libcollation_plugin_la-config.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/collation/config.c' object='ldap/servers/plugins/collation/libcollation_plugin_la-config.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcollation_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/collation/libcollation_plugin_la-config.lo `test -f 'ldap/servers/plugins/collation/config.c' || echo '$(srcdir)/'`ldap/servers/plugins/collation/config.c + +ldap/servers/plugins/collation/libcollation_plugin_la-orfilter.lo: ldap/servers/plugins/collation/orfilter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcollation_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/collation/libcollation_plugin_la-orfilter.lo -MD -MP -MF ldap/servers/plugins/collation/$(DEPDIR)/libcollation_plugin_la-orfilter.Tpo -c -o ldap/servers/plugins/collation/libcollation_plugin_la-orfilter.lo `test -f 'ldap/servers/plugins/collation/orfilter.c' || echo '$(srcdir)/'`ldap/servers/plugins/collation/orfilter.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/collation/$(DEPDIR)/libcollation_plugin_la-orfilter.Tpo ldap/servers/plugins/collation/$(DEPDIR)/libcollation_plugin_la-orfilter.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/collation/orfilter.c' object='ldap/servers/plugins/collation/libcollation_plugin_la-orfilter.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcollation_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/collation/libcollation_plugin_la-orfilter.lo `test -f 'ldap/servers/plugins/collation/orfilter.c' || echo '$(srcdir)/'`ldap/servers/plugins/collation/orfilter.c + +ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_init.lo: ldap/servers/plugins/sync/sync_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcontentsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_init.lo -MD -MP -MF ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_init.Tpo -c -o ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_init.lo `test -f 'ldap/servers/plugins/sync/sync_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/sync/sync_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_init.Tpo ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_init.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/sync/sync_init.c' object='ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_init.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcontentsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_init.lo `test -f 'ldap/servers/plugins/sync/sync_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/sync/sync_init.c + +ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_util.lo: ldap/servers/plugins/sync/sync_util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcontentsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_util.lo -MD -MP -MF ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_util.Tpo -c -o ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_util.lo `test -f 'ldap/servers/plugins/sync/sync_util.c' || echo '$(srcdir)/'`ldap/servers/plugins/sync/sync_util.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_util.Tpo ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_util.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/sync/sync_util.c' object='ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_util.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcontentsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_util.lo `test -f 'ldap/servers/plugins/sync/sync_util.c' || echo '$(srcdir)/'`ldap/servers/plugins/sync/sync_util.c + +ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_refresh.lo: ldap/servers/plugins/sync/sync_refresh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcontentsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_refresh.lo -MD -MP -MF ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_refresh.Tpo -c -o ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_refresh.lo `test -f 'ldap/servers/plugins/sync/sync_refresh.c' || echo '$(srcdir)/'`ldap/servers/plugins/sync/sync_refresh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_refresh.Tpo ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_refresh.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/sync/sync_refresh.c' object='ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_refresh.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcontentsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_refresh.lo `test -f 'ldap/servers/plugins/sync/sync_refresh.c' || echo '$(srcdir)/'`ldap/servers/plugins/sync/sync_refresh.c + +ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_persist.lo: ldap/servers/plugins/sync/sync_persist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcontentsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_persist.lo -MD -MP -MF ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_persist.Tpo -c -o ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_persist.lo `test -f 'ldap/servers/plugins/sync/sync_persist.c' || echo '$(srcdir)/'`ldap/servers/plugins/sync/sync_persist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_persist.Tpo ldap/servers/plugins/sync/$(DEPDIR)/libcontentsync_plugin_la-sync_persist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/sync/sync_persist.c' object='ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_persist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcontentsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/sync/libcontentsync_plugin_la-sync_persist.lo `test -f 'ldap/servers/plugins/sync/sync_persist.c' || echo '$(srcdir)/'`ldap/servers/plugins/sync/sync_persist.c + +ldap/servers/plugins/cos/libcos_plugin_la-cos.lo: ldap/servers/plugins/cos/cos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcos_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/cos/libcos_plugin_la-cos.lo -MD -MP -MF ldap/servers/plugins/cos/$(DEPDIR)/libcos_plugin_la-cos.Tpo -c -o ldap/servers/plugins/cos/libcos_plugin_la-cos.lo `test -f 'ldap/servers/plugins/cos/cos.c' || echo '$(srcdir)/'`ldap/servers/plugins/cos/cos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/cos/$(DEPDIR)/libcos_plugin_la-cos.Tpo ldap/servers/plugins/cos/$(DEPDIR)/libcos_plugin_la-cos.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/cos/cos.c' object='ldap/servers/plugins/cos/libcos_plugin_la-cos.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcos_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/cos/libcos_plugin_la-cos.lo `test -f 'ldap/servers/plugins/cos/cos.c' || echo '$(srcdir)/'`ldap/servers/plugins/cos/cos.c + +ldap/servers/plugins/cos/libcos_plugin_la-cos_cache.lo: ldap/servers/plugins/cos/cos_cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcos_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/cos/libcos_plugin_la-cos_cache.lo -MD -MP -MF ldap/servers/plugins/cos/$(DEPDIR)/libcos_plugin_la-cos_cache.Tpo -c -o ldap/servers/plugins/cos/libcos_plugin_la-cos_cache.lo `test -f 'ldap/servers/plugins/cos/cos_cache.c' || echo '$(srcdir)/'`ldap/servers/plugins/cos/cos_cache.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/cos/$(DEPDIR)/libcos_plugin_la-cos_cache.Tpo ldap/servers/plugins/cos/$(DEPDIR)/libcos_plugin_la-cos_cache.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/cos/cos_cache.c' object='ldap/servers/plugins/cos/libcos_plugin_la-cos_cache.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcos_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/cos/libcos_plugin_la-cos_cache.lo `test -f 'ldap/servers/plugins/cos/cos_cache.c' || echo '$(srcdir)/'`ldap/servers/plugins/cos/cos_cache.c + +ldap/servers/plugins/deref/libderef_plugin_la-deref.lo: ldap/servers/plugins/deref/deref.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libderef_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/deref/libderef_plugin_la-deref.lo -MD -MP -MF ldap/servers/plugins/deref/$(DEPDIR)/libderef_plugin_la-deref.Tpo -c -o ldap/servers/plugins/deref/libderef_plugin_la-deref.lo `test -f 'ldap/servers/plugins/deref/deref.c' || echo '$(srcdir)/'`ldap/servers/plugins/deref/deref.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/deref/$(DEPDIR)/libderef_plugin_la-deref.Tpo ldap/servers/plugins/deref/$(DEPDIR)/libderef_plugin_la-deref.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/deref/deref.c' object='ldap/servers/plugins/deref/libderef_plugin_la-deref.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libderef_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/deref/libderef_plugin_la-deref.lo `test -f 'ldap/servers/plugins/deref/deref.c' || echo '$(srcdir)/'`ldap/servers/plugins/deref/deref.c + +ldap/servers/plugins/distrib/libdistrib_plugin_la-distrib.lo: ldap/servers/plugins/distrib/distrib.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdistrib_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/distrib/libdistrib_plugin_la-distrib.lo -MD -MP -MF ldap/servers/plugins/distrib/$(DEPDIR)/libdistrib_plugin_la-distrib.Tpo -c -o ldap/servers/plugins/distrib/libdistrib_plugin_la-distrib.lo `test -f 'ldap/servers/plugins/distrib/distrib.c' || echo '$(srcdir)/'`ldap/servers/plugins/distrib/distrib.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/distrib/$(DEPDIR)/libdistrib_plugin_la-distrib.Tpo ldap/servers/plugins/distrib/$(DEPDIR)/libdistrib_plugin_la-distrib.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/distrib/distrib.c' object='ldap/servers/plugins/distrib/libdistrib_plugin_la-distrib.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdistrib_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/distrib/libdistrib_plugin_la-distrib.lo `test -f 'ldap/servers/plugins/distrib/distrib.c' || echo '$(srcdir)/'`ldap/servers/plugins/distrib/distrib.c + +ldap/servers/plugins/dna/libdna_plugin_la-dna.lo: ldap/servers/plugins/dna/dna.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdna_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/dna/libdna_plugin_la-dna.lo -MD -MP -MF ldap/servers/plugins/dna/$(DEPDIR)/libdna_plugin_la-dna.Tpo -c -o ldap/servers/plugins/dna/libdna_plugin_la-dna.lo `test -f 'ldap/servers/plugins/dna/dna.c' || echo '$(srcdir)/'`ldap/servers/plugins/dna/dna.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/dna/$(DEPDIR)/libdna_plugin_la-dna.Tpo ldap/servers/plugins/dna/$(DEPDIR)/libdna_plugin_la-dna.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/dna/dna.c' object='ldap/servers/plugins/dna/libdna_plugin_la-dna.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdna_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/dna/libdna_plugin_la-dna.lo `test -f 'ldap/servers/plugins/dna/dna.c' || echo '$(srcdir)/'`ldap/servers/plugins/dna/dna.c + +ldap/servers/plugins/http/libhttp_client_plugin_la-http_client.lo: ldap/servers/plugins/http/http_client.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhttp_client_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/http/libhttp_client_plugin_la-http_client.lo -MD -MP -MF ldap/servers/plugins/http/$(DEPDIR)/libhttp_client_plugin_la-http_client.Tpo -c -o ldap/servers/plugins/http/libhttp_client_plugin_la-http_client.lo `test -f 'ldap/servers/plugins/http/http_client.c' || echo '$(srcdir)/'`ldap/servers/plugins/http/http_client.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/http/$(DEPDIR)/libhttp_client_plugin_la-http_client.Tpo ldap/servers/plugins/http/$(DEPDIR)/libhttp_client_plugin_la-http_client.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/http/http_client.c' object='ldap/servers/plugins/http/libhttp_client_plugin_la-http_client.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhttp_client_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/http/libhttp_client_plugin_la-http_client.lo `test -f 'ldap/servers/plugins/http/http_client.c' || echo '$(srcdir)/'`ldap/servers/plugins/http/http_client.c + +ldap/servers/plugins/http/libhttp_client_plugin_la-http_impl.lo: ldap/servers/plugins/http/http_impl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhttp_client_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/http/libhttp_client_plugin_la-http_impl.lo -MD -MP -MF ldap/servers/plugins/http/$(DEPDIR)/libhttp_client_plugin_la-http_impl.Tpo -c -o ldap/servers/plugins/http/libhttp_client_plugin_la-http_impl.lo `test -f 'ldap/servers/plugins/http/http_impl.c' || echo '$(srcdir)/'`ldap/servers/plugins/http/http_impl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/http/$(DEPDIR)/libhttp_client_plugin_la-http_impl.Tpo ldap/servers/plugins/http/$(DEPDIR)/libhttp_client_plugin_la-http_impl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/http/http_impl.c' object='ldap/servers/plugins/http/libhttp_client_plugin_la-http_impl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhttp_client_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/http/libhttp_client_plugin_la-http_impl.lo `test -f 'ldap/servers/plugins/http/http_impl.c' || echo '$(srcdir)/'`ldap/servers/plugins/http/http_impl.c + +ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-fixup_task.lo: ldap/servers/plugins/linkedattrs/fixup_task.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblinkedattrs_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-fixup_task.lo -MD -MP -MF ldap/servers/plugins/linkedattrs/$(DEPDIR)/liblinkedattrs_plugin_la-fixup_task.Tpo -c -o ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-fixup_task.lo `test -f 'ldap/servers/plugins/linkedattrs/fixup_task.c' || echo '$(srcdir)/'`ldap/servers/plugins/linkedattrs/fixup_task.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/linkedattrs/$(DEPDIR)/liblinkedattrs_plugin_la-fixup_task.Tpo ldap/servers/plugins/linkedattrs/$(DEPDIR)/liblinkedattrs_plugin_la-fixup_task.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/linkedattrs/fixup_task.c' object='ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-fixup_task.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblinkedattrs_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-fixup_task.lo `test -f 'ldap/servers/plugins/linkedattrs/fixup_task.c' || echo '$(srcdir)/'`ldap/servers/plugins/linkedattrs/fixup_task.c + +ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-linked_attrs.lo: ldap/servers/plugins/linkedattrs/linked_attrs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblinkedattrs_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-linked_attrs.lo -MD -MP -MF ldap/servers/plugins/linkedattrs/$(DEPDIR)/liblinkedattrs_plugin_la-linked_attrs.Tpo -c -o ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-linked_attrs.lo `test -f 'ldap/servers/plugins/linkedattrs/linked_attrs.c' || echo '$(srcdir)/'`ldap/servers/plugins/linkedattrs/linked_attrs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/linkedattrs/$(DEPDIR)/liblinkedattrs_plugin_la-linked_attrs.Tpo ldap/servers/plugins/linkedattrs/$(DEPDIR)/liblinkedattrs_plugin_la-linked_attrs.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/linkedattrs/linked_attrs.c' object='ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-linked_attrs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblinkedattrs_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/linkedattrs/liblinkedattrs_plugin_la-linked_attrs.lo `test -f 'ldap/servers/plugins/linkedattrs/linked_attrs.c' || echo '$(srcdir)/'`ldap/servers/plugins/linkedattrs/linked_attrs.c + +ldap/servers/plugins/mep/libmanagedentries_plugin_la-mep.lo: ldap/servers/plugins/mep/mep.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmanagedentries_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/mep/libmanagedentries_plugin_la-mep.lo -MD -MP -MF ldap/servers/plugins/mep/$(DEPDIR)/libmanagedentries_plugin_la-mep.Tpo -c -o ldap/servers/plugins/mep/libmanagedentries_plugin_la-mep.lo `test -f 'ldap/servers/plugins/mep/mep.c' || echo '$(srcdir)/'`ldap/servers/plugins/mep/mep.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/mep/$(DEPDIR)/libmanagedentries_plugin_la-mep.Tpo ldap/servers/plugins/mep/$(DEPDIR)/libmanagedentries_plugin_la-mep.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/mep/mep.c' object='ldap/servers/plugins/mep/libmanagedentries_plugin_la-mep.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmanagedentries_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/mep/libmanagedentries_plugin_la-mep.lo `test -f 'ldap/servers/plugins/mep/mep.c' || echo '$(srcdir)/'`ldap/servers/plugins/mep/mep.c + +ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof.lo: ldap/servers/plugins/memberof/memberof.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmemberof_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof.lo -MD -MP -MF ldap/servers/plugins/memberof/$(DEPDIR)/libmemberof_plugin_la-memberof.Tpo -c -o ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof.lo `test -f 'ldap/servers/plugins/memberof/memberof.c' || echo '$(srcdir)/'`ldap/servers/plugins/memberof/memberof.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/memberof/$(DEPDIR)/libmemberof_plugin_la-memberof.Tpo ldap/servers/plugins/memberof/$(DEPDIR)/libmemberof_plugin_la-memberof.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/memberof/memberof.c' object='ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmemberof_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof.lo `test -f 'ldap/servers/plugins/memberof/memberof.c' || echo '$(srcdir)/'`ldap/servers/plugins/memberof/memberof.c + +ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof_config.lo: ldap/servers/plugins/memberof/memberof_config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmemberof_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof_config.lo -MD -MP -MF ldap/servers/plugins/memberof/$(DEPDIR)/libmemberof_plugin_la-memberof_config.Tpo -c -o ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof_config.lo `test -f 'ldap/servers/plugins/memberof/memberof_config.c' || echo '$(srcdir)/'`ldap/servers/plugins/memberof/memberof_config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/memberof/$(DEPDIR)/libmemberof_plugin_la-memberof_config.Tpo ldap/servers/plugins/memberof/$(DEPDIR)/libmemberof_plugin_la-memberof_config.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/memberof/memberof_config.c' object='ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof_config.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmemberof_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/memberof/libmemberof_plugin_la-memberof_config.lo `test -f 'ldap/servers/plugins/memberof/memberof_config.c' || echo '$(srcdir)/'`ldap/servers/plugins/memberof/memberof_config.c + +lib/libadmin/libns_dshttpd_la-error.lo: lib/libadmin/error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libadmin/libns_dshttpd_la-error.lo -MD -MP -MF lib/libadmin/$(DEPDIR)/libns_dshttpd_la-error.Tpo -c -o lib/libadmin/libns_dshttpd_la-error.lo `test -f 'lib/libadmin/error.c' || echo '$(srcdir)/'`lib/libadmin/error.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libadmin/$(DEPDIR)/libns_dshttpd_la-error.Tpo lib/libadmin/$(DEPDIR)/libns_dshttpd_la-error.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libadmin/error.c' object='lib/libadmin/libns_dshttpd_la-error.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libadmin/libns_dshttpd_la-error.lo `test -f 'lib/libadmin/error.c' || echo '$(srcdir)/'`lib/libadmin/error.c + +lib/libadmin/libns_dshttpd_la-template.lo: lib/libadmin/template.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libadmin/libns_dshttpd_la-template.lo -MD -MP -MF lib/libadmin/$(DEPDIR)/libns_dshttpd_la-template.Tpo -c -o lib/libadmin/libns_dshttpd_la-template.lo `test -f 'lib/libadmin/template.c' || echo '$(srcdir)/'`lib/libadmin/template.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libadmin/$(DEPDIR)/libns_dshttpd_la-template.Tpo lib/libadmin/$(DEPDIR)/libns_dshttpd_la-template.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libadmin/template.c' object='lib/libadmin/libns_dshttpd_la-template.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libadmin/libns_dshttpd_la-template.lo `test -f 'lib/libadmin/template.c' || echo '$(srcdir)/'`lib/libadmin/template.c + +lib/libadmin/libns_dshttpd_la-util.lo: lib/libadmin/util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libadmin/libns_dshttpd_la-util.lo -MD -MP -MF lib/libadmin/$(DEPDIR)/libns_dshttpd_la-util.Tpo -c -o lib/libadmin/libns_dshttpd_la-util.lo `test -f 'lib/libadmin/util.c' || echo '$(srcdir)/'`lib/libadmin/util.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libadmin/$(DEPDIR)/libns_dshttpd_la-util.Tpo lib/libadmin/$(DEPDIR)/libns_dshttpd_la-util.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libadmin/util.c' object='lib/libadmin/libns_dshttpd_la-util.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libadmin/libns_dshttpd_la-util.lo `test -f 'lib/libadmin/util.c' || echo '$(srcdir)/'`lib/libadmin/util.c + +lib/base/libns_dshttpd_la-nscperror.lo: lib/base/nscperror.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/base/libns_dshttpd_la-nscperror.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-nscperror.Tpo -c -o lib/base/libns_dshttpd_la-nscperror.lo `test -f 'lib/base/nscperror.c' || echo '$(srcdir)/'`lib/base/nscperror.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-nscperror.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-nscperror.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/base/nscperror.c' object='lib/base/libns_dshttpd_la-nscperror.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/base/libns_dshttpd_la-nscperror.lo `test -f 'lib/base/nscperror.c' || echo '$(srcdir)/'`lib/base/nscperror.c + +lib/libsi18n/libns_dshttpd_la-getstrprop.lo: lib/libsi18n/getstrprop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libsi18n/libns_dshttpd_la-getstrprop.lo -MD -MP -MF lib/libsi18n/$(DEPDIR)/libns_dshttpd_la-getstrprop.Tpo -c -o lib/libsi18n/libns_dshttpd_la-getstrprop.lo `test -f 'lib/libsi18n/getstrprop.c' || echo '$(srcdir)/'`lib/libsi18n/getstrprop.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libsi18n/$(DEPDIR)/libns_dshttpd_la-getstrprop.Tpo lib/libsi18n/$(DEPDIR)/libns_dshttpd_la-getstrprop.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libsi18n/getstrprop.c' object='lib/libsi18n/libns_dshttpd_la-getstrprop.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libsi18n/libns_dshttpd_la-getstrprop.lo `test -f 'lib/libsi18n/getstrprop.c' || echo '$(srcdir)/'`lib/libsi18n/getstrprop.c + +lib/libsi18n/libns_dshttpd_la-reshash.lo: lib/libsi18n/reshash.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libsi18n/libns_dshttpd_la-reshash.lo -MD -MP -MF lib/libsi18n/$(DEPDIR)/libns_dshttpd_la-reshash.Tpo -c -o lib/libsi18n/libns_dshttpd_la-reshash.lo `test -f 'lib/libsi18n/reshash.c' || echo '$(srcdir)/'`lib/libsi18n/reshash.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libsi18n/$(DEPDIR)/libns_dshttpd_la-reshash.Tpo lib/libsi18n/$(DEPDIR)/libns_dshttpd_la-reshash.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libsi18n/reshash.c' object='lib/libsi18n/libns_dshttpd_la-reshash.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libsi18n/libns_dshttpd_la-reshash.lo `test -f 'lib/libsi18n/reshash.c' || echo '$(srcdir)/'`lib/libsi18n/reshash.c + +lib/libsi18n/libns_dshttpd_la-txtfile.lo: lib/libsi18n/txtfile.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libsi18n/libns_dshttpd_la-txtfile.lo -MD -MP -MF lib/libsi18n/$(DEPDIR)/libns_dshttpd_la-txtfile.Tpo -c -o lib/libsi18n/libns_dshttpd_la-txtfile.lo `test -f 'lib/libsi18n/txtfile.c' || echo '$(srcdir)/'`lib/libsi18n/txtfile.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libsi18n/$(DEPDIR)/libns_dshttpd_la-txtfile.Tpo lib/libsi18n/$(DEPDIR)/libns_dshttpd_la-txtfile.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libsi18n/txtfile.c' object='lib/libsi18n/libns_dshttpd_la-txtfile.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libsi18n/libns_dshttpd_la-txtfile.lo `test -f 'lib/libsi18n/txtfile.c' || echo '$(srcdir)/'`lib/libsi18n/txtfile.c + +lib/ldaputil/libns_dshttpd_la-cert.lo: lib/ldaputil/cert.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libns_dshttpd_la-cert.lo -MD -MP -MF lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-cert.Tpo -c -o lib/ldaputil/libns_dshttpd_la-cert.lo `test -f 'lib/ldaputil/cert.c' || echo '$(srcdir)/'`lib/ldaputil/cert.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-cert.Tpo lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-cert.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/cert.c' object='lib/ldaputil/libns_dshttpd_la-cert.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libns_dshttpd_la-cert.lo `test -f 'lib/ldaputil/cert.c' || echo '$(srcdir)/'`lib/ldaputil/cert.c + +lib/ldaputil/libns_dshttpd_la-certmap.lo: lib/ldaputil/certmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libns_dshttpd_la-certmap.lo -MD -MP -MF lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-certmap.Tpo -c -o lib/ldaputil/libns_dshttpd_la-certmap.lo `test -f 'lib/ldaputil/certmap.c' || echo '$(srcdir)/'`lib/ldaputil/certmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-certmap.Tpo lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-certmap.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/certmap.c' object='lib/ldaputil/libns_dshttpd_la-certmap.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libns_dshttpd_la-certmap.lo `test -f 'lib/ldaputil/certmap.c' || echo '$(srcdir)/'`lib/ldaputil/certmap.c + +lib/ldaputil/libns_dshttpd_la-dbconf.lo: lib/ldaputil/dbconf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libns_dshttpd_la-dbconf.lo -MD -MP -MF lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-dbconf.Tpo -c -o lib/ldaputil/libns_dshttpd_la-dbconf.lo `test -f 'lib/ldaputil/dbconf.c' || echo '$(srcdir)/'`lib/ldaputil/dbconf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-dbconf.Tpo lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-dbconf.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/dbconf.c' object='lib/ldaputil/libns_dshttpd_la-dbconf.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libns_dshttpd_la-dbconf.lo `test -f 'lib/ldaputil/dbconf.c' || echo '$(srcdir)/'`lib/ldaputil/dbconf.c + +lib/ldaputil/libns_dshttpd_la-encode.lo: lib/ldaputil/encode.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libns_dshttpd_la-encode.lo -MD -MP -MF lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-encode.Tpo -c -o lib/ldaputil/libns_dshttpd_la-encode.lo `test -f 'lib/ldaputil/encode.c' || echo '$(srcdir)/'`lib/ldaputil/encode.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-encode.Tpo lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-encode.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/encode.c' object='lib/ldaputil/libns_dshttpd_la-encode.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libns_dshttpd_la-encode.lo `test -f 'lib/ldaputil/encode.c' || echo '$(srcdir)/'`lib/ldaputil/encode.c + +lib/ldaputil/libns_dshttpd_la-errors.lo: lib/ldaputil/errors.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libns_dshttpd_la-errors.lo -MD -MP -MF lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-errors.Tpo -c -o lib/ldaputil/libns_dshttpd_la-errors.lo `test -f 'lib/ldaputil/errors.c' || echo '$(srcdir)/'`lib/ldaputil/errors.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-errors.Tpo lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-errors.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/errors.c' object='lib/ldaputil/libns_dshttpd_la-errors.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libns_dshttpd_la-errors.lo `test -f 'lib/ldaputil/errors.c' || echo '$(srcdir)/'`lib/ldaputil/errors.c + +lib/ldaputil/libns_dshttpd_la-init.lo: lib/ldaputil/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libns_dshttpd_la-init.lo -MD -MP -MF lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-init.Tpo -c -o lib/ldaputil/libns_dshttpd_la-init.lo `test -f 'lib/ldaputil/init.c' || echo '$(srcdir)/'`lib/ldaputil/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-init.Tpo lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-init.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/init.c' object='lib/ldaputil/libns_dshttpd_la-init.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libns_dshttpd_la-init.lo `test -f 'lib/ldaputil/init.c' || echo '$(srcdir)/'`lib/ldaputil/init.c + +lib/ldaputil/libns_dshttpd_la-ldapauth.lo: lib/ldaputil/ldapauth.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libns_dshttpd_la-ldapauth.lo -MD -MP -MF lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-ldapauth.Tpo -c -o lib/ldaputil/libns_dshttpd_la-ldapauth.lo `test -f 'lib/ldaputil/ldapauth.c' || echo '$(srcdir)/'`lib/ldaputil/ldapauth.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-ldapauth.Tpo lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-ldapauth.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/ldapauth.c' object='lib/ldaputil/libns_dshttpd_la-ldapauth.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libns_dshttpd_la-ldapauth.lo `test -f 'lib/ldaputil/ldapauth.c' || echo '$(srcdir)/'`lib/ldaputil/ldapauth.c + +lib/ldaputil/libns_dshttpd_la-vtable.lo: lib/ldaputil/vtable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/ldaputil/libns_dshttpd_la-vtable.lo -MD -MP -MF lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-vtable.Tpo -c -o lib/ldaputil/libns_dshttpd_la-vtable.lo `test -f 'lib/ldaputil/vtable.c' || echo '$(srcdir)/'`lib/ldaputil/vtable.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-vtable.Tpo lib/ldaputil/$(DEPDIR)/libns_dshttpd_la-vtable.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ldaputil/vtable.c' object='lib/ldaputil/libns_dshttpd_la-vtable.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/ldaputil/libns_dshttpd_la-vtable.lo `test -f 'lib/ldaputil/vtable.c' || echo '$(srcdir)/'`lib/ldaputil/vtable.c + +ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptconfig.lo: ldap/servers/plugins/pam_passthru/pam_ptconfig.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpam_passthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptconfig.lo -MD -MP -MF ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptconfig.Tpo -c -o ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptconfig.lo `test -f 'ldap/servers/plugins/pam_passthru/pam_ptconfig.c' || echo '$(srcdir)/'`ldap/servers/plugins/pam_passthru/pam_ptconfig.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptconfig.Tpo ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptconfig.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pam_passthru/pam_ptconfig.c' object='ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptconfig.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpam_passthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptconfig.lo `test -f 'ldap/servers/plugins/pam_passthru/pam_ptconfig.c' || echo '$(srcdir)/'`ldap/servers/plugins/pam_passthru/pam_ptconfig.c + +ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptdebug.lo: ldap/servers/plugins/pam_passthru/pam_ptdebug.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpam_passthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptdebug.lo -MD -MP -MF ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptdebug.Tpo -c -o ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptdebug.lo `test -f 'ldap/servers/plugins/pam_passthru/pam_ptdebug.c' || echo '$(srcdir)/'`ldap/servers/plugins/pam_passthru/pam_ptdebug.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptdebug.Tpo ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptdebug.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pam_passthru/pam_ptdebug.c' object='ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptdebug.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpam_passthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptdebug.lo `test -f 'ldap/servers/plugins/pam_passthru/pam_ptdebug.c' || echo '$(srcdir)/'`ldap/servers/plugins/pam_passthru/pam_ptdebug.c + +ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptimpl.lo: ldap/servers/plugins/pam_passthru/pam_ptimpl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpam_passthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptimpl.lo -MD -MP -MF ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptimpl.Tpo -c -o ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptimpl.lo `test -f 'ldap/servers/plugins/pam_passthru/pam_ptimpl.c' || echo '$(srcdir)/'`ldap/servers/plugins/pam_passthru/pam_ptimpl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptimpl.Tpo ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptimpl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pam_passthru/pam_ptimpl.c' object='ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptimpl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpam_passthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptimpl.lo `test -f 'ldap/servers/plugins/pam_passthru/pam_ptimpl.c' || echo '$(srcdir)/'`ldap/servers/plugins/pam_passthru/pam_ptimpl.c + +ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptpreop.lo: ldap/servers/plugins/pam_passthru/pam_ptpreop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpam_passthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptpreop.lo -MD -MP -MF ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptpreop.Tpo -c -o ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptpreop.lo `test -f 'ldap/servers/plugins/pam_passthru/pam_ptpreop.c' || echo '$(srcdir)/'`ldap/servers/plugins/pam_passthru/pam_ptpreop.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptpreop.Tpo ldap/servers/plugins/pam_passthru/$(DEPDIR)/libpam_passthru_plugin_la-pam_ptpreop.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pam_passthru/pam_ptpreop.c' object='ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptpreop.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpam_passthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pam_passthru/libpam_passthru_plugin_la-pam_ptpreop.lo `test -f 'ldap/servers/plugins/pam_passthru/pam_ptpreop.c' || echo '$(srcdir)/'`ldap/servers/plugins/pam_passthru/pam_ptpreop.c + +ldap/servers/plugins/passthru/libpassthru_plugin_la-ptbind.lo: ldap/servers/plugins/passthru/ptbind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/passthru/libpassthru_plugin_la-ptbind.lo -MD -MP -MF ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptbind.Tpo -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptbind.lo `test -f 'ldap/servers/plugins/passthru/ptbind.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptbind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptbind.Tpo ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptbind.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/passthru/ptbind.c' object='ldap/servers/plugins/passthru/libpassthru_plugin_la-ptbind.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptbind.lo `test -f 'ldap/servers/plugins/passthru/ptbind.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptbind.c + +ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconfig.lo: ldap/servers/plugins/passthru/ptconfig.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconfig.lo -MD -MP -MF ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptconfig.Tpo -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconfig.lo `test -f 'ldap/servers/plugins/passthru/ptconfig.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptconfig.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptconfig.Tpo ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptconfig.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/passthru/ptconfig.c' object='ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconfig.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconfig.lo `test -f 'ldap/servers/plugins/passthru/ptconfig.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptconfig.c + +ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconn.lo: ldap/servers/plugins/passthru/ptconn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconn.lo -MD -MP -MF ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptconn.Tpo -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconn.lo `test -f 'ldap/servers/plugins/passthru/ptconn.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptconn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptconn.Tpo ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptconn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/passthru/ptconn.c' object='ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptconn.lo `test -f 'ldap/servers/plugins/passthru/ptconn.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptconn.c + +ldap/servers/plugins/passthru/libpassthru_plugin_la-ptdebug.lo: ldap/servers/plugins/passthru/ptdebug.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/passthru/libpassthru_plugin_la-ptdebug.lo -MD -MP -MF ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptdebug.Tpo -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptdebug.lo `test -f 'ldap/servers/plugins/passthru/ptdebug.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptdebug.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptdebug.Tpo ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptdebug.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/passthru/ptdebug.c' object='ldap/servers/plugins/passthru/libpassthru_plugin_la-ptdebug.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptdebug.lo `test -f 'ldap/servers/plugins/passthru/ptdebug.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptdebug.c + +ldap/servers/plugins/passthru/libpassthru_plugin_la-ptpreop.lo: ldap/servers/plugins/passthru/ptpreop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/passthru/libpassthru_plugin_la-ptpreop.lo -MD -MP -MF ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptpreop.Tpo -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptpreop.lo `test -f 'ldap/servers/plugins/passthru/ptpreop.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptpreop.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptpreop.Tpo ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptpreop.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/passthru/ptpreop.c' object='ldap/servers/plugins/passthru/libpassthru_plugin_la-ptpreop.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptpreop.lo `test -f 'ldap/servers/plugins/passthru/ptpreop.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptpreop.c + +ldap/servers/plugins/passthru/libpassthru_plugin_la-ptutil.lo: ldap/servers/plugins/passthru/ptutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/passthru/libpassthru_plugin_la-ptutil.lo -MD -MP -MF ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptutil.Tpo -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptutil.lo `test -f 'ldap/servers/plugins/passthru/ptutil.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptutil.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptutil.Tpo ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptutil.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/passthru/ptutil.c' object='ldap/servers/plugins/passthru/libpassthru_plugin_la-ptutil.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptutil.lo `test -f 'ldap/servers/plugins/passthru/ptutil.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptutil.c + +ldap/servers/plugins/rever/libpbe_plugin_la-pbe.lo: ldap/servers/plugins/rever/pbe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpbe_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/rever/libpbe_plugin_la-pbe.lo -MD -MP -MF ldap/servers/plugins/rever/$(DEPDIR)/libpbe_plugin_la-pbe.Tpo -c -o ldap/servers/plugins/rever/libpbe_plugin_la-pbe.lo `test -f 'ldap/servers/plugins/rever/pbe.c' || echo '$(srcdir)/'`ldap/servers/plugins/rever/pbe.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/rever/$(DEPDIR)/libpbe_plugin_la-pbe.Tpo ldap/servers/plugins/rever/$(DEPDIR)/libpbe_plugin_la-pbe.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/rever/pbe.c' object='ldap/servers/plugins/rever/libpbe_plugin_la-pbe.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpbe_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/rever/libpbe_plugin_la-pbe.lo `test -f 'ldap/servers/plugins/rever/pbe.c' || echo '$(srcdir)/'`ldap/servers/plugins/rever/pbe.c + +ldap/servers/plugins/rever/libpbe_plugin_la-rever.lo: ldap/servers/plugins/rever/rever.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpbe_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/rever/libpbe_plugin_la-rever.lo -MD -MP -MF ldap/servers/plugins/rever/$(DEPDIR)/libpbe_plugin_la-rever.Tpo -c -o ldap/servers/plugins/rever/libpbe_plugin_la-rever.lo `test -f 'ldap/servers/plugins/rever/rever.c' || echo '$(srcdir)/'`ldap/servers/plugins/rever/rever.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/rever/$(DEPDIR)/libpbe_plugin_la-rever.Tpo ldap/servers/plugins/rever/$(DEPDIR)/libpbe_plugin_la-rever.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/rever/rever.c' object='ldap/servers/plugins/rever/libpbe_plugin_la-rever.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpbe_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/rever/libpbe_plugin_la-rever.lo `test -f 'ldap/servers/plugins/rever/rever.c' || echo '$(srcdir)/'`ldap/servers/plugins/rever/rever.c + +ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo: ldap/servers/plugins/posix-winsync/posix-winsync.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo -MD -MP -MF ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync.Tpo -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-winsync.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-winsync.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync.Tpo ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/posix-winsync/posix-winsync.c' object='ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-winsync.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-winsync.c + +ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo: ldap/servers/plugins/posix-winsync/posix-group-func.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo -MD -MP -MF ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-func.Tpo -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-group-func.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-group-func.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-func.Tpo ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-func.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/posix-winsync/posix-group-func.c' object='ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-group-func.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-group-func.c + +ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo: ldap/servers/plugins/posix-winsync/posix-group-task.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo -MD -MP -MF ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-task.Tpo -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-group-task.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-group-task.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-task.Tpo ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-task.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/posix-winsync/posix-group-task.c' object='ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-group-task.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-group-task.c + +ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo: ldap/servers/plugins/posix-winsync/posix-winsync-config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo -MD -MP -MF ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync-config.Tpo -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-winsync-config.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-winsync-config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync-config.Tpo ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync-config.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/posix-winsync/posix-winsync-config.c' object='ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-winsync-config.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-winsync-config.c + +ldap/servers/plugins/presence/libpresence_plugin_la-presence.lo: ldap/servers/plugins/presence/presence.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpresence_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/presence/libpresence_plugin_la-presence.lo -MD -MP -MF ldap/servers/plugins/presence/$(DEPDIR)/libpresence_plugin_la-presence.Tpo -c -o ldap/servers/plugins/presence/libpresence_plugin_la-presence.lo `test -f 'ldap/servers/plugins/presence/presence.c' || echo '$(srcdir)/'`ldap/servers/plugins/presence/presence.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/presence/$(DEPDIR)/libpresence_plugin_la-presence.Tpo ldap/servers/plugins/presence/$(DEPDIR)/libpresence_plugin_la-presence.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/presence/presence.c' object='ldap/servers/plugins/presence/libpresence_plugin_la-presence.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpresence_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/presence/libpresence_plugin_la-presence.lo `test -f 'ldap/servers/plugins/presence/presence.c' || echo '$(srcdir)/'`ldap/servers/plugins/presence/presence.c + +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-clear_pwd.lo: ldap/servers/plugins/pwdstorage/clear_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-clear_pwd.lo -MD -MP -MF ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-clear_pwd.Tpo -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-clear_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/clear_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/clear_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-clear_pwd.Tpo ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-clear_pwd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pwdstorage/clear_pwd.c' object='ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-clear_pwd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-clear_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/clear_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/clear_pwd.c + +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-crypt_pwd.lo: ldap/servers/plugins/pwdstorage/crypt_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-crypt_pwd.lo -MD -MP -MF ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-crypt_pwd.Tpo -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-crypt_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/crypt_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/crypt_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-crypt_pwd.Tpo ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-crypt_pwd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pwdstorage/crypt_pwd.c' object='ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-crypt_pwd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-crypt_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/crypt_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/crypt_pwd.c + +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5_pwd.lo: ldap/servers/plugins/pwdstorage/md5_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5_pwd.lo -MD -MP -MF ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-md5_pwd.Tpo -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/md5_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/md5_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-md5_pwd.Tpo ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-md5_pwd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pwdstorage/md5_pwd.c' object='ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5_pwd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/md5_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/md5_pwd.c + +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5c.lo: ldap/servers/plugins/pwdstorage/md5c.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5c.lo -MD -MP -MF ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-md5c.Tpo -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5c.lo `test -f 'ldap/servers/plugins/pwdstorage/md5c.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/md5c.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-md5c.Tpo ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-md5c.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pwdstorage/md5c.c' object='ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5c.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-md5c.lo `test -f 'ldap/servers/plugins/pwdstorage/md5c.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/md5c.c + +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ns-mta-md5_pwd.lo: ldap/servers/plugins/pwdstorage/ns-mta-md5_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ns-mta-md5_pwd.lo -MD -MP -MF ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-ns-mta-md5_pwd.Tpo -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ns-mta-md5_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/ns-mta-md5_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/ns-mta-md5_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-ns-mta-md5_pwd.Tpo ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-ns-mta-md5_pwd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pwdstorage/ns-mta-md5_pwd.c' object='ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ns-mta-md5_pwd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ns-mta-md5_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/ns-mta-md5_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/ns-mta-md5_pwd.c + +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_init.lo: ldap/servers/plugins/pwdstorage/pwd_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_init.lo -MD -MP -MF ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-pwd_init.Tpo -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_init.lo `test -f 'ldap/servers/plugins/pwdstorage/pwd_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/pwd_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-pwd_init.Tpo ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-pwd_init.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pwdstorage/pwd_init.c' object='ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_init.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_init.lo `test -f 'ldap/servers/plugins/pwdstorage/pwd_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/pwd_init.c + +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_util.lo: ldap/servers/plugins/pwdstorage/pwd_util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_util.lo -MD -MP -MF ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-pwd_util.Tpo -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_util.lo `test -f 'ldap/servers/plugins/pwdstorage/pwd_util.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/pwd_util.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-pwd_util.Tpo ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-pwd_util.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pwdstorage/pwd_util.c' object='ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_util.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-pwd_util.lo `test -f 'ldap/servers/plugins/pwdstorage/pwd_util.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/pwd_util.c + +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-sha_pwd.lo: ldap/servers/plugins/pwdstorage/sha_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-sha_pwd.lo -MD -MP -MF ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-sha_pwd.Tpo -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-sha_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/sha_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/sha_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-sha_pwd.Tpo ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-sha_pwd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pwdstorage/sha_pwd.c' object='ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-sha_pwd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-sha_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/sha_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/sha_pwd.c + +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-smd5_pwd.lo: ldap/servers/plugins/pwdstorage/smd5_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-smd5_pwd.lo -MD -MP -MF ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-smd5_pwd.Tpo -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-smd5_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/smd5_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/smd5_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-smd5_pwd.Tpo ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-smd5_pwd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pwdstorage/smd5_pwd.c' object='ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-smd5_pwd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-smd5_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/smd5_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/smd5_pwd.c + +ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ssha_pwd.lo: ldap/servers/plugins/pwdstorage/ssha_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ssha_pwd.lo -MD -MP -MF ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-ssha_pwd.Tpo -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ssha_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/ssha_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/ssha_pwd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-ssha_pwd.Tpo ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-ssha_pwd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/pwdstorage/ssha_pwd.c' object='ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ssha_pwd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpwdstorage_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-ssha_pwd.lo `test -f 'ldap/servers/plugins/pwdstorage/ssha_pwd.c' || echo '$(srcdir)/'`ldap/servers/plugins/pwdstorage/ssha_pwd.c + +ldap/servers/plugins/referint/libreferint_plugin_la-referint.lo: ldap/servers/plugins/referint/referint.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreferint_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/referint/libreferint_plugin_la-referint.lo -MD -MP -MF ldap/servers/plugins/referint/$(DEPDIR)/libreferint_plugin_la-referint.Tpo -c -o ldap/servers/plugins/referint/libreferint_plugin_la-referint.lo `test -f 'ldap/servers/plugins/referint/referint.c' || echo '$(srcdir)/'`ldap/servers/plugins/referint/referint.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/referint/$(DEPDIR)/libreferint_plugin_la-referint.Tpo ldap/servers/plugins/referint/$(DEPDIR)/libreferint_plugin_la-referint.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/referint/referint.c' object='ldap/servers/plugins/referint/libreferint_plugin_la-referint.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreferint_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/referint/libreferint_plugin_la-referint.lo `test -f 'ldap/servers/plugins/referint/referint.c' || echo '$(srcdir)/'`ldap/servers/plugins/referint/referint.c + +ldap/servers/plugins/replication/libreplication_plugin_la-cl5_api.lo: ldap/servers/plugins/replication/cl5_api.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-cl5_api.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_api.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-cl5_api.lo `test -f 'ldap/servers/plugins/replication/cl5_api.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/cl5_api.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_api.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_api.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/cl5_api.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-cl5_api.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-cl5_api.lo `test -f 'ldap/servers/plugins/replication/cl5_api.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/cl5_api.c + +ldap/servers/plugins/replication/libreplication_plugin_la-cl5_clcache.lo: ldap/servers/plugins/replication/cl5_clcache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-cl5_clcache.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_clcache.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-cl5_clcache.lo `test -f 'ldap/servers/plugins/replication/cl5_clcache.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/cl5_clcache.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_clcache.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_clcache.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/cl5_clcache.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-cl5_clcache.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-cl5_clcache.lo `test -f 'ldap/servers/plugins/replication/cl5_clcache.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/cl5_clcache.c + +ldap/servers/plugins/replication/libreplication_plugin_la-cl5_config.lo: ldap/servers/plugins/replication/cl5_config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-cl5_config.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_config.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-cl5_config.lo `test -f 'ldap/servers/plugins/replication/cl5_config.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/cl5_config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_config.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_config.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/cl5_config.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-cl5_config.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-cl5_config.lo `test -f 'ldap/servers/plugins/replication/cl5_config.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/cl5_config.c + +ldap/servers/plugins/replication/libreplication_plugin_la-cl5_init.lo: ldap/servers/plugins/replication/cl5_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-cl5_init.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_init.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-cl5_init.lo `test -f 'ldap/servers/plugins/replication/cl5_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/cl5_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_init.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl5_init.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/cl5_init.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-cl5_init.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-cl5_init.lo `test -f 'ldap/servers/plugins/replication/cl5_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/cl5_init.c + +ldap/servers/plugins/replication/libreplication_plugin_la-cl_crypt.lo: ldap/servers/plugins/replication/cl_crypt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-cl_crypt.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl_crypt.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-cl_crypt.lo `test -f 'ldap/servers/plugins/replication/cl_crypt.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/cl_crypt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl_crypt.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-cl_crypt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/cl_crypt.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-cl_crypt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-cl_crypt.lo `test -f 'ldap/servers/plugins/replication/cl_crypt.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/cl_crypt.c + +ldap/servers/plugins/replication/libreplication_plugin_la-csnpl.lo: ldap/servers/plugins/replication/csnpl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-csnpl.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-csnpl.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-csnpl.lo `test -f 'ldap/servers/plugins/replication/csnpl.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/csnpl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-csnpl.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-csnpl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/csnpl.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-csnpl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-csnpl.lo `test -f 'ldap/servers/plugins/replication/csnpl.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/csnpl.c + +ldap/servers/plugins/replication/libreplication_plugin_la-legacy_consumer.lo: ldap/servers/plugins/replication/legacy_consumer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-legacy_consumer.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-legacy_consumer.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-legacy_consumer.lo `test -f 'ldap/servers/plugins/replication/legacy_consumer.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/legacy_consumer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-legacy_consumer.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-legacy_consumer.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/legacy_consumer.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-legacy_consumer.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-legacy_consumer.lo `test -f 'ldap/servers/plugins/replication/legacy_consumer.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/legacy_consumer.c + +ldap/servers/plugins/replication/libreplication_plugin_la-llist.lo: ldap/servers/plugins/replication/llist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-llist.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-llist.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-llist.lo `test -f 'ldap/servers/plugins/replication/llist.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/llist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-llist.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-llist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/llist.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-llist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-llist.lo `test -f 'ldap/servers/plugins/replication/llist.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/llist.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_add.lo: ldap/servers/plugins/replication/repl_add.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_add.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_add.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_add.lo `test -f 'ldap/servers/plugins/replication/repl_add.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_add.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_add.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_add.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_add.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_add.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_add.lo `test -f 'ldap/servers/plugins/replication/repl_add.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_add.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_bind.lo: ldap/servers/plugins/replication/repl_bind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_bind.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_bind.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_bind.lo `test -f 'ldap/servers/plugins/replication/repl_bind.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_bind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_bind.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_bind.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_bind.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_bind.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_bind.lo `test -f 'ldap/servers/plugins/replication/repl_bind.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_bind.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_compare.lo: ldap/servers/plugins/replication/repl_compare.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_compare.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_compare.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_compare.lo `test -f 'ldap/servers/plugins/replication/repl_compare.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_compare.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_compare.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_compare.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_compare.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_compare.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_compare.lo `test -f 'ldap/servers/plugins/replication/repl_compare.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_compare.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_connext.lo: ldap/servers/plugins/replication/repl_connext.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_connext.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_connext.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_connext.lo `test -f 'ldap/servers/plugins/replication/repl_connext.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_connext.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_connext.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_connext.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_connext.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_connext.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_connext.lo `test -f 'ldap/servers/plugins/replication/repl_connext.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_connext.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_controls.lo: ldap/servers/plugins/replication/repl_controls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_controls.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_controls.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_controls.lo `test -f 'ldap/servers/plugins/replication/repl_controls.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_controls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_controls.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_controls.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_controls.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_controls.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_controls.lo `test -f 'ldap/servers/plugins/replication/repl_controls.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_controls.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_delete.lo: ldap/servers/plugins/replication/repl_delete.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_delete.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_delete.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_delete.lo `test -f 'ldap/servers/plugins/replication/repl_delete.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_delete.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_delete.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_delete.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_delete.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_delete.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_delete.lo `test -f 'ldap/servers/plugins/replication/repl_delete.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_delete.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_entry.lo: ldap/servers/plugins/replication/repl_entry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_entry.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_entry.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_entry.lo `test -f 'ldap/servers/plugins/replication/repl_entry.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_entry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_entry.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_entry.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_entry.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_entry.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_entry.lo `test -f 'ldap/servers/plugins/replication/repl_entry.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_entry.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_ext.lo: ldap/servers/plugins/replication/repl_ext.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_ext.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_ext.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_ext.lo `test -f 'ldap/servers/plugins/replication/repl_ext.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_ext.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_ext.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_ext.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_ext.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_ext.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_ext.lo `test -f 'ldap/servers/plugins/replication/repl_ext.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_ext.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_extop.lo: ldap/servers/plugins/replication/repl_extop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_extop.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_extop.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_extop.lo `test -f 'ldap/servers/plugins/replication/repl_extop.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_extop.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_extop.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_extop.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_extop.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_extop.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_extop.lo `test -f 'ldap/servers/plugins/replication/repl_extop.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_extop.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_globals.lo: ldap/servers/plugins/replication/repl_globals.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_globals.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_globals.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_globals.lo `test -f 'ldap/servers/plugins/replication/repl_globals.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_globals.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_globals.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_globals.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_globals.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_globals.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_globals.lo `test -f 'ldap/servers/plugins/replication/repl_globals.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_globals.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_init.lo: ldap/servers/plugins/replication/repl_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_init.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_init.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_init.lo `test -f 'ldap/servers/plugins/replication/repl_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_init.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_init.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_init.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_init.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_init.lo `test -f 'ldap/servers/plugins/replication/repl_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_init.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_modify.lo: ldap/servers/plugins/replication/repl_modify.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_modify.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_modify.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_modify.lo `test -f 'ldap/servers/plugins/replication/repl_modify.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_modify.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_modify.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_modify.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_modify.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_modify.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_modify.lo `test -f 'ldap/servers/plugins/replication/repl_modify.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_modify.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_modrdn.lo: ldap/servers/plugins/replication/repl_modrdn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_modrdn.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_modrdn.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_modrdn.lo `test -f 'ldap/servers/plugins/replication/repl_modrdn.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_modrdn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_modrdn.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_modrdn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_modrdn.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_modrdn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_modrdn.lo `test -f 'ldap/servers/plugins/replication/repl_modrdn.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_modrdn.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_monitor.lo: ldap/servers/plugins/replication/repl_monitor.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_monitor.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_monitor.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_monitor.lo `test -f 'ldap/servers/plugins/replication/repl_monitor.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_monitor.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_monitor.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_monitor.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_monitor.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_monitor.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_monitor.lo `test -f 'ldap/servers/plugins/replication/repl_monitor.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_monitor.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_objset.lo: ldap/servers/plugins/replication/repl_objset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_objset.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_objset.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_objset.lo `test -f 'ldap/servers/plugins/replication/repl_objset.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_objset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_objset.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_objset.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_objset.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_objset.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_objset.lo `test -f 'ldap/servers/plugins/replication/repl_objset.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_objset.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_opext.lo: ldap/servers/plugins/replication/repl_opext.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_opext.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_opext.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_opext.lo `test -f 'ldap/servers/plugins/replication/repl_opext.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_opext.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_opext.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_opext.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_opext.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_opext.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_opext.lo `test -f 'ldap/servers/plugins/replication/repl_opext.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_opext.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_ops.lo: ldap/servers/plugins/replication/repl_ops.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_ops.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_ops.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_ops.lo `test -f 'ldap/servers/plugins/replication/repl_ops.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_ops.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_ops.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_ops.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_ops.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_ops.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_ops.lo `test -f 'ldap/servers/plugins/replication/repl_ops.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_ops.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_rootdse.lo: ldap/servers/plugins/replication/repl_rootdse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_rootdse.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_rootdse.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_rootdse.lo `test -f 'ldap/servers/plugins/replication/repl_rootdse.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_rootdse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_rootdse.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_rootdse.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_rootdse.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_rootdse.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_rootdse.lo `test -f 'ldap/servers/plugins/replication/repl_rootdse.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_rootdse.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_search.lo: ldap/servers/plugins/replication/repl_search.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_search.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_search.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_search.lo `test -f 'ldap/servers/plugins/replication/repl_search.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_search.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_search.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_search.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_search.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_search.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_search.lo `test -f 'ldap/servers/plugins/replication/repl_search.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_search.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl_session_plugin.lo: ldap/servers/plugins/replication/repl_session_plugin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl_session_plugin.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_session_plugin.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_session_plugin.lo `test -f 'ldap/servers/plugins/replication/repl_session_plugin.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_session_plugin.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_session_plugin.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl_session_plugin.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl_session_plugin.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl_session_plugin.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl_session_plugin.lo `test -f 'ldap/servers/plugins/replication/repl_session_plugin.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl_session_plugin.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmt.lo: ldap/servers/plugins/replication/repl5_agmt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmt.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_agmt.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmt.lo `test -f 'ldap/servers/plugins/replication/repl5_agmt.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_agmt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_agmt.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_agmt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_agmt.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmt.lo `test -f 'ldap/servers/plugins/replication/repl5_agmt.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_agmt.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmtlist.lo: ldap/servers/plugins/replication/repl5_agmtlist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmtlist.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_agmtlist.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmtlist.lo `test -f 'ldap/servers/plugins/replication/repl5_agmtlist.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_agmtlist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_agmtlist.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_agmtlist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_agmtlist.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmtlist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_agmtlist.lo `test -f 'ldap/servers/plugins/replication/repl5_agmtlist.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_agmtlist.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_backoff.lo: ldap/servers/plugins/replication/repl5_backoff.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_backoff.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_backoff.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_backoff.lo `test -f 'ldap/servers/plugins/replication/repl5_backoff.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_backoff.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_backoff.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_backoff.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_backoff.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_backoff.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_backoff.lo `test -f 'ldap/servers/plugins/replication/repl5_backoff.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_backoff.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_connection.lo: ldap/servers/plugins/replication/repl5_connection.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_connection.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_connection.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_connection.lo `test -f 'ldap/servers/plugins/replication/repl5_connection.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_connection.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_connection.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_connection.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_connection.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_connection.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_connection.lo `test -f 'ldap/servers/plugins/replication/repl5_connection.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_connection.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_inc_protocol.lo: ldap/servers/plugins/replication/repl5_inc_protocol.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_inc_protocol.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_inc_protocol.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_inc_protocol.lo `test -f 'ldap/servers/plugins/replication/repl5_inc_protocol.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_inc_protocol.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_inc_protocol.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_inc_protocol.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_inc_protocol.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_inc_protocol.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_inc_protocol.lo `test -f 'ldap/servers/plugins/replication/repl5_inc_protocol.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_inc_protocol.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_init.lo: ldap/servers/plugins/replication/repl5_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_init.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_init.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_init.lo `test -f 'ldap/servers/plugins/replication/repl5_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_init.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_init.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_init.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_init.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_init.lo `test -f 'ldap/servers/plugins/replication/repl5_init.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_init.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_mtnode_ext.lo: ldap/servers/plugins/replication/repl5_mtnode_ext.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_mtnode_ext.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_mtnode_ext.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_mtnode_ext.lo `test -f 'ldap/servers/plugins/replication/repl5_mtnode_ext.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_mtnode_ext.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_mtnode_ext.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_mtnode_ext.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_mtnode_ext.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_mtnode_ext.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_mtnode_ext.lo `test -f 'ldap/servers/plugins/replication/repl5_mtnode_ext.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_mtnode_ext.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_plugins.lo: ldap/servers/plugins/replication/repl5_plugins.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_plugins.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_plugins.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_plugins.lo `test -f 'ldap/servers/plugins/replication/repl5_plugins.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_plugins.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_plugins.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_plugins.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_plugins.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_plugins.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_plugins.lo `test -f 'ldap/servers/plugins/replication/repl5_plugins.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_plugins.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol.lo: ldap/servers/plugins/replication/repl5_protocol.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_protocol.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol.lo `test -f 'ldap/servers/plugins/replication/repl5_protocol.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_protocol.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_protocol.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_protocol.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_protocol.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol.lo `test -f 'ldap/servers/plugins/replication/repl5_protocol.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_protocol.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol_util.lo: ldap/servers/plugins/replication/repl5_protocol_util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol_util.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_protocol_util.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol_util.lo `test -f 'ldap/servers/plugins/replication/repl5_protocol_util.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_protocol_util.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_protocol_util.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_protocol_util.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_protocol_util.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol_util.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_protocol_util.lo `test -f 'ldap/servers/plugins/replication/repl5_protocol_util.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_protocol_util.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica.lo: ldap/servers/plugins/replication/repl5_replica.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica.lo `test -f 'ldap/servers/plugins/replication/repl5_replica.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_replica.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_replica.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica.lo `test -f 'ldap/servers/plugins/replication/repl5_replica.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_replica.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_config.lo: ldap/servers/plugins/replication/repl5_replica_config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_config.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica_config.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_config.lo `test -f 'ldap/servers/plugins/replication/repl5_replica_config.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_replica_config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica_config.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica_config.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_replica_config.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_config.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_config.lo `test -f 'ldap/servers/plugins/replication/repl5_replica_config.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_replica_config.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_dnhash.lo: ldap/servers/plugins/replication/repl5_replica_dnhash.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_dnhash.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica_dnhash.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_dnhash.lo `test -f 'ldap/servers/plugins/replication/repl5_replica_dnhash.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_replica_dnhash.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica_dnhash.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica_dnhash.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_replica_dnhash.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_dnhash.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_dnhash.lo `test -f 'ldap/servers/plugins/replication/repl5_replica_dnhash.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_replica_dnhash.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_hash.lo: ldap/servers/plugins/replication/repl5_replica_hash.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_hash.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica_hash.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_hash.lo `test -f 'ldap/servers/plugins/replication/repl5_replica_hash.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_replica_hash.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica_hash.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_replica_hash.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_replica_hash.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_hash.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_replica_hash.lo `test -f 'ldap/servers/plugins/replication/repl5_replica_hash.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_replica_hash.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_ruv.lo: ldap/servers/plugins/replication/repl5_ruv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_ruv.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_ruv.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_ruv.lo `test -f 'ldap/servers/plugins/replication/repl5_ruv.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_ruv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_ruv.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_ruv.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_ruv.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_ruv.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_ruv.lo `test -f 'ldap/servers/plugins/replication/repl5_ruv.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_ruv.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_schedule.lo: ldap/servers/plugins/replication/repl5_schedule.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_schedule.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_schedule.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_schedule.lo `test -f 'ldap/servers/plugins/replication/repl5_schedule.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_schedule.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_schedule.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_schedule.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_schedule.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_schedule.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_schedule.lo `test -f 'ldap/servers/plugins/replication/repl5_schedule.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_schedule.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_tot_protocol.lo: ldap/servers/plugins/replication/repl5_tot_protocol.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_tot_protocol.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_tot_protocol.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_tot_protocol.lo `test -f 'ldap/servers/plugins/replication/repl5_tot_protocol.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_tot_protocol.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_tot_protocol.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_tot_protocol.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_tot_protocol.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_tot_protocol.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_tot_protocol.lo `test -f 'ldap/servers/plugins/replication/repl5_tot_protocol.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_tot_protocol.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_total.lo: ldap/servers/plugins/replication/repl5_total.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_total.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_total.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_total.lo `test -f 'ldap/servers/plugins/replication/repl5_total.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_total.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_total.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_total.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_total.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_total.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_total.lo `test -f 'ldap/servers/plugins/replication/repl5_total.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_total.c + +ldap/servers/plugins/replication/libreplication_plugin_la-repl5_updatedn_list.lo: ldap/servers/plugins/replication/repl5_updatedn_list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-repl5_updatedn_list.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_updatedn_list.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_updatedn_list.lo `test -f 'ldap/servers/plugins/replication/repl5_updatedn_list.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_updatedn_list.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_updatedn_list.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-repl5_updatedn_list.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/repl5_updatedn_list.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-repl5_updatedn_list.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-repl5_updatedn_list.lo `test -f 'ldap/servers/plugins/replication/repl5_updatedn_list.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/repl5_updatedn_list.c + +ldap/servers/plugins/replication/libreplication_plugin_la-replutil.lo: ldap/servers/plugins/replication/replutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-replutil.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-replutil.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-replutil.lo `test -f 'ldap/servers/plugins/replication/replutil.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/replutil.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-replutil.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-replutil.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/replutil.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-replutil.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-replutil.lo `test -f 'ldap/servers/plugins/replication/replutil.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/replutil.c + +ldap/servers/plugins/replication/libreplication_plugin_la-urp.lo: ldap/servers/plugins/replication/urp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-urp.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-urp.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-urp.lo `test -f 'ldap/servers/plugins/replication/urp.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/urp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-urp.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-urp.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/urp.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-urp.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-urp.lo `test -f 'ldap/servers/plugins/replication/urp.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/urp.c + +ldap/servers/plugins/replication/libreplication_plugin_la-urp_glue.lo: ldap/servers/plugins/replication/urp_glue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-urp_glue.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-urp_glue.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-urp_glue.lo `test -f 'ldap/servers/plugins/replication/urp_glue.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/urp_glue.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-urp_glue.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-urp_glue.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/urp_glue.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-urp_glue.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-urp_glue.lo `test -f 'ldap/servers/plugins/replication/urp_glue.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/urp_glue.c + +ldap/servers/plugins/replication/libreplication_plugin_la-urp_tombstone.lo: ldap/servers/plugins/replication/urp_tombstone.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-urp_tombstone.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-urp_tombstone.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-urp_tombstone.lo `test -f 'ldap/servers/plugins/replication/urp_tombstone.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/urp_tombstone.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-urp_tombstone.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-urp_tombstone.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/urp_tombstone.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-urp_tombstone.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-urp_tombstone.lo `test -f 'ldap/servers/plugins/replication/urp_tombstone.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/urp_tombstone.c + +ldap/servers/plugins/replication/libreplication_plugin_la-windows_connection.lo: ldap/servers/plugins/replication/windows_connection.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-windows_connection.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_connection.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-windows_connection.lo `test -f 'ldap/servers/plugins/replication/windows_connection.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/windows_connection.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_connection.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_connection.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/windows_connection.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-windows_connection.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-windows_connection.lo `test -f 'ldap/servers/plugins/replication/windows_connection.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/windows_connection.c + +ldap/servers/plugins/replication/libreplication_plugin_la-windows_inc_protocol.lo: ldap/servers/plugins/replication/windows_inc_protocol.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-windows_inc_protocol.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_inc_protocol.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-windows_inc_protocol.lo `test -f 'ldap/servers/plugins/replication/windows_inc_protocol.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/windows_inc_protocol.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_inc_protocol.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_inc_protocol.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/windows_inc_protocol.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-windows_inc_protocol.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-windows_inc_protocol.lo `test -f 'ldap/servers/plugins/replication/windows_inc_protocol.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/windows_inc_protocol.c + +ldap/servers/plugins/replication/libreplication_plugin_la-windows_private.lo: ldap/servers/plugins/replication/windows_private.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-windows_private.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_private.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-windows_private.lo `test -f 'ldap/servers/plugins/replication/windows_private.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/windows_private.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_private.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_private.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/windows_private.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-windows_private.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-windows_private.lo `test -f 'ldap/servers/plugins/replication/windows_private.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/windows_private.c + +ldap/servers/plugins/replication/libreplication_plugin_la-windows_protocol_util.lo: ldap/servers/plugins/replication/windows_protocol_util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-windows_protocol_util.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_protocol_util.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-windows_protocol_util.lo `test -f 'ldap/servers/plugins/replication/windows_protocol_util.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/windows_protocol_util.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_protocol_util.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_protocol_util.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/windows_protocol_util.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-windows_protocol_util.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-windows_protocol_util.lo `test -f 'ldap/servers/plugins/replication/windows_protocol_util.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/windows_protocol_util.c + +ldap/servers/plugins/replication/libreplication_plugin_la-windows_tot_protocol.lo: ldap/servers/plugins/replication/windows_tot_protocol.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/replication/libreplication_plugin_la-windows_tot_protocol.lo -MD -MP -MF ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_tot_protocol.Tpo -c -o ldap/servers/plugins/replication/libreplication_plugin_la-windows_tot_protocol.lo `test -f 'ldap/servers/plugins/replication/windows_tot_protocol.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/windows_tot_protocol.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_tot_protocol.Tpo ldap/servers/plugins/replication/$(DEPDIR)/libreplication_plugin_la-windows_tot_protocol.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/replication/windows_tot_protocol.c' object='ldap/servers/plugins/replication/libreplication_plugin_la-windows_tot_protocol.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libreplication_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/replication/libreplication_plugin_la-windows_tot_protocol.lo `test -f 'ldap/servers/plugins/replication/windows_tot_protocol.c' || echo '$(srcdir)/'`ldap/servers/plugins/replication/windows_tot_protocol.c + +ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl.lo: ldap/servers/plugins/retrocl/retrocl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libretrocl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl.lo -MD -MP -MF ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl.Tpo -c -o ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl.lo `test -f 'ldap/servers/plugins/retrocl/retrocl.c' || echo '$(srcdir)/'`ldap/servers/plugins/retrocl/retrocl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl.Tpo ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/retrocl/retrocl.c' object='ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libretrocl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl.lo `test -f 'ldap/servers/plugins/retrocl/retrocl.c' || echo '$(srcdir)/'`ldap/servers/plugins/retrocl/retrocl.c + +ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_cn.lo: ldap/servers/plugins/retrocl/retrocl_cn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libretrocl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_cn.lo -MD -MP -MF ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_cn.Tpo -c -o ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_cn.lo `test -f 'ldap/servers/plugins/retrocl/retrocl_cn.c' || echo '$(srcdir)/'`ldap/servers/plugins/retrocl/retrocl_cn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_cn.Tpo ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_cn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/retrocl/retrocl_cn.c' object='ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_cn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libretrocl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_cn.lo `test -f 'ldap/servers/plugins/retrocl/retrocl_cn.c' || echo '$(srcdir)/'`ldap/servers/plugins/retrocl/retrocl_cn.c + +ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_create.lo: ldap/servers/plugins/retrocl/retrocl_create.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libretrocl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_create.lo -MD -MP -MF ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_create.Tpo -c -o ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_create.lo `test -f 'ldap/servers/plugins/retrocl/retrocl_create.c' || echo '$(srcdir)/'`ldap/servers/plugins/retrocl/retrocl_create.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_create.Tpo ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_create.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/retrocl/retrocl_create.c' object='ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_create.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libretrocl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_create.lo `test -f 'ldap/servers/plugins/retrocl/retrocl_create.c' || echo '$(srcdir)/'`ldap/servers/plugins/retrocl/retrocl_create.c + +ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_po.lo: ldap/servers/plugins/retrocl/retrocl_po.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libretrocl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_po.lo -MD -MP -MF ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_po.Tpo -c -o ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_po.lo `test -f 'ldap/servers/plugins/retrocl/retrocl_po.c' || echo '$(srcdir)/'`ldap/servers/plugins/retrocl/retrocl_po.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_po.Tpo ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_po.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/retrocl/retrocl_po.c' object='ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_po.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libretrocl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_po.lo `test -f 'ldap/servers/plugins/retrocl/retrocl_po.c' || echo '$(srcdir)/'`ldap/servers/plugins/retrocl/retrocl_po.c + +ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_rootdse.lo: ldap/servers/plugins/retrocl/retrocl_rootdse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libretrocl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_rootdse.lo -MD -MP -MF ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_rootdse.Tpo -c -o ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_rootdse.lo `test -f 'ldap/servers/plugins/retrocl/retrocl_rootdse.c' || echo '$(srcdir)/'`ldap/servers/plugins/retrocl/retrocl_rootdse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_rootdse.Tpo ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_rootdse.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/retrocl/retrocl_rootdse.c' object='ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_rootdse.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libretrocl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_rootdse.lo `test -f 'ldap/servers/plugins/retrocl/retrocl_rootdse.c' || echo '$(srcdir)/'`ldap/servers/plugins/retrocl/retrocl_rootdse.c + +ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_trim.lo: ldap/servers/plugins/retrocl/retrocl_trim.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libretrocl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_trim.lo -MD -MP -MF ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_trim.Tpo -c -o ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_trim.lo `test -f 'ldap/servers/plugins/retrocl/retrocl_trim.c' || echo '$(srcdir)/'`ldap/servers/plugins/retrocl/retrocl_trim.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_trim.Tpo ldap/servers/plugins/retrocl/$(DEPDIR)/libretrocl_plugin_la-retrocl_trim.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/retrocl/retrocl_trim.c' object='ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_trim.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libretrocl_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/retrocl/libretrocl_plugin_la-retrocl_trim.lo `test -f 'ldap/servers/plugins/retrocl/retrocl_trim.c' || echo '$(srcdir)/'`ldap/servers/plugins/retrocl/retrocl_trim.c + +ldap/servers/plugins/roles/libroles_plugin_la-roles_cache.lo: ldap/servers/plugins/roles/roles_cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroles_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/roles/libroles_plugin_la-roles_cache.lo -MD -MP -MF ldap/servers/plugins/roles/$(DEPDIR)/libroles_plugin_la-roles_cache.Tpo -c -o ldap/servers/plugins/roles/libroles_plugin_la-roles_cache.lo `test -f 'ldap/servers/plugins/roles/roles_cache.c' || echo '$(srcdir)/'`ldap/servers/plugins/roles/roles_cache.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/roles/$(DEPDIR)/libroles_plugin_la-roles_cache.Tpo ldap/servers/plugins/roles/$(DEPDIR)/libroles_plugin_la-roles_cache.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/roles/roles_cache.c' object='ldap/servers/plugins/roles/libroles_plugin_la-roles_cache.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroles_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/roles/libroles_plugin_la-roles_cache.lo `test -f 'ldap/servers/plugins/roles/roles_cache.c' || echo '$(srcdir)/'`ldap/servers/plugins/roles/roles_cache.c + +ldap/servers/plugins/roles/libroles_plugin_la-roles_plugin.lo: ldap/servers/plugins/roles/roles_plugin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroles_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/roles/libroles_plugin_la-roles_plugin.lo -MD -MP -MF ldap/servers/plugins/roles/$(DEPDIR)/libroles_plugin_la-roles_plugin.Tpo -c -o ldap/servers/plugins/roles/libroles_plugin_la-roles_plugin.lo `test -f 'ldap/servers/plugins/roles/roles_plugin.c' || echo '$(srcdir)/'`ldap/servers/plugins/roles/roles_plugin.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/roles/$(DEPDIR)/libroles_plugin_la-roles_plugin.Tpo ldap/servers/plugins/roles/$(DEPDIR)/libroles_plugin_la-roles_plugin.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/roles/roles_plugin.c' object='ldap/servers/plugins/roles/libroles_plugin_la-roles_plugin.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroles_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/roles/libroles_plugin_la-roles_plugin.lo `test -f 'ldap/servers/plugins/roles/roles_plugin.c' || echo '$(srcdir)/'`ldap/servers/plugins/roles/roles_plugin.c + +ldap/servers/plugins/rootdn_access/librootdn_access_plugin_la-rootdn_access.lo: ldap/servers/plugins/rootdn_access/rootdn_access.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(librootdn_access_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/rootdn_access/librootdn_access_plugin_la-rootdn_access.lo -MD -MP -MF ldap/servers/plugins/rootdn_access/$(DEPDIR)/librootdn_access_plugin_la-rootdn_access.Tpo -c -o ldap/servers/plugins/rootdn_access/librootdn_access_plugin_la-rootdn_access.lo `test -f 'ldap/servers/plugins/rootdn_access/rootdn_access.c' || echo '$(srcdir)/'`ldap/servers/plugins/rootdn_access/rootdn_access.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/rootdn_access/$(DEPDIR)/librootdn_access_plugin_la-rootdn_access.Tpo ldap/servers/plugins/rootdn_access/$(DEPDIR)/librootdn_access_plugin_la-rootdn_access.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/rootdn_access/rootdn_access.c' object='ldap/servers/plugins/rootdn_access/librootdn_access_plugin_la-rootdn_access.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(librootdn_access_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/rootdn_access/librootdn_access_plugin_la-rootdn_access.lo `test -f 'ldap/servers/plugins/rootdn_access/rootdn_access.c' || echo '$(srcdir)/'`ldap/servers/plugins/rootdn_access/rootdn_access.c + +ldap/servers/plugins/schema_reload/libschemareload_plugin_la-schema_reload.lo: ldap/servers/plugins/schema_reload/schema_reload.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libschemareload_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/schema_reload/libschemareload_plugin_la-schema_reload.lo -MD -MP -MF ldap/servers/plugins/schema_reload/$(DEPDIR)/libschemareload_plugin_la-schema_reload.Tpo -c -o ldap/servers/plugins/schema_reload/libschemareload_plugin_la-schema_reload.lo `test -f 'ldap/servers/plugins/schema_reload/schema_reload.c' || echo '$(srcdir)/'`ldap/servers/plugins/schema_reload/schema_reload.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/schema_reload/$(DEPDIR)/libschemareload_plugin_la-schema_reload.Tpo ldap/servers/plugins/schema_reload/$(DEPDIR)/libschemareload_plugin_la-schema_reload.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/schema_reload/schema_reload.c' object='ldap/servers/plugins/schema_reload/libschemareload_plugin_la-schema_reload.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libschemareload_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/schema_reload/libschemareload_plugin_la-schema_reload.lo `test -f 'ldap/servers/plugins/schema_reload/schema_reload.c' || echo '$(srcdir)/'`ldap/servers/plugins/schema_reload/schema_reload.c + +ldap/servers/slapd/libslapd_la-add.lo: ldap/servers/slapd/add.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-add.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-add.Tpo -c -o ldap/servers/slapd/libslapd_la-add.lo `test -f 'ldap/servers/slapd/add.c' || echo '$(srcdir)/'`ldap/servers/slapd/add.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-add.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-add.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/add.c' object='ldap/servers/slapd/libslapd_la-add.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-add.lo `test -f 'ldap/servers/slapd/add.c' || echo '$(srcdir)/'`ldap/servers/slapd/add.c + +ldap/servers/slapd/libslapd_la-agtmmap.lo: ldap/servers/slapd/agtmmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-agtmmap.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-agtmmap.Tpo -c -o ldap/servers/slapd/libslapd_la-agtmmap.lo `test -f 'ldap/servers/slapd/agtmmap.c' || echo '$(srcdir)/'`ldap/servers/slapd/agtmmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-agtmmap.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-agtmmap.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/agtmmap.c' object='ldap/servers/slapd/libslapd_la-agtmmap.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-agtmmap.lo `test -f 'ldap/servers/slapd/agtmmap.c' || echo '$(srcdir)/'`ldap/servers/slapd/agtmmap.c + +ldap/servers/slapd/libslapd_la-apibroker.lo: ldap/servers/slapd/apibroker.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-apibroker.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-apibroker.Tpo -c -o ldap/servers/slapd/libslapd_la-apibroker.lo `test -f 'ldap/servers/slapd/apibroker.c' || echo '$(srcdir)/'`ldap/servers/slapd/apibroker.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-apibroker.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-apibroker.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/apibroker.c' object='ldap/servers/slapd/libslapd_la-apibroker.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-apibroker.lo `test -f 'ldap/servers/slapd/apibroker.c' || echo '$(srcdir)/'`ldap/servers/slapd/apibroker.c + +ldap/servers/slapd/libslapd_la-attr.lo: ldap/servers/slapd/attr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-attr.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-attr.Tpo -c -o ldap/servers/slapd/libslapd_la-attr.lo `test -f 'ldap/servers/slapd/attr.c' || echo '$(srcdir)/'`ldap/servers/slapd/attr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-attr.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-attr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/attr.c' object='ldap/servers/slapd/libslapd_la-attr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-attr.lo `test -f 'ldap/servers/slapd/attr.c' || echo '$(srcdir)/'`ldap/servers/slapd/attr.c + +ldap/servers/slapd/libslapd_la-attrlist.lo: ldap/servers/slapd/attrlist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-attrlist.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-attrlist.Tpo -c -o ldap/servers/slapd/libslapd_la-attrlist.lo `test -f 'ldap/servers/slapd/attrlist.c' || echo '$(srcdir)/'`ldap/servers/slapd/attrlist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-attrlist.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-attrlist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/attrlist.c' object='ldap/servers/slapd/libslapd_la-attrlist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-attrlist.lo `test -f 'ldap/servers/slapd/attrlist.c' || echo '$(srcdir)/'`ldap/servers/slapd/attrlist.c + +ldap/servers/slapd/libslapd_la-attrsyntax.lo: ldap/servers/slapd/attrsyntax.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-attrsyntax.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-attrsyntax.Tpo -c -o ldap/servers/slapd/libslapd_la-attrsyntax.lo `test -f 'ldap/servers/slapd/attrsyntax.c' || echo '$(srcdir)/'`ldap/servers/slapd/attrsyntax.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-attrsyntax.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-attrsyntax.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/attrsyntax.c' object='ldap/servers/slapd/libslapd_la-attrsyntax.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-attrsyntax.lo `test -f 'ldap/servers/slapd/attrsyntax.c' || echo '$(srcdir)/'`ldap/servers/slapd/attrsyntax.c + +ldap/servers/slapd/libslapd_la-auditlog.lo: ldap/servers/slapd/auditlog.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-auditlog.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-auditlog.Tpo -c -o ldap/servers/slapd/libslapd_la-auditlog.lo `test -f 'ldap/servers/slapd/auditlog.c' || echo '$(srcdir)/'`ldap/servers/slapd/auditlog.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-auditlog.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-auditlog.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/auditlog.c' object='ldap/servers/slapd/libslapd_la-auditlog.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-auditlog.lo `test -f 'ldap/servers/slapd/auditlog.c' || echo '$(srcdir)/'`ldap/servers/slapd/auditlog.c + +ldap/servers/slapd/libslapd_la-ava.lo: ldap/servers/slapd/ava.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-ava.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-ava.Tpo -c -o ldap/servers/slapd/libslapd_la-ava.lo `test -f 'ldap/servers/slapd/ava.c' || echo '$(srcdir)/'`ldap/servers/slapd/ava.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-ava.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-ava.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/ava.c' object='ldap/servers/slapd/libslapd_la-ava.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-ava.lo `test -f 'ldap/servers/slapd/ava.c' || echo '$(srcdir)/'`ldap/servers/slapd/ava.c + +ldap/servers/slapd/libslapd_la-backend.lo: ldap/servers/slapd/backend.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-backend.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-backend.Tpo -c -o ldap/servers/slapd/libslapd_la-backend.lo `test -f 'ldap/servers/slapd/backend.c' || echo '$(srcdir)/'`ldap/servers/slapd/backend.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-backend.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-backend.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/backend.c' object='ldap/servers/slapd/libslapd_la-backend.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-backend.lo `test -f 'ldap/servers/slapd/backend.c' || echo '$(srcdir)/'`ldap/servers/slapd/backend.c + +ldap/servers/slapd/libslapd_la-backend_manager.lo: ldap/servers/slapd/backend_manager.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-backend_manager.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-backend_manager.Tpo -c -o ldap/servers/slapd/libslapd_la-backend_manager.lo `test -f 'ldap/servers/slapd/backend_manager.c' || echo '$(srcdir)/'`ldap/servers/slapd/backend_manager.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-backend_manager.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-backend_manager.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/backend_manager.c' object='ldap/servers/slapd/libslapd_la-backend_manager.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-backend_manager.lo `test -f 'ldap/servers/slapd/backend_manager.c' || echo '$(srcdir)/'`ldap/servers/slapd/backend_manager.c + +ldap/servers/slapd/libslapd_la-bitset.lo: ldap/servers/slapd/bitset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-bitset.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-bitset.Tpo -c -o ldap/servers/slapd/libslapd_la-bitset.lo `test -f 'ldap/servers/slapd/bitset.c' || echo '$(srcdir)/'`ldap/servers/slapd/bitset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-bitset.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-bitset.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/bitset.c' object='ldap/servers/slapd/libslapd_la-bitset.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-bitset.lo `test -f 'ldap/servers/slapd/bitset.c' || echo '$(srcdir)/'`ldap/servers/slapd/bitset.c + +ldap/servers/slapd/libslapd_la-bulk_import.lo: ldap/servers/slapd/bulk_import.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-bulk_import.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-bulk_import.Tpo -c -o ldap/servers/slapd/libslapd_la-bulk_import.lo `test -f 'ldap/servers/slapd/bulk_import.c' || echo '$(srcdir)/'`ldap/servers/slapd/bulk_import.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-bulk_import.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-bulk_import.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/bulk_import.c' object='ldap/servers/slapd/libslapd_la-bulk_import.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-bulk_import.lo `test -f 'ldap/servers/slapd/bulk_import.c' || echo '$(srcdir)/'`ldap/servers/slapd/bulk_import.c + +ldap/servers/slapd/libslapd_la-charray.lo: ldap/servers/slapd/charray.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-charray.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-charray.Tpo -c -o ldap/servers/slapd/libslapd_la-charray.lo `test -f 'ldap/servers/slapd/charray.c' || echo '$(srcdir)/'`ldap/servers/slapd/charray.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-charray.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-charray.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/charray.c' object='ldap/servers/slapd/libslapd_la-charray.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-charray.lo `test -f 'ldap/servers/slapd/charray.c' || echo '$(srcdir)/'`ldap/servers/slapd/charray.c + +ldap/servers/slapd/libslapd_la-ch_malloc.lo: ldap/servers/slapd/ch_malloc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-ch_malloc.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-ch_malloc.Tpo -c -o ldap/servers/slapd/libslapd_la-ch_malloc.lo `test -f 'ldap/servers/slapd/ch_malloc.c' || echo '$(srcdir)/'`ldap/servers/slapd/ch_malloc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-ch_malloc.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-ch_malloc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/ch_malloc.c' object='ldap/servers/slapd/libslapd_la-ch_malloc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-ch_malloc.lo `test -f 'ldap/servers/slapd/ch_malloc.c' || echo '$(srcdir)/'`ldap/servers/slapd/ch_malloc.c + +ldap/servers/slapd/libslapd_la-computed.lo: ldap/servers/slapd/computed.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-computed.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-computed.Tpo -c -o ldap/servers/slapd/libslapd_la-computed.lo `test -f 'ldap/servers/slapd/computed.c' || echo '$(srcdir)/'`ldap/servers/slapd/computed.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-computed.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-computed.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/computed.c' object='ldap/servers/slapd/libslapd_la-computed.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-computed.lo `test -f 'ldap/servers/slapd/computed.c' || echo '$(srcdir)/'`ldap/servers/slapd/computed.c + +ldap/servers/slapd/libslapd_la-control.lo: ldap/servers/slapd/control.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-control.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-control.Tpo -c -o ldap/servers/slapd/libslapd_la-control.lo `test -f 'ldap/servers/slapd/control.c' || echo '$(srcdir)/'`ldap/servers/slapd/control.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-control.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-control.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/control.c' object='ldap/servers/slapd/libslapd_la-control.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-control.lo `test -f 'ldap/servers/slapd/control.c' || echo '$(srcdir)/'`ldap/servers/slapd/control.c + +ldap/servers/slapd/libslapd_la-counters.lo: ldap/servers/slapd/counters.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-counters.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-counters.Tpo -c -o ldap/servers/slapd/libslapd_la-counters.lo `test -f 'ldap/servers/slapd/counters.c' || echo '$(srcdir)/'`ldap/servers/slapd/counters.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-counters.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-counters.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/counters.c' object='ldap/servers/slapd/libslapd_la-counters.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-counters.lo `test -f 'ldap/servers/slapd/counters.c' || echo '$(srcdir)/'`ldap/servers/slapd/counters.c + +ldap/servers/slapd/libslapd_la-csn.lo: ldap/servers/slapd/csn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-csn.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-csn.Tpo -c -o ldap/servers/slapd/libslapd_la-csn.lo `test -f 'ldap/servers/slapd/csn.c' || echo '$(srcdir)/'`ldap/servers/slapd/csn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-csn.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-csn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/csn.c' object='ldap/servers/slapd/libslapd_la-csn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-csn.lo `test -f 'ldap/servers/slapd/csn.c' || echo '$(srcdir)/'`ldap/servers/slapd/csn.c + +ldap/servers/slapd/libslapd_la-csngen.lo: ldap/servers/slapd/csngen.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-csngen.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-csngen.Tpo -c -o ldap/servers/slapd/libslapd_la-csngen.lo `test -f 'ldap/servers/slapd/csngen.c' || echo '$(srcdir)/'`ldap/servers/slapd/csngen.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-csngen.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-csngen.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/csngen.c' object='ldap/servers/slapd/libslapd_la-csngen.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-csngen.lo `test -f 'ldap/servers/slapd/csngen.c' || echo '$(srcdir)/'`ldap/servers/slapd/csngen.c + +ldap/servers/slapd/libslapd_la-csnset.lo: ldap/servers/slapd/csnset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-csnset.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-csnset.Tpo -c -o ldap/servers/slapd/libslapd_la-csnset.lo `test -f 'ldap/servers/slapd/csnset.c' || echo '$(srcdir)/'`ldap/servers/slapd/csnset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-csnset.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-csnset.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/csnset.c' object='ldap/servers/slapd/libslapd_la-csnset.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-csnset.lo `test -f 'ldap/servers/slapd/csnset.c' || echo '$(srcdir)/'`ldap/servers/slapd/csnset.c + +ldap/servers/slapd/libslapd_la-defbackend.lo: ldap/servers/slapd/defbackend.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-defbackend.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-defbackend.Tpo -c -o ldap/servers/slapd/libslapd_la-defbackend.lo `test -f 'ldap/servers/slapd/defbackend.c' || echo '$(srcdir)/'`ldap/servers/slapd/defbackend.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-defbackend.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-defbackend.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/defbackend.c' object='ldap/servers/slapd/libslapd_la-defbackend.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-defbackend.lo `test -f 'ldap/servers/slapd/defbackend.c' || echo '$(srcdir)/'`ldap/servers/slapd/defbackend.c + +ldap/servers/slapd/libslapd_la-delete.lo: ldap/servers/slapd/delete.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-delete.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-delete.Tpo -c -o ldap/servers/slapd/libslapd_la-delete.lo `test -f 'ldap/servers/slapd/delete.c' || echo '$(srcdir)/'`ldap/servers/slapd/delete.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-delete.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-delete.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/delete.c' object='ldap/servers/slapd/libslapd_la-delete.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-delete.lo `test -f 'ldap/servers/slapd/delete.c' || echo '$(srcdir)/'`ldap/servers/slapd/delete.c + +ldap/servers/slapd/libslapd_la-dl.lo: ldap/servers/slapd/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-dl.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-dl.Tpo -c -o ldap/servers/slapd/libslapd_la-dl.lo `test -f 'ldap/servers/slapd/dl.c' || echo '$(srcdir)/'`ldap/servers/slapd/dl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-dl.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-dl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/dl.c' object='ldap/servers/slapd/libslapd_la-dl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-dl.lo `test -f 'ldap/servers/slapd/dl.c' || echo '$(srcdir)/'`ldap/servers/slapd/dl.c + +ldap/servers/slapd/libslapd_la-dn.lo: ldap/servers/slapd/dn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-dn.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-dn.Tpo -c -o ldap/servers/slapd/libslapd_la-dn.lo `test -f 'ldap/servers/slapd/dn.c' || echo '$(srcdir)/'`ldap/servers/slapd/dn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-dn.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-dn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/dn.c' object='ldap/servers/slapd/libslapd_la-dn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-dn.lo `test -f 'ldap/servers/slapd/dn.c' || echo '$(srcdir)/'`ldap/servers/slapd/dn.c + +ldap/servers/slapd/libslapd_la-dse.lo: ldap/servers/slapd/dse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-dse.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-dse.Tpo -c -o ldap/servers/slapd/libslapd_la-dse.lo `test -f 'ldap/servers/slapd/dse.c' || echo '$(srcdir)/'`ldap/servers/slapd/dse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-dse.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-dse.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/dse.c' object='ldap/servers/slapd/libslapd_la-dse.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-dse.lo `test -f 'ldap/servers/slapd/dse.c' || echo '$(srcdir)/'`ldap/servers/slapd/dse.c + +ldap/servers/slapd/libslapd_la-dynalib.lo: ldap/servers/slapd/dynalib.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-dynalib.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-dynalib.Tpo -c -o ldap/servers/slapd/libslapd_la-dynalib.lo `test -f 'ldap/servers/slapd/dynalib.c' || echo '$(srcdir)/'`ldap/servers/slapd/dynalib.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-dynalib.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-dynalib.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/dynalib.c' object='ldap/servers/slapd/libslapd_la-dynalib.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-dynalib.lo `test -f 'ldap/servers/slapd/dynalib.c' || echo '$(srcdir)/'`ldap/servers/slapd/dynalib.c + +ldap/servers/slapd/libslapd_la-entry.lo: ldap/servers/slapd/entry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-entry.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-entry.Tpo -c -o ldap/servers/slapd/libslapd_la-entry.lo `test -f 'ldap/servers/slapd/entry.c' || echo '$(srcdir)/'`ldap/servers/slapd/entry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-entry.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-entry.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/entry.c' object='ldap/servers/slapd/libslapd_la-entry.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-entry.lo `test -f 'ldap/servers/slapd/entry.c' || echo '$(srcdir)/'`ldap/servers/slapd/entry.c + +ldap/servers/slapd/libslapd_la-entrywsi.lo: ldap/servers/slapd/entrywsi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-entrywsi.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-entrywsi.Tpo -c -o ldap/servers/slapd/libslapd_la-entrywsi.lo `test -f 'ldap/servers/slapd/entrywsi.c' || echo '$(srcdir)/'`ldap/servers/slapd/entrywsi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-entrywsi.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-entrywsi.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/entrywsi.c' object='ldap/servers/slapd/libslapd_la-entrywsi.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-entrywsi.lo `test -f 'ldap/servers/slapd/entrywsi.c' || echo '$(srcdir)/'`ldap/servers/slapd/entrywsi.c + +ldap/servers/slapd/libslapd_la-errormap.lo: ldap/servers/slapd/errormap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-errormap.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-errormap.Tpo -c -o ldap/servers/slapd/libslapd_la-errormap.lo `test -f 'ldap/servers/slapd/errormap.c' || echo '$(srcdir)/'`ldap/servers/slapd/errormap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-errormap.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-errormap.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/errormap.c' object='ldap/servers/slapd/libslapd_la-errormap.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-errormap.lo `test -f 'ldap/servers/slapd/errormap.c' || echo '$(srcdir)/'`ldap/servers/slapd/errormap.c + +ldap/servers/slapd/libslapd_la-eventq.lo: ldap/servers/slapd/eventq.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-eventq.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-eventq.Tpo -c -o ldap/servers/slapd/libslapd_la-eventq.lo `test -f 'ldap/servers/slapd/eventq.c' || echo '$(srcdir)/'`ldap/servers/slapd/eventq.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-eventq.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-eventq.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/eventq.c' object='ldap/servers/slapd/libslapd_la-eventq.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-eventq.lo `test -f 'ldap/servers/slapd/eventq.c' || echo '$(srcdir)/'`ldap/servers/slapd/eventq.c + +ldap/servers/slapd/libslapd_la-factory.lo: ldap/servers/slapd/factory.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-factory.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-factory.Tpo -c -o ldap/servers/slapd/libslapd_la-factory.lo `test -f 'ldap/servers/slapd/factory.c' || echo '$(srcdir)/'`ldap/servers/slapd/factory.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-factory.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-factory.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/factory.c' object='ldap/servers/slapd/libslapd_la-factory.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-factory.lo `test -f 'ldap/servers/slapd/factory.c' || echo '$(srcdir)/'`ldap/servers/slapd/factory.c + +ldap/servers/slapd/libslapd_la-features.lo: ldap/servers/slapd/features.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-features.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-features.Tpo -c -o ldap/servers/slapd/libslapd_la-features.lo `test -f 'ldap/servers/slapd/features.c' || echo '$(srcdir)/'`ldap/servers/slapd/features.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-features.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-features.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/features.c' object='ldap/servers/slapd/libslapd_la-features.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-features.lo `test -f 'ldap/servers/slapd/features.c' || echo '$(srcdir)/'`ldap/servers/slapd/features.c + +ldap/servers/slapd/libslapd_la-fileio.lo: ldap/servers/slapd/fileio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-fileio.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-fileio.Tpo -c -o ldap/servers/slapd/libslapd_la-fileio.lo `test -f 'ldap/servers/slapd/fileio.c' || echo '$(srcdir)/'`ldap/servers/slapd/fileio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-fileio.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-fileio.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/fileio.c' object='ldap/servers/slapd/libslapd_la-fileio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-fileio.lo `test -f 'ldap/servers/slapd/fileio.c' || echo '$(srcdir)/'`ldap/servers/slapd/fileio.c + +ldap/servers/slapd/libslapd_la-filter.lo: ldap/servers/slapd/filter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-filter.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-filter.Tpo -c -o ldap/servers/slapd/libslapd_la-filter.lo `test -f 'ldap/servers/slapd/filter.c' || echo '$(srcdir)/'`ldap/servers/slapd/filter.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-filter.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-filter.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/filter.c' object='ldap/servers/slapd/libslapd_la-filter.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-filter.lo `test -f 'ldap/servers/slapd/filter.c' || echo '$(srcdir)/'`ldap/servers/slapd/filter.c + +ldap/servers/slapd/libslapd_la-filtercmp.lo: ldap/servers/slapd/filtercmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-filtercmp.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-filtercmp.Tpo -c -o ldap/servers/slapd/libslapd_la-filtercmp.lo `test -f 'ldap/servers/slapd/filtercmp.c' || echo '$(srcdir)/'`ldap/servers/slapd/filtercmp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-filtercmp.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-filtercmp.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/filtercmp.c' object='ldap/servers/slapd/libslapd_la-filtercmp.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-filtercmp.lo `test -f 'ldap/servers/slapd/filtercmp.c' || echo '$(srcdir)/'`ldap/servers/slapd/filtercmp.c + +ldap/servers/slapd/libslapd_la-filterentry.lo: ldap/servers/slapd/filterentry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-filterentry.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-filterentry.Tpo -c -o ldap/servers/slapd/libslapd_la-filterentry.lo `test -f 'ldap/servers/slapd/filterentry.c' || echo '$(srcdir)/'`ldap/servers/slapd/filterentry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-filterentry.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-filterentry.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/filterentry.c' object='ldap/servers/slapd/libslapd_la-filterentry.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-filterentry.lo `test -f 'ldap/servers/slapd/filterentry.c' || echo '$(srcdir)/'`ldap/servers/slapd/filterentry.c + +ldap/servers/slapd/libslapd_la-generation.lo: ldap/servers/slapd/generation.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-generation.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-generation.Tpo -c -o ldap/servers/slapd/libslapd_la-generation.lo `test -f 'ldap/servers/slapd/generation.c' || echo '$(srcdir)/'`ldap/servers/slapd/generation.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-generation.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-generation.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/generation.c' object='ldap/servers/slapd/libslapd_la-generation.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-generation.lo `test -f 'ldap/servers/slapd/generation.c' || echo '$(srcdir)/'`ldap/servers/slapd/generation.c + +ldap/servers/slapd/libslapd_la-getfilelist.lo: ldap/servers/slapd/getfilelist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-getfilelist.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-getfilelist.Tpo -c -o ldap/servers/slapd/libslapd_la-getfilelist.lo `test -f 'ldap/servers/slapd/getfilelist.c' || echo '$(srcdir)/'`ldap/servers/slapd/getfilelist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-getfilelist.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-getfilelist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/getfilelist.c' object='ldap/servers/slapd/libslapd_la-getfilelist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-getfilelist.lo `test -f 'ldap/servers/slapd/getfilelist.c' || echo '$(srcdir)/'`ldap/servers/slapd/getfilelist.c + +ldap/servers/slapd/libslapd_la-index_subsystem.lo: ldap/servers/slapd/index_subsystem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-index_subsystem.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-index_subsystem.Tpo -c -o ldap/servers/slapd/libslapd_la-index_subsystem.lo `test -f 'ldap/servers/slapd/index_subsystem.c' || echo '$(srcdir)/'`ldap/servers/slapd/index_subsystem.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-index_subsystem.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-index_subsystem.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/index_subsystem.c' object='ldap/servers/slapd/libslapd_la-index_subsystem.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-index_subsystem.lo `test -f 'ldap/servers/slapd/index_subsystem.c' || echo '$(srcdir)/'`ldap/servers/slapd/index_subsystem.c + +ldap/servers/slapd/libslapd_la-ldaputil.lo: ldap/servers/slapd/ldaputil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-ldaputil.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-ldaputil.Tpo -c -o ldap/servers/slapd/libslapd_la-ldaputil.lo `test -f 'ldap/servers/slapd/ldaputil.c' || echo '$(srcdir)/'`ldap/servers/slapd/ldaputil.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-ldaputil.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-ldaputil.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/ldaputil.c' object='ldap/servers/slapd/libslapd_la-ldaputil.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-ldaputil.lo `test -f 'ldap/servers/slapd/ldaputil.c' || echo '$(srcdir)/'`ldap/servers/slapd/ldaputil.c + +ldap/servers/slapd/libslapd_la-lenstr.lo: ldap/servers/slapd/lenstr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-lenstr.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-lenstr.Tpo -c -o ldap/servers/slapd/libslapd_la-lenstr.lo `test -f 'ldap/servers/slapd/lenstr.c' || echo '$(srcdir)/'`ldap/servers/slapd/lenstr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-lenstr.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-lenstr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/lenstr.c' object='ldap/servers/slapd/libslapd_la-lenstr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-lenstr.lo `test -f 'ldap/servers/slapd/lenstr.c' || echo '$(srcdir)/'`ldap/servers/slapd/lenstr.c + +ldap/servers/slapd/libslapd_la-libglobs.lo: ldap/servers/slapd/libglobs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-libglobs.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-libglobs.Tpo -c -o ldap/servers/slapd/libslapd_la-libglobs.lo `test -f 'ldap/servers/slapd/libglobs.c' || echo '$(srcdir)/'`ldap/servers/slapd/libglobs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-libglobs.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-libglobs.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/libglobs.c' object='ldap/servers/slapd/libslapd_la-libglobs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-libglobs.lo `test -f 'ldap/servers/slapd/libglobs.c' || echo '$(srcdir)/'`ldap/servers/slapd/libglobs.c + +ldap/servers/slapd/libslapd_la-localhost.lo: ldap/servers/slapd/localhost.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-localhost.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-localhost.Tpo -c -o ldap/servers/slapd/libslapd_la-localhost.lo `test -f 'ldap/servers/slapd/localhost.c' || echo '$(srcdir)/'`ldap/servers/slapd/localhost.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-localhost.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-localhost.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/localhost.c' object='ldap/servers/slapd/libslapd_la-localhost.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-localhost.lo `test -f 'ldap/servers/slapd/localhost.c' || echo '$(srcdir)/'`ldap/servers/slapd/localhost.c + +ldap/servers/slapd/libslapd_la-log.lo: ldap/servers/slapd/log.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-log.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-log.Tpo -c -o ldap/servers/slapd/libslapd_la-log.lo `test -f 'ldap/servers/slapd/log.c' || echo '$(srcdir)/'`ldap/servers/slapd/log.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-log.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-log.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/log.c' object='ldap/servers/slapd/libslapd_la-log.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-log.lo `test -f 'ldap/servers/slapd/log.c' || echo '$(srcdir)/'`ldap/servers/slapd/log.c + +ldap/servers/slapd/libslapd_la-mapping_tree.lo: ldap/servers/slapd/mapping_tree.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-mapping_tree.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-mapping_tree.Tpo -c -o ldap/servers/slapd/libslapd_la-mapping_tree.lo `test -f 'ldap/servers/slapd/mapping_tree.c' || echo '$(srcdir)/'`ldap/servers/slapd/mapping_tree.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-mapping_tree.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-mapping_tree.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/mapping_tree.c' object='ldap/servers/slapd/libslapd_la-mapping_tree.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-mapping_tree.lo `test -f 'ldap/servers/slapd/mapping_tree.c' || echo '$(srcdir)/'`ldap/servers/slapd/mapping_tree.c + +ldap/servers/slapd/libslapd_la-match.lo: ldap/servers/slapd/match.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-match.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-match.Tpo -c -o ldap/servers/slapd/libslapd_la-match.lo `test -f 'ldap/servers/slapd/match.c' || echo '$(srcdir)/'`ldap/servers/slapd/match.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-match.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-match.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/match.c' object='ldap/servers/slapd/libslapd_la-match.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-match.lo `test -f 'ldap/servers/slapd/match.c' || echo '$(srcdir)/'`ldap/servers/slapd/match.c + +ldap/servers/slapd/libslapd_la-modify.lo: ldap/servers/slapd/modify.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-modify.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-modify.Tpo -c -o ldap/servers/slapd/libslapd_la-modify.lo `test -f 'ldap/servers/slapd/modify.c' || echo '$(srcdir)/'`ldap/servers/slapd/modify.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-modify.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-modify.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/modify.c' object='ldap/servers/slapd/libslapd_la-modify.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-modify.lo `test -f 'ldap/servers/slapd/modify.c' || echo '$(srcdir)/'`ldap/servers/slapd/modify.c + +ldap/servers/slapd/libslapd_la-modrdn.lo: ldap/servers/slapd/modrdn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-modrdn.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-modrdn.Tpo -c -o ldap/servers/slapd/libslapd_la-modrdn.lo `test -f 'ldap/servers/slapd/modrdn.c' || echo '$(srcdir)/'`ldap/servers/slapd/modrdn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-modrdn.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-modrdn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/modrdn.c' object='ldap/servers/slapd/libslapd_la-modrdn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-modrdn.lo `test -f 'ldap/servers/slapd/modrdn.c' || echo '$(srcdir)/'`ldap/servers/slapd/modrdn.c + +ldap/servers/slapd/libslapd_la-modutil.lo: ldap/servers/slapd/modutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-modutil.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-modutil.Tpo -c -o ldap/servers/slapd/libslapd_la-modutil.lo `test -f 'ldap/servers/slapd/modutil.c' || echo '$(srcdir)/'`ldap/servers/slapd/modutil.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-modutil.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-modutil.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/modutil.c' object='ldap/servers/slapd/libslapd_la-modutil.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-modutil.lo `test -f 'ldap/servers/slapd/modutil.c' || echo '$(srcdir)/'`ldap/servers/slapd/modutil.c + +ldap/servers/slapd/libslapd_la-object.lo: ldap/servers/slapd/object.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-object.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-object.Tpo -c -o ldap/servers/slapd/libslapd_la-object.lo `test -f 'ldap/servers/slapd/object.c' || echo '$(srcdir)/'`ldap/servers/slapd/object.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-object.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-object.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/object.c' object='ldap/servers/slapd/libslapd_la-object.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-object.lo `test -f 'ldap/servers/slapd/object.c' || echo '$(srcdir)/'`ldap/servers/slapd/object.c + +ldap/servers/slapd/libslapd_la-objset.lo: ldap/servers/slapd/objset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-objset.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-objset.Tpo -c -o ldap/servers/slapd/libslapd_la-objset.lo `test -f 'ldap/servers/slapd/objset.c' || echo '$(srcdir)/'`ldap/servers/slapd/objset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-objset.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-objset.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/objset.c' object='ldap/servers/slapd/libslapd_la-objset.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-objset.lo `test -f 'ldap/servers/slapd/objset.c' || echo '$(srcdir)/'`ldap/servers/slapd/objset.c + +ldap/servers/slapd/libslapd_la-operation.lo: ldap/servers/slapd/operation.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-operation.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-operation.Tpo -c -o ldap/servers/slapd/libslapd_la-operation.lo `test -f 'ldap/servers/slapd/operation.c' || echo '$(srcdir)/'`ldap/servers/slapd/operation.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-operation.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-operation.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/operation.c' object='ldap/servers/slapd/libslapd_la-operation.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-operation.lo `test -f 'ldap/servers/slapd/operation.c' || echo '$(srcdir)/'`ldap/servers/slapd/operation.c + +ldap/servers/slapd/libslapd_la-opshared.lo: ldap/servers/slapd/opshared.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-opshared.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-opshared.Tpo -c -o ldap/servers/slapd/libslapd_la-opshared.lo `test -f 'ldap/servers/slapd/opshared.c' || echo '$(srcdir)/'`ldap/servers/slapd/opshared.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-opshared.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-opshared.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/opshared.c' object='ldap/servers/slapd/libslapd_la-opshared.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-opshared.lo `test -f 'ldap/servers/slapd/opshared.c' || echo '$(srcdir)/'`ldap/servers/slapd/opshared.c + +ldap/servers/slapd/libslapd_la-pagedresults.lo: ldap/servers/slapd/pagedresults.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-pagedresults.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-pagedresults.Tpo -c -o ldap/servers/slapd/libslapd_la-pagedresults.lo `test -f 'ldap/servers/slapd/pagedresults.c' || echo '$(srcdir)/'`ldap/servers/slapd/pagedresults.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-pagedresults.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-pagedresults.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/pagedresults.c' object='ldap/servers/slapd/libslapd_la-pagedresults.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-pagedresults.lo `test -f 'ldap/servers/slapd/pagedresults.c' || echo '$(srcdir)/'`ldap/servers/slapd/pagedresults.c + +ldap/servers/slapd/libslapd_la-pblock.lo: ldap/servers/slapd/pblock.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-pblock.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-pblock.Tpo -c -o ldap/servers/slapd/libslapd_la-pblock.lo `test -f 'ldap/servers/slapd/pblock.c' || echo '$(srcdir)/'`ldap/servers/slapd/pblock.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-pblock.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-pblock.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/pblock.c' object='ldap/servers/slapd/libslapd_la-pblock.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-pblock.lo `test -f 'ldap/servers/slapd/pblock.c' || echo '$(srcdir)/'`ldap/servers/slapd/pblock.c + +ldap/servers/slapd/libslapd_la-plugin.lo: ldap/servers/slapd/plugin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-plugin.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin.Tpo -c -o ldap/servers/slapd/libslapd_la-plugin.lo `test -f 'ldap/servers/slapd/plugin.c' || echo '$(srcdir)/'`ldap/servers/slapd/plugin.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/plugin.c' object='ldap/servers/slapd/libslapd_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-plugin.lo `test -f 'ldap/servers/slapd/plugin.c' || echo '$(srcdir)/'`ldap/servers/slapd/plugin.c + +ldap/servers/slapd/libslapd_la-plugin_acl.lo: ldap/servers/slapd/plugin_acl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-plugin_acl.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_acl.Tpo -c -o ldap/servers/slapd/libslapd_la-plugin_acl.lo `test -f 'ldap/servers/slapd/plugin_acl.c' || echo '$(srcdir)/'`ldap/servers/slapd/plugin_acl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_acl.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_acl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/plugin_acl.c' object='ldap/servers/slapd/libslapd_la-plugin_acl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-plugin_acl.lo `test -f 'ldap/servers/slapd/plugin_acl.c' || echo '$(srcdir)/'`ldap/servers/slapd/plugin_acl.c + +ldap/servers/slapd/libslapd_la-plugin_internal_op.lo: ldap/servers/slapd/plugin_internal_op.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-plugin_internal_op.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_internal_op.Tpo -c -o ldap/servers/slapd/libslapd_la-plugin_internal_op.lo `test -f 'ldap/servers/slapd/plugin_internal_op.c' || echo '$(srcdir)/'`ldap/servers/slapd/plugin_internal_op.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_internal_op.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_internal_op.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/plugin_internal_op.c' object='ldap/servers/slapd/libslapd_la-plugin_internal_op.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-plugin_internal_op.lo `test -f 'ldap/servers/slapd/plugin_internal_op.c' || echo '$(srcdir)/'`ldap/servers/slapd/plugin_internal_op.c + +ldap/servers/slapd/libslapd_la-plugin_mr.lo: ldap/servers/slapd/plugin_mr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-plugin_mr.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_mr.Tpo -c -o ldap/servers/slapd/libslapd_la-plugin_mr.lo `test -f 'ldap/servers/slapd/plugin_mr.c' || echo '$(srcdir)/'`ldap/servers/slapd/plugin_mr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_mr.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_mr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/plugin_mr.c' object='ldap/servers/slapd/libslapd_la-plugin_mr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-plugin_mr.lo `test -f 'ldap/servers/slapd/plugin_mr.c' || echo '$(srcdir)/'`ldap/servers/slapd/plugin_mr.c + +ldap/servers/slapd/libslapd_la-plugin_role.lo: ldap/servers/slapd/plugin_role.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-plugin_role.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_role.Tpo -c -o ldap/servers/slapd/libslapd_la-plugin_role.lo `test -f 'ldap/servers/slapd/plugin_role.c' || echo '$(srcdir)/'`ldap/servers/slapd/plugin_role.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_role.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_role.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/plugin_role.c' object='ldap/servers/slapd/libslapd_la-plugin_role.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-plugin_role.lo `test -f 'ldap/servers/slapd/plugin_role.c' || echo '$(srcdir)/'`ldap/servers/slapd/plugin_role.c + +ldap/servers/slapd/libslapd_la-plugin_syntax.lo: ldap/servers/slapd/plugin_syntax.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-plugin_syntax.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_syntax.Tpo -c -o ldap/servers/slapd/libslapd_la-plugin_syntax.lo `test -f 'ldap/servers/slapd/plugin_syntax.c' || echo '$(srcdir)/'`ldap/servers/slapd/plugin_syntax.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_syntax.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-plugin_syntax.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/plugin_syntax.c' object='ldap/servers/slapd/libslapd_la-plugin_syntax.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-plugin_syntax.lo `test -f 'ldap/servers/slapd/plugin_syntax.c' || echo '$(srcdir)/'`ldap/servers/slapd/plugin_syntax.c + +ldap/servers/slapd/libslapd_la-protect_db.lo: ldap/servers/slapd/protect_db.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-protect_db.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-protect_db.Tpo -c -o ldap/servers/slapd/libslapd_la-protect_db.lo `test -f 'ldap/servers/slapd/protect_db.c' || echo '$(srcdir)/'`ldap/servers/slapd/protect_db.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-protect_db.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-protect_db.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/protect_db.c' object='ldap/servers/slapd/libslapd_la-protect_db.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-protect_db.lo `test -f 'ldap/servers/slapd/protect_db.c' || echo '$(srcdir)/'`ldap/servers/slapd/protect_db.c + +ldap/servers/slapd/libslapd_la-proxyauth.lo: ldap/servers/slapd/proxyauth.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-proxyauth.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-proxyauth.Tpo -c -o ldap/servers/slapd/libslapd_la-proxyauth.lo `test -f 'ldap/servers/slapd/proxyauth.c' || echo '$(srcdir)/'`ldap/servers/slapd/proxyauth.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-proxyauth.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-proxyauth.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/proxyauth.c' object='ldap/servers/slapd/libslapd_la-proxyauth.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-proxyauth.lo `test -f 'ldap/servers/slapd/proxyauth.c' || echo '$(srcdir)/'`ldap/servers/slapd/proxyauth.c + +ldap/servers/slapd/libslapd_la-pw.lo: ldap/servers/slapd/pw.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-pw.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-pw.Tpo -c -o ldap/servers/slapd/libslapd_la-pw.lo `test -f 'ldap/servers/slapd/pw.c' || echo '$(srcdir)/'`ldap/servers/slapd/pw.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-pw.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-pw.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/pw.c' object='ldap/servers/slapd/libslapd_la-pw.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-pw.lo `test -f 'ldap/servers/slapd/pw.c' || echo '$(srcdir)/'`ldap/servers/slapd/pw.c + +ldap/servers/slapd/libslapd_la-pw_retry.lo: ldap/servers/slapd/pw_retry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-pw_retry.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-pw_retry.Tpo -c -o ldap/servers/slapd/libslapd_la-pw_retry.lo `test -f 'ldap/servers/slapd/pw_retry.c' || echo '$(srcdir)/'`ldap/servers/slapd/pw_retry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-pw_retry.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-pw_retry.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/pw_retry.c' object='ldap/servers/slapd/libslapd_la-pw_retry.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-pw_retry.lo `test -f 'ldap/servers/slapd/pw_retry.c' || echo '$(srcdir)/'`ldap/servers/slapd/pw_retry.c + +ldap/servers/slapd/libslapd_la-rdn.lo: ldap/servers/slapd/rdn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-rdn.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-rdn.Tpo -c -o ldap/servers/slapd/libslapd_la-rdn.lo `test -f 'ldap/servers/slapd/rdn.c' || echo '$(srcdir)/'`ldap/servers/slapd/rdn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-rdn.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-rdn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/rdn.c' object='ldap/servers/slapd/libslapd_la-rdn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-rdn.lo `test -f 'ldap/servers/slapd/rdn.c' || echo '$(srcdir)/'`ldap/servers/slapd/rdn.c + +ldap/servers/slapd/libslapd_la-referral.lo: ldap/servers/slapd/referral.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-referral.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-referral.Tpo -c -o ldap/servers/slapd/libslapd_la-referral.lo `test -f 'ldap/servers/slapd/referral.c' || echo '$(srcdir)/'`ldap/servers/slapd/referral.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-referral.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-referral.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/referral.c' object='ldap/servers/slapd/libslapd_la-referral.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-referral.lo `test -f 'ldap/servers/slapd/referral.c' || echo '$(srcdir)/'`ldap/servers/slapd/referral.c + +ldap/servers/slapd/libslapd_la-regex.lo: ldap/servers/slapd/regex.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-regex.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-regex.Tpo -c -o ldap/servers/slapd/libslapd_la-regex.lo `test -f 'ldap/servers/slapd/regex.c' || echo '$(srcdir)/'`ldap/servers/slapd/regex.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-regex.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-regex.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/regex.c' object='ldap/servers/slapd/libslapd_la-regex.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-regex.lo `test -f 'ldap/servers/slapd/regex.c' || echo '$(srcdir)/'`ldap/servers/slapd/regex.c + +ldap/servers/slapd/libslapd_la-resourcelimit.lo: ldap/servers/slapd/resourcelimit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-resourcelimit.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-resourcelimit.Tpo -c -o ldap/servers/slapd/libslapd_la-resourcelimit.lo `test -f 'ldap/servers/slapd/resourcelimit.c' || echo '$(srcdir)/'`ldap/servers/slapd/resourcelimit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-resourcelimit.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-resourcelimit.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/resourcelimit.c' object='ldap/servers/slapd/libslapd_la-resourcelimit.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-resourcelimit.lo `test -f 'ldap/servers/slapd/resourcelimit.c' || echo '$(srcdir)/'`ldap/servers/slapd/resourcelimit.c + +ldap/servers/slapd/libslapd_la-result.lo: ldap/servers/slapd/result.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-result.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-result.Tpo -c -o ldap/servers/slapd/libslapd_la-result.lo `test -f 'ldap/servers/slapd/result.c' || echo '$(srcdir)/'`ldap/servers/slapd/result.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-result.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-result.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/result.c' object='ldap/servers/slapd/libslapd_la-result.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-result.lo `test -f 'ldap/servers/slapd/result.c' || echo '$(srcdir)/'`ldap/servers/slapd/result.c + +ldap/servers/slapd/libslapd_la-sasl_map.lo: ldap/servers/slapd/sasl_map.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-sasl_map.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-sasl_map.Tpo -c -o ldap/servers/slapd/libslapd_la-sasl_map.lo `test -f 'ldap/servers/slapd/sasl_map.c' || echo '$(srcdir)/'`ldap/servers/slapd/sasl_map.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-sasl_map.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-sasl_map.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/sasl_map.c' object='ldap/servers/slapd/libslapd_la-sasl_map.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-sasl_map.lo `test -f 'ldap/servers/slapd/sasl_map.c' || echo '$(srcdir)/'`ldap/servers/slapd/sasl_map.c + +ldap/servers/slapd/libslapd_la-schema.lo: ldap/servers/slapd/schema.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-schema.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-schema.Tpo -c -o ldap/servers/slapd/libslapd_la-schema.lo `test -f 'ldap/servers/slapd/schema.c' || echo '$(srcdir)/'`ldap/servers/slapd/schema.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-schema.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-schema.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/schema.c' object='ldap/servers/slapd/libslapd_la-schema.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-schema.lo `test -f 'ldap/servers/slapd/schema.c' || echo '$(srcdir)/'`ldap/servers/slapd/schema.c + +ldap/servers/slapd/libslapd_la-schemaparse.lo: ldap/servers/slapd/schemaparse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-schemaparse.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-schemaparse.Tpo -c -o ldap/servers/slapd/libslapd_la-schemaparse.lo `test -f 'ldap/servers/slapd/schemaparse.c' || echo '$(srcdir)/'`ldap/servers/slapd/schemaparse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-schemaparse.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-schemaparse.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/schemaparse.c' object='ldap/servers/slapd/libslapd_la-schemaparse.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-schemaparse.lo `test -f 'ldap/servers/slapd/schemaparse.c' || echo '$(srcdir)/'`ldap/servers/slapd/schemaparse.c + +ldap/servers/slapd/libslapd_la-security_wrappers.lo: ldap/servers/slapd/security_wrappers.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-security_wrappers.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-security_wrappers.Tpo -c -o ldap/servers/slapd/libslapd_la-security_wrappers.lo `test -f 'ldap/servers/slapd/security_wrappers.c' || echo '$(srcdir)/'`ldap/servers/slapd/security_wrappers.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-security_wrappers.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-security_wrappers.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/security_wrappers.c' object='ldap/servers/slapd/libslapd_la-security_wrappers.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-security_wrappers.lo `test -f 'ldap/servers/slapd/security_wrappers.c' || echo '$(srcdir)/'`ldap/servers/slapd/security_wrappers.c + +ldap/servers/slapd/libslapd_la-slapd_plhash.lo: ldap/servers/slapd/slapd_plhash.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-slapd_plhash.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapd_plhash.Tpo -c -o ldap/servers/slapd/libslapd_la-slapd_plhash.lo `test -f 'ldap/servers/slapd/slapd_plhash.c' || echo '$(srcdir)/'`ldap/servers/slapd/slapd_plhash.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapd_plhash.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapd_plhash.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/slapd_plhash.c' object='ldap/servers/slapd/libslapd_la-slapd_plhash.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-slapd_plhash.lo `test -f 'ldap/servers/slapd/slapd_plhash.c' || echo '$(srcdir)/'`ldap/servers/slapd/slapd_plhash.c + +ldap/servers/slapd/libslapd_la-slapi_counter.lo: ldap/servers/slapd/slapi_counter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-slapi_counter.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapi_counter.Tpo -c -o ldap/servers/slapd/libslapd_la-slapi_counter.lo `test -f 'ldap/servers/slapd/slapi_counter.c' || echo '$(srcdir)/'`ldap/servers/slapd/slapi_counter.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapi_counter.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapi_counter.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/slapi_counter.c' object='ldap/servers/slapd/libslapd_la-slapi_counter.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-slapi_counter.lo `test -f 'ldap/servers/slapd/slapi_counter.c' || echo '$(srcdir)/'`ldap/servers/slapd/slapi_counter.c + +ldap/servers/slapd/libslapd_la-slapi2nspr.lo: ldap/servers/slapd/slapi2nspr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-slapi2nspr.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapi2nspr.Tpo -c -o ldap/servers/slapd/libslapd_la-slapi2nspr.lo `test -f 'ldap/servers/slapd/slapi2nspr.c' || echo '$(srcdir)/'`ldap/servers/slapd/slapi2nspr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapi2nspr.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-slapi2nspr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/slapi2nspr.c' object='ldap/servers/slapd/libslapd_la-slapi2nspr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-slapi2nspr.lo `test -f 'ldap/servers/slapd/slapi2nspr.c' || echo '$(srcdir)/'`ldap/servers/slapd/slapi2nspr.c + +ldap/servers/slapd/libslapd_la-snmp_collator.lo: ldap/servers/slapd/snmp_collator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-snmp_collator.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-snmp_collator.Tpo -c -o ldap/servers/slapd/libslapd_la-snmp_collator.lo `test -f 'ldap/servers/slapd/snmp_collator.c' || echo '$(srcdir)/'`ldap/servers/slapd/snmp_collator.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-snmp_collator.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-snmp_collator.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/snmp_collator.c' object='ldap/servers/slapd/libslapd_la-snmp_collator.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-snmp_collator.lo `test -f 'ldap/servers/slapd/snmp_collator.c' || echo '$(srcdir)/'`ldap/servers/slapd/snmp_collator.c + +ldap/servers/slapd/libslapd_la-sort.lo: ldap/servers/slapd/sort.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-sort.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-sort.Tpo -c -o ldap/servers/slapd/libslapd_la-sort.lo `test -f 'ldap/servers/slapd/sort.c' || echo '$(srcdir)/'`ldap/servers/slapd/sort.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-sort.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-sort.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/sort.c' object='ldap/servers/slapd/libslapd_la-sort.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-sort.lo `test -f 'ldap/servers/slapd/sort.c' || echo '$(srcdir)/'`ldap/servers/slapd/sort.c + +ldap/servers/slapd/libslapd_la-ssl.lo: ldap/servers/slapd/ssl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-ssl.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-ssl.Tpo -c -o ldap/servers/slapd/libslapd_la-ssl.lo `test -f 'ldap/servers/slapd/ssl.c' || echo '$(srcdir)/'`ldap/servers/slapd/ssl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-ssl.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-ssl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/ssl.c' object='ldap/servers/slapd/libslapd_la-ssl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-ssl.lo `test -f 'ldap/servers/slapd/ssl.c' || echo '$(srcdir)/'`ldap/servers/slapd/ssl.c + +ldap/servers/slapd/libslapd_la-str2filter.lo: ldap/servers/slapd/str2filter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-str2filter.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-str2filter.Tpo -c -o ldap/servers/slapd/libslapd_la-str2filter.lo `test -f 'ldap/servers/slapd/str2filter.c' || echo '$(srcdir)/'`ldap/servers/slapd/str2filter.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-str2filter.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-str2filter.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/str2filter.c' object='ldap/servers/slapd/libslapd_la-str2filter.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-str2filter.lo `test -f 'ldap/servers/slapd/str2filter.c' || echo '$(srcdir)/'`ldap/servers/slapd/str2filter.c + +ldap/servers/slapd/libslapd_la-subentry.lo: ldap/servers/slapd/subentry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-subentry.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-subentry.Tpo -c -o ldap/servers/slapd/libslapd_la-subentry.lo `test -f 'ldap/servers/slapd/subentry.c' || echo '$(srcdir)/'`ldap/servers/slapd/subentry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-subentry.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-subentry.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/subentry.c' object='ldap/servers/slapd/libslapd_la-subentry.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-subentry.lo `test -f 'ldap/servers/slapd/subentry.c' || echo '$(srcdir)/'`ldap/servers/slapd/subentry.c + +ldap/servers/slapd/libslapd_la-task.lo: ldap/servers/slapd/task.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-task.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-task.Tpo -c -o ldap/servers/slapd/libslapd_la-task.lo `test -f 'ldap/servers/slapd/task.c' || echo '$(srcdir)/'`ldap/servers/slapd/task.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-task.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-task.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/task.c' object='ldap/servers/slapd/libslapd_la-task.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-task.lo `test -f 'ldap/servers/slapd/task.c' || echo '$(srcdir)/'`ldap/servers/slapd/task.c + +ldap/servers/slapd/libslapd_la-time.lo: ldap/servers/slapd/time.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-time.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-time.Tpo -c -o ldap/servers/slapd/libslapd_la-time.lo `test -f 'ldap/servers/slapd/time.c' || echo '$(srcdir)/'`ldap/servers/slapd/time.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-time.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-time.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/time.c' object='ldap/servers/slapd/libslapd_la-time.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-time.lo `test -f 'ldap/servers/slapd/time.c' || echo '$(srcdir)/'`ldap/servers/slapd/time.c + +ldap/servers/slapd/libslapd_la-thread_data.lo: ldap/servers/slapd/thread_data.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-thread_data.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-thread_data.Tpo -c -o ldap/servers/slapd/libslapd_la-thread_data.lo `test -f 'ldap/servers/slapd/thread_data.c' || echo '$(srcdir)/'`ldap/servers/slapd/thread_data.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-thread_data.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-thread_data.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/thread_data.c' object='ldap/servers/slapd/libslapd_la-thread_data.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-thread_data.lo `test -f 'ldap/servers/slapd/thread_data.c' || echo '$(srcdir)/'`ldap/servers/slapd/thread_data.c + +ldap/servers/slapd/libslapd_la-uniqueid.lo: ldap/servers/slapd/uniqueid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-uniqueid.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-uniqueid.Tpo -c -o ldap/servers/slapd/libslapd_la-uniqueid.lo `test -f 'ldap/servers/slapd/uniqueid.c' || echo '$(srcdir)/'`ldap/servers/slapd/uniqueid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-uniqueid.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-uniqueid.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/uniqueid.c' object='ldap/servers/slapd/libslapd_la-uniqueid.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-uniqueid.lo `test -f 'ldap/servers/slapd/uniqueid.c' || echo '$(srcdir)/'`ldap/servers/slapd/uniqueid.c + +ldap/servers/slapd/libslapd_la-uniqueidgen.lo: ldap/servers/slapd/uniqueidgen.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-uniqueidgen.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-uniqueidgen.Tpo -c -o ldap/servers/slapd/libslapd_la-uniqueidgen.lo `test -f 'ldap/servers/slapd/uniqueidgen.c' || echo '$(srcdir)/'`ldap/servers/slapd/uniqueidgen.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-uniqueidgen.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-uniqueidgen.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/uniqueidgen.c' object='ldap/servers/slapd/libslapd_la-uniqueidgen.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-uniqueidgen.lo `test -f 'ldap/servers/slapd/uniqueidgen.c' || echo '$(srcdir)/'`ldap/servers/slapd/uniqueidgen.c + +ldap/servers/slapd/libslapd_la-utf8.lo: ldap/servers/slapd/utf8.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-utf8.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-utf8.Tpo -c -o ldap/servers/slapd/libslapd_la-utf8.lo `test -f 'ldap/servers/slapd/utf8.c' || echo '$(srcdir)/'`ldap/servers/slapd/utf8.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-utf8.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-utf8.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/utf8.c' object='ldap/servers/slapd/libslapd_la-utf8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-utf8.lo `test -f 'ldap/servers/slapd/utf8.c' || echo '$(srcdir)/'`ldap/servers/slapd/utf8.c + +ldap/servers/slapd/libslapd_la-utf8compare.lo: ldap/servers/slapd/utf8compare.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-utf8compare.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-utf8compare.Tpo -c -o ldap/servers/slapd/libslapd_la-utf8compare.lo `test -f 'ldap/servers/slapd/utf8compare.c' || echo '$(srcdir)/'`ldap/servers/slapd/utf8compare.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-utf8compare.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-utf8compare.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/utf8compare.c' object='ldap/servers/slapd/libslapd_la-utf8compare.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-utf8compare.lo `test -f 'ldap/servers/slapd/utf8compare.c' || echo '$(srcdir)/'`ldap/servers/slapd/utf8compare.c + +ldap/servers/slapd/libslapd_la-util.lo: ldap/servers/slapd/util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-util.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-util.Tpo -c -o ldap/servers/slapd/libslapd_la-util.lo `test -f 'ldap/servers/slapd/util.c' || echo '$(srcdir)/'`ldap/servers/slapd/util.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-util.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-util.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/util.c' object='ldap/servers/slapd/libslapd_la-util.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-util.lo `test -f 'ldap/servers/slapd/util.c' || echo '$(srcdir)/'`ldap/servers/slapd/util.c + +ldap/servers/slapd/libslapd_la-uuid.lo: ldap/servers/slapd/uuid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-uuid.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-uuid.Tpo -c -o ldap/servers/slapd/libslapd_la-uuid.lo `test -f 'ldap/servers/slapd/uuid.c' || echo '$(srcdir)/'`ldap/servers/slapd/uuid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-uuid.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-uuid.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/uuid.c' object='ldap/servers/slapd/libslapd_la-uuid.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-uuid.lo `test -f 'ldap/servers/slapd/uuid.c' || echo '$(srcdir)/'`ldap/servers/slapd/uuid.c + +ldap/servers/slapd/libslapd_la-value.lo: ldap/servers/slapd/value.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-value.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-value.Tpo -c -o ldap/servers/slapd/libslapd_la-value.lo `test -f 'ldap/servers/slapd/value.c' || echo '$(srcdir)/'`ldap/servers/slapd/value.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-value.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-value.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/value.c' object='ldap/servers/slapd/libslapd_la-value.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-value.lo `test -f 'ldap/servers/slapd/value.c' || echo '$(srcdir)/'`ldap/servers/slapd/value.c + +ldap/servers/slapd/libslapd_la-valueset.lo: ldap/servers/slapd/valueset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-valueset.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-valueset.Tpo -c -o ldap/servers/slapd/libslapd_la-valueset.lo `test -f 'ldap/servers/slapd/valueset.c' || echo '$(srcdir)/'`ldap/servers/slapd/valueset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-valueset.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-valueset.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/valueset.c' object='ldap/servers/slapd/libslapd_la-valueset.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-valueset.lo `test -f 'ldap/servers/slapd/valueset.c' || echo '$(srcdir)/'`ldap/servers/slapd/valueset.c + +ldap/servers/slapd/libslapd_la-vattr.lo: ldap/servers/slapd/vattr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/libslapd_la-vattr.lo -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/libslapd_la-vattr.Tpo -c -o ldap/servers/slapd/libslapd_la-vattr.lo `test -f 'ldap/servers/slapd/vattr.c' || echo '$(srcdir)/'`ldap/servers/slapd/vattr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/libslapd_la-vattr.Tpo ldap/servers/slapd/$(DEPDIR)/libslapd_la-vattr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/vattr.c' object='ldap/servers/slapd/libslapd_la-vattr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/libslapd_la-vattr.lo `test -f 'ldap/servers/slapd/vattr.c' || echo '$(srcdir)/'`ldap/servers/slapd/vattr.c + +ldap/libraries/libavl/libslapd_la-avl.lo: ldap/libraries/libavl/avl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/libraries/libavl/libslapd_la-avl.lo -MD -MP -MF ldap/libraries/libavl/$(DEPDIR)/libslapd_la-avl.Tpo -c -o ldap/libraries/libavl/libslapd_la-avl.lo `test -f 'ldap/libraries/libavl/avl.c' || echo '$(srcdir)/'`ldap/libraries/libavl/avl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/libraries/libavl/$(DEPDIR)/libslapd_la-avl.Tpo ldap/libraries/libavl/$(DEPDIR)/libslapd_la-avl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/libraries/libavl/avl.c' object='ldap/libraries/libavl/libslapd_la-avl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libslapd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/libraries/libavl/libslapd_la-avl.lo `test -f 'ldap/libraries/libavl/avl.c' || echo '$(srcdir)/'`ldap/libraries/libavl/avl.c + +ldap/servers/plugins/statechange/libstatechange_plugin_la-statechange.lo: ldap/servers/plugins/statechange/statechange.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstatechange_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/statechange/libstatechange_plugin_la-statechange.lo -MD -MP -MF ldap/servers/plugins/statechange/$(DEPDIR)/libstatechange_plugin_la-statechange.Tpo -c -o ldap/servers/plugins/statechange/libstatechange_plugin_la-statechange.lo `test -f 'ldap/servers/plugins/statechange/statechange.c' || echo '$(srcdir)/'`ldap/servers/plugins/statechange/statechange.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/statechange/$(DEPDIR)/libstatechange_plugin_la-statechange.Tpo ldap/servers/plugins/statechange/$(DEPDIR)/libstatechange_plugin_la-statechange.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/statechange/statechange.c' object='ldap/servers/plugins/statechange/libstatechange_plugin_la-statechange.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstatechange_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/statechange/libstatechange_plugin_la-statechange.lo `test -f 'ldap/servers/plugins/statechange/statechange.c' || echo '$(srcdir)/'`ldap/servers/plugins/statechange/statechange.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bin.lo: ldap/servers/plugins/syntaxes/bin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bin.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-bin.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bin.lo `test -f 'ldap/servers/plugins/syntaxes/bin.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/bin.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-bin.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-bin.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/bin.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bin.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bin.lo `test -f 'ldap/servers/plugins/syntaxes/bin.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/bin.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bitstring.lo: ldap/servers/plugins/syntaxes/bitstring.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bitstring.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-bitstring.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bitstring.lo `test -f 'ldap/servers/plugins/syntaxes/bitstring.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/bitstring.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-bitstring.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-bitstring.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/bitstring.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bitstring.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-bitstring.lo `test -f 'ldap/servers/plugins/syntaxes/bitstring.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/bitstring.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-ces.lo: ldap/servers/plugins/syntaxes/ces.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-ces.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-ces.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-ces.lo `test -f 'ldap/servers/plugins/syntaxes/ces.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/ces.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-ces.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-ces.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/ces.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-ces.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-ces.lo `test -f 'ldap/servers/plugins/syntaxes/ces.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/ces.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-cis.lo: ldap/servers/plugins/syntaxes/cis.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-cis.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-cis.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-cis.lo `test -f 'ldap/servers/plugins/syntaxes/cis.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/cis.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-cis.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-cis.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/cis.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-cis.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-cis.lo `test -f 'ldap/servers/plugins/syntaxes/cis.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/cis.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-debug.lo: ldap/servers/plugins/syntaxes/debug.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-debug.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-debug.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-debug.lo `test -f 'ldap/servers/plugins/syntaxes/debug.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/debug.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-debug.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-debug.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/debug.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-debug.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-debug.lo `test -f 'ldap/servers/plugins/syntaxes/debug.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/debug.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-dn.lo: ldap/servers/plugins/syntaxes/dn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-dn.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-dn.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-dn.lo `test -f 'ldap/servers/plugins/syntaxes/dn.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/dn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-dn.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-dn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/dn.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-dn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-dn.lo `test -f 'ldap/servers/plugins/syntaxes/dn.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/dn.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-deliverymethod.lo: ldap/servers/plugins/syntaxes/deliverymethod.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-deliverymethod.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-deliverymethod.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-deliverymethod.lo `test -f 'ldap/servers/plugins/syntaxes/deliverymethod.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/deliverymethod.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-deliverymethod.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-deliverymethod.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/deliverymethod.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-deliverymethod.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-deliverymethod.lo `test -f 'ldap/servers/plugins/syntaxes/deliverymethod.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/deliverymethod.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-facsimile.lo: ldap/servers/plugins/syntaxes/facsimile.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-facsimile.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-facsimile.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-facsimile.lo `test -f 'ldap/servers/plugins/syntaxes/facsimile.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/facsimile.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-facsimile.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-facsimile.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/facsimile.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-facsimile.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-facsimile.lo `test -f 'ldap/servers/plugins/syntaxes/facsimile.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/facsimile.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-guide.lo: ldap/servers/plugins/syntaxes/guide.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-guide.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-guide.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-guide.lo `test -f 'ldap/servers/plugins/syntaxes/guide.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/guide.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-guide.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-guide.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/guide.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-guide.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-guide.lo `test -f 'ldap/servers/plugins/syntaxes/guide.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/guide.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-int.lo: ldap/servers/plugins/syntaxes/int.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-int.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-int.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-int.lo `test -f 'ldap/servers/plugins/syntaxes/int.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/int.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-int.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-int.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/int.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-int.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-int.lo `test -f 'ldap/servers/plugins/syntaxes/int.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/int.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-nameoptuid.lo: ldap/servers/plugins/syntaxes/nameoptuid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-nameoptuid.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-nameoptuid.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-nameoptuid.lo `test -f 'ldap/servers/plugins/syntaxes/nameoptuid.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/nameoptuid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-nameoptuid.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-nameoptuid.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/nameoptuid.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-nameoptuid.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-nameoptuid.lo `test -f 'ldap/servers/plugins/syntaxes/nameoptuid.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/nameoptuid.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-numericstring.lo: ldap/servers/plugins/syntaxes/numericstring.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-numericstring.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-numericstring.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-numericstring.lo `test -f 'ldap/servers/plugins/syntaxes/numericstring.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/numericstring.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-numericstring.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-numericstring.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/numericstring.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-numericstring.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-numericstring.lo `test -f 'ldap/servers/plugins/syntaxes/numericstring.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/numericstring.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-phonetic.lo: ldap/servers/plugins/syntaxes/phonetic.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-phonetic.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-phonetic.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-phonetic.lo `test -f 'ldap/servers/plugins/syntaxes/phonetic.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/phonetic.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-phonetic.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-phonetic.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/phonetic.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-phonetic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-phonetic.lo `test -f 'ldap/servers/plugins/syntaxes/phonetic.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/phonetic.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-sicis.lo: ldap/servers/plugins/syntaxes/sicis.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-sicis.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-sicis.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-sicis.lo `test -f 'ldap/servers/plugins/syntaxes/sicis.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/sicis.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-sicis.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-sicis.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/sicis.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-sicis.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-sicis.lo `test -f 'ldap/servers/plugins/syntaxes/sicis.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/sicis.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-string.lo: ldap/servers/plugins/syntaxes/string.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-string.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-string.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-string.lo `test -f 'ldap/servers/plugins/syntaxes/string.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/string.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-string.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-string.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/string.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-string.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-string.lo `test -f 'ldap/servers/plugins/syntaxes/string.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/string.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-syntax_common.lo: ldap/servers/plugins/syntaxes/syntax_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-syntax_common.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-syntax_common.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-syntax_common.lo `test -f 'ldap/servers/plugins/syntaxes/syntax_common.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/syntax_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-syntax_common.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-syntax_common.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/syntax_common.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-syntax_common.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-syntax_common.lo `test -f 'ldap/servers/plugins/syntaxes/syntax_common.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/syntax_common.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-tel.lo: ldap/servers/plugins/syntaxes/tel.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-tel.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-tel.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-tel.lo `test -f 'ldap/servers/plugins/syntaxes/tel.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/tel.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-tel.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-tel.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/tel.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-tel.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-tel.lo `test -f 'ldap/servers/plugins/syntaxes/tel.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/tel.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-telex.lo: ldap/servers/plugins/syntaxes/telex.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-telex.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-telex.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-telex.lo `test -f 'ldap/servers/plugins/syntaxes/telex.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/telex.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-telex.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-telex.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/telex.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-telex.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-telex.lo `test -f 'ldap/servers/plugins/syntaxes/telex.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/telex.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-teletex.lo: ldap/servers/plugins/syntaxes/teletex.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-teletex.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-teletex.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-teletex.lo `test -f 'ldap/servers/plugins/syntaxes/teletex.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/teletex.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-teletex.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-teletex.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/teletex.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-teletex.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-teletex.lo `test -f 'ldap/servers/plugins/syntaxes/teletex.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/teletex.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate.lo: ldap/servers/plugins/syntaxes/validate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-validate.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate.lo `test -f 'ldap/servers/plugins/syntaxes/validate.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/validate.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-validate.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-validate.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/validate.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate.lo `test -f 'ldap/servers/plugins/syntaxes/validate.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/validate.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate_task.lo: ldap/servers/plugins/syntaxes/validate_task.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate_task.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-validate_task.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate_task.lo `test -f 'ldap/servers/plugins/syntaxes/validate_task.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/validate_task.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-validate_task.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-validate_task.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/validate_task.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate_task.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-validate_task.lo `test -f 'ldap/servers/plugins/syntaxes/validate_task.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/validate_task.c + +ldap/servers/plugins/syntaxes/libsyntax_plugin_la-value.lo: ldap/servers/plugins/syntaxes/value.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/syntaxes/libsyntax_plugin_la-value.lo -MD -MP -MF ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-value.Tpo -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-value.lo `test -f 'ldap/servers/plugins/syntaxes/value.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/value.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-value.Tpo ldap/servers/plugins/syntaxes/$(DEPDIR)/libsyntax_plugin_la-value.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/syntaxes/value.c' object='ldap/servers/plugins/syntaxes/libsyntax_plugin_la-value.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsyntax_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/syntaxes/libsyntax_plugin_la-value.lo `test -f 'ldap/servers/plugins/syntaxes/value.c' || echo '$(srcdir)/'`ldap/servers/plugins/syntaxes/value.c + +ldap/servers/plugins/usn/libusn_plugin_la-usn.lo: ldap/servers/plugins/usn/usn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libusn_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/usn/libusn_plugin_la-usn.lo -MD -MP -MF ldap/servers/plugins/usn/$(DEPDIR)/libusn_plugin_la-usn.Tpo -c -o ldap/servers/plugins/usn/libusn_plugin_la-usn.lo `test -f 'ldap/servers/plugins/usn/usn.c' || echo '$(srcdir)/'`ldap/servers/plugins/usn/usn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/usn/$(DEPDIR)/libusn_plugin_la-usn.Tpo ldap/servers/plugins/usn/$(DEPDIR)/libusn_plugin_la-usn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/usn/usn.c' object='ldap/servers/plugins/usn/libusn_plugin_la-usn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libusn_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/usn/libusn_plugin_la-usn.lo `test -f 'ldap/servers/plugins/usn/usn.c' || echo '$(srcdir)/'`ldap/servers/plugins/usn/usn.c + +ldap/servers/plugins/usn/libusn_plugin_la-usn_cleanup.lo: ldap/servers/plugins/usn/usn_cleanup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libusn_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/usn/libusn_plugin_la-usn_cleanup.lo -MD -MP -MF ldap/servers/plugins/usn/$(DEPDIR)/libusn_plugin_la-usn_cleanup.Tpo -c -o ldap/servers/plugins/usn/libusn_plugin_la-usn_cleanup.lo `test -f 'ldap/servers/plugins/usn/usn_cleanup.c' || echo '$(srcdir)/'`ldap/servers/plugins/usn/usn_cleanup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/usn/$(DEPDIR)/libusn_plugin_la-usn_cleanup.Tpo ldap/servers/plugins/usn/$(DEPDIR)/libusn_plugin_la-usn_cleanup.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/usn/usn_cleanup.c' object='ldap/servers/plugins/usn/libusn_plugin_la-usn_cleanup.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libusn_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/usn/libusn_plugin_la-usn_cleanup.lo `test -f 'ldap/servers/plugins/usn/usn_cleanup.c' || echo '$(srcdir)/'`ldap/servers/plugins/usn/usn_cleanup.c + +ldap/servers/plugins/views/libviews_plugin_la-views.lo: ldap/servers/plugins/views/views.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libviews_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/views/libviews_plugin_la-views.lo -MD -MP -MF ldap/servers/plugins/views/$(DEPDIR)/libviews_plugin_la-views.Tpo -c -o ldap/servers/plugins/views/libviews_plugin_la-views.lo `test -f 'ldap/servers/plugins/views/views.c' || echo '$(srcdir)/'`ldap/servers/plugins/views/views.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/views/$(DEPDIR)/libviews_plugin_la-views.Tpo ldap/servers/plugins/views/$(DEPDIR)/libviews_plugin_la-views.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/views/views.c' object='ldap/servers/plugins/views/libviews_plugin_la-views.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libviews_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/views/libviews_plugin_la-views.lo `test -f 'ldap/servers/plugins/views/views.c' || echo '$(srcdir)/'`ldap/servers/plugins/views/views.c + +ldap/servers/plugins/whoami/libwhoami_plugin_la-whoami.lo: ldap/servers/plugins/whoami/whoami.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwhoami_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/whoami/libwhoami_plugin_la-whoami.lo -MD -MP -MF ldap/servers/plugins/whoami/$(DEPDIR)/libwhoami_plugin_la-whoami.Tpo -c -o ldap/servers/plugins/whoami/libwhoami_plugin_la-whoami.lo `test -f 'ldap/servers/plugins/whoami/whoami.c' || echo '$(srcdir)/'`ldap/servers/plugins/whoami/whoami.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/plugins/whoami/$(DEPDIR)/libwhoami_plugin_la-whoami.Tpo ldap/servers/plugins/whoami/$(DEPDIR)/libwhoami_plugin_la-whoami.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/plugins/whoami/whoami.c' object='ldap/servers/plugins/whoami/libwhoami_plugin_la-whoami.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwhoami_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/whoami/libwhoami_plugin_la-whoami.lo `test -f 'ldap/servers/plugins/whoami/whoami.c' || echo '$(srcdir)/'`ldap/servers/plugins/whoami/whoami.c + +ldap/servers/slapd/tools/dbscan_bin-dbscan.o: ldap/servers/slapd/tools/dbscan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbscan_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/dbscan_bin-dbscan.o -MD -MP -MF ldap/servers/slapd/tools/$(DEPDIR)/dbscan_bin-dbscan.Tpo -c -o ldap/servers/slapd/tools/dbscan_bin-dbscan.o `test -f 'ldap/servers/slapd/tools/dbscan.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/dbscan.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/$(DEPDIR)/dbscan_bin-dbscan.Tpo ldap/servers/slapd/tools/$(DEPDIR)/dbscan_bin-dbscan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/dbscan.c' object='ldap/servers/slapd/tools/dbscan_bin-dbscan.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbscan_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/dbscan_bin-dbscan.o `test -f 'ldap/servers/slapd/tools/dbscan.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/dbscan.c + +ldap/servers/slapd/tools/dbscan_bin-dbscan.obj: ldap/servers/slapd/tools/dbscan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbscan_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/dbscan_bin-dbscan.obj -MD -MP -MF ldap/servers/slapd/tools/$(DEPDIR)/dbscan_bin-dbscan.Tpo -c -o ldap/servers/slapd/tools/dbscan_bin-dbscan.obj `if test -f 'ldap/servers/slapd/tools/dbscan.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/dbscan.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/dbscan.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/$(DEPDIR)/dbscan_bin-dbscan.Tpo ldap/servers/slapd/tools/$(DEPDIR)/dbscan_bin-dbscan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/dbscan.c' object='ldap/servers/slapd/tools/dbscan_bin-dbscan.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dbscan_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/dbscan_bin-dbscan.obj `if test -f 'ldap/servers/slapd/tools/dbscan.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/dbscan.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/dbscan.c'; fi` + +ldap/servers/slapd/tools/rsearch/infadd_bin-addthread.o: ldap/servers/slapd/tools/rsearch/addthread.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(infadd_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/infadd_bin-addthread.o -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-addthread.Tpo -c -o ldap/servers/slapd/tools/rsearch/infadd_bin-addthread.o `test -f 'ldap/servers/slapd/tools/rsearch/addthread.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/addthread.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-addthread.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-addthread.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/addthread.c' object='ldap/servers/slapd/tools/rsearch/infadd_bin-addthread.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(infadd_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/infadd_bin-addthread.o `test -f 'ldap/servers/slapd/tools/rsearch/addthread.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/addthread.c + +ldap/servers/slapd/tools/rsearch/infadd_bin-addthread.obj: ldap/servers/slapd/tools/rsearch/addthread.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(infadd_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/infadd_bin-addthread.obj -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-addthread.Tpo -c -o ldap/servers/slapd/tools/rsearch/infadd_bin-addthread.obj `if test -f 'ldap/servers/slapd/tools/rsearch/addthread.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/addthread.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/addthread.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-addthread.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-addthread.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/addthread.c' object='ldap/servers/slapd/tools/rsearch/infadd_bin-addthread.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(infadd_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/infadd_bin-addthread.obj `if test -f 'ldap/servers/slapd/tools/rsearch/addthread.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/addthread.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/addthread.c'; fi` + +ldap/servers/slapd/tools/rsearch/infadd_bin-infadd.o: ldap/servers/slapd/tools/rsearch/infadd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(infadd_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/infadd_bin-infadd.o -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-infadd.Tpo -c -o ldap/servers/slapd/tools/rsearch/infadd_bin-infadd.o `test -f 'ldap/servers/slapd/tools/rsearch/infadd.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/infadd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-infadd.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-infadd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/infadd.c' object='ldap/servers/slapd/tools/rsearch/infadd_bin-infadd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(infadd_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/infadd_bin-infadd.o `test -f 'ldap/servers/slapd/tools/rsearch/infadd.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/infadd.c + +ldap/servers/slapd/tools/rsearch/infadd_bin-infadd.obj: ldap/servers/slapd/tools/rsearch/infadd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(infadd_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/infadd_bin-infadd.obj -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-infadd.Tpo -c -o ldap/servers/slapd/tools/rsearch/infadd_bin-infadd.obj `if test -f 'ldap/servers/slapd/tools/rsearch/infadd.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/infadd.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/infadd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-infadd.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-infadd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/infadd.c' object='ldap/servers/slapd/tools/rsearch/infadd_bin-infadd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(infadd_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/infadd_bin-infadd.obj `if test -f 'ldap/servers/slapd/tools/rsearch/infadd.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/infadd.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/infadd.c'; fi` + +ldap/servers/slapd/tools/rsearch/infadd_bin-nametable.o: ldap/servers/slapd/tools/rsearch/nametable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(infadd_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/infadd_bin-nametable.o -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-nametable.Tpo -c -o ldap/servers/slapd/tools/rsearch/infadd_bin-nametable.o `test -f 'ldap/servers/slapd/tools/rsearch/nametable.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/nametable.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-nametable.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-nametable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/nametable.c' object='ldap/servers/slapd/tools/rsearch/infadd_bin-nametable.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(infadd_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/infadd_bin-nametable.o `test -f 'ldap/servers/slapd/tools/rsearch/nametable.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/nametable.c + +ldap/servers/slapd/tools/rsearch/infadd_bin-nametable.obj: ldap/servers/slapd/tools/rsearch/nametable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(infadd_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/infadd_bin-nametable.obj -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-nametable.Tpo -c -o ldap/servers/slapd/tools/rsearch/infadd_bin-nametable.obj `if test -f 'ldap/servers/slapd/tools/rsearch/nametable.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/nametable.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/nametable.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-nametable.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/infadd_bin-nametable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/nametable.c' object='ldap/servers/slapd/tools/rsearch/infadd_bin-nametable.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(infadd_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/infadd_bin-nametable.obj `if test -f 'ldap/servers/slapd/tools/rsearch/nametable.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/nametable.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/nametable.c'; fi` + +ldap/servers/snmp/ldap_agent_bin-main.o: ldap/servers/snmp/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldap_agent_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/snmp/ldap_agent_bin-main.o -MD -MP -MF ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-main.Tpo -c -o ldap/servers/snmp/ldap_agent_bin-main.o `test -f 'ldap/servers/snmp/main.c' || echo '$(srcdir)/'`ldap/servers/snmp/main.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-main.Tpo ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/snmp/main.c' object='ldap/servers/snmp/ldap_agent_bin-main.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldap_agent_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/snmp/ldap_agent_bin-main.o `test -f 'ldap/servers/snmp/main.c' || echo '$(srcdir)/'`ldap/servers/snmp/main.c + +ldap/servers/snmp/ldap_agent_bin-main.obj: ldap/servers/snmp/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldap_agent_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/snmp/ldap_agent_bin-main.obj -MD -MP -MF ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-main.Tpo -c -o ldap/servers/snmp/ldap_agent_bin-main.obj `if test -f 'ldap/servers/snmp/main.c'; then $(CYGPATH_W) 'ldap/servers/snmp/main.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/snmp/main.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-main.Tpo ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/snmp/main.c' object='ldap/servers/snmp/ldap_agent_bin-main.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldap_agent_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/snmp/ldap_agent_bin-main.obj `if test -f 'ldap/servers/snmp/main.c'; then $(CYGPATH_W) 'ldap/servers/snmp/main.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/snmp/main.c'; fi` + +ldap/servers/snmp/ldap_agent_bin-ldap-agent.o: ldap/servers/snmp/ldap-agent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldap_agent_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/snmp/ldap_agent_bin-ldap-agent.o -MD -MP -MF ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-ldap-agent.Tpo -c -o ldap/servers/snmp/ldap_agent_bin-ldap-agent.o `test -f 'ldap/servers/snmp/ldap-agent.c' || echo '$(srcdir)/'`ldap/servers/snmp/ldap-agent.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-ldap-agent.Tpo ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-ldap-agent.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/snmp/ldap-agent.c' object='ldap/servers/snmp/ldap_agent_bin-ldap-agent.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldap_agent_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/snmp/ldap_agent_bin-ldap-agent.o `test -f 'ldap/servers/snmp/ldap-agent.c' || echo '$(srcdir)/'`ldap/servers/snmp/ldap-agent.c + +ldap/servers/snmp/ldap_agent_bin-ldap-agent.obj: ldap/servers/snmp/ldap-agent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldap_agent_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/snmp/ldap_agent_bin-ldap-agent.obj -MD -MP -MF ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-ldap-agent.Tpo -c -o ldap/servers/snmp/ldap_agent_bin-ldap-agent.obj `if test -f 'ldap/servers/snmp/ldap-agent.c'; then $(CYGPATH_W) 'ldap/servers/snmp/ldap-agent.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/snmp/ldap-agent.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-ldap-agent.Tpo ldap/servers/snmp/$(DEPDIR)/ldap_agent_bin-ldap-agent.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/snmp/ldap-agent.c' object='ldap/servers/snmp/ldap_agent_bin-ldap-agent.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldap_agent_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/snmp/ldap_agent_bin-ldap-agent.obj `if test -f 'ldap/servers/snmp/ldap-agent.c'; then $(CYGPATH_W) 'ldap/servers/snmp/ldap-agent.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/snmp/ldap-agent.c'; fi` + +ldap/servers/slapd/ldap_agent_bin-agtmmap.o: ldap/servers/slapd/agtmmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldap_agent_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ldap_agent_bin-agtmmap.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ldap_agent_bin-agtmmap.Tpo -c -o ldap/servers/slapd/ldap_agent_bin-agtmmap.o `test -f 'ldap/servers/slapd/agtmmap.c' || echo '$(srcdir)/'`ldap/servers/slapd/agtmmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ldap_agent_bin-agtmmap.Tpo ldap/servers/slapd/$(DEPDIR)/ldap_agent_bin-agtmmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/agtmmap.c' object='ldap/servers/slapd/ldap_agent_bin-agtmmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldap_agent_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ldap_agent_bin-agtmmap.o `test -f 'ldap/servers/slapd/agtmmap.c' || echo '$(srcdir)/'`ldap/servers/slapd/agtmmap.c + +ldap/servers/slapd/ldap_agent_bin-agtmmap.obj: ldap/servers/slapd/agtmmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldap_agent_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ldap_agent_bin-agtmmap.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ldap_agent_bin-agtmmap.Tpo -c -o ldap/servers/slapd/ldap_agent_bin-agtmmap.obj `if test -f 'ldap/servers/slapd/agtmmap.c'; then $(CYGPATH_W) 'ldap/servers/slapd/agtmmap.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/agtmmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ldap_agent_bin-agtmmap.Tpo ldap/servers/slapd/$(DEPDIR)/ldap_agent_bin-agtmmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/agtmmap.c' object='ldap/servers/slapd/ldap_agent_bin-agtmmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldap_agent_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ldap_agent_bin-agtmmap.obj `if test -f 'ldap/servers/slapd/agtmmap.c'; then $(CYGPATH_W) 'ldap/servers/slapd/agtmmap.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/agtmmap.c'; fi` + +ldap/servers/slapd/tools/ldclt_bin-ldaptool-sasl.o: ldap/servers/slapd/tools/ldaptool-sasl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt_bin-ldaptool-sasl.o -MD -MP -MF ldap/servers/slapd/tools/$(DEPDIR)/ldclt_bin-ldaptool-sasl.Tpo -c -o ldap/servers/slapd/tools/ldclt_bin-ldaptool-sasl.o `test -f 'ldap/servers/slapd/tools/ldaptool-sasl.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldaptool-sasl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/$(DEPDIR)/ldclt_bin-ldaptool-sasl.Tpo ldap/servers/slapd/tools/$(DEPDIR)/ldclt_bin-ldaptool-sasl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldaptool-sasl.c' object='ldap/servers/slapd/tools/ldclt_bin-ldaptool-sasl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt_bin-ldaptool-sasl.o `test -f 'ldap/servers/slapd/tools/ldaptool-sasl.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldaptool-sasl.c + +ldap/servers/slapd/tools/ldclt_bin-ldaptool-sasl.obj: ldap/servers/slapd/tools/ldaptool-sasl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt_bin-ldaptool-sasl.obj -MD -MP -MF ldap/servers/slapd/tools/$(DEPDIR)/ldclt_bin-ldaptool-sasl.Tpo -c -o ldap/servers/slapd/tools/ldclt_bin-ldaptool-sasl.obj `if test -f 'ldap/servers/slapd/tools/ldaptool-sasl.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldaptool-sasl.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldaptool-sasl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/$(DEPDIR)/ldclt_bin-ldaptool-sasl.Tpo ldap/servers/slapd/tools/$(DEPDIR)/ldclt_bin-ldaptool-sasl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldaptool-sasl.c' object='ldap/servers/slapd/tools/ldclt_bin-ldaptool-sasl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt_bin-ldaptool-sasl.obj `if test -f 'ldap/servers/slapd/tools/ldaptool-sasl.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldaptool-sasl.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldaptool-sasl.c'; fi` + +ldap/servers/slapd/tools/ldclt/ldclt_bin-data.o: ldap/servers/slapd/tools/ldclt/data.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-data.o -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-data.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-data.o `test -f 'ldap/servers/slapd/tools/ldclt/data.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/data.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-data.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-data.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/data.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-data.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-data.o `test -f 'ldap/servers/slapd/tools/ldclt/data.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/data.c + +ldap/servers/slapd/tools/ldclt/ldclt_bin-data.obj: ldap/servers/slapd/tools/ldclt/data.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-data.obj -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-data.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-data.obj `if test -f 'ldap/servers/slapd/tools/ldclt/data.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/data.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/data.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-data.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-data.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/data.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-data.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-data.obj `if test -f 'ldap/servers/slapd/tools/ldclt/data.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/data.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/data.c'; fi` + +ldap/servers/slapd/tools/ldclt/ldclt_bin-ldapfct.o: ldap/servers/slapd/tools/ldclt/ldapfct.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-ldapfct.o -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldapfct.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-ldapfct.o `test -f 'ldap/servers/slapd/tools/ldclt/ldapfct.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/ldapfct.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldapfct.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldapfct.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/ldapfct.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-ldapfct.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-ldapfct.o `test -f 'ldap/servers/slapd/tools/ldclt/ldapfct.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/ldapfct.c + +ldap/servers/slapd/tools/ldclt/ldclt_bin-ldapfct.obj: ldap/servers/slapd/tools/ldclt/ldapfct.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-ldapfct.obj -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldapfct.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-ldapfct.obj `if test -f 'ldap/servers/slapd/tools/ldclt/ldapfct.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/ldapfct.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/ldapfct.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldapfct.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldapfct.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/ldapfct.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-ldapfct.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-ldapfct.obj `if test -f 'ldap/servers/slapd/tools/ldclt/ldapfct.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/ldapfct.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/ldapfct.c'; fi` + +ldap/servers/slapd/tools/ldclt/ldclt_bin-ldclt.o: ldap/servers/slapd/tools/ldclt/ldclt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-ldclt.o -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldclt.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-ldclt.o `test -f 'ldap/servers/slapd/tools/ldclt/ldclt.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/ldclt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldclt.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldclt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/ldclt.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-ldclt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-ldclt.o `test -f 'ldap/servers/slapd/tools/ldclt/ldclt.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/ldclt.c + +ldap/servers/slapd/tools/ldclt/ldclt_bin-ldclt.obj: ldap/servers/slapd/tools/ldclt/ldclt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-ldclt.obj -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldclt.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-ldclt.obj `if test -f 'ldap/servers/slapd/tools/ldclt/ldclt.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/ldclt.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/ldclt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldclt.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldclt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/ldclt.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-ldclt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-ldclt.obj `if test -f 'ldap/servers/slapd/tools/ldclt/ldclt.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/ldclt.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/ldclt.c'; fi` + +ldap/servers/slapd/tools/ldclt/ldclt_bin-ldcltU.o: ldap/servers/slapd/tools/ldclt/ldcltU.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-ldcltU.o -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldcltU.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-ldcltU.o `test -f 'ldap/servers/slapd/tools/ldclt/ldcltU.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/ldcltU.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldcltU.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldcltU.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/ldcltU.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-ldcltU.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-ldcltU.o `test -f 'ldap/servers/slapd/tools/ldclt/ldcltU.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/ldcltU.c + +ldap/servers/slapd/tools/ldclt/ldclt_bin-ldcltU.obj: ldap/servers/slapd/tools/ldclt/ldcltU.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-ldcltU.obj -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldcltU.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-ldcltU.obj `if test -f 'ldap/servers/slapd/tools/ldclt/ldcltU.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/ldcltU.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/ldcltU.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldcltU.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-ldcltU.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/ldcltU.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-ldcltU.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-ldcltU.obj `if test -f 'ldap/servers/slapd/tools/ldclt/ldcltU.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/ldcltU.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/ldcltU.c'; fi` + +ldap/servers/slapd/tools/ldclt/ldclt_bin-parser.o: ldap/servers/slapd/tools/ldclt/parser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-parser.o -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-parser.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-parser.o `test -f 'ldap/servers/slapd/tools/ldclt/parser.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/parser.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-parser.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-parser.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/parser.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-parser.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-parser.o `test -f 'ldap/servers/slapd/tools/ldclt/parser.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/parser.c + +ldap/servers/slapd/tools/ldclt/ldclt_bin-parser.obj: ldap/servers/slapd/tools/ldclt/parser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-parser.obj -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-parser.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-parser.obj `if test -f 'ldap/servers/slapd/tools/ldclt/parser.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/parser.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/parser.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-parser.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-parser.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/parser.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-parser.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-parser.obj `if test -f 'ldap/servers/slapd/tools/ldclt/parser.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/parser.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/parser.c'; fi` + +ldap/servers/slapd/tools/ldclt/ldclt_bin-port.o: ldap/servers/slapd/tools/ldclt/port.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-port.o -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-port.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-port.o `test -f 'ldap/servers/slapd/tools/ldclt/port.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/port.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-port.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-port.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/port.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-port.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-port.o `test -f 'ldap/servers/slapd/tools/ldclt/port.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/port.c + +ldap/servers/slapd/tools/ldclt/ldclt_bin-port.obj: ldap/servers/slapd/tools/ldclt/port.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-port.obj -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-port.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-port.obj `if test -f 'ldap/servers/slapd/tools/ldclt/port.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/port.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/port.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-port.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-port.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/port.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-port.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-port.obj `if test -f 'ldap/servers/slapd/tools/ldclt/port.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/port.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/port.c'; fi` + +ldap/servers/slapd/tools/ldclt/ldclt_bin-scalab01.o: ldap/servers/slapd/tools/ldclt/scalab01.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-scalab01.o -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-scalab01.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-scalab01.o `test -f 'ldap/servers/slapd/tools/ldclt/scalab01.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/scalab01.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-scalab01.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-scalab01.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/scalab01.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-scalab01.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-scalab01.o `test -f 'ldap/servers/slapd/tools/ldclt/scalab01.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/scalab01.c + +ldap/servers/slapd/tools/ldclt/ldclt_bin-scalab01.obj: ldap/servers/slapd/tools/ldclt/scalab01.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-scalab01.obj -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-scalab01.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-scalab01.obj `if test -f 'ldap/servers/slapd/tools/ldclt/scalab01.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/scalab01.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/scalab01.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-scalab01.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-scalab01.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/scalab01.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-scalab01.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-scalab01.obj `if test -f 'ldap/servers/slapd/tools/ldclt/scalab01.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/scalab01.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/scalab01.c'; fi` + +ldap/servers/slapd/tools/ldclt/ldclt_bin-threadMain.o: ldap/servers/slapd/tools/ldclt/threadMain.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-threadMain.o -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-threadMain.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-threadMain.o `test -f 'ldap/servers/slapd/tools/ldclt/threadMain.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/threadMain.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-threadMain.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-threadMain.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/threadMain.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-threadMain.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-threadMain.o `test -f 'ldap/servers/slapd/tools/ldclt/threadMain.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/threadMain.c + +ldap/servers/slapd/tools/ldclt/ldclt_bin-threadMain.obj: ldap/servers/slapd/tools/ldclt/threadMain.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-threadMain.obj -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-threadMain.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-threadMain.obj `if test -f 'ldap/servers/slapd/tools/ldclt/threadMain.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/threadMain.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/threadMain.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-threadMain.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-threadMain.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/threadMain.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-threadMain.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-threadMain.obj `if test -f 'ldap/servers/slapd/tools/ldclt/threadMain.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/threadMain.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/threadMain.c'; fi` + +ldap/servers/slapd/tools/ldclt/ldclt_bin-utils.o: ldap/servers/slapd/tools/ldclt/utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-utils.o -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-utils.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-utils.o `test -f 'ldap/servers/slapd/tools/ldclt/utils.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-utils.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-utils.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/utils.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-utils.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-utils.o `test -f 'ldap/servers/slapd/tools/ldclt/utils.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/utils.c + +ldap/servers/slapd/tools/ldclt/ldclt_bin-utils.obj: ldap/servers/slapd/tools/ldclt/utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-utils.obj -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-utils.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-utils.obj `if test -f 'ldap/servers/slapd/tools/ldclt/utils.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/utils.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/utils.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-utils.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-utils.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/utils.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-utils.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-utils.obj `if test -f 'ldap/servers/slapd/tools/ldclt/utils.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/utils.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/utils.c'; fi` + +ldap/servers/slapd/tools/ldclt/ldclt_bin-version.o: ldap/servers/slapd/tools/ldclt/version.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-version.o -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-version.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-version.o `test -f 'ldap/servers/slapd/tools/ldclt/version.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/version.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-version.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-version.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/version.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-version.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-version.o `test -f 'ldap/servers/slapd/tools/ldclt/version.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/version.c + +ldap/servers/slapd/tools/ldclt/ldclt_bin-version.obj: ldap/servers/slapd/tools/ldclt/version.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-version.obj -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-version.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-version.obj `if test -f 'ldap/servers/slapd/tools/ldclt/version.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/version.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/version.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-version.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-version.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/version.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-version.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-version.obj `if test -f 'ldap/servers/slapd/tools/ldclt/version.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/version.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/version.c'; fi` + +ldap/servers/slapd/tools/ldclt/ldclt_bin-workarounds.o: ldap/servers/slapd/tools/ldclt/workarounds.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-workarounds.o -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-workarounds.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-workarounds.o `test -f 'ldap/servers/slapd/tools/ldclt/workarounds.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/workarounds.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-workarounds.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-workarounds.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/workarounds.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-workarounds.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-workarounds.o `test -f 'ldap/servers/slapd/tools/ldclt/workarounds.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/workarounds.c + +ldap/servers/slapd/tools/ldclt/ldclt_bin-workarounds.obj: ldap/servers/slapd/tools/ldclt/workarounds.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-workarounds.obj -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-workarounds.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-workarounds.obj `if test -f 'ldap/servers/slapd/tools/ldclt/workarounds.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/workarounds.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/workarounds.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-workarounds.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-workarounds.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/workarounds.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-workarounds.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-workarounds.obj `if test -f 'ldap/servers/slapd/tools/ldclt/workarounds.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/workarounds.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/workarounds.c'; fi` + +ldap/servers/slapd/tools/ldclt/ldclt_bin-opCheck.o: ldap/servers/slapd/tools/ldclt/opCheck.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-opCheck.o -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-opCheck.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-opCheck.o `test -f 'ldap/servers/slapd/tools/ldclt/opCheck.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/opCheck.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-opCheck.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-opCheck.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/opCheck.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-opCheck.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-opCheck.o `test -f 'ldap/servers/slapd/tools/ldclt/opCheck.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldclt/opCheck.c + +ldap/servers/slapd/tools/ldclt/ldclt_bin-opCheck.obj: ldap/servers/slapd/tools/ldclt/opCheck.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldclt/ldclt_bin-opCheck.obj -MD -MP -MF ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-opCheck.Tpo -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-opCheck.obj `if test -f 'ldap/servers/slapd/tools/ldclt/opCheck.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/opCheck.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/opCheck.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-opCheck.Tpo ldap/servers/slapd/tools/ldclt/$(DEPDIR)/ldclt_bin-opCheck.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldclt/opCheck.c' object='ldap/servers/slapd/tools/ldclt/ldclt_bin-opCheck.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldclt_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldclt/ldclt_bin-opCheck.obj `if test -f 'ldap/servers/slapd/tools/ldclt/opCheck.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldclt/opCheck.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldclt/opCheck.c'; fi` + +ldap/servers/slapd/tools/ldif_bin-ldif.o: ldap/servers/slapd/tools/ldif.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldif_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldif_bin-ldif.o -MD -MP -MF ldap/servers/slapd/tools/$(DEPDIR)/ldif_bin-ldif.Tpo -c -o ldap/servers/slapd/tools/ldif_bin-ldif.o `test -f 'ldap/servers/slapd/tools/ldif.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldif.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/$(DEPDIR)/ldif_bin-ldif.Tpo ldap/servers/slapd/tools/$(DEPDIR)/ldif_bin-ldif.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldif.c' object='ldap/servers/slapd/tools/ldif_bin-ldif.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldif_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldif_bin-ldif.o `test -f 'ldap/servers/slapd/tools/ldif.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/ldif.c + +ldap/servers/slapd/tools/ldif_bin-ldif.obj: ldap/servers/slapd/tools/ldif.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldif_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/ldif_bin-ldif.obj -MD -MP -MF ldap/servers/slapd/tools/$(DEPDIR)/ldif_bin-ldif.Tpo -c -o ldap/servers/slapd/tools/ldif_bin-ldif.obj `if test -f 'ldap/servers/slapd/tools/ldif.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldif.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldif.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/$(DEPDIR)/ldif_bin-ldif.Tpo ldap/servers/slapd/tools/$(DEPDIR)/ldif_bin-ldif.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/ldif.c' object='ldap/servers/slapd/tools/ldif_bin-ldif.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldif_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/ldif_bin-ldif.obj `if test -f 'ldap/servers/slapd/tools/ldif.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/ldif.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/ldif.c'; fi` + +lib/libsi18n/makstrdb-makstrdb.o: lib/libsi18n/makstrdb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(makstrdb_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libsi18n/makstrdb-makstrdb.o -MD -MP -MF lib/libsi18n/$(DEPDIR)/makstrdb-makstrdb.Tpo -c -o lib/libsi18n/makstrdb-makstrdb.o `test -f 'lib/libsi18n/makstrdb.c' || echo '$(srcdir)/'`lib/libsi18n/makstrdb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libsi18n/$(DEPDIR)/makstrdb-makstrdb.Tpo lib/libsi18n/$(DEPDIR)/makstrdb-makstrdb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libsi18n/makstrdb.c' object='lib/libsi18n/makstrdb-makstrdb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(makstrdb_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libsi18n/makstrdb-makstrdb.o `test -f 'lib/libsi18n/makstrdb.c' || echo '$(srcdir)/'`lib/libsi18n/makstrdb.c + +lib/libsi18n/makstrdb-makstrdb.obj: lib/libsi18n/makstrdb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(makstrdb_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libsi18n/makstrdb-makstrdb.obj -MD -MP -MF lib/libsi18n/$(DEPDIR)/makstrdb-makstrdb.Tpo -c -o lib/libsi18n/makstrdb-makstrdb.obj `if test -f 'lib/libsi18n/makstrdb.c'; then $(CYGPATH_W) 'lib/libsi18n/makstrdb.c'; else $(CYGPATH_W) '$(srcdir)/lib/libsi18n/makstrdb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libsi18n/$(DEPDIR)/makstrdb-makstrdb.Tpo lib/libsi18n/$(DEPDIR)/makstrdb-makstrdb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libsi18n/makstrdb.c' object='lib/libsi18n/makstrdb-makstrdb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(makstrdb_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libsi18n/makstrdb-makstrdb.obj `if test -f 'lib/libsi18n/makstrdb.c'; then $(CYGPATH_W) 'lib/libsi18n/makstrdb.c'; else $(CYGPATH_W) '$(srcdir)/lib/libsi18n/makstrdb.c'; fi` + +ldap/servers/slapd/tools/migratecred_bin-migratecred.o: ldap/servers/slapd/tools/migratecred.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(migratecred_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/migratecred_bin-migratecred.o -MD -MP -MF ldap/servers/slapd/tools/$(DEPDIR)/migratecred_bin-migratecred.Tpo -c -o ldap/servers/slapd/tools/migratecred_bin-migratecred.o `test -f 'ldap/servers/slapd/tools/migratecred.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/migratecred.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/$(DEPDIR)/migratecred_bin-migratecred.Tpo ldap/servers/slapd/tools/$(DEPDIR)/migratecred_bin-migratecred.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/migratecred.c' object='ldap/servers/slapd/tools/migratecred_bin-migratecred.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(migratecred_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/migratecred_bin-migratecred.o `test -f 'ldap/servers/slapd/tools/migratecred.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/migratecred.c + +ldap/servers/slapd/tools/migratecred_bin-migratecred.obj: ldap/servers/slapd/tools/migratecred.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(migratecred_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/migratecred_bin-migratecred.obj -MD -MP -MF ldap/servers/slapd/tools/$(DEPDIR)/migratecred_bin-migratecred.Tpo -c -o ldap/servers/slapd/tools/migratecred_bin-migratecred.obj `if test -f 'ldap/servers/slapd/tools/migratecred.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/migratecred.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/migratecred.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/$(DEPDIR)/migratecred_bin-migratecred.Tpo ldap/servers/slapd/tools/$(DEPDIR)/migratecred_bin-migratecred.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/migratecred.c' object='ldap/servers/slapd/tools/migratecred_bin-migratecred.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(migratecred_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/migratecred_bin-migratecred.obj `if test -f 'ldap/servers/slapd/tools/migratecred.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/migratecred.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/migratecred.c'; fi` + +ldap/servers/slapd/tools/mmldif_bin-mmldif.o: ldap/servers/slapd/tools/mmldif.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmldif_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/mmldif_bin-mmldif.o -MD -MP -MF ldap/servers/slapd/tools/$(DEPDIR)/mmldif_bin-mmldif.Tpo -c -o ldap/servers/slapd/tools/mmldif_bin-mmldif.o `test -f 'ldap/servers/slapd/tools/mmldif.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/mmldif.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/$(DEPDIR)/mmldif_bin-mmldif.Tpo ldap/servers/slapd/tools/$(DEPDIR)/mmldif_bin-mmldif.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/mmldif.c' object='ldap/servers/slapd/tools/mmldif_bin-mmldif.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmldif_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/mmldif_bin-mmldif.o `test -f 'ldap/servers/slapd/tools/mmldif.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/mmldif.c + +ldap/servers/slapd/tools/mmldif_bin-mmldif.obj: ldap/servers/slapd/tools/mmldif.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmldif_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/mmldif_bin-mmldif.obj -MD -MP -MF ldap/servers/slapd/tools/$(DEPDIR)/mmldif_bin-mmldif.Tpo -c -o ldap/servers/slapd/tools/mmldif_bin-mmldif.obj `if test -f 'ldap/servers/slapd/tools/mmldif.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/mmldif.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/mmldif.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/$(DEPDIR)/mmldif_bin-mmldif.Tpo ldap/servers/slapd/tools/$(DEPDIR)/mmldif_bin-mmldif.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/mmldif.c' object='ldap/servers/slapd/tools/mmldif_bin-mmldif.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmldif_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/mmldif_bin-mmldif.obj `if test -f 'ldap/servers/slapd/tools/mmldif.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/mmldif.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/mmldif.c'; fi` + +ldap/servers/slapd/ns_slapd-abandon.o: ldap/servers/slapd/abandon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-abandon.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-abandon.Tpo -c -o ldap/servers/slapd/ns_slapd-abandon.o `test -f 'ldap/servers/slapd/abandon.c' || echo '$(srcdir)/'`ldap/servers/slapd/abandon.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-abandon.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-abandon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/abandon.c' object='ldap/servers/slapd/ns_slapd-abandon.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-abandon.o `test -f 'ldap/servers/slapd/abandon.c' || echo '$(srcdir)/'`ldap/servers/slapd/abandon.c + +ldap/servers/slapd/ns_slapd-abandon.obj: ldap/servers/slapd/abandon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-abandon.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-abandon.Tpo -c -o ldap/servers/slapd/ns_slapd-abandon.obj `if test -f 'ldap/servers/slapd/abandon.c'; then $(CYGPATH_W) 'ldap/servers/slapd/abandon.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/abandon.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-abandon.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-abandon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/abandon.c' object='ldap/servers/slapd/ns_slapd-abandon.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-abandon.obj `if test -f 'ldap/servers/slapd/abandon.c'; then $(CYGPATH_W) 'ldap/servers/slapd/abandon.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/abandon.c'; fi` + +ldap/servers/slapd/ns_slapd-auth.o: ldap/servers/slapd/auth.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-auth.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-auth.Tpo -c -o ldap/servers/slapd/ns_slapd-auth.o `test -f 'ldap/servers/slapd/auth.c' || echo '$(srcdir)/'`ldap/servers/slapd/auth.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-auth.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-auth.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/auth.c' object='ldap/servers/slapd/ns_slapd-auth.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-auth.o `test -f 'ldap/servers/slapd/auth.c' || echo '$(srcdir)/'`ldap/servers/slapd/auth.c + +ldap/servers/slapd/ns_slapd-auth.obj: ldap/servers/slapd/auth.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-auth.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-auth.Tpo -c -o ldap/servers/slapd/ns_slapd-auth.obj `if test -f 'ldap/servers/slapd/auth.c'; then $(CYGPATH_W) 'ldap/servers/slapd/auth.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/auth.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-auth.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-auth.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/auth.c' object='ldap/servers/slapd/ns_slapd-auth.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-auth.obj `if test -f 'ldap/servers/slapd/auth.c'; then $(CYGPATH_W) 'ldap/servers/slapd/auth.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/auth.c'; fi` + +ldap/servers/slapd/ns_slapd-bind.o: ldap/servers/slapd/bind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-bind.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-bind.Tpo -c -o ldap/servers/slapd/ns_slapd-bind.o `test -f 'ldap/servers/slapd/bind.c' || echo '$(srcdir)/'`ldap/servers/slapd/bind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-bind.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-bind.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/bind.c' object='ldap/servers/slapd/ns_slapd-bind.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-bind.o `test -f 'ldap/servers/slapd/bind.c' || echo '$(srcdir)/'`ldap/servers/slapd/bind.c + +ldap/servers/slapd/ns_slapd-bind.obj: ldap/servers/slapd/bind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-bind.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-bind.Tpo -c -o ldap/servers/slapd/ns_slapd-bind.obj `if test -f 'ldap/servers/slapd/bind.c'; then $(CYGPATH_W) 'ldap/servers/slapd/bind.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/bind.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-bind.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-bind.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/bind.c' object='ldap/servers/slapd/ns_slapd-bind.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-bind.obj `if test -f 'ldap/servers/slapd/bind.c'; then $(CYGPATH_W) 'ldap/servers/slapd/bind.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/bind.c'; fi` + +ldap/servers/slapd/ns_slapd-compare.o: ldap/servers/slapd/compare.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-compare.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-compare.Tpo -c -o ldap/servers/slapd/ns_slapd-compare.o `test -f 'ldap/servers/slapd/compare.c' || echo '$(srcdir)/'`ldap/servers/slapd/compare.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-compare.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-compare.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/compare.c' object='ldap/servers/slapd/ns_slapd-compare.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-compare.o `test -f 'ldap/servers/slapd/compare.c' || echo '$(srcdir)/'`ldap/servers/slapd/compare.c + +ldap/servers/slapd/ns_slapd-compare.obj: ldap/servers/slapd/compare.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-compare.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-compare.Tpo -c -o ldap/servers/slapd/ns_slapd-compare.obj `if test -f 'ldap/servers/slapd/compare.c'; then $(CYGPATH_W) 'ldap/servers/slapd/compare.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/compare.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-compare.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-compare.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/compare.c' object='ldap/servers/slapd/ns_slapd-compare.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-compare.obj `if test -f 'ldap/servers/slapd/compare.c'; then $(CYGPATH_W) 'ldap/servers/slapd/compare.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/compare.c'; fi` + +ldap/servers/slapd/ns_slapd-config.o: ldap/servers/slapd/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-config.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-config.Tpo -c -o ldap/servers/slapd/ns_slapd-config.o `test -f 'ldap/servers/slapd/config.c' || echo '$(srcdir)/'`ldap/servers/slapd/config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-config.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/config.c' object='ldap/servers/slapd/ns_slapd-config.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-config.o `test -f 'ldap/servers/slapd/config.c' || echo '$(srcdir)/'`ldap/servers/slapd/config.c + +ldap/servers/slapd/ns_slapd-config.obj: ldap/servers/slapd/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-config.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-config.Tpo -c -o ldap/servers/slapd/ns_slapd-config.obj `if test -f 'ldap/servers/slapd/config.c'; then $(CYGPATH_W) 'ldap/servers/slapd/config.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/config.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-config.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/config.c' object='ldap/servers/slapd/ns_slapd-config.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-config.obj `if test -f 'ldap/servers/slapd/config.c'; then $(CYGPATH_W) 'ldap/servers/slapd/config.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/config.c'; fi` + +ldap/servers/slapd/ns_slapd-configdse.o: ldap/servers/slapd/configdse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-configdse.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-configdse.Tpo -c -o ldap/servers/slapd/ns_slapd-configdse.o `test -f 'ldap/servers/slapd/configdse.c' || echo '$(srcdir)/'`ldap/servers/slapd/configdse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-configdse.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-configdse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/configdse.c' object='ldap/servers/slapd/ns_slapd-configdse.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-configdse.o `test -f 'ldap/servers/slapd/configdse.c' || echo '$(srcdir)/'`ldap/servers/slapd/configdse.c + +ldap/servers/slapd/ns_slapd-configdse.obj: ldap/servers/slapd/configdse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-configdse.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-configdse.Tpo -c -o ldap/servers/slapd/ns_slapd-configdse.obj `if test -f 'ldap/servers/slapd/configdse.c'; then $(CYGPATH_W) 'ldap/servers/slapd/configdse.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/configdse.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-configdse.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-configdse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/configdse.c' object='ldap/servers/slapd/ns_slapd-configdse.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-configdse.obj `if test -f 'ldap/servers/slapd/configdse.c'; then $(CYGPATH_W) 'ldap/servers/slapd/configdse.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/configdse.c'; fi` + +ldap/servers/slapd/ns_slapd-connection.o: ldap/servers/slapd/connection.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-connection.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-connection.Tpo -c -o ldap/servers/slapd/ns_slapd-connection.o `test -f 'ldap/servers/slapd/connection.c' || echo '$(srcdir)/'`ldap/servers/slapd/connection.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-connection.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-connection.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/connection.c' object='ldap/servers/slapd/ns_slapd-connection.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-connection.o `test -f 'ldap/servers/slapd/connection.c' || echo '$(srcdir)/'`ldap/servers/slapd/connection.c + +ldap/servers/slapd/ns_slapd-connection.obj: ldap/servers/slapd/connection.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-connection.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-connection.Tpo -c -o ldap/servers/slapd/ns_slapd-connection.obj `if test -f 'ldap/servers/slapd/connection.c'; then $(CYGPATH_W) 'ldap/servers/slapd/connection.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/connection.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-connection.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-connection.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/connection.c' object='ldap/servers/slapd/ns_slapd-connection.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-connection.obj `if test -f 'ldap/servers/slapd/connection.c'; then $(CYGPATH_W) 'ldap/servers/slapd/connection.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/connection.c'; fi` + +ldap/servers/slapd/ns_slapd-conntable.o: ldap/servers/slapd/conntable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-conntable.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-conntable.Tpo -c -o ldap/servers/slapd/ns_slapd-conntable.o `test -f 'ldap/servers/slapd/conntable.c' || echo '$(srcdir)/'`ldap/servers/slapd/conntable.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-conntable.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-conntable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/conntable.c' object='ldap/servers/slapd/ns_slapd-conntable.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-conntable.o `test -f 'ldap/servers/slapd/conntable.c' || echo '$(srcdir)/'`ldap/servers/slapd/conntable.c + +ldap/servers/slapd/ns_slapd-conntable.obj: ldap/servers/slapd/conntable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-conntable.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-conntable.Tpo -c -o ldap/servers/slapd/ns_slapd-conntable.obj `if test -f 'ldap/servers/slapd/conntable.c'; then $(CYGPATH_W) 'ldap/servers/slapd/conntable.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/conntable.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-conntable.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-conntable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/conntable.c' object='ldap/servers/slapd/ns_slapd-conntable.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-conntable.obj `if test -f 'ldap/servers/slapd/conntable.c'; then $(CYGPATH_W) 'ldap/servers/slapd/conntable.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/conntable.c'; fi` + +ldap/servers/slapd/ns_slapd-daemon.o: ldap/servers/slapd/daemon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-daemon.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-daemon.Tpo -c -o ldap/servers/slapd/ns_slapd-daemon.o `test -f 'ldap/servers/slapd/daemon.c' || echo '$(srcdir)/'`ldap/servers/slapd/daemon.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-daemon.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-daemon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/daemon.c' object='ldap/servers/slapd/ns_slapd-daemon.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-daemon.o `test -f 'ldap/servers/slapd/daemon.c' || echo '$(srcdir)/'`ldap/servers/slapd/daemon.c + +ldap/servers/slapd/ns_slapd-daemon.obj: ldap/servers/slapd/daemon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-daemon.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-daemon.Tpo -c -o ldap/servers/slapd/ns_slapd-daemon.obj `if test -f 'ldap/servers/slapd/daemon.c'; then $(CYGPATH_W) 'ldap/servers/slapd/daemon.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/daemon.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-daemon.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-daemon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/daemon.c' object='ldap/servers/slapd/ns_slapd-daemon.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-daemon.obj `if test -f 'ldap/servers/slapd/daemon.c'; then $(CYGPATH_W) 'ldap/servers/slapd/daemon.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/daemon.c'; fi` + +ldap/servers/slapd/ns_slapd-detach.o: ldap/servers/slapd/detach.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-detach.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-detach.Tpo -c -o ldap/servers/slapd/ns_slapd-detach.o `test -f 'ldap/servers/slapd/detach.c' || echo '$(srcdir)/'`ldap/servers/slapd/detach.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-detach.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-detach.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/detach.c' object='ldap/servers/slapd/ns_slapd-detach.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-detach.o `test -f 'ldap/servers/slapd/detach.c' || echo '$(srcdir)/'`ldap/servers/slapd/detach.c + +ldap/servers/slapd/ns_slapd-detach.obj: ldap/servers/slapd/detach.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-detach.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-detach.Tpo -c -o ldap/servers/slapd/ns_slapd-detach.obj `if test -f 'ldap/servers/slapd/detach.c'; then $(CYGPATH_W) 'ldap/servers/slapd/detach.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/detach.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-detach.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-detach.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/detach.c' object='ldap/servers/slapd/ns_slapd-detach.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-detach.obj `if test -f 'ldap/servers/slapd/detach.c'; then $(CYGPATH_W) 'ldap/servers/slapd/detach.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/detach.c'; fi` + +ldap/servers/slapd/ns_slapd-extendop.o: ldap/servers/slapd/extendop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-extendop.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-extendop.Tpo -c -o ldap/servers/slapd/ns_slapd-extendop.o `test -f 'ldap/servers/slapd/extendop.c' || echo '$(srcdir)/'`ldap/servers/slapd/extendop.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-extendop.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-extendop.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/extendop.c' object='ldap/servers/slapd/ns_slapd-extendop.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-extendop.o `test -f 'ldap/servers/slapd/extendop.c' || echo '$(srcdir)/'`ldap/servers/slapd/extendop.c + +ldap/servers/slapd/ns_slapd-extendop.obj: ldap/servers/slapd/extendop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-extendop.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-extendop.Tpo -c -o ldap/servers/slapd/ns_slapd-extendop.obj `if test -f 'ldap/servers/slapd/extendop.c'; then $(CYGPATH_W) 'ldap/servers/slapd/extendop.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/extendop.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-extendop.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-extendop.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/extendop.c' object='ldap/servers/slapd/ns_slapd-extendop.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-extendop.obj `if test -f 'ldap/servers/slapd/extendop.c'; then $(CYGPATH_W) 'ldap/servers/slapd/extendop.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/extendop.c'; fi` + +ldap/servers/slapd/ns_slapd-fedse.o: ldap/servers/slapd/fedse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-fedse.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-fedse.Tpo -c -o ldap/servers/slapd/ns_slapd-fedse.o `test -f 'ldap/servers/slapd/fedse.c' || echo '$(srcdir)/'`ldap/servers/slapd/fedse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-fedse.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-fedse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/fedse.c' object='ldap/servers/slapd/ns_slapd-fedse.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-fedse.o `test -f 'ldap/servers/slapd/fedse.c' || echo '$(srcdir)/'`ldap/servers/slapd/fedse.c + +ldap/servers/slapd/ns_slapd-fedse.obj: ldap/servers/slapd/fedse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-fedse.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-fedse.Tpo -c -o ldap/servers/slapd/ns_slapd-fedse.obj `if test -f 'ldap/servers/slapd/fedse.c'; then $(CYGPATH_W) 'ldap/servers/slapd/fedse.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/fedse.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-fedse.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-fedse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/fedse.c' object='ldap/servers/slapd/ns_slapd-fedse.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-fedse.obj `if test -f 'ldap/servers/slapd/fedse.c'; then $(CYGPATH_W) 'ldap/servers/slapd/fedse.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/fedse.c'; fi` + +ldap/servers/slapd/ns_slapd-fileio.o: ldap/servers/slapd/fileio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-fileio.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-fileio.Tpo -c -o ldap/servers/slapd/ns_slapd-fileio.o `test -f 'ldap/servers/slapd/fileio.c' || echo '$(srcdir)/'`ldap/servers/slapd/fileio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-fileio.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-fileio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/fileio.c' object='ldap/servers/slapd/ns_slapd-fileio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-fileio.o `test -f 'ldap/servers/slapd/fileio.c' || echo '$(srcdir)/'`ldap/servers/slapd/fileio.c + +ldap/servers/slapd/ns_slapd-fileio.obj: ldap/servers/slapd/fileio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-fileio.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-fileio.Tpo -c -o ldap/servers/slapd/ns_slapd-fileio.obj `if test -f 'ldap/servers/slapd/fileio.c'; then $(CYGPATH_W) 'ldap/servers/slapd/fileio.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/fileio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-fileio.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-fileio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/fileio.c' object='ldap/servers/slapd/ns_slapd-fileio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-fileio.obj `if test -f 'ldap/servers/slapd/fileio.c'; then $(CYGPATH_W) 'ldap/servers/slapd/fileio.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/fileio.c'; fi` + +ldap/servers/slapd/ns_slapd-getopt_ext.o: ldap/servers/slapd/getopt_ext.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-getopt_ext.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-getopt_ext.Tpo -c -o ldap/servers/slapd/ns_slapd-getopt_ext.o `test -f 'ldap/servers/slapd/getopt_ext.c' || echo '$(srcdir)/'`ldap/servers/slapd/getopt_ext.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-getopt_ext.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-getopt_ext.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/getopt_ext.c' object='ldap/servers/slapd/ns_slapd-getopt_ext.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-getopt_ext.o `test -f 'ldap/servers/slapd/getopt_ext.c' || echo '$(srcdir)/'`ldap/servers/slapd/getopt_ext.c + +ldap/servers/slapd/ns_slapd-getopt_ext.obj: ldap/servers/slapd/getopt_ext.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-getopt_ext.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-getopt_ext.Tpo -c -o ldap/servers/slapd/ns_slapd-getopt_ext.obj `if test -f 'ldap/servers/slapd/getopt_ext.c'; then $(CYGPATH_W) 'ldap/servers/slapd/getopt_ext.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/getopt_ext.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-getopt_ext.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-getopt_ext.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/getopt_ext.c' object='ldap/servers/slapd/ns_slapd-getopt_ext.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-getopt_ext.obj `if test -f 'ldap/servers/slapd/getopt_ext.c'; then $(CYGPATH_W) 'ldap/servers/slapd/getopt_ext.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/getopt_ext.c'; fi` + +ldap/servers/slapd/ns_slapd-globals.o: ldap/servers/slapd/globals.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-globals.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-globals.Tpo -c -o ldap/servers/slapd/ns_slapd-globals.o `test -f 'ldap/servers/slapd/globals.c' || echo '$(srcdir)/'`ldap/servers/slapd/globals.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-globals.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-globals.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/globals.c' object='ldap/servers/slapd/ns_slapd-globals.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-globals.o `test -f 'ldap/servers/slapd/globals.c' || echo '$(srcdir)/'`ldap/servers/slapd/globals.c + +ldap/servers/slapd/ns_slapd-globals.obj: ldap/servers/slapd/globals.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-globals.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-globals.Tpo -c -o ldap/servers/slapd/ns_slapd-globals.obj `if test -f 'ldap/servers/slapd/globals.c'; then $(CYGPATH_W) 'ldap/servers/slapd/globals.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/globals.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-globals.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-globals.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/globals.c' object='ldap/servers/slapd/ns_slapd-globals.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-globals.obj `if test -f 'ldap/servers/slapd/globals.c'; then $(CYGPATH_W) 'ldap/servers/slapd/globals.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/globals.c'; fi` + +ldap/servers/slapd/ns_slapd-house.o: ldap/servers/slapd/house.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-house.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-house.Tpo -c -o ldap/servers/slapd/ns_slapd-house.o `test -f 'ldap/servers/slapd/house.c' || echo '$(srcdir)/'`ldap/servers/slapd/house.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-house.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-house.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/house.c' object='ldap/servers/slapd/ns_slapd-house.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-house.o `test -f 'ldap/servers/slapd/house.c' || echo '$(srcdir)/'`ldap/servers/slapd/house.c + +ldap/servers/slapd/ns_slapd-house.obj: ldap/servers/slapd/house.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-house.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-house.Tpo -c -o ldap/servers/slapd/ns_slapd-house.obj `if test -f 'ldap/servers/slapd/house.c'; then $(CYGPATH_W) 'ldap/servers/slapd/house.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/house.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-house.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-house.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/house.c' object='ldap/servers/slapd/ns_slapd-house.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-house.obj `if test -f 'ldap/servers/slapd/house.c'; then $(CYGPATH_W) 'ldap/servers/slapd/house.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/house.c'; fi` + +ldap/servers/slapd/ns_slapd-init.o: ldap/servers/slapd/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-init.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-init.Tpo -c -o ldap/servers/slapd/ns_slapd-init.o `test -f 'ldap/servers/slapd/init.c' || echo '$(srcdir)/'`ldap/servers/slapd/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-init.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/init.c' object='ldap/servers/slapd/ns_slapd-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-init.o `test -f 'ldap/servers/slapd/init.c' || echo '$(srcdir)/'`ldap/servers/slapd/init.c + +ldap/servers/slapd/ns_slapd-init.obj: ldap/servers/slapd/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-init.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-init.Tpo -c -o ldap/servers/slapd/ns_slapd-init.obj `if test -f 'ldap/servers/slapd/init.c'; then $(CYGPATH_W) 'ldap/servers/slapd/init.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-init.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/init.c' object='ldap/servers/slapd/ns_slapd-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-init.obj `if test -f 'ldap/servers/slapd/init.c'; then $(CYGPATH_W) 'ldap/servers/slapd/init.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/init.c'; fi` + +ldap/servers/slapd/ns_slapd-main.o: ldap/servers/slapd/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-main.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-main.Tpo -c -o ldap/servers/slapd/ns_slapd-main.o `test -f 'ldap/servers/slapd/main.c' || echo '$(srcdir)/'`ldap/servers/slapd/main.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-main.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/main.c' object='ldap/servers/slapd/ns_slapd-main.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-main.o `test -f 'ldap/servers/slapd/main.c' || echo '$(srcdir)/'`ldap/servers/slapd/main.c + +ldap/servers/slapd/ns_slapd-main.obj: ldap/servers/slapd/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-main.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-main.Tpo -c -o ldap/servers/slapd/ns_slapd-main.obj `if test -f 'ldap/servers/slapd/main.c'; then $(CYGPATH_W) 'ldap/servers/slapd/main.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/main.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-main.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/main.c' object='ldap/servers/slapd/ns_slapd-main.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-main.obj `if test -f 'ldap/servers/slapd/main.c'; then $(CYGPATH_W) 'ldap/servers/slapd/main.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/main.c'; fi` + +ldap/servers/slapd/ns_slapd-monitor.o: ldap/servers/slapd/monitor.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-monitor.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-monitor.Tpo -c -o ldap/servers/slapd/ns_slapd-monitor.o `test -f 'ldap/servers/slapd/monitor.c' || echo '$(srcdir)/'`ldap/servers/slapd/monitor.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-monitor.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-monitor.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/monitor.c' object='ldap/servers/slapd/ns_slapd-monitor.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-monitor.o `test -f 'ldap/servers/slapd/monitor.c' || echo '$(srcdir)/'`ldap/servers/slapd/monitor.c + +ldap/servers/slapd/ns_slapd-monitor.obj: ldap/servers/slapd/monitor.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-monitor.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-monitor.Tpo -c -o ldap/servers/slapd/ns_slapd-monitor.obj `if test -f 'ldap/servers/slapd/monitor.c'; then $(CYGPATH_W) 'ldap/servers/slapd/monitor.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/monitor.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-monitor.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-monitor.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/monitor.c' object='ldap/servers/slapd/ns_slapd-monitor.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-monitor.obj `if test -f 'ldap/servers/slapd/monitor.c'; then $(CYGPATH_W) 'ldap/servers/slapd/monitor.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/monitor.c'; fi` + +ldap/servers/slapd/ns_slapd-passwd_extop.o: ldap/servers/slapd/passwd_extop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-passwd_extop.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-passwd_extop.Tpo -c -o ldap/servers/slapd/ns_slapd-passwd_extop.o `test -f 'ldap/servers/slapd/passwd_extop.c' || echo '$(srcdir)/'`ldap/servers/slapd/passwd_extop.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-passwd_extop.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-passwd_extop.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/passwd_extop.c' object='ldap/servers/slapd/ns_slapd-passwd_extop.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-passwd_extop.o `test -f 'ldap/servers/slapd/passwd_extop.c' || echo '$(srcdir)/'`ldap/servers/slapd/passwd_extop.c + +ldap/servers/slapd/ns_slapd-passwd_extop.obj: ldap/servers/slapd/passwd_extop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-passwd_extop.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-passwd_extop.Tpo -c -o ldap/servers/slapd/ns_slapd-passwd_extop.obj `if test -f 'ldap/servers/slapd/passwd_extop.c'; then $(CYGPATH_W) 'ldap/servers/slapd/passwd_extop.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/passwd_extop.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-passwd_extop.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-passwd_extop.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/passwd_extop.c' object='ldap/servers/slapd/ns_slapd-passwd_extop.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-passwd_extop.obj `if test -f 'ldap/servers/slapd/passwd_extop.c'; then $(CYGPATH_W) 'ldap/servers/slapd/passwd_extop.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/passwd_extop.c'; fi` + +ldap/servers/slapd/ns_slapd-psearch.o: ldap/servers/slapd/psearch.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-psearch.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-psearch.Tpo -c -o ldap/servers/slapd/ns_slapd-psearch.o `test -f 'ldap/servers/slapd/psearch.c' || echo '$(srcdir)/'`ldap/servers/slapd/psearch.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-psearch.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-psearch.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/psearch.c' object='ldap/servers/slapd/ns_slapd-psearch.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-psearch.o `test -f 'ldap/servers/slapd/psearch.c' || echo '$(srcdir)/'`ldap/servers/slapd/psearch.c + +ldap/servers/slapd/ns_slapd-psearch.obj: ldap/servers/slapd/psearch.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-psearch.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-psearch.Tpo -c -o ldap/servers/slapd/ns_slapd-psearch.obj `if test -f 'ldap/servers/slapd/psearch.c'; then $(CYGPATH_W) 'ldap/servers/slapd/psearch.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/psearch.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-psearch.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-psearch.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/psearch.c' object='ldap/servers/slapd/ns_slapd-psearch.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-psearch.obj `if test -f 'ldap/servers/slapd/psearch.c'; then $(CYGPATH_W) 'ldap/servers/slapd/psearch.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/psearch.c'; fi` + +ldap/servers/slapd/ns_slapd-pw_mgmt.o: ldap/servers/slapd/pw_mgmt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-pw_mgmt.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-pw_mgmt.Tpo -c -o ldap/servers/slapd/ns_slapd-pw_mgmt.o `test -f 'ldap/servers/slapd/pw_mgmt.c' || echo '$(srcdir)/'`ldap/servers/slapd/pw_mgmt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-pw_mgmt.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-pw_mgmt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/pw_mgmt.c' object='ldap/servers/slapd/ns_slapd-pw_mgmt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-pw_mgmt.o `test -f 'ldap/servers/slapd/pw_mgmt.c' || echo '$(srcdir)/'`ldap/servers/slapd/pw_mgmt.c + +ldap/servers/slapd/ns_slapd-pw_mgmt.obj: ldap/servers/slapd/pw_mgmt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-pw_mgmt.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-pw_mgmt.Tpo -c -o ldap/servers/slapd/ns_slapd-pw_mgmt.obj `if test -f 'ldap/servers/slapd/pw_mgmt.c'; then $(CYGPATH_W) 'ldap/servers/slapd/pw_mgmt.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/pw_mgmt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-pw_mgmt.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-pw_mgmt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/pw_mgmt.c' object='ldap/servers/slapd/ns_slapd-pw_mgmt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-pw_mgmt.obj `if test -f 'ldap/servers/slapd/pw_mgmt.c'; then $(CYGPATH_W) 'ldap/servers/slapd/pw_mgmt.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/pw_mgmt.c'; fi` + +ldap/servers/slapd/ns_slapd-rootdse.o: ldap/servers/slapd/rootdse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-rootdse.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-rootdse.Tpo -c -o ldap/servers/slapd/ns_slapd-rootdse.o `test -f 'ldap/servers/slapd/rootdse.c' || echo '$(srcdir)/'`ldap/servers/slapd/rootdse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-rootdse.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-rootdse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/rootdse.c' object='ldap/servers/slapd/ns_slapd-rootdse.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-rootdse.o `test -f 'ldap/servers/slapd/rootdse.c' || echo '$(srcdir)/'`ldap/servers/slapd/rootdse.c + +ldap/servers/slapd/ns_slapd-rootdse.obj: ldap/servers/slapd/rootdse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-rootdse.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-rootdse.Tpo -c -o ldap/servers/slapd/ns_slapd-rootdse.obj `if test -f 'ldap/servers/slapd/rootdse.c'; then $(CYGPATH_W) 'ldap/servers/slapd/rootdse.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/rootdse.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-rootdse.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-rootdse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/rootdse.c' object='ldap/servers/slapd/ns_slapd-rootdse.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-rootdse.obj `if test -f 'ldap/servers/slapd/rootdse.c'; then $(CYGPATH_W) 'ldap/servers/slapd/rootdse.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/rootdse.c'; fi` + +ldap/servers/slapd/ns_slapd-sasl_io.o: ldap/servers/slapd/sasl_io.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-sasl_io.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-sasl_io.Tpo -c -o ldap/servers/slapd/ns_slapd-sasl_io.o `test -f 'ldap/servers/slapd/sasl_io.c' || echo '$(srcdir)/'`ldap/servers/slapd/sasl_io.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-sasl_io.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-sasl_io.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/sasl_io.c' object='ldap/servers/slapd/ns_slapd-sasl_io.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-sasl_io.o `test -f 'ldap/servers/slapd/sasl_io.c' || echo '$(srcdir)/'`ldap/servers/slapd/sasl_io.c + +ldap/servers/slapd/ns_slapd-sasl_io.obj: ldap/servers/slapd/sasl_io.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-sasl_io.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-sasl_io.Tpo -c -o ldap/servers/slapd/ns_slapd-sasl_io.obj `if test -f 'ldap/servers/slapd/sasl_io.c'; then $(CYGPATH_W) 'ldap/servers/slapd/sasl_io.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/sasl_io.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-sasl_io.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-sasl_io.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/sasl_io.c' object='ldap/servers/slapd/ns_slapd-sasl_io.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-sasl_io.obj `if test -f 'ldap/servers/slapd/sasl_io.c'; then $(CYGPATH_W) 'ldap/servers/slapd/sasl_io.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/sasl_io.c'; fi` + +ldap/servers/slapd/ns_slapd-saslbind.o: ldap/servers/slapd/saslbind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-saslbind.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-saslbind.Tpo -c -o ldap/servers/slapd/ns_slapd-saslbind.o `test -f 'ldap/servers/slapd/saslbind.c' || echo '$(srcdir)/'`ldap/servers/slapd/saslbind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-saslbind.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-saslbind.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/saslbind.c' object='ldap/servers/slapd/ns_slapd-saslbind.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-saslbind.o `test -f 'ldap/servers/slapd/saslbind.c' || echo '$(srcdir)/'`ldap/servers/slapd/saslbind.c + +ldap/servers/slapd/ns_slapd-saslbind.obj: ldap/servers/slapd/saslbind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-saslbind.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-saslbind.Tpo -c -o ldap/servers/slapd/ns_slapd-saslbind.obj `if test -f 'ldap/servers/slapd/saslbind.c'; then $(CYGPATH_W) 'ldap/servers/slapd/saslbind.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/saslbind.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-saslbind.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-saslbind.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/saslbind.c' object='ldap/servers/slapd/ns_slapd-saslbind.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-saslbind.obj `if test -f 'ldap/servers/slapd/saslbind.c'; then $(CYGPATH_W) 'ldap/servers/slapd/saslbind.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/saslbind.c'; fi` + +ldap/servers/slapd/ns_slapd-search.o: ldap/servers/slapd/search.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-search.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-search.Tpo -c -o ldap/servers/slapd/ns_slapd-search.o `test -f 'ldap/servers/slapd/search.c' || echo '$(srcdir)/'`ldap/servers/slapd/search.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-search.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-search.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/search.c' object='ldap/servers/slapd/ns_slapd-search.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-search.o `test -f 'ldap/servers/slapd/search.c' || echo '$(srcdir)/'`ldap/servers/slapd/search.c + +ldap/servers/slapd/ns_slapd-search.obj: ldap/servers/slapd/search.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-search.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-search.Tpo -c -o ldap/servers/slapd/ns_slapd-search.obj `if test -f 'ldap/servers/slapd/search.c'; then $(CYGPATH_W) 'ldap/servers/slapd/search.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/search.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-search.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-search.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/search.c' object='ldap/servers/slapd/ns_slapd-search.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-search.obj `if test -f 'ldap/servers/slapd/search.c'; then $(CYGPATH_W) 'ldap/servers/slapd/search.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/search.c'; fi` + +ldap/servers/slapd/ns_slapd-start_tls_extop.o: ldap/servers/slapd/start_tls_extop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-start_tls_extop.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-start_tls_extop.Tpo -c -o ldap/servers/slapd/ns_slapd-start_tls_extop.o `test -f 'ldap/servers/slapd/start_tls_extop.c' || echo '$(srcdir)/'`ldap/servers/slapd/start_tls_extop.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-start_tls_extop.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-start_tls_extop.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/start_tls_extop.c' object='ldap/servers/slapd/ns_slapd-start_tls_extop.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-start_tls_extop.o `test -f 'ldap/servers/slapd/start_tls_extop.c' || echo '$(srcdir)/'`ldap/servers/slapd/start_tls_extop.c + +ldap/servers/slapd/ns_slapd-start_tls_extop.obj: ldap/servers/slapd/start_tls_extop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-start_tls_extop.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-start_tls_extop.Tpo -c -o ldap/servers/slapd/ns_slapd-start_tls_extop.obj `if test -f 'ldap/servers/slapd/start_tls_extop.c'; then $(CYGPATH_W) 'ldap/servers/slapd/start_tls_extop.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/start_tls_extop.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-start_tls_extop.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-start_tls_extop.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/start_tls_extop.c' object='ldap/servers/slapd/ns_slapd-start_tls_extop.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-start_tls_extop.obj `if test -f 'ldap/servers/slapd/start_tls_extop.c'; then $(CYGPATH_W) 'ldap/servers/slapd/start_tls_extop.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/start_tls_extop.c'; fi` + +ldap/servers/slapd/ns_slapd-strdup.o: ldap/servers/slapd/strdup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-strdup.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-strdup.Tpo -c -o ldap/servers/slapd/ns_slapd-strdup.o `test -f 'ldap/servers/slapd/strdup.c' || echo '$(srcdir)/'`ldap/servers/slapd/strdup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-strdup.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-strdup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/strdup.c' object='ldap/servers/slapd/ns_slapd-strdup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-strdup.o `test -f 'ldap/servers/slapd/strdup.c' || echo '$(srcdir)/'`ldap/servers/slapd/strdup.c + +ldap/servers/slapd/ns_slapd-strdup.obj: ldap/servers/slapd/strdup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-strdup.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-strdup.Tpo -c -o ldap/servers/slapd/ns_slapd-strdup.obj `if test -f 'ldap/servers/slapd/strdup.c'; then $(CYGPATH_W) 'ldap/servers/slapd/strdup.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/strdup.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-strdup.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-strdup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/strdup.c' object='ldap/servers/slapd/ns_slapd-strdup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-strdup.obj `if test -f 'ldap/servers/slapd/strdup.c'; then $(CYGPATH_W) 'ldap/servers/slapd/strdup.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/strdup.c'; fi` + +ldap/servers/slapd/ns_slapd-stubs.o: ldap/servers/slapd/stubs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-stubs.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-stubs.Tpo -c -o ldap/servers/slapd/ns_slapd-stubs.o `test -f 'ldap/servers/slapd/stubs.c' || echo '$(srcdir)/'`ldap/servers/slapd/stubs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-stubs.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-stubs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/stubs.c' object='ldap/servers/slapd/ns_slapd-stubs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-stubs.o `test -f 'ldap/servers/slapd/stubs.c' || echo '$(srcdir)/'`ldap/servers/slapd/stubs.c + +ldap/servers/slapd/ns_slapd-stubs.obj: ldap/servers/slapd/stubs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-stubs.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-stubs.Tpo -c -o ldap/servers/slapd/ns_slapd-stubs.obj `if test -f 'ldap/servers/slapd/stubs.c'; then $(CYGPATH_W) 'ldap/servers/slapd/stubs.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/stubs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-stubs.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-stubs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/stubs.c' object='ldap/servers/slapd/ns_slapd-stubs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-stubs.obj `if test -f 'ldap/servers/slapd/stubs.c'; then $(CYGPATH_W) 'ldap/servers/slapd/stubs.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/stubs.c'; fi` + +ldap/servers/slapd/ns_slapd-tempnam.o: ldap/servers/slapd/tempnam.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-tempnam.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-tempnam.Tpo -c -o ldap/servers/slapd/ns_slapd-tempnam.o `test -f 'ldap/servers/slapd/tempnam.c' || echo '$(srcdir)/'`ldap/servers/slapd/tempnam.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-tempnam.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-tempnam.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tempnam.c' object='ldap/servers/slapd/ns_slapd-tempnam.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-tempnam.o `test -f 'ldap/servers/slapd/tempnam.c' || echo '$(srcdir)/'`ldap/servers/slapd/tempnam.c + +ldap/servers/slapd/ns_slapd-tempnam.obj: ldap/servers/slapd/tempnam.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-tempnam.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-tempnam.Tpo -c -o ldap/servers/slapd/ns_slapd-tempnam.obj `if test -f 'ldap/servers/slapd/tempnam.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tempnam.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tempnam.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-tempnam.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-tempnam.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tempnam.c' object='ldap/servers/slapd/ns_slapd-tempnam.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-tempnam.obj `if test -f 'ldap/servers/slapd/tempnam.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tempnam.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tempnam.c'; fi` + +ldap/servers/slapd/ns_slapd-unbind.o: ldap/servers/slapd/unbind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-unbind.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-unbind.Tpo -c -o ldap/servers/slapd/ns_slapd-unbind.o `test -f 'ldap/servers/slapd/unbind.c' || echo '$(srcdir)/'`ldap/servers/slapd/unbind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-unbind.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-unbind.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/unbind.c' object='ldap/servers/slapd/ns_slapd-unbind.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-unbind.o `test -f 'ldap/servers/slapd/unbind.c' || echo '$(srcdir)/'`ldap/servers/slapd/unbind.c + +ldap/servers/slapd/ns_slapd-unbind.obj: ldap/servers/slapd/unbind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-unbind.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-unbind.Tpo -c -o ldap/servers/slapd/ns_slapd-unbind.obj `if test -f 'ldap/servers/slapd/unbind.c'; then $(CYGPATH_W) 'ldap/servers/slapd/unbind.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/unbind.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-unbind.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-unbind.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/unbind.c' object='ldap/servers/slapd/ns_slapd-unbind.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-unbind.obj `if test -f 'ldap/servers/slapd/unbind.c'; then $(CYGPATH_W) 'ldap/servers/slapd/unbind.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/unbind.c'; fi` + +ldap/servers/slapd/ns_slapd-getsocketpeer.o: ldap/servers/slapd/getsocketpeer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-getsocketpeer.o -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-getsocketpeer.Tpo -c -o ldap/servers/slapd/ns_slapd-getsocketpeer.o `test -f 'ldap/servers/slapd/getsocketpeer.c' || echo '$(srcdir)/'`ldap/servers/slapd/getsocketpeer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-getsocketpeer.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-getsocketpeer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/getsocketpeer.c' object='ldap/servers/slapd/ns_slapd-getsocketpeer.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-getsocketpeer.o `test -f 'ldap/servers/slapd/getsocketpeer.c' || echo '$(srcdir)/'`ldap/servers/slapd/getsocketpeer.c + +ldap/servers/slapd/ns_slapd-getsocketpeer.obj: ldap/servers/slapd/getsocketpeer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/ns_slapd-getsocketpeer.obj -MD -MP -MF ldap/servers/slapd/$(DEPDIR)/ns_slapd-getsocketpeer.Tpo -c -o ldap/servers/slapd/ns_slapd-getsocketpeer.obj `if test -f 'ldap/servers/slapd/getsocketpeer.c'; then $(CYGPATH_W) 'ldap/servers/slapd/getsocketpeer.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/getsocketpeer.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/$(DEPDIR)/ns_slapd-getsocketpeer.Tpo ldap/servers/slapd/$(DEPDIR)/ns_slapd-getsocketpeer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/getsocketpeer.c' object='ldap/servers/slapd/ns_slapd-getsocketpeer.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ns_slapd_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/ns_slapd-getsocketpeer.obj `if test -f 'ldap/servers/slapd/getsocketpeer.c'; then $(CYGPATH_W) 'ldap/servers/slapd/getsocketpeer.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/getsocketpeer.c'; fi` + +ldap/servers/slapd/tools/pwdhash_bin-pwenc.o: ldap/servers/slapd/tools/pwenc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pwdhash_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/pwdhash_bin-pwenc.o -MD -MP -MF ldap/servers/slapd/tools/$(DEPDIR)/pwdhash_bin-pwenc.Tpo -c -o ldap/servers/slapd/tools/pwdhash_bin-pwenc.o `test -f 'ldap/servers/slapd/tools/pwenc.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/pwenc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/$(DEPDIR)/pwdhash_bin-pwenc.Tpo ldap/servers/slapd/tools/$(DEPDIR)/pwdhash_bin-pwenc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/pwenc.c' object='ldap/servers/slapd/tools/pwdhash_bin-pwenc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pwdhash_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/pwdhash_bin-pwenc.o `test -f 'ldap/servers/slapd/tools/pwenc.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/pwenc.c + +ldap/servers/slapd/tools/pwdhash_bin-pwenc.obj: ldap/servers/slapd/tools/pwenc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pwdhash_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/pwdhash_bin-pwenc.obj -MD -MP -MF ldap/servers/slapd/tools/$(DEPDIR)/pwdhash_bin-pwenc.Tpo -c -o ldap/servers/slapd/tools/pwdhash_bin-pwenc.obj `if test -f 'ldap/servers/slapd/tools/pwenc.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/pwenc.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/pwenc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/$(DEPDIR)/pwdhash_bin-pwenc.Tpo ldap/servers/slapd/tools/$(DEPDIR)/pwdhash_bin-pwenc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/pwenc.c' object='ldap/servers/slapd/tools/pwdhash_bin-pwenc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pwdhash_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/pwdhash_bin-pwenc.obj `if test -f 'ldap/servers/slapd/tools/pwenc.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/pwenc.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/pwenc.c'; fi` + +ldap/servers/slapd/tools/rsearch/rsearch_bin-nametable.o: ldap/servers/slapd/tools/rsearch/nametable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/rsearch_bin-nametable.o -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-nametable.Tpo -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-nametable.o `test -f 'ldap/servers/slapd/tools/rsearch/nametable.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/nametable.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-nametable.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-nametable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/nametable.c' object='ldap/servers/slapd/tools/rsearch/rsearch_bin-nametable.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-nametable.o `test -f 'ldap/servers/slapd/tools/rsearch/nametable.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/nametable.c + +ldap/servers/slapd/tools/rsearch/rsearch_bin-nametable.obj: ldap/servers/slapd/tools/rsearch/nametable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/rsearch_bin-nametable.obj -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-nametable.Tpo -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-nametable.obj `if test -f 'ldap/servers/slapd/tools/rsearch/nametable.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/nametable.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/nametable.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-nametable.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-nametable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/nametable.c' object='ldap/servers/slapd/tools/rsearch/rsearch_bin-nametable.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-nametable.obj `if test -f 'ldap/servers/slapd/tools/rsearch/nametable.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/nametable.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/nametable.c'; fi` + +ldap/servers/slapd/tools/rsearch/rsearch_bin-rsearch.o: ldap/servers/slapd/tools/rsearch/rsearch.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/rsearch_bin-rsearch.o -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-rsearch.Tpo -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-rsearch.o `test -f 'ldap/servers/slapd/tools/rsearch/rsearch.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/rsearch.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-rsearch.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-rsearch.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/rsearch.c' object='ldap/servers/slapd/tools/rsearch/rsearch_bin-rsearch.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-rsearch.o `test -f 'ldap/servers/slapd/tools/rsearch/rsearch.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/rsearch.c + +ldap/servers/slapd/tools/rsearch/rsearch_bin-rsearch.obj: ldap/servers/slapd/tools/rsearch/rsearch.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/rsearch_bin-rsearch.obj -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-rsearch.Tpo -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-rsearch.obj `if test -f 'ldap/servers/slapd/tools/rsearch/rsearch.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/rsearch.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/rsearch.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-rsearch.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-rsearch.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/rsearch.c' object='ldap/servers/slapd/tools/rsearch/rsearch_bin-rsearch.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-rsearch.obj `if test -f 'ldap/servers/slapd/tools/rsearch/rsearch.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/rsearch.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/rsearch.c'; fi` + +ldap/servers/slapd/tools/rsearch/rsearch_bin-sdattable.o: ldap/servers/slapd/tools/rsearch/sdattable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/rsearch_bin-sdattable.o -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-sdattable.Tpo -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-sdattable.o `test -f 'ldap/servers/slapd/tools/rsearch/sdattable.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/sdattable.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-sdattable.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-sdattable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/sdattable.c' object='ldap/servers/slapd/tools/rsearch/rsearch_bin-sdattable.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-sdattable.o `test -f 'ldap/servers/slapd/tools/rsearch/sdattable.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/sdattable.c + +ldap/servers/slapd/tools/rsearch/rsearch_bin-sdattable.obj: ldap/servers/slapd/tools/rsearch/sdattable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/rsearch_bin-sdattable.obj -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-sdattable.Tpo -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-sdattable.obj `if test -f 'ldap/servers/slapd/tools/rsearch/sdattable.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/sdattable.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/sdattable.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-sdattable.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-sdattable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/sdattable.c' object='ldap/servers/slapd/tools/rsearch/rsearch_bin-sdattable.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-sdattable.obj `if test -f 'ldap/servers/slapd/tools/rsearch/sdattable.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/sdattable.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/sdattable.c'; fi` + +ldap/servers/slapd/tools/rsearch/rsearch_bin-searchthread.o: ldap/servers/slapd/tools/rsearch/searchthread.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/rsearch_bin-searchthread.o -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-searchthread.Tpo -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-searchthread.o `test -f 'ldap/servers/slapd/tools/rsearch/searchthread.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/searchthread.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-searchthread.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-searchthread.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/searchthread.c' object='ldap/servers/slapd/tools/rsearch/rsearch_bin-searchthread.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-searchthread.o `test -f 'ldap/servers/slapd/tools/rsearch/searchthread.c' || echo '$(srcdir)/'`ldap/servers/slapd/tools/rsearch/searchthread.c + +ldap/servers/slapd/tools/rsearch/rsearch_bin-searchthread.obj: ldap/servers/slapd/tools/rsearch/searchthread.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/tools/rsearch/rsearch_bin-searchthread.obj -MD -MP -MF ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-searchthread.Tpo -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-searchthread.obj `if test -f 'ldap/servers/slapd/tools/rsearch/searchthread.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/searchthread.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/searchthread.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-searchthread.Tpo ldap/servers/slapd/tools/rsearch/$(DEPDIR)/rsearch_bin-searchthread.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ldap/servers/slapd/tools/rsearch/searchthread.c' object='ldap/servers/slapd/tools/rsearch/rsearch_bin-searchthread.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rsearch_bin_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/tools/rsearch/rsearch_bin-searchthread.obj `if test -f 'ldap/servers/slapd/tools/rsearch/searchthread.c'; then $(CYGPATH_W) 'ldap/servers/slapd/tools/rsearch/searchthread.c'; else $(CYGPATH_W) '$(srcdir)/ldap/servers/slapd/tools/rsearch/searchthread.c'; fi` + +.cpp.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< + +lib/libaccess/libns_dshttpd_la-access_plhash.lo: lib/libaccess/access_plhash.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-access_plhash.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-access_plhash.Tpo -c -o lib/libaccess/libns_dshttpd_la-access_plhash.lo `test -f 'lib/libaccess/access_plhash.cpp' || echo '$(srcdir)/'`lib/libaccess/access_plhash.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-access_plhash.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-access_plhash.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/access_plhash.cpp' object='lib/libaccess/libns_dshttpd_la-access_plhash.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-access_plhash.lo `test -f 'lib/libaccess/access_plhash.cpp' || echo '$(srcdir)/'`lib/libaccess/access_plhash.cpp + +lib/libaccess/libns_dshttpd_la-acl.tab.lo: lib/libaccess/acl.tab.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-acl.tab.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acl.tab.Tpo -c -o lib/libaccess/libns_dshttpd_la-acl.tab.lo `test -f 'lib/libaccess/acl.tab.cpp' || echo '$(srcdir)/'`lib/libaccess/acl.tab.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acl.tab.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acl.tab.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/acl.tab.cpp' object='lib/libaccess/libns_dshttpd_la-acl.tab.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-acl.tab.lo `test -f 'lib/libaccess/acl.tab.cpp' || echo '$(srcdir)/'`lib/libaccess/acl.tab.cpp + +lib/libaccess/libns_dshttpd_la-acl.yy.lo: lib/libaccess/acl.yy.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-acl.yy.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acl.yy.Tpo -c -o lib/libaccess/libns_dshttpd_la-acl.yy.lo `test -f 'lib/libaccess/acl.yy.cpp' || echo '$(srcdir)/'`lib/libaccess/acl.yy.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acl.yy.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acl.yy.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/acl.yy.cpp' object='lib/libaccess/libns_dshttpd_la-acl.yy.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-acl.yy.lo `test -f 'lib/libaccess/acl.yy.cpp' || echo '$(srcdir)/'`lib/libaccess/acl.yy.cpp + +lib/libaccess/libns_dshttpd_la-aclcache.lo: lib/libaccess/aclcache.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-aclcache.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclcache.Tpo -c -o lib/libaccess/libns_dshttpd_la-aclcache.lo `test -f 'lib/libaccess/aclcache.cpp' || echo '$(srcdir)/'`lib/libaccess/aclcache.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclcache.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclcache.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/aclcache.cpp' object='lib/libaccess/libns_dshttpd_la-aclcache.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-aclcache.lo `test -f 'lib/libaccess/aclcache.cpp' || echo '$(srcdir)/'`lib/libaccess/aclcache.cpp + +lib/libaccess/libns_dshttpd_la-aclerror.lo: lib/libaccess/aclerror.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-aclerror.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclerror.Tpo -c -o lib/libaccess/libns_dshttpd_la-aclerror.lo `test -f 'lib/libaccess/aclerror.cpp' || echo '$(srcdir)/'`lib/libaccess/aclerror.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclerror.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclerror.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/aclerror.cpp' object='lib/libaccess/libns_dshttpd_la-aclerror.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-aclerror.lo `test -f 'lib/libaccess/aclerror.cpp' || echo '$(srcdir)/'`lib/libaccess/aclerror.cpp + +lib/libaccess/libns_dshttpd_la-acleval.lo: lib/libaccess/acleval.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-acleval.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acleval.Tpo -c -o lib/libaccess/libns_dshttpd_la-acleval.lo `test -f 'lib/libaccess/acleval.cpp' || echo '$(srcdir)/'`lib/libaccess/acleval.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acleval.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acleval.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/acleval.cpp' object='lib/libaccess/libns_dshttpd_la-acleval.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-acleval.lo `test -f 'lib/libaccess/acleval.cpp' || echo '$(srcdir)/'`lib/libaccess/acleval.cpp + +lib/libaccess/libns_dshttpd_la-aclflush.lo: lib/libaccess/aclflush.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-aclflush.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclflush.Tpo -c -o lib/libaccess/libns_dshttpd_la-aclflush.lo `test -f 'lib/libaccess/aclflush.cpp' || echo '$(srcdir)/'`lib/libaccess/aclflush.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclflush.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclflush.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/aclflush.cpp' object='lib/libaccess/libns_dshttpd_la-aclflush.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-aclflush.lo `test -f 'lib/libaccess/aclflush.cpp' || echo '$(srcdir)/'`lib/libaccess/aclflush.cpp + +lib/libaccess/libns_dshttpd_la-aclspace.lo: lib/libaccess/aclspace.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-aclspace.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclspace.Tpo -c -o lib/libaccess/libns_dshttpd_la-aclspace.lo `test -f 'lib/libaccess/aclspace.cpp' || echo '$(srcdir)/'`lib/libaccess/aclspace.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclspace.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclspace.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/aclspace.cpp' object='lib/libaccess/libns_dshttpd_la-aclspace.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-aclspace.lo `test -f 'lib/libaccess/aclspace.cpp' || echo '$(srcdir)/'`lib/libaccess/aclspace.cpp + +lib/libaccess/libns_dshttpd_la-acltools.lo: lib/libaccess/acltools.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-acltools.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acltools.Tpo -c -o lib/libaccess/libns_dshttpd_la-acltools.lo `test -f 'lib/libaccess/acltools.cpp' || echo '$(srcdir)/'`lib/libaccess/acltools.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acltools.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-acltools.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/acltools.cpp' object='lib/libaccess/libns_dshttpd_la-acltools.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-acltools.lo `test -f 'lib/libaccess/acltools.cpp' || echo '$(srcdir)/'`lib/libaccess/acltools.cpp + +lib/libaccess/libns_dshttpd_la-aclutil.lo: lib/libaccess/aclutil.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-aclutil.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclutil.Tpo -c -o lib/libaccess/libns_dshttpd_la-aclutil.lo `test -f 'lib/libaccess/aclutil.cpp' || echo '$(srcdir)/'`lib/libaccess/aclutil.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclutil.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-aclutil.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/aclutil.cpp' object='lib/libaccess/libns_dshttpd_la-aclutil.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-aclutil.lo `test -f 'lib/libaccess/aclutil.cpp' || echo '$(srcdir)/'`lib/libaccess/aclutil.cpp + +lib/libaccess/libns_dshttpd_la-authdb.lo: lib/libaccess/authdb.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-authdb.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-authdb.Tpo -c -o lib/libaccess/libns_dshttpd_la-authdb.lo `test -f 'lib/libaccess/authdb.cpp' || echo '$(srcdir)/'`lib/libaccess/authdb.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-authdb.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-authdb.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/authdb.cpp' object='lib/libaccess/libns_dshttpd_la-authdb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-authdb.lo `test -f 'lib/libaccess/authdb.cpp' || echo '$(srcdir)/'`lib/libaccess/authdb.cpp + +lib/libaccess/libns_dshttpd_la-lasdns.lo: lib/libaccess/lasdns.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-lasdns.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasdns.Tpo -c -o lib/libaccess/libns_dshttpd_la-lasdns.lo `test -f 'lib/libaccess/lasdns.cpp' || echo '$(srcdir)/'`lib/libaccess/lasdns.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasdns.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasdns.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/lasdns.cpp' object='lib/libaccess/libns_dshttpd_la-lasdns.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-lasdns.lo `test -f 'lib/libaccess/lasdns.cpp' || echo '$(srcdir)/'`lib/libaccess/lasdns.cpp + +lib/libaccess/libns_dshttpd_la-lasgroup.lo: lib/libaccess/lasgroup.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-lasgroup.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasgroup.Tpo -c -o lib/libaccess/libns_dshttpd_la-lasgroup.lo `test -f 'lib/libaccess/lasgroup.cpp' || echo '$(srcdir)/'`lib/libaccess/lasgroup.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasgroup.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasgroup.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/lasgroup.cpp' object='lib/libaccess/libns_dshttpd_la-lasgroup.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-lasgroup.lo `test -f 'lib/libaccess/lasgroup.cpp' || echo '$(srcdir)/'`lib/libaccess/lasgroup.cpp + +lib/libaccess/libns_dshttpd_la-lasip.lo: lib/libaccess/lasip.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-lasip.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasip.Tpo -c -o lib/libaccess/libns_dshttpd_la-lasip.lo `test -f 'lib/libaccess/lasip.cpp' || echo '$(srcdir)/'`lib/libaccess/lasip.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasip.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasip.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/lasip.cpp' object='lib/libaccess/libns_dshttpd_la-lasip.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-lasip.lo `test -f 'lib/libaccess/lasip.cpp' || echo '$(srcdir)/'`lib/libaccess/lasip.cpp + +lib/libaccess/libns_dshttpd_la-lastod.lo: lib/libaccess/lastod.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-lastod.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lastod.Tpo -c -o lib/libaccess/libns_dshttpd_la-lastod.lo `test -f 'lib/libaccess/lastod.cpp' || echo '$(srcdir)/'`lib/libaccess/lastod.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lastod.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lastod.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/lastod.cpp' object='lib/libaccess/libns_dshttpd_la-lastod.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-lastod.lo `test -f 'lib/libaccess/lastod.cpp' || echo '$(srcdir)/'`lib/libaccess/lastod.cpp + +lib/libaccess/libns_dshttpd_la-lasuser.lo: lib/libaccess/lasuser.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-lasuser.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasuser.Tpo -c -o lib/libaccess/libns_dshttpd_la-lasuser.lo `test -f 'lib/libaccess/lasuser.cpp' || echo '$(srcdir)/'`lib/libaccess/lasuser.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasuser.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-lasuser.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/lasuser.cpp' object='lib/libaccess/libns_dshttpd_la-lasuser.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-lasuser.lo `test -f 'lib/libaccess/lasuser.cpp' || echo '$(srcdir)/'`lib/libaccess/lasuser.cpp + +lib/libaccess/libns_dshttpd_la-method.lo: lib/libaccess/method.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-method.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-method.Tpo -c -o lib/libaccess/libns_dshttpd_la-method.lo `test -f 'lib/libaccess/method.cpp' || echo '$(srcdir)/'`lib/libaccess/method.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-method.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-method.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/method.cpp' object='lib/libaccess/libns_dshttpd_la-method.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-method.lo `test -f 'lib/libaccess/method.cpp' || echo '$(srcdir)/'`lib/libaccess/method.cpp + +lib/libaccess/libns_dshttpd_la-nseframe.lo: lib/libaccess/nseframe.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-nseframe.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-nseframe.Tpo -c -o lib/libaccess/libns_dshttpd_la-nseframe.lo `test -f 'lib/libaccess/nseframe.cpp' || echo '$(srcdir)/'`lib/libaccess/nseframe.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-nseframe.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-nseframe.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/nseframe.cpp' object='lib/libaccess/libns_dshttpd_la-nseframe.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-nseframe.lo `test -f 'lib/libaccess/nseframe.cpp' || echo '$(srcdir)/'`lib/libaccess/nseframe.cpp + +lib/libaccess/libns_dshttpd_la-nsautherr.lo: lib/libaccess/nsautherr.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-nsautherr.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-nsautherr.Tpo -c -o lib/libaccess/libns_dshttpd_la-nsautherr.lo `test -f 'lib/libaccess/nsautherr.cpp' || echo '$(srcdir)/'`lib/libaccess/nsautherr.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-nsautherr.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-nsautherr.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/nsautherr.cpp' object='lib/libaccess/libns_dshttpd_la-nsautherr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-nsautherr.lo `test -f 'lib/libaccess/nsautherr.cpp' || echo '$(srcdir)/'`lib/libaccess/nsautherr.cpp + +lib/libaccess/libns_dshttpd_la-oneeval.lo: lib/libaccess/oneeval.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-oneeval.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-oneeval.Tpo -c -o lib/libaccess/libns_dshttpd_la-oneeval.lo `test -f 'lib/libaccess/oneeval.cpp' || echo '$(srcdir)/'`lib/libaccess/oneeval.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-oneeval.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-oneeval.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/oneeval.cpp' object='lib/libaccess/libns_dshttpd_la-oneeval.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-oneeval.lo `test -f 'lib/libaccess/oneeval.cpp' || echo '$(srcdir)/'`lib/libaccess/oneeval.cpp + +lib/libaccess/libns_dshttpd_la-register.lo: lib/libaccess/register.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-register.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-register.Tpo -c -o lib/libaccess/libns_dshttpd_la-register.lo `test -f 'lib/libaccess/register.cpp' || echo '$(srcdir)/'`lib/libaccess/register.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-register.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-register.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/register.cpp' object='lib/libaccess/libns_dshttpd_la-register.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-register.lo `test -f 'lib/libaccess/register.cpp' || echo '$(srcdir)/'`lib/libaccess/register.cpp + +lib/libaccess/libns_dshttpd_la-symbols.lo: lib/libaccess/symbols.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-symbols.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-symbols.Tpo -c -o lib/libaccess/libns_dshttpd_la-symbols.lo `test -f 'lib/libaccess/symbols.cpp' || echo '$(srcdir)/'`lib/libaccess/symbols.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-symbols.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-symbols.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/symbols.cpp' object='lib/libaccess/libns_dshttpd_la-symbols.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-symbols.lo `test -f 'lib/libaccess/symbols.cpp' || echo '$(srcdir)/'`lib/libaccess/symbols.cpp + +lib/libaccess/libns_dshttpd_la-usi.lo: lib/libaccess/usi.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-usi.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-usi.Tpo -c -o lib/libaccess/libns_dshttpd_la-usi.lo `test -f 'lib/libaccess/usi.cpp' || echo '$(srcdir)/'`lib/libaccess/usi.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-usi.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-usi.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/usi.cpp' object='lib/libaccess/libns_dshttpd_la-usi.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-usi.lo `test -f 'lib/libaccess/usi.cpp' || echo '$(srcdir)/'`lib/libaccess/usi.cpp + +lib/libaccess/libns_dshttpd_la-usrcache.lo: lib/libaccess/usrcache.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/libaccess/libns_dshttpd_la-usrcache.lo -MD -MP -MF lib/libaccess/$(DEPDIR)/libns_dshttpd_la-usrcache.Tpo -c -o lib/libaccess/libns_dshttpd_la-usrcache.lo `test -f 'lib/libaccess/usrcache.cpp' || echo '$(srcdir)/'`lib/libaccess/usrcache.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/libaccess/$(DEPDIR)/libns_dshttpd_la-usrcache.Tpo lib/libaccess/$(DEPDIR)/libns_dshttpd_la-usrcache.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/libaccess/usrcache.cpp' object='lib/libaccess/libns_dshttpd_la-usrcache.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/libaccess/libns_dshttpd_la-usrcache.lo `test -f 'lib/libaccess/usrcache.cpp' || echo '$(srcdir)/'`lib/libaccess/usrcache.cpp + +lib/base/libns_dshttpd_la-crit.lo: lib/base/crit.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-crit.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-crit.Tpo -c -o lib/base/libns_dshttpd_la-crit.lo `test -f 'lib/base/crit.cpp' || echo '$(srcdir)/'`lib/base/crit.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-crit.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-crit.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/crit.cpp' object='lib/base/libns_dshttpd_la-crit.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-crit.lo `test -f 'lib/base/crit.cpp' || echo '$(srcdir)/'`lib/base/crit.cpp + +lib/base/libns_dshttpd_la-dns.lo: lib/base/dns.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-dns.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-dns.Tpo -c -o lib/base/libns_dshttpd_la-dns.lo `test -f 'lib/base/dns.cpp' || echo '$(srcdir)/'`lib/base/dns.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-dns.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-dns.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/dns.cpp' object='lib/base/libns_dshttpd_la-dns.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-dns.lo `test -f 'lib/base/dns.cpp' || echo '$(srcdir)/'`lib/base/dns.cpp + +lib/base/libns_dshttpd_la-dnsdmain.lo: lib/base/dnsdmain.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-dnsdmain.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-dnsdmain.Tpo -c -o lib/base/libns_dshttpd_la-dnsdmain.lo `test -f 'lib/base/dnsdmain.cpp' || echo '$(srcdir)/'`lib/base/dnsdmain.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-dnsdmain.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-dnsdmain.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/dnsdmain.cpp' object='lib/base/libns_dshttpd_la-dnsdmain.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-dnsdmain.lo `test -f 'lib/base/dnsdmain.cpp' || echo '$(srcdir)/'`lib/base/dnsdmain.cpp + +lib/base/libns_dshttpd_la-ereport.lo: lib/base/ereport.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-ereport.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-ereport.Tpo -c -o lib/base/libns_dshttpd_la-ereport.lo `test -f 'lib/base/ereport.cpp' || echo '$(srcdir)/'`lib/base/ereport.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-ereport.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-ereport.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/ereport.cpp' object='lib/base/libns_dshttpd_la-ereport.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-ereport.lo `test -f 'lib/base/ereport.cpp' || echo '$(srcdir)/'`lib/base/ereport.cpp + +lib/base/libns_dshttpd_la-file.lo: lib/base/file.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-file.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-file.Tpo -c -o lib/base/libns_dshttpd_la-file.lo `test -f 'lib/base/file.cpp' || echo '$(srcdir)/'`lib/base/file.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-file.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-file.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/file.cpp' object='lib/base/libns_dshttpd_la-file.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-file.lo `test -f 'lib/base/file.cpp' || echo '$(srcdir)/'`lib/base/file.cpp + +lib/base/libns_dshttpd_la-fsmutex.lo: lib/base/fsmutex.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-fsmutex.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-fsmutex.Tpo -c -o lib/base/libns_dshttpd_la-fsmutex.lo `test -f 'lib/base/fsmutex.cpp' || echo '$(srcdir)/'`lib/base/fsmutex.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-fsmutex.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-fsmutex.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/fsmutex.cpp' object='lib/base/libns_dshttpd_la-fsmutex.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-fsmutex.lo `test -f 'lib/base/fsmutex.cpp' || echo '$(srcdir)/'`lib/base/fsmutex.cpp + +lib/base/libns_dshttpd_la-net.lo: lib/base/net.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-net.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-net.Tpo -c -o lib/base/libns_dshttpd_la-net.lo `test -f 'lib/base/net.cpp' || echo '$(srcdir)/'`lib/base/net.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-net.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-net.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/net.cpp' object='lib/base/libns_dshttpd_la-net.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-net.lo `test -f 'lib/base/net.cpp' || echo '$(srcdir)/'`lib/base/net.cpp + +lib/base/libns_dshttpd_la-plist.lo: lib/base/plist.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-plist.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-plist.Tpo -c -o lib/base/libns_dshttpd_la-plist.lo `test -f 'lib/base/plist.cpp' || echo '$(srcdir)/'`lib/base/plist.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-plist.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-plist.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/plist.cpp' object='lib/base/libns_dshttpd_la-plist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-plist.lo `test -f 'lib/base/plist.cpp' || echo '$(srcdir)/'`lib/base/plist.cpp + +lib/base/libns_dshttpd_la-pool.lo: lib/base/pool.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-pool.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-pool.Tpo -c -o lib/base/libns_dshttpd_la-pool.lo `test -f 'lib/base/pool.cpp' || echo '$(srcdir)/'`lib/base/pool.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-pool.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-pool.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/pool.cpp' object='lib/base/libns_dshttpd_la-pool.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-pool.lo `test -f 'lib/base/pool.cpp' || echo '$(srcdir)/'`lib/base/pool.cpp + +lib/base/libns_dshttpd_la-shexp.lo: lib/base/shexp.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-shexp.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-shexp.Tpo -c -o lib/base/libns_dshttpd_la-shexp.lo `test -f 'lib/base/shexp.cpp' || echo '$(srcdir)/'`lib/base/shexp.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-shexp.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-shexp.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/shexp.cpp' object='lib/base/libns_dshttpd_la-shexp.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-shexp.lo `test -f 'lib/base/shexp.cpp' || echo '$(srcdir)/'`lib/base/shexp.cpp + +lib/base/libns_dshttpd_la-system.lo: lib/base/system.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-system.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-system.Tpo -c -o lib/base/libns_dshttpd_la-system.lo `test -f 'lib/base/system.cpp' || echo '$(srcdir)/'`lib/base/system.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-system.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-system.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/system.cpp' object='lib/base/libns_dshttpd_la-system.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-system.lo `test -f 'lib/base/system.cpp' || echo '$(srcdir)/'`lib/base/system.cpp + +lib/base/libns_dshttpd_la-systhr.lo: lib/base/systhr.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-systhr.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-systhr.Tpo -c -o lib/base/libns_dshttpd_la-systhr.lo `test -f 'lib/base/systhr.cpp' || echo '$(srcdir)/'`lib/base/systhr.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-systhr.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-systhr.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/systhr.cpp' object='lib/base/libns_dshttpd_la-systhr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-systhr.lo `test -f 'lib/base/systhr.cpp' || echo '$(srcdir)/'`lib/base/systhr.cpp + +lib/base/libns_dshttpd_la-util.lo: lib/base/util.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT lib/base/libns_dshttpd_la-util.lo -MD -MP -MF lib/base/$(DEPDIR)/libns_dshttpd_la-util.Tpo -c -o lib/base/libns_dshttpd_la-util.lo `test -f 'lib/base/util.cpp' || echo '$(srcdir)/'`lib/base/util.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) lib/base/$(DEPDIR)/libns_dshttpd_la-util.Tpo lib/base/$(DEPDIR)/libns_dshttpd_la-util.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='lib/base/util.cpp' object='lib/base/libns_dshttpd_la-util.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libns_dshttpd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o lib/base/libns_dshttpd_la-util.lo `test -f 'lib/base/util.cpp' || echo '$(srcdir)/'`lib/base/util.cpp + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + -rm -rf ldap/libraries/libavl/.libs ldap/libraries/libavl/_libs + -rm -rf ldap/servers/plugins/acct_usability/.libs ldap/servers/plugins/acct_usability/_libs + -rm -rf ldap/servers/plugins/acctpolicy/.libs ldap/servers/plugins/acctpolicy/_libs + -rm -rf ldap/servers/plugins/acl/.libs ldap/servers/plugins/acl/_libs + -rm -rf ldap/servers/plugins/automember/.libs ldap/servers/plugins/automember/_libs + -rm -rf ldap/servers/plugins/bitwise/.libs ldap/servers/plugins/bitwise/_libs + -rm -rf ldap/servers/plugins/chainingdb/.libs ldap/servers/plugins/chainingdb/_libs + -rm -rf ldap/servers/plugins/collation/.libs ldap/servers/plugins/collation/_libs + -rm -rf ldap/servers/plugins/cos/.libs ldap/servers/plugins/cos/_libs + -rm -rf ldap/servers/plugins/deref/.libs ldap/servers/plugins/deref/_libs + -rm -rf ldap/servers/plugins/distrib/.libs ldap/servers/plugins/distrib/_libs + -rm -rf ldap/servers/plugins/dna/.libs ldap/servers/plugins/dna/_libs + -rm -rf ldap/servers/plugins/http/.libs ldap/servers/plugins/http/_libs + -rm -rf ldap/servers/plugins/linkedattrs/.libs ldap/servers/plugins/linkedattrs/_libs + -rm -rf ldap/servers/plugins/memberof/.libs ldap/servers/plugins/memberof/_libs + -rm -rf ldap/servers/plugins/mep/.libs ldap/servers/plugins/mep/_libs + -rm -rf ldap/servers/plugins/pam_passthru/.libs ldap/servers/plugins/pam_passthru/_libs + -rm -rf ldap/servers/plugins/passthru/.libs ldap/servers/plugins/passthru/_libs + -rm -rf ldap/servers/plugins/posix-winsync/.libs ldap/servers/plugins/posix-winsync/_libs + -rm -rf ldap/servers/plugins/presence/.libs ldap/servers/plugins/presence/_libs + -rm -rf ldap/servers/plugins/pwdstorage/.libs ldap/servers/plugins/pwdstorage/_libs + -rm -rf ldap/servers/plugins/referint/.libs ldap/servers/plugins/referint/_libs + -rm -rf ldap/servers/plugins/replication/.libs ldap/servers/plugins/replication/_libs + -rm -rf ldap/servers/plugins/retrocl/.libs ldap/servers/plugins/retrocl/_libs + -rm -rf ldap/servers/plugins/rever/.libs ldap/servers/plugins/rever/_libs + -rm -rf ldap/servers/plugins/roles/.libs ldap/servers/plugins/roles/_libs + -rm -rf ldap/servers/plugins/rootdn_access/.libs ldap/servers/plugins/rootdn_access/_libs + -rm -rf ldap/servers/plugins/schema_reload/.libs ldap/servers/plugins/schema_reload/_libs + -rm -rf ldap/servers/plugins/statechange/.libs ldap/servers/plugins/statechange/_libs + -rm -rf ldap/servers/plugins/sync/.libs ldap/servers/plugins/sync/_libs + -rm -rf ldap/servers/plugins/syntaxes/.libs ldap/servers/plugins/syntaxes/_libs + -rm -rf ldap/servers/plugins/uiduniq/.libs ldap/servers/plugins/uiduniq/_libs + -rm -rf ldap/servers/plugins/usn/.libs ldap/servers/plugins/usn/_libs + -rm -rf ldap/servers/plugins/views/.libs ldap/servers/plugins/views/_libs + -rm -rf ldap/servers/plugins/whoami/.libs ldap/servers/plugins/whoami/_libs + -rm -rf ldap/servers/slapd/.libs ldap/servers/slapd/_libs + -rm -rf ldap/servers/slapd/back-ldbm/.libs ldap/servers/slapd/back-ldbm/_libs + -rm -rf lib/base/.libs lib/base/_libs + -rm -rf lib/ldaputil/.libs lib/ldaputil/_libs + -rm -rf lib/libaccess/.libs lib/libaccess/_libs + -rm -rf lib/libadmin/.libs lib/libadmin/_libs + -rm -rf lib/libsi18n/.libs lib/libsi18n/_libs + +distclean-libtool: + -rm -f libtool config.lt +install-man1: $(dist_man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(dist_man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +install-man8: $(dist_man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(dist_man_MANS)'; \ + test -n "$(man8dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.8[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ + done; } + +uninstall-man8: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man8dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.8[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir) +install-configDATA: $(config_DATA) + @$(NORMAL_INSTALL) + @list='$(config_DATA)'; test -n "$(configdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(configdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(configdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(configdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(configdir)" || exit $$?; \ + done + +uninstall-configDATA: + @$(NORMAL_UNINSTALL) + @list='$(config_DATA)'; test -n "$(configdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(configdir)'; $(am__uninstall_files_from_dir) +install-infDATA: $(inf_DATA) + @$(NORMAL_INSTALL) + @list='$(inf_DATA)'; test -n "$(infdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(infdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(infdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infdir)" || exit $$?; \ + done + +uninstall-infDATA: + @$(NORMAL_UNINSTALL) + @list='$(inf_DATA)'; test -n "$(infdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(infdir)'; $(am__uninstall_files_from_dir) +install-initconfigDATA: $(initconfig_DATA) + @$(NORMAL_INSTALL) + @list='$(initconfig_DATA)'; test -n "$(initconfigdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(initconfigdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(initconfigdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(initconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(initconfigdir)" || exit $$?; \ + done + +uninstall-initconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(initconfig_DATA)'; test -n "$(initconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(initconfigdir)'; $(am__uninstall_files_from_dir) +install-mibDATA: $(mib_DATA) + @$(NORMAL_INSTALL) + @list='$(mib_DATA)'; test -n "$(mibdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(mibdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(mibdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mibdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mibdir)" || exit $$?; \ + done + +uninstall-mibDATA: + @$(NORMAL_UNINSTALL) + @list='$(mib_DATA)'; test -n "$(mibdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mibdir)'; $(am__uninstall_files_from_dir) +install-nodist_propertyDATA: $(nodist_property_DATA) + @$(NORMAL_INSTALL) + @list='$(nodist_property_DATA)'; test -n "$(propertydir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(propertydir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(propertydir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(propertydir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(propertydir)" || exit $$?; \ + done + +uninstall-nodist_propertyDATA: + @$(NORMAL_UNINSTALL) + @list='$(nodist_property_DATA)'; test -n "$(propertydir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(propertydir)'; $(am__uninstall_files_from_dir) +install-perlDATA: $(perl_DATA) + @$(NORMAL_INSTALL) + @list='$(perl_DATA)'; test -n "$(perldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(perldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(perldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(perldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(perldir)" || exit $$?; \ + done + +uninstall-perlDATA: + @$(NORMAL_UNINSTALL) + @list='$(perl_DATA)'; test -n "$(perldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(perldir)'; $(am__uninstall_files_from_dir) +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) +install-propertyDATA: $(property_DATA) + @$(NORMAL_INSTALL) + @list='$(property_DATA)'; test -n "$(propertydir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(propertydir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(propertydir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(propertydir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(propertydir)" || exit $$?; \ + done + +uninstall-propertyDATA: + @$(NORMAL_UNINSTALL) + @list='$(property_DATA)'; test -n "$(propertydir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(propertydir)'; $(am__uninstall_files_from_dir) +install-pythonDATA: $(python_DATA) + @$(NORMAL_INSTALL) + @list='$(python_DATA)'; test -n "$(pythondir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pythondir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pythondir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pythondir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pythondir)" || exit $$?; \ + done + +uninstall-pythonDATA: + @$(NORMAL_UNINSTALL) + @list='$(python_DATA)'; test -n "$(pythondir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pythondir)'; $(am__uninstall_files_from_dir) +install-sampledataDATA: $(sampledata_DATA) + @$(NORMAL_INSTALL) + @list='$(sampledata_DATA)'; test -n "$(sampledatadir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(sampledatadir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(sampledatadir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sampledatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sampledatadir)" || exit $$?; \ + done + +uninstall-sampledataDATA: + @$(NORMAL_UNINSTALL) + @list='$(sampledata_DATA)'; test -n "$(sampledatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(sampledatadir)'; $(am__uninstall_files_from_dir) +install-schemaDATA: $(schema_DATA) + @$(NORMAL_INSTALL) + @list='$(schema_DATA)'; test -n "$(schemadir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(schemadir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(schemadir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(schemadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(schemadir)" || exit $$?; \ + done + +uninstall-schemaDATA: + @$(NORMAL_UNINSTALL) + @list='$(schema_DATA)'; test -n "$(schemadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(schemadir)'; $(am__uninstall_files_from_dir) +install-systemdsystemunitDATA: $(systemdsystemunit_DATA) + @$(NORMAL_INSTALL) + @list='$(systemdsystemunit_DATA)'; test -n "$(systemdsystemunitdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(systemdsystemunitdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(systemdsystemunitdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(systemdsystemunitdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(systemdsystemunitdir)" || exit $$?; \ + done + +uninstall-systemdsystemunitDATA: + @$(NORMAL_UNINSTALL) + @list='$(systemdsystemunit_DATA)'; test -n "$(systemdsystemunitdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(systemdsystemunitdir)'; $(am__uninstall_files_from_dir) +install-updateDATA: $(update_DATA) + @$(NORMAL_INSTALL) + @list='$(update_DATA)'; test -n "$(updatedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(updatedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(updatedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(updatedir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(updatedir)" || exit $$?; \ + done + +uninstall-updateDATA: + @$(NORMAL_UNINSTALL) + @list='$(update_DATA)'; test -n "$(updatedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(updatedir)'; $(am__uninstall_files_from_dir) +install-serverincHEADERS: $(serverinc_HEADERS) + @$(NORMAL_INSTALL) + @list='$(serverinc_HEADERS)'; test -n "$(serverincdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(serverincdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(serverincdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(serverincdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(serverincdir)" || exit $$?; \ + done + +uninstall-serverincHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(serverinc_HEADERS)'; test -n "$(serverincdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(serverincdir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) \ + $(MANS) $(DATA) $(HEADERS) config.h +installdirs: + for dir in "$(DESTDIR)$(serverdir)" "$(DESTDIR)$(serverplugindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(initdir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(taskdir)" "$(DESTDIR)$(updatedir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(configdir)" "$(DESTDIR)$(infdir)" "$(DESTDIR)$(initconfigdir)" "$(DESTDIR)$(mibdir)" "$(DESTDIR)$(propertydir)" "$(DESTDIR)$(perldir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(propertydir)" "$(DESTDIR)$(pythondir)" "$(DESTDIR)$(sampledatadir)" "$(DESTDIR)$(schemadir)" "$(DESTDIR)$(systemdsystemunitdir)" "$(DESTDIR)$(updatedir)" "$(DESTDIR)$(serverincdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f ldap/libraries/libavl/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/libraries/libavl/$(am__dirstamp) + -rm -f ldap/servers/plugins/acct_usability/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/acct_usability/$(am__dirstamp) + -rm -f ldap/servers/plugins/acctpolicy/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/acctpolicy/$(am__dirstamp) + -rm -f ldap/servers/plugins/acl/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/acl/$(am__dirstamp) + -rm -f ldap/servers/plugins/automember/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/automember/$(am__dirstamp) + -rm -f ldap/servers/plugins/bitwise/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/bitwise/$(am__dirstamp) + -rm -f ldap/servers/plugins/chainingdb/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/chainingdb/$(am__dirstamp) + -rm -f ldap/servers/plugins/collation/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/collation/$(am__dirstamp) + -rm -f ldap/servers/plugins/cos/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/cos/$(am__dirstamp) + -rm -f ldap/servers/plugins/deref/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/deref/$(am__dirstamp) + -rm -f ldap/servers/plugins/distrib/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/distrib/$(am__dirstamp) + -rm -f ldap/servers/plugins/dna/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/dna/$(am__dirstamp) + -rm -f ldap/servers/plugins/http/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/http/$(am__dirstamp) + -rm -f ldap/servers/plugins/linkedattrs/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/linkedattrs/$(am__dirstamp) + -rm -f ldap/servers/plugins/memberof/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/memberof/$(am__dirstamp) + -rm -f ldap/servers/plugins/mep/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/mep/$(am__dirstamp) + -rm -f ldap/servers/plugins/pam_passthru/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/pam_passthru/$(am__dirstamp) + -rm -f ldap/servers/plugins/passthru/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/passthru/$(am__dirstamp) + -rm -f ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/posix-winsync/$(am__dirstamp) + -rm -f ldap/servers/plugins/presence/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/presence/$(am__dirstamp) + -rm -f ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/pwdstorage/$(am__dirstamp) + -rm -f ldap/servers/plugins/referint/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/referint/$(am__dirstamp) + -rm -f ldap/servers/plugins/replication/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/replication/$(am__dirstamp) + -rm -f ldap/servers/plugins/retrocl/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/retrocl/$(am__dirstamp) + -rm -f ldap/servers/plugins/rever/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/rever/$(am__dirstamp) + -rm -f ldap/servers/plugins/roles/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/roles/$(am__dirstamp) + -rm -f ldap/servers/plugins/rootdn_access/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/rootdn_access/$(am__dirstamp) + -rm -f ldap/servers/plugins/schema_reload/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/schema_reload/$(am__dirstamp) + -rm -f ldap/servers/plugins/statechange/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/statechange/$(am__dirstamp) + -rm -f ldap/servers/plugins/sync/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/sync/$(am__dirstamp) + -rm -f ldap/servers/plugins/syntaxes/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/syntaxes/$(am__dirstamp) + -rm -f ldap/servers/plugins/uiduniq/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/uiduniq/$(am__dirstamp) + -rm -f ldap/servers/plugins/usn/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/usn/$(am__dirstamp) + -rm -f ldap/servers/plugins/views/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/views/$(am__dirstamp) + -rm -f ldap/servers/plugins/whoami/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/plugins/whoami/$(am__dirstamp) + -rm -f ldap/servers/slapd/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/slapd/$(am__dirstamp) + -rm -f ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/slapd/back-ldbm/$(am__dirstamp) + -rm -f ldap/servers/slapd/tools/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/slapd/tools/$(am__dirstamp) + -rm -f ldap/servers/slapd/tools/ldclt/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/slapd/tools/ldclt/$(am__dirstamp) + -rm -f ldap/servers/slapd/tools/rsearch/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/slapd/tools/rsearch/$(am__dirstamp) + -rm -f ldap/servers/snmp/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/servers/snmp/$(am__dirstamp) + -rm -f ldap/systools/$(DEPDIR)/$(am__dirstamp) + -rm -f ldap/systools/$(am__dirstamp) + -rm -f lib/base/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/base/$(am__dirstamp) + -rm -f lib/ldaputil/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/ldaputil/$(am__dirstamp) + -rm -f lib/libaccess/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/libaccess/$(am__dirstamp) + -rm -f lib/libadmin/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/libadmin/$(am__dirstamp) + -rm -f lib/libsi18n/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/libsi18n/$(am__dirstamp) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \ + clean-noinstLIBRARIES clean-noinstPROGRAMS clean-sbinPROGRAMS \ + clean-serverLTLIBRARIES clean-serverpluginLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ldap/libraries/libavl/$(DEPDIR) ldap/servers/plugins/acct_usability/$(DEPDIR) ldap/servers/plugins/acctpolicy/$(DEPDIR) ldap/servers/plugins/acl/$(DEPDIR) ldap/servers/plugins/automember/$(DEPDIR) ldap/servers/plugins/bitwise/$(DEPDIR) ldap/servers/plugins/chainingdb/$(DEPDIR) ldap/servers/plugins/collation/$(DEPDIR) ldap/servers/plugins/cos/$(DEPDIR) ldap/servers/plugins/deref/$(DEPDIR) ldap/servers/plugins/distrib/$(DEPDIR) ldap/servers/plugins/dna/$(DEPDIR) ldap/servers/plugins/http/$(DEPDIR) ldap/servers/plugins/linkedattrs/$(DEPDIR) ldap/servers/plugins/memberof/$(DEPDIR) ldap/servers/plugins/mep/$(DEPDIR) ldap/servers/plugins/pam_passthru/$(DEPDIR) ldap/servers/plugins/passthru/$(DEPDIR) ldap/servers/plugins/posix-winsync/$(DEPDIR) ldap/servers/plugins/presence/$(DEPDIR) ldap/servers/plugins/pwdstorage/$(DEPDIR) ldap/servers/plugins/referint/$(DEPDIR) ldap/servers/plugins/replication/$(DEPDIR) ldap/servers/plugins/retrocl/$(DEPDIR) ldap/servers/plugins/rever/$(DEPDIR) ldap/servers/plugins/roles/$(DEPDIR) ldap/servers/plugins/rootdn_access/$(DEPDIR) ldap/servers/plugins/schema_reload/$(DEPDIR) ldap/servers/plugins/statechange/$(DEPDIR) ldap/servers/plugins/sync/$(DEPDIR) ldap/servers/plugins/syntaxes/$(DEPDIR) ldap/servers/plugins/uiduniq/$(DEPDIR) ldap/servers/plugins/usn/$(DEPDIR) ldap/servers/plugins/views/$(DEPDIR) ldap/servers/plugins/whoami/$(DEPDIR) ldap/servers/slapd/$(DEPDIR) ldap/servers/slapd/back-ldbm/$(DEPDIR) ldap/servers/slapd/tools/$(DEPDIR) ldap/servers/slapd/tools/ldclt/$(DEPDIR) ldap/servers/slapd/tools/rsearch/$(DEPDIR) ldap/servers/snmp/$(DEPDIR) ldap/systools/$(DEPDIR) lib/base/$(DEPDIR) lib/ldaputil/$(DEPDIR) lib/libaccess/$(DEPDIR) lib/libadmin/$(DEPDIR) lib/libsi18n/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-configDATA install-infDATA \ + install-initSCRIPTS install-initconfigDATA install-man \ + install-mibDATA install-nodist_propertyDATA install-perlDATA \ + install-pkgconfigDATA install-propertyDATA install-pythonDATA \ + install-sampledataDATA install-schemaDATA \ + install-serverLTLIBRARIES install-serverincHEADERS \ + install-serverpluginLTLIBRARIES install-systemdsystemunitDATA \ + install-taskSCRIPTS install-updateDATA install-updateSCRIPTS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-binSCRIPTS \ + install-sbinPROGRAMS install-sbinSCRIPTS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 install-man8 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ldap/libraries/libavl/$(DEPDIR) ldap/servers/plugins/acct_usability/$(DEPDIR) ldap/servers/plugins/acctpolicy/$(DEPDIR) ldap/servers/plugins/acl/$(DEPDIR) ldap/servers/plugins/automember/$(DEPDIR) ldap/servers/plugins/bitwise/$(DEPDIR) ldap/servers/plugins/chainingdb/$(DEPDIR) ldap/servers/plugins/collation/$(DEPDIR) ldap/servers/plugins/cos/$(DEPDIR) ldap/servers/plugins/deref/$(DEPDIR) ldap/servers/plugins/distrib/$(DEPDIR) ldap/servers/plugins/dna/$(DEPDIR) ldap/servers/plugins/http/$(DEPDIR) ldap/servers/plugins/linkedattrs/$(DEPDIR) ldap/servers/plugins/memberof/$(DEPDIR) ldap/servers/plugins/mep/$(DEPDIR) ldap/servers/plugins/pam_passthru/$(DEPDIR) ldap/servers/plugins/passthru/$(DEPDIR) ldap/servers/plugins/posix-winsync/$(DEPDIR) ldap/servers/plugins/presence/$(DEPDIR) ldap/servers/plugins/pwdstorage/$(DEPDIR) ldap/servers/plugins/referint/$(DEPDIR) ldap/servers/plugins/replication/$(DEPDIR) ldap/servers/plugins/retrocl/$(DEPDIR) ldap/servers/plugins/rever/$(DEPDIR) ldap/servers/plugins/roles/$(DEPDIR) ldap/servers/plugins/rootdn_access/$(DEPDIR) ldap/servers/plugins/schema_reload/$(DEPDIR) ldap/servers/plugins/statechange/$(DEPDIR) ldap/servers/plugins/sync/$(DEPDIR) ldap/servers/plugins/syntaxes/$(DEPDIR) ldap/servers/plugins/uiduniq/$(DEPDIR) ldap/servers/plugins/usn/$(DEPDIR) ldap/servers/plugins/views/$(DEPDIR) ldap/servers/plugins/whoami/$(DEPDIR) ldap/servers/slapd/$(DEPDIR) ldap/servers/slapd/back-ldbm/$(DEPDIR) ldap/servers/slapd/tools/$(DEPDIR) ldap/servers/slapd/tools/ldclt/$(DEPDIR) ldap/servers/slapd/tools/rsearch/$(DEPDIR) ldap/servers/snmp/$(DEPDIR) ldap/systools/$(DEPDIR) lib/base/$(DEPDIR) lib/ldaputil/$(DEPDIR) lib/libaccess/$(DEPDIR) lib/libadmin/$(DEPDIR) lib/libsi18n/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ + uninstall-configDATA uninstall-infDATA uninstall-initSCRIPTS \ + uninstall-initconfigDATA uninstall-man uninstall-mibDATA \ + uninstall-nodist_propertyDATA uninstall-perlDATA \ + uninstall-pkgconfigDATA uninstall-propertyDATA \ + uninstall-pythonDATA uninstall-sampledataDATA \ + uninstall-sbinPROGRAMS uninstall-sbinSCRIPTS \ + uninstall-schemaDATA uninstall-serverLTLIBRARIES \ + uninstall-serverincHEADERS uninstall-serverpluginLTLIBRARIES \ + uninstall-systemdsystemunitDATA uninstall-taskSCRIPTS \ + uninstall-updateDATA uninstall-updateSCRIPTS + +uninstall-man: uninstall-man1 uninstall-man8 + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \ + clean-binPROGRAMS clean-cscope clean-generic clean-libtool \ + clean-local clean-noinstLIBRARIES clean-noinstPROGRAMS \ + clean-sbinPROGRAMS clean-serverLTLIBRARIES \ + clean-serverpluginLTLIBRARIES cscope cscopelist-am ctags \ + ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-binSCRIPTS \ + install-configDATA install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-infDATA install-info install-info-am \ + install-initSCRIPTS install-initconfigDATA install-man \ + install-man1 install-man8 install-mibDATA \ + install-nodist_propertyDATA install-pdf install-pdf-am \ + install-perlDATA install-pkgconfigDATA install-propertyDATA \ + install-ps install-ps-am install-pythonDATA \ + install-sampledataDATA install-sbinPROGRAMS \ + install-sbinSCRIPTS install-schemaDATA \ + install-serverLTLIBRARIES install-serverincHEADERS \ + install-serverpluginLTLIBRARIES install-strip \ + install-systemdsystemunitDATA install-taskSCRIPTS \ + install-updateDATA install-updateSCRIPTS installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-binSCRIPTS uninstall-configDATA uninstall-infDATA \ + uninstall-initSCRIPTS uninstall-initconfigDATA uninstall-man \ + uninstall-man1 uninstall-man8 uninstall-mibDATA \ + uninstall-nodist_propertyDATA uninstall-perlDATA \ + uninstall-pkgconfigDATA uninstall-propertyDATA \ + uninstall-pythonDATA uninstall-sampledataDATA \ + uninstall-sbinPROGRAMS uninstall-sbinSCRIPTS \ + uninstall-schemaDATA uninstall-serverLTLIBRARIES \ + uninstall-serverincHEADERS uninstall-serverpluginLTLIBRARIES \ + uninstall-systemdsystemunitDATA uninstall-taskSCRIPTS \ + uninstall-updateDATA uninstall-updateSCRIPTS + +.PRECIOUS: Makefile + + +clean-local: + -rm -rf dist + -rm -rf selinux-built + +dberrstrs.h: Makefile + perl $(srcdir)/ldap/servers/slapd/mkDBErrStrs.pl -i @db_incdir@ -o . + +selinux-built: + cp -r $(srcdir)/selinux $@ + +selinux-built/dirsrv.fc: selinux-built + $(fixupcmd) selinux-built/dirsrv.fc.in > $@ + +#------------------------ +# ns-slapd.properties +#------------------------ +ns-slapd.properties: makstrdb + ./makstrdb + +%: %.in + mkdir -p $(dir $@) + $(fixupcmd) $^ > $@ + +%/$(PACKAGE_NAME): %/initscript.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ + +%/$(PACKAGE_NAME): %/base-initconfig.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi +@SYSTEMD_TRUE@ $(fixupcmd) $^ | sed -e 's/@preamble@/# This file is in systemd EnvironmentFile format - see man systemd.exec/' > $@ +@SYSTEMD_FALSE@ $(fixupcmd) $^ | sed -n -e 's/@preamble@//' -e '/^#/{p;d}' -e '/^$$/{p;d}' -e 's/^\([^=]*\)\(=.*\)$$/\1\2 ; export \1/ ; p' > $@ +@SYSTEMD_FALSE@ $(fixupcmd) $(srcdir)/ldap/admin/src/initconfig.in >> $@ + +%/template-initconfig: %/template-initconfig.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi +@SYSTEMD_TRUE@ $(fixupcmd) $^ | sed -e 's/@preamble@/# This file is in systemd EnvironmentFile format - see man systemd.exec/' > $@ +@SYSTEMD_FALSE@ $(fixupcmd) $^ | sed -n -e 's/@preamble@//' -e '/^#/{p;d}' -e '/^$$/{p;d}' -e 's/^\([^=]*\)\(=.*\)$$/\1\2 ; export \1/ ; p' > $@ + +%/$(PACKAGE_NAME).pc: %/dirsrv.pc.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ + +%/$(PACKAGE_NAME)-snmp: %/ldap-agent-initscript.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ + +# yes, that is an @ in the filename . . . +@enable_asan_TRUE@%/$(PACKAGE_NAME)@.service: %/systemd.template.asan.service.in +@enable_asan_TRUE@ if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi +@enable_asan_TRUE@ $(fixupcmd) $^ > $@ +# yes, that is an @ in the filename . . . +@enable_asan_FALSE@%/$(PACKAGE_NAME)@.service: %/systemd.template.service.in +@enable_asan_FALSE@ if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi +@enable_asan_FALSE@ $(fixupcmd) $^ > $@ + +%/$(PACKAGE_NAME).systemd: %/systemd.template.sysconfig + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ + +%/$(systemdgroupname): %/systemd.group.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ + +%/$(PACKAGE_NAME)-snmp.service: %/systemd-snmp.service.in + if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@) ; fi + $(fixupcmd) $^ > $@ + +# if distdir is a git tag, use that for the git archive tag, else +# just assume a developer build and use HEAD +git-archive: + if [ -n "$(SRCDISTDIR)" -a -d "$(SRCDISTDIR)" ] ; then \ + srcdistdir=$(SRCDISTDIR) ; \ + else \ + srcdistdir=`pwd` ; \ + fi ; \ + cd $(srcdir) ; \ + if git show-ref --tags -q $(distdir) ; then \ + gittag=$(distdir) ; \ + else \ + gittag=HEAD ; \ + fi ; \ + git archive --prefix=$(distdir)/ $$gittag | bzip2 > $$srcdistdir/$(distdir).tar.bz2 + +# RPM-related tasks + +RPMBUILD ?= $(abs_builddir)/rpmbuild + +rpmroot: + $(MKDIR_P) $(RPMBUILD)/BUILD + $(MKDIR_P) $(RPMBUILD)/RPMS + $(MKDIR_P) $(RPMBUILD)/SOURCES + $(MKDIR_P) $(RPMBUILD)/SPECS + $(MKDIR_P) $(RPMBUILD)/SRPMS + +rpmbrprep: dist-bzip2 rpmroot + cp $(distdir).tar.bz2 $(RPMBUILD)/SOURCES + cp $(srcdir)/rpm/389-ds-base-git.sh $(RPMBUILD)/SOURCES + cp $(srcdir)/rpm/389-ds-base-devel.README $(RPMBUILD)/SOURCES + sed -e "s/__VERSION__/$(RPM_VERSION)/" -e "s/__RELEASE__/$(RPM_RELEASE)/" -e "s/__VERSION_PREREL__/$(VERSION_PREREL)/" -e "s/__NUNC_STANS_ON__/$(NUNC_STANS_ON)/" -e "s/__ASAN_ON__/$(ASAN_ON)/" < $(abs_builddir)/rpm/389-ds-base.spec > $(RPMBUILD)/SPECS/389-ds-base.spec + +# Requires rpmdevtools. Consider making this a dependancy of rpms. +rpmsources: rpmbrprep + spectool -g -S -C $(RPMBUILD)/SOURCES $(RPMBUILD)/SPECS/389-ds-base.spec + +rpms: rpmbrprep + cd $(RPMBUILD); \ + rpmbuild --define "_topdir $(RPMBUILD)" -ba SPECS/389-ds-base.spec + +srpm: rpmbrprep + cd $(RPMBUILD); \ + rpmbuild --define "_topdir $(RPMBUILD)" \ + -bs SPECS/389-ds-base.spec + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/README b/README new file mode 100644 index 0000000..22965e2 --- /dev/null +++ b/README @@ -0,0 +1,11 @@ +======================================================================= + 389 Directory Server +======================================================================= + +The 389 Directory Server is subject to the terms detailed in the +license agreement file called LICENSE. + +Late-breaking news and information on the 389 Directory Server is +available at the following location: + + http://port389.org/ diff --git a/VERSION.sh b/VERSION.sh new file mode 100644 index 0000000..e404ce9 --- /dev/null +++ b/VERSION.sh @@ -0,0 +1,54 @@ +# brand is lower case - used for names that don't appear to end users +# brand is used for file naming - should contain no spaces +brand=389 +# capbrand is the properly capitalized brand name that appears to end users +# may contain spaces +capbrand=389 +# vendor is the properly formatted vendor/manufacturer name that appears to end users +vendor="389 Project" + +# PACKAGE_VERSION is constructed from these +VERSION_MAJOR=1 +VERSION_MINOR=3 +VERSION_MAINT=5.17 +# NOTE: VERSION_PREREL is automatically set for builds made out of a git tree +VERSION_PREREL= +VERSION_DATE=$(date -u +%Y%m%d) + +# Set the version and release numbers for local developer RPM builds. We +# set these here because we do not want the git commit hash in the RPM +# version since it can make RPM upgrades difficult. If we have a git +# commit hash, we add it into the release number below. +RPM_RELEASE=${VERSION_DATE} +RPM_VERSION=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MAINT} + +if $(git -C "$srcdir" rev-parse --is-inside-work-tree > /dev/null 2>&1); then +# Check if the source is from a git repo +# if this is not a git repo, git log will say +# fatal: Not a git repository +# to stderr and stdout will be empty +# this tells git to print the short commit hash from the last commit + COMMIT=$(git -C "$srcdir" log -1 --pretty=format:%h 2> /dev/null) + if test -n "$COMMIT" ; then + VERSION_PREREL=.${VERSION_DATE}git$COMMIT + RPM_RELEASE=${RPM_RELEASE}git$COMMIT + fi +fi + +# the real version used throughout configure and make +# NOTE: because of autoconf/automake harshness, we cannot override the settings +# below in C code - there is no way to override the default #defines +# for these set with AC_INIT - so configure.ac should AC_DEFINE +# DS_PACKAGE_VERSION DS_PACKAGE_TARNAME DS_PACKAGE_BUGREPORT +# for use in C code - other code (perl scripts, shell scripts, Makefiles) +# can use PACKAGE_VERSION et. al. +PACKAGE_VERSION=$VERSION_MAJOR.$VERSION_MINOR.${VERSION_MAINT}${VERSION_PREREL} +# the name of the source tarball - see make dist +PACKAGE_TARNAME=${brand}-ds-base +# url for bug reports +PACKAGE_BUGREPORT="${PACKAGE_BUGREPORT}enter_bug.cgi?product=$brand" +PACKAGE_STRING="$PACKAGE_TARNAME $PACKAGE_VERSION" +# the version of the ds console package that this directory server +# is compatible with +# console .2 is still compatible with 389 .3 for now +CONSOLE_VERSION=$VERSION_MAJOR.2 diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..8d926b8 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1250 @@ +# generated automatically by aclocal 1.15 -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.15' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.15], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.15])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# Figure out how to run the assembler. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_AS +# ---------- +AC_DEFUN([AM_PROG_AS], +[# By default we simply use the C compiler to build assembly code. +AC_REQUIRE([AC_PROG_CC]) +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS +AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) +AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) +_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl +]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_COND_IF -*- Autoconf -*- + +# Copyright (C) 2008-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_COND_IF +# _AM_COND_ELSE +# _AM_COND_ENDIF +# -------------- +# These macros are only used for tracing. +m4_define([_AM_COND_IF]) +m4_define([_AM_COND_ELSE]) +m4_define([_AM_COND_ENDIF]) + +# AM_COND_IF(COND, [IF-TRUE], [IF-FALSE]) +# --------------------------------------- +# If the shell condition COND is true, execute IF-TRUE, otherwise execute +# IF-FALSE. Allow automake to learn about conditional instantiating macros +# (the AC_CONFIG_FOOS). +AC_DEFUN([AM_COND_IF], +[m4_ifndef([_AM_COND_VALUE_$1], + [m4_fatal([$0: no such condition "$1"])])dnl +_AM_COND_IF([$1])dnl +if test -z "$$1_TRUE"; then : + m4_n([$2])[]dnl +m4_ifval([$3], +[_AM_COND_ELSE([$1])dnl +else + $3 +])dnl +_AM_COND_ENDIF([$1])dnl +fi[]dnl +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..8bb628b --- /dev/null +++ b/autogen.sh @@ -0,0 +1,92 @@ +#!/bin/sh + +# set required versions of tools here +# the version is dotted integers like X.Y.Z where +# X, Y, and Z are integers +# comparisons are done using shell -lt, -gt, etc. +# this works if the numbers are zero filled as well +# so 06 == 6 + +# autoconf version required +# need 2.69 or later +ac_need_maj=2 +ac_need_min=69 +# automake version required +# need 1.13.4 or later +am_need_maj=1 +am_need_min=13 +am_need_rev=4 +# libtool version required +# need 2.4.2 or later +lt_need_maj=2 +lt_need_min=4 +lt_need_rev=2 +# should never have to touch anything below this line unless there is a bug +########################################################################### + +# input +# arg1 - version string in the form "X.Y[.Z]" - the .Z is optional +# args remaining - the needed X, Y, and Z to match +# output +# return 0 - success - the version string is >= the required X.Y.Z +# return 1 - failure - the version string is < the required X.Y.Z +# NOTE: All input must be integers, otherwise you will see shell errors +checkvers() { + vers="$1"; shift + needmaj="$1"; shift + needmin="$1"; shift + needrev="$1"; shift + verslist=`echo $vers | tr '.' ' '` + set $verslist + maj=$1; shift + min=$1; shift + rev=$1; shift + if [ "$maj" -gt "$needmaj" ] ; then return 0; fi + if [ "$maj" -lt "$needmaj" ] ; then return 1; fi + # if we got here, maj == needmaj + if [ -z "$needmin" ] ; then return 0; fi + if [ "$min" -gt "$needmin" ] ; then return 0; fi + if [ "$min" -lt "$needmin" ] ; then return 1; fi + # if we got here, min == needmin + if [ -z "$needrev" ] ; then return 0; fi + if [ "$rev" -gt "$needrev" ] ; then return 0; fi + if [ "$rev" -lt "$needrev" ] ; then return 1; fi + # if we got here, rev == needrev + return 0 +} + +# Check autoconf version +AC_VERSION=`autoconf --version | sed '/^autoconf/ {s/^.* \([1-9][0-9.]*\)$/\1/; q}'` +if checkvers "$AC_VERSION" $ac_need_maj $ac_need_min ; then + echo Found valid autoconf version $AC_VERSION +else + echo "You must have autoconf version $ac_need_maj.$ac_need_min or later installed (found version $AC_VERSION)." + exit 1 +fi + +# Check automake version +AM_VERSION=`automake --version | sed '/^automake/ {s/^.* \([1-9][0-9.]*\)$/\1/; q}'` +if checkvers "$AM_VERSION" $am_need_maj $am_need_min $am_need_rev ; then + echo Found valid automake version $AM_VERSION +else + echo "You must have automake version $am_need_maj.$am_need_min.$am_need_rev or later installed (found version $AM_VERSION)." + exit 1 +fi + +# Check libtool version +# NOTE: some libtool versions report a letter at the end e.g. on RHEL6 +# the version is 2.2.6b - for comparison purposes, just strip off the +# letter - note that the shell -lt and -gt comparisons will fail with +# test: 6b: integer expression expected if the number to compare +# contains a non-digit +LT_VERSION=`libtool --version | sed '/GNU libtool/ {s/^.* \([1-9][0-9a-zA-Z.]*\)$/\1/; s/[a-zA-Z]//g; q}'` +if checkvers "$LT_VERSION" $lt_need_maj $lt_need_min $lt_need_rev ; then + echo Found valid libtool version $LT_VERSION +else + echo "You must have libtool version $lt_need_maj.$lt_need_min.$lt_need_rev or later installed (found version $LT_VERSION)." + exit 1 +fi + +# Run autoreconf +echo "Running autoreconf -fvi" +autoreconf -fvi diff --git a/buildnum.pl b/buildnum.pl new file mode 100755 index 0000000..6d8804f --- /dev/null +++ b/buildnum.pl @@ -0,0 +1,62 @@ +#!/usr/bin/perl +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2005 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- + +#-------------------------------------------- +# buildnum.pl +# +# Generates a dated build number and writes +# out a buildnum.dat file in a user specified +# subdirectory. +# +# Usage: buildnum.pl -p +#-------------------------------------------- + +use Getopt::Std; +use FileHandle; + +autoflush STDERR 1; + +getopts('p:H'); + +if ($opt_H) {exitHelp();} + +# Load arguments +$platdir = $opt_p; + +# Get current time +@now = gmtime; + +# Format buildnum as YYYY.DDD.HHMM +$year = $now[5] + 1900; +$doy = $now[7] + 1; +if ($doy < 100) { $doy = 0 . $doy; } +$tod = $now[2] . $now[1]; +$buildnum = "$year.$doy.$tod"; + +if ($platdir) { + # Write buildnum.dat + $buildnum_file = "./$platdir/buildnum.dat"; + open(BUILDNUM,">$buildnum_file") || die "Error: Can't create $buildnum_file: $!\n"; + print BUILDNUM "\\\"$buildnum\\\""; + close(BUILDNUM); +} else { + print "\\\"$buildnum\\\""; +} + +#---------- exitHelp subroutine ---------- +sub exitHelp { + print(STDERR "$0: Generates a dated build number. + + \tUsage: $0 -p + + \t-p Platform subdirectory. + \t-H Print this help message\n"); + exit(0); +} diff --git a/compile b/compile new file mode 100755 index 0000000..a85b723 --- /dev/null +++ b/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..dbfb978 --- /dev/null +++ b/config.guess @@ -0,0 +1,1421 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2015 Free Software Foundation, Inc. + +timestamp='2015-01-01' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches to . + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2015 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + *:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..9e5ef88 --- /dev/null +++ b/config.h.in @@ -0,0 +1,474 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* enabling atomic counter */ +#undef ATOMIC_64BIT_OPERATIONS + +/* Define to 1 if the `closedir' function returns void instead of `int'. */ +#undef CLOSEDIR_VOID + +/* cpu type arm */ +#undef CPU_arm + +/* cpu type pa-risc */ +#undef CPU_hppa + +/* cpu type ia64 */ +#undef CPU_ia64 + +/* cpu type sparc */ +#undef CPU_sparc + +/* cpu type x86 */ +#undef CPU_x86 + +/* cpu type x86_64 */ +#undef CPU_x86_64 + +/* package bug report url */ +#undef DS_PACKAGE_BUGREPORT + +/* package string */ +#undef DS_PACKAGE_STRING + +/* package tarball name */ +#undef DS_PACKAGE_TARNAME + +/* package version */ +#undef DS_PACKAGE_VERSION + +/* enable the account policy plugin */ +#undef ENABLE_ACCTPOLICY + +/* enable ldapi auto bind support in the server */ +#undef ENABLE_AUTOBIND + +/* enable ldapi auto bind with auto dn suffix support in the server */ +#undef ENABLE_AUTO_DN_SUFFIX + +/* enable the bitwise plugin */ +#undef ENABLE_BITWISE + +/* enable the dna plugin */ +#undef ENABLE_DNA + +/* enable ldapi support in the server */ +#undef ENABLE_LDAPI + +/* enable support for nunc-stans event framework */ +#undef ENABLE_NUNC_STANS + +/* enable the pam passthru auth plugin */ +#undef ENABLE_PAM_PASSTHRU + +/* enable support for POSIX user/group attributes in winsync */ +#undef ENABLE_POSIX_WINSYNC + +/* enable the presence plugin */ +#undef ENABLE_PRESENCE + +/* have 64-bit atomic bool compare and swap function provided by gcc */ +#undef HAVE_64BIT_ATOMIC_CAS_FUNC + +/* have 64-bit atomic operation functions provided by gcc */ +#undef HAVE_64BIT_ATOMIC_OP_FUNCS + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_INET_H + +/* Define to 1 if your system has a working `chown' function. */ +#undef HAVE_CHOWN + +/* Define to 1 if you have the `clock_gettime' function. */ +#undef HAVE_CLOCK_GETTIME + +/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you + don't. */ +#undef HAVE_DECL_STRERROR_R + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_DIRENT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ +#undef HAVE_DOPRNT + +/* Define to 1 if you have the `endpwent' function. */ +#undef HAVE_ENDPWENT + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + +/* Define to 1 if you have the `ftruncate' function. */ +#undef HAVE_FTRUNCATE + +/* Define to 1 if you have the `getcwd' function. */ +#undef HAVE_GETCWD + +/* Define to 1 if you have the `gethostbyname' function. */ +#undef HAVE_GETHOSTBYNAME + +/* Define to 1 if you have the `getpagesize' function. */ +#undef HAVE_GETPAGESIZE + +/* have getpeerucred */ +#undef HAVE_GETPEERUCRED + +/* define if you have HEIMDAL Kerberos */ +#undef HAVE_HEIMDAL_KERBEROS + +/* Define to 1 if you have the header file. */ +#undef HAVE_HEIM_ERR_H + +/* Define to 1 if you have the `inet_ntoa' function. */ +#undef HAVE_INET_NTOA + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* define if you have Kerberos V */ +#undef HAVE_KRB5 + +/* Define to 1 if you have the `krb5_cc_new_unique' function. */ +#undef HAVE_KRB5_CC_NEW_UNIQUE + +/* have the function ldap_url_parse_ext */ +#undef HAVE_LDAP_URL_PARSE_EXT + +/* have the function ldap_url_parse_no_defaults */ +#undef HAVE_LDAP_URL_PARSE_NO_DEFAULTS + +/* Define to 1 if you have the `localtime_r' function. */ +#undef HAVE_LOCALTIME_R + +/* Define to 1 if `lstat' has the bug that it succeeds when given the + zero-length file name argument. */ +#undef HAVE_LSTAT_EMPTY_STRING_BUG + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC + +/* Define to 1 if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define to 1 if you have the `memmove' function. */ +#undef HAVE_MEMMOVE + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* Define to 1 if you have the `mkdir' function. */ +#undef HAVE_MKDIR + +/* Define to 1 if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the header file. */ +#undef HAVE_MNTENT_H + +/* Define to 1 if you have the `munmap' function. */ +#undef HAVE_MUNMAP + +/* Define to 1 if you have the header file, and it defines `DIR'. */ +#undef HAVE_NDIR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETDB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if you have the `putenv' function. */ +#undef HAVE_PUTENV + +/* Define to 1 if you have the `rmdir' function. */ +#undef HAVE_RMDIR + +/* Define to 1 if you have the `setrlimit' function. */ +#undef HAVE_SETRLIMIT + +/* Define to 1 if you have the `socket' function. */ +#undef HAVE_SOCKET + +/* Define to 1 if `stat' has the bug that it succeeds when given the + zero-length file name argument. */ +#undef HAVE_STAT_EMPTY_STRING_BUG + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the `strchr' function. */ +#undef HAVE_STRCHR + +/* Define to 1 if you have the `strcspn' function. */ +#undef HAVE_STRCSPN + +/* Define to 1 if you have the `strdup' function. */ +#undef HAVE_STRDUP + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the `strerror_r' function. */ +#undef HAVE_STRERROR_R + +/* Define to 1 if you have the `strftime' function. */ +#undef HAVE_STRFTIME + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strncasecmp' function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the `strpbrk' function. */ +#undef HAVE_STRPBRK + +/* Define to 1 if you have the `strrchr' function. */ +#undef HAVE_STRRCHR + +/* Define to 1 if you have the `strstr' function. */ +#undef HAVE_STRSTR + +/* Define to 1 if you have the `strtol' function. */ +#undef HAVE_STRTOL + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_SYS_DIR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_FILE_H + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_SYS_NDIR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#undef HAVE_SYS_WAIT_H + +/* Define to 1 if you have the `tzset' function. */ +#undef HAVE_TZSET + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `vfork' function. */ +#undef HAVE_VFORK + +/* Define to 1 if you have the header file. */ +#undef HAVE_VFORK_H + +/* Define to 1 if you have the `vprintf' function. */ +#undef HAVE_VPRINTF + +/* Define to 1 if `fork' works. */ +#undef HAVE_WORKING_FORK + +/* Define to 1 if `vfork' works. */ +#undef HAVE_WORKING_VFORK + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* HP-UX */ +#undef HPUX + +/* HP-UX 11 */ +#undef HPUX11 + +/* HP-UX 11.11 */ +#undef HPUX11_11 + +/* HP-UX 11.23 */ +#undef HPUX11_23 + +/* Use FHS layout */ +#undef IS_FHS + +/* Use FHS optional layout */ +#undef IS_FHS_OPT + +/* LDAP debug flag */ +#undef LDAP_DEBUG + +/* Don't use smartheap */ +#undef LDAP_DONT_USE_SMARTHEAP + +/* Linux */ +#undef LINUX + +/* Linux 2.0 */ +#undef LINUX2_0 + +/* Linux 2.2 */ +#undef LINUX2_2 + +/* Linux 2.4 */ +#undef LINUX2_4 + +/* Define to 1 if `lstat' dereferences a symlink specified with a trailing + slash. */ +#undef LSTAT_FOLLOWS_SLASHED_SYMLINK + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#undef LT_OBJDIR + +/* Linux */ +#undef Linux + +/* no getdomainname */ +#undef NO_DOMAINNAME + +/* OS version */ +#undef OSVERSION + +/* OS HP-UX */ +#undef OS_hpux + +/* OS SOLARIS */ +#undef OS_solaris + +/* package tar name */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define as the return type of signal handlers (`int' or `void'). */ +#undef RETSIGTYPE + +/* SOLARIS */ +#undef SOLARIS + +/* Define to 1 if the `S_IS*' macros in do not work properly. */ +#undef STAT_MACROS_BROKEN + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if strerror_r returns char *. */ +#undef STRERROR_R_CHAR_P + +/* SVR4 */ +#undef SVR4 + +/* Define to 1 if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + +/* Define to 1 if your declares `struct tm'. */ +#undef TM_IN_SYS_TIME + +/* If defined, using MozLDAP for LDAP SDK */ +#undef USE_MOZLDAP + +/* If defined, using OpenLDAP for LDAP SDK */ +#undef USE_OPENLDAP + +/* POSIX rwlocks */ +#undef USE_POSIX_RWLOCKS + +/* package version */ +#undef VERSION + +/* GNU Source */ +#undef _GNU_SOURCE + +/* Source namespace */ +#undef _HPUX_SOURCE + +/* to pick up all of the printf format macros in inttypes.h */ +#undef _INCLUDE_STDC__SOURCE_199901 + +/* POSIX revision */ +#undef _POSIX_C_SOURCE + +/* _REENTRANT */ +#undef _REENTRANT + +/* SVID_GETTOD */ +#undef _SVID_GETTOD + +/* SVR4 */ +#undef __svr4 + +/* SVR4 */ +#undef __svr4__ + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `int' if doesn't define. */ +#undef gid_t + +/* HP-UX */ +#undef hpux + +/* Define to rpl_malloc if the replacement function should be used. */ +#undef malloc + +/* Define to `int' if does not define. */ +#undef pid_t + +/* Define to `unsigned int' if does not define. */ +#undef size_t + +/* SunOS5 */ +#undef sunos5 + +/* Define to `int' if doesn't define. */ +#undef uid_t + +/* Define as `fork' if `vfork' does not work. */ +#undef vfork diff --git a/config.sub b/config.sub new file mode 100755 index 0000000..6467c95 --- /dev/null +++ b/config.sub @@ -0,0 +1,1807 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2015 Free Software Foundation, Inc. + +timestamp='2015-01-01' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2015 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv | ft32 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | visium-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..96c003e --- /dev/null +++ b/configure @@ -0,0 +1,25050 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for dirsrv 1.0. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do 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 + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do 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 +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: http://bugzilla.redhat.com/ about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='dirsrv' +PACKAGE_TARNAME='dirsrv' +PACKAGE_VERSION='1.0' +PACKAGE_STRING='dirsrv 1.0' +PACKAGE_BUGREPORT='http://bugzilla.redhat.com/' +PACKAGE_URL='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_header_list= +ac_default_prefix=/opt/$PACKAGE_NAME +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +vendor +capbrand +brand +systemd_defs +systemd_lib +systemd_inc +localrundir +nunc_stans_libdir +nunc_stans_lib +nunc_stans_inc +pcre_libdir +pcre_lib +pcre_inc +netsnmp_link +netsnmp_libdir +netsnmp_lib +netsnmp_inc +icu_bin +icu_inc +icu_lib +svrcore_lib +svrcore_inc +sasl_path +sasl_libdir +sasl_lib +sasl_inc +db_libver +db_bindir +db_libdir +db_lib +db_incdir +db_inc +ol_libver +plainldif_opts +ldaptool_opts +ldaptool_bindir +openldap_bindir +openldap_libdir +openldap_lib +openldap_inc +ldapsdk_bindir +ldapsdk_libdir +ldapsdk_lib +ldapsdk_inc +nss_libdir +nss_lib +nss_inc +nspr_libdir +nspr_lib +nspr_inc +SPARC_FALSE +SPARC_TRUE +OPENLDAP_FALSE +OPENLDAP_TRUE +SELINUX_FALSE +SELINUX_TRUE +PACKAGE_BASE_VERSION +JOURNALD_FALSE +JOURNALD_TRUE +SYSTEMD_FALSE +SYSTEMD_TRUE +with_systemdgroupname +with_systemdsystemconfdir +with_systemdsystemunitdir +with_selinux +kerberos_libdir +kerberos_lib +kerberos_inc +KRB5_CONFIG_BIN +NETSNMP_CONFIG +ICU_CONFIG +ldap_lib_ldif +PKG_CONFIG +SOLARIS_FALSE +SOLARIS_TRUE +HPUX_FALSE +HPUX_TRUE +initconfigdir +sttyexec +pythonexec +perlexec +initdir +LIBCRUN +LIBCSTD +LIBDL +LIBNSL +LIBSOCKET +LIBCRYPT +THREADLIB +INITDDIR_FALSE +INITDDIR_TRUE +WINNT_FALSE +WINNT_TRUE +instconfigdir +defaultgroup +defaultuser +updatedir +mibdir +infdir +pythondir +perldir +scripttemplatedir +serverplugindir +serverincdir +serverdir +schemadir +propertydir +sampledatadir +configdir +prefixdir +with_tmpfiles_d +with_fhs_opt +enable_nunc_stans_FALSE +enable_nunc_stans_TRUE +enable_posix_winsync_FALSE +enable_posix_winsync_TRUE +enable_acctpolicy_FALSE +enable_acctpolicy_TRUE +enable_presence_FALSE +enable_presence_TRUE +enable_bitwise_FALSE +enable_bitwise_TRUE +enable_auto_dn_suffix_FALSE +enable_auto_dn_suffix_TRUE +enable_autobind_FALSE +enable_autobind_TRUE +enable_ldapi_FALSE +enable_ldapi_TRUE +enable_dna_FALSE +enable_dna_TRUE +enable_pam_passthru_FALSE +enable_pam_passthru_TRUE +BUNDLE_FALSE +BUNDLE_TRUE +gccsec_defs +RPM_HARDEND_CC_FALSE +RPM_HARDEND_CC_TRUE +enable_asan_FALSE +enable_asan_TRUE +asan_defs +debug_defs +LIBOBJS +CXXCPP +CPP +LT_SYS_LIBRARY_PATH +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +LIBTOOL +am__fastdepCCAS_FALSE +am__fastdepCCAS_TRUE +CCASDEPMODE +CCASFLAGS +CCAS +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +ac_ct_CC +CFLAGS +CC +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CXX +CPPFLAGS +LDFLAGS +CXXFLAGS +CXX +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +CONSOLE_VERSION +VERSION_PREREL +RPM_RELEASE +RPM_VERSION +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_maintainer_mode +enable_dependency_tracking +enable_static +enable_shared +with_pic +enable_fast_install +with_aix_soname +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_debug +enable_asan +enable_gcc_security +enable_bundle +enable_pam_passthru +enable_dna +enable_ldapi +enable_autobind +enable_auto_dn_suffix +enable_bitwise +enable_presence +enable_acctpolicy +enable_posix_winsync +enable_nunc_stans +with_fhs +with_fhs_opt +with_tmpfiles_d +with_perldir +with_pythonexec +with_instconfigdir +with_initddir +with_nspr +with_nspr_inc +with_nspr_lib +with_nss +with_nss_inc +with_nss_lib +with_openldap +with_openldap_inc +with_openldap_lib +with_openldap_bin +with_ldapsdk +with_ldapsdk_inc +with_ldapsdk_lib +with_ldapsdk_bin +with_db +with_db_inc +with_db_lib +with_sasl +with_sasl_inc +with_sasl_lib +with_svrcore +with_svrcore_inc +with_svrcore_lib +with_icu +with_icu_inc +with_icu_lib +with_icu_bin +with_netsnmp +with_netsnmp_inc +with_netsnmp_lib +with_kerberos +with_kerberos_inc +with_kerberos_lib +with_pcre +with_selinux +with_nunc_stans +with_nunc_stans_inc +with_nunc_stans_lib +with_systemd +with_journald +with_systemdsystemunitdir +with_systemdsystemconfdir +with_systemdgroupname +' + ac_precious_vars='build_alias +host_alias +target_alias +CXX +CXXFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCC +CC +CFLAGS +CCAS +CCASFLAGS +LT_SYS_LIBRARY_PATH +CPP +CXXCPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures dirsrv 1.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/dirsrv] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of dirsrv 1.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --enable-static[=PKGS] build static libraries [default=no] + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-debug Enable debug features (default: no) + --enable-asan Enable gcc address sanitizer options (default: no) + --enable-gcc-security Enable gcc secure compilation options (default: no) + --enable-bundle Enable bundled dependencies (default: no) + --enable-pam-passthru enable the PAM passthrough auth plugin (default: + yes) + --enable-dna enable the Distributed Numeric Assignment (DNA) + plugin (default: yes) + --enable-ldapi enable LDAP over unix domain socket (LDAPI) support + (default: yes) + --enable-autobind enable auto bind over unix domain socket (LDAPI) + support (default: no) + --enable-auto-dn-suffix enable auto bind with auto dn suffix over unix + domain socket (LDAPI) support (default: no) + --enable-bitwise enable the bitwise matching rule plugin (default: + yes) + --enable-presence enable the presence plugin (default: no) + --enable-acctpolicy enable the account policy plugin (default: yes) + --enable-posix-winsync enable support for POSIX user/group attributes in + winsync (default: yes) + --enable-nunc-stans enable support for nunc-stans event framework + (default: no) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). + --with-fhs Use FHS layout + --with-fhs-opt Use FHS optional layout + --with-tmpfiles-d=PATH system uses tmpfiles.d to handle temp files/dirs + (default: $with_tmpfiles_d) + + --with-perldir=PATH Directory for perl) + + --with-pythonexec=PATH Path to executable for python) + + --with-instconfigdir=/path + Base directory for instance specific writable + configuration directories (default + $sysconfdir/$PACKAGE_NAME) + --with-initddir=/path Absolute path (not relative like some of the other + options) that should contain the SysV init scripts + (default '$(sysconfdir)/rc.d') + --with-nspr[=PATH] Netscape Portable Runtime (NSPR) directory + --with-nspr-inc=PATH Netscape Portable Runtime (NSPR) include directory + --with-nspr-lib=PATH Netscape Portable Runtime (NSPR) library directory + --with-nss[=PATH] Network Security Services (NSS) directory + --with-nss-inc=PATH Network Security Services (NSS) include directory + --with-nss-lib=PATH Network Security Services (NSS) library directory + --with-openldap[=PATH] Use OpenLDAP - optional PATH is path to OpenLDAP SDK + --with-openldap-inc=PATH + OpenLDAP SDK include directory + --with-openldap-lib=PATH + OpenLDAP SDK library directory + --with-openldap-bin=PATH + OpenLDAP SDK binary directory + --with-ldapsdk[=PATH] Mozilla LDAP SDK directory + --with-ldapsdk-inc=PATH Mozilla LDAP SDK include directory + --with-ldapsdk-lib=PATH Mozilla LDAP SDK library directory + --with-ldapsdk-bin=PATH Mozilla LDAP SDK binary directory + --with-db[=PATH] Berkeley DB directory + --with-db-inc=PATH Berkeley DB include file directory + --with-db-lib=PATH Berkeley DB library directory + --with-sasl[=PATH] Use SASL from supplied path + --with-sasl-inc=PATH SASL include file directory + --with-sasl-lib=PATH SASL library directory + --with-svrcore[=PATH] Use system installed SVRCORE - optional path for + SVRCORE + --with-svrcore-inc=PATH SVRCORE include file directory + --with-svrcore-lib=PATH SVRCORE library directory + --with-icu[=PATH] ICU directory + --with-icu-inc=PATH ICU include directory + --with-icu-lib=PATH ICU library directory + --with-icu-bin=PATH ICU binary directory + --with-netsnmp[=PATH] Net-SNMP directory + --with-netsnmp-inc=PATH Net-SNMP include directory + --with-netsnmp-lib=PATH Net-SNMP library directory + --with-kerberos[=PATH] Use the kerberos API in the server directly - allows + the server to authenticate directly with a keytab - + otherwise, SASL/GSSAPI auth depends on underlying + SASL libraries and external kinit with a keytab - if + PATH is not specified, look for kerberos in the + system locations. This will attempt to use + krb5-config from the PATH to find the libs and + include dirs - you can specify KRB5_CONFIG_BIN to + specify a different filename or absolute path. If + krb5-config does not work, this will attempt to look + in various system directories + --with-kerberos-inc=PATH + Allows you to explicitly set the directory + containing the kerberos include files - implies use + of kerberos + --with-kerberos-lib=PATH + Allows you to explicitly set the directory + containing the kerberos libraries - implies use of + kerberos + --with-pcre[=PATH] Perl Compatible Regular Expression directory + --with-selinux Support SELinux policy + --with-nunc-stans[=PATH] + nunc-stans directory + --with-nunc-stans-inc=PATH + nunc-stans include file directory + --with-nunc-stans-lib=PATH + nunc-stans library directory + --with-systemd Enable Systemd native integration. + --with-journald Enable Journald native integration. WARNING, this + may cause system instability + --with-systemdsystemunitdir=PATH + Directory for systemd service files (default: + $with_systemdsystemunitdir) + + --with-systemdsystemconfdir=PATH + Directory for systemd service files (default: + $with_systemdsystemconfdir) + + --with-systemdgroupname=NAME + Name of group target for all instances (default: + $with_systemdgroupname) + + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CC C compiler command + CFLAGS C compiler flags + CCAS assembler compiler command (defaults to CC) + CCASFLAGS assembler compiler flags (defaults to CFLAGS) + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. + CPP C preprocessor + CXXCPP C++ preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +dirsrv configure 1.0 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ------------------------------------------ ## +## Report this to http://bugzilla.redhat.com/ ## +## ------------------------------------------ ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_decl +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by dirsrv $as_me 1.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +as_fn_append ac_header_list " stdlib.h" +as_fn_append ac_header_list " unistd.h" +as_fn_append ac_header_list " sys/param.h" +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# AC_CONFIG_HEADER must be called right after AC_INIT. +ac_config_headers="$ac_config_headers config.h" + +# include the version information +. $srcdir/VERSION.sh +{ $as_echo "$as_me:${as_lineno-$LINENO}: This is configure for $PACKAGE_TARNAME $PACKAGE_VERSION" >&5 +$as_echo "$as_me: This is configure for $PACKAGE_TARNAME $PACKAGE_VERSION" >&6;} + +cat >>confdefs.h <<_ACEOF +#define DS_PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define DS_PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define DS_PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define DS_PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +am__api_version='1.15' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='dirsrv' + VERSION='1.0' + + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a pax tar archive" >&5 +$as_echo_n "checking how to create a pax tar archive... " >&6; } + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_pax-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + { echo "$as_me:$LINENO: $_am_tar --version" >&5 + ($_am_tar --version) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && break + done + am__tar="$_am_tar --format=posix -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=posix -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x pax -w "$$tardir"' + am__tar_='pax -L -x pax -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H pax -L' + am__tar_='find "$tardir" -print | cpio -o -H pax -L' + am__untar='cpio -i -H pax -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_pax}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 + (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + rm -rf conftest.dir + if test -s conftest.tar; then + { echo "$as_me:$LINENO: $am__untar &5 + ($am__untar &5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 + (cat conftest.dir/file) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + if ${am_cv_prog_tar_pax+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_prog_tar_pax=$_am_tool +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_pax" >&5 +$as_echo "$am_cv_prog_tar_pax" >&6; } + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + +# define these for automake distdir +VERSION=$PACKAGE_VERSION +PACKAGE=$PACKAGE_TARNAME + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + +# Checks for programs. +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C++ compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +# By default we simply use the C compiler to build assembly code. + +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS + + + +depcc="$CCAS" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CCAS_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CCAS_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CCAS_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } +CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then + am__fastdepCCAS_TRUE= + am__fastdepCCAS_FALSE='#' +else + am__fastdepCCAS_TRUE='#' + am__fastdepCCAS_FALSE= +fi + + + case $ac_cv_prog_cc_stdc in #( + no) : + ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no +fi + +fi + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if ${ac_cv_prog_cc_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; #( + '') : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac + +# disable static libs by default - we only use a couple +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_static=no +fi + + + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + +func_stripname_cnf () +{ + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; + esac +} # func_stripname_cnf + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + pic_mode=default +fi + + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test "${with_aix_soname+set}" = set; then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC=$CC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $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. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $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. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $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 + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $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 + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) 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/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen=shl_load +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen=dlopen +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report what library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC + + if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct_CXX=no + hardcode_direct_absolute_CXX=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec_CXX='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + no_undefined_flag_CXX='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' $wl-bernotok' + allow_undefined_flag_CXX=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='$wl--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + if test yes != "$lt_cv_apple_cc_single_mod"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + os2*) + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_minus_L_CXX=yes + allow_undefined_flag_CXX=unsupported + shrext_cmds=.dll + archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes_CXX=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='$wl-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='$wl-E' + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' + archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + no_undefined_flag_CXX=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='$wl-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='$wl-z,text' + allow_undefined_flag_CXX='$wl-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test no = "$ld_shlibs_CXX" && can_build_shared=no + + GCC_CXX=$GXX + LD_CXX=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX=$prev$p + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX=$prev$p + else + postdeps_CXX="${postdeps_CXX} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX=$p + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX=$p + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + lt_prog_compiler_pic_CXX='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static_CXX='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $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. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $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 + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $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 + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test no = "$ld_shlibs_CXX" && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) 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/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test yes = "$hardcode_automatic_CXX"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct_CXX" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && + test no != "$hardcode_minus_L_CXX"; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test relink = "$hardcode_action_CXX" || + test yes = "$inherit_rpath_CXX"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +# Checks for header files. +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if eval \${$as_ac_Header+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include <$ac_hdr> + +int +main () +{ +if ((DIR *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_ac_Header=yes" +else + eval "$as_ac_Header=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +_ACEOF + +ac_header_dirent=$ac_hdr; break +fi + +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break +fi +done +if ${ac_cv_search_opendir+:} false; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' x; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break +fi +done +if ${ac_cv_search_opendir+:} false; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if ${ac_cv_header_sys_wait_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_sys_wait_h=yes +else + ac_cv_header_sys_wait_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } +if test $ac_cv_header_sys_wait_h = yes; then + +$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h + +fi + +for ac_header in arpa/inet.h fcntl.h malloc.h netdb.h netinet/in.h stdlib.h string.h strings.h sys/file.h sys/socket.h sys/time.h unistd.h inttypes.h mntent.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +# Checks for typedefs, structures, and compiler characteristics. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 +$as_echo_n "checking whether stat file-mode macros are broken... " >&6; } +if ${ac_cv_header_stat_broken+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include + +#if defined S_ISBLK && defined S_IFDIR +extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; +#endif + +#if defined S_ISBLK && defined S_IFCHR +extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; +#endif + +#if defined S_ISLNK && defined S_IFREG +extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; +#endif + +#if defined S_ISSOCK && defined S_IFREG +extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stat_broken=no +else + ac_cv_header_stat_broken=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 +$as_echo "$ac_cv_header_stat_broken" >&6; } +if test $ac_cv_header_stat_broken = yes; then + +$as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + +#ifndef __cplusplus + /* Ultrix mips cc rejects this sort of thing. */ + typedef int charset[2]; + const charset cs = { 0, 0 }; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this sort of thing. */ + char tx; + char *t = &tx; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; } bx; + struct s *b = &bx; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "#define const /**/" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #ifndef bool + "error: bool is not defined" + #endif + #ifndef false + "error: false is not defined" + #endif + #if false + "error: false is not 0" + #endif + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main () +{ + + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } + ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + + +if test $ac_cv_header_stdbool_h = yes; then + +$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 +$as_echo_n "checking for uid_t in sys/types.h... " >&6; } +if ${ac_cv_type_uid_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "uid_t" >/dev/null 2>&1; then : + ac_cv_type_uid_t=yes +else + ac_cv_type_uid_t=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 +$as_echo "$ac_cv_type_uid_t" >&6; } +if test $ac_cv_type_uid_t = no; then + +$as_echo "#define uid_t int" >>confdefs.h + + +$as_echo "#define gid_t int" >>confdefs.h + +fi + +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } +if ${ac_cv_header_time+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_time=yes +else + ac_cv_header_time=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } +if test $ac_cv_header_time = yes; then + +$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 +$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } +if ${ac_cv_struct_tm+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include + +int +main () +{ +struct tm tm; + int *p = &tm.tm_sec; + return !p; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_struct_tm=time.h +else + ac_cv_struct_tm=sys/time.h +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 +$as_echo "$ac_cv_struct_tm" >&6; } +if test $ac_cv_struct_tm = sys/time.h; then + +$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h + +fi + + +# Checks for library functions. +for ac_header in unistd.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" +if test "x$ac_cv_header_unistd_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_UNISTD_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working chown" >&5 +$as_echo_n "checking for working chown... " >&6; } +if ${ac_cv_func_chown_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_chown_works=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +#include + +int +main () +{ + char *f = "conftest.chown"; + struct stat before, after; + + if (creat (f, 0600) < 0) + return 1; + if (stat (f, &before) < 0) + return 1; + if (chown (f, (uid_t) -1, (gid_t) -1) == -1) + return 1; + if (stat (f, &after) < 0) + return 1; + return ! (before.st_uid == after.st_uid && before.st_gid == after.st_gid); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_chown_works=yes +else + ac_cv_func_chown_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +rm -f conftest.chown + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_chown_works" >&5 +$as_echo "$ac_cv_func_chown_works" >&6; } +if test $ac_cv_func_chown_works = yes; then + +$as_echo "#define HAVE_CHOWN 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether closedir returns void" >&5 +$as_echo_n "checking whether closedir returns void... " >&6; } +if ${ac_cv_func_closedir_void+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_closedir_void=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header_dirent> +#ifndef __cplusplus +int closedir (); +#endif + +int +main () +{ +return closedir (opendir (".")) != 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_closedir_void=no +else + ac_cv_func_closedir_void=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_closedir_void" >&5 +$as_echo "$ac_cv_func_closedir_void" >&6; } +if test $ac_cv_func_closedir_void = yes; then + +$as_echo "#define CLOSEDIR_VOID 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 +$as_echo_n "checking for error_at_line... " >&6; } +if ${ac_cv_lib_error_at_line+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +error_at_line (0, 0, "", 0, "an error occurred"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_error_at_line=yes +else + ac_cv_lib_error_at_line=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 +$as_echo "$ac_cv_lib_error_at_line" >&6; } +if test $ac_cv_lib_error_at_line = no; then + case " $LIBOBJS " in + *" error.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS error.$ac_objext" + ;; +esac + +fi + +for ac_header in vfork.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" +if test "x$ac_cv_header_vfork_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VFORK_H 1 +_ACEOF + +fi + +done + +for ac_func in fork vfork +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test "x$ac_cv_func_fork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 +$as_echo_n "checking for working fork... " >&6; } +if ${ac_cv_func_fork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_fork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* By Ruediger Kuhlmann. */ + return fork () < 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_fork_works=yes +else + ac_cv_func_fork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 +$as_echo "$ac_cv_func_fork_works" >&6; } + +else + ac_cv_func_fork_works=$ac_cv_func_fork +fi +if test "x$ac_cv_func_fork_works" = xcross; then + case $host in + *-*-amigaos* | *-*-msdosdjgpp*) + # Override, as these systems have only a dummy fork() stub + ac_cv_func_fork_works=no + ;; + *) + ac_cv_func_fork_works=yes + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} +fi +ac_cv_func_vfork_works=$ac_cv_func_vfork +if test "x$ac_cv_func_vfork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 +$as_echo_n "checking for working vfork... " >&6; } +if ${ac_cv_func_vfork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_vfork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Thanks to Paul Eggert for this test. */ +$ac_includes_default +#include +#ifdef HAVE_VFORK_H +# include +#endif +/* On some sparc systems, changes by the child to local and incoming + argument registers are propagated back to the parent. The compiler + is told about this with #include , but some compilers + (e.g. gcc -O) don't grok . Test for this by using a + static variable whose address is put into a register that is + clobbered by the vfork. */ +static void +#ifdef __cplusplus +sparc_address_test (int arg) +# else +sparc_address_test (arg) int arg; +#endif +{ + static pid_t child; + if (!child) { + child = vfork (); + if (child < 0) { + perror ("vfork"); + _exit(2); + } + if (!child) { + arg = getpid(); + write(-1, "", 0); + _exit (arg); + } + } +} + +int +main () +{ + pid_t parent = getpid (); + pid_t child; + + sparc_address_test (0); + + child = vfork (); + + if (child == 0) { + /* Here is another test for sparc vfork register problems. This + test uses lots of local variables, at least as many local + variables as main has allocated so far including compiler + temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris + 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should + reuse the register of parent for one of the local variables, + since it will think that parent can't possibly be used any more + in this routine. Assigning to the local variable will thus + munge parent in the parent process. */ + pid_t + p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), + p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); + /* Convince the compiler that p..p7 are live; otherwise, it might + use the same hardware register for all 8 local variables. */ + if (p != p1 || p != p2 || p != p3 || p != p4 + || p != p5 || p != p6 || p != p7) + _exit(1); + + /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent + from child file descriptors. If the child closes a descriptor + before it execs or exits, this munges the parent's descriptor + as well. Test for this by closing stdout in the child. */ + _exit(close(fileno(stdout)) != 0); + } else { + int status; + struct stat st; + + while (wait(&status) != child) + ; + return ( + /* Was there some problem with vforking? */ + child < 0 + + /* Did the child fail? (This shouldn't happen.) */ + || status + + /* Did the vfork/compiler bug occur? */ + || parent != getpid() + + /* Did the file descriptor bug occur? */ + || fstat(fileno(stdout), &st) != 0 + ); + } +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_vfork_works=yes +else + ac_cv_func_vfork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 +$as_echo "$ac_cv_func_vfork_works" >&6; } + +fi; +if test "x$ac_cv_func_fork_works" = xcross; then + ac_cv_func_vfork_works=$ac_cv_func_vfork + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} +fi + +if test "x$ac_cv_func_vfork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h + +else + +$as_echo "#define vfork fork" >>confdefs.h + +fi +if test "x$ac_cv_func_fork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 +$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } +if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest.sym conftest.file +echo >conftest.file +if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then + if test "$cross_compiling" = yes; then : + ac_cv_func_lstat_dereferences_slashed_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + /* Linux will dereference the symlink and fail, as required by POSIX. + That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_lstat_dereferences_slashed_symlink=yes +else + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +else + # If the `ln -s' command failed, then we probably don't even + # have an lstat function. + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f conftest.sym conftest.file + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } + +test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && + +cat >>confdefs.h <<_ACEOF +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + +if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then + case " $LIBOBJS " in + *" lstat.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS lstat.$ac_objext" + ;; +esac + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat accepts an empty string" >&5 +$as_echo_n "checking whether lstat accepts an empty string... " >&6; } +if ${ac_cv_func_lstat_empty_string_bug+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_lstat_empty_string_bug=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + return lstat ("", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_lstat_empty_string_bug=no +else + ac_cv_func_lstat_empty_string_bug=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_empty_string_bug" >&5 +$as_echo "$ac_cv_func_lstat_empty_string_bug" >&6; } +if test $ac_cv_func_lstat_empty_string_bug = yes; then + case " $LIBOBJS " in + *" lstat.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS lstat.$ac_objext" + ;; +esac + + +cat >>confdefs.h <<_ACEOF +#define HAVE_LSTAT_EMPTY_STRING_BUG 1 +_ACEOF + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 +$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } +if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest.sym conftest.file +echo >conftest.file +if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then + if test "$cross_compiling" = yes; then : + ac_cv_func_lstat_dereferences_slashed_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + /* Linux will dereference the symlink and fail, as required by POSIX. + That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_lstat_dereferences_slashed_symlink=yes +else + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +else + # If the `ln -s' command failed, then we probably don't even + # have an lstat function. + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f conftest.sym conftest.file + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } + +test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && + +cat >>confdefs.h <<_ACEOF +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + +if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then + case " $LIBOBJS " in + *" lstat.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS lstat.$ac_objext" + ;; +esac + +fi + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : + +$as_echo "#define HAVE_MALLOC 1" >>confdefs.h + +else + $as_echo "#define HAVE_MALLOC 0" >>confdefs.h + + case " $LIBOBJS " in + *" malloc.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS malloc.$ac_objext" + ;; +esac + + +$as_echo "#define malloc rpl_malloc" >>confdefs.h + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5 +$as_echo_n "checking for working memcmp... " >&6; } +if ${ac_cv_func_memcmp_working+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_memcmp_working=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Some versions of memcmp are not 8-bit clean. */ + char c0 = '\100', c1 = '\200', c2 = '\201'; + if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) + return 1; + + /* The Next x86 OpenStep bug shows up only when comparing 16 bytes + or more and with at least one buffer not starting on a 4-byte boundary. + William Lewis provided this test program. */ + { + char foo[21]; + char bar[21]; + int i; + for (i = 0; i < 4; i++) + { + char *a = foo + i; + char *b = bar + i; + strcpy (a, "--------01111111"); + strcpy (b, "--------10000000"); + if (memcmp (a, b, 16) >= 0) + return 1; + } + return 0; + } + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_memcmp_working=yes +else + ac_cv_func_memcmp_working=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5 +$as_echo "$ac_cv_func_memcmp_working" >&6; } +test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in + *" memcmp.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" + ;; +esac + + + + + + for ac_header in $ac_header_list +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + + +for ac_func in getpagesize +do : + ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" +if test "x$ac_cv_func_getpagesize" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETPAGESIZE 1 +_ACEOF + +fi +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 +$as_echo_n "checking for working mmap... " >&6; } +if ${ac_cv_func_mmap_fixed_mapped+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_mmap_fixed_mapped=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +/* malloc might have been renamed as rpl_malloc. */ +#undef malloc + +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the file system buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propagated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ + +#include +#include + +#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H +char *malloc (); +#endif + +/* This mess was copied from the GNU getpagesize.h. */ +#ifndef HAVE_GETPAGESIZE +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# ifdef HAVE_SYS_PARAM_H +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +int +main () +{ + char *data, *data2, *data3; + const char *cdata2; + int i, pagesize; + int fd, fd2; + + pagesize = getpagesize (); + + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) + return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) + return 2; + if (write (fd, data, pagesize) != pagesize) + return 3; + close (fd); + + /* Next, check that the tail of a page is zero-filled. File must have + non-zero length, otherwise we risk SIGBUS for entire page. */ + fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); + if (fd2 < 0) + return 4; + cdata2 = ""; + if (write (fd2, cdata2, 1) != 1) + return 5; + data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); + if (data2 == MAP_FAILED) + return 6; + for (i = 0; i < pagesize; ++i) + if (*(data2 + i)) + return 7; + close (fd2); + if (munmap (data2, pagesize)) + return 8; + + /* Next, try to mmap the file at a fixed address which already has + something else allocated at it. If we can, also make sure that + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) + return 9; + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + return 10; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + return 11; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on + some variants of i386 svr4.0.) */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) + return 12; + if (read (fd, data3, pagesize) != pagesize) + return 13; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + return 14; + close (fd); + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_mmap_fixed_mapped=yes +else + ac_cv_func_mmap_fixed_mapped=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 +$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } +if test $ac_cv_func_mmap_fixed_mapped = yes; then + +$as_echo "#define HAVE_MMAP 1" >>confdefs.h + +fi +rm -f conftest.mmap conftest.txt + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 +$as_echo_n "checking return type of signal handlers... " >&6; } +if ${ac_cv_type_signal+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include + +int +main () +{ +return *(signal (0, 0)) (0) == 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_signal=int +else + ac_cv_type_signal=void +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 +$as_echo "$ac_cv_type_signal" >&6; } + +cat >>confdefs.h <<_ACEOF +#define RETSIGTYPE $ac_cv_type_signal +_ACEOF + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5 +$as_echo_n "checking whether stat accepts an empty string... " >&6; } +if ${ac_cv_func_stat_empty_string_bug+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_stat_empty_string_bug=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + return stat ("", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_stat_empty_string_bug=no +else + ac_cv_func_stat_empty_string_bug=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5 +$as_echo "$ac_cv_func_stat_empty_string_bug" >&6; } +if test $ac_cv_func_stat_empty_string_bug = yes; then + case " $LIBOBJS " in + *" stat.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS stat.$ac_objext" + ;; +esac + + +cat >>confdefs.h <<_ACEOF +#define HAVE_STAT_EMPTY_STRING_BUG 1 +_ACEOF + +fi + +ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" +if test "x$ac_cv_have_decl_strerror_r" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRERROR_R $ac_have_decl +_ACEOF + +for ac_func in strerror_r +do : + ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" +if test "x$ac_cv_func_strerror_r" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR_R 1 +_ACEOF + +fi +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 +$as_echo_n "checking whether strerror_r returns char *... " >&6; } +if ${ac_cv_func_strerror_r_char_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ac_cv_func_strerror_r_char_p=no + if test $ac_cv_have_decl_strerror_r = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + char *p = strerror_r (0, buf, sizeof buf); + return !p || x; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_func_strerror_r_char_p=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + else + # strerror_r is not declared. Choose between + # systems that have relatively inaccessible declarations for the + # function. BeOS and DEC UNIX 4.0 fall in this category, but the + # former has a strerror_r that returns char*, while the latter + # has a strerror_r that returns `int'. + # This test should segfault on the DEC system. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + extern char *strerror_r (); +int +main () +{ +char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + return ! isalpha (x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_strerror_r_char_p=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 +$as_echo "$ac_cv_func_strerror_r_char_p" >&6; } +if test $ac_cv_func_strerror_r_char_p = yes; then + +$as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h + +fi + +for ac_func in strftime +do : + ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" +if test "x$ac_cv_func_strftime" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRFTIME 1 +_ACEOF + +else + # strftime is in -lintl on SCO UNIX. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5 +$as_echo_n "checking for strftime in -lintl... " >&6; } +if ${ac_cv_lib_intl_strftime+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strftime (); +int +main () +{ +return strftime (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_intl_strftime=yes +else + ac_cv_lib_intl_strftime=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5 +$as_echo "$ac_cv_lib_intl_strftime" >&6; } +if test "x$ac_cv_lib_intl_strftime" = xyes; then : + $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h + +LIBS="-lintl $LIBS" +fi + +fi +done + +for ac_func in vprintf +do : + ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" +if test "x$ac_cv_func_vprintf" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VPRINTF 1 +_ACEOF + +ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" +if test "x$ac_cv_func__doprnt" = xyes; then : + +$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h + +fi + +fi +done + + +for ac_func in clock_gettime endpwent ftruncate getcwd gethostbyname inet_ntoa localtime_r memmove memset mkdir munmap putenv rmdir setrlimit socket strcasecmp strchr strcspn strdup strerror strncasecmp strpbrk strrchr strstr strtol tzset +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-debug" >&5 +$as_echo_n "checking for --enable-debug... " >&6; } +# Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + debug_defs="-g3 -DDEBUG -DMCC_DEBUG -O0" + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + debug_defs="" + +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-asan" >&5 +$as_echo_n "checking for --enable-asan... " >&6; } +# Check whether --enable-asan was given. +if test "${enable_asan+set}" = set; then : + enableval=$enable_asan; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + asan_defs="-fsanitize=address -fno-omit-frame-pointer" + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + asan_defs="" + +fi + + + if test "$enable_asan" = "yes"; then + enable_asan_TRUE= + enable_asan_FALSE='#' +else + enable_asan_TRUE='#' + enable_asan_FALSE= +fi + + + if test -f /usr/lib/rpm/redhat/redhat-hardened-cc1; then + RPM_HARDEND_CC_TRUE= + RPM_HARDEND_CC_FALSE='#' +else + RPM_HARDEND_CC_TRUE='#' + RPM_HARDEND_CC_FALSE= +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-gcc-security" >&5 +$as_echo_n "checking for --enable-gcc-security... " >&6; } +# Check whether --enable-gcc-security was given. +if test "${enable_gcc_security+set}" = set; then : + enableval=$enable_gcc_security; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + if test -z "$RPM_HARDEND_CC_TRUE"; then : + gccsec_defs="-Wall -Wp,-D_FORITY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -Werror=format-security -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 " +else + gccsec_defs="-Wall -Wp,-D_FORITY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -Werror=format-security" + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + gccsec_defs="" + +fi + + + +# Used for legacy style packaging where we bundle all of the dependencies. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-bundle" >&5 +$as_echo_n "checking for --enable-bundle... " >&6; } +# Check whether --enable-bundle was given. +if test "${enable_bundle+set}" = set; then : + enableval=$enable_bundle; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + bundle="1"; + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + bundle=""; + +fi + + if test "$bundle" = "1"; then + BUNDLE_TRUE= + BUNDLE_FALSE='#' +else + BUNDLE_TRUE='#' + BUNDLE_FALSE= +fi + + +# these enables are for optional or experimental features +if test -z "$enable_pam_passthru" ; then + enable_pam_passthru=yes # if not set on cmdline, set default +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-pam-passthru" >&5 +$as_echo_n "checking for --enable-pam-passthru... " >&6; } +# Check whether --enable-pam-passthru was given. +if test "${enable_pam_passthru+set}" = set; then : + enableval=$enable_pam_passthru; +fi + +if test "$enable_pam_passthru" = yes ; then + # check for pam header file used by plugins/pass_passthru/pam_ptimpl.c + ac_fn_c_check_header_mongrel "$LINENO" "security/pam_appl.h" "ac_cv_header_security_pam_appl_h" "$ac_includes_default" +if test "x$ac_cv_header_security_pam_appl_h" = xyes; then : + +else + as_fn_error $? "Missing header file security/pam_appl.h" "$LINENO" 5 +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_PAM_PASSTHRU 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "$enable_pam_passthru" = "yes"; then + enable_pam_passthru_TRUE= + enable_pam_passthru_FALSE='#' +else + enable_pam_passthru_TRUE='#' + enable_pam_passthru_FALSE= +fi + + +if test -z "$enable_dna" ; then + enable_dna=yes # if not set on cmdline, set default +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-dna" >&5 +$as_echo_n "checking for --enable-dna... " >&6; } +# Check whether --enable-dna was given. +if test "${enable_dna+set}" = set; then : + enableval=$enable_dna; +fi + +if test "$enable_dna" = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_DNA 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "$enable_dna" = "yes"; then + enable_dna_TRUE= + enable_dna_FALSE='#' +else + enable_dna_TRUE='#' + enable_dna_FALSE= +fi + + +if test -z "$enable_ldapi" ; then + enable_ldapi=yes # if not set on cmdline, set default +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-ldapi" >&5 +$as_echo_n "checking for --enable-ldapi... " >&6; } +# Check whether --enable-ldapi was given. +if test "${enable_ldapi+set}" = set; then : + enableval=$enable_ldapi; +fi + +if test "$enable_ldapi" = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_LDAPI 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "$enable_ldapi" = "yes"; then + enable_ldapi_TRUE= + enable_ldapi_FALSE='#' +else + enable_ldapi_TRUE='#' + enable_ldapi_FALSE= +fi + + +if test -z "$enable_autobind" ; then + enable_autobind=no # if not set on cmdline, set default +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-autobind" >&5 +$as_echo_n "checking for --enable-autobind... " >&6; } +# Check whether --enable-autobind was given. +if test "${enable_autobind+set}" = set; then : + enableval=$enable_autobind; +fi + +if test "$enable_ldapi" = yes -a "$enable_autobind" = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_AUTOBIND 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "$enable_autobind" = "yes"; then + enable_autobind_TRUE= + enable_autobind_FALSE='#' +else + enable_autobind_TRUE='#' + enable_autobind_FALSE= +fi + + +if test -z "$enable_auto_dn_suffix" ; then + enable_auto_dn_suffix=no # if not set on cmdline, set default +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-auto-dn-suffix" >&5 +$as_echo_n "checking for --enable-auto-dn-suffix... " >&6; } +# Check whether --enable-auto-dn-suffix was given. +if test "${enable_auto_dn_suffix+set}" = set; then : + enableval=$enable_auto_dn_suffix; +fi + +if test "$enable_ldapi" = yes -a "$enable_autobind" = yes -a "$enable_auto_dn_suffix" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_AUTO_DN_SUFFIX 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "$enable_auto_dn_suffix" = "yes"; then + enable_auto_dn_suffix_TRUE= + enable_auto_dn_suffix_FALSE='#' +else + enable_auto_dn_suffix_TRUE='#' + enable_auto_dn_suffix_FALSE= +fi + + +if test -z "$enable_bitwise" ; then + enable_bitwise=yes # if not set on cmdline, set default +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-bitwise" >&5 +$as_echo_n "checking for --enable-bitwise... " >&6; } +# Check whether --enable-bitwise was given. +if test "${enable_bitwise+set}" = set; then : + enableval=$enable_bitwise; +fi + +if test "$enable_bitwise" = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_BITWISE 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "$enable_bitwise" = "yes"; then + enable_bitwise_TRUE= + enable_bitwise_FALSE='#' +else + enable_bitwise_TRUE='#' + enable_bitwise_FALSE= +fi + + +if test -z "$enable_presence" ; then + enable_presence=no # if not set on cmdline, set default +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-presence" >&5 +$as_echo_n "checking for --enable-presence... " >&6; } +# Check whether --enable-presence was given. +if test "${enable_presence+set}" = set; then : + enableval=$enable_presence; +fi + +if test "$enable_presence" = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_PRESENCE 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "$enable_presence" = "yes"; then + enable_presence_TRUE= + enable_presence_FALSE='#' +else + enable_presence_TRUE='#' + enable_presence_FALSE= +fi + + +if test -z "$enable_acctpolicy" ; then + enable_acctpolicy=yes # if not set on cmdline, set default +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-acctpolicy" >&5 +$as_echo_n "checking for --enable-acctpolicy... " >&6; } +# Check whether --enable-acctpolicy was given. +if test "${enable_acctpolicy+set}" = set; then : + enableval=$enable_acctpolicy; +fi + +if test "$enable_acctpolicy" = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_ACCTPOLICY 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "$enable_acctpolicy" = "yes"; then + enable_acctpolicy_TRUE= + enable_acctpolicy_FALSE='#' +else + enable_acctpolicy_TRUE='#' + enable_acctpolicy_FALSE= +fi + + +if test -z "$enable_posix_winsync" ; then + enable_posix_winsync=yes # if not set on cmdline, set default +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-posix-winsync" >&5 +$as_echo_n "checking for --enable-posix-winsync... " >&6; } +# Check whether --enable-posix_winsync was given. +if test "${enable_posix_winsync+set}" = set; then : + enableval=$enable_posix_winsync; +fi + +if test "$enable_posix_winsync" = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_POSIX_WINSYNC 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "$enable_posix_winsync" = "yes"; then + enable_posix_winsync_TRUE= + enable_posix_winsync_FALSE='#' +else + enable_posix_winsync_TRUE='#' + enable_posix_winsync_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-nunc-stans" >&5 +$as_echo_n "checking for --enable-nunc-stans... " >&6; } +# Check whether --enable-nunc_stans was given. +if test "${enable_nunc_stans+set}" = set; then : + enableval=$enable_nunc_stans; +fi + +if test "$enable_nunc_stans" = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_NUNC_STANS 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "$enable_nunc_stans" = "yes"; then + enable_nunc_stans_TRUE= + enable_nunc_stans_FALSE='#' +else + enable_nunc_stans_TRUE='#' + enable_nunc_stans_FALSE= +fi + + +# the default prefix - override with --prefix or --with-fhs + + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2006 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FHS..." >&5 +$as_echo "$as_me: checking for FHS..." >&6;} + +# check for --with-fhs +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-fhs" >&5 +$as_echo_n "checking for --with-fhs... " >&6; } + +# Check whether --with-fhs was given. +if test "${with_fhs+set}" = set; then : + withval=$with_fhs; + with_fhs=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "$with_fhs" = "yes"; then + +$as_echo "#define IS_FHS 1" >>confdefs.h + +fi + +# check for --with-fhs-opt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-fhs-opt" >&5 +$as_echo_n "checking for --with-fhs-opt... " >&6; } + +# Check whether --with-fhs-opt was given. +if test "${with_fhs_opt+set}" = set; then : + withval=$with_fhs_opt; + with_fhs_opt=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "$with_fhs_opt" = "yes"; then + +$as_echo "#define IS_FHS_OPT 1" >>confdefs.h + +fi + +if test "$with_fhs" = "yes" -a "$with_fhs_opt" = "yes"; then + as_fn_error $? "Can't set both --with-fhs and --with-fhs-opt. Please only use one of these options." "$LINENO" 5 +fi + + +localrundir='/run' + +# installation paths - by default, we store everything +# under the prefix. The with-fhs option will use /usr, +# /etc, and /var. The with-fhs-opt option will use the +# prefix, but it's sysconfdir and localstatedir will be +# /etc/opt, and /var/opt. +if test "$with_fhs_opt" = "yes"; then + # Override sysconfdir and localstatedir if FHS optional + # package was requested. + prefixdir=$prefix + sysconfdir='/etc/opt' + localstatedir='/var/opt' + localrundir='/var/opt/run' + # relative to datadir + sampledatadir=/data + # relative to datadir + scripttemplatedir=/script-templates + # relative to datadir + updatedir=/updates + # relative to libdir + serverdir= + # relative to includedir + serverincdir= + # relative to libdir + serverplugindir=/plugins + # relative to datadir + infdir=/inf + # relative to datadir + mibdir=/mibs + # location of property/resource files, relative to datadir + propertydir=/properties + # relative to libdir + perldir=/perl + # relative to libdir + pythondir=/python +else + if test "$with_fhs" = "yes"; then + ac_default_prefix=/usr + prefix=$ac_default_prefix + exec_prefix=$prefix + sysconfdir='/etc' + localstatedir='/var' + localrundir='/run' + fi + prefixdir=$prefix + # relative to datadir + sampledatadir=/$PACKAGE_NAME/data + # relative to datadir + scripttemplatedir=/$PACKAGE_NAME/script-templates + # relative to datadir + updatedir=/$PACKAGE_NAME/updates + # relative to libdir + serverdir=/$PACKAGE_NAME + # relative to includedir + serverincdir=/$PACKAGE_NAME + # relative to libdir + serverplugindir=/$PACKAGE_NAME/plugins + # relative to datadir + infdir=/$PACKAGE_NAME/inf + # relative to datadir + mibdir=/$PACKAGE_NAME/mibs + # location of property/resource files, relative to datadir + propertydir=/$PACKAGE_NAME/properties + # relative to libdir + perldir=/$PACKAGE_NAME/perl + # relative to libdir + pythondir=/$PACKAGE_NAME/python +fi + +# if mandir is the default value, override it +# otherwise, the user must have set it - just use it +if test X"$mandir" = X'${prefix}/man' ; then + mandir='$(datadir)/man' +fi + +# Shared paths for all layouts +# relative to sysconfdir +configdir=/$PACKAGE_NAME/config +# relative to sysconfdir +schemadir=/$PACKAGE_NAME/schema + +# default user, group +defaultuser=dirsrv +defaultgroup=dirsrv + +if test -z "$with_tmpfiles_d" ; then + if test -d $sysconfdir/tmpfiles.d ; then + with_tmpfiles_d='$(sysconfdir)/tmpfiles.d' + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-tmpfiles-d" >&5 +$as_echo_n "checking for --with-tmpfiles-d... " >&6; } + +# Check whether --with-tmpfiles-d was given. +if test "${with_tmpfiles_d+set}" = set; then : + withval=$with_tmpfiles_d; +fi + +if test "$with_tmpfiles_d" = yes ; then + as_fn_error $? "You must specify --with-tmpfiles-d=/full/path/to/tmpfiles.d directory" "$LINENO" 5 +elif test "$with_tmpfiles_d" = no ; then + with_tmpfiles_d= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_tmpfiles_d" >&5 +$as_echo "$with_tmpfiles_d" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-perldir" >&5 +$as_echo_n "checking for --with-perldir... " >&6; } + +# Check whether --with-perldir was given. +if test "${with_perldir+set}" = set; then : + withval=$with_perldir; +fi + +if test -n "$with_perldir"; then + if test "$with_perldir" = yes ; then + as_fn_error $? "You must specify --with-perldir=/full/path/to/perl" "$LINENO" 5 + elif test "$with_perldir" = no ; then + with_perldir= + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_perldir" >&5 +$as_echo "$with_perldir" >&6; } + fi +else + with_perldir= +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-pythonexec" >&5 +$as_echo_n "checking for --with-pythonexec... " >&6; } + +# Check whether --with-pythonexec was given. +if test "${with_pythonexec+set}" = set; then : + withval=$with_pythonexec; +fi + +if test -n "$with_pythonexec"; then + if test "$with_pythonexec" = yes ; then + as_fn_error $? "You must specify --with-pythonexec=/full/path/to/python" "$LINENO" 5 + elif test "$with_pythonexec" = no ; then + with_pythonexec=/usr/bin/python2 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_pythonexec" >&5 +$as_echo "$with_pythonexec" >&6; } + fi +else + with_pythonexec=/usr/bin/python2 +fi + + + + + + + + + + + + + + + + + + + + +# check for --with-instconfigdir +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-instconfigdir" >&5 +$as_echo_n "checking for --with-instconfigdir... " >&6; } + +# Check whether --with-instconfigdir was given. +if test "${with_instconfigdir+set}" = set; then : + withval=$with_instconfigdir; + if test $withval = yes ; then + as_fn_error $? "Please specify a full path with --with-instconfigdir" "$LINENO" 5 + fi + instconfigdir="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +$as_echo "$withval" >&6; } + +else + + instconfigdir='$(sysconfdir)/$(PACKAGE_NAME)' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi + + + +# WINNT should be true if building on Windows system not using +# cygnus, mingw, or the like and using cmd.exe as the shell + if false; then + WINNT_TRUE= + WINNT_FALSE='#' +else + WINNT_TRUE='#' + WINNT_FALSE= +fi + + +# Deal with platform dependent defines +# initdir is the location for the SysV init scripts - very heavily platform +# dependent and not specified in fhs or lsb +# and not used if systemd is used +initdir='$(sysconfdir)/rc.d' +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-initddir" >&5 +$as_echo_n "checking for --with-initddir... " >&6; } + +# Check whether --with-initddir was given. +if test "${with_initddir+set}" = set; then : + withval=$with_initddir; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +$as_echo "$withval" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi + + + if test -n "$with_initddir" -a "$with_initddir" != "no"; then + INITDDIR_TRUE= + INITDDIR_FALSE='#' +else + INITDDIR_TRUE='#' + INITDDIR_FALSE= +fi + +# on most platforms, we will just use perl from PATH +# On some platforms, we cannot. Why not just use any old +# perl? Because of perldap. We use a perldap that is +# compiled to either 32bit or 64bit, so we must use a native +# perl binary compiled with the same bitsize. On Solaris +# and HP-UX, /usr/bin/perl is 32 bit, so we cannot use +# those with our 64 bit compiled product. +if test -n "$with_perldir"; then + perlexec="$with_perldir/perl" +else + perlexec='/usr/bin/env perl' +fi + +# This will let us change over the python version easier in the future. +if test -n "$with_pythonexec"; then + pythonexec="$with_pythonexec" +else + pythonexec='/usr/bin/env python2' +fi + +# we use stty in perl scripts to disable password echo +# this doesn't work unless the full absolute path of the +# stty command is used e.g. system("stty -echo") does not +# work but system("/bin/stty -echo") does work +# since the path of stty may not be the same on all +# platforms, we set the default here to /bin/stty and +# allow that value to be overridden in the platform +# specific section below +sttyexec=/bin/stty +case $host in + *-*-linux*) + +$as_echo "#define Linux 1" >>confdefs.h + + +$as_echo "#define LINUX 1" >>confdefs.h + + +$as_echo "#define LINUX2_0 1" >>confdefs.h + + +$as_echo "#define LINUX2_2 1" >>confdefs.h + + +$as_echo "#define LINUX2_4 1" >>confdefs.h + + +$as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + platform="linux" + initdir='$(sysconfdir)/rc.d/init.d' + # do arch specific linux stuff here + case $host in + i*86-*-linux*) + +$as_echo "#define CPU_x86 /**/" >>confdefs.h + + +$as_echo "#define ATOMIC_64BIT_OPERATIONS 1" >>confdefs.h + + ;; + x86_64-*-linux*) + +$as_echo "#define CPU_x86_64 /**/" >>confdefs.h + + +$as_echo "#define ATOMIC_64BIT_OPERATIONS 1" >>confdefs.h + + ;; + aarch64-*-linux*) + +$as_echo "#define CPU_arm /**/" >>confdefs.h + + ;; + arm*-linux*) + +$as_echo "#define CPU_arm /**/" >>confdefs.h + + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCC provided 64-bit atomic bool cas function ..." >&5 +$as_echo_n "checking for GCC provided 64-bit atomic bool cas function ...... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +long long ptrval = 0, val = 0, newval = 1; (void)__sync_bool_compare_and_swap_8(&ptrval, val, newval); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +$as_echo "#define HAVE_64BIT_ATOMIC_CAS_FUNC 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCC provided 64-bit atomic ops functions ..." >&5 +$as_echo_n "checking for GCC provided 64-bit atomic ops functions ...... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +long long ptrval = 0, val = 0; (void)__sync_add_and_fetch_8(&ptrval, val); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +$as_echo "#define HAVE_64BIT_ATOMIC_OP_FUNCS 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + # some programs use the native thread library directly + THREADLIB=-lpthread + THREADLIB=$THREADLIB + + LIBCRYPT=-lcrypt + LIBCRYPT=$LIBCRYPT + + +$as_echo "#define USE_POSIX_RWLOCKS 1" >>confdefs.h + + ;; + ia64-hp-hpux*) + +$as_echo "#define hpux 1" >>confdefs.h + + +$as_echo "#define HPUX 1" >>confdefs.h + + +$as_echo "#define HPUX11 1" >>confdefs.h + + +$as_echo "#define HPUX11_23 1" >>confdefs.h + + +$as_echo "#define CPU_ia64 /**/" >>confdefs.h + + +$as_echo "#define OS_hpux 1" >>confdefs.h + + +$as_echo "#define _POSIX_C_SOURCE 199506L" >>confdefs.h + + +$as_echo "#define _HPUX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _INCLUDE_STDC__SOURCE_199901 1" >>confdefs.h + + # assume 64 bit + perlexec='/opt/perl_64/bin/perl' + platform="hpux" + initconfigdir="/$PACKAGE_NAME/config" + # HPUX doesn't use /etc for this + initdir=/init.d + ;; + hppa*-hp-hpux*) + +$as_echo "#define hpux 1" >>confdefs.h + + +$as_echo "#define HPUX 1" >>confdefs.h + + +$as_echo "#define HPUX11 1" >>confdefs.h + + +$as_echo "#define HPUX11_11 1" >>confdefs.h + + +$as_echo "#define CPU_hppa /**/" >>confdefs.h + + +$as_echo "#define OS_hpux 1" >>confdefs.h + + +$as_echo "#define _POSIX_C_SOURCE 199506L" >>confdefs.h + + +$as_echo "#define _HPUX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _INCLUDE_STDC__SOURCE_199901 1" >>confdefs.h + + +$as_echo "#define ATOMIC_64BIT_OPERATIONS 1" >>confdefs.h + + # assume 64 bit + initconfigdir="/$PACKAGE_NAME/config" + perlexec='/opt/perl_64/bin/perl' + platform="hpux" + # HPUX doesn't use /etc for this + initdir=/init.d + ;; + *-*-solaris*) + +$as_echo "#define SVR4 1" >>confdefs.h + + +$as_echo "#define __svr4 1" >>confdefs.h + + +$as_echo "#define __svr4__ 1" >>confdefs.h + + +$as_echo "#define _SVID_GETTOD 1" >>confdefs.h + + +$as_echo "#define SOLARIS 1" >>confdefs.h + + +$as_echo "#define OS_solaris 1" >>confdefs.h + + +$as_echo "#define sunos5 1" >>confdefs.h + + +$as_echo "#define OSVERSION 509" >>confdefs.h + + +$as_echo "#define _REENTRANT 1" >>confdefs.h + + +$as_echo "#define NO_DOMAINNAME 1" >>confdefs.h + + LIBSOCKET=-lsocket + LIBSOCKET=$LIBSOCKET + + LIBNSL=-lnsl + LIBNSL=$LIBNSL + + LIBDL=-ldl + LIBDL=$LIBDL + + LIBCSTD=-lCstd + LIBCSTD=$LIBCSTD + + LIBCRUN=-lCrun + LIBCRUN=$LIBCRUN + + platform="solaris" + initdir='$(sysconfdir)/init.d' + case $host in + i?86-*-solaris2.1[0-9]*) + +$as_echo "#define HAVE_GETPEERUCRED 1" >>confdefs.h + + ;; + sparc-*-solaris*) + +$as_echo "#define ATOMIC_64BIT_OPERATIONS 1" >>confdefs.h + + +$as_echo "#define CPU_sparc /**/" >>confdefs.h + + TARGET='SPARC' + ;; + esac + ;; + *) + platform="" + ;; +esac + +# cmd line overrides default setting above +if test -n "$with_initddir" ; then + initdir="$with_initddir" +fi + +# sysv init scripts not used when systemd is used + + + + + +# set default initconfigdir if not already set +# value will be set so as to be relative to $(sysconfdir) +if test -z "$initconfigdir" ; then + if test -d /etc/sysconfig ; then + initconfigdir=/sysconfig + elif test -d /etc/default ; then + initconfigdir=/default + else + initconfigdir="/$PACKAGE_NAME/config" + fi +fi + + + if test "$platform" = "hpux"; then + HPUX_TRUE= + HPUX_FALSE='#' +else + HPUX_TRUE='#' + HPUX_FALSE= +fi + + if test "$platform" = "solaris"; then + SOLARIS_TRUE= + SOLARIS_FALSE='#' +else + SOLARIS_TRUE='#' + SOLARIS_FALSE= +fi + + +# Check for library dependencies +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2007 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NSPR..." >&5 +$as_echo "$as_me: checking for NSPR..." >&6;} + +# check for --with-nspr +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-nspr" >&5 +$as_echo_n "checking for --with-nspr... " >&6; } + +# Check whether --with-nspr was given. +if test "${with_nspr+set}" = set; then : + withval=$with_nspr; + if test "$withval" = "yes" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + elif test "$withval" = "no" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "NSPR is required." "$LINENO" 5 + elif test -e "$withval"/include/nspr.h -a -d "$withval"/lib + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + NSPRDIR=$withval + nspr_inc="-I$NSPRDIR/include" + nspr_lib="-L$NSPRDIR/lib" + nspr_libdir="$NSPRDIR/lib" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + + +# check for --with-nspr-inc +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-nspr-inc" >&5 +$as_echo_n "checking for --with-nspr-inc... " >&6; } + +# Check whether --with-nspr-inc was given. +if test "${with_nspr_inc+set}" = set; then : + withval=$with_nspr_inc; + if test -e "$withval"/nspr.h + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + nspr_inc="-I$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# check for --with-nspr-lib +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-nspr-lib" >&5 +$as_echo_n "checking for --with-nspr-lib... " >&6; } + +# Check whether --with-nspr-lib was given. +if test "${with_nspr_lib+set}" = set; then : + withval=$with_nspr_lib; + if test -d "$withval" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + nspr_lib="-L$withval" + nspr_libdir="$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# if NSPR is not found yet, try pkg-config + +# last resort +if test -z "$nspr_inc" -o -z "$nspr_lib" -o -z "$nspr_libdir"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nspr with pkg-config" >&5 +$as_echo_n "checking for nspr with pkg-config... " >&6; } + if test -n "$PKG_CONFIG"; then + if $PKG_CONFIG --exists nspr; then + nspr_inc=`$PKG_CONFIG --cflags-only-I nspr` + nspr_lib=`$PKG_CONFIG --libs-only-L nspr` + nspr_libdir=`$PKG_CONFIG --libs-only-L nspr | sed -e s/-L// | sed -e s/\ .*$//` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using system NSPR" >&5 +$as_echo "using system NSPR" >&6; } + elif $PKG_CONFIG --exists dirsec-nspr; then + nspr_inc=`$PKG_CONFIG --cflags-only-I dirsec-nspr` + nspr_lib=`$PKG_CONFIG --libs-only-L dirsec-nspr` + nspr_libdir=`$PKG_CONFIG --libs-only-L dirsec-nspr | sed -e s/-L// | sed -e s/\ .*$//` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using system dirsec NSPR" >&5 +$as_echo "using system dirsec NSPR" >&6; } + else + as_fn_error $? "NSPR not found, specify with --with-nspr." "$LINENO" 5 + fi + fi +fi + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2007 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NSS..." >&5 +$as_echo "$as_me: checking for NSS..." >&6;} + +# check for --with-nss +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-nss" >&5 +$as_echo_n "checking for --with-nss... " >&6; } + +# Check whether --with-nss was given. +if test "${with_nss+set}" = set; then : + withval=$with_nss; + if test "$withval" = "yes" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + elif test "$withval" = "no" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "NSS is required." "$LINENO" 5 + elif test -e "$withval"/include/nss.h -a -d "$withval"/lib + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + NSSDIR=$withval + nss_inc="-I$NSSDIR/include" + nss_lib="-L$NSSDIR/lib" + nss_libdir="$NSSDIR/lib" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + + +# check for --with-nss-inc +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-nss-inc" >&5 +$as_echo_n "checking for --with-nss-inc... " >&6; } + +# Check whether --with-nss-inc was given. +if test "${with_nss_inc+set}" = set; then : + withval=$with_nss_inc; + if test -e "$withval"/nss.h + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + nss_inc="-I$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# check for --with-nss-lib +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-nss-lib" >&5 +$as_echo_n "checking for --with-nss-lib... " >&6; } + +# Check whether --with-nss-lib was given. +if test "${with_nss_lib+set}" = set; then : + withval=$with_nss_lib; + if test -d "$withval" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + nss_lib="-L$withval" + nss_libdir="$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# if NSS is not found yet, try pkg-config + +# last resort +if test -z "$nss_inc" -o -z "$nss_lib" -o -z "$nss_libdir"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nss with pkg-config" >&5 +$as_echo_n "checking for nss with pkg-config... " >&6; } + if test -n "$PKG_CONFIG"; then + if $PKG_CONFIG --exists nss; then + nss_inc=`$PKG_CONFIG --cflags-only-I nss` + nss_lib=`$PKG_CONFIG --libs-only-L nss` + nss_libdir=`$PKG_CONFIG --libs-only-L nss | sed -e s/-L// | sed -e s/\ .*$//` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using system NSS" >&5 +$as_echo "using system NSS" >&6; } + elif $PKG_CONFIG --exists dirsec-nss; then + nss_inc=`$PKG_CONFIG --cflags-only-I dirsec-nss` + nss_lib=`$PKG_CONFIG --libs-only-L dirsec-nss` + nss_libdir=`$PKG_CONFIG --libs-only-L dirsec-nss | sed -e s/-L// | sed -e s/\ .*$//` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using system dirsec NSS" >&5 +$as_echo "using system dirsec NSS" >&6; } + else + as_fn_error $? "NSS not found, specify with --with-nss." "$LINENO" 5 + fi + fi +fi + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2009 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenLDAP..." >&5 +$as_echo "$as_me: checking for OpenLDAP..." >&6;} + +# check for --with-openldap +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-openldap" >&5 +$as_echo_n "checking for --with-openldap... " >&6; } + +# Check whether --with-openldap was given. +if test "${with_openldap+set}" = set; then : + withval=$with_openldap; + if test "$withval" = yes + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using system OpenLDAP" >&5 +$as_echo "using system OpenLDAP" >&6; } + elif test "$withval" = no + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + elif test -e "$withval"/include/ldap.h -a -d "$withval"/lib + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + OPENLDAPDIR=$withval + openldap_incdir="$OPENLDAPDIR/include" + openldap_inc="-I$openldap_incdir" + openldap_lib="-L$OPENLDAPDIR/lib" + openldap_libdir="$OPENLDAPDIR/lib" + openldap_bindir="$OPENLDAPDIR/bin" + with_openldap=yes + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# check for --with-openldap-inc +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-openldap-inc" >&5 +$as_echo_n "checking for --with-openldap-inc... " >&6; } + +# Check whether --with-openldap-inc was given. +if test "${with_openldap_inc+set}" = set; then : + withval=$with_openldap_inc; + if test -e "$withval"/ldap.h + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + openldap_incdir="$withval" + openldap_inc="-I$withval" + with_openldap=yes + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# check for --with-openldap-lib +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-openldap-lib" >&5 +$as_echo_n "checking for --with-openldap-lib... " >&6; } + +# Check whether --with-openldap-lib was given. +if test "${with_openldap_lib+set}" = set; then : + withval=$with_openldap_lib; + if test -d "$withval" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + openldap_lib="-L$withval" + openldap_libdir="$withval" + with_openldap=yes + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# check for --with-openldap-bin +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-openldap-bin" >&5 +$as_echo_n "checking for --with-openldap-bin... " >&6; } + +# Check whether --with-openldap-bin was given. +if test "${with_openldap_bin+set}" = set; then : + withval=$with_openldap_bin; + if test -d "$withval" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + openldap_bindir="$withval" + with_openldap=yes + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# if OPENLDAP is not found yet, try pkg-config + +if test "$with_openldap" = yes ; then # user wants to use openldap, but didn't specify paths + if test -z "$openldap_inc" -o -z "$openldap_lib" -o -z "$openldap_libdir" -o -z "$openldap_bindir"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenLDAP with pkg-config" >&5 +$as_echo_n "checking for OpenLDAP with pkg-config... " >&6; } + if test -n "$PKG_CONFIG" && $PKG_CONFIG --exists openldap; then + openldap_inc=`$PKG_CONFIG --cflags-only-I openldap` + openldap_lib=`$PKG_CONFIG --libs-only-L openldap` + openldap_libdir=`$PKG_CONFIG --libs-only-L openldap | sed -e s/-L// | sed -e s/\ .*$//` + openldap_bindir=`$PKG_CONFIG --variable=bindir openldap` + openldap_incdir=`$PKG_CONFIG --variable=includedir openldap` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using system OpenLDAP from pkg-config" >&5 +$as_echo "using system OpenLDAP from pkg-config" >&6; } + else + openldap_incdir="/usr/include" + openldap_inc="-I$openldap_incdir" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no OpenLDAP pkg-config files" >&5 +$as_echo "no OpenLDAP pkg-config files" >&6; } + fi + fi +fi + + +if test "$with_openldap" = yes ; then + save_cppflags="$CPPFLAGS" + CPPFLAGS="$openldap_inc $nss_inc $nspr_inc" + ac_fn_c_check_header_mongrel "$LINENO" "ldap_features.h" "ac_cv_header_ldap_features_h" "$ac_includes_default" +if test "x$ac_cv_header_ldap_features_h" = xyes; then : + +else + as_fn_error $? "specified with-openldap but ldap_features.h not found" "$LINENO" 5 +fi + + + ol_ver_maj=`grep LDAP_VENDOR_VERSION_MAJOR $openldap_incdir/ldap_features.h | awk '{print $3}'` + ol_ver_min=`grep LDAP_VENDOR_VERSION_MINOR $openldap_incdir/ldap_features.h | awk '{print $3}'` + ol_ver_pat=`grep LDAP_VENDOR_VERSION_PATCH $openldap_incdir/ldap_features.h | awk '{print $3}'` + ol_libver="-${ol_ver_maj}.${ol_ver_min}" + save_ldflags="$LDFLAGS" + LDFLAGS="$openldap_lib $LDFLAGS" + as_ac_Lib=`$as_echo "ac_cv_lib_ldap$ol_libver''_ldap_initialize" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_initialize in -lldap$ol_libver" >&5 +$as_echo_n "checking for ldap_initialize in -lldap$ol_libver... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldap$ol_libver $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ldap_initialize (); +int +main () +{ +return ldap_initialize (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + have_ldap_lib=1 +fi + + if test -z "$have_ldap_lib" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_initialize in -lldap" >&5 +$as_echo_n "checking for ldap_initialize in -lldap... " >&6; } +if ${ac_cv_lib_ldap_ldap_initialize+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldap $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ldap_initialize (); +int +main () +{ +return ldap_initialize (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ldap_ldap_initialize=yes +else + ac_cv_lib_ldap_ldap_initialize=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ldap_ldap_initialize" >&5 +$as_echo "$ac_cv_lib_ldap_ldap_initialize" >&6; } +if test "x$ac_cv_lib_ldap_ldap_initialize" = xyes; then : + unset ol_libver +else + as_fn_error $? "specified with-openldap but libldap not found" "$LINENO" 5 +fi + + fi + as_ac_Lib=`$as_echo "ac_cv_lib_ldap$ol_libver''_ldap_url_parse_ext" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_url_parse_ext in -lldap$ol_libver" >&5 +$as_echo_n "checking for ldap_url_parse_ext in -lldap$ol_libver... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldap$ol_libver $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ldap_url_parse_ext (); +int +main () +{ +return ldap_url_parse_ext (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + +$as_echo "#define HAVE_LDAP_URL_PARSE_EXT 1" >>confdefs.h + +fi + + ldap_lib_ldif="" + LDFLAGS="$LDFLAGS -lldap$ol_libver" + as_ac_Lib=`$as_echo "ac_cv_lib_ldif$ol_libver''__init" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _init in -lldif$ol_libver" >&5 +$as_echo_n "checking for _init in -lldif$ol_libver... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldif$ol_libver $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char _init (); +int +main () +{ +return _init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ldap_lib_ldif=-lldif$ol_libver +else + ldap_lib_ldif= +fi + + + LDFLAGS="$save_ldflags" + CPPFLAGS="$save_cppflags" + + +$as_echo "#define USE_OPENLDAP 1" >>confdefs.h + + # where to find ldapsearch, et. al. + ldaptool_bindir=$openldap_bindir + # default options to pass to the tools + # use -x because all of our scripts use simple bind + ldaptool_opts=-x + # get plain output from ldapsearch - no version, no comments + plainldif_opts=-LLL +fi + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2007 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mozilla LDAPSDK..." >&5 +$as_echo "$as_me: checking for Mozilla LDAPSDK..." >&6;} + +# check for --with-ldapsdk +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-ldapsdk" >&5 +$as_echo_n "checking for --with-ldapsdk... " >&6; } + +# Check whether --with-ldapsdk was given. +if test "${with_ldapsdk+set}" = set; then : + withval=$with_ldapsdk; + if test "$withval" = yes + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + elif test "$withval" = no + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + elif test -e "$withval"/include/ldap.h -a -d "$withval"/lib + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + LDAPSDKDIR=$withval + ldapsdk_inc="-I$LDAPSDKDIR/include" + ldapsdk_lib="-L$LDAPSDKDIR/lib" + ldapsdk_libdir="$LDAPSDKDIR/lib" + ldapsdk_bindir="$LDAPSDKDIR/bin" + with_ldapsdk=yes + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + + if test "$with_ldapsdk" = yes -a "$with_openldap" = yes + then + as_fn_error $? "Cannot use both LDAPSDK and OpenLDAP." "$LINENO" 5 + fi + if test "$with_ldapsdk" != yes -a "$with_openldap" != yes + then + as_fn_error $? "Either LDAPSDK or OpenLDAP must be used." "$LINENO" 5 + fi + +else + + if test "$with_openldap" = yes + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + with_ldapsdk=yes + fi + +fi + + +# check for --with-ldapsdk-inc +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-ldapsdk-inc" >&5 +$as_echo_n "checking for --with-ldapsdk-inc... " >&6; } + +# Check whether --with-ldapsdk-inc was given. +if test "${with_ldapsdk_inc+set}" = set; then : + withval=$with_ldapsdk_inc; + if test -e "$withval"/ldap.h + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + ldapsdk_inc="-I$withval" + with_ldapsdk=yes + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# check for --with-ldapsdk-lib +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-ldapsdk-lib" >&5 +$as_echo_n "checking for --with-ldapsdk-lib... " >&6; } + +# Check whether --with-ldapsdk-lib was given. +if test "${with_ldapsdk_lib+set}" = set; then : + withval=$with_ldapsdk_lib; + if test -d "$withval" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + ldapsdk_lib="-L$withval" + ldapsdk_libdir="$withval" + with_ldapsdk=yes + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# check for --with-ldapsdk-bin +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-ldapsdk-bin" >&5 +$as_echo_n "checking for --with-ldapsdk-bin... " >&6; } + +# Check whether --with-ldapsdk-bin was given. +if test "${with_ldapsdk_bin+set}" = set; then : + withval=$with_ldapsdk_bin; + if test -d "$withval" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + ldapsdk_bindir="$withval" + with_ldapsdk=yes + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# if LDAPSDK is not found yet, try pkg-config + +# last resort +if test "$with_ldapsdk" = yes ; then + if test -z "$ldapsdk_inc" -o -z "$ldapsdk_lib" -o -z "$ldapsdk_libdir" -o -z "$ldapsdk_bindir"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mozldap with pkg-config" >&5 +$as_echo_n "checking for mozldap with pkg-config... " >&6; } + if test -n "$PKG_CONFIG"; then + if $PKG_CONFIG --exists mozldap6; then + mozldappkg=mozldap6 + elif $PKG_CONFIG --exists mozldap; then + mozldappkg=mozldap + else + as_fn_error $? "LDAPSDK not found, specify with --with-ldapsdk-inc|-lib|-bin." "$LINENO" 5 + fi + ldapsdk_inc=`$PKG_CONFIG --cflags-only-I $mozldappkg` + ldapsdk_lib=`$PKG_CONFIG --libs-only-L $mozldappkg` + ldapsdk_libdir=`$PKG_CONFIG --libs-only-L $mozldappkg | sed -e s/-L// | sed -e s/\ .*$//` + ldapsdk_bindir=`$PKG_CONFIG --variable=bindir $mozldappkg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using system $mozldappkg" >&5 +$as_echo "using system $mozldappkg" >&6; } + fi + fi +fi + +if test "$with_ldapsdk" = yes ; then + if test -z "$ldapsdk_inc" -o -z "$ldapsdk_lib"; then + as_fn_error $? "LDAPSDK not found, specify with --with-ldapsdk-inc|-lib|-bin." "$LINENO" 5 + fi + if test -z "$ldapsdk_bindir" ; then + if -d $libdir/mozldap6 ; then + ldapsdk_bindir=$libdir/mozldap6 + else + ldapsdk_bindir=$libdir/mozldap + fi + fi + + save_cppflags="$CPPFLAGS" + CPPFLAGS="$ldapsdk_inc $nss_inc $nspr_inc" + ac_fn_c_check_header_compile "$LINENO" "ldap.h" "ac_cv_header_ldap_h" "#include +#if LDAP_VENDOR_VERSION < 600 +#error The LDAP C SDK version is not supported +#endif + +" +if test "x$ac_cv_header_ldap_h" = xyes; then : + isversion6=1 +else + isversion6= +fi + + + CPPFLAGS="$save_cppflags" + + if test -z "$isversion6" ; then + as_fn_error $? "The LDAPSDK version in $ldapsdk_inc/ldap-standard.h is not supported" "$LINENO" 5 + fi + +$as_echo "#define USE_MOZLDAP 1" >>confdefs.h + + +$as_echo "#define HAVE_LDAP_URL_PARSE_NO_DEFAULTS 1" >>confdefs.h + + # where to find ldapsearch, et. al. + ldaptool_bindir=$ldapsdk_bindir + # default options to pass to the tools + ldaptool_opts= + # get plain output from ldapsearch - no version + plainldif_opts=-1 +fi + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2007 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db..." >&5 +$as_echo "$as_me: checking for db..." >&6;} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-db" >&5 +$as_echo_n "checking for --with-db... " >&6; } + +# Check whether --with-db was given. +if test "${with_db+set}" = set; then : + withval=$with_db; + if test "$withval" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + elif test "$withval" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "db is required." "$LINENO" 5 + elif test -d "$withval"/include -a -d "$withval"/lib; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + DBDIR=$withval + db_lib="-L$DBDIR/lib" + db_libdir="$DBDIR/lib" + db_incdir="$DBDIR/include" + if ! test -e "$db_incdir/db.h" ; then + as_fn_error $? "$withval include dir not found" "$LINENO" 5 + fi + db_inc="-I$db_incdir" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + + +# check for --with-db-inc +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-db-inc" >&5 +$as_echo_n "checking for --with-db-inc... " >&6; } + +# Check whether --with-db-inc was given. +if test "${with_db_inc+set}" = set; then : + withval=$with_db_inc; + if test -e "$withval"/db.h + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + db_incdir="$withval" + db_inc="-I$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# check for --with-db-lib +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-db-lib" >&5 +$as_echo_n "checking for --with-db-lib... " >&6; } + +# Check whether --with-db-lib was given. +if test "${with_db_lib+set}" = set; then : + withval=$with_db_lib; + if test -d "$withval" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + db_lib="-L$withval" + db_libdir="$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test -z "$db_inc"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for db.h" >&5 +$as_echo_n "checking for db.h... " >&6; } + if test -f "/usr/include/db4/db.h"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using /usr/include/db4/db.h" >&5 +$as_echo "using /usr/include/db4/db.h" >&6; } + db_incdir="/usr/include/db4" + db_inc="-I/usr/include/db4" + db_lib='-L$(libdir)' + db_libdir='$(libdir)' + elif test -f "/usr/include/libdb/db.h"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using /usr/include/libdb/db.h" >&5 +$as_echo "using /usr/include/libdb/db.h" >&6; } + db_incdir="/usr/include/libdb" + db_inc="-I/usr/include/libdb" + db_lib='-L$(libdir)' + db_libdir='$(libdir)' + elif test -f "/usr/include/db.h"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using /usr/include/db.h" >&5 +$as_echo "using /usr/include/db.h" >&6; } + db_incdir="/usr/include" + db_inc="-I/usr/include" + db_lib='-L$(libdir)' + db_libdir='$(libdir)' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "db not found, specify with --with-db." "$LINENO" 5 + fi +fi + +db_ver_maj=`grep DB_VERSION_MAJOR $db_incdir/db.h | awk '{print $3}'` +db_ver_min=`grep DB_VERSION_MINOR $db_incdir/db.h | awk '{print $3}'` +db_ver_pat=`grep DB_VERSION_PATCH $db_incdir/db.h | awk '{print $3}'` +db_libver=${db_ver_maj}.${db_ver_min} +save_ldflags="$LDFLAGS" +LDFLAGS="$db_lib $LDFLAGS" +as_ac_Lib=`$as_echo "ac_cv_lib_db-$db_libver''_db_create" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_create in -ldb-$db_libver" >&5 +$as_echo_n "checking for db_create in -ldb-$db_libver... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldb-$db_libver $LIBNSL $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char db_create (); +int +main () +{ +return db_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + true +else + as_fn_error $? "$db_incdir/db.h is version $db_libver but libdb-$db_libver not found" "$LINENO" 5 +fi + +LDFLAGS="$save_ldflags" + +# if DB is not found yet, try pkg-config + +# last resort +# Although the other db_* variables are correctly assigned at this point, +# db_bindir needs to be set by pkg-config if possible (e.g., on 64-bit Solaris) +if test -n "$PKG_CONFIG"; then + if $PKG_CONFIG --exists db; then + db_bindir=`$PKG_CONFIG --variable=bindir db` + else + db_bindir=/usr/bin + fi +else + db_bindir=/usr/bin +fi + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2007 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# -*- tab-width: 4; -*- +# Configure paths for SASL + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SASL..." >&5 +$as_echo "$as_me: checking for SASL..." >&6;} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-sasl" >&5 +$as_echo_n "checking for --with-sasl... " >&6; } + +# Check whether --with-sasl was given. +if test "${with_sasl+set}" = set; then : + withval=$with_sasl; + if test "$withval" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + elif test "$withval" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "SASL is required." "$LINENO" 5 + + elif test -d "$withval" -a -d "$withval/lib" -a -d "$withval/include" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + + if test -f "$withval/include/sasl/sasl.h"; then + sasl_inc="-I$withval/include/sasl" + elif test -f "$withval/include/sasl.h"; then + sasl_inc="-I$withval/include" + else + as_fn_error $? "sasl.h not found" "$LINENO" 5 + fi + + sasl_lib="-L$withval/lib" + sasl_libdir="$withval/lib" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + as_fn_error $? "SASL not found in $withval" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-sasl-inc" >&5 +$as_echo_n "checking for --with-sasl-inc... " >&6; } + +# Check whether --with-sasl-inc was given. +if test "${with_sasl_inc+set}" = set; then : + withval=$with_sasl_inc; + if test -f "$withval"/sasl.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + sasl_inc="-I$withval" + else + echo + as_fn_error $? "$withval/sasl.h not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-sasl-lib" >&5 +$as_echo_n "checking for --with-sasl-lib... " >&6; } + +# Check whether --with-sasl-lib was given. +if test "${with_sasl_lib+set}" = set; then : + withval=$with_sasl_lib; + if test -d "$withval"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + sasl_lib="-L$withval" + sasl_libdir="$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test -z "$sasl_inc"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sasl.h" >&5 +$as_echo_n "checking for sasl.h... " >&6; } + if test -f /usr/include/sasl/sasl.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using /usr/include/sasl/sasl.h" >&5 +$as_echo "using /usr/include/sasl/sasl.h" >&6; } + sasl_inc="-I/usr/include/sasl" + elif test -f /usr/include/sasl.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using /usr/include/sasl.h" >&5 +$as_echo "using /usr/include/sasl.h" >&6; } + sasl_inc="-I/usr/include" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "SASL not found, specify with --with-sasl." "$LINENO" 5 + fi +fi + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2007 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# +# Configure paths for SVRCORE + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SVRCORE..." >&5 +$as_echo "$as_me: checking for SVRCORE..." >&6;} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-svrcore" >&5 +$as_echo_n "checking for --with-svrcore... " >&6; } + +# Check whether --with-svrcore was given. +if test "${with_svrcore+set}" = set; then : + withval=$with_svrcore; + if test "$withval" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + elif test "$withval" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "SVRCORE is required." "$LINENO" 5 + + elif test -d "$withval" -a -d "$withval/lib" -a -d "$withval/include" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + + if test -f "$withval/include/svrcore.h"; then + svrcore_inc="-I$withval/include" + else + as_fn_error $? "svrcore.h not found" "$LINENO" 5 + fi + + svrcore_lib="-L$withval/lib" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + as_fn_error $? "SVRCORE not found in $withval" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-svrcore-inc" >&5 +$as_echo_n "checking for --with-svrcore-inc... " >&6; } + +# Check whether --with-svrcore-inc was given. +if test "${with_svrcore_inc+set}" = set; then : + withval=$with_svrcore_inc; + if test -f "$withval"/svrcore.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + svrcore_inc="-I$withval" + else + echo + as_fn_error $? "$withval/svrcore.h not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-svrcore-lib" >&5 +$as_echo_n "checking for --with-svrcore-lib... " >&6; } + +# Check whether --with-svrcore-lib was given. +if test "${with_svrcore_lib+set}" = set; then : + withval=$with_svrcore_lib; + if test -d "$withval"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + svrcore_lib="-L$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test -z "$svrcore_inc" -o -z "$svrcore_lib"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SVRCORE with pkg-config" >&5 +$as_echo_n "checking for SVRCORE with pkg-config... " >&6; } + if test -n "$PKG_CONFIG"; then + if $PKG_CONFIG --exists svrcore; then + svrcore_inc=`$PKG_CONFIG --cflags-only-I svrcore` + svrcore_lib=`$PKG_CONFIG --libs-only-L svrcore` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using system svrcore" >&5 +$as_echo "using system svrcore" >&6; } + fi + fi +fi + +if test -z "$svrcore_inc" -o -z "$svrcore_lib"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SVRCORE_GetRegisteredPinObj in -lsvrcore" >&5 +$as_echo_n "checking for SVRCORE_GetRegisteredPinObj in -lsvrcore... " >&6; } +if ${ac_cv_lib_svrcore_SVRCORE_GetRegisteredPinObj+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvrcore $nss_inc $nspr_inc $nss_lib -lnss3 -lsoftokn3 $nspr_lib -lplds4 -lplc4 -lnspr4 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char SVRCORE_GetRegisteredPinObj (); +int +main () +{ +return SVRCORE_GetRegisteredPinObj (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svrcore_SVRCORE_GetRegisteredPinObj=yes +else + ac_cv_lib_svrcore_SVRCORE_GetRegisteredPinObj=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svrcore_SVRCORE_GetRegisteredPinObj" >&5 +$as_echo "$ac_cv_lib_svrcore_SVRCORE_GetRegisteredPinObj" >&6; } +if test "x$ac_cv_lib_svrcore_SVRCORE_GetRegisteredPinObj" = xyes; then : + havesvrcore=1 +fi + + if test -n "$havesvrcore" ; then + save_cppflags="$CPPFLAGS" + CPPFLAGS="$nss_inc $nspr_inc" + ac_fn_c_check_header_mongrel "$LINENO" "svrcore.h" "ac_cv_header_svrcore_h" "$ac_includes_default" +if test "x$ac_cv_header_svrcore_h" = xyes; then : + havesvrcore=1 +else + havesvrcore= +fi + + + CPPFLAGS="$save_cppflags" + fi + if test -z "$havesvrcore" ; then + as_fn_error $? "SVRCORE not found, specify with --with-svrcore." "$LINENO" 5 + fi +fi + +if test -z "$svrcore_inc" -o -z "$svrcore_lib"; then + if test -f /usr/include/svrcore.h; then + svrcore_inc="-I/usr/include" + svrcore_lib="-L/usr/lib" + else + as_fn_error $? "SVRCORE not found, specify with --with-svrcore." "$LINENO" 5 + fi +fi + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2006 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBICU..." >&5 +$as_echo "$as_me: checking for LIBICU..." >&6;} + +# check for --with-icu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-icu" >&5 +$as_echo_n "checking for --with-icu... " >&6; } + +# Check whether --with-icu was given. +if test "${with_icu+set}" = set; then : + withval=$with_icu; + if test "$withval" = "yes" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + elif test "$withval" = "no" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "ICU is required." "$LINENO" 5 + elif test -d "$withval"/lib + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + ICUDIR=$withval + icu_lib="-L$ICUDIR/lib" + icu_inc="-I$withval/include" + icu_bin="$withval/bin" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + + +# check for --with-icu-inc +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-icu-inc" >&5 +$as_echo_n "checking for --with-icu-inc... " >&6; } + +# Check whether --with-icu-inc was given. +if test "${with_icu_inc+set}" = set; then : + withval=$with_icu_inc; + if test -d "$withval" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + icu_inc="-I$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# check for --with-icu-lib +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-icu-lib" >&5 +$as_echo_n "checking for --with-icu-lib... " >&6; } + +# Check whether --with-icu-lib was given. +if test "${with_icu_lib+set}" = set; then : + withval=$with_icu_lib; + if test -d "$withval" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + icu_lib="-L$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# check for --with-icu-bin +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-icu-bin" >&5 +$as_echo_n "checking for --with-icu-bin... " >&6; } + +# Check whether --with-icu-bin was given. +if test "${with_icu_bin+set}" = set; then : + withval=$with_icu_bin; + if test -d "$withval" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + icu_bin="$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +# if ICU is not found yet, try pkg-config + +# last resort +if test -z "$icu_lib"; then + # Extract the first word of "icu-config", so it can be a program name with args. +set dummy icu-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ICU_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ICU_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ICU_CONFIG="$ICU_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ICU_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ICU_CONFIG=$ac_cv_path_ICU_CONFIG +if test -n "$ICU_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ICU_CONFIG" >&5 +$as_echo "$ICU_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icu with icu-config" >&5 +$as_echo_n "checking for icu with icu-config... " >&6; } + if test -n "$ICU_CONFIG"; then + icu_lib=`$ICU_CONFIG --ldflags-searchpath` + icu_inc=`$ICU_CONFIG --cppflags-searchpath` + icu_bin=`$ICU_CONFIG --bindir` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using system ICU" >&5 +$as_echo "using system ICU" >&6; } + else + as_fn_error $? "ICU not found, specify with --with-icu." "$LINENO" 5 + fi +fi + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2006 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Net-SNMP..." >&5 +$as_echo "$as_me: checking for Net-SNMP..." >&6;} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-netsnmp" >&5 +$as_echo_n "checking for --with-netsnmp... " >&6; } + +# Check whether --with-netsnmp was given. +if test "${with_netsnmp+set}" = set; then : + withval=$with_netsnmp; + if test "$withval" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + elif test "$withval" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Net-SNMP is required." "$LINENO" 5 + elif test -d "$withval" -a -d "$withval/lib" -a -d "$withval/include"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + NETSNMPDIR=$withval + + if test -f "$withval/include/net-snmp/net-snmp-includes.h"; then + netsnmp_inc="-I$withval/include" + else + as_fn_error $? "net-snmp-config.h not found" "$LINENO" 5 + fi + + netsnmp_lib="-L$withval/lib" + netsnmp_libdir="$withval/lib" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-netsnmp-inc" >&5 +$as_echo_n "checking for --with-netsnmp-inc... " >&6; } + +# Check whether --with-netsnmp-inc was given. +if test "${with_netsnmp_inc+set}" = set; then : + withval=$with_netsnmp_inc; + if test -f "$withval/net-snmp/net-snmp-includes.h"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + netsnmp_inc="-I$withval" + else + echo + as_fn_error $? "$withval/net-snmp/net-snmp-includes.h not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-netsnmp-lib" >&5 +$as_echo_n "checking for --with-netsnmp-lib... " >&6; } + +# Check whether --with-netsnmp-lib was given. +if test "${with_netsnmp_lib+set}" = set; then : + withval=$with_netsnmp_lib; + if test -d "$withval" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + netsnmp_lib="-L$withval" + netsnmp_libdir="$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test -z "$netsnmp_inc" -o -z "$netsnmp_lib"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for net-snmp-includes.h" >&5 +$as_echo_n "checking for net-snmp-includes.h... " >&6; } + if test -f /usr/include/net-snmp/net-snmp-includes.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using /usr/include/net-snmp/net-snmp-includes.h" >&5 +$as_echo "using /usr/include/net-snmp/net-snmp-includes.h" >&6; } + netsnmp_inc="-I/usr/include" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "net-snmp not found, specify with --with-netsnmp." "$LINENO" 5 + fi +fi + +if test -n "$netsnmp_inc"; then + if test -x "$NETSNMPDIR/bin/net-snmp-config"; then + NETSNMP_CONFIG=$NETSNMPDIR/bin/net-snmp-config + else + # Extract the first word of "net-snmp-config", so it can be a program name with args. +set dummy net-snmp-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_NETSNMP_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $NETSNMP_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_NETSNMP_CONFIG="$NETSNMP_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_NETSNMP_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NETSNMP_CONFIG=$ac_cv_path_NETSNMP_CONFIG +if test -n "$NETSNMP_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NETSNMP_CONFIG" >&5 +$as_echo "$NETSNMP_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + + if test -n "$NETSNMP_CONFIG"; then + netsnmp_link=`$NETSNMP_CONFIG --agent-libs` + else + as_fn_error $? "net-snmp-config not found, specify with --with-netsnmp." "$LINENO" 5 + fi +else + as_fn_error $? "Net-SNMP not found, specify with --with-netsnmp." "$LINENO" 5 +fi + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2008 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# -*- tab-width: 4; -*- +# Configure paths for Kerberos + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos..." >&5 +$as_echo "$as_me: checking for Kerberos..." >&6;} + +if test -z "$with_kerberos" ; then + with_kerberos=yes # if not set on cmdline, set default +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-kerberos" >&5 +$as_echo_n "checking for --with-kerberos... " >&6; } + +# Check whether --with-kerberos was given. +if test "${with_kerberos+set}" = set; then : + withval=$with_kerberos; + if test "x$withval" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + elif test "x$withval" = "xno"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + with_kerberos= + elif test -d "$withval" -a -d "$withval/lib" -a -d "$withval/include" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + kerberos_incdir="$withval/include" + kerberos_libdir="$withval/lib" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + as_fn_error $? "kerberos not found in $withval" "$LINENO" 5 + fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + with_kerberos= + + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-kerberos-inc" >&5 +$as_echo_n "checking for --with-kerberos-inc... " >&6; } + +# Check whether --with-kerberos-inc was given. +if test "${with_kerberos_inc+set}" = set; then : + withval=$with_kerberos_inc; + if test -f "$withval"/krb5.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + kerberos_incdir="$withval" + with_kerberos=yes # implies use of kerberos + else + echo + as_fn_error $? "$withval/krb5.h not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-kerberos-lib" >&5 +$as_echo_n "checking for --with-kerberos-lib... " >&6; } + +# Check whether --with-kerberos-lib was given. +if test "${with_kerberos_lib+set}" = set; then : + withval=$with_kerberos_lib; + if test -d "$withval"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + kerberos_libdir="$withval" + with_kerberos=yes # implies use of kerberos + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi + + +if test -n "$with_kerberos" ; then + if test -z "$kerberos_incdir" -o -z "$kerberos_libdir" ; then + if test -z "$KRB5_CONFIG_BIN" ; then + # Extract the first word of "krb5-config", so it can be a program name with args. +set dummy krb5-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_KRB5_CONFIG_BIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $KRB5_CONFIG_BIN in + [\\/]* | ?:[\\/]*) + ac_cv_path_KRB5_CONFIG_BIN="$KRB5_CONFIG_BIN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_KRB5_CONFIG_BIN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +KRB5_CONFIG_BIN=$ac_cv_path_KRB5_CONFIG_BIN +if test -n "$KRB5_CONFIG_BIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KRB5_CONFIG_BIN" >&5 +$as_echo "$KRB5_CONFIG_BIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + if test -n "$KRB5_CONFIG_BIN" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for kerberos with $KRB5_CONFIG_BIN" >&5 +$as_echo_n "checking for kerberos with $KRB5_CONFIG_BIN... " >&6; } + if test -z "$kerberos_libdir" ; then + kerberos_lib=`$KRB5_CONFIG_BIN --libs krb5` + fi + if test -z "$kerberos_incdir" ; then + kerberos_inc=`$KRB5_CONFIG_BIN --cflags krb5` + fi + if test -n "$kerberos_lib" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using kerberos found with $KRB5_CONFIG_BIN" >&5 +$as_echo "using kerberos found with $KRB5_CONFIG_BIN" >&6; } + have_krb5=yes + fi + fi + fi +fi + +if test -n "$with_kerberos" -a -z "$kerberos_lib" ; then + # save these in order to set them to use the check macros below + # like AC_CHECK_HEADERS, AC_CHECK_LIB, and AC_CHECK_FUNCS + save_CPPFLAGS="$CPPFLAGS" + if test -n "$kerberos_incdir" ; then + CPPFLAGS="-I$kerberos_incdir $CPPFLAGS" + fi + save_LDFLAGS="$LDFLAGS" + if test -n "$kerberos_libdir" ; then + LDFLAGS="-L$kerberos_libdir $LDFLAGS" + fi + krb5_impl=mit + + for ac_header in heim_err.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "heim_err.h" "ac_cv_header_heim_err_h" "$ac_includes_default" +if test "x$ac_cv_header_heim_err_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_HEIM_ERR_H 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_heim_err_h = yes ; then + krb5_impl=heimdal + fi + + if test "x$krb5_impl" = "xmit"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lk5crypto" >&5 +$as_echo_n "checking for main in -lk5crypto... " >&6; } +if ${ac_cv_lib_k5crypto_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lk5crypto $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_k5crypto_main=yes +else + ac_cv_lib_k5crypto_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_k5crypto_main" >&5 +$as_echo "$ac_cv_lib_k5crypto_main" >&6; } +if test "x$ac_cv_lib_k5crypto_main" = xyes; then : + krb5crypto=k5crypto +else + krb5crypto=crypto +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lkrb5" >&5 +$as_echo_n "checking for main in -lkrb5... " >&6; } +if ${ac_cv_lib_krb5_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lkrb5 -l$krb5crypto -lcom_err $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_krb5_main=yes +else + ac_cv_lib_krb5_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_krb5_main" >&5 +$as_echo "$ac_cv_lib_krb5_main" >&6; } +if test "x$ac_cv_lib_krb5_main" = xyes; then : + have_krb5=yes + kerberos_lib="-lkrb5 -l$krb5crypto -lcom_err" +else + have_krb5=no +fi + + + elif test "x$krb5_impl" = "xheimdal"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldes" >&5 +$as_echo_n "checking for main in -ldes... " >&6; } +if ${ac_cv_lib_des_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldes $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_des_main=yes +else + ac_cv_lib_des_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_des_main" >&5 +$as_echo "$ac_cv_lib_des_main" >&6; } +if test "x$ac_cv_lib_des_main" = xyes; then : + krb5crypto=des +else + krb5crypto=crypto +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lkrb5" >&5 +$as_echo_n "checking for main in -lkrb5... " >&6; } +if ${ac_cv_lib_krb5_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lkrb5 -l$krb5crypto -lasn1 -lroken -lcom_err $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_krb5_main=yes +else + ac_cv_lib_krb5_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_krb5_main" >&5 +$as_echo "$ac_cv_lib_krb5_main" >&6; } +if test "x$ac_cv_lib_krb5_main" = xyes; then : + have_krb5=yes + kerberos_lib="-lkrb5 -l$krb5crypto -lasn1 -lroken -lcom_err" +else + have_krb5=no +fi + + + +$as_echo "#define HAVE_HEIMDAL_KERBEROS 1" >>confdefs.h + + + else + have_krb5=no + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unrecognized Kerberos5 Implementation" >&5 +$as_echo "$as_me: WARNING: Unrecognized Kerberos5 Implementation" >&2;} + fi + + # reset to original values + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + if test -n "$kerberos_incdir" ; then + kerberos_inc="-I$kerberos_incdir" + fi + if test -n "$kerberos_libdir" ; then + kerberos_lib="-L$kerberos_libdir $kerberos_lib" + fi +fi + + +if test -n "$with_kerberos" ; then + if test "x$have_krb5" = "xyes" ; then + +$as_echo "#define HAVE_KRB5 1" >>confdefs.h + + else + as_fn_error $? "Required Kerberos 5 support not available" "$LINENO" 5 + fi + + save_LIBS="$LIBS" + LIBS="$kerberos_lib" + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$kerberos_inc $CPPFLAGS" + for ac_func in krb5_cc_new_unique +do : + ac_fn_c_check_func "$LINENO" "krb5_cc_new_unique" "ac_cv_func_krb5_cc_new_unique" +if test "x$ac_cv_func_krb5_cc_new_unique" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_KRB5_CC_NEW_UNIQUE 1 +_ACEOF + +fi +done + + LIBS="$save_LIBS" + CPPFLAGS="$save_CPPFLAGS" +fi + + + + + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2007 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PCRE..." >&5 +$as_echo "$as_me: checking for PCRE..." >&6;} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-pcre" >&5 +$as_echo_n "checking for --with-pcre... " >&6; } + +# Check whether --with-pcre was given. +if test "${with_pcre+set}" = set; then : + withval=$with_pcre; + if test "$withval" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + elif test "$withval" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "PCRE is required." "$LINENO" 5 + elif test -d "$withval"/include -a -d "$withval"/lib; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + PCREDIR=$withval + pcre_lib="-L$PCREDIR/lib" + pcre_libdir="$PCREDIR/lib" + pcre_incdir="$PCREDIR/include" + if ! test -e "$pcre_incdir/pcre.h" ; then + as_fn_error $? "$withval include dir not found" "$LINENO" 5 + fi + pcre_inc="-I$pcre_incdir" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + + +# +# if PCRE is not found yet, try pkg-config +if test -z "$pcre_inc" -o -z "$pcre_lib" -o -z "$pcre_libdir"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pcre with pkg-config" >&5 +$as_echo_n "checking for pcre with pkg-config... " >&6; } + if test -n "$PKG_CONFIG"; then + if $PKG_CONFIG --exists pcre; then + pcre_inc=`$PKG_CONFIG --cflags-only-I pcre` + pcre_lib=`$PKG_CONFIG --libs-only-L pcre` + pcre_libdir=`$PKG_CONFIG --libs-only-L pcre | sed -e s/-L// | sed -e s/\ .*$//` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using system PCRE" >&5 +$as_echo "using system PCRE" >&6; } + elif $PKG_CONFIG --exists libpcre; then + pcre_inc=`$PKG_CONFIG --cflags-only-I libpcre` + pcre_lib=`$PKG_CONFIG --libs-only-L libpcre` + pcre_libdir=`$PKG_CONFIG --libs-only-L libpcre | sed -e s/-L// | sed -e s/\ .*$//` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using system PCRE" >&5 +$as_echo "using system PCRE" >&6; } + else + as_fn_error $? "PCRE not found, specify with --with-pcre." "$LINENO" 5 + fi + fi +fi + +if test -z "$pcre_inc"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pcre.h" >&5 +$as_echo_n "checking for pcre.h... " >&6; } + if test -f "/usr/include/pcre/pcre.h"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using /usr/include/pcre/pcre.h" >&5 +$as_echo "using /usr/include/pcre/pcre.h" >&6; } + pcre_incdir="/usr/include/pcre" + pcre_inc="-I/usr/include/pcre" + pcre_lib='-L$(libdir)' + pcre_libdir='$(libdir)' + elif test -f "/usr/include/pcre.h"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using /usr/include/pcre.h" >&5 +$as_echo "using /usr/include/pcre.h" >&6; } + pcre_incdir="/usr/include" + pcre_inc="-I/usr/include" + pcre_lib='-L$(libdir)' + pcre_libdir='$(libdir)' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "PCRE not found, specify with --with-pcre." "$LINENO" 5 + fi +fi + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2009 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SELinux..." >&5 +$as_echo "$as_me: checking for SELinux..." >&6;} + +# check for --with-selinux +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-selinux" >&5 +$as_echo_n "checking for --with-selinux... " >&6; } + +# Check whether --with-selinux was given. +if test "${with_selinux+set}" = set; then : + withval=$with_selinux; + if test "$withval" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + with_selinux=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# BEGIN COPYRIGHT BLOCK +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for nunc-stans..." >&5 +$as_echo "$as_me: checking for nunc-stans..." >&6;} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-nunc-stans" >&5 +$as_echo_n "checking for --with-nunc-stans... " >&6; } + +# Check whether --with-nunc-stans was given. +if test "${with_nunc_stans+set}" = set; then : + withval=$with_nunc_stans; + if test "$withval" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + elif test "$withval" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + elif test -d "$withval"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + nunc_stans_lib="-L$withval/lib" + nunc_stans_libdir="$withval/lib" + nunc_stans_incdir="$withval/include" + if ! test -e "$nunc_stans_incdir/nunc-stans/nunc-stans.h" ; then + as_fn_error $? "$withval include dir not found" "$LINENO" 5 + fi + nunc_stans_inc="-I$nunc_stans_incdir" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# check for --with-nunc-stans-inc +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-nunc-stans-inc" >&5 +$as_echo_n "checking for --with-nunc-stans-inc... " >&6; } + +# Check whether --with-nunc-stans-inc was given. +if test "${with_nunc_stans_inc+set}" = set; then : + withval=$with_nunc_stans_inc; + if test -e "$withval"/nunc-stans/nunc-stans.h + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + nunc_stans_incdir="$withval" + nunc_stans_inc="-I$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# check for --with-nunc-stans-lib +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-nunc-stans-lib" >&5 +$as_echo_n "checking for --with-nunc-stans-lib... " >&6; } + +# Check whether --with-nunc-stans-lib was given. +if test "${with_nunc_stans_lib+set}" = set; then : + withval=$with_nunc_stans_lib; + if test -d "$withval" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $withval" >&5 +$as_echo "using $withval" >&6; } + nunc_stans_lib="-L$withval" + nunc_stans_libdir="$withval" + else + echo + as_fn_error $? "$withval not found" "$LINENO" 5 + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Systemd..." >&5 +$as_echo "$as_me: checking for Systemd..." >&6;} + +# check for --with-systemd +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-systemd" >&5 +$as_echo_n "checking for --with-systemd... " >&6; } + +# Check whether --with-systemd was given. +if test "${with_systemd+set}" = set; then : + withval=$with_systemd; + if test "$withval" = yes + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using systemd native features" >&5 +$as_echo "using systemd native features" >&6; } + with_systemd=yes + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "$with_systemd" = yes; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-journald" >&5 +$as_echo_n "checking for --with-journald... " >&6; } + +# Check whether --with-journald was given. +if test "${with_journald+set}" = set; then : + withval=$with_journald; + if test "$withval" = yes + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using journald logging: WARNING, this may cause system instability" >&5 +$as_echo "using journald logging: WARNING, this may cause system instability" >&6; } + with_systemd=yes + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Systemd with pkg-config" >&5 +$as_echo_n "checking for Systemd with pkg-config... " >&6; } + + if test -n "$PKG_CONFIG" && $PKG_CONFIG --exists libsystemd ; then + systemd_inc=`$PKG_CONFIG --cflags-only-I libsystemd` + systemd_lib=`$PKG_CONFIG --libs-only-l libsystemd` + else + as_fn_error $? "no Systemd pkg-config files" "$LINENO" 5 + fi + + if test "$with_journald" = yes; then + systemd_defs="-DWITH_SYSTEMD -DHAVE_JOURNALD" + else + systemd_defs="-DWITH_SYSTEMD" + fi + + # Check for the pkg config provided unit paths + if test -n "$PKG_CONFIG" ; then + default_systemdsystemunitdir=`$PKG_CONFIG --variable=systemdsystemunitdir systemd` + default_systemdsystemconfdir=`$PKG_CONFIG --variable=systemdsystemconfdir systemd` + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-systemdsystemunitdir" >&5 +$as_echo_n "checking for --with-systemdsystemunitdir... " >&6; } + +# Check whether --with-systemdsystemunitdir was given. +if test "${with_systemdsystemunitdir+set}" = set; then : + withval=$with_systemdsystemunitdir; +fi + + if test "$with_systemdsystemunitdir" = yes ; then + if test -n "$default_systemdsystemunitdir" ; then + with_systemdsystemunitdir=$default_systemdsystemunitdir + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_systemdsystemunitdir" >&5 +$as_echo "$with_systemdsystemunitdir" >&6; } + else + as_fn_error $? "You must specify --with-systemdsystemconfdir=/full/path/to/systemd/system directory" "$LINENO" 5 + fi + elif test "$with_systemdsystemunitdir" = no ; then + with_systemdsystemunitdir= + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_systemdsystemunitdir" >&5 +$as_echo "$with_systemdsystemunitdir" >&6; } + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-systemdsystemconfdir" >&5 +$as_echo_n "checking for --with-systemdsystemconfdir... " >&6; } + +# Check whether --with-systemdsystemconfdir was given. +if test "${with_systemdsystemconfdir+set}" = set; then : + withval=$with_systemdsystemconfdir; +fi + + if test "$with_systemdsystemconfdir" = yes ; then + if test -n "$default_systemdsystemconfdir" ; then + with_systemdsystemconfdir=$default_systemdsystemconfdir + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_systemdsystemconfdir" >&5 +$as_echo "$with_systemdsystemconfdir" >&6; } + else + as_fn_error $? "You must specify --with-systemdsystemconfdir=/full/path/to/systemd/system directory" "$LINENO" 5 + fi + elif test "$with_systemdsystemconfdir" = no ; then + with_systemdsystemconfdir= + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_systemdsystemconfdir" >&5 +$as_echo "$with_systemdsystemconfdir" >&6; } + fi + + + if test -z "$with_systemdgroupname" ; then + with_systemdgroupname=$PACKAGE_NAME.target + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-systemdgroupname" >&5 +$as_echo_n "checking for --with-systemdgroupname... " >&6; } + +# Check whether --with-systemdgroupname was given. +if test "${with_systemdgroupname+set}" = set; then : + withval=$with_systemdgroupname; +fi + + if test "$with_systemdgroupname" = yes ; then + as_fn_error $? "You must specify --with-systemdgroupname=name.of.group" "$LINENO" 5 + elif test "$with_systemdgroupname" = no ; then + as_fn_error $? "You must specify --with-systemdgroupname=name.of.group" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_systemdgroupname" >&5 +$as_echo "$with_systemdgroupname" >&6; } + fi + + + +fi +# End of with_systemd + + if test -n "$with_systemd"; then + SYSTEMD_TRUE= + SYSTEMD_FALSE='#' +else + SYSTEMD_TRUE='#' + SYSTEMD_FALSE= +fi + + if test -n "$with_journald"; then + JOURNALD_TRUE= + JOURNALD_FALSE='#' +else + JOURNALD_TRUE='#' + JOURNALD_FALSE= +fi + + + + +PACKAGE_BASE_VERSION=`echo $PACKAGE_VERSION | awk -F\. '{print $1"."$2}'` + + +# set sasl_path for wrapper scripts +if test -z "$sasl_libdir" ; then + sasl_path="$libdir/sasl2" +else + sasl_path="$sasl_libdir/sasl2" +fi + + if test "$with_selinux" = "yes"; then + SELINUX_TRUE= + SELINUX_FALSE='#' +else + SELINUX_TRUE='#' + SELINUX_FALSE= +fi + + if test "$with_openldap" = "yes"; then + OPENLDAP_TRUE= + OPENLDAP_FALSE='#' +else + OPENLDAP_TRUE='#' + OPENLDAP_FALSE= +fi + + if test "$platform" = "solaris"; then + SOLARIS_TRUE= + SOLARIS_FALSE='#' +else + SOLARIS_TRUE='#' + SOLARIS_FALSE= +fi + + if test "x$TARGET" = xSPARC; then + SPARC_TRUE= + SPARC_FALSE='#' +else + SPARC_TRUE='#' + SPARC_FALSE= +fi + + +# write out paths for binary components + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# AC_DEFINE([USE_OLD_UNHASHED], [], [Use old unhashed code]) + +$as_echo "#define LDAP_DEBUG 1" >>confdefs.h + + +$as_echo "#define LDAP_DONT_USE_SMARTHEAP 1" >>confdefs.h + + +# libtool on fedora/rhel contains some gcc-isms which cause problems +# if not using gcc (e.g. Forte on Solaris, aCC on HP-UX) +# we remove them here +if test "$GCC" != yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Not using gcc - fixing libtool to remove gcc-isms . . ." >&5 +$as_echo "$as_me: Not using gcc - fixing libtool to remove gcc-isms . . ." >&6;} + cp -p libtool libtool.orig + cp -p libtool libtool.tmp + # dnl note the special chars [ and ] - since m4 treats [ and ] specially, + # we have to use the quadrigraph [ for [ and ] for ] - and you thought + # perl produced write-only code . . . + sed -e '/^gcc_dir/ d' \ + -e '/^gcc_ver/ d' \ + -e 's/^predep_objects=.*echo \("[^"]*"\).*$/predep_objects=\1/' \ + -e 's/^postdep_objects=.*echo \("[^"]*"\).*$/postdep_objects=\1/' \ + -e 's/^compiler_lib_search_path=.*echo \("[^"]*"\).*$/compiler_lib_search_path=\1/' \ + -e 's/^sys_lib_search_path_spec=.*echo \("[^"]*"\).*$/sys_lib_search_path_spec=\1/' \ + libtool > libtool.tmp + cp -p libtool.tmp libtool + rm -f libtool.tmp +fi + +ac_config_files="$ac_config_files Makefile rpm/389-ds-base.spec" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${enable_asan_TRUE}" && test -z "${enable_asan_FALSE}"; then + as_fn_error $? "conditional \"enable_asan\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${RPM_HARDEND_CC_TRUE}" && test -z "${RPM_HARDEND_CC_FALSE}"; then + as_fn_error $? "conditional \"RPM_HARDEND_CC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUNDLE_TRUE}" && test -z "${BUNDLE_FALSE}"; then + as_fn_error $? "conditional \"BUNDLE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${enable_pam_passthru_TRUE}" && test -z "${enable_pam_passthru_FALSE}"; then + as_fn_error $? "conditional \"enable_pam_passthru\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${enable_dna_TRUE}" && test -z "${enable_dna_FALSE}"; then + as_fn_error $? "conditional \"enable_dna\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${enable_ldapi_TRUE}" && test -z "${enable_ldapi_FALSE}"; then + as_fn_error $? "conditional \"enable_ldapi\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${enable_autobind_TRUE}" && test -z "${enable_autobind_FALSE}"; then + as_fn_error $? "conditional \"enable_autobind\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${enable_auto_dn_suffix_TRUE}" && test -z "${enable_auto_dn_suffix_FALSE}"; then + as_fn_error $? "conditional \"enable_auto_dn_suffix\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${enable_bitwise_TRUE}" && test -z "${enable_bitwise_FALSE}"; then + as_fn_error $? "conditional \"enable_bitwise\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${enable_presence_TRUE}" && test -z "${enable_presence_FALSE}"; then + as_fn_error $? "conditional \"enable_presence\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${enable_acctpolicy_TRUE}" && test -z "${enable_acctpolicy_FALSE}"; then + as_fn_error $? "conditional \"enable_acctpolicy\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${enable_posix_winsync_TRUE}" && test -z "${enable_posix_winsync_FALSE}"; then + as_fn_error $? "conditional \"enable_posix_winsync\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${enable_nunc_stans_TRUE}" && test -z "${enable_nunc_stans_FALSE}"; then + as_fn_error $? "conditional \"enable_nunc_stans\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WINNT_TRUE}" && test -z "${WINNT_FALSE}"; then + as_fn_error $? "conditional \"WINNT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${INITDDIR_TRUE}" && test -z "${INITDDIR_FALSE}"; then + as_fn_error $? "conditional \"INITDDIR\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HPUX_TRUE}" && test -z "${HPUX_FALSE}"; then + as_fn_error $? "conditional \"HPUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${SOLARIS_TRUE}" && test -z "${SOLARIS_FALSE}"; then + as_fn_error $? "conditional \"SOLARIS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${SYSTEMD_TRUE}" && test -z "${SYSTEMD_FALSE}"; then + as_fn_error $? "conditional \"SYSTEMD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${JOURNALD_TRUE}" && test -z "${JOURNALD_FALSE}"; then + as_fn_error $? "conditional \"JOURNALD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${SELINUX_TRUE}" && test -z "${SELINUX_FALSE}"; then + as_fn_error $? "conditional \"SELINUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OPENLDAP_TRUE}" && test -z "${OPENLDAP_FALSE}"; then + as_fn_error $? "conditional \"OPENLDAP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${SOLARIS_TRUE}" && test -z "${SOLARIS_FALSE}"; then + as_fn_error $? "conditional \"SOLARIS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${SPARC_TRUE}" && test -z "${SPARC_FALSE}"; then + as_fn_error $? "conditional \"SPARC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do 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 + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by dirsrv $as_me 1.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +dirsrv config.status 1.0 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# 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 + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ +nm_file_list_spec \ +lt_cv_truncate_bin \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_separator_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX \ +postlink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "rpm/389-ds-base.spec") CONFIG_FILES="$CONFIG_FILES rpm/389-ds-base.spec" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool 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, see . + + +# The names of the tagged configurations supported by this script. +available_tags='CXX ' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..846e3b4 --- /dev/null +++ b/configure.ac @@ -0,0 +1,768 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. +AC_PREREQ(2.59) +AC_INIT([dirsrv],[1.0],[http://bugzilla.redhat.com/]) +# AC_CONFIG_HEADER must be called right after AC_INIT. +AC_CONFIG_HEADERS([config.h]) +# include the version information +. $srcdir/VERSION.sh +AC_MSG_NOTICE(This is configure for $PACKAGE_TARNAME $PACKAGE_VERSION) +AC_DEFINE_UNQUOTED([DS_PACKAGE_VERSION], "$PACKAGE_VERSION", [package version]) +AC_DEFINE_UNQUOTED([DS_PACKAGE_TARNAME], "$PACKAGE_TARNAME", [package tarball name]) +AC_DEFINE_UNQUOTED([DS_PACKAGE_BUGREPORT], "$PACKAGE_BUGREPORT", [package bug report url]) +AC_DEFINE_UNQUOTED([DS_PACKAGE_STRING], "$PACKAGE_STRING", [package string]) +AM_INIT_AUTOMAKE([1.9 foreign subdir-objects dist-bzip2 no-dist-gzip no-define tar-pax]) +# define these for automake distdir +VERSION=$PACKAGE_VERSION +PACKAGE=$PACKAGE_TARNAME +AC_DEFINE_UNQUOTED([VERSION], "$VERSION", [package version]) +AC_DEFINE_UNQUOTED([PACKAGE], "$PACKAGE", [package tar name]) +AC_SUBST([RPM_VERSION]) +AC_SUBST([RPM_RELEASE]) +AC_SUBST([VERSION_PREREL]) +AC_SUBST([CONSOLE_VERSION]) +AM_MAINTAINER_MODE +AC_CANONICAL_HOST + +# Checks for programs. +AC_PROG_CXX +AC_PROG_CC +AM_PROG_CC_C_O +AM_PROG_AS +AC_PROG_CC_STDC +# disable static libs by default - we only use a couple +AC_DISABLE_STATIC +AC_PROG_LIBTOOL + +# Checks for header files. +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_HEADER_SYS_WAIT +AC_CHECK_HEADERS([arpa/inet.h fcntl.h malloc.h netdb.h netinet/in.h stdlib.h string.h strings.h sys/file.h sys/socket.h sys/time.h unistd.h inttypes.h mntent.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_HEADER_STAT +AC_C_CONST +AC_HEADER_STDBOOL +AC_TYPE_UID_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_HEADER_TIME +AC_STRUCT_TM + +# Checks for library functions. +AC_FUNC_CHOWN +AC_FUNC_CLOSEDIR_VOID +AC_FUNC_ERROR_AT_LINE +AC_FUNC_FORK +AC_FUNC_LSTAT +AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK +AC_FUNC_MALLOC +AC_FUNC_MEMCMP +AC_FUNC_MMAP +AC_TYPE_SIGNAL +AC_FUNC_STAT +AC_FUNC_STRERROR_R +AC_FUNC_STRFTIME +AC_FUNC_VPRINTF +AC_CHECK_FUNCS([clock_gettime endpwent ftruncate getcwd gethostbyname inet_ntoa localtime_r memmove memset mkdir munmap putenv rmdir setrlimit socket strcasecmp strchr strcspn strdup strerror strncasecmp strpbrk strrchr strstr strtol tzset]) + +AC_MSG_CHECKING(for --enable-debug) +AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [Enable debug features (default: no)]), +[ + AC_MSG_RESULT(yes) + debug_defs="-g3 -DDEBUG -DMCC_DEBUG -O0" +], +[ + AC_MSG_RESULT(no) + debug_defs="" +]) +AC_SUBST([debug_defs]) + +AC_MSG_CHECKING(for --enable-asan) +AC_ARG_ENABLE(asan, AS_HELP_STRING([--enable-asan], [Enable gcc address sanitizer options (default: no)]), +[ + AC_MSG_RESULT(yes) + asan_defs="-fsanitize=address -fno-omit-frame-pointer" +], +[ + AC_MSG_RESULT(no) + asan_defs="" +]) +AC_SUBST([asan_defs]) +AM_CONDITIONAL(enable_asan,test "$enable_asan" = "yes") + +AM_CONDITIONAL([RPM_HARDEND_CC], [test -f /usr/lib/rpm/redhat/redhat-hardened-cc1]) +AC_MSG_CHECKING(for --enable-gcc-security) +AC_ARG_ENABLE(gcc-security, AS_HELP_STRING([--enable-gcc-security], [Enable gcc secure compilation options (default: no)]), +[ + AC_MSG_RESULT(yes) + AM_COND_IF([RPM_HARDEND_CC], + [ gccsec_defs="-Wall -Wp,-D_FORITY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -Werror=format-security -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 " ], + [ gccsec_defs="-Wall -Wp,-D_FORITY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -Werror=format-security" ] + ) +], +[ + AC_MSG_RESULT(no) + gccsec_defs="" +]) +AC_SUBST([gccsec_defs]) + +# Used for legacy style packaging where we bundle all of the dependencies. +AC_MSG_CHECKING(for --enable-bundle) +AC_ARG_ENABLE(bundle, AS_HELP_STRING([--enable-bundle], [Enable bundled dependencies (default: no)]), +[ + AC_MSG_RESULT(yes) + bundle="1"; +], +[ + AC_MSG_RESULT(no) + bundle=""; +]) +AM_CONDITIONAL(BUNDLE,test "$bundle" = "1") + +# these enables are for optional or experimental features +if test -z "$enable_pam_passthru" ; then + enable_pam_passthru=yes # if not set on cmdline, set default +fi +AC_MSG_CHECKING(for --enable-pam-passthru) +AC_ARG_ENABLE(pam-passthru, + AS_HELP_STRING([--enable-pam-passthru], + [enable the PAM passthrough auth plugin (default: yes)])) +if test "$enable_pam_passthru" = yes ; then + # check for pam header file used by plugins/pass_passthru/pam_ptimpl.c + AC_CHECK_HEADER([security/pam_appl.h], [], [AC_MSG_ERROR([Missing header file security/pam_appl.h])]) + AC_MSG_RESULT(yes) + AC_DEFINE([ENABLE_PAM_PASSTHRU], [1], [enable the pam passthru auth plugin]) +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(enable_pam_passthru,test "$enable_pam_passthru" = "yes") + +if test -z "$enable_dna" ; then + enable_dna=yes # if not set on cmdline, set default +fi +AC_MSG_CHECKING(for --enable-dna) +AC_ARG_ENABLE(dna, + AS_HELP_STRING([--enable-dna], + [enable the Distributed Numeric Assignment (DNA) plugin (default: yes)])) +if test "$enable_dna" = yes ; then + AC_MSG_RESULT(yes) + AC_DEFINE([ENABLE_DNA], [1], [enable the dna plugin]) +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(enable_dna,test "$enable_dna" = "yes") + +if test -z "$enable_ldapi" ; then + enable_ldapi=yes # if not set on cmdline, set default +fi +AC_MSG_CHECKING(for --enable-ldapi) +AC_ARG_ENABLE(ldapi, + AS_HELP_STRING([--enable-ldapi], + [enable LDAP over unix domain socket (LDAPI) support (default: yes)])) +if test "$enable_ldapi" = yes ; then + AC_MSG_RESULT(yes) + AC_DEFINE([ENABLE_LDAPI], [1], [enable ldapi support in the server]) +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(enable_ldapi,test "$enable_ldapi" = "yes") + +if test -z "$enable_autobind" ; then + enable_autobind=no # if not set on cmdline, set default +fi +AC_MSG_CHECKING(for --enable-autobind) +AC_ARG_ENABLE(autobind, + AS_HELP_STRING([--enable-autobind], + [enable auto bind over unix domain socket (LDAPI) support (default: no)])) +if test "$enable_ldapi" = yes -a "$enable_autobind" = yes ; then + AC_MSG_RESULT(yes) + AC_DEFINE([ENABLE_AUTOBIND], [1], [enable ldapi auto bind support in the server]) +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(enable_autobind,test "$enable_autobind" = "yes") + +if test -z "$enable_auto_dn_suffix" ; then + enable_auto_dn_suffix=no # if not set on cmdline, set default +fi +AC_MSG_CHECKING(for --enable-auto-dn-suffix) +AC_ARG_ENABLE(auto-dn-suffix, + AS_HELP_STRING([--enable-auto-dn-suffix], + [enable auto bind with auto dn suffix over unix domain socket (LDAPI) support (default: no)])) +if test "$enable_ldapi" = yes -a "$enable_autobind" = yes -a "$enable_auto_dn_suffix" = "yes"; then + AC_MSG_RESULT(yes) + AC_DEFINE([ENABLE_AUTO_DN_SUFFIX], [1], [enable ldapi auto bind with auto dn suffix support in the server]) +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(enable_auto_dn_suffix,test "$enable_auto_dn_suffix" = "yes") + +if test -z "$enable_bitwise" ; then + enable_bitwise=yes # if not set on cmdline, set default +fi +AC_MSG_CHECKING(for --enable-bitwise) +AC_ARG_ENABLE(bitwise, + AS_HELP_STRING([--enable-bitwise], + [enable the bitwise matching rule plugin (default: yes)])) +if test "$enable_bitwise" = yes ; then + AC_MSG_RESULT(yes) + AC_DEFINE([ENABLE_BITWISE], [1], [enable the bitwise plugin]) +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(enable_bitwise,test "$enable_bitwise" = "yes") + +if test -z "$enable_presence" ; then + enable_presence=no # if not set on cmdline, set default +fi +AC_MSG_CHECKING(for --enable-presence) +AC_ARG_ENABLE(presence, + AS_HELP_STRING([--enable-presence], + [enable the presence plugin (default: no)])) +if test "$enable_presence" = yes ; then + AC_MSG_RESULT(yes) + AC_DEFINE([ENABLE_PRESENCE], [1], [enable the presence plugin]) +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(enable_presence,test "$enable_presence" = "yes") + +if test -z "$enable_acctpolicy" ; then + enable_acctpolicy=yes # if not set on cmdline, set default +fi +AC_MSG_CHECKING(for --enable-acctpolicy) +AC_ARG_ENABLE(acctpolicy, + AS_HELP_STRING([--enable-acctpolicy], + [enable the account policy plugin (default: yes)])) +if test "$enable_acctpolicy" = yes ; then + AC_MSG_RESULT(yes) + AC_DEFINE([ENABLE_ACCTPOLICY], [1], [enable the account policy plugin]) +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(enable_acctpolicy,test "$enable_acctpolicy" = "yes") + +if test -z "$enable_posix_winsync" ; then + enable_posix_winsync=yes # if not set on cmdline, set default +fi +AC_MSG_CHECKING(for --enable-posix-winsync) +AC_ARG_ENABLE(posix_winsync, + AS_HELP_STRING([--enable-posix-winsync], + [enable support for POSIX user/group attributes in winsync (default: yes)])) +if test "$enable_posix_winsync" = yes ; then + AC_MSG_RESULT(yes) + AC_DEFINE([ENABLE_POSIX_WINSYNC], [1], [enable support for POSIX user/group attributes in winsync]) +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(enable_posix_winsync,test "$enable_posix_winsync" = "yes") + +AC_MSG_CHECKING(for --enable-nunc-stans) +AC_ARG_ENABLE(nunc_stans, + AS_HELP_STRING([--enable-nunc-stans], + [enable support for nunc-stans event framework (default: no)])) +if test "$enable_nunc_stans" = yes ; then + AC_MSG_RESULT(yes) + AC_DEFINE([ENABLE_NUNC_STANS], [1], [enable support for nunc-stans event framework]) +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(enable_nunc_stans,test "$enable_nunc_stans" = "yes") + +# the default prefix - override with --prefix or --with-fhs +AC_PREFIX_DEFAULT([/opt/$PACKAGE_NAME]) + +m4_include(m4/fhs.m4) + +localrundir='/run' + +# installation paths - by default, we store everything +# under the prefix. The with-fhs option will use /usr, +# /etc, and /var. The with-fhs-opt option will use the +# prefix, but it's sysconfdir and localstatedir will be +# /etc/opt, and /var/opt. +if test "$with_fhs_opt" = "yes"; then + # Override sysconfdir and localstatedir if FHS optional + # package was requested. + prefixdir=$prefix + sysconfdir='/etc/opt' + localstatedir='/var/opt' + localrundir='/var/opt/run' + # relative to datadir + sampledatadir=/data + # relative to datadir + scripttemplatedir=/script-templates + # relative to datadir + updatedir=/updates + # relative to libdir + serverdir= + # relative to includedir + serverincdir= + # relative to libdir + serverplugindir=/plugins + # relative to datadir + infdir=/inf + # relative to datadir + mibdir=/mibs + # location of property/resource files, relative to datadir + propertydir=/properties + # relative to libdir + perldir=/perl + # relative to libdir + pythondir=/python +else + if test "$with_fhs" = "yes"; then + ac_default_prefix=/usr + prefix=$ac_default_prefix + exec_prefix=$prefix + dnl as opposed to the default /usr/etc + sysconfdir='/etc' + dnl as opposed to the default /usr/var + localstatedir='/var' + localrundir='/run' + fi + prefixdir=$prefix + # relative to datadir + sampledatadir=/$PACKAGE_NAME/data + # relative to datadir + scripttemplatedir=/$PACKAGE_NAME/script-templates + # relative to datadir + updatedir=/$PACKAGE_NAME/updates + # relative to libdir + serverdir=/$PACKAGE_NAME + # relative to includedir + serverincdir=/$PACKAGE_NAME + # relative to libdir + serverplugindir=/$PACKAGE_NAME/plugins + # relative to datadir + infdir=/$PACKAGE_NAME/inf + # relative to datadir + mibdir=/$PACKAGE_NAME/mibs + # location of property/resource files, relative to datadir + propertydir=/$PACKAGE_NAME/properties + # relative to libdir + perldir=/$PACKAGE_NAME/perl + # relative to libdir + pythondir=/$PACKAGE_NAME/python +fi + +# if mandir is the default value, override it +# otherwise, the user must have set it - just use it +if test X"$mandir" = X'${prefix}/man' ; then + mandir='$(datadir)/man' +fi + +# Shared paths for all layouts +# relative to sysconfdir +configdir=/$PACKAGE_NAME/config +# relative to sysconfdir +schemadir=/$PACKAGE_NAME/schema + +# default user, group +defaultuser=dirsrv +defaultgroup=dirsrv + +if test -z "$with_tmpfiles_d" ; then + if test -d $sysconfdir/tmpfiles.d ; then + with_tmpfiles_d='$(sysconfdir)/tmpfiles.d' + fi +fi +AC_MSG_CHECKING(for --with-tmpfiles-d) +AC_ARG_WITH(tmpfiles-d, + AS_HELP_STRING([--with-tmpfiles-d=PATH], + [system uses tmpfiles.d to handle temp files/dirs (default: $with_tmpfiles_d)]) +) +if test "$with_tmpfiles_d" = yes ; then + AC_MSG_ERROR([You must specify --with-tmpfiles-d=/full/path/to/tmpfiles.d directory]) +elif test "$with_tmpfiles_d" = no ; then + with_tmpfiles_d= +else + AC_MSG_RESULT([$with_tmpfiles_d]) +fi +AC_SUBST(with_tmpfiles_d) + +AC_MSG_CHECKING(for --with-perldir) +AC_ARG_WITH([perldir], + AS_HELP_STRING([--with-perldir=PATH], + [Directory for perl)]) +) +if test -n "$with_perldir"; then + if test "$with_perldir" = yes ; then + AC_MSG_ERROR([You must specify --with-perldir=/full/path/to/perl]) + elif test "$with_perldir" = no ; then + with_perldir= + else + AC_MSG_RESULT([$with_perldir]) + fi +else + with_perldir= +fi + +AC_MSG_CHECKING(for --with-pythonexec) +AC_ARG_WITH([pythonexec], + AS_HELP_STRING([--with-pythonexec=PATH], + [Path to executable for python)]) +) +if test -n "$with_pythonexec"; then + if test "$with_pythonexec" = yes ; then + AC_MSG_ERROR([You must specify --with-pythonexec=/full/path/to/python]) + elif test "$with_pythonexec" = no ; then + with_pythonexec=/usr/bin/python2 + else + AC_MSG_RESULT([$with_pythonexec]) + fi +else + with_pythonexec=/usr/bin/python2 +fi + +AC_SUBST(prefixdir) +AC_SUBST(configdir) +AC_SUBST(sampledatadir) +AC_SUBST(propertydir) +AC_SUBST(schemadir) +AC_SUBST(serverdir) +AC_SUBST(serverincdir) +AC_SUBST(serverplugindir) +AC_SUBST(scripttemplatedir) +AC_SUBST(perldir) +AC_SUBST(pythondir) +AC_SUBST(infdir) +AC_SUBST(mibdir) +AC_SUBST(mandir) +AC_SUBST(updatedir) + +AC_SUBST(defaultuser) +AC_SUBST(defaultgroup) + +# check for --with-instconfigdir +AC_MSG_CHECKING(for --with-instconfigdir) +AC_ARG_WITH(instconfigdir, + AS_HELP_STRING([--with-instconfigdir=/path], + [Base directory for instance specific writable configuration directories (default $sysconfdir/$PACKAGE_NAME)]), +[ + if test $withval = yes ; then + AC_ERROR([Please specify a full path with --with-instconfigdir]) + fi + instconfigdir="$withval" + AC_MSG_RESULT($withval) +], +[ + dnl this value is expanded out in Makefile.am + instconfigdir='$(sysconfdir)/$(PACKAGE_NAME)' + AC_MSG_RESULT(no) +]) +AC_SUBST(instconfigdir) + +# WINNT should be true if building on Windows system not using +# cygnus, mingw, or the like and using cmd.exe as the shell +AM_CONDITIONAL([WINNT], false) + +# Deal with platform dependent defines +# initdir is the location for the SysV init scripts - very heavily platform +# dependent and not specified in fhs or lsb +# and not used if systemd is used +initdir='$(sysconfdir)/rc.d' +AC_MSG_CHECKING(for --with-initddir) +AC_ARG_WITH(initddir, + AS_HELP_STRING([--with-initddir=/path], + [Absolute path (not relative like some of the other options) that should contain the SysV init scripts (default '$(sysconfdir)/rc.d')]), +[ + AC_MSG_RESULT($withval) +], +[ + AC_MSG_RESULT(no) +]) + +AM_CONDITIONAL([INITDDIR], [test -n "$with_initddir" -a "$with_initddir" != "no"]) +# on most platforms, we will just use perl from PATH +# On some platforms, we cannot. Why not just use any old +# perl? Because of perldap. We use a perldap that is +# compiled to either 32bit or 64bit, so we must use a native +# perl binary compiled with the same bitsize. On Solaris +# and HP-UX, /usr/bin/perl is 32 bit, so we cannot use +# those with our 64 bit compiled product. +if test -n "$with_perldir"; then + perlexec="$with_perldir/perl" +else + perlexec='/usr/bin/env perl' +fi + +# This will let us change over the python version easier in the future. +if test -n "$with_pythonexec"; then + pythonexec="$with_pythonexec" +else + pythonexec='/usr/bin/env python2' +fi + +# we use stty in perl scripts to disable password echo +# this doesn't work unless the full absolute path of the +# stty command is used e.g. system("stty -echo") does not +# work but system("/bin/stty -echo") does work +# since the path of stty may not be the same on all +# platforms, we set the default here to /bin/stty and +# allow that value to be overridden in the platform +# specific section below +sttyexec=/bin/stty +case $host in + *-*-linux*) + AC_DEFINE([Linux], [1], [Linux]) + AC_DEFINE([LINUX], [1], [Linux]) + AC_DEFINE([LINUX2_0], [1], [Linux 2.0]) + AC_DEFINE([LINUX2_2], [1], [Linux 2.2]) + AC_DEFINE([LINUX2_4], [1], [Linux 2.4]) + AC_DEFINE([_GNU_SOURCE], [1], [GNU Source]) + platform="linux" + initdir='$(sysconfdir)/rc.d/init.d' + # do arch specific linux stuff here + case $host in + i*86-*-linux*) + AC_DEFINE([CPU_x86], [], [cpu type x86]) + AC_DEFINE([ATOMIC_64BIT_OPERATIONS], [1], [enabling atomic counter]) + ;; + x86_64-*-linux*) + AC_DEFINE([CPU_x86_64], [], [cpu type x86_64]) + AC_DEFINE([ATOMIC_64BIT_OPERATIONS], [1], [enabling atomic counter]) + ;; + aarch64-*-linux*) + AC_DEFINE([CPU_arm], [], [cpu type arm]) + ;; + arm*-linux*) + AC_DEFINE([CPU_arm], [], [cpu type arm]) + ;; + esac + AC_MSG_CHECKING([for GCC provided 64-bit atomic bool cas function ...]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], + [[long long ptrval = 0, val = 0, newval = 1; (void)__sync_bool_compare_and_swap_8(&ptrval, val, newval);]])], + [AC_DEFINE([HAVE_64BIT_ATOMIC_CAS_FUNC], [1], [have 64-bit atomic bool compare and swap function provided by gcc])AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + AC_MSG_CHECKING([for GCC provided 64-bit atomic ops functions ...]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], + [[long long ptrval = 0, val = 0; (void)__sync_add_and_fetch_8(&ptrval, val);]])], + [AC_DEFINE([HAVE_64BIT_ATOMIC_OP_FUNCS], [1], [have 64-bit atomic operation functions provided by gcc])AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + # some programs use the native thread library directly + THREADLIB=-lpthread + AC_SUBST([THREADLIB], [$THREADLIB]) + LIBCRYPT=-lcrypt + AC_SUBST([LIBCRYPT], [$LIBCRYPT]) + AC_DEFINE([USE_POSIX_RWLOCKS], [1], [POSIX rwlocks]) + ;; + ia64-hp-hpux*) + AC_DEFINE([hpux], [1], [HP-UX]) + AC_DEFINE([HPUX], [1], [HP-UX]) + AC_DEFINE([HPUX11], [1], [HP-UX 11]) + AC_DEFINE([HPUX11_23], [1], [HP-UX 11.23]) + AC_DEFINE([CPU_ia64], [], [cpu type ia64]) + AC_DEFINE([OS_hpux], [1], [OS HP-UX]) + AC_DEFINE([_POSIX_C_SOURCE], [199506L], [POSIX revision]) + AC_DEFINE([_HPUX_SOURCE], [1], [Source namespace]) + AC_DEFINE([_INCLUDE_STDC__SOURCE_199901], [1], [to pick up all of the printf format macros in inttypes.h]) + # assume 64 bit + perlexec='/opt/perl_64/bin/perl' + platform="hpux" + initconfigdir="/$PACKAGE_NAME/config" + # HPUX doesn't use /etc for this + initdir=/init.d + ;; + hppa*-hp-hpux*) + AC_DEFINE([hpux], [1], [HP-UX]) + AC_DEFINE([HPUX], [1], [HP-UX]) + AC_DEFINE([HPUX11], [1], [HP-UX 11]) + AC_DEFINE([HPUX11_11], [1], [HP-UX 11.11]) + AC_DEFINE([CPU_hppa], [], [cpu type pa-risc]) + AC_DEFINE([OS_hpux], [1], [OS HP-UX]) + AC_DEFINE([_POSIX_C_SOURCE], [199506L], [POSIX revision]) + AC_DEFINE([_HPUX_SOURCE], [1], [Source namespace]) + AC_DEFINE([_INCLUDE_STDC__SOURCE_199901], [1], [to pick up all of the printf format macros in inttypes.h]) + AC_DEFINE([ATOMIC_64BIT_OPERATIONS], [1], [enabling atomic counter]) + # assume 64 bit + initconfigdir="/$PACKAGE_NAME/config" + perlexec='/opt/perl_64/bin/perl' + platform="hpux" + # HPUX doesn't use /etc for this + initdir=/init.d + ;; + *-*-solaris*) + AC_DEFINE([SVR4], [1], [SVR4]) + AC_DEFINE([__svr4], [1], [SVR4]) + AC_DEFINE([__svr4__], [1], [SVR4]) + AC_DEFINE([_SVID_GETTOD], [1], [SVID_GETTOD]) + AC_DEFINE([SOLARIS], [1], [SOLARIS]) + AC_DEFINE([OS_solaris], [1], [OS SOLARIS]) + AC_DEFINE([sunos5], [1], [SunOS5]) + AC_DEFINE([OSVERSION], [509], [OS version]) + AC_DEFINE([_REENTRANT], [1], [_REENTRANT]) + AC_DEFINE([NO_DOMAINNAME], [1], [no getdomainname]) +dnl socket nsl and dl are required to link several programs and libdb + LIBSOCKET=-lsocket + AC_SUBST([LIBSOCKET], [$LIBSOCKET]) + LIBNSL=-lnsl + AC_SUBST([LIBNSL], [$LIBNSL]) + LIBDL=-ldl + AC_SUBST([LIBDL], [$LIBDL]) +dnl Cstd and Crun are required to link any C++ related code + LIBCSTD=-lCstd + AC_SUBST([LIBCSTD], [$LIBCSTD]) + LIBCRUN=-lCrun + AC_SUBST([LIBCRUN], [$LIBCRUN]) + platform="solaris" + initdir='$(sysconfdir)/init.d' + case $host in + i?86-*-solaris2.1[[0-9]]*) +dnl I dont know why i386 need this explicit + AC_DEFINE([HAVE_GETPEERUCRED], [1], [have getpeerucred]) + ;; + sparc-*-solaris*) +dnl includes some assembler stuff in counter.o + AC_DEFINE([ATOMIC_64BIT_OPERATIONS], [1], [enabling atomic counter]) + AC_DEFINE([CPU_sparc], [], [cpu type sparc]) + TARGET='SPARC' + ;; + esac + ;; + *) + platform="" + ;; +esac + +# cmd line overrides default setting above +if test -n "$with_initddir" ; then + initdir="$with_initddir" +fi + +# sysv init scripts not used when systemd is used +AC_SUBST(initdir) +AC_SUBST(perlexec) +AC_SUBST(pythonexec) +AC_SUBST(sttyexec) + +# set default initconfigdir if not already set +# value will be set so as to be relative to $(sysconfdir) +if test -z "$initconfigdir" ; then + if test -d /etc/sysconfig ; then + initconfigdir=/sysconfig + elif test -d /etc/default ; then + initconfigdir=/default + else + initconfigdir="/$PACKAGE_NAME/config" + fi +fi +AC_SUBST(initconfigdir) + +AM_CONDITIONAL([HPUX],[test "$platform" = "hpux"]) +AM_CONDITIONAL([SOLARIS],[test "$platform" = "solaris"]) + +# Check for library dependencies +m4_include(m4/nspr.m4) +m4_include(m4/nss.m4) +m4_include(m4/openldap.m4) +m4_include(m4/mozldap.m4) +m4_include(m4/db.m4) +m4_include(m4/sasl.m4) +m4_include(m4/svrcore.m4) +m4_include(m4/icu.m4) +m4_include(m4/netsnmp.m4) +m4_include(m4/kerberos.m4) +m4_include(m4/pcre.m4) +m4_include(m4/selinux.m4) +m4_include(m4/nunc-stans.m4) +m4_include(m4/systemd.m4) + +PACKAGE_BASE_VERSION=`echo $PACKAGE_VERSION | awk -F\. '{print $1"."$2}'` +AC_SUBST(PACKAGE_BASE_VERSION) + +# set sasl_path for wrapper scripts +if test -z "$sasl_libdir" ; then + sasl_path="$libdir/sasl2" +else + sasl_path="$sasl_libdir/sasl2" +fi + +AM_CONDITIONAL(SELINUX,test "$with_selinux" = "yes") +AM_CONDITIONAL(OPENLDAP,test "$with_openldap" = "yes") +AM_CONDITIONAL(SOLARIS,test "$platform" = "solaris") +AM_CONDITIONAL(SPARC,test "x$TARGET" = xSPARC) + +# write out paths for binary components +AC_SUBST(nspr_inc) +AC_SUBST(nspr_lib) +AC_SUBST(nspr_libdir) +AC_SUBST(nss_inc) +AC_SUBST(nss_lib) +AC_SUBST(nss_libdir) +AC_SUBST(ldapsdk_inc) +AC_SUBST(ldapsdk_lib) +AC_SUBST(ldapsdk_libdir) +AC_SUBST(ldapsdk_bindir) +AC_SUBST(openldap_inc) +AC_SUBST(openldap_lib) +AC_SUBST(openldap_libdir) +AC_SUBST(openldap_bindir) +AC_SUBST(ldaptool_bindir) +AC_SUBST(ldaptool_opts) +AC_SUBST(plainldif_opts) +AC_SUBST(ol_libver) +AC_SUBST(db_inc) +AC_SUBST(db_incdir) +AC_SUBST(db_lib) +AC_SUBST(db_libdir) +AC_SUBST(db_bindir) +AC_SUBST(db_libver) +AC_SUBST(sasl_inc) +AC_SUBST(sasl_lib) +AC_SUBST(sasl_libdir) +AC_SUBST(sasl_path) +AC_SUBST(svrcore_inc) +AC_SUBST(svrcore_lib) +AC_SUBST(icu_lib) +AC_SUBST(icu_inc) +AC_SUBST(icu_bin) +AC_SUBST(netsnmp_inc) +AC_SUBST(netsnmp_lib) +AC_SUBST(netsnmp_libdir) +AC_SUBST(netsnmp_link) +AC_SUBST(pcre_inc) +AC_SUBST(pcre_lib) +AC_SUBST(pcre_libdir) +AC_SUBST(nunc_stans_inc) +AC_SUBST(nunc_stans_lib) +AC_SUBST(nunc_stans_libdir) +AC_SUBST(localrundir) +AC_SUBST(systemd_inc) +AC_SUBST(systemd_lib) +AC_SUBST(systemd_defs) + +AC_SUBST(brand) +AC_SUBST(capbrand) +AC_SUBST(vendor) + +# AC_DEFINE([USE_OLD_UNHASHED], [], [Use old unhashed code]) +AC_DEFINE([LDAP_DEBUG], [1], [LDAP debug flag]) +AC_DEFINE([LDAP_DONT_USE_SMARTHEAP], [1], [Don't use smartheap]) + +# libtool on fedora/rhel contains some gcc-isms which cause problems +# if not using gcc (e.g. Forte on Solaris, aCC on HP-UX) +# we remove them here +if test "$GCC" != yes ; then + AC_MSG_NOTICE([Not using gcc - fixing libtool to remove gcc-isms . . .]) + cp -p libtool libtool.orig + cp -p libtool libtool.tmp + # dnl note the special chars @<:@ and @:>@ - since m4 treats [ and ] specially, + # we have to use the quadrigraph @<:@ for [ and @:>@ for ] - and you thought + # perl produced write-only code . . . + sed -e '/^gcc_dir/ d' \ + -e '/^gcc_ver/ d' \ + -e 's/^predep_objects=.*echo \("@<:@^"@:>@*"\).*$/predep_objects=\1/' \ + -e 's/^postdep_objects=.*echo \("@<:@^"@:>@*"\).*$/postdep_objects=\1/' \ + -e 's/^compiler_lib_search_path=.*echo \("@<:@^"@:>@*"\).*$/compiler_lib_search_path=\1/' \ + -e 's/^sys_lib_search_path_spec=.*echo \("@<:@^"@:>@*"\).*$/sys_lib_search_path_spec=\1/' \ + libtool > libtool.tmp + cp -p libtool.tmp libtool + rm -f libtool.tmp +fi + +AC_CONFIG_FILES([Makefile rpm/389-ds-base.spec]) + +AC_OUTPUT diff --git a/depcomp b/depcomp new file mode 100755 index 0000000..fc98710 --- /dev/null +++ b/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2013-05-30.07; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/dirsrv.pc.in b/dirsrv.pc.in new file mode 100644 index 0000000..e190eef --- /dev/null +++ b/dirsrv.pc.in @@ -0,0 +1,7 @@ +ldaplib=@ldaplib@ + +Name: dirsrv +Description: 389 Directory Server +Version: @PACKAGE_VERSION@ +Libs: -L@serverdir@ -lslapd +Cflags: @ldaplib_defs@ -I@serverincdir@ diff --git a/dirsrvtests/README b/dirsrvtests/README new file mode 100644 index 0000000..48b003f --- /dev/null +++ b/dirsrvtests/README @@ -0,0 +1,28 @@ +389-ds-base-tests README +================================================= + +Prerequisites: +------------------------------------------------- +Install the python-lib389 packages, or +download the source(git clone ssh://git.fedorahosted.org/git/389/lib389.git) and set your PYTHONPATH accordingly + + +Description: +------------------------------------------------- +This package includes python-lib389 based python scripts for testing the Directory Server. The following describes the various types of tests available: + +tickets - These scripts test individual bug fixes +suites - These test functinoal areas of the server +stress - These tests perform "stress" tests on the server + +There is also a "create_test.py" script available to construct a template test script for creating new tests. + + +Documentation: +------------------------------------------------- +See http://www.port389.org for the latest information + +http://www.port389.org/docs/389ds/FAQ/upstream-test-framework.html +http://www.port389.org/docs/389ds/howto/howto-write-lib389.html +http://www.port389.org/docs/389ds/howto/howto-run-lib389-jenkins.html + diff --git a/dirsrvtests/__init__.py b/dirsrvtests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/cmd/__init__.py b/dirsrvtests/cmd/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/cmd/dsadm/__init__.py b/dirsrvtests/cmd/dsadm/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/cmd/dsadm/dsadm.py b/dirsrvtests/cmd/dsadm/dsadm.py new file mode 100755 index 0000000..ece5f23 --- /dev/null +++ b/dirsrvtests/cmd/dsadm/dsadm.py @@ -0,0 +1,543 @@ +#! /usr/bin/python2 +# +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- + +# Authors: +# Thierry Bordaz + +import sys +import os +import argparse +import pdb +import tempfile +import time +import pwd +import grp +import platform +import socket +import shutil +from subprocess import Popen, PIPE, STDOUT +import string + +SETUP_DS = "/sbin/setup-ds.pl" +REMOVE_DS = "/sbin/remove-ds.pl" +INITCONFIGDIR = ".dirsrv" +SCRIPT_START = "start-slapd" +SCRIPT_STOP = "stop-slapd" +SCRIPT_RESTART = "restart-slapd" +ENVIRON_SERVERID = '389-SERVER-ID' +ENVIRON_USER = '389-USER' +ENVIRON_GROUP = '389-GROUP' +ENVIRON_DIRECTORY = '389-DIRECTORY' +ENVIRON_PORT = '389-PORT' +ENVIRON_SECURE_PORT = '389-SECURE-PORT' +DEFAULT_PORT_ROOT = str(389) +DEFAULT_PORT_NON_ROOT = str(1389) +DEFAULT_SECURE_PORT_ROOT = str(636) +DEFAULT_SECURE_PORT_NON_ROOT = str(1636) +DEFAULT_USER = 'nobody' +DEFAULT_GROUP = 'nobody' +DEFAULT_ROOT_DN = 'cn=Directory Manager' +DEFAULT_HOSTNAME = socket.gethostname() + + + +def validate_user(user): + ''' + If a user is provided it returns its username + else it returns the current username. + It checks that the userId or userName exists + + :param: user (optional) can be a userName or userId + :return: userName of the provided user, if none is provided, it returns current user name + ''' + assert(user) + if user.isdigit(): + try: + username = pwd.getpwuid(int(user)).pw_name + except KeyError: + raise KeyError('Unknown userId %d' % user) + return username + else: + try: + pwd.getpwnam(user).pw_uid + except KeyError: + raise KeyError('Unknown userName %s' % user) + return user + +def get_default_user(): + user = os.environ.get(ENVIRON_USER, None) + if not user: + user = os.getuid() + return str(user) + +def get_default_group(): + ''' + If a group is provided it returns its groupname + else it returns the current groupname. + It checks that the groupId or groupName exists + + :param: group (optional) can be a groupName or groupId + :return: groupName of the provided group, if none is provided, it returns current group name + ''' + group = os.environ.get(ENVIRON_GROUP, None) + if not group: + return pwd.getpwuid(os.getuid()).pw_name + return group + +def validate_group(group): + assert(group) + if str(group).isdigit(): + try: + groupname = grp.getgrgid(group).gr_name + return groupname + except: + raise KeyError('Unknown groupId %d' % group) + else: + try: + groupname = grp.getgrnam(group).gr_name + return groupname + except: + raise KeyError('Unknown groupName %s' % group) + +def test_get_group(): + try: + grpname = get_default_group() + print 'get_group: %s' % grpname + except: + raise + print "Can not find user group" + pass + try: + grpname = get_default_group(group='tbordaz') + print 'get_group: %s' % grpname + except: + raise + print "Can not find user group" + pass + try: + grpname = get_default_group(group='coucou') + print 'get_group: %s' % grpname + except: + print "Can not find user group coucou" + pass + try: + grpname = get_default_group('thierry') + print 'get_group: %s' % grpname + except: + raise + print "Can not find user group thierry" + pass + try: + grpname = get_default_group(1000) + print 'get_group: %s' % grpname + except: + raise + print "Can not find user group 1000" + pass + try: + grpname = get_default_group(20532) + print 'get_group: %s' % grpname + except: + raise + print "Can not find user group 20532" + pass + try: + grpname = get_default_group(123) + print 'get_group: %s' % grpname + except: + print "Can not find user group 123" + pass + +def get_default_port(): + port = os.environ.get(ENVIRON_PORT, None) + if port: + return port + + if os.getuid() == 0: + return DEFAULT_PORT_ROOT + else: + return DEFAULT_PORT_NON_ROOT + +def validate_port(port): + assert port + if not port.isdigit() or int(port) <= 0 : + raise Exception("port number is invalid: %s" % port) + +def get_default_directory(): + directory = os.environ.get(ENVIRON_DIRECTORY, None) + if not directory: + directory = os.getcwd() + return directory + +def validate_directory(directory): + assert directory + if not os.path.isdir(directory): + raise Exception("Supplied directory path is not a directory") + + if not os.access(directory, os.W_OK): + raise Exception("Supplied directory is not writable") + +def get_default_serverid(): + serverid = os.environ.get(ENVIRON_SERVERID, None) + if not serverid: + serverid = socket.gethostname().split('.')[0] + return serverid + +def validate_serverid(serverid): + if not serverid: + raise Exception("Server id is not defined") + return serverid + + +def get_inst_dir(serverid): + assert serverid + home = os.getenv("HOME") + inst_initconfig_file = "%s/%s/dirsrv-%s" % (home, INITCONFIGDIR, serverid) + if not os.path.isfile(inst_initconfig_file): + raise Exception("%s config file not found" % inst_initconfig_file) + f = open(inst_initconfig_file, "r") + for line in f: + if line.startswith("INST_DIR"): + inst_dir = line.split("=")[1] + inst_dir = inst_dir.replace("\r", "") + inst_dir = inst_dir.replace("\n", "") + return inst_dir + +def sanity_check(): + if os.getuid() == 0: + raise Exception("Not tested for root user.. sorry") + + home = os.getenv("HOME") + inst_initconfig_dir = "%s/%s" % (home, INITCONFIGDIR) + if not os.path.isdir(inst_initconfig_dir): + raise Exception("Please create the directory \'%s\' and retry." % inst_initconfig_dir ) + +class DSadmCmd(object): + def __init__(self): + self.version = '0.1' + + def _start_subparser(self, subparsers): + start_parser = subparsers.add_parser( + 'start', + help='Start a Directory Server Instance') + start_parser.add_argument('-I', '--server-id', dest='server_id', type=str, nargs='?', + metavar='SERVER-ID', + help='Server Identifier (Default: %s) ' % get_default_serverid()) + start_parser.set_defaults(func=self.start_action) + + def _stop_subparser(self, subparsers): + start_parser = subparsers.add_parser( + 'stop', + help='Stop a Directory Server Instance') + start_parser.add_argument('-I', '--server-id', dest='server_id', type=str, nargs='?', + metavar='SERVER-ID', + help='Server Identifier (Default: %s) ' % get_default_serverid()) + start_parser.set_defaults(func=self.stop_action) + + def _restart_subparser(self, subparsers): + start_parser = subparsers.add_parser( + 'restart', + help='Retart a Directory Server Instance') + start_parser.add_argument('-I', '--server-id', dest='server_id', type=str, nargs='?', + metavar='SERVER-ID', + help='Server Identifier (Default: %s) ' % get_default_serverid()) + start_parser.set_defaults(func=self.restart_action) + + def _delete_subparser(self, subparsers): + delete_parser = subparsers.add_parser( + 'delete', + help='Delete a Directory Server Instance') + delete_parser.add_argument('-I', '--server-id', dest='server_id', type=str, nargs='?', + metavar='SERVER-ID', + help='Server Identifier (Default: %s) ' % get_default_serverid()) + delete_parser.add_argument('-debug', '--debug', dest='debug_level', type=int, nargs='?', + metavar='DEBUG_LEVEL', + help='Debug level (Default: 0)') + delete_parser.set_defaults(func=self.delete_action) + + def _create_subparser(self, subparsers): + create_parser = subparsers.add_parser( + 'create', + help='Create a Directory Server Instance') + create_parser.add_argument('-I', '--server-id', dest='server_id', type=str, nargs='?', + metavar='SERVER-ID', + help='Server Identifier (Default: %s) ' % get_default_serverid()) + create_parser.add_argument('-s', '--suffix', dest='suffix', type=str, nargs='?', + metavar='SUFFIX-DN', + help='Suffix (Default: create no suffix)') + create_parser.add_argument('-p', '--port', dest='port', type=int, nargs='?', + metavar='NON-SECURE-PORT', + help='Normal Port to listen (Default: %s(root)/%s(non-root)) ' % (DEFAULT_PORT_ROOT, DEFAULT_PORT_NON_ROOT)) + + create_parser.add_argument('-P', '--secure-port', dest='secure_port', type=int, nargs='?', + metavar='SECURE-PORT', + help='Secure Port to listen (Default: %s(root)/%s(non-root))' % (DEFAULT_SECURE_PORT_ROOT, DEFAULT_SECURE_PORT_NON_ROOT)) + + create_parser.add_argument('-D', '--rootDN', dest='root_dn', type=str, nargs='?', + metavar='ROOT-DN', + help='Uses DN as Directory Manager DN (Default: \'%s\')' % (DEFAULT_ROOT_DN)) + + create_parser.add_argument('-u', '--user-name', dest='user_name', type=str, nargs='?', + metavar='USER-NAME', + help='User name of the instance owner (Default: %s)' % DEFAULT_USER) + + create_parser.add_argument('-g', '--group-name', dest='group_name', type=str, nargs='?', + metavar='GROUP-NAME', + help='Group name of the instance owner (Default: %s)' % DEFAULT_GROUP) + + create_parser.add_argument('-d', '--directory-path', dest='directory_path', type=str, nargs='?', + metavar='DIRECTORY-PATH', + help='Installation directory path (Default: %s)' % get_default_directory()) + create_parser.add_argument('-debug', '--debug', dest='debug_level', type=int, nargs='?', + metavar='DEBUG_LEVEL', + help='Debug level (Default: 0)') + create_parser.add_argument('-k', '--keep_template', dest='keep_template', type=str, nargs='?', + help='Keep template file') + + create_parser.set_defaults(func=self.create_action) + + # + # common function for start/stop/restart actions + # + def script_action(self, args, script, action_str): + args = vars(args) + serverid = args.get('server_id', None) + if not serverid: + serverid = get_default_serverid() + + script_file = "%s/%s" % (get_inst_dir(serverid), script) + if not os.path.isfile(script_file): + raise Exception("%s not found" % script_file) + + if not os.access(script_file, os.X_OK): + raise Exception("%s not executable" % script_file) + + env = os.environ.copy() + prog = [ script_file ] + pipe = Popen(prog, cwd=os.getcwd(), env=env, + stdin=PIPE, stdout=PIPE, stderr=STDOUT) + child_stdin = pipe.stdin + child_stdout = pipe.stdout + for line in child_stdout: + sys.stdout.write(line) + child_stdout.close() + child_stdin.close() + + rc = pipe.wait() + if rc == 0: + print "Directory %s %s" % (serverid, action_str) + else: + print "Failure: directory %s not %s (%s)" % (serverid, action_str, rc) + return + + def start_action(self, args): + self.script_action(args, SCRIPT_START, "started") + + + def stop_action(self, args): + self.script_action(args, SCRIPT_STOP, "stopped") + + + def restart_action(self, args): + + self.script_action(args, SCRIPT_RESTART, "restarted") + + def delete_action(self, args): + args = vars(args) + serverid = args.get('server_id', None) + if not serverid: + serverid = get_default_serverid() + + #prepare the remove-ds options + debug_level = args.get('debug_level', None) + if debug_level: + debug_str = ['-d'] + for i in range(1, int(debug_level)): + debug_str.append('d') + debug_str = ''.join(debug_str) + + env = os.environ.copy() + prog = [REMOVE_DS] + if debug_level: + prog.append(debug_str) + prog.append("-i") + prog.append("slapd-%s" % serverid) + + # run the REMOVE_DS command and print the possible output + pipe = Popen(prog, cwd=os.getcwd(), env=env, + stdin=PIPE, stdout=PIPE, stderr=STDOUT) + child_stdin = pipe.stdin + child_stdout = pipe.stdout + for line in child_stdout: + if debug_level: + sys.stdout.write(line) + child_stdout.close() + child_stdin.close() + + rc = pipe.wait() + if rc == 0: + print "Directory server \'%s\' successfully deleted" % serverid + else: + print "Fail to delete directory \'%s\': %d" % (serverid, rc) + return + + # + # used by create subcommand to build the template file + # + def _create_setup_ds_file(self, args, user=None, group=None): + # Get/checks the argument with the following order + # - parameter + # - Environment + # - default + serverid = args.get('server_id', None) + if not serverid: + serverid = get_default_serverid() + serverid = validate_serverid(serverid) + + username = args.get('user_name', None) + if not username: + username = get_default_user() + username = validate_user(username) + + groupname = args.get('group_name', None) + if not groupname: + groupname = get_default_group() + groupname = validate_group(groupname) + + directoryname = args.get('directory_path', None) + if not directoryname: + directoryname = get_default_directory() + validate_directory(directoryname) + + portnumber = args.get('port', None) + if not portnumber: + portnumber = get_default_port() + validate_port(portnumber) + + suffix = args.get('suffix', None) + + tempf = tempfile.NamedTemporaryFile(delete=False) + + tempf.write('[General]\n') + tempf.write('FullMachineName=%s\n' % DEFAULT_HOSTNAME) + tempf.write('SuiteSpotUserID=%s\n' % username) + tempf.write('SuiteSpotGroup=%s\n' % groupname) + tempf.write('ServerRoot=%s\n' % directoryname) + tempf.write('\n') + tempf.write('[slapd]\n') + tempf.write('ServerPort=1389\n') + tempf.write('ServerIdentifier=%s\n' % serverid) + if suffix: + tempf.write('Suffix=%s\n' % suffix) + tempf.write('RootDN=cn=Directory Manager\n') + tempf.write('RootDNPwd=Secret12\n') + tempf.write('sysconfdir=%s/etc\n' % directoryname) + tempf.write('localstatedir=%s/var\n' % directoryname) + tempf.write('inst_dir=%s/lib/dirsrv/slapd-%s\n'% (directoryname, serverid)) + tempf.write('config_dir=%s/etc/dirsrv/slapd-%s\n' % (directoryname, serverid)) + tempf.close() + + keep_template = args.get('keep_template', None) + if keep_template: + shutil.copy(tempf.name, keep_template) + + + return tempf + + # + # It silently creates an instance. + # After creation the instance is started + # + def create_action(self, args): + args = vars(args) + + # retrieve the serverid here just to log the final status + serverid = args.get('server_id', None) + if not serverid: + serverid = get_default_serverid() + + # prepare the template file + tempf = self._create_setup_ds_file(args) + + #prepare the setup-ds options + debug_level = args.get('debug_level', None) + if debug_level: + debug_str = ['-d'] + for i in range(1, int(debug_level)): + debug_str.append('d') + debug_str = ''.join(debug_str) + + # + # run the SETUP_DS command and print the possible output + # + env = os.environ.copy() + prog = [SETUP_DS] + if debug_level: + prog.append(debug_str) + prog.append("--silent") + prog.append("--file=%s" % tempf.name) + tempf.close() + + pipe = Popen(prog, cwd=os.getcwd(), env=env, + stdin=PIPE, stdout=PIPE, stderr=STDOUT) + child_stdin = pipe.stdin + child_stdout = pipe.stdout + for line in child_stdout: + if debug_level: + sys.stdout.write(line) + child_stdout.close() + child_stdin.close() + + os.unlink(tempf.name) + rc = pipe.wait() + if rc == 0: + print "Directory server \'%s\' successfully created" % serverid + else: + print "Fail to create directory \'%s\': %d" % (serverid, rc) + return + + # + # parser of the main command. It contains subcommands + # + def get_parser(self, argv): + + + parser = argparse.ArgumentParser( + description='Managing a local directory server instance') + + subparsers = parser.add_subparsers( + metavar='SUBCOMMAND', + help='The action to perform') + + #pdb.set_trace() + # subcommands + self._create_subparser(subparsers) + self._delete_subparser(subparsers) + self._start_subparser(subparsers) + self._stop_subparser(subparsers) + self._restart_subparser(subparsers) + + # Sanity check that the debug level is valid + args = vars(parser.parse_args(argv)) + debug_level = args.get('debug_level', None) + if debug_level and (int(debug_level) < 1 or int(debug_level > 5)): + raise Exception("invalid debug level: range 1..5") + + return parser + + def main(self, argv): + sanity_check() + parser = self.get_parser(argv) + args = parser.parse_args(argv) + args.func(args) + return + +if __name__ == '__main__': + DSadmCmd().main(sys.argv[1:]) diff --git a/dirsrvtests/create_test.py b/dirsrvtests/create_test.py new file mode 100755 index 0000000..3898279 --- /dev/null +++ b/dirsrvtests/create_test.py @@ -0,0 +1,710 @@ +#!/usr/bin/python +# +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- + +import sys +import optparse + +"""This script generates a template test script that handles the +non-interesting parts of a test script: +- topology, +- test (to be completed by the user), +- final, +- and run-isolated function +""" + + +def displayUsage(): + """Display the usage""" + print ('\nUsage:\ncreate_ticket.py -t|--ticket ' + + '-s|--suite ' + + '[ i|--instances ' + + '[ -m|--masters -h|--hubs ' + + '-c|--consumers ] -o|--outputfile ]\n') + print ('If only "-t" is provided then a single standalone instance is ' + + 'created. Or you can create a test suite script using ' + + '"-s|--suite" instead of using "-t|--ticket". The "-i" option ' + + 'can add mulitple standalone instances(maximum 10). However, you' + + ' can not mix "-i" with the replication options(-m, -h , -c). ' + + 'There is a maximum of 10 masters, 10 hubs, and 10 consumers.') + exit(1) + + +def writeFinalizer(): + """Write the finalizer function - delete/stop each instance""" + + def writeInstanceOp(action): + """Write instance finializer action""" + if repl_deployment: + for idx in range(masters): + idx += 1 + TEST.write(' master' + str(idx) + '.' + action + + '()\n') + for idx in range(hubs): + idx += 1 + TEST.write(' hub' + str(idx) + '.' + action + + '()\n') + for idx in range(consumers): + idx += 1 + TEST.write(' consumer' + str(idx) + '.' + action + + '()\n') + else: + for idx in range(instances): + idx += 1 + if idx == 1: + idx = '' + else: + idx = str(idx) + TEST.write(' standalone' + idx + '.' + action + + '()\n') + + TEST.write(' def fin():\n') + TEST.write(' """') + TEST.write('If we are debugging just stop the instances, ' + + 'otherwise remove them\n') + TEST.write(' """\n') + TEST.write(' if DEBUGGING:\n') + writeInstanceOp('stop') + TEST.write(' else:\n') + writeInstanceOp('delete') + TEST.write(' request.addfinalizer(fin)') + TEST.write('\n\n') + + +desc = 'Script to generate an initial lib389 test script. ' + \ + 'This generates the topology, test, final, and run-isolated functions.' + +if len(sys.argv) > 0: + parser = optparse.OptionParser(description=desc, add_help_option=False) + + # Script options + parser.add_option('-t', '--ticket', dest='ticket', default=None) + parser.add_option('-s', '--suite', dest='suite', default=None) + parser.add_option('-i', '--instances', dest='inst', default=None) + parser.add_option('-m', '--masters', dest='masters', default='0') + parser.add_option('-h', '--hubs', dest='hubs', default='0') + parser.add_option('-c', '--consumers', dest='consumers', default='0') + parser.add_option('-o', '--outputfile', dest='filename', default=None) + + # Validate the options + try: + (args, opts) = parser.parse_args() + except: + displayUsage() + + if args.ticket is None and args.suite is None: + print('Missing required ticket number/suite name') + displayUsage() + + if args.ticket and args.suite: + print('You must choose either "-t|--ticket" or "-s|--suite", ' + + 'but not both.') + displayUsage() + + if int(args.masters) == 0: + if int(args.hubs) > 0 or int(args.consumers) > 0: + print('You must use "-m|--masters" if you want to have hubs ' + + 'and/or consumers') + displayUsage() + + if not args.masters.isdigit() or \ + int(args.masters) > 10 or \ + int(args.masters) < 0: + print('Invalid value for "--masters", it must be a number and it can' + + ' not be greater than 10') + displayUsage() + + if not args.hubs.isdigit() or int(args.hubs) > 10 or int(args.hubs) < 0: + print('Invalid value for "--hubs", it must be a number and it can ' + + 'not be greater than 10') + displayUsage() + + if not args.consumers.isdigit() or \ + int(args.consumers) > 10 or \ + int(args.consumers) < 0: + print('Invalid value for "--consumers", it must be a number and it ' + + 'can not be greater than 10') + displayUsage() + + if args.inst: + if not args.inst.isdigit() or \ + int(args.inst) > 10 or \ + int(args.inst) < 1: + print('Invalid value for "--instances", it must be a number ' + + 'greater than 0 and not greater than 10') + displayUsage() + if int(args.inst) > 0: + if int(args.masters) > 0 or \ + int(args.hubs) > 0 or \ + int(args.consumers) > 0: + print('You can not mix "--instances" with replication.') + displayUsage() + + # Extract usable values + masters = int(args.masters) + hubs = int(args.hubs) + consumers = int(args.consumers) + ticket = args.ticket + suite = args.suite + if not args.inst: + instances = 1 + else: + instances = int(args.inst) + filename = args.filename + + # + # Create/open the new test script file + # + if not filename: + if ticket: + filename = 'ticket' + ticket + '_test.py' + else: + # suite + filename = suite + '_test.py' + + try: + TEST = open(filename, "w") + except IOError: + print("Can\'t open file:", filename) + exit(1) + + # + # Write the imports + # + TEST.write('import os\nimport sys\nimport time\nimport ldap\n' + + 'import logging\nimport pytest\n') + TEST.write('from lib389 import DirSrv, Entry, tools, tasks\nfrom ' + + 'lib389.tools import DirSrvTools\nfrom lib389._constants ' + + 'import *\nfrom lib389.properties import *\n' + + 'from lib389.tasks import *\nfrom lib389.utils import *\n\n') + + # + # Set the logger and other settings + # + TEST.write('DEBUGGING = False\n\n') + TEST.write('if DEBUGGING:\n') + TEST.write(' logging.getLogger(__name__).setLevel(logging.DEBUG)\n') + TEST.write('else:\n') + TEST.write(' logging.getLogger(__name__).setLevel(logging.INFO)\n') + TEST.write('log = logging.getLogger(__name__)\n\n\n') + + # + # Write the replication or standalone classes + # + repl_deployment = False + if masters + hubs + consumers > 0: + # + # Write the replication class + # + repl_deployment = True + + TEST.write('class TopologyReplication(object):\n') + TEST.write(' """The Replication Topology Class"""\n') + TEST.write(' def __init__(self') + for idx in range(masters): + TEST.write(', master' + str(idx + 1)) + for idx in range(hubs): + TEST.write(', hub' + str(idx + 1)) + for idx in range(consumers): + TEST.write(', consumer' + str(idx + 1)) + TEST.write('):\n') + TEST.write(' """Init"""\n') + + for idx in range(masters): + TEST.write(' master' + str(idx + 1) + '.open()\n') + TEST.write(' self.master' + str(idx + 1) + ' = master' + + str(idx + 1) + '\n') + for idx in range(hubs): + TEST.write(' hub' + str(idx + 1) + '.open()\n') + TEST.write(' self.hub' + str(idx + 1) + ' = hub' + + str(idx + 1) + '\n') + for idx in range(consumers): + TEST.write(' consumer' + str(idx + 1) + '.open()\n') + TEST.write(' self.consumer' + str(idx + 1) + ' = consumer' + + str(idx + 1) + '\n') + TEST.write('\n\n') + else: + # + # Write the standalone class + # + TEST.write('class TopologyStandalone(object):\n') + TEST.write(' """The DS Topology Class"""\n') + TEST.write(' def __init__(self') + for idx in range(instances): + idx += 1 + if idx == 1: + idx = '' + else: + idx = str(idx) + TEST.write(', standalone' + idx) + TEST.write('):\n') + TEST.write(' """Init"""\n') + for idx in range(instances): + idx += 1 + if idx == 1: + idx = '' + else: + idx = str(idx) + TEST.write(' standalone' + idx + '.open()\n') + TEST.write(' self.standalone' + idx + ' = standalone' + + idx + '\n') + TEST.write('\n\n') + + # + # Write the 'topology function' + # + TEST.write('@pytest.fixture(scope="module")\n') + TEST.write('def topology(request):\n') + + if repl_deployment: + # + # Create the replication instances + # + TEST.write(' """Create Replication Deployment"""\n\n') + for idx in range(masters): + idx = str(idx + 1) + TEST.write(' # Creating master ' + idx + '...\n') + TEST.write(' if DEBUGGING:\n') + TEST.write(' master' + idx + ' = DirSrv(verbose=True)\n') + TEST.write(' else:\n') + TEST.write(' master' + idx + ' = DirSrv(verbose=False)\n') + TEST.write(' args_instance[SER_HOST] = HOST_MASTER_' + idx + + '\n') + TEST.write(' args_instance[SER_PORT] = PORT_MASTER_' + idx + + '\n') + TEST.write(' args_instance[SER_SERVERID_PROP] = ' + + 'SERVERID_MASTER_' + idx + '\n') + TEST.write(' args_instance[SER_CREATION_SUFFIX] = ' + + 'DEFAULT_SUFFIX\n') + TEST.write(' args_master = args_instance.copy()\n') + TEST.write(' master' + idx + '.allocate(args_master)\n') + TEST.write(' instance_master' + idx + ' = master' + idx + + '.exists()\n') + TEST.write(' if instance_master' + idx + ':\n') + TEST.write(' master' + idx + '.delete()\n') + TEST.write(' master' + idx + '.create()\n') + TEST.write(' master' + idx + '.open()\n') + TEST.write(' master' + idx + '.replica.enableReplication' + + '(suffix=SUFFIX, role=REPLICAROLE_MASTER, ' + + 'replicaId=REPLICAID_MASTER_' + idx + ')\n\n') + + for idx in range(hubs): + idx = str(idx + 1) + TEST.write(' # Creating hub ' + idx + '...\n') + TEST.write(' if DEBUGGING:\n') + TEST.write(' hub' + idx + ' = DirSrv(verbose=True)\n') + TEST.write(' else:\n') + TEST.write(' hub' + idx + ' = DirSrv(verbose=False)\n') + TEST.write(' args_instance[SER_HOST] = HOST_HUB_' + idx + '\n') + TEST.write(' args_instance[SER_PORT] = PORT_HUB_' + idx + '\n') + TEST.write(' args_instance[SER_SERVERID_PROP] = SERVERID_HUB_' + + idx + '\n') + TEST.write(' args_instance[SER_CREATION_SUFFIX] = ' + + 'DEFAULT_SUFFIX\n') + TEST.write(' args_hub = args_instance.copy()\n') + TEST.write(' hub' + idx + '.allocate(args_hub)\n') + TEST.write(' instance_hub' + idx + ' = hub' + idx + + '.exists()\n') + TEST.write(' if instance_hub' + idx + ':\n') + TEST.write(' hub' + idx + '.delete()\n') + TEST.write(' hub' + idx + '.create()\n') + TEST.write(' hub' + idx + '.open()\n') + TEST.write(' hub' + idx + '.replica.enableReplication' + + '(suffix=SUFFIX, role=REPLICAROLE_HUB, ' + + 'replicaId=REPLICAID_HUB_' + idx + ')\n\n') + + for idx in range(consumers): + idx = str(idx + 1) + TEST.write(' # Creating consumer ' + idx + '...\n') + TEST.write(' if DEBUGGING:\n') + TEST.write(' consumer' + idx + ' = DirSrv(verbose=True)\n') + TEST.write(' else:\n') + TEST.write(' consumer' + idx + ' = DirSrv(verbose=False)\n') + TEST.write(' args_instance[SER_HOST] = HOST_CONSUMER_' + idx + + '\n') + TEST.write(' args_instance[SER_PORT] = PORT_CONSUMER_' + idx + + '\n') + TEST.write(' args_instance[SER_SERVERID_PROP] = ' + + 'SERVERID_CONSUMER_' + idx + '\n') + TEST.write(' args_instance[SER_CREATION_SUFFIX] = ' + + 'DEFAULT_SUFFIX\n') + TEST.write(' args_consumer = args_instance.copy()\n') + TEST.write(' consumer' + idx + '.allocate(args_consumer)\n') + TEST.write(' instance_consumer' + idx + ' = consumer' + idx + + '.exists()\n') + TEST.write(' if instance_consumer' + idx + ':\n') + TEST.write(' consumer' + idx + '.delete()\n') + TEST.write(' consumer' + idx + '.create()\n') + TEST.write(' consumer' + idx + '.open()\n') + TEST.write(' consumer' + idx + '.replica.enableReplication' + + '(suffix=SUFFIX, role=REPLICAROLE_CONSUMER, ' + + 'replicaId=CONSUMER_REPLICAID)\n\n') + + writeFinalizer() + + # + # Create the master agreements + # + TEST.write(' #\n') + TEST.write(' # Create all the agreements\n') + TEST.write(' #\n') + agmt_count = 0 + for idx in range(masters): + master_idx = idx + 1 + for idx in range(masters): + # + # Create agreements with the other masters (master -> master) + # + idx += 1 + if master_idx == idx: + # skip ourselves + continue + TEST.write(' # Creating agreement from master ' + + str(master_idx) + ' to master ' + str(idx) + '\n') + TEST.write(" properties = {RA_NAME: " + + "'meTo_' + master" + str(idx) + + ".host + ':' + str(master" + str(idx) + + ".port),\n") + TEST.write(" RA_BINDDN: " + + "defaultProperties[REPLICATION_BIND_DN],\n") + TEST.write(" RA_BINDPW: " + + "defaultProperties[REPLICATION_BIND_PW],\n") + TEST.write(" RA_METHOD: " + + "defaultProperties[REPLICATION_BIND_METHOD],\n") + TEST.write(" RA_TRANSPORT_PROT: " + + "defaultProperties[REPLICATION_TRANSPORT]}\n") + TEST.write(' m' + str(master_idx) + '_m' + str(idx) + + '_agmt = master' + str(master_idx) + + '.agreement.create(suffix=SUFFIX, host=master' + + str(idx) + '.host, port=master' + str(idx) + + '.port, properties=properties)\n') + TEST.write(' if not m' + str(master_idx) + '_m' + str(idx) + + '_agmt:\n') + TEST.write(' log.fatal("Fail to create a master -> ' + + 'master replica agreement")\n') + TEST.write(' sys.exit(1)\n') + TEST.write(' log.debug("%s created" % m' + str(master_idx) + + '_m' + str(idx) + '_agmt)\n\n') + agmt_count += 1 + + for idx in range(hubs): + idx += 1 + # + # Create agmts from each master to each hub (master -> hub) + # + TEST.write(' # Creating agreement from master ' + + str(master_idx) + ' to hub ' + str(idx) + '\n') + TEST.write(" properties = {RA_NAME: " + + "'meTo_' + hub" + str(idx) + + ".host + ':' + str(hub" + str(idx) + + ".port),\n") + TEST.write(" RA_BINDDN: " + + "defaultProperties[REPLICATION_BIND_DN],\n") + TEST.write(" RA_BINDPW: " + + "defaultProperties[REPLICATION_BIND_PW],\n") + TEST.write(" RA_METHOD: " + + "defaultProperties[REPLICATION_BIND_METHOD],\n") + TEST.write(" RA_TRANSPORT_PROT: " + + "defaultProperties[REPLICATION_TRANSPORT]}\n") + TEST.write(' m' + str(master_idx) + '_h' + str(idx) + + '_agmt = master' + str(master_idx) + + '.agreement.create(suffix=SUFFIX, host=hub' + + str(idx) + '.host, port=hub' + str(idx) + + '.port, properties=properties)\n') + TEST.write(' if not m' + str(master_idx) + '_h' + str(idx) + + '_agmt:\n') + TEST.write(' log.fatal("Fail to create a master -> ' + + 'hub replica agreement")\n') + TEST.write(' sys.exit(1)\n') + TEST.write(' log.debug("%s created" % m' + str(master_idx) + + '_h' + str(idx) + '_agmt)\n\n') + agmt_count += 1 + + # + # Create the hub agreements + # + for idx in range(hubs): + hub_idx = idx + 1 + # + # Add agreements from each hub to each consumer (hub -> consumer) + # + for idx in range(consumers): + idx += 1 + # + # Create agreements from each hub to each consumer + # + TEST.write(' # Creating agreement from hub ' + str(hub_idx) + + ' to consumer ' + str(idx) + '\n') + TEST.write(" properties = {RA_NAME: " + + "'meTo_' + consumer" + str(idx) + + ".host + ':' + str(consumer" + str(idx) + + ".port),\n") + TEST.write(" RA_BINDDN: " + + "defaultProperties[REPLICATION_BIND_DN],\n") + TEST.write(" RA_BINDPW: " + + "defaultProperties[REPLICATION_BIND_PW],\n") + TEST.write(" RA_METHOD: " + + "defaultProperties[REPLICATION_BIND_METHOD],\n") + TEST.write(" RA_TRANSPORT_PROT: " + + "defaultProperties[REPLICATION_TRANSPORT]}\n") + TEST.write(' h' + str(hub_idx) + '_c' + str(idx) + + '_agmt = hub' + str(hub_idx) + + '.agreement.create(suffix=SUFFIX, host=consumer' + + str(idx) + '.host, port=consumer' + str(idx) + + '.port, properties=properties)\n') + TEST.write(' if not h' + str(hub_idx) + '_c' + str(idx) + + '_agmt:\n') + TEST.write(' log.fatal("Fail to create a hub -> ' + + 'consumer replica agreement")\n') + TEST.write(' sys.exit(1)\n') + TEST.write(' log.debug("%s created" % h' + str(hub_idx) + + '_c' + str(idx) + '_agmt)\n\n') + agmt_count += 1 + + if hubs == 0: + # + # No Hubs, see if there are any consumers to create agreements to + # + for idx in range(masters): + master_idx = idx + 1 + # + # Create agreements with the consumers (master -> consumer) + # + for idx in range(consumers): + idx += 1 + # + # Create agreements from each master to each consumer + # + TEST.write(' # Creating agreement from master ' + + str(master_idx) + ' to consumer ' + str(idx) + + '\n') + TEST.write(" properties = {RA_NAME: " + + "'meTo_' + consumer" + str(idx) + + ".host + ':' + str(consumer" + str(idx) + + ".port),\n") + TEST.write(" RA_BINDDN: " + + "defaultProperties[REPLICATION_BIND_DN],\n") + TEST.write(" RA_BINDPW: " + + "defaultProperties[REPLICATION_BIND_PW],\n") + TEST.write(" RA_METHOD: " + + "defaultProperties[REPLICATION_BIND_METHOD],\n") + TEST.write(" RA_TRANSPORT_PROT: " + + "defaultProperties[REPLICATION_TRANSPORT]}\n") + TEST.write(' m' + str(master_idx) + '_c' + str(idx) + + '_agmt = master' + str(master_idx) + + '.agreement.create(suffix=SUFFIX, ' + + 'host=consumer' + str(idx) + + '.host, port=consumer' + str(idx) + + '.port, properties=properties)\n') + TEST.write(' if not m' + str(master_idx) + '_c' + + str(idx) + '_agmt:\n') + TEST.write(' log.fatal("Fail to create a hub -> ' + + 'consumer replica agreement")\n') + TEST.write(' sys.exit(1)\n') + TEST.write(' log.debug("%s created" % m' + + str(master_idx) + '_c' + str(idx) + + '_agmt)\n\n') + agmt_count += 1 + + # + # Add sleep that allows all the agreemnts to get situated + # + TEST.write(' # Allow the replicas to get situated with the new ' + + 'agreements...\n') + TEST.write(' time.sleep(5)\n\n') + + # + # Write the replication initializations + # + TEST.write(' #\n') + TEST.write(' # Initialize all the agreements\n') + TEST.write(' #\n') + + # Masters + for idx in range(masters): + idx += 1 + if idx == 1: + continue + TEST.write(' master1.agreement.init(SUFFIX, HOST_MASTER_' + + str(idx) + ', PORT_MASTER_' + str(idx) + ')\n') + TEST.write(' master1.waitForReplInit(m1_m' + str(idx) + + '_agmt)\n') + + # Hubs + consumers_inited = False + for idx in range(hubs): + idx += 1 + TEST.write(' master1.agreement.init(SUFFIX, HOST_HUB_' + + str(idx) + ', PORT_HUB_' + str(idx) + ')\n') + TEST.write(' master1.waitForReplInit(m1_h' + str(idx) + + '_agmt)\n') + for idx in range(consumers): + if consumers_inited: + continue + idx += 1 + TEST.write(' hub1.agreement.init(SUFFIX, HOST_CONSUMER_' + + str(idx) + ', PORT_CONSUMER_' + str(idx) + ')\n') + TEST.write(' hub1.waitForReplInit(h1_c' + str(idx) + + '_agmt)\n') + consumers_inited = True + + # Consumers (master -> consumer) + if hubs == 0: + for idx in range(consumers): + idx += 1 + TEST.write(' master1.agreement.init(SUFFIX, ' + + 'HOST_CONSUMER_' + str(idx) + ', PORT_CONSUMER_' + + str(idx) + ')\n') + TEST.write(' master1.waitForReplInit(m1_c' + str(idx) + + '_agmt)\n') + + TEST.write('\n') + + # + # Write replicaton check + # + if agmt_count > 0: + # Find the lowest replica type (consumer -> master) + if consumers > 0: + replica = 'consumer1' + elif hubs > 0: + replica = 'hub1' + else: + replica = 'master2' + TEST.write(' # Check replication is working...\n') + TEST.write(' if master1.testReplication(DEFAULT_SUFFIX, ' + + replica + '):\n') + TEST.write(" log.info('Replication is working.')\n") + TEST.write(' else:\n') + TEST.write(" log.fatal('Replication is not working.')\n") + TEST.write(' assert False\n') + TEST.write('\n') + + # + # Write the finals steps for replication + # + TEST.write(' # Clear out the tmp dir\n') + TEST.write(' master1.clearTmpDir(__file__)\n\n') + TEST.write(' return TopologyReplication(master1') + for idx in range(masters): + idx += 1 + if idx == 1: + continue + TEST.write(', master' + str(idx)) + for idx in range(hubs): + TEST.write(', hub' + str(idx + 1)) + for idx in range(consumers): + TEST.write(', consumer' + str(idx + 1)) + TEST.write(')\n') + else: + # + # Standalone servers + # + + # Args for the standalone instance + TEST.write(' """Create DS Deployment"""\n\n') + for idx in range(instances): + idx += 1 + if idx == 1: + idx = '' + else: + idx = str(idx) + TEST.write(' # Creating standalone instance ' + idx + '...\n') + TEST.write(' if DEBUGGING:\n') + TEST.write(' standalone' + idx + + ' = DirSrv(verbose=True)\n') + TEST.write(' else:\n') + TEST.write(' standalone' + idx + + ' = DirSrv(verbose=False)\n') + TEST.write(' args_instance[SER_HOST] = HOST_STANDALONE' + + idx + '\n') + TEST.write(' args_instance[SER_PORT] = PORT_STANDALONE' + + idx + '\n') + TEST.write(' args_instance[SER_SERVERID_PROP] = ' + + 'SERVERID_STANDALONE' + idx + '\n') + TEST.write(' args_instance[SER_CREATION_SUFFIX] = ' + + 'DEFAULT_SUFFIX\n') + TEST.write(' args_standalone' + idx + ' = args_instance.copy' + + '()\n') + TEST.write(' standalone' + idx + '.allocate(args_standalone' + + idx + ')\n') + + # Get the status of the instance and restart it if it exists + TEST.write(' instance_standalone' + idx + ' = standalone' + + idx + '.exists()\n') + + # Remove the instance + TEST.write(' if instance_standalone' + idx + ':\n') + TEST.write(' standalone' + idx + '.delete()\n') + + # Create and open the instance + TEST.write(' standalone' + idx + '.create()\n') + TEST.write(' standalone' + idx + '.open()\n\n') + + writeFinalizer() + + TEST.write(' return TopologyStandalone(standalone') + for idx in range(instances): + idx += 1 + if idx == 1: + continue + TEST.write(', standalone' + str(idx)) + TEST.write(')\n') + + TEST.write('\n\n') + + # + # Write the test function + # + if ticket: + TEST.write('def test_ticket' + ticket + '(topology):\n') + if repl_deployment: + TEST.write(' """Write your replication test here.\n\n') + TEST.write(' To access each DirSrv instance use: ' + + 'topology.master1, topology.master2,\n' + + ' ..., topology.hub1, ..., topology.consumer1' + + ',...\n\n') + TEST.write(' Also, if you need any testcase initialization,\n') + TEST.write(' please, write additional fixture for that' + + '(include ' + 'finalizer).\n') + else: + TEST.write(' """Write your testcase here...\n\n') + TEST.write(' Also, if you need any testcase initialization,\n') + TEST.write(' please, write additional fixture for that' + + '(include finalizer).\n') + TEST.write('\n """\n\n') + + else: + # Write the first initial empty test function + TEST.write('def test_' + suite + '(topology):\n') + TEST.write(' """Write a single test here...\n\n') + TEST.write(' Also, if you need any test suite initialization,\n') + TEST.write(' please, write additional fixture for that(include ' + + 'finalizer).\n """\n') + + TEST.write(' if DEBUGGING:\n') + TEST.write(' # Add debugging steps(if any)...\n') + TEST.write(' pass\n\n') + TEST.write(" log.info('Test PASSED')\n") + TEST.write('\n\n') + + # + # Write the main function + # + TEST.write("if __name__ == '__main__':\n") + TEST.write(' # Run isolated\n') + TEST.write(' # -s for DEBUG mode\n') + TEST.write(' CURRENT_FILE = os.path.realpath(__file__)\n') + TEST.write(' pytest.main("-s %s" % CURRENT_FILE)\n\n') + + # + # Done, close things up + # + TEST.close() + print('Created: ' + filename) diff --git a/dirsrvtests/tests/data/README b/dirsrvtests/tests/data/README new file mode 100644 index 0000000..4261f92 --- /dev/null +++ b/dirsrvtests/tests/data/README @@ -0,0 +1,11 @@ +DATA DIRECTORY README + +This directory is used for storing LDIF files used by the dirsrvtests scripts. +This directory can be retrieved via getDir() from the DirSrv class. + +Example: + + data_dir_path = topology.standalone.getDir(__file__, DATA_DIR) + + ldif_file = data_dir_path + "ticket44444/1000entries.ldif" + diff --git a/dirsrvtests/tests/data/__init__.py b/dirsrvtests/tests/data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/data/basic/__init__.py b/dirsrvtests/tests/data/basic/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/data/basic/dse.ldif.broken b/dirsrvtests/tests/data/basic/dse.ldif.broken new file mode 100644 index 0000000..489b443 --- /dev/null +++ b/dirsrvtests/tests/data/basic/dse.ldif.broken @@ -0,0 +1,95 @@ +dn: +objectClass: top +aci: (targetattr != "aci")(version 3.0; aci "rootdse anon read access"; allow( + read,search,compare) userdn="ldap:///anyone";) +creatorsName: cn=server,cn=plugins,cn=config +modifiersName: cn=server,cn=plugins,cn=config +createTimestamp: 20150204165610Z +modifyTimestamp: 20150204165610Z + +dn: cn=config +cn: config +objectClass: top +objectClass: extensibleObject +objectClass: nsslapdConfig +nsslapd-schemadir: /etc/dirsrv/slapd-localhost/schema +nsslapd-lockdir: /var/lock/dirsrv/slapd-localhost +nsslapd-tmpdir: /tmp +nsslapd-certdir: /etc/dirsrv/slapd-localhost +nsslapd-ldifdir: /var/lib/dirsrv/slapd-localhost/ldif +nsslapd-bakdir: /var/lib/dirsrv/slapd-localhost/bak +nsslapd-rundir: /var/run/dirsrv +nsslapd-instancedir: /usr/lib64/dirsrv/slapd-localhost +nsslapd-accesslog-logging-enabled: on +nsslapd-accesslog-maxlogsperdir: 10 +nsslapd-accesslog-mode: 600 +nsslapd-accesslog-maxlogsize: 100 +nsslapd-accesslog-logrotationtime: 1 +nsslapd-accesslog-logrotationtimeunit: day +nsslapd-accesslog-logrotationsync-enabled: off +nsslapd-accesslog-logrotationsynchour: 0 +nsslapd-accesslog-logrotationsyncmin: 0 +nsslapd-accesslog: /var/log/dirsrv/slapd-localhost/access +nsslapd-enquote-sup-oc: off +nsslapd-localhost: localhost.localdomain +nsslapd-schemacheck: on +nsslapd-syntaxcheck: on +nsslapd-dn-validate-strict: off +nsslapd-rewrite-rfc1274: off +nsslapd-return-exact-case: on +nsslapd-ssl-check-hostname: on +nsslapd-validate-cert: warn +nsslapd-allow-unauthenticated-binds: off +nsslapd-require-secure-binds: off +nsslapd-allow-anonymous####-access: on +nsslapd-localssf: 71 +nsslapd-minssf: 0 +nsslapd-port: 389 +nsslapd-localuser: nobody +nsslapd-errorlog-logging-enabled: on +nsslapd-errorlog-mode: 600 +nsslapd-errorlog-maxlogsperdir: 2 +nsslapd-errorlog-maxlogsize: 100 +nsslapd-errorlog-logrotationtime: 1 +nsslapd-errorlog-logrotationtimeunit: week +nsslapd-errorlog-logrotationsync-enabled: off +nsslapd-errorlog-logrotationsynchour: 0 +nsslapd-errorlog-logrotationsyncmin: 0 +nsslapd-errorlog: /var/log/dirsrv/slapd-localhost/errors +nsslapd-auditlog: /var/log/dirsrv/slapd-localhost/audit +nsslapd-auditlog-mode: 600 +nsslapd-auditlog-maxlogsize: 100 +nsslapd-auditlog-logrotationtime: 1 +nsslapd-auditlog-logrotationtimeunit: day +nsslapd-rootdn: cn=dm +nsslapd-maxdescriptors: 1024 +nsslapd-max-filter-nest-level: 40 +nsslapd-ndn-cache-enabled: on +nsslapd-sasl-mapping-fallback: off +nsslapd-dynamic-plugins: off +nsslapd-allow-hashed-passwords: off +nsslapd-ldapifilepath: /var/run/slapd-localhost.socket +nsslapd-ldapilisten: off +nsslapd-ldapiautobind: off +nsslapd-ldapimaprootdn: cn=dm +nsslapd-ldapimaptoentries: off +nsslapd-ldapiuidnumbertype: uidNumber +nsslapd-ldapigidnumbertype: gidNumber +nsslapd-ldapientrysearchbase: dc=example,dc=com +nsslapd-defaultnamingcontext: dc=example,dc=com +aci: (targetattr="*")(version 3.0; acl "Configuration Administrators Group"; a + llow (all) groupdn="ldap:///cn=Configuration Administrators,ou=Groups,ou=Topo + logyManagement,o=NetscapeRoot";) +aci: (targetattr="*")(version 3.0; acl "Configuration Administrator"; allow (a + ll) userdn="ldap:///uid=admin,ou=Administrators,ou=TopologyManagement,o=Netsc + apeRoot";) +aci: (targetattr = "*")(version 3.0; acl "SIE Group"; allow (all) groupdn = "l + dap:///cn=slapd-localhost,cn=389 Directory Server,cn=Server Group,cn=localhos + t.localdomain,ou=example.com,o=NetscapeRoot";) +modifiersName: cn=dm +modifyTimestamp: 20150205195242Z +nsslapd-auditlog-logging-enabled: on +nsslapd-auditlog-logging-hide-unhashed-pw: off +nsslapd-rootpw: {SSHA}AQH9bTYZW4kfkfyHg1k+lG88H2dFOuwakzFEpw== +numSubordinates: 10 + diff --git a/dirsrvtests/tests/data/ticket47953/__init__.py b/dirsrvtests/tests/data/ticket47953/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/data/ticket47953/ticket47953.ldif b/dirsrvtests/tests/data/ticket47953/ticket47953.ldif new file mode 100644 index 0000000..e59977e --- /dev/null +++ b/dirsrvtests/tests/data/ticket47953/ticket47953.ldif @@ -0,0 +1,27 @@ +dn: dc=example,dc=com +objectClass: top +objectClass: domain +dc: example +aci: (targetattr!="userPassword")(version 3.0; acl "Enable anonymous access"; + allow (read, search, compare) userdn="ldap:///anyone";) +aci: (targetattr="carLicense || description || displayName || facsimileTelepho + neNumber || homePhone || homePostalAddress || initials || jpegPhoto || labele + dURI || mail || mobile || pager || photo || postOfficeBox || postalAddress || + postalCode || preferredDeliveryMethod || preferredLanguage || registeredAddr + ess || roomNumber || secretary || seeAlso || st || street || telephoneNumber + || telexNumber || title || userCertificate || userPassword || userSMIMECertif + icate || x500UniqueIdentifier")(version 3.0; acl "Enable self write for commo + n attributes"; allow (write) userdn="ldap:///self";) +aci: (targetattr ="fffff")(version 3.0;acl "Directory Administrators Group";al + low (all) (groupdn = "ldap:///cn=Directory Administrators, dc=example,dc=com" + );) +aci: (targetattr="*")(version 3.0; acl "Configuration Administrators Group"; a + llow (all) groupdn="ldap:///cn=Configuration Administrators,ou=Groups,ou=Topo + logyManagement,o=NetscapeRoot";) +aci: (targetattr="*")(version 3.0; acl "Configuration Administrator"; allow (a + ll) userdn="ldap:///uid=admin,ou=Administrators,ou=TopologyManagement,o=Netsc + apeRoot";) +aci: (targetattr = "*")(version 3.0; acl "TEST ACI"; allow (writ + e) groupdn = "ldap:///cn=slapd-localhost,cn=389 Directory Server,cn=Server Gr + oup,cn=localhost.localdomain,ou=example.com,o=NetscapeRoot";) + diff --git a/dirsrvtests/tests/data/ticket47988/__init__.py b/dirsrvtests/tests/data/ticket47988/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/data/ticket47988/schema_ipa3.3.tar.gz b/dirsrvtests/tests/data/ticket47988/schema_ipa3.3.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..2b309a04ee00be73556d5941c0bda10ba46d33f7 GIT binary patch literal 98049 zcmV)CK*GNtiwFq#8NyTm19M|&Wo=egPE;BB4VR8WMU1@XMM$-1z^{<$cTxGjT zqIpVoQu~1>DVZBe;>#nk_ZtWdNkkyP#UY8=+W-D`&jHK;phSw2pd>^pWpM@=Jl)gN z*BmH)dh_g88LrdQGW^>pmrv@-zwz~^QmvnqEA?`@R(VsdRN($Mr1AXF-n@x|(C`U) z6HYweGX7Y5-$V6((yR38q`dS3`|kMGc7v5`9xt6}X1gWFvZqh<4(#B1eQp0YDpl71 zjnmV5<+M_R{y(WUs&7d7iQa$j^*8VT!?%azYv;UsNm^I^AA|1sw-Nc;yK4Oc<)gVB zkiPHDd}Bf2x-3A|}|YxwkMvhpHg8ZPmvWe1^ePoj_#J0yl{ee!&=@IZoASP;1u z^`X6RPDx1pML@hM`*D6bCg;?pzTuF5G;wT`^lX#50VPI2mRJ(ZsYNC$cKaE=e<{RD%0*NJ$V|#CF*Ob8iXo=0=E+Z*9jR6H20hP9x`t zz@6l`?&#aqcm%CAFMp8Vnu9^}a`fY8xHp`8P)~0tZ^>RP9UB@3n7-kLD};2>8MMB^ z{mrl4UU&3^0E5oDqsz{4h=g1XNR#xNgHg9N?llLbKOXe2hMf`_Qu+|5ri|A?v`*@QB>{HuQPu zWxGe|oFme8&C(HRd?6zWtii79JBCS*$S}g^Yqjzb`RWBB-h0s`or(`^A z3VOOOF)YjG4T5wSBv?|@2H5n@q)T2t0Q$ZeA%7#80lfiZ1j3U~8xFMQ+p~Fyz#ZGY zX4R%=QO*=aQjmCF1LVRVAZ73dCeM<4(AXOOeK@%E+~f0pkF=nLgO4~c@RiDF!M8($ zrni{bE@M^z?b)vBM3xQAXCvm;J0d|e`JI}fWVK^2?2zBj#TPIy4c`FJ%Xx{Y?}hf3 zFy`zqRFK2%G1tffR3PzOXC;{7t>p)k1K*2gbNJT-5^pIC6N^r5myIJB+*9aRz+_Q3 zw5N75x~8@ROf(iy()r%%^he#ROK5J2QX=mOyvR4joALgDe8A#^=5pzKD7xMF4F?}f zFs9{g-V~Zri6#pJG>;3a9bgzJq9}OqM}Pwl1~uGZ`X2jbyFfOy6uBm6=+yTXLR;m$ zIUeq&5e2f3d>TYfh`(+rbvibH+6sra2dtPGI81PmdLWMRo8cGUaSP@MDse~wt3k-qZ~n;p?TG39{Gp&&4dCIUu^x9hy)+7th8f!gPK z??dY&seKpCJuh!YlfF56l60RJOHb50iqlM|mV@fnv51Evc=)e>t3 zgC02HIIH6s6FX$^43x-{Ea+kaR6;|R`x7zUe+I0zw?-)R<7l;{!B6A^sg^1yrO)+p zsZy#`YNxewsRn;mEA>Jbio=N+tz#1?hISxeaB&JLjNCg0#0E9Xss-M80l}4#jtstrs^8NSVjU$D}#<0S5R7U`a8QeB6+zqW#(ZwcSnGLm0F{L@gxLz<*Epg_{7}RRG-*m{s_VW&iE_PDrl2&=x-F8 zR`UX!m>!)P3~jQI^CwpiyKR0qxFQa18}1zG=&EGs8iGxW0!i0_VWK`bI3fq&=*qu=r~_^j ztpjERBNiGO+YtF+2R$8;RfR~fk^W93V)wo_0&6J(zlGs)Jm|%`oq-O>Z*+ogD46(w z2Aj~JEs1%0*mVW=FmAMInh;!sT}y%Q+W(2DlI6vKNBZyz9Ps}P0!SRJ3qxu1bXGLlQpBJ;w@o*e9DK%ejxr2>nmE z7v1}{&b^Lk0MP@)CmY#)kc=0T?vq^pC1{_5eZFYz@!V7T^Cj4~=|n{JOGd-T<0`s? z<_vI8xi5{j>c;lN2p6HTJ0WvOO1p|*ihO~L3hACbC@xoM^*UbF%3Jp_Qj zu#{)5mPr3ImzP@!RlZree-z}HFChRq8X{98b=eMbU_MA!MRkK%TqZ}$h2dXAF^56*jyI0MWj?9*1dc^dxV*Bf^r`xJX**u{JX3${ zdSLzMY5BB~n*Xcq=l@>l+Ry*(=l}NefBX5r{rum4{%=43x1axe$@xEKl+hUD&Otu; zhSW;i>(d33=jO24FA=aT3lO>`m{wD0z957NOUf46-aYu|>kWbdF z_(Fs#-=sh+i8)F&_%R#+3HS5FlD;w(Y)A;qXZ!DtL{ z&>?+?V)kvq*w1`L*7h_CBOntY@PZ&RO$rT53{08C;s{a#A{VPbuEm3NUj$5OMciE4 zV1aVE^rcj-)ghGr0;8x_h5#G?FEwPsKw4qqGmDkCP8$v_fy+uDhr=`hi`sh>IQuM ziUvtv;Q17Q@|Jb41!TKc8W1Zg5|CWFl7S^Fit4^(uW*i3VR5m*ntah^4mMF!6ukH( zu&z7x26U<+Oji~qc`=UhpqCF&S?l@);Br^JJ_zm%e0a2lJuvI}DAhZPg3FfG@b!6^ z;M0Jn>WY#{JOlujccB^7@TnDrfirvy!z741zAQ6R5^U%3;ap^Hn4g2m*E zZI8+qy|}6N1I4LfabHi>YnwqspJxPVmmI+OCEpbhAajjYK*r&kr|eAO$eLmUpbNIB0yxDc zTHUl3Tz6Bkpj&vr^aGeP_Y?)WXBkVra3fEbXKD-MEKVE@mmb>}qw`a(DQvX+zUTKm z{rovuSeT8rtu!QFRG2$znluQ~nBvmHk{NVrL{5k}mZ97h0%pQ2NVYFOk(vC`bQPBQn_&67mv8YOU zVHtp2Q~#pIJ?Df@B{8=yVYm6IoSw3!({RSF9g4+inFQeGJ1Kc?E|aW#)KQ_PyZ%s6 zi{eH|K4tfgIP6?dH7m#qQdu}w7$?8BAu7pAtw~nxN?DtHgS#m7O2qZXS{&jMJDzo z_`n4t?$fF0A!^FM6_d3s=Ir2&OP><`wmO9`AI>TjeOdA2k%1*W6PA=K5qxA@m7aGJ z_x-1EZ-_6gA5sTBYZIfqL=6qOc!-dUs}L3parG!;5cVtA-B;cb5BDv&qD_jfpDx|K z5BY3A*G*oV%xse5jUBzZ~)HQ6H9uAA-m9@#EXWC%#fEz7C)M1&14- z6(x_kF%4g=jC}u=2u*xL=eFt4cugMr^5IOJa{^pr%S`e1b;lAy)k6mp;w>9QesG(< zF9*93b#S4~s{$;skBy?Z;JQXJMHDkJULTC>xRcx13PygKk{VwAt+`pRB>c1kkggS* z=Z#sJoR7)eG23%Ts)~3n`>H=18#guHi3725E%|&!1oz zCX$55u?;V}7airpM+uVydxp{G0-|ALXCw~C45H-{d(1?N-tj#-sH(Vd8IG_C;fig<_7}10e|4-mOwK!C$57yA zl8|rtz>0dKT4!gR@}o(w{F!!QK0lp8LCiMfhf8~JfEI&|> zn_wGVViBhg#!7 z_kH{$@*RYivL>B7!whqb2`hgpM+8Fg_pG$t=?^-s=BU$7!+I93ZFuNu68mYIg9$`t z&XCt()o3tojmCp!?=4B4a52F>mSB8ZV3lV0rTKRx3Ch_Vkse}_chCf0N~{F8=`Oue zfIFrG4pcf89x0arYbXZ+>y!pshS zd|As>bT;hoca=V!lqaC2ZfehW0PF+jf7DJZ^(6mWE#vvGwaUpp|N9cx;UVevn}mIL zCA)iulG~$TFla;thI)|oiv$5vuIZ(6x2Xxkdq2N(u)>Jx2 zJ`7%JiO&Qmo4!XxR1seH=O$XC`OGo2-ADNQ(Lwa2!9iq#L zVP5xrdjZ~%w)#TWiQ$VW3L1)oC)nNM{P{!>5(i0~B3l@ng^*OS*% zl?8p@!*!^ABb;k25aond{Dr9htjRY7P4S`;jee{lan)as4PVx>q3uJQnZpY#COsO4 zJNg-~jT4o!$_j3a&&Qgf76zJ^zEaDao9y5ORx!avoOq`X)NRhp*skQV{?3)AvBJA%BxzPp-E!Ks&Y^sk29@4#;?dj+Fj zGx|e5JxZ;PYx*m;LYXxYAM`Bi35{1V8E6Nqo83yxyH2H43pQ;Nx*3O1I7X zJTYmCJ2j-Hhu<(*Jw#(5Z+sop9`i-{ox9LC0BDX$BLys>OG@N_Zt`Xjj&=q^eRIG}d6^M=L#q>hXR=RbQhB=3+)si}_V;)cMPC)9}6y;-)2xiGCI{7=vd+L3YH=ngDHQ8j1oFC1V zdnNmqOqR;s!?}Y($#P2iQaMGfI7!T@r6M7=j$xT3Q>H>1Ppv|k3D(L}i4Yx0l30-C z>w@>VKF5gX)k*Llx9LCWN@XJHd&E)cpj6Dht28M|CGdY5;;Y)gkY=mL0c9h8RjW#& z$wt+jVOlu5E7(eY6nbF@m5=WW0?)L$xlL<-{i*o7%XcuSeV2Y>gNIHLBc^IaTegq^xrkb- zZl7yRNm;2=S~w(C%N-kQg8)!MCkU_sP)pC9cmLcyb}SS(NmQoPQxtFQ|MuE`}k{6iWm+_!Q{QuDZ^P8Ul)yL^md4Nv$ z|J>Q#+iU0jKlgT9Z~mXp@t2FbXXo)P)^z$!kc2GadZef^)eniPFOB_ro%KOczmYen zx))X#O5)r2BfA{1{hi(VE`=Wb?)TD@`26pU?K%~J=|1#=UvCC~-*7jL5;IL8kdLA} zQI)2wx(xMradMRY4FAI4KSAKiwt_U?a@`=yHkzBfoiR6_L|O8%(b!c@=>EO|OWJ5) zR*1qz!@9-9cs7s$G!An2m{ps&@GAbvb+*x}m)+J#SHd*IrM|JVNk{XljL}ae@4_F| zLmLLJkwwn4rfr7r^&g_lx!-7)4bS{UO3%&Ozo^MfJa1!nlNZaK85|?vOn!>L0rPC& znajRgSF!hC%sXS4nhunkKGs+&&i5$D7*1%ry_16(&qmXSvY8A$XS|Vr9RF-XODPR# ztZeMAE{VnpJ7RzP8y}}lgeC_ln=SZTk6$Jh>9KC$WcrORkhEQ{tRRpYrpG!s*fhyfVvZwRrY*22 z^`p9#;`S4IRF6D*pmK%OlfI7;Y_PO=q-!cnCcE2I&6EOP8_oJ$G~Ftt>49y$UG7B8 z!pAUlu95s?gg7t@$~r;?0zG9<EkD(}JpPE)N9}$B zvm5LH5nI{Gm(FRwtQRWJS@t5)Fo?!OSfEk1J=Z+6&3U-&9!Jhq=&Sl>pW`_6ooJRs zuT{7Q3PSUQlL>z@n_2ppq0&$18uD%_>F8XS1_533LXx1BQZ@0J32CPi82IFXycNCx zL7D95CJw#Sa#(V%@RZ1!u_3)Al0L|h8@&sjv{ApWi{xW$i{ZsSU2W1#OW~6GNkvWe zl*mJLWpvZv{ZKdiqSH<3975!Xy^NC>hQot6sa7S*J?XYFGCp$rhUA+mW)@J3pKhI< z45+v;)ru5INc@kYo1>F{=k)aAkAHM8`hz134gQ;kGylw&i{2ld-cjfC>9KyQnSW~V z>);=sJN@G$xyP$Vck+++j?a((!0rl*NvT|t71SG)u{X68{mB4&RCAbSh)u`vd>d9|* zR_Mnf0s9gscfi*e#fJNltIBxyd?y?U$4|+jHohF4OZf)IMvolEz=Hxj#^KLy%7;PP zLLT)q(5f5#y>obWynT3a_7N|n?n4*SygDC}c1$GEKzb4ala>oEZZjXDHzkHnMPcRB zqfS@k5Es6GYQK@K$nRamhejDLgZ%F0IhiA6a8x20z%OL(k9p+b{q*NgpB#7OZ@cm6 z=iSzB&DM_8eij#m^~mR97;Zvi4~6fKlmpHXJT0*BzzW__Do8>}f8nJOm6Qfb=e3Ky z`J|tQCH_z*Z2rL|y&U8eb(rw}9pI(6K2F5>r6M25my$@fg7H7Z*M5?H|AhTYp+SC6$e(o_Wn&xu4Y*W%dDPuz z4S6*lJLaZ}$(+#5V|w=^AT0pS(VVRWGG4-((x z!GQY0-j(O2ggHMTtrZa1U>g_b$D4@8Cfn#=e*VXxcYM4#C)O+`*r)OL5uVlW>9|J6 zXagtw#M%OD;AyU*m+OL0wd3ZdU)xwjD3m#sIQtYVE!Yo}%P(gJ$XUQ(CmqL;%quDJ zV{O{PJy&pV9T@Z%2SE99Zc4(RwGy;@E?C=DDNNzDs@M++} zsAvL8OaKb8K3ap_QbH>qe#;vEDeviMQm|{UOdPYMF-OZ|O5N(lVcZ= zVVGM+PKpatzI}#oZ8KBuRNsYeI{kCN0dy97zC5@ps)u6#;F=4MNw)yN@!XF?hf?TX z`LI_?Gt+MgI$icbEd2TBzq3Bz^Z5MmnEkgrgOgosjhugi-gz6v!utH5_5Wg*u+|&9 zAB)chk^O8V|Liw?GxztOP5x}FDW4rxKK!38`7FEW4o)u4JE!Uc=t)}s($0TrI4`~k z49NGkx253vKNhn2Q{_lXoiNi#fhYUeP%oMsDORUey+UmTQbslP2B zbUOnl=VuQ#AD>Sj+^H9jW}c6im!1Pi=Mv7=&_faw>~wOql_kC}O)Yn1EjGi>Bag*o zI#K2=shkU=cS2_iq*7A}I1nDZ5{(fwLo|Dnia7q)A{ye3rKAX3(2DiLuWEbnc!4-0 zo5LqsSVaGBJh}=Z?iR>pXoWCf*~Sh*mZ@#lN7-3nj4F?!<;s8fnfeqyECsB2e!Ase zxm#}H{v6@<5YC4%OHvgT?_iZ9R}r}@R${T&NGnT%@oZ?rO*E~}!a-hGrb`YU!?zB0 z8>O$SL8s<%{P{)itaGY2AkqB$j=eAGr;j_QXZhxf^V7e~8=|@2Jw7}!I+uo?Fa1_Y z-_vNsWa>HbM-~Q1rMbt9jN&0txZ=$lidyorK{_W(Y}w0Ke|OdNIFrZ+ja;(WuvF6- zq&{x=`gFrzz)s4~2j4`#pXL?$*wz+v+-ySin2LCQlL&uciEyXFn6xT+a1I4H1iepR ziLx;_&Ug%(>zt?QJN9WhbPSLk-sEy;Jd;YSL_Dq7Zkz9zE^r`G3Jz%;$Kb*=6kz)^ z$}tp8a|z#rl^1EAIp!H)87EyC4?U|UZ^67IzqF`Zt*A3X7j#m(iqzf5R#3(2)$6Ey z4KKEuEKAeb3iT@PO3fv=jLzODivn~v=6Q| zMeD<>avBddz${@dq4zW(OW1aK-qR;1kdTn zFZ7q26C6wLr_4f_v1z6J%B(g<<1Zeki}Q9J_mDeC&+|RwSiSHL_Nmv7=s=SNe~Pv# z&~M@4IT2>*{X9_bncO?dkms%8=RX_vRNXcg(lORUs`Vl?I2Q3r6 z^4NEIq|%%?EC$;sC;*qMMq-|&I@)&wD;Y$1K<4vM7RRN-zM0R*+BWATuaHaX@Tpkm z3jS8ukqUlfR?O=22S2LVM@I|Vu38!7c^-z^q?&RM2(->_KU%9zQ7%rD8Coa%*I5h9 z3^TbXotzIiO8g?q55rc3p%<2+T;+J3W9)Mb)Z$Y1r^`pnGgJt1mAz+X^cBC9MqzQK z-ST*Y;jAp5FR?=LTP5aFexuZw&u?j8Uw*A!S^2g0Y7+NtKQZ>c^w8IM)?`7(^mQFkxY1d@tW8@QSDUE07wm2g3pC^gj)L?ZZ?5n)oSp-%;C1_`o$maTw3L6RQrk zYb@0u;IVrTgKy}>lihGtMLYYFc@V}YO)LCm7&}3wgPT?5*n(>?JRZi^w7k)>2%|+6 zPYMA}kSIYhrTAVwTZL%GlJ3-twnlBa!hg&;`U#V-;s4D^hf@yWk0@%cu+6&OAA-myE^V}A5;mtC0={fr#FlMadnK4lC zPK;Gr12y^9LE6ld?FqGHnkk3{`f6up5ktg!}S02-m#$ z>Bpj{?Hu41{fNnCF}eRx$a7VQ&ZlK!1=E*qlICIhqgz@@tgyIIaN$vV-t>+{nnBBk zE4F9T`k8x6SZ(x!wzWgIYs-LW%c;M-RcVp>MME&QNl9`)lN2~dE>&Bm=qvM)Lb(UT zhceDtAO(Yu=Jmhobz*GC6{`gWR0B|1gI0D&+l3>y<++5`MgdqDF_C?Fnz!=Mg?Slb zr&O|8oGqSsbLK-vrL0*<$3s*?cU=@;$R&Ehv{t$^fQf%V-G?{hy zGB9WXBM}k42kr_YbZ)~L4&*)2r(tZ79;+a{_`@L#=cDRK;ZI3M(k0nS-N1>CYW;mM zp4qtUZqA3({P7aU(qo#4a`oqoM7z!_7H2x2n~mHFI?oAnt=hL(HI+H&s+&3Y*W&b> ztR9w^P~{Y7%gbIey$xoj)T`X#x7NM-%gpIX_scQB z7h6suFJ^5nk;uzXS&^P}W%G~uKgX~|470KKGWkF2yL)g?t^Y=g=l^`G|Nbn0Ke62W zvn|$z>#Z+?E@&nqE$E8>D1l?&_gU|_b98pRO;WQs&(|OKVt1kw9icovLY>;sq_?S~ zKawEJKn`ry>&>ltW2?Ett{&KDX!+GovVRW)KlIrD4Un+EcLslFo_`g<{=9W`G1$U% zpZ~j-FDt(~TfPBsfwk6{#i(`<_8Y`lw;OPWa~43ue@x=c`2reg`T?3bTctL(0SGfr zm+_HJnHdmXrNYD1eiYwD9D5Ub7f%i(k^UG6+%XY|=$IFU zmt&4VPrUo%p|D+~!Ou?Q-34BDqmihZXzl*?`4cQ#&>zD9Q}=S}!}Ay)9ZBLJ2YI_? z^fxd1B<=l(2;4Ifh}oeh#%9ssjuU8_h4!DBFO1^2UW1h9@H8=X#S?kXj;U9KsC^Sr zlfcth>OZ8JKf<&qY$Lw)lO*u`)TpTuP{sf>t#1A}bah~&>-uqYU4M`0$}7Hm#peYc*k z|FHxAyy^eX@b?o#qtXTFKdJ->7R^!@1UmJZd}2jGKFdSV$U!lHK3w#&;w4%Yi$-9m9iZSh)&_)T2?!Xk(a-#` zHGXW|N~v{i2H(n4(OslBMyi%#q=f-}C*=;m^ejL3EJV1hc!WE-5%wG}n4~x~UJyuB zSBw)-q{ngOp;pMBAq_GrRt0cgQJjIdJ z8aUfE+6V0x22B~xc8CT0>=Cav(oJ@EgCg4lW6309_?UG%TgV86XRo>1vv4bCWt{CC zch@>E#0mNEQU}}`WlalZ7<#KwhF2!a-Y`b-85YJ48=>~bO3Z3{n!AJ!@c8e5J z&ZNIbDyhK9UJ)n1Ch=sfkwTY07*^0t%|MGjoyK-y4#Py|lxPbRC%O;8hG2Z0KT5!R~AxCF0-C11WPqZ(9x4q}X+an%>5^>F(#E!`L zK=LD5UGSH(yJ*Ktcn}bHtZ`<~#q29KEboz3T)k(X9Y-~OKAZ~IfT{ZHrC*%C4LPhkdn#Q(EVZ|37a zcUtwg_|Iqg!vM<9$H+_$FS>sLTlqR*pHD9if2)ZE4&5ZaPMi_d490r8X*|sCoW%cy zJ;W1A?2!0)+$?ivXXu3eiGnqOlpe5wYVy{2@=oA#BbDp)*YivEE8pB%cXAa5E;|ie zKT3V{fE;5B9$=&3ijRN6@At*`YgoDldL{$c$WN%qId;OoWZ0D9}3|Hc03^m?81!C$|SQ#zX1{acZY1cYu%dIG~t zoG5$1A)Ouf4!^?lozExy2svS2P6p@4{XPP6(PJIf?eqpGhnJ_F9_wEAx)=T9ZSu2y z1XC(7*7Gwbz`Q{O@n0}IDU2%=xn~mJ^(n(2CZQQW%rXU-QC1YR;C>zgfxlp+LKI{E zl_cONnuX~xCg&qNiQMgvtbM=+m^ucht{Xa-TCP9A_gk&{NA?-ETYUDc!|KgOqp{U! z)%VzCza!u|iBtxqk4PO3Pr?Vo_U~PP%-eea-&ZH&U!+RCDIvm68wzJ(*k?YSq1(!-krzM*00@Db_hMZ+vF+vVuSYR>(HTD z>jwG@A~&3Pvcz?E7k|XsOO#tgpqiq$L~R@*-vBEPBn}LEe6!8W??Qi|0*)|5T92GE z+zYI+5wJiON8y7&MqG&xq5}|Wu2H0q0mM5WmI?WL(>j91J#;8Tqjbbns|!OLDV4j& zj{iJ7rb-gf-4LlnK9k0i#1&trP)N3c&F?znaS|ixo~SRp+uY_E{pqoI2wj;#lkJhG zxy&%fipp7(;=+SP4G*|fp9*tR0@%>gByu@I@nl|btCBCPoyTTpWiG0AwLLQ zhc?M#p3V@Hd*Ry3Qk7^{FblaXXohsPFS^8RXGFW0mZjf$MX&w{f_M$r2jCej|1k;6k9tv{Vq@ zWy&Xl_(q!YL<`0D+cv%8zKFC#DaxpGwf zg*n&(hT~mWF5FfQNhQpsk1}{#TB0qE(fKbNEbgz30PH zE_{oPTKR0_u)jDiFHlrYY6ekBs)O;LADyUlh4TINp)%#ojqs_wiyhB{^{jmS#HC-B z5RKp~tAV))XiG!WG@v<(UFFLStAl2zn68GzD4esGUm?n~+hT0#4CH3=FjnF|y_$I_ zq`4~xM5lr0tV^YUmj|ge1nIG;UZ^A zbZhl672@*@OyFDa?d3;p?qO$6lHP#aU5e$Ay7?4XerbEu+u!s4ZGWoQ-8k`I&i`+B zr_pZb{r~E_Z~lMJ^7j)n=AUhWxFs@9_mz8|EXkDeMCDj4JT>$-UTztkQBYanHk|Zl zdJ+5MNdlVI)d9aEwXHw7;zz?|wutYycZJtN){9@*S8@VZq0Tcz*JTVKKS~J_uCZFG24P zHK1-h8o>bI30}M%urz^p<2zw8q4$ss#z{Q(lkfq)hZacceLTr#0VEQ3Ej?t+7LD|U zh7CPDnP+;nhn}|KfN!uQ2>(pS%T_~(C4vO`+IP~)mFU5R{b+#-1LO@I6fI+0H03T23B!+7{!xRq>0}|dWJ87xBfTEgL{?|$L4!8Wky&PP~dSUKq< z6It#yDWJ)V*x#A@suMlHYI^s}v$66YX$S_-%{o~%&*~QVx zmy^Q|9kb2IeqIho4HHK``uM?yI2ylzli+uNOlgVYXHfnd#g!qcX(H+2jp7zZW)m~$ z2!G5hnYh^maB}f9{QNt>l{)mf#slvN=%p{P=JzI{Kh2+afxMru5lOfo)Rl*?(4(Z9 z^@H-UQo*;WOSdaL8I_KdU$b{IuxJcT*LaZgB}P}g_W)dm79PN_xJypR)+ga9d$OQm zgvdtYy77|PcA5G)Z{?>(6B}F{U9c^z=$bFztdB!dN>o|R*;g7q-uJ@ZYxl9)}7_Ehs;U-86O4E_h5cieR5n*03{^g$<2HT#Vf&wl0b zf0+5_he$m8^lUR<1hI|+VO^)SBf~zu|73iiy|XGxm=~NMhBA&$222RH3v3F~LIBdU zDIGr%IZ#sdRWgRk;r~$6uk@Y;2%w=cXsb^)2?!;9@tI$>3NU5dvkm+8PC0qYp;|lN zOiPC`r4&Ea?%!VVRF@3=yI$VYz3J@DPkA3xYzUp73uijxfY3CSyr|);5{_MUGMI_8 z;Mo&&h&k(b*2cb931(YUGDxwsW8G)zj0fz^*9EKc#ZD(<^epndL+)xY8@OZ%e?{Q# z<)J<13zFwG`YzzzY1Yxdq@~DM!TQB_aQ|KDDad-`!Y1_sLQq}%ojV!L$jSCz8OS?% zko%qf>6wo~oIyI8m8Z4W5^C7fHsbeubu`p%IcB$5sG!TkXLVVTV2frm+M3ehU!j#V?j)R@67>EHvk9vydk$A_K4 z@loNc&kBD_!ygd>Mx!_?g?~0k%-5d@kUAz(YV9<)8wbsLy;TRUh5v0g+X^-hC)bNd zP7t|LW#9l#Dcw*;>dPeZT!1o4hWxxNLJD_A2-c6p9h!R@{!HYwIEg%rg^!cxK*Y|@ zdLUxwK(D2|p8_teD7TuHb!M1paYWCL2C2Y$(SL~W(#Oa^Iauji1>dUgic;i~@gtBC zT@V<_qyE=P;LYe_-fXM~Bu%|H4jnfQMnUKg{LmlY05d)pMeE?!z1S)r2W(c#7JWYN zyh%x)I|3r7vq*fpB=GE`l_vt26)BQFq3boqwp1)`;t8y5UCr?a+CXec%#%qpnb)ZSY`BYY;L7 z0h6y@Bwftt8VSj5A#lq3c~;O44A2ta=iuQFM`m5DIKg?Aowx*Lxv@R(UZ&DqzSPaf(oPav+wO{ zMuIF{D{F1l`LQ-pfE)t62QvZTkF{btdQi_RI7n_|=Do65jd^1Z6X==<1}!NWA%43~ zn%>2UUFIuxGe67OfoDj%ydK~+rI>mT<0><6{1A5T9XZMO?RuT3sH-@oxeDf<>Su zaQtehSsLoiT$_)fD_0qipL!Wk=KVicgU9v5oib(@vy#q=*(+IiPS~}O#8FnxoX8;Ywt!Z(fN&p^t7tt4 zWWSU^9;vmQ7c?KGjtZ*Kn607?n<}iCub_@83$>Curcg!6DmM=eXQJ#X!kS7@8aGo2 z%Oa?C7696%WQGn%kBR{kMP?-%y9w!|R5oSpSCd9K>r@mNf-$)k3$ZBRQQ|3EO%)Ol zCxn7LS!9#5GFQ!xb0V0z;Maq|R3b?j6R$}+<2Hvh7EU9vA7SfzQ69D?`=K-#;lI){ z2rFzRQxQD(!lTa@LTDUd3ALRj2Z@>ap(aQeH<@YG zUY4GMU)U#J25ZV%yHdwr$(CZDV4q zlfL=C?{4kAcXzA$!>R6%-Bo?gbDrmS7(w|5C?=}#@d=FKhthxcnIC#8D|1ZoswcIo zL9m2BK`@D&puP7WF~L|m%JZ#Qbvo4*wDk1vJe6#{t>Rcm4U9P>^U7eD5l|(e)e8+=qy}!PTi>{)0)ZDsnsq3g<+?X; z(&*A<1O(+G%|!tyK4wW1f~&s)r;`$E*jlB9cNp|KpAbDeSUaJg-TJp~hBiH=QDxuX zlarR*Z_jzY$UylUK!yhsBMr3jfgnVEfPj2+kNmKyAIO2@)zvzqx^X|aJ!GHCP68nenyw;|K zorANJ=kh`QxqhYVl*qQB`7`$ta+L-p*zQj0$S4HzxbH3K{0 zKXAYx65UWNI+X7YO<%lTE6-!)_3oTtF+~*JBklU2sy{DTZ(0(@+(5{yK-3Sm3|b9M!|MzyN?e{mddW}L6*ke=N4s> z!w8p!N7L>~o)9~s4h#lK@Mpj%0#!C`SJu`Lk-}oG*D>f4iTFilNG0_d!TtA*-ecFSTaNHJC%HweZEG7PXMs<3 zp20hB$XTnyZztikm71dYnjt}A`G}R6>WequlDkfpqCl*^3WPTNJoOE^|D*z?7U!cz8PL9A#wKzT5n=XYDbZ>VS;ZTV|Lh^6Z@lp@e=1g zPU;;zd)jGmJ8&UKlP&9Ndl|WMgWp&93Pr)M$KMR}0`0tj(9oY<-$1?_M(K0RGGszn zNFrKO!t1#+%Ij+o&Yp$w=Tm|o3xOuX>hn(?ZdzbjYOpGMItR8!PiNLaFV!31avD9o zf@2QMaq8|D-b5h^b*+303xNSw?T=zTR0{HmUgA1TS#m zv&0AJgywE^cpo)?sC@oy^6MPq7oBOm#H|$Sv7O7Xx~Gg6`}X zovHxvyJ;Bc@G`@iDFd-_P(dA_5?B- zSRY(besdSp3>n}MUDz_7j3UedOnw}`p0Tf5wg{h`l|19U98FoD8r_rOWYps)^=*`@ z?(&FirvF+Xf^#I2McGsv&L+wJ_yXF1DQ5bq2=}BL@@Q<|4J?0M<`cDcLnGkqTUK|5U5UB;G752M6q zrg|VT9Dyz@KIsdJkQ^^Cri?Hc^D?^0Im;Af(?k}+QyjwtWm?_);5J`q7 zl^_0Xa#zZ}Qdu>nR@4gVA=9g9R|PsyNHwaQHxUDg7=m+j!TaQ}Oq&S0XyhG5vGC?@ zHBb>*2kSLYcBNw2A3b_T}>>Xw{^O-2X+78kvN+>Pbjx|f;* zQ%k;M9m`3%VO}-9D_+Y@GeprdpQr_lf_DqG6CW7(Ee>}PhDIbS#DN5|8s@zVY@V#d z12lQX>lKg5pF%#xbJe;4z1J{Si-lV|WSwWqJrAVzwN>j?H$Kk%e2Qwctb85SXu{CR zYP3*1G2X_7z7?|it@@vh)wSRBfI+oh?auvUaDt0$VLFtLUca^#F#s;J9_5w*0aUs#OsKlf5??DeyVCe1Ay*)5NE^o^6#VOf={bVjyHe(ow_9 z@Ph1{X{D6n-hDTB6*O1+0zv<}SG%t*M81^nT)if~Jvom_Ty_PbVyn_pvHtkDQUe?C z=>iWC+!y}dj+rey@PZ*T>QexoI#YX6Pej>0N}Sl8&1=-7!U*Bww_r(J zoP{dxVc)5U_}Cbd|K!sF9y0mNRS%X(wxaoBO_V4jL>MHP$+_n-P}idcI&!oMrp{2h zq~-dvu&XACm)?3MVeC>frbUCjQ3<=U_oXbs)XYh}`*+~k_^l2lNf*tUXOA?WhmKg# zWgye5`Qvh7NpPMt?O%oRF6WbUD3bsMv-lx7WRhix zPZjIY#WK?5<=+Nh0^#&KG=6UpAF_@Rk8ic&B98IefyqQ%NX$Zt>GU^8NwYdai_13z z@o4)brh;A{-?(o)}`tPIEO2&$bRdpd!*OZSY01U_{M zGN9h-(ae}!RVQ6LU?yHn>JMpgX1kQ^pK+w?EWT&gHL3+rOykaX6Pb9^dP}mf;_$!E zyA#4+@Hc1Ik14^T&VU^X!o=eDCWL9XmFb_4`+50?Z`Pz-?w5Qv9q{1~D@0Jd>&8gW zTQ!dNx;s~kzlZ2y%h9>4>Xp^CT0>#-Z?qlwbXgIJb`#0zb_q1;(QjbJe$S_W%m^c? zQ*Lr5PTmHGk1nXs8p$nO>1kv83uRJqbWiU6G62JrS++8b^lgwy@%kNIdeND(49M#T zlVOuq9O-O3;zoEEaUlT(mWftg zUrX-bvm9fmHi;RzjdrE$SN|+KbSi4hmJO{~Ef+xwn0%u;qX}hSaG%A8+xznn^z=^QilE5#)TD_;KWi+__fqJr8n*f;vQa1G9b0mj>X|00oM zk^c*h+@!rku?4MthRH+UN9Zpz$Rb^x3_(aY+9RE>o~0QH_WM<0UCzi_`G<(VV7^%f#CU~qI zMBw)#hMDb(dWWVv#q@*_EiyBn5Y9E+_3olv_E>E9np5hkZKG!p-iBWOkFuW z(+pb9DNc2P3Mo`s0drs{5A#*nt0&_H;;Kj@WeYB-W?yE11-lL3>zrf9#px^a#n7#t z8zxVYW|xQjI12_$M1v&U#6n=a+#vN}(R)<|45saxWT0=2LlFJ!rey5`=dLuj+a$tL`lfNpmXB23Rd7Du;%V{Zx_>t&83Tj%FEx9V>CbR0%SgxDKMxuM(I1k(?DY$SV3TttJ_vZ@^=M>u>h{2FgN8@` zi5oQoUBYn~TvROF!~;AXcc7tV>-18^&Q&rs`yD$-mn?XzO|oK@_V+A1igUL;BQZrY3CRF$Z{b_w;`O|p zBMqxNxLIBN1u|1dIgPoIr03Hu3)cpT^p32ULt1yOAo8Q!I8?>gdlj;|JnlPF2`j-X zUS@nsc4z{~$0OQ>n&S~{nbM{Sgb zQ-6$TBxA_f-E-+31DXI(_v|S{ncP2B- zB{}y77bG=3%BoB~bM7nh$tl5%}Wp}TM|4jhdXZu zJjJj{p||E2!bn7GXD+T87e~s$_MQ4^=5G9I)E?PPbD|bA#|IPzQR#z6WH}8qEDv@? z=fCLXF>tv`tKoQyXc}qZqMAZaXyCgd+Go`d6;(noi$cw6;H;A_Rg?1YZer2A;XuxE zC0_WPZYi*TJ?r&z$ifcgovY)w-zq4F7OxkgoVFbj{& zc-iaIu9I`Sr-H<@biqBahln6$w?8eS9kkS4z$k+bqllBOu{u!Wrh<|p5m$!-!9J|wv&uB#hH5Mlog{nM@l5YD`qYAOI=xXjslx)Trf1|!3ty38 zDCAw;>TGGICiPHt95@+=w%HPqDIady>{sVGXmQj~VqW*A!X)0QJwbxPJMxcfNNC7* z#!*zpzbqh)#3iY@Z(+4_#N>}OG>R;gMGweCyr7cN{2k)g^KfN0o$2|gj&IwX5#KFuDJdUqwXe( z+aP2G^#1|6&gE`CR4a6mZ*i&jFJWMi_Bj1NX6`|^N#sKZ*rl+WX=|ArSRRkOX$6XZCvF39FzTe?0?uV64Gjd=!SWGl`qpMT+;h-yQ&m= zsuNpZr&^f>gK~5Ha4Axm$gnkDB6Mm<`7M8&ny2WHfo!j&@MI@=PJ?oAI2IG}kxDXf z-ywFABAqkBa%QfRfU!j2)j}D@3Zp?d5O%}VTBx>tkbSg=^|?5|en;oA?)@8a(G~c@ z8cPx=^o);1r&q!(jFLtKW~2MtG$fE%vl)t!L=1)lN3}p?KE00*_UmErkin72L*fK_ z`}9P!qX~#x`i}^}XsU0)(=aXI4@D@Ul_(gq8XRSSF!F-dF1lAu*a2~38PZKz4@Mv)ry8*e+7lOXJ zWfMWU{&sammHh1w` zLA~DQN_yF#mYPk`hhV!cWiL5BdsN2k$+n+q_j!1YJq=@t<5|h&v4DA(`s+ue8DK)* z#-=3!Ptxmi-92z?%Z1DqXx+SS`?PcN@*ci+j|5lqd=$I)DCTk+l&cEnkw}Kj4zo$P zpGWh%xI`?==CT9>h%uv?vyT@1Q9P_KXYMe(W!|*m<+!@G5sF7zmW>7~`9){m#Gzw@ zTi?yu*3Ea{$2p!Rk+E33^rd zxf$*>>}M6=;=GiwBl5v@yG8`bT6tjxfpPniU9Kr?(H(rx^qmR53}SXnNCAG~c`b?Y zo9*rG9p*V7EAHFx#y`3aIZpf`dJ>UTWguk4%Lu9{e)S&mPgV7s@9{*k-#nV|O=D?K zho7I_J`2C)%mTGMqmJRufK^Yr4ZFZ4tE+#s@LQ?}Ushl)ut3)KP1qIfD)Y}Rum7L# z_NsDQ^u^aL&3Nw{&MY&acMHkG27i? z*R+GE0O+nc0n*l^D~<7^bN9K|ov7n&U?r~sJEEj~ zrVJ|8CT!NJ$G-Nv7M)19Y&=iexeMjC!5x89dV2@VCf+d>jEA-eVH>!NBHP`PdHEN^_=J$O4@Vb2hf#_Rnp6&<4{nohjAbUkdlPK1ye+=d$2hrfeY=g`XOI?_ z@~8JUjjX|o$PnolnONX>Xz5(d%0;_f=0B)#Fcu>uIPzn$KS;2LU4?pMO(9KZ#!Q7? zg(S-v+n)Q8+J|-F-Wp*fO~b|=^1Pg#em?Xu)ny;QIAa=jJ6J$Zygv17v!hC_R|Yrf zg+A}HTdusojg<942xGZwvv*Wd%8ZvsHu-44?DYpaC1pZ}eB}wOeUHs3UHL@>{vR$` zn9mtUuBnis0{X~V495G%LHD`!LUoRm<8o=r0}h$M3V9Lf@7t4lQVg+9J1Ix zEc+ie0p}U9hE}I@*FG`Um`8T(gi&bOO;zyEp>J%&*SKg9+mZ8F>`Qs_cIYH!V%+JC*;jh?!rzP;SD*@DP8!jB&-7iJuNn+rutvp93(6Pq3VX7dG|?+3*6^(GNE~7sn83>^>vx(n9g=Xf zWb#3u14zV=oE`n_{c{}&K4->wtkkQ2KZfnjH;`+I?hPt;QA0Yrag;*)D1^*t5K@bI zX8eFZp}%EXU>+)Hr4rwH%;vwXeTLBNU(OGE?OHdg*UOA5ADaE@g=!{M6Q@SYm%M6H zi*AE49;eUilt04U@_+^#c1Bf+07+fa`^G4zLh`~-&w3pwOF_C?cF%63Y%i^r=<#B_ z+a|02o3}Pv#6lK%!B#z6^iJd*o^UBNq4Jj#KgP)WTUlqCsD-Fvp3IKCOIZ<0~N?aN)v~ssEnm7Lmduz&iE313R{lRcHM7qsyoc z9|pxZhHIqAhHU!t_jEp#eVO4MT4|`B4>p2@;sSH`8vsM=V?yZ9)nJe%*(9FdI3$Ns zlWyOap5#K=-k`=YirLU-7fR_s$K_L7&c#qtB1~E3&9-a>^tBGh-(TvI+%o45Y}M(8 z9OeQhFFUn_bmgDy;fibFCQf|C2c)~G4FVv+k&8tz&J<2gS*|}tV9-QI)CY$iu31e*`0?W9R%_m7W{Aa%s>Z{)0%0W2`KL>9842 z#Kj|5dsnwPJ(Rf@>5K@)isN89&F*Qdt;+QWPcFD!J@ri8Qk%wCzG3Q4kHwZ}pU9L) z^TC#;P2*{wwwrYLAjt;t_~c^2^;~ugrp}(*hC>*6H|FYoqot@pWlM!2{ClGQ%5lcswOG_fk8U8@&s3j6&T@WX0x>lY3Zi5XSR&V$E^D7 zhFk})5ah*^=@9x%znS%I1_V4T$^F_bgDv3t>-N73gUft4R*yV@z4XQuzz(Qp*Szdn z)&e{`0+KMAxXxVso?_^PL2a5rXb@)(V_a=A>M3KUVV{|md`-sapIe@ruWzH^Jd!4yIK8-L1o)qD&TFX{^D3iz071}4xQJF1Hpx}vx}9X>Xe zXR97a<^AQKfZ${GKTJ4`7a!iIyM~qVL3%gU41Pw~meIjEV|fQJgy7a`jpo~p<1zk2 z6XoLBxzP%4LvUB0;}eTF&Xke_IwV+Org~N#Y`7i?r3tEbMxR~RvQ9}vEJ~7%)-%y@U8s@xJ7zyL zD9-J|f; zJ&)}?SUbN=H7UO*uVGZ`Hs=jVk(t-lEZv}~L>YvkWkV+EdZPZIIXm*Ns)|9Vl?2W- z6z90%;5V7NWb33i?cDR(lSLSWES9J(KeU==GB~v4??MgFfA4-Mo_JEiAo#48*ZoG0 zAUKv@q=DDAP*BpF{XL-rYeBa1`zoMKt5Ne$RwAnw9NyL5;umr?^9^GuspcMtg!D@} zlsCnwNHr)=bl^F+V!d2r636PnlzShAvV?7OMs08Vr|APEkbyu>L(`*!w!8}K!0%<7 zCElbGh)-W0F1KNiR)LQ8P##E@Vi?WlH1kbZWY~Nu)@QZd;8+=y)#HBN7M`1qK!eX2 z1;8~id{#<5uvshW*XPXBw$?|?SG@zsIR>ow81C0QE)^AQ$Z~Y&C1zeQ+y;|@j|xVQ zuM9Ldf8O)Q@d7uo6lC6kId6}8z#-hJuQE5Law^&@WhH9!^a(0sl>~#$MCgPt<$2bA zK_5Lxy?B&pXE4rpx~p@K(436q7IgR9#=QCz+vj`F7xV|}RkXGAtN?O=X$HjHmof0< ze2nqloTwTk>Ax-8?Grf#6BS7pH(Z5P<10d+CB@S;rp6oDZmBnc(yU^q`R*6O$+9KuH_wPLMQsW*AXp?U|i1-gD6 zdwm$^W726cAOc`!bMju1~FsoWyhQ^cMeSZB=&C?aSVKZ0s{!#GSh)-0habs*K* zA&=;JB6)#nr9LH}xZyr6@UEe^;LI=HP%J%aklQAx)s)o7D)nt2Jd&Sb3AVO)gYc=` z)B~F_($X?Ni>;{(Goh~7X=MBOHvbfhvs$lT7+>yLV(y*4+u*y8kWoP+AS?ZTbU!!c z6y%XWs0G?IyXui0HAbX%Nq^L=QS&q~a!Y*RnJ=a4FmWEI?;DNuiY2>9eL9TD zGDzy^&&28eifCop$V?}z+1wI=uGH}rJWL|~+spQFYeb%sBL<^YQ&YL=70V$?Lup3D z1yM#5e4bafT+%oM;xd3rM1bK%=;#koH+QUMfxUfu`J(zUv>GHBMd(vqP)T6(wF6>FDfz?irqEhg;2+8Bu}WG zL|bM3ai`%+x{Vn$VyBKh(0Pfv{nMIyoAUx2b$5Lf1hZk%otI{7euU@ZBqZz8WShF4 z=`B_P=fZs^_DY$UG`^nhLKX(uE@<o&08$VH5*pf^}L)%+4jVCzs*(Zjr_yoQ=UeB{_`{ z_Rk$&QB9FZZSobd6I=p2nD(olwrheOMyb;|7VD!X5{nXai4=uc6_Rn7xiOLqB)u9e z!AsJBb_u^L+#)NnO`|_`IoBbTE>d-vZGEdS*2#tGYnhQ}9eqo>C~6}p;kVe6HH=A? zfUDPMpQG^~d-4ujNp|H#0Wt*WaZ9cTb=OG_-+e3vDVt2iJqE|~zecNwy+^f_TW7q( zwZprg-Rs7!$ofcEdL2?L1q3eZ)vV@g#QXxs9<{Qx|95psMvG1ATr#oFr8FY_U&ohiWz?U6`1wL#UR znueBH92gvlcN~CMyQaS&$(G;L**B7e*sF#A)sE(#Q%YACDrh#_OLph8-y{SuF5DOO z;q5W*QT*E)>rAC)uv@>-`&h6zA~4C=tRD}VhQABv(?j2l^x++zXJ*LSL#_8ve4*vk zh%l4nmoIi9QSpILOHZf{EtJg4Nma(58ML|m`9Ft^Ml7n@PqyCMN({K6smY)rX&fjs zAD%9o+yK}aSH7ItJb2>MiLqTk>yDTJok!(Bd)D^umu=X%V6-)%`<(CFDU+Nk#!&QI zz|-d#+<=Do6V6l&d}xQG1zYO+t?wtL@=)R#QiHT0w%7_d!Bm#$E!;Xq&hC4a>Id07ehChr=d!`0X~Ep;@5aBL z7xg8AKv4 z#T94NLVw09j-F&)$={7*mr4(~A zRzZ?i-gpi3&u{{e$rC^p2pm%*8WVa_+3U|9WLTT}V7&!eV-U_n#tj_6T3WI6J(MWC z5XYjZ?FXI`hf}R!fAgnEyZWNL0OQF6XUb598m8-SMf?~Qe@K7aSPdBci|#^EVV(Rt zZY0acI-Pj&8fT+s=wK$KVvN5Ef9vmbK z&u8^N1jfXy&~m+bifld9OGCgUKLnF=ZRGz_H^z^NXT@}4%my)*D`$?AS_vTY_=zWU z1o{Q`MDh@D3)lota6>9Z+T(XBT{Wh?Gfcf$K#_NuR!4rDt1M-asFga?Yp$w)AWp7m`Rm#n*GTgWyUfxrljcf7WCTFCZDoFc4~ zndm9P5UwR`P^eNmBXkCrE_OCP{&iXYiBV~1e7mgIRjbK zqm@`KuMGXr8Ts+8JE4{RJnAoj<;4e!_Vr$~^*9H(H|UZ)m9!d%&5!WC-@{!MBi?@t zads30vV_RyJ&e3&h+|h8kgl#zLZ>Kr&89eW>X4p@NK+mFT4r5XNB(sv4s(sJt;=9G z_!n!6^Xs-dQy#M9-nhfh;0M!V1&4mXVCBsw)77cBXkNRc{pM-o`hrSmg@}s-$b`;J zeDAz?C`;ZuQ?eFvq#nEGuI&z^hB)Rxr|QhnKL&0**K;&jCrYssy3yLy!@@RGnZ#Tgw}z}b zx8vV9h!{vW$djuz93?;yz#y}EZd9UtODtqSW;R`}cAT}b4zhJIsDEappTZxp_SY5c z=F%3{*lS!gT4ST@Xh>A(L6CQ}tr6FIIP0_EMHM5A`h`4s5StUJPjqB}xBO7i%yxO` zaJGENl5n}FaH>|TaOGu$ezNgSqfDjU@YR`gUfI5Gmu1qdbNd)PXkq7ksFvyQxeLAa z^^_@WG!nGu!^s+6v41F671{vxAEu|+RTGx&aCgvb0)Ib5zBp|A4CL(@W+|^?+4y{Y z(=^AOnf*bHvZBW^fAgh3{pTxg@triX8}-lUGtnzu+}d?@*Ju8t*Q<$E5lmCv#VT{Z zk9uzaSC(36-0ttFqP5+>IGdN~5{zQvcb}5xl&9~?WzqF8QpVlC<$7uZovP$8Hrj+9 znx6BlPh z(KEavmkQw`dgWPPANsXg+l7pdc#&9?HyM%EUyh(89bbl2xEQ?Z zwA55PSZc{+S^C48Twdm{pLo;hJ?4i5PnWz}aeOsy(y*2}4&viTBVF-&qhW!VK0e#& zRpM1{dLwytdSdX7j~oMO6a~cxuC;a|iawr_^#>lF-3Qm4# z=Ycz#-6}(#B5)l#o=Nd}sAj$7ut6gurvoxlv{;u^%UDQ6byX2Kr~lhg9dRzbJf-e)6NpH6bI+ubLKe3mq@2 z<>%L;keAoA)|S*Dtw36FsYuUrRy5KmZ+NR{?47UW`x7#q*vtkjXIva(2 zgi*NQrXv4fSKUfHGUdAS+>1&DN`mjiD@hQ0r8^fxLs_^8DDc+F!Oz@G}_#O9{6FU1-IZkjJ^ zA!Gr|G)4e&k6UkApCwk}&d|w5`+RCy zsMy{XVt)TRdJWt_kSFuCJzd|A=Tza@R*spOb%i6cncjRx^yNu$@Yr5-;OrFvTP75f z@pD^E=|$>7?=E)U2!l;BvUZ$4%CxNH$*k+Z<2N+G_Z`S&$_KTL|DDB`QM_<{5KLE{ zP1Fn3aW#3{bzoY5F)6JYCIf;a;X4sH4A(vbqNOyTirqi%caVh`fMR#85DQ`s8V#TB z21+UIGGO^O$?VZ^(e;5~bdf4`rn&e#Z7Ot!rC^oeK|d@!MUp{u`kx_L^}!1EK_O{` z5TqNfjWzP{V?R?Wq^Q@XB(T9B?$m~kXQ&)lI%H*AgRV>&i$^d;%&0h~H&-0DEs2My zulLfLT7eePdqO5MHEGhFsI-d)O6W1O&9%YvNz5?Jl|v|-N;>Gpcg*$RMbxdrex
$g12Z|qgBD~d_asHX-x!XWV?%yb2y({_lTeQ9}CVehV?no z>;r=Vi2b-B$MIQU^c(%A3DV#eu?l}hVjkUb+{Omoa16Pk2h}OX=mn5!7 z1^yP?hMVqY>B-bUp(7VRy;5F8)+Zzj_DMU!7`@mQi zC?C!p*ih4zokm0h9vQD}YBM4*mg zgxEEsRP&PaaTy8gG`J`Zuv)GzfpRvvcIovfltrD+{o&V1nNX^N%M67ej>-;f)Skw> z$B?n6f&nwis0Sj~r>#({bc$zW7)B?&KgD<-n>pW6sHciS9Dy$^VU*8+Mq^scOmJOo zrdwo`g9#8FdlyM;bMI6*5Kk58R&gHho8>l$ZlOPO!r$V59q*XY4x0t0kOz)1)Tip& zGP+f*1G!*cK>Z=!f1KiZiO5sxs)yGC(>kWCR9C$l2XHt30Q#YHSOl zO<*tIVG(Y<1?N2UW)-$mCT_1QgtwoM;`iQ}=KgxO)!ud+TC(?8Ttw_Ayy`@Osf|}d z{2IsfUHhqtnK5a)<7F<6fEj}huZ?jlJbXn35m3q?r}5tNO3+4Ka~TsJvm5=*SWl8; z*|b4poLg_5;q~duK`{r;psHWW8NZM8i2dbfbNw5o{Sm5K(S2_U^o{1P1eTr2rHoP_i`6qVdYWGUif#6+z zd>?HH%mZ(51pYJitGb3WCXbham!_6bjbAGmUEAe>K3|1%OW_!po8g6F8n&Fevfgi@ zQ*Tb=R#bkT4Ij;@%nwip<0|D~Tv}uB8`)BEtnDm<8||YBR#5Gw>eh5{lJyKY{S$aK zlfzo*pDgRZEvxI#ne}}UY!bFrDE7}@KKO**n9iHNqvD`x7hamb$u_L03p)2sMPeyWL*=}HP5#r0&R8GCP`dxG9tdq6T35!dT{zu?JaaYEG zjGA(Y7iGVOT4$-Fd3Xv)@`X1Uwlzaa*lQM+lBZCVlX0NVCRlIxp6J!)Fk0n-`ygJn z8B$Kb*HySK_8uHrorapa@O9^v48Fg)U=NhfY0T|g=H?H_)5(ht&dlR0x`0&|Z_!NE z$j724#Ir>a^C&@9B<}2#7YofgC&v2xc&6K9Qt?fT%JaWVrxFe9ro~w?b;SG3c?I1K zJw2hs)7eGpY+SS+=tEB_C?SZRJGv;wH*Z@1IU;tg9)a6~+ce z^4_t#+fG8!*cMXa`)=f>=Lp|v#BBa{gy(RM4ItGXNu1e}&Z~B6kYU&y;y`;y#?JJ* z{z(Y1y>{f#Q{MF!3&!DEfB$8w@(rL%h)Cy|rF5pm2*YzEZa}p=>&{M%5h^|6uW2;B zus?Ro&3x*PckQ(L#|#=4gU(PN)2kORQlnVOYpxj^_a`8e@;SY69&hIR!NYp~8*%90 z?wCB51(YjMj7C$1)L$$l65$4E|!mrQR1X!#(g!QQ6LO=gTd=7{6KcKn2jUokV z@w>}g*dd=iYu7RsliXiJ`7i}+|LQUxTnO2v+3t1gBS%e_oaN_Aab5cdODiikBI`@L zrHNwR=dxg?mDNw`bMHmkg)Slr!6X*J)+*Q_P#TOM3MW4L+g%JNblu9 zbwcUcK66@N>2Iv``pgpAit(nGm-?|PW=oXhnt91;#s2J4sHvm*(OnP>uOmj;!k6SB z{1s>3Yn=4M$&3cVjhU3x;)s;RfLs~ni7NzHcme)JujEL?XPGY}dup}vYFJHn@(Zlp zs=?8D4dp0_+QLT|I`OCmNOm9$r~@uT6K=>xZ*blZjBg(I9lmurPXi5oojkgxUw3Qt zs3AZoKX1Me78;X~G%xgj+vYMB0s;5t#K|Ojeuo|viE&nMS-{K0*UfhEsPtSr*M0a( zKX#sp1{P!Ovh)>);Z^Pb1+l1t?SlzB>}|ZI?+ypDuNbAT*nCn=VEZ}RDNoI>SU`RI z7LgS)y^UQ@ll(#0{=bDTzALoZe^hYydgEfb9m2dJsRfBtync5d0p17q1|Mi z=t}-s=#m=Y6Ce8eN&a6OUB)ZlY$d~b_r_YXkUgZn3<`Lte{$UR%Y1cVaYpLkdZ}50 zZ&*H?`QU?R8iq(*6}>yd9rqmTZ%v-#@`oNR;c#I5|D`LE;24_gAh+!WDeBBdwEf|) zPaOF!rL6SE7>AlZiZvXmaKdnUJH^J_1NRZ7uszOXba>O+kBes@jT8*9|9_fXBUQ@C zx8(0l;))Own0AEXW3p9r<8)zkt^claxjEW6La#!^Delq|q^EO#J1Ic7-cbR0ZA z3V)XerPf6nF@iiI=tMu-C_5dJ&@LghI)HlcC3Nqft*%fB9@Ne9!-?N*9f*G)y`lwV zhm`SJwf7G*#1~1%j{XWhsCF$kuR-kZQ0fI49C`&t3)8J)rD*rk=%_7WATirRfRB8`+fd9RVXwnlT@GYV*hKD>(u!_40f5HjQyKw z9eSb`3`*RH1IN0+y9_*Ba};~YF6VNWVo|2@QVAhABY!?HimEyO4~t!60@1eL-lJAE z{NVOL5<3)Vpsy9tor$~S_NkjEwrw{aBHl^o5&7atVGJ6JLZ?Pf#6->ltggM|JkUp_ ziw1eYvS!+bo5<%!8?r9nt!F71kg~b@#VywHXH#z_V{Y-l&lLJA)m(oBXww7{q_H(Res633G?b6 zNKbIBMK;Sp(vmPwK)DRK4yp0%S#qPAMI;ni^xqu<~Sx%{DgUTRT8 zCTUHo)Y$#Y&c(`(QX|q?n{c`` zY{Hzkj~|qHd+>Nss;HV$O_O}^U|%ktx)yLgeRXSIuwU637k`^ph*do1q1!`$Bzga| zG)9Wz{j=d6p71q-pvw+r%X)7dTBIN7%iqTEd?5fGt2k^`C_P5az0 z;rD+4)j%r0j+~aydTB|@1*X@STw=ZtzM<)-cqk-V3tFpaSEpg(S_IRiX~Qrt!8XZ!@jB177!%F@N~tZ?##&g$t?Q_y>} zT6HlXC+CS>bv$NR;`HpeH$;S&wA8Rh1?T;slF&*!(G_S&Cjmsgo5B5C8bJB~WU8!5;K}@5 zqUH_o56=N5pMO|(!>~B)Ocvt3Dr2eyw%jmm4^QT1x?a!W$t2X*z8j~j8d|j(dY++4 zQ!{3hJqkbq%0Sy+8TKlVKIa*t)bK;25dAuhPnvJi8^??9PMtJ6q}^z}XmHmWovT6Yj}S+Nn})eUXLLjSVKIC91t&V*Ng~N)>uBsVT?(f#csT^J=m&CKiAN7Id(awb(H;7%BMJTdt-Mkhj^eciRXf=9pb|C zEBy~)R6>Oc{P z^(9z?eL^~|;ud!1jH%e(i%;I3HKt=qV)v|CSs??LIl!heSeVtc%Lh2y!LMuh2T3CX z{Ju7RTPn0VNzY}#)JiPAjrM@t(fa0M@Y+)A(f}i*O_KzEt(Hbh@u4%+Srnk>yJCKoP`(-%T6ytnc@QjV)4CQ?lmcx9 zR$L{$J1W_tQ`8 zq}ySioz!O+Cr3a3t;`d3zlN!Ee_|b#ee37Hl|KkF#uod%$&SwZEa3^xm6DWTd5v7X zjf(Gq2vF$8@|nc}J#xrvDq+o?=KglGzFk+UlXu=93{K^;>qO+ef*YgfM=^PFWWmVi z9zuA~po*V}=cug7Y(}gSg|mEY4LvqqbVZB~9bE`+^j~oBXq`LCfHp>HiKdkFn@uB~ zafF6>emv;)#Mk*4MJ9Cg@L}VaT!B8)k$$7zYCkf>$7>F*8Vq$XjQ#^QAXFqJ&~625 z426orC_*7>DWZQ9#Y>Qr(CdIoO8?oP0~@9cgB|#n*Le6+9(KO;k3QP~pd(A?OP?J% znZr457`x_lH1=ET29L5B_JeC18fb`|Y?AnV@Xhx6O@>TO_u)7H!5%y`tnsiF4Rtyl zd)z18+g)@4MB!Wz&Hn!G+5sTXTux)x9{;IL@cVmfH};m&2J`$UilZ(6J|L&k^(7ve zTJl5M``sRY$}M3zrqkTpZ>}8-a@|IqZeGv;H3y|LUX3fr9$43uHkt>G^_vm7qka3c zz=YWGJ@@WqM}FvEoAUx{+S)-PO;@g;WHv0=!d+hVez3oG<5!Gz*B*Umm+=OM9S8vS z_jc9}09CpTwf)?}0QMv+>yY9^27#XM(W#B5tKGflTJP3D*UT{PsA_C|8$i867|I@U z$+vdfYe#6RwrJY_`lXwboBCfFuKX|XaX%Tu7+^Q?5@(og1%5W%N_{uI+47=vtKQzu zFo(sO!KNzc_WCEk+OYMoNleRLd+j*!jyl-wA0Osc545bqz$+{CN~}A*C)D~YzkZ+) z_Y$9%nTtQT_|M8l@ECup#D?5PMt{D@WJoF=9X;jeE9`s9f))UaGTk+B%lYyjN9QlG zxo8778Z&R3rCuIY05uGNDC5J?Lv%Uj$znNZJb;dQ4-p8TE}PKJl*JsLliFui>5^wuYyO0X5 zTNOSkmMWZchlo;PQT_-j)db*pU=F(>ch)LLE~!vU-_3$L%HE@0cQ82RKV)V*aYTr} z)OjIZ?5dyVef9HDTTtLiovy&|zC162-vfE}1;5Y!)IX2Z&#x!vUoP|w>#C!VzOi3v zB!u6;9si|%pI#j50UF;s@0g?dO@ICHxTl{wvfwz<0QR-T6|Q>OR*(P>C(PZr-b{nkU`4Daj4~KCy46bd*T$K5)!}to&;nHmuldmJrgMoMj z<|AXPgvns4q9xC%=7Fox)b1g{*a09oF;)1jTKs_fZF`>|@*JzRTmnYS|2Oi-TjOwY z9Yjy#13KOR6TNuy`TusB^|$)(&+_+{|L-mT-&_8_xBP!^`TySX|Gnk^`;qehHR>y^ z-+smgRE9Bc0T64K1j<4#K8zz-?H_bGbE%m6zBHMD%zGw9>JK$0^ol$XSC0ElL^I$+ zv(z}QnMGk*`v*)%&CAT~n=g)qy#f|^l7mV_e2+-j*GTB&X6j;iQ#A@wdd8@xGZQX$ z>aPM92PQ#`$G$fm7bAM+`^3dTUE`v6bUqys@W8xSXtZAr3o{uin%k|$!MqH@yr##5 zQ3HM{vj+SY0mcUN1yI)>9ZiEIE?|QUqDQd7ADR~#JY4)W;G?1OF%XjVBN&m7&4v?R z=*Q&C{95xSel6DLY$$taQ_EWZZGWn_vHr(F^QG#4z{TE9q5enft^UWe{Jq)#-t2#G z_P;m#-<$pK&Hndh|ND{be`{I)1H{nUPk(!Nb^_Xkmf?YT2x=rpN{qzcdq;g7^%;8N zcrmOHoTLXo19mwcV*)@D1oR8+2w4>^A9U2q98n=L5c5EP8`G5c_O1+MFYOgeGvj>5 zlBE$(3`TtB0z}IgcRoU|1JegP!NkQR3ZBSpu{}ri5%9KDNDJMv-GA=eII}5|KUusnCI4e8aI$f{6CtY`{ne%HvGNmf6wvv zrvJU^e{cHVoBsEv|GnvdZ~EVlr2jPjQ2S-=RP0z@a<(I$_PYw^^)-ZstM*T-!d^;VH?f)sP%dsApeJh6~J z(yPNzn-x$raFT2Pv6Yq4Lvt^z^}x@}{yD`}X4t4Jal<3+Oe1-TvyP6hLvJ0UL59`~P$Nt-Ah4ix=)dl3J+n$Byy- zycItxMx?{{$IfLG{A=Q$9LYd(ey#15<(bKNZi$QD(Qyyt0OQ65#*f1$Hf!<;t0d*z z$&gw)E`IDBh5?NEcWxz8l|poh1i`nj@TW`9=B;4(eR-P0jin(9n9Cp_pBH8Rq$tZ` zNba|Ol*941oD9xxzH~|E78(j^_a)Z~VmHX2<*_k`8Ku49`0q zcH1(l)$&HlmIi~tQw8Xk8A2_(utdJ^rQ$4u`kfW!4I@*0ZkVc;3v@uau{wurocKdO zNu*OuDr}Qsv=iXB2#XP-m;@8UuWh}%#{|4ftHQPTBbIle>?00xB_>& z=)kgLZ|kvlmD`&+blqBsP*HNz=m6Krk|Q&wHdiH=_HR+sW9pC$iqmOi-sd^Ua>G>R z4E;3oJ*yxwS3}9OLipvS3?Bo|!`VFU?;z;mjzH1?1;`;kjt9uC8D1uhIb8CB9Lf-0#J=^qHaG zvnIj|!)PkPD3@$HvO1GjqOSR5yCz=ov$@d!iYW0wI24z8S+eUi*xxa9Y8x z=fi+_>9r%l2%;q;vAvmDq>HpVc1C)46K+U~exHU&o25bkzGX6J?G?|4p>zG(r{%yD z+Q_c{1)wrZk0O*fE9p&qCyNIFk;ZPoX%y89p2!f1mAf2*$`BAh-m_-vtlDsOMR}*A zM-Gw_qQ7%ECgQt&O3RIT#E%4^5ohSAh@qy8^A$}3k4f( z!AfyuA!VQq#$Y>m;HfaXG#ggMDueWhs$iQ{UCvMX%&3jMrj$ABtQy&C0kCsFyUwew z#u)>G9;rtjnR}Y&+#Fd5Ra0u3&}N)Ei4gw3mg$u>iYHNa=8VlbQ|%0Hl$GNlW8_Lo z5l}c?tG;&?q_d2?nIHLYzTPI(sIj_WS+S278+I!{>=Rvyyg2;8y!ku;{W^0^K?hlZwiKsj&mw7O)ttRu$#xWdnR^UyY~u6ZxNZ+RfGr z<$r3lTCLqe{-@@f|If4h{X}^eaQfL+F`ofvr+;p@>j%s@Y)hZQrSj?HgxKKX=mNk5 zh1!Hhq=KmZROWu%#+AGktWA z4bB)_>}Gz}&(yZJNIp+VNKfT-yYTd>s`Z^|lXuv8{;8`N+4O;ZAJf)#g5=Su+mTWS z2J5D|w+k~!51F`PWBFLwOkyAN&Ss;I&y^!@K_F&>;rp2MQ;b!9biGO$*T6#0zm2)k z6T2wRyn(MoJxZa`mD7(M%{%=E^UwY)(98kMk3Vd zf#$z0%|@OdX3isXPtUB|yibQY^J?V6xd z#SWAsbnEx#OgR0hlPgN}mUp;*Z04n{>+AoA`Cq-rdBOU>%|>glnXmubfZK29KhN;@ zmjCrF|La@+*SGwyZ~0%}^1r_2fBm8Izczoo`o9fjU;vqyLJX7wbadV^gHF)-oU&2? zSA+k)r>vAp&juWH6JXx=HWow#&X{h|+`@yxq4@jFD5yM70oZfkC%;R0HDV&nuH)Q- zkcAOl93z}XrfF~;QL=;Cl2Y!yMg;9^1kn})@Z0zaL@R85*_{uYxxw@h%u2?8dnxb zmLv#^ghAgkQW_d5xs>FH6H177biM>q)+deW97t)J>+8ORCy$)_U^E%YRTc|g{2lWg zeF6l8as$GvcR0L0I?wIlbOS~4VQ@VWOvb1B()`iym0)%>a(X^WZ?I5)SKE+AP$F-N zO^Sv7F#9p+#}t8YK+eC3L(fJ|CYy=fT>BZRwj}-}sEXot_1*97O+!q^fJ8K2*l4;D zt%wdR><0=TQV`~sj{LjDQ1v?ZE<<+i#z}TQ8QGYkVvNy*qLNmKtk+3bh8#`DynZRl z=w#P_!<>n^16xJwA>=u>ZX-kDiOebjci-_kY#D+zA*aWqA~DQ8o@6;D&l`!w!&Auv z@_0#K*!Y9-`}UqCI>ed(8RYE4#H_i%+u0S|U@qK2E4LGV&#b+@UxpP^+%$3WUCWm3 zgFGq@<0$GTaTdF=VG6-kpPRqO;^xm(h4>>Ioc2HBnM1#S`W@5EZoQ0V&iw2qu2@SW zy7x0cde%KX{)qU2|JUiCemXk&^|(LSIy-7}#9`a7{eGu=^6C&cbIk}thv8OqUYH{% zQqdh-!?Wu|6n(#h(ObJaF=Ya_+mr#+Zk8&z-71ZN`Ddj$%x;&ZK+HB#FvM!onyr09 zsVv12)0Ss9m+XSYFVOrq?r$!iPuO+A0sNqJenn|1la`X8w?x^kYb{Kq5yUpoye{-4+XfKBAh z|LZyae)@@};t&_ll~L~h;(Kx8eCqk$S0^hh9Z?G8{9U-%iX+%cmUxA+5FUyk~`k57K)eu8JywQs$~wrK7NIJQ9G`S$!$_PZ0DImM$VXAYfx^Z;w2|XDR~OS zcaio;<9!T#bd90!z-Ee>Xo3{|n)onMw#6oaCm9yoaN{(H{B3@B6W=QR+d@a7ap*iy zil7a61qOaS_LDS@W_bBJ@Xoo}06rN7sqqTFWr|FDjomh;58A$m_iQmQt$4Oc&stj$ zFVR9cpo2i^XCxv;NF%s&W=R}YJ-uT; zeM}B3Ku8xVOHtL3+HHCj2y%?iBOQADr~_p`(AI%&<$-JGh)5V$h36z*x|Jo4`>j|y z=ckoPBqbE6s|1l#5Uv%zPFmY_$!v0eD;*EfpsdGm`Nz?pH2?oaugnVat_d=HB>TeiFslri^wlqw$(iQ^ zud!PJo}w|dq`{IK!H)6&W0Y(w;H+s@fc8v)x_92GlV*KiWp5kE{^cYBXUfzJ@-i-F zu0LeI*CNz)CTrcIw6~ud_n{LVlCNUv$nS21e>Cm6fmQv7!ypoW7bx@D06NG4bOzGl zED))=AP*1!ehebb3yfdce>wAtuj9zf9czu9Xeh)-USgn){6L4p$45FGzQjSnRwhKgyqHb5hA$34pKh z$UjPgTZMPJNLUCR^ApM&ctWdmB(_qapXFg&R77g+6sDk0St;!~;F&6cX0n?p`9f#0 zIR7`u>kCx zy`*Jx z$t3UZpB#N82jl30;u_}BOe}%2uj}T@`~(b}rjAypPnOxc=TD#v0PPmpzp^%s99V(e zY)7!V@d(ypfIj*Ze-vf?z?%o^md%6d1C(Caz<~U&D8x21J{AOaRx)kmCX7-|6(^1H z_LYoO&V(|Yj;#VN^9UOaOVlIOnuS1M<#2TK#?=XPVxeR)RYD%dd`0?#YtBPD7XI;2 z61T)&pzJZ&gd89VXrH^LvPqMqv^d?fslCnopb5*5j+*-p(X_wBuv-WDVb3^XV1&SK ztsUgqbQz1GsuV1N3q!|E&)fhRMvSPV^#J}Syv4vKUXtj zxq@r6kI<5hPB_8k1{q00EROQoDAZD|cwW6cDute07~?9ckIX*M-QqxTzpfZ84*)M4 z@!V?*cfwgEje1Taobx??&8S32nT6v2SRtyWddW_Jl9t>|nQS>ZWdv zq(`E%*xJ1#+<9f0s|FI2WQcPS`T5!5+$n+c;tI2F5J=p1r^_Sb zm++vOIYYF8N&Hp-zG_JEG(~<=9Hz_;X}bhc9eJ3WQc{8iko>F2yTmu2gHwA!>T(Z$ z!uRZ8T2dQv;8SsEDUM2X$DA_*xG5%);UM1N8Bl>y5l5~+4M$G=p-6>vgBg%=9AS3A zEn{wvIz8ikqECQzeBL20B<||{SY|kS>e-zcBuh*>1SKjN`1e`fxrT1A3{4FRc^hQW z#l1E|84!L8(|hSIlTYzIQ-bfgAhAUxV1q$CNh=|e4={KALEEbrWN@o$Fh)9{!$3Io)>aki$Qt)<*TmBaAM48K_zK6eH-He%I42MjNX>!L!|b&@PXUwTvA~TEA;QnGbOto8R_o9FDC(1~u8oV(3-M0^lWsdpd$W0!|GD)v1GE+tsWMv7-H@9sgy))`a=Z!-B0ZH|WBs!D(AVlYZe&>v-_e6~Xj1_v%Ok83?H-MWoUJ(5TrjQX?i+apSl)sso62oldZv|qB=BIN z{{#0J+=(ZlKl^-JlKN#7+@E;eI1Z~B0o8kBuxUW9OjIpw4~>L;N`|xTr^tB zp{|80&@Uh3tfOdHBC*K1@Cd)Q(l4M>p;)^--Gae+=NLxOFXvJI!JT#V=S>_)#~w9X z3l6JU#E$fDcw}@olH^O~Ahmms&D6B>j9k%{vx;JdhHHr3hTB{$+w*_}14#TVz%&}( zM5NFbt_pC2N@c(^GomN&g39|Tp&#uS!Lg&C#XAM^rACbr%gI7Op>}WpMC>FzbKjn0 zvo0ElK-!`%=i9XPNM_x=jXk+w>@M4^nT3=JE4hIn#p+MGoqq^rVh+R5q}`!m_bc3xwlg(11^bgNVcCWodo0=v zqI#<^Hf+A-c$wjE`%}9frCWFY)zc+_nV$cp-rm`5VLh}|N4>Yf7Khnej|1k;6iu+m12|%!n+h_Sj0C{9L09o`|Xw14?Fj> z)OBDB{=>ggspfKNt7c6>yRWPZk?6JO6F#r-G{N?GvaHl!2ZJs<3ShBipD=#ct}DK@ zbCXU=Spw~cGTTXcPEVDmMuG>u$WD}t2=8AqXWp}mJ!=h9>x}PNl=2=7JDhFmmk(eD zPk3ZiuryR;b@g0H9hbuvi>(kvHQ+T^o((hiv1xOy&20!;^^=c-_0j_SivKYGC+4IX zrZ1-dH5=`M{*I)HEm*~=>?3BUVHIj3`Y z1a7`pM5D%CN7kT1IWsbGg$Ltyx@m3w#C+4nMpZUFl=8XcIAZP5wOd5j8OMae7*DG} zwO>M#PSulQQ%@g990;Hv9f4KigX}X0+7*8buJhK18Zr{%D|GVwx+y4I? ze?O5|Amu$EAr~}F)=`!+p`d}Lc9Uh}pFe%NySv*CoXFXZlj~2q>}~q#I!&E%u$A&I zC?R)RrM+dvT^RSicB_dS2(m?!E8fIO@NeG}gEKbb&UuIZ+V5|5x+hFO$HWkrtk+iM z6F=hyOxYSN-g(~dbEI*&IL|cnt7)(`rokrE9L@aEO)x+|L80=v+B?A``(U999Y`|0 zcthdE6++ll5MqJ6`GLZ>W`zTveSGLIy~x)1Z~N210ft;YVfhE*^SkwO{@-XcnoVH# z!2frF@9*ukcaZ-#n)NsS{~Uidi#7z-pJ~Ne4Jae@Cs!oG+jr8*mFU5R{v^M517H(? z-D^Ml`#XFYHjq#1WA8S_JzVPS|N8qocploM-Lth_|HW}b_Rfjo=wTGsK->DrqL{&B z>APP#i9h|IlKlS6n)ODz4!c96-P~`r|KBn@R~xvZ^!@@YeqbGpkm(!_xIAvW zp*hzE`_TJx2wLb)yV3l>K2X94VZHlM?pVb?B>lS_;Hqh<_XvHIZu`QN29Vd7U-%*jG>mWq zhrNPcfbQ&;%hWdwlyd`Dln3hY1Ho0!badcAmP2Wqlz6Wh7+4O!yV`fp8B;2(gVo%J7J0*G@t;!XJNr`)g#p&44N)4}DTblK%aRXEjR}`(jr}^o z^OJ=JG~1-LR9Y&}%}Rlhg)zQo18^Ay z|C;!Zf}xhjgq}ZJ5||oWl5#mP(%}<*xG{XG90E=^S>kj5Hy`A7F+jeqeF;|NI69E0fbthwo2OGj9!szDb64jGf%T43z zWG+6X?b0cQ%{ZH~F-+8ymau%=@t|TxbJ)dgcoq&FK1T5zvo&VmHjj8~Rx0-xlR9fm zc2>3XrE>OZ?u&$GktHtR0%2+r&aq!}(UeYijm;-_N!=ED3`7m|M;I*5IY_$IQ$GK~ z1{}<{%TH&yC<9E{)8}QmK#q&8)^cuJTT~swf29@)H1~)igt6!F)f!uvAy_UxjRT6< zZSs*w0he2mL{Oec{)QIY8k5E)ZWI2feBc_D!Z2(NCOuO>qL&(b;I5Dn%+L{@cP<2j za8pu=yH(8(?h^FHchIsS0jaUsJg*8eeM~{Lbih4ASJG2>_Xu`^Dn_k7Q!H(~1dwu$ zqLeDE^6KLSpR(HQuvrdfylN{qv5BC5Y=niZnonTYKu_Gl^CE=FZanb{O~0djn@W#0 z`%dH$zp$H+a!zjMz2nHa0If%TYbH2XO13hG5_a$u;e9q4SWtHHb%77!KsqGqj7}7T)LC7i5+ed8dZn z^3JJ$?YIv>Z0Tg=C;1O2aTdFAh=)4pt#98&{typ`X91xdcHrVI=YG-M7>}dpS@kVN zeF`PZEF7_ibsbE~#LcB*4|RDa2OtN_QS7NUsz$w4vaWCw?py<3L!T0a6GXz9o!Kkx z)p~M~zsm)39*Y1an_j=hX>Kt(YO+ourw^5Uq#t$OmYM4-!FXo=)Wd8in z>FvsQk;6^W+--jAB%CfA8v z0R>DUg-p_iKb#;FnWt*jKrjkrjB}m`uJ2RqPS=4|D&8#Rf-n{QqtBpWv<_?yL#9Pp zd_OHJflnj~wA67EY?n?Ns;pYeiC|j9=6&}3YyX}{7K!~w+`w!~N9O|($Y{RuB?w`I zRCl=Cpzd~)Af~Esh@%>NS_M*b_5S%;w<;Q`#^%KhbS4*^R>iROBDsdeFU^kX;nUc) z8%XYSGj*L;`>;(2JT-B7=Aa2mZ3wz49|1KTo3mNRqg1D_;EQ4lO#%{|`I|OoYix{%FyU!D+vNCaN_2o!e%(m}Fc#_wo(Fe>8uQJ;@t( z^I;gkK7jc`)VB|V@r^I|8oo%^sNbtk$lM?D$?{p5jigO1pHbGXiYeeXS2zU#$sh)$ zRD#tdAkh#B>lUtMd&kX!TW5+jXes{Il>99LspIIpYnV6;SkWZ4xGaWUd(l=r_M>wNk^@4PTk^Nk4knx*@Y`{=s0Jdkh+8!{2=3daJ3G zMeaD=jbW#K$gx56yqeEA$Wwn(k6dE8(64nssHKqV$|rh0`Ptg{l?>U*y$ytH-4|~! zDjQTf50!7RwnGQ9CLTwva|bU?g4}t<=o-&z&CTG^11aTDC7nX#Db8ljc>XjZR4eE8 z(mPE{Hrg6n968Ws9uKJN%!`R9m&oMFBbxoIl3a9i3$Wnafwe^7A=`^Fzm5|PX+ z+j>5{EUn!MUep*}Qf)ZVfy0x@Uq)E0E!U~eQ7&7k8rPwuLzGMPyw<TR z8+K%iEPMCf9Mu;m2qy`>SYvAXVU~^D*79*a)x{o59z8_m+5OgkfNkgA{Gyr6UpDpu z8t0m9#1<6+PCDwr8dF0PW0nMJkr6-XwfZ;;u7fPi^;=`%_{Pb#UXI7y24Kz#=!5yT zK2HZ{wAL85?_UKu^!EI*@8mx&r2W9pwUc5_R8V6k9Si`lZ(Ntktuxw=@E~RSnnC}R z70AF+BDxMIB}YSYTduK3R>pkGd!Ze*l~2kf5~&|KnX`m;_sGa=t3a|8sBgpDKKbvJ zVwyPKT$WAfPbA65p51sXev(BO9ku!1Z+HZ0`E*`}%+;Xz%(+bs_Y{8;3>ugh>^`@l za)u1o`Z(nlxWMft27W!mdBnc-OmO4$2;UFP>UImBM*x)Q?}w5e`Uj#k7pF1pf>N91^n7+uK!AM$P<9R1rU+yX zZy8X^=CuqU9(MLLRHn6Nel%AO5sY9ah)Uf^=l)!2%Bylls@3RkW@oBm;= z5&8z*RLf4?t}*L@bN>!HKpS8GA#!bpHgS`eP%Pf157*dTDyq=vPp0tjVH|%8@H2No zgfANoym93J;XGiYzI_(o`W+Y8q(No{FFWz90!qj^>V`mtZbp30A25#1;Fca^|W$1X}4)v*Eb^d*I*A8%~nX1;cw$Q&bU#T6?;q^M+P66qD3` zJ<9}fS?+4OODu?3V^k7x)x<~HSEM*I{uY=gb65%ZfOUU6VZ1drAvGqZ1V3bWLX^aY zHd}Lzr>Vzt*eQ<2{8opjpuQNcwF|g4)0{}1F^ZYP#a;-B! z{b&}DrWC^H0|1x}DYY_cwkEd5)YO)ZY+35l<>s;^j;=da^8VcNfR)3aVz6gh57MHj zj*xwH#njlGqn7&xzM)E^nWbCJK~uLWJVjjP!K`3k#dlNbB&n*i7SoPlo{c$&Em^6i zP2_iaQJVyzpTR>$M?X}7hSP!0o&uc7+(0j%pC*f|fH^?IvbNBh9`j!N&~3F&G3^{D zkdseefiTqAs-aN+0$z3HOhK8ROh1?NvYI;&l}_ZbaPk>5Lq%=*T6Xl=;i5xmK~E3cQC3HhVjhQ zh$0v%YOZ3?Wjx4qyIm1JRk3k8carj(O?Nd`Dn}NJ4$Y0yiuzDuOz>iMkzAX(dCVkD zm_?{tmJE&LFE6NIgszjwdU1&TF;EZgAx4ri&~nD1^B_0_+Cbt5U-KW?AVSiyOrxyb zd=roSE>0R9lG9Z#bq?91xsmjrWB(c+&S*P!u3)~s%iamYWUxU<|KMpNesL6E!FEa; zb4;E(ym>5Mw&)3j>%`9-0(C-JS@JSJ>;)j@*XuHX+ThWO)1Nxg^~51ZDU$2YPR@?) zK8ON-JM1@_FtxP;4K()-_LmFikyL>7LU@wP;$c7sm7kdL+gROOR99z)<^OnkVppRq z%bCypSEVP5{<5<9=q55P2B4;4`sYnWcE(s8P;$bIp0nNrJzItXnpkV?A3S1Afz5kP z9JUHLr1;F95&zXeW!^#|J;EsM$vn8j_XkdLjkY`vbP+4Z_ihL)^490yFkd~1a<}Zj z?RjxEFQ!!X+sG-496LJiFg*LiJB+8+77mKl=0fO7un6oFR#tG&f1msJ+3!v`;U25d zaOT|OwYW0O&2;ZNa1kdFzt-l*$dQDKKW`k2`t}Zo*K{_6AHTt4kT~@8S9`)s5-#ay z&j${WW;&D+Z}_7)^FO0Im?yiEZIOrPJWQm^oNGp=8fD7oq^;)!z(e2)bJD-5VF64} ztovE!1dqTX&aQD@;v@s!DUj&9FvW>)HEP(E*sEIMtC0*uSM4Bz0AHX9O(_EJNhw$D z;3I!5{7)=bf8K^RZfr*XQ1MiLaoecUy?uTt0syc}gK&`ql)0(^0Y+U*2>3&@ z0>Hf&@-Wm^%s?6%1{um;go0cRB@`;+eJUJ+$3nMwBp0}}-@NDGfnYY~=cT-*2TOu) zN2?(@yV{qWCD5#b`;IiHaOhxck>`LcNU;;t5isuR^AuzE5JF1eDG}z{_>D3Y4IX!? zOzs3WazSGS!)I%h1G% zb`(hRbE}vw-J3OOULF7yez^{q4|*L_q^UiSZaxsH8!(@m+o)?!zL>MXMgAV4n>JQ4PZK` zIY{j=#ASE}bav+Oq;Bd;7+&+v7DqE)nnbUW6oteOKEjxS3 zAw+F83r|8@n*meyFlfdj*jx#DH+iLg@)##XS zx?7rZv25)l3>Q97O|}MwPTe5%fNN|CC#?g+M0zBSkMacy#Zsf%gttMGO`K3#$fMZv zr#L$4UU}9ovRh*G1aB0+ffWuxR7@)gaI)xtCm#EWa~1HSFv}PO8Y);2$7ec37%+#R z6amb4H-US@Mw2vSS3a6GQ$NZ?-DaMn8?oYvlOQZlYz#Y95%_>0;GAVB;#!Lwi1L<{ z4PUct%+rwM1XEdk=wi4m{s?ORl_Fby?lg$L`QC+PR?k;K8&keb^O+^G zH%%E^GdH#_S)=`krXufwvr%fS)@^t)WVN7?>;Fa5e7<(mDzZ;CS~~`9_SF)NM^sEe$M*BRO zQHynz@<_6}CT1gsUtf4HFDFOGTk@6_PD;C+Ucyyv^oAo5J50lP)3D(1=6_# zNvaz<89KdE<3%bx>}JX6SbYF2P)G*W;-p!2*9Ed``nV}Sk5dW2>5cx$ zab=wR%*3fn$=Y!0_GQ!d8i1;zEBQ#WZUR^{5~)S$dEkCi7b44=_MVK=&yyh3#~M-E z16AA1x<***o2o9aIYOz}xI8PqUX`9LN_9e}BMMX1AC`_i)N+bZy_7D~93Vd!It#9O z4}|qd0wmLr943D5?sC%!@@qUvTpzY8YdVeg6-}qKCsd7g7V|-rV&w>HpxCf7*223x zMPDG!GW>817!Y&oyYlyGeBH0H$#`5+6K&oZz%LfrhH9M#Tbcc<0yYz}X|)bay00yT_mV8x71`tq)Pxp}xwApa1+Kz<`6Y;l=r22S)S+okzN zp=SBUjf=?d9G=3o>!#xf7BAY_`@jBSwL;r*tgQsma=SeS zEhSEl?=wG23ldi0L0}x}(b=;VSgbl1&tlGqG>EAb1Qc7~J|cK%bV%8IA%y%I##iK7 z&JQip5}7*p#0u;E2%-Q&CR6g@?37oov&78#lgZAuzfOg`4CoaV5#Zj)W)?9lWPu1c zIr>5|f&@P{^p4Ik<4zp;q5zRVZohOENh*cbKm0KKEsF0VzKNs51V`aty#=s0)9%E# z!3*<_y-AfkFi$q6sS=jiIc&nz{gZ$xd2kwslw!4%LCc#fA`#T7q)DqP)_zH_4ku|A zk1)jFmdaG~JQ{Q*mlJbkgcua3h_JLIG=q2?hw=481yse`8akCGZCc7J^8Ny6E_V4%#6IctmP`=N@f~0A}VoP;Bg6 z$f$^HYUO5DDFqfrX37;fdmdR{{9+!*Uqf3dnaJ`%FI>K0$~596lIv25_6qu>pKG)f zG}$1PH}1*sEaf59`pt?vpfRO0B$g-qP%qp%eo`KxP98KhW=Ape_qs`Nt1iBBZ)$Z7 z0@Fx{OLVR3q{0=@eA1_H$YR&@2*!V#kNL@ETIdHP#F2jBk2v{8!MHeD-HdL{r|~tn zPFO9&q5hofX53?0zj)@{_sJbxm>Bpdq99AV@G;;2raQ#$zk#!3E;A?RDB<4P5|cpA zxPW=KeP6#$rda>nmk#La23M4R`jpH%ce)rL5$6=KE( zP|Jt$i_Z&`({H6;q`FNZQikgBb`ZiiChg|2tVC=Uprwe-itR+8w#HV3-2JBBQDsq# zouWl#-VODULX;T9u&P?%Ryl2|aQvFa-;!?H=pI;AQG3w>R+V*|fTIYiPOR*SiIvwe zu~IrFIsqe6#^WTu_02#^ zXf@uYl2%x-gWnOPFo?x9offC+5-BnfNu=mH#Y&P?MN&0j3OK|N76*v%IGF%{c zQXI&G7E|_>(bJ;T#M6c8Ae_f)!Hx>U()ePPAxZPI+66;CR9X&Qb14Wbjfcx%uA-*t zqae-8PITQ9N)T~E2E`RA52DY*lRoiResSCvzGZYd5S~T+A(d-cgnVa^S0N)2qTXM4nH(_M$X~jj;d=R$BC@rQC3&=K*C-2(kxW z0MH!2=nxhb{}7W0O$!8_N`Vq{A&tyb5*^uKrpcWiu&(;}%|~XhE{%k|whNC4!YqqX zyb5MK#md36n}^4Ut<)evBY_3`Yd-&P9xSt?$096i3yi;P1??k!skn59dywZs5{Ccs zBIUJ`i}Qnb4#U98pz23SjIO-o+HV9lQGPZ$tOuS@W5!IJbUW;}xg-!x4TbFD3KJ=g(RlsDN~FTm)9DO&`iOIL z_3*ScJYCFxnwoA=_=PTNoTA;{T5R@XbwIms)mRskO>wjaQS|NPCD?z;oAUPgyw+mS z@JQu~BGUgYxx#aze^Z!_#C46W4%_-16>E1{iWxW8<0b~<7szC(E&AI+b% z3WDD==HzqdkY{j2Y@5K7r%hq^BqI#IK)gg8v6H=7z@{$@=*d2YT%dpv!7y+~yC)-s zv`X+Vl@#3O2tdhY85Hbm6r7**^GQ_b8#rdpUWW{xL1|Pxlt)!r(%2k0QIH-1MpaOn zgx}n~S3l7Q8p^{C$LNQ`P%&qXuQH^;ymdqc@h8~V>Ne%6?V^~ayy6t=36a%kln&13 zSTzP;!n<-`tK?i&`+_xW>TbD#H=3qwc`V58S52v03a+sVMc;VotU!{56z0Nm2RWo+zEqVkxf+a4BaM#Qwo1a zCJD?GZ_YJxr-~v0)|N*?%S3{5GO)1#qR$LiD6EcUhqhx5jT?FkW2>=3=CJb73ADm) zCxaf1ZhyTLc8?nSOFZX<;g#clGo4>n4`JJcaF9$=l?h)i|3QM*e>@WwmTsv8J!($V zeF_s8Zvdeink+{W{Uj$i5vQqIF++V+fx;S-PoczoG0CoDp1x7PjyFysHy-70NLc$M z)`;~%cfQ04=Jmy&;+V!54W?qe7!Ffkt*XAPv7<|WAA0 z0AsBcrMx+2c-OY0135)5d^I$Q7`C6XBvhOwsy9|oeTGm58c$oKAHkwGho^E!K@++) z?xNg*atR*B4C0f~m=fCaLoeCxdjqP*{xnS7+~E7ir$IEi=T3Hp)P(1_rE-&CXU2Of zeT$L>i{}QGCb;zYjjgnw-ux=)WODVJ|Bwo0pvFiY;L0^T#P6=2AWUNme1@M03na?1 z)tDMx#reZ(hSIWz!VOq2G!$bWIys7S{Fi?iX2{H~RhkR9YG*2uD{E}&LAT98C+HoN z(=1607YR-sbT5`%_~eL^tBZ3^XrN2lL`sG_bJm~gp&E*?@RH;sP!oOviVT5J%6xF_ zJvn&5Z;WY99%O6jkY}zmRyAaUb&9R5bHvB4Mh>DL)5tH)^Jx#gWLM1Byh4A2eIsSTEr4y@@Qc zlDF~EEg&Aa*%=No%bt*K)H{Y#mTJ35cohP(0Ufk?BWBLv%|bY==vnQV`R)yaFC9|* zx&ExL$$L~R!81Q)Q}#`kjeq|1X@ohWz0k*0E!(_8m7g`Yp_@19FsqjbX>uY%B&^aB!|@wIEY5b(S*AD%(IjgWF2`RU2^LJ$lsG2P^o3xl5yvg zaCfYYn$v=POmpo=Xx0i`QFlbzEs(JQ2Pio`;Jx%gK><0u)a0_TL)1Pn5hX8rn5V_1 zV_-g1XkfhMBarVToq!Jbz#KABRV!TBkC9>yFG=h@dWg9DD6MhtygwMALjnBYob^3( z_{Z>9r_<3FyXt4uS3g}GwYWmHW<2Prdui`?^*j4>pni}3)IX2Z&l{e>LEgYB?8de8 zrGNBUUG;-&^&8|Y_4_n-^&pKeMx8F&ebn_gJpwGNsV=Azoxajwrv0y9y6P(F^)W-5 zfsf-uaj^p8-PNoNCJmEoN=l$ao6@od>RFd*YAM^v#p@kessJ1M7oCw*llf&rmo?px zQobbP0e^@!Z_EasKw4b-vi5=OANJoG8%;*)Kmc!WsuKtM?=?aG$HY&ph5<+>>5#Jq z*;b=ykM5u+8ijwQ)thKT|CW`^LerRqG8S@l-e=b}M#1}vi;$LIVq2bN)X)GcQb26O zi__S%rlH_dUIw#D7e9|2W}FBBh@AdPYlRos%&4@s%@WdK;{ZKT>J9D)A;$GBxiT__ z8vGAdL{&P_xv9YTa?|{B&v(L6;qzF_uhQZLZ=G?+5%_i473W+0686tQ;?qWqS2UA- z*tmHGDrlmtV!~@nyrGRseJ9MgMTu_7eLR1o#;yh+PWr-qMb_G~p7d4&Ym zw-dz?R+ZIFxrL)%!j)CyZBvL`J+71ai5tSX$ZQ8G>oJ1Hu7v%XKl&ATF+V23MeC#) zw2A1aTJF6LXiBMEv-oI#LT0_;1S1S?bi0V}(ru_Oe5o;Nmch2rete%L4vEg{Ri0@n z3S;-%Qk$VMtp}ykI*kDr<`$PAEVqjB&6GLY+#(uuUpQ*t-aj?WATsTe+Oac zbgsDlrxT8EoGGWWI(U-hkI?Ocz*VKmDWs~R8ZeWQJ&daP^00p~KyHU=vq2LN;s`WE7WBgpE88E5VV#&{Nj< zK`CDVf~tzEQtcc&BRg+Fw{ynEA+HgPzId}#q@@ES=;;joeWUCCWXS6TLlad?_Izrp zG0{kMl0~CzIugna{XTQXDvTc*q#p*q;%Re8aHK2g$%hZ}DC%79c#vYhI@x1^(xh$7 zQ!Q1VSa}b?7Xr7$f!D=Qhm6G63hlFiQ3#%Wjf5 z%R*Y#k;jOZN-Q?ekE%fQ1zn^l$QG+_@fLo4_W2=`4VU9EcDx?;#~Y5~yC~PhpZQ$F zPu~R|$wbDJpY3KIkqtktgM2JDg1UvU&R(XgDZ{SYZA5E(dtV+H!rWVRb$ee9n|rN; zpV^@k`gm|D>I6?Ks0%xS6JGXC(5UK!Uq16lHTZdv-JlCF-b+Obp1k=9JtLY9J6-iI ze}NkEiMW%Yivyc=r62`0_P6U;2XedFRy-yl+V5OpmORZYyS$kte#p}um?1*jWffgS z$s~GhOKisaG6OypZiOOmbB%4u8t0_N%I89zgkCm@LKgCJ6vI^K+kk?;`CC9PaNDB* zM0E?}`^TZb<;CsMl;I z9&zJwP%(6T``cFRW`3q0;KzXK?MZ@V%(kcmR%T&T_yuqA(_NDgM5===7?h8io>K`S z$eHdpm=t)_^UDY$*#f0-JOQHekqR+3)Of1EJ3y71(Z@K)IodYo$c6Vv#v$1SWm*sn zBgbos`-}u+k^}}=_eo%(e08Agm4X6-qUmX&K&qASz&uF#tzZg7RA6D%le23>bkglA zH+A7^zz7`N@w*8X2Ev-p8}Q&}6^pL`DHxBpZh7#bAT(f2xn=zr`<)7SZ9dRjHt46_ zo&+6!7GOi?pOW&T)&@qk2}Oe=OqCVmou@b`%5cpVx=%xcHczF_mGgiuCggrD$1Yll z6N(#;R}iv#;=)HRddPC~?DOa6mqZOHnx#;nHNe!u(Bh*aza?k_Formf#j;j7&f!kb{%Gd6k^ne z`=C~;=PE0Ha{-+9Ya}5c{SufNwx6CE5z6%B`5@nd228Z{lR1Q1C<;S*^700Zf*TIa zw%-ExTdoPu6`V*ME$FthNt)S>of>mpWu>%@ZS(+{sd&7Hx|V4&^$=B{NKJgp3KX#| zdh`IQW0adzXC@UdYNw_?x=zX)M`kb>wVX`=4)2INAy5nE7ZoU#2OoAjdJ|b_5>M-M z84VIoT{@Qmxs>X5OsXTe&Yba>;$cm?`xVB9db7G&No=NDt|B?{Q)kJn=~Nijq?XJD zynmWY)V3h34GUNie<9OV7|_DB(oLrCR_9fyn0{mV)MOivzaV1XR1Dw7kg>+*Jijf4 zxNQP#N5AlS6|QnMW~6~w09uo+KtqiI0{r`|rx_1k@?s2j8?H2?sS{qKlz%e{Txb<8 zd1BRy6C8O6Bk`3#oH004e0XyWPpBnHM?%0;G=t%NcCHP6VIR@h%@S z^ytJBgB$d3i9_|#FLC1fDs?e6_52}B=$Ye!s^;r6Rx1VXf+W6YPWWXM+@E;eI1ZIS z48O^0iZ*|)vx7K!d4BRIZW8GySiIE*+^gL0Eumz=aqpYsKJiA**fQk^w!?z(4?!dFg-p`VWOU4Djy5aeaFjOx!HTI>MUfmp= zZI$LcfVY8CqY4$c(+tz4=~WgTT*JcLjg$EH*r*Bp1oLAm#}__5Jr7JVz2mGyZ5Hv! z6DHatuCYVYywBt_QwPo;GF)A`U;wMN#xAVg5S77eKd~FRLvL9d?wqO}5CZa4NhX3t zXRlq@Pi2IKwXae+3XUD|klc3`+F&txM{e6Z41FiTjDS;Q)=eSDlNjgU2Js}N*J{jq zacQLNRwAWT$XFo!RQD|0cf^)ED1@KtC(ZCvQ~Z(Pr+lwc;inSEW#Omx4I|`}&q`T* zaLp8e3IV9bc&q?a-d{-oYK@U!;KCH#Xdkp&Sms%)@Dne_`tfRt;2JtaMjr57jE~O> zydu(t;7^%B1Abx+1U#hSSG`G8W1UoAbyDLsx|Tr`*q~Q6T%5<*XMf1^u8Ql-7Vr4NAe_GL}oWebB);#o2hCl*Gz83l+M&rnLPHbOj^hVMoP=n`PJZS z+LZy9CUZHn_)s3zXyhtNd7pN|B0y~+(Z{NjtL&SJEd*r0CgVJCSXV&+2aMh3d<&wl8rV_%{8M@6(^SsXX12KUiW!)Op!7!2HoWn$Pq3L z%BRl_s9TYB1AeoCz$MBrihB{-OT&;kf(G4h{)36JLDv!Hf*KpyH@x6F$Wo&XKkK3^ zv6Bai!xl zh`#YyKU^-xZS1K~QgBtk?UVv%szEgt=`%TmOn`Y?qNLTe=WAwU;ey~3b5@@32 z{d~$P`%$#EVm+U%aHr>!e4n(Fswi6zg`{?3W5>X5o`@c2Oh1`b%#0u^?HJ6%^_`vMb%o;wmJdRE@ zb5to8q7y19g&~L+LtdLoT>^*a!PDYN96LIvs)nAQ@+f9;E%zI7*}3*3B~-~iXbw+2 z(Sr3!q{bK~YT(pporYHmFP*Bi zQAZrB7D-UM5bfzV$0zyG(e=f6PQq}L@FYzqKv-SSqeZx`x%|uSYwzA^WK&r(s)|r* zj7SAOsSKjfvgV|1Byjhe?;$Hfj8CFm1CQ2Kmu|5QJtmZKHJ|?m+LKKemWyn#S7R2ohJLX@ua-1;{s<0Kfo4wLP|VV5sd9 zL?>Z^?@?q2oobJh;1+)WrlyFJMaob{cv6&V(Gm=??z+;|x1J5sV%j4q}wP`Bw zA5;x@)gnIWP+x+WT*{e#;?d}!Ye(8X7ucl7-vVi->xFv@E%^-|ZW7H+(Z=U# zH!dHUrMfWOFrfPBEGaf&PYDo_Oeis63}S7PNL4Vwlt> zW|Adx=99v!FDL3{5?^EwyalBWtL6BZ=iNuEb(dV;;MQeie0|=TBB9a7i^x&6faol6 za)q_+q%;b8y!=_jm1VPfe7vbe)qU=SOed8F1XT|KwjPnbXP9U1hXi`gB{|(mY186L z3)%EVc?nh5BuIgY*fB(Q8;-X&wPs6@c8MEtlLK6Gtr9OcOU{$+f-Z9d(J;YiYcTjU z6d=*fXk@Fj5U3{?Jtx`01Fa?nXDRnI==9tNK5Ps}Tvw}Lx(<6o_P)Q>G8^&r~WOO`|Rv;GWH9)8^&nc zr(p4f7wYuvMAVdjtfG7ox;pwpw01CuX|rB$)d5WWZ(9ZAI#L-e zk|b8;UVeF1Ev|CBw|10$b*REcFpfJ>yBc(bd7kD%bBfWO?a6O4dE_6Y_)ChHzvXQ;(D0E_y}5R)#@eNPylj(I zcPeHN#!+KWxUlvqKHaRHP;}@*7;B8?YQW@ea>QL2NLW~NaF3}B9UW|n`tYNZDjfLW z!g81`I;87ZA`;l03}mVRMh@aG_gG_?c3MOh)3&aRUg=Fd2|dQ+OwHX5Wef7_oEZsw z6-X#144-{vHtPFIIPPK+#8X)A1K3I?*EghO=!yRfx(CQLs496Z4MyY8XBeRD2|Y!? zh~S6N38gE5URcPxnTeQlAYS%6zaBGBF5e6F0ehjh_Va=Dv&_EC%+OLE^eS^gzEUU| z9D!bc2EB)SXn;oK32zN!POsuP^qpv?83il=1y<9wl_y~a(3FMWFzu+eGCPiuIi)ry zdtG=3Z`KbQir&)D8GBnPXi7jHh3TtfEh0F6;12!pIB<#lQwRX`iL`1tZP4SFZ*2bsT> zj(r!;^yt)rob>1|rh~q(9%j%^YixBS+Rnv0PYbXwTe@wmSt*$eY`!oQV*yUnt!r#0 zqqm$&Q5@W9H)h?Rsx-2e(i<>I+6ThQezS=eSMfde#$cCTnYg)4`t%IC5(lrjQv%+f zTSv#;-tl2)aC`*gt+CvQXWlb*>wBjCj)Ezz1xm|PN5E zl^N3|AVQILRyxE!;wH@<>{=d3!6UAX7!M2Kc$&FMStXL5gB*^aw` za?PAOZiR)nxo25;F`$qKbemLIW2-dq+CuG047?UMZYKKJ^wa9Cp&&-XNkJ@ ztpZ=Ht8C_TUK*ue{czm#ht>>>wnwxXSiGy!`V;b0oc*X8JLDBXRfav=4^3z2 zxerDYjKjoON=(e-pi3??lT;>~=X1+_>EKVC6oD>{S#d)@D_Ddvu|duxE-b~l*_}<2 zsj+Haw6tg0PRmjfu;O>-=kg?+1MXMBgA`M(u}TSZVLhSZRCwDcZCj}1DK$G_jLTZ{ zO?9&nNjZmDxo2++hhKOYlecP}%~m*<-480Po-*u>ioGA{kOb0a!kDws8e8gQOn1gr zHCTM}`M8K!x_p?PJ`t-B_i&^&_GIFoI-P1;>56m~Mddw&E$nNJ@y4m9%h|mYYHVRE zit;WIMGklcfRp~wxs(X>Afw3$7^2(HN=^y&Jt`wHpC&-=LS=^jC9Nt42m1xJ{nrFU zPUI}Oy^!_}GES~>DcyYrGMmTeK#KA!UiF5Lt5vYfD$%rNEO&o0GZffy{F%eg@sG@Tk!;3@m&au1`u-{br*qutW$+wv-_WWG2D`KR9XB zTgx4rpsDUDyfAIUQ`@pTp+!{M*2-*8iveK=nPOQ|rr*D{4sGZ~|0xr2}W zt6;f9M0h-~k7`44^f)2|pMM{uS;a;=^X9OCyluE2DWm?h8ZbJy1qH(aT>7cha5_Q) z7|Y5Rl250VzDUo;uIKedstk^4l%>m(8L70(EhWyv=BHsLg z$Ijwgzhk9qc}`Qv3U%>)tVyjrKfNgZ5+`>c=g8`%95@Qikir zB~Ud^H3niZ*>go7sIpT)6L|Ix`&8!KmncdrvfO9`VX+hY9OKcGx1b9gnYs8c#r z|G-nNSVy{)KSgac{8o(_H)l4DG^?zCWtk4kmf@-AjQdnx_jjJ0%36_yyQ_|y)uYEM zR?EeI7`C~ce1UpViNuaSr^|RM zI`3!)o?!fu^d=aCP$`}RsT>|;3C}bA=-5$Sw#a1(|Idn(NM*FKb4f_5;n`APrnxu6 zh?fpYkyO2p zQhgj7QMFc2rm!bG%xl=$v7>=0xNaqrNfFR3WiYnu(W`3of~%p?*kol(D|ZxaH;1dr zBT>+J;4-K7ziSnVFiHfeBoRSMWv(O45ssFwl*N+_3$(J3j;U^_{?~>`7V|UPYOufm zZ&0F#A6cD#MVkc`5tNcu#g|S`hasGR>*|0f26V;AwIj`BBC=i1uQ|K56)Nul4(6|@ zw6&HVVcD@NxlsemRY7GGz}2Aw27*xh)Y|9D9(X42q~(Iks;uWb(im$Z$q8lHEX^sX z3JVVZg1?`u4AvlBUlBI zqDQbu8{E%~xMd>{b7f~3Kv&J@I>Tr-R8AEya?n98G8{IK&O7AxR#WC);lYBAQrCXQ zFb!-%Nde&=X%DkR>EObdvc)a2u~z`8ZNTDO9_J9J5+!{jiNfMO_(f0=$c26Ii}2Rw z3lrH>De_V*C1f1g7%W7W9$Vy0v|!RR9kidu_h?Ur7*JomIL=DgqVOqP6jj+xudDYj(~*b^N`-R4IQP?b4yHMS@axD z;1WiT;`i$KrTX@cW-AG3Y8Qs&VSB_BY$0=)JFK~>J!;%rz)xCE33B=>Um2{?S>`K) z@672agU6k?*RL>rL_yJC*kMK=53BmTvYt~udtopdV;YPU#7v>JKc2vF{;hwGvt1!A z9#bZmqyDdd6eUT0@0o0iE6pUK?2Iat1Um7LLw`#i#cusGzDoJAF6LC$2fHVcNAVab zySwozgb9c@itP-C(gu^V5hkS1Zk&i=!e{Iq)&3|0PLeSA#`c1_b+%<@oeEEf`Ob06 z61g>WLI!Rrz?5cOru%R&nj&c8B3*^vJHLihWAhTpR6~Z5GO8-45czA^DTOQ-j!FmL z#}kCkZPRZfm8u9<%3+U=9cku_#-?Lz(J_RAmlTs++A#!Ed7Jyi`Nh^{|G2kxc5!s_ z<>at4IJr2VEqN6wur=0R%Bi5SeNc>tJ-#3R;Uv@(hQ#8LEv!{u$6B;6850XwSe;+3 zbh25c6H>d?Y=Y`#RC?n^`!nbM3n-eC#5bvC4HB|ZCO+i>j+ywrI_Zs(O9?MQ2Lx2n zC*(XCY_f3nps3!slcV?!k>* zv{KaU))wW4Ey5^5s(2EBW}*XS@nCQqPOgD|yxF`Ln$x&GkmekG|54+Mu(X##t?B_8 z`?6|VL7?@DGX1GIYmw=Xt8Z4qKl5;Q8NpcSqcyfVl?@X_DlfgrC*NZ`JLEg8Ms^Dm z_3k5k7esW0zd_`E=TR)6_fFQTp(+D7l*hoq*qa%RSt+nB7a;LP@HXY&ybACrZDt9t z^r)(7)xAIWMd{sMU_{d0V}=mm#0gL!S}F0^7*m;}w#rMs&g-rSkk54%HKSvy%9kOv z8PF@X;5X)HeaO3}B0Xvy2AysrUhV_t58h+)Jr-i+gY>aHdBC5G@Gl%^@ zQN@4)Wskp3#^>?TM1jpsMBPZ#nz;)HL)tgWOy)bUqd#UyH+y z!#F91ArPm>b6vw;Wf`jAClDCg@@NB(9ta=!n|jnS3OtR)N75lNM<6A#2(E8J_%GuR zFJ{ZCF~gd*5{BOEO68Xg)|Yl_PhKD9dtgMa9rd z95iMHrOHL2txj5nwX)0W`<7LSS&`34jXh<2U%QzvH!>RKlN7JOv}{wDm4kQr=(i{x zrPo;B9utD_^Ebj&}=~K&*?H9nW5Oj(Ihe7(n zVUzM9iHZ^M?Rj&|&Ll$5E>7T~^Xve(w7TCvKkJ^xu44y(sWal$9e`oJk|!wf(ozw} zo$jEQ%XjRIaOrd~T;zu9f>gZQPekpPgT`XP{57@+-7XgAV;!%n;*&}~LRT^6myaW< zvB#}=Vw3N8rW|yL&3&faZxwM#QnXWXNmMS;v!j!QgFC;)I?Dzr0o9seN=pYRRf^<| z-GT)iYbu^ZZj4l?14Hdfi#(~sNV^N5;UW+(F`QFX=#rdaKA5hzD-2fPek#@3k}-9A zFLA!CI>oCpbAdD!xj4;`i&dorE2%9%vnPt24F9g@ zRb(xkJH6@jtc5tab7d{8QrT3QljQ&3-kUbJjb!P<^BKP)qwhqt9bwrbC2Hv#_l=+> zyGq?!*rL?cbHChx2uMO31ULYwrGNc<&dD7FNGwT}JW=-al$iiQB#_Hlp7T6uS_H`s zg(G$z4LVy_6c)BfP~XiHOFgecc;bc`quSnw^c$JCd&W>cJEaiwH2SwD5QBfinXA-Q2gQL9; zfe_dkItB2WFHf^LBGx}+v6M}34{EK%U+l?!i0~I!B0cd71p~y-luQAaj$ZZc4#&bOrjpmIE@h&H8ineDFr}9Sj>`1BYB9+$kYMh0Iu7iQk3>!T5$_t3x~=&*c&IIN;vSlrhzIcG~BLWxKdCS=hbL`JbD7hAoOMSccgJ_vwhm>>E*@8=j^dr9y-k&<9 zmG@z95zcrQ>);LwH4k&G5HRP!j1i`B059*!hu4-+jA*5DrlZQh6xPf$)lH#XdL=W6cr}B`*mSC$n3Eb*=b@w`Tj+0IFD4T}c zoSyTPF0nzuC%Y5nqwk6`uF{X&x70^O>6In5ImVg@i$CrASA&Aj#=$B-n(=*w@00-WAslH`4L2B>VZ{6=#I%s zKsLel*u1Ko6b#u0F}uCp{ZWSjeQ13w-#=4GwpA5@sqkix!UG7HCX zv8h#DH+<_F@(XOdMfr{f#;i?RU03o=Q$vW-{!E$x&O-ULXoP5VUpt%gI>c^#>yuVu6$Gm2GKZhyhbzQ0xxk)wWUJmVN9?7n38Sp$pqX+nW&+k*T{_oe?PvU& zbgswR3H{YFuFAN7kPwH#wJBDJl&hJK;s^$(s-#=J&(gW1U~Ls%UKM`r$Fs`!kd;lP z(b|ipHjb1`)62Vz|Oho!`Q4*xj;16PWTIia=!`Gs3^xJn~oWc&?ILQRl zW;^ILWO^OwR}lT%7DE3Dy#Zh6j!ck1ikzp)cFy4oEXHrJ52DoTW3x18d7|_(&zmFB z&3ghP9sVBjbwTN;L^=G*Szw`Td85ZvbKg*=&1{ZUgs>{yMNMf9Ysf8>#twnP%uLyq z$!*={-SsRh=EW{yFIB zJy+Is{+5(k?!3+#PR-ELG9L$XzVPKX5rY$VhTo~TepoL!69oJiXYwjfIpfgEoWpR| zR_9!e|DmeuvvU~uiB3sBgT6)`RMcEXQPCDTIO_@ z0WDJ6Oa&t%lZ=5p&x0nzES-Z*7a;pmf=QojnJ^#opJ>X>NwE$yZ_YOn{xT6Q*RLdT zI2agmFOw`(gqJ+>z+V;o&Vml{oOt3($a6QlM0-jOB-{93IZBsNut8NwR_Z%K^rH#l zvBn{wx^$9~*_Nrqo2ZCGJEf%422Pd>1#ERr19hO$ggE$-0s^TMN{UrI8CJGT1H~gj zd~-Ef<*oLb>I;umG5k9W^$vHXoR7UvkK@IoFUbbbn2`-G_G!x5x!b1^y4KHT$2M)V z-$b(?VZo)&jn&(nLVZ}tw5m{X!Aa4Pky1w$l256a!)ihxKMM1D00B**$ezL#K@IsZc8f-e{{&DjSy zB7l*oi$k1?oIX0tKgu8vU0jhGp#Etk7jL&rd!wvVPf`P7WK@6;>xA`$j3|rakdQHj zrL7Mk!~bkUEC4 zFq*5Hih3|;ERKsbjRih!imFsNx=q{yeccFyR8M0u5PH49!a?U!vTG!hwo_p@+SeVN zkUYR`68-lwv@2!aId@eJQ=ROYVye5!9-w!H*5ZQ(*toTdF2lnNkGFPPABzGx>O8hx zmb$^`Be}QFq73t%rRmIR zb3q|0Bs8W9VVTWAlu*j}!Td2=pzB0uw9YHg7=m@|Eo6O@aHmn2v5V#iuPxbS_41j_`e<}h4 zVxFE&Rj8mLMMmk)+9inv*=tF)%4q#PC}3~SrvuB2!-jW-u7ec?;bz87ik6Mon+MUm(9nW=Mb-|;Mbj9Q(?s&uyWa_yJ0!CNGS{8@I zx=8R^c~|{5n=`p{qCO*BGtD0-%R6Js!vc;4%t?eO;rLu9KG~Q{S|_hMWK)%K8H6Z^ zwlI~!>)(o1Th}Qkyb4=xkw3+Gj3cQuwfW%so$C@L_Qce#7!#r7B7Q~EhyNKxorDsX zLp?}*;)^%)w0B5rcZv}=%+SL1N!Uj~c)LhOQm>Rsp>tDxI9$qb58vt4N##_H0+-ElBAx z;yg40&i^+}!Z9g-%8v1iB4U&0r~ZxF_7PR-<`HM>juLbY+XSAQCcho=vTNp|Tnun5 zb5e0jE#T$H##CnjP}L-9GGeE6F*547_f1f$^#+r zD~MZd&(`9QpkN z!}9rgB(duF9;-AtZZbarY(SI0$uUbU{9Q>r=g2VvtMKi31Bv-jRe2fAk7N1u>k#wR z@0-(d9u|HnBq5uAUoPOm=y?o?SS9t zSSp|e4NGyK>Fw!NFFeb!Y28rPg{a;I3_x^j;<2mg**^sWpnvLxOaAppy%448{dM@X zsuxr~^!9}VCG^c+SwQ3=OmH6!gPp`LmKp32v7bCF{fBS|EU+>t=aQephe2FRhYWUiM@GE+5LS`=HJP2H>5oY7MK16gTlJUf*fnjyD7g~9 zrpqjMYJ%Irsk-&KGh(!s_EdVhChe&%8%*PXJ%O!elb)jf4Y%l8XQHpaV-T}9<>{V= zCyH{O;Cm%~rW2@;cm>jwasw68;nAV=gg&SM=`;j4C-{Z|Be?8~Xw8ut4cbHA{;@JP z*MilX#6KI6AvTJe!t<$%oVJRD4^>u!>sW!ShhRNF&YcEd>ZmH+E+2clL!-ht3ZHEe zQ&+0P_E1$%rw?Jm@FZG1!b~soCdl?0gA|dY&dSODT*0rhmcms8@GE#*SJi^ISft*s z%uP$)8ma}f*cc%!&jCS-(IbV$8}7T{N|6)Y;p!)ylc4z&h41n)~$sDpYq%ZVLY`aCed@g+^Q`zm7e9-A*@kpji( z)hf4K1a@V%J6(a!QMrR-Mf#M46vKoU0B_{v(U0R$QYR7E_!ePJMT!ya`zV`(dnixl z)d|JxXU1;OOVq>i5iD}f2QiZuWQ#|SWtd{aG7mVL;8Ib7*ZtQr;jl~M59WHt=3QNf z`68ua_$H9Qb(WwS_PQ4wZkVERllga%U~=qPR%KBk;DEtRAq=pLj|Z3~86;u;hf7jpG0!5+^9Xrw<>{R37AL{Ne+YAA zZH0FU`+H_Exx&k*P$7mFvUI+N$F;AlRo}3I@jmevjQ1J%i!!%`$2#6|^^4>Aj7`}L ze$jmuW}Er(_pi6tiYy;-TZence_^-RXN=Ze$+m^e)5OUKFCh%?mia4DC$K`6 z+LHqnkfX3-q{5QCn8A;U0SFi7&A`*fa}OziTX5}f@+_K~;Z=AuId4Vaz0PLauL2K*z*cghT>;d zF52BKdGdb?!^N-QIT?H{6>;$%ZoI15bhUc6fxQn+QKK}x!sAR}(9EKRAM1!B#*Xw5 zbl^0Vme&RwxTs#ZdQPljaI?7zj&DiXY>wzMjq~p< zYQLwe&yj2NWXv}{g=65`AOhvsWBQCMYmtS1LBynT_~evSpM_bWDTDKMUaz-~^{jou zy%PgXE0AF+xUgFmiScbEB@E?a$RLl35Z0D_L9$9SB7v3Z%O_q5n)CRYjuv3}$Pa>u z%yE3&uy1jeT7DUiMFPbje;hBqS0Y}kDPZ=|#}cTb$c z?V7GvD`FmPFcUlU3C@G?GJLiuq@Czm>v8L`H8!MUVQWi6S8TlJDcEq+$1qkN9K4Ml z(tb6i1Pzw2oK$-g6X+(J-b=N~Pz4=R?e=e#^79lKbh_+Kc+Tmi@ho{mgPOceYIaVZ zq+*_!FXHqyq|@cS;WNWUGsFr4I7$?!xE}h9(?h)RQrMbdpl&oS+pT`&e0*ppV z5;}Fr&BV)gD_>N)X=LfG5N6UM{-YK)L1a4jzQxhC{#g_8fddB?(!i*!CZ>()+3DBV zpZ&l*?A5Y(NKpw-(La5Af$bfh@M(_9kOfsspok1fa-`yPb}`+Vj8E!&D8}MO98tq{ z*IPAxn&x^Hll!S(_*D$=rxas1<<<-&i6X4fG&R%S)q6FghAriiNbIf`S{ zetCEZiFumiOeI;0np$gFO;hc;cZ$_S!i7tYrv@f!+`z=t-o=3maBQY&(|#nK{eDN*`Pa zpPB%c9ugmV)LJwhjkEEV*39HNIPsH{N7GBBd_3|D@_hXBW0+`>8O&0P_XV$*XXfeX zLP;N2rRf_&5PPKQb1ofs!c{{p!_7QUxp+Wlw^-DJSRA$8K7cPKw0-Q7_$m_u=@gyN zaT}QychuF2Ed$;23qMx{Z)X!WhmSZwVD@qbMpC0#-X&qN&U>uz)Gb@eb6JCa1~x$d z+P_09voXn1lxTL1P%h1iN*q#W2My6)Kf(Y71ad1br<)zb<=n7m99BvLOfgtNxM3t6 z_L$Ywmv-3enkuZeZavmNeSM@u)~Z_WtmFjtWVSAM%yVkE*OtibYKsb0v5OFM^R{A+ z$M_L;2Zw|#&R^hWFDB>TKC$Wa9RA;Udj93~?3ZuTo1Kf(5lQ1v+b`4UcyiXCQM%r^ zY9St|6WRN!Y)vGxPryY<=X-CX=G&7krA0N{V8t_2<&TDYhSC{@9@Fq7{o$tbjC@E*sbmQ8fB_i;gPwzZ>NZ?f}im;u-pvxG#1@YSGCnSbPlP{QDg z6pYyxYv^Q|g*)&gL3aWwdZa24&nstjf#-Sn6vmqBaLQBGh5#l73UxiG6un%Q6ffZq zNnFTs`#U5>_H_ze{BZYCZ1ByLHkJLO#!8m89LT!3`RtS^P-lKpQc4DUpKB#oDkYzt z@`WZx;V+?>4F3!wipo`JCwr`M?5#;XphuoiPr77-F_?H!PNtVD=}ga|Ckq|(m^0p_ zHGGk>B6S+hmY7(pC{~q+Tz9zK5f0AlsX9C~yornGfj={@;bA!Eyn#?9un*GjiGj$W zkqcN`ctwErj3gLH@UBCgS{igj_wHJW)>+3bB=D0T3bk@6w}utCsMzxSU~9ADun zZ}@0|03Fbdtoqi?rQB>cf^HR4c=~4RgXyZHImS5iWyS;QAJ>M|;kmn1xb&)gz|HQG zzS%aM!G=l~Pu6pGfg6M@2p%wAR^|*31WV*r3IwXEI0km`i?ar2Ay$Z5?-AahL+L?f zUT-7*RZ}Q%tO6KZl~Y%mIpHZNnJLEd<US95iiLaeKIAcAB$-4@ln_SLNR zURPfGYF2xXHCbHR6sag2sn~XJlh|OXtk~;%)u%LwFS}Yx#9u9?JLPu&Buk5Qmc~`V zC67(|@8vqU)R>r|hE{ps%6s?`26f2ORgU4Q2d9AVBMx$BG-q*mUl7#e13?VF2qaS z9r^3A4n9Wx&Z(Tpo<6;Nt9XqQ@FX6Liq)|w41w1W^C&R})%c*o2SEjn?Z7-(c7sk{ zm%^KMCPuGX8+BntBCDeP%OJg8Cgc1z*RvP@jVzxL64ua2@cT2!>Vn?x46+nV3TgHu zbG)&RmX1^?hI3!YU7Ea9!=$)1Wf_rFnBTc4scDNLMU-3G3@JP-A-~4>*K+p!7{PO$ z`>)96OP7WjEooBtkNtEK$2H+}S?+P4BL0%Fwwb||I8K=VfZ*GLV&Z(!hX)ptB4GZQ zE@Q0ZB3ai=e|ddwABIJ3AJ-%h>f+;V3$}(z6=7Oktp#t$W38*TIuxy1NmteOKI$rA zXpEH1D0-~fLs($^#5MV({k}c6bwJqhzIx(C_DXz!6ihG`J}QiHLt~0?_c!U8-hMPgh=QF9fIVi0aA`EQDvhmQi>&upTWme|CQ5tpjwt>pRYEo+ zV}Qq@XkvND?CM^=c=8H(Coyg4ab|7kY@EVc%~0003r~-DfpEDve4w4(u&2}J?-2t@ z66^8-=ibDI#s zI8fP`L>EGFS};a+Vb79CmH~lwkvh#UR45pKJ4i>#n5tFg5035MjbJH%{c# z?eZ#G#A+oni4~Tnu`Ak31?G+8mRhT?3zw3P;fPbf*nSlrR8O?OQI$58X0cU_e2qHR zVHS$&p9gz-s(?GZ!IP*xMKQR4zi~5HyU@1z}wHB^624_Fi`U zgJWq?!#4{~zVj6fB3)Jcm5SNf=_QVF`WYDBXcY)2_Vm(LG;P2bx>+%0l@xLfCFBOU zpk1|O$$U-EPE|}-WY8Hll?trt+4rPdw!z)>Sj%$%rsypGR|X+aLRT%dbx256-`Hl6 zU1Oo6wV;8KT}u%Tj|~88kv#)tUy<}2+>&^pK4vhbl4u6x>nt`0W>wq z|LSK51xw0dQltHy5mDEa@o4Jv`PnHJ0cbsydC2Qw_47qCTugaP#uqfr+vjPB3E@}R ziaL%H=~0*^$*SJ*eIyBn14V0T70>7$0o$+yffvqTduyiXvYCM!j1z~?D5Kr0tfJ+l z3??gx6ApNM;vQ=UtJR5cOPy(wg-=ns%unLb&u+q(Vj@O}*7TC6uo<4iupU)As~?EZ znaobB(nZ6hcw$`E0CZOmwg#Hkf8QL&8t z%fJ77>Bpp-!~yg|iAVS#RJy^9by11W!j~v7D)1kaknJnq(O{P7f;#DjeZQGJXfDL* zD>zYewuHs&L;8fnI*S7EKHwCddO^kc1?(*_5UU}_O*MZVmeSP)OpfH-num)EKLIx? z_=f2&*;#D!7__o)qS$7U(zNJcS_=qhH?Btk*_)nyvlt)EX18RO)d@VjTcl_2%Ib4u zDKcbQT#T!BPf>wgBiuKdk?V=Kg&XU!U&_Z@XOUJ2x+}9tZULM%tePc}mFhM0JyB@a z5!D)HZztE>y(b*rn) zki)%v$CZyD#OPNk6{gzWOX6FR3ZORjI3|^=A}ovk>Ka=o5iPB?^F~3eVOfc75ij8f zY>u~guDDW}GT9s1DHCE#ocOvX=sNZ1ggt}Bh7Pg?9qlV>*rRfsN{;1yzl?TwZM$jHewV?A9ZEUJNYHP>juc;Uzh7f!FnIq}yk=jdw8$kmTje&)@>B8}sR zIyKeCbXP0HEM0&%`#nqNuIu30@9(M?g*nqzj5-@04w~8rgaG4l zgEB76F7En$dH;|dR7)3WcF;17CR%h3wL>&&(XD3Jbb3CX712|L(9QS2IFr9)1Xkc%lgfwke^DLdi0+plh zL#tIT2(EL+e=^3O>?PSCeJ}gfpUA7TGm-pZrb9T8N3f55T z5H^|qfwww#_*Q{8qsr(kxlgad`|1)TanPD~Jlx-7d$bo7EvMIu-&10(zTZqv)8`~k z{opIud(Tmz!yI49)T1UO`(%In`X&E}Wiy<`F%aKFD$6k7#cb;nlxvH|+9xPI)}GE% z73=1>dj?gUmQ_LS+w4?*rFPypx8{FbT7HM0!3P5H1C0P|0PXjNSd?C}qO}XIq6#wvL?yf3_ ziY!bHSzF=Rbz^NU-DzW|OVMU!*VD6KY`5zgn+TQ)x3zaTa^!Mt(#-A0$Zr&CK_APN zT9=r-d*Jna&>4^QNZPHAN3jj{DUnlz&m74Sgvskpv~cTGjB1>U?qP6(9bKPZDiIsY zMOry(bVrI9IO>j-Ht5GQr=a9j@bb4u8&ntgS%Os;{>$V!80)~G2oAyRs3JaaV?H6T zZ4NUX*$y9jwkCtHQYSq`e&}y;C0C9nWUPH+uZJ>uI9j0<3#Ak#@%c z-odVhC&|%t@)*v3z>gG2_=0+fu)UZ~ef1F6h8jB1{UT{dH^N^91tR*8%P5CmcrYnR z`V;=vs!26W1g$U{?SI}^30jzESEy_9{p;=Zxf+h}8^goB%m%C;DibzVok>TJqF&&ye3y-`aywiSssfI|@b*)>}vr?+;7Adf1#~m4r z?j^6?H8wBZ_-_1(eWm*p<%`&VHE&KapQ6x^BwY~Hrs!bYk>GQ{<)6j((bHIELb8oJ z!aTWxcGe*aIC$gusIdh#$_hLKVi+T01{a*bqA5Nc{+UGq@u6)>oNvw+ zG*Axe!@n9PL0M~0Hocz!q^i8-ETq4td9lKk3&Vu77CVIJ;BOn#MK&p|7L9X4`5E6SN~a>{HhNn+;%e9htX4h=) z`>s*0k)`J(S*w19yE6=&lhk7guFah7{^E4RNX0Lgh_M`YdN^=-qr+N!xkh&aGjslo zDv;!e^jIfR*}BoTzG9NdcvUDqe1N`%;QDA~CuAYD)Sl$L@mRImQ%9|*Rlz*2_T)C` zb$ooh5*GR;^Jk$zVqjG0mkd_%8DiWb3DD>l8QQQ$w2ch)=glTUU`2mGFhM^)$wHiR zxv^V=N6yQuSkRmc)#yp7#M)ymse0FM4=s^6NYyL*jKzD{XN-HQm^Fr!o)94bUZN1I zHeM&v^%8wh&T#rG2~Ug=4xDM~Hs0Zf6Op>jl{T0aE4cfn%nm`SBWoYGtCVn=r0CPL653F$t z9A|=tyGkT(;m@a1_*~Z0aWxo}a+(u6J1!0Uzw`f>6PZaDLTQ^gtuIQX7H4o!$p}jd zILJ1iW64avA_IH85nQha%HTjIc%GvK-?6Ck;hMb_l#&jzj+H?H_gcM5ds%Aro-Dyk znD4K~_AI!aBbBdh2=&7G6x1D`oKG!@AKm=+L?o4NnpPG>H;tIQ_H0WC0^Y&;^kGY}-HcCIJ9`fqhpk}+}0ajj&MYehROm$chF5YlYBx z=&f0#zSQB)6s!h~qg-bcjpJoB`(eqi!e>v!w0jdca{5LdhjU8cINH~>7?QDLtA-xN z0l-)4B-zs+8&l&j%BePsP+w=7$5mb~pA*i!TtsU)=dm<$-h#){3=#7jBgG>7?s)R0 zdaV79C%HJzPAdpHbdtW(@`IP)ik<`S)9dI*jI`D?3H|;W#)}pCub#!wW%(~n*OYe` z`{kg@0Mm%M#bBkI9awU05d|1|R`ums8i!Z2*>d40g$O#=@7+kl+uN1V+o0DbtXz|@ zR*wD*o+t*7{P;Y4(j*o{i3H>L9*r~{3^*b6xj73X%7tKF;1fw};;Z=t-W$(-7{xq( zB9bDWA!pi>zPxJOt)WAxQ!Q;-25IJoF9?}<%9Hn6Esc!ZF&t<7g#0mDs1(0IFt+tq z8wHcw?jE}qm%c%RdX^y16~zr?p_UsG)L)qAk_460nmHput(UM}qh~WP!xtA(GIpaIg8XKUv!@gh+Io9BZnUSI3K2K@ zHJyi3DykaVV+=FoJ(EXf-?*6XmSRV>e6b34VpJI+0`QFrb6gTOj%aQ}~SYMdqQHI8!l_>spvyEQLw$?`vt-o1~l^Osav(lBY{}NNM)q%V4}8gU={t z*hg-vCEPlzFKX*FR6Vwt=e0qFqP%z1OfB7g8@5|%{4eV%E-mVi?LkvpZUi;;F-rHy zk91AbqQn^|=b|I^Ba-8IJFZx*$`&NVvVOT#^>e3}V@5zp&k$h~W*mw1h6PK)XOWVnB92UE?E^>!=F`b1Le$Khb#9EaDTAI}XKhDG_{BzDsV(Dg#O<5*jEgg$SZUod(3~Jf|AGd8TFtL$qZ&fI*a&HMY!bx%tnerKBmh!z{<#o z23@eiBM4?zdnUp9MWY$3sr4hH;}P`y^T3c&3{uFw!NN8)7J0|^%})y?tk?% z_cZs?Ic%Z{yrU$ziAuun+pExVzn3F;O(hme#H$9|hLI(5(l6LComgBW9JG5nF=D{W zH-OR_*5a*)o9iTV0}%oz;-<&4v(llu4vXydgcos#@+);^q}p({1!o6L=$J%sA%+`x8;pS7$M zT7R?|iO_@(&g|?5{No-e;x|H_V8}U1mqPz{p#M$7-I&J=!6GNXpe2`EI#Q8-hTmu& zSSqc{-5G~9nqF$!@q_~9d_o~F>oK?YGRxvAxFmKxHnwam$KFgM-SSqFe7XeVVY)~O z18!qA%p>ngSfZA5R@D;k7EHGCH#0JTq+WN67+UEY*SiY`v~v0M^YZ&5C}OrlvDXb!M0 z&<3JE-W-N#kJMGDRB3t({KXE(<(WpfBpNARWzPgrK6_lw{X`-+B(V&`ihfJvmbMR8$^C667%X_4f&(`Ly zA~Zo#Cb$%aWzBFOn7|$*%Wa%E36{|?(B_w9`Qk4eP zF`ekcn$@!vH@EJp=ahH-%wx_L^wH2(3Hr_{<{jEuzfawuv|Q#7*+OK7=9uQOeCK^>9@pgK4lGRP-$F~_3@hm2w>wEK^wts@9GgL@O7J84oNDRn4}RQ4 z4&**ve>_lwNlRQ(A}Z5HrmIAX!t_EhnyyKI={_DEnfsQ3 zyyub?)50$>Gwn=@}q+k+ug13;T84i>$CRf3m%%A<>Ge@RM z!P9U966C$~m?MzjM%Jfln6{-j=G?jWV0ur=9Lw9W&j)2$D^gL3+JR#^A*orI8d-k|cFa zDe9@Kza$M&9A-ku4M0Q`;GeHP!@d8~qJLZ5}q@Pp)O%lD34TJ(2vc zKV_{30(zy%i-6wg)tFaqtBHCw#u9H>lCqFP8eMSPZf5#!h3@U53aB*SaxMTrJ~?xm zcCJi@R;ua2Rd#z?UI%JpnLUPcpPO79TtKY&*WtgQD=UGYK7NZ$g6qIV7g><6udA7n zudi>P8L5eZ9351|K!kG$&puejp{@wC5z-{Zo3IPHP6w4Jxiq~F zTzc;3KQ5_Wu-Z)a9Q8++3RMtwb$~|i8o4aE;?Zz;;YTs&*rl-}bfq!FaxOx8UWb9?JLK4k z;lbgsjS)!H6Ysh{SZ{)@l?sVQFcC>cXC*>c80y{w!B%DDW#1B8IOEUGuFn}KjHBQluwHvnqUY}P zxM8UF;7L&XIPt=)%JlF^1YK>WkD~qJKzm-7pg4#@5J8hBILl*y5$tgC|C2Pij~>QZ z=(nIWYFNDiUgmZTFTIJ&V8BzD1Zk$k?DQL`idgT$jHi;mZe)j6ZU|2vat zpr=dvE^^35v888NIm6b8p00}kPL^4?13w;gitn4;YYJk_gWh8cMRq|TGK11c6tCwZ zm0yiHlYDIOr%cI4d~6;w8QB;-PPoD{_SX}#)w*RK>lrz-8QPE_uN$jb6(;CBeDG(l zunOeMInF<~uJaT(xVLk@FpsY2mbpCc)TV^zWxJ^9LwxWUHeL901=p5!lc}7>pPNt( zBl(P*`Wp(XHPqNmaxkE95?dyLX!{AUQKO*>GF1j~-ZPw~E;uc-dW**tlR=FVal^fp zy<#vtY#vlbQ{_ORXl8%Lf|w;zXIHT}Z8@AY*hr_gnbJw#J&887O62bzXd7qh=kbNV zxP~q5g&SZ$kpe-T4L4eqJ*T>41dAgZ5PpD{iXUCk0aa3etfS5A500sHAPy`U08S@q zR7pbv)=i@lj_jZR5Pkxq2G;gjnglC6Y?Mo5(R>c>HP0T3@9|n}&e7&Eht3|=UN>iH zQyx?3XS2s&mQfI{WePGFsv482RsHl3j^ zLVJ(jG|G{M+0Gr&UGPD^ldLCaXjF1pdQa0S&zbOq zcu${BzO4KI4%99rsm^NQqfJrJ)g~{D)V?4WYjb05f*#6^$WnCXZf;a{I4+$8IEzpu z!?bTcvAggdI)MQT{x!s?!Jiox9tWuV%24PvtO@y;QkJ5nGpGOB|Bc%mDaN3SSnkDv&yBjbnK1FgZgd*^Zem*Ilsss{=Q7D z{7(5$MY*86vO4IW=R60Q64uf}}%RSGpk%q=}W+Lak#x8n$_M7GpaKc2vN||00*% zMzNhyl{#?a*iNlpyuqb@8NL+%;6P)|rk;c^un{r;$&X@$=?Uir6N)hUqK5=Gg;r$) zm4Q>o{OO3jHwtY`=)FmEbpZxrJLEmxP&M#AWH9>N0qEIo{AQ@?OhJADV`jEEzQw zU}V;CdUk41LqL}TQJLKki77)6Xn#-~v@Z}-ze;bj#c2{9l^Le*(XV{O`&r>Rf}xCb zcZ)O^V9|^%>5N=hdEKgGo$beb zEr7f0NrW?0MLjlL`!vjnPn}Ochj{JLHu2grWbV%%L)3u9e11hl-8}q8@(0@ps_zZ8 zm3)>2;mghIo5|m}tz_KSi_2_*dX}#hw4}W{vMTZbK7R+^-r7Oxv5vvy*uKudPH8;uS14{%u3sVEE!6^Z9e#YHoFtAAfFK=$pc`H}sqQ^=HbVqU? z+pKr?)`Zr*eX0a0l4Eyuun{pOo^Y|r0}Am?84iaM&WO}323Jkap7Kt9e$I}@A3j1>d7*D z2+tCXBbN!`*RG@6DbA`{Y7v{=v;IM;bZP#=6-g*!*K$!W!{-?|Qa#0z2TFzu-qdgY zD@Hb5n``BF;W3BCHIHpvr)gmWGF5Z!c0Aw_-<3(ApE?l8DyHu6*zO8K--Uf zn97g47UQx1avdgMf!)O+6(5+&k8WxNaF=Om5O5ZmJ(cMcEHao!zs=$eEHZrvEI37s z$GVZkM0vg}(GAI_jgo3LV zt!{Nq!3t8xtAKU9Lf)$|YT@55PFc70>MfaUT?w|Ybz5m4_8=H3Om0UpUprC1qO)^8_NphX70Zr-fKA*SR1g6In<^*2toSV zj$t+^dN`^KSDqzNale%2l)J?68Wl%JvC3~rfb0CPHy7s=!&{wD zi&$0^91tH0GB>wEXMFMVwAuceMI1)^6g>%Ef!QZ>>yXzIq;L@UzbrFNL+#~6J;KG_mYj6 z+1WD^JJYN2+}w?j=oCL&{5k!J?rV`ftq4v#)cR?@GM}@Lgh>$iC0IF!XgMo}z|r?s z8`$WmN{s|7In5k_$_)3)5vU${E>?I}bRY7tQO|Fh2cd4su=noqZCq>;Q zAx^O(iPjpPi^ta-hAeCWOdeJQFby=@>flS@UU&D_RnY&2XM;ttw&1y}THarl za?4oJIyOoN&dqwV2#eenLV8YJ_q|O$x*u|E6j2ZCoHhmdT$xnTd5aQ z48EC^lq<4V8wT!V(Kp|LlSRL}>c*B2dGxc;GD)z3@kCO4oyyu-ZgKVYiA`zpTL0S% z*Vna4U%$Oj#sPJA2~{Sr`OJj3whC8ytYt~?dXNb0;UyI(_@wNj4jC-h3hz$Zq|Le>Q@>EUBmfpV#zJ96vvu~ZE<~i zi8*&waKqDqNT&+x2d4kvgw|!htA!yjJl(}K4vrPhG=XuV6x6S|mbU?Rzs-5#a)t?) zY|e6ZE}v+{>u1Jp(5%pJ?JV^JdYC?EbQFs)UYWd-BmnPn7Bo1$hLc*9E=W1nT*`e zOGFZI1NXhWPnte!B&{{t#W2fI2IENei|5{m}| zJ`xOx8k{g;P$aK8T4vMRBw52Ib^Q649N@lOWc8O+d_M>=`r4N}u zKNU8J_JFLoM*q;O$JWub^{z1*@@@|HMkD^i`zlmE^Wzgg9tYX&wNg8SCpkRaJN^s1 zMXo-wFv2IK*x@jX9DWe-a!m@?O3N)0?R1p=D4AS%gN>`2>nd8bwDa`xVsZg14($3= z&g?J_xhB-&TD)s?JlgwwObd=eCkH7(dSsXUM8d)taU-O7ko-41^*RNMJLDd49oDm! zlMSJJO@U_SBbeTvUR8om+ThM*a1&wYCutDg`MKH=Z?Dfkss2 zJevINWQuVXQPu{Z*#Cl=F!9*;f3nHxEjLtNI9oamQ>sAoV-|^^rUdsMnwL?niq@8;|j*&MTsqNfq%Wlyl zrJ61o{(1CsSfs!*LK|0WWJdSw=KA*ACyYbOgDg}DgSr0-qt8z0+@&cNzBipihh=%1 zilVQEC11&Mj(x!N81IFXpq_z3Hx`r2o9Wr<*Vv!^z|(kz8K2bq69T8v4s2C#ob^DVa}K2O11u_)>`3ZJ1%qBC9IqEG z64Ccb6YK@9C_+zWAS^*CrD$fQ7H_|L3?HR+to@_hQ+BRUvT;HHczmoFr=J5J?8sGp zWi42tHBo4lQCX_Hd?VV>I~HBv*&~&w5%}IZ(f?3q~!{<$#Z}t8G6C-m@|Qz3W=T;vuChp#6gUS zbHe8YMg=Geat9mv3#{FOF$~YHFFChhD5i~U7E4ikZ#wBSFmC%-0`FU{4OpBMSI=$p z41*)i&~|kS^{$y22by=16Pui!qQ^R&`H8L*AiOAE9o9sjx)%j#sK6~HT*74sT?K}c zFE3xP!(X0w=}Tp|J?0{u-WJ+?ToGd_v$*_Bp-Rf*?d$E0r_D~5d6CYC8!AK{vGi>t zhgThrJu+6I%e44PvKYq3l~Gj1VvH!YKe`>VX1Sve`tV{_35O6sc5D5NP)oITCnR51ArC6&3EljhwBU$&rNVf5y zQ5O0^n#Ak;xt=@N3R(AdHs>Q5q?|>BTHpkM;|1)|I!m)GUi$S%ix>o%|x0b3{VNTkbKt7OSqPbwa}`T^23& zm{tq4l?m%W-&NX%IK;ap<(vX~h6|*3iDs)+8)&M16G@ny&S_V;Q7WMEm~+jSJ(N^e z_VkG^8UoK1-G;9OR%u2Q=LE7Lr@19`k5L8x)g;<~k3#oi=T~^jSwi~q^Ld*54)XGi zb*;;a^2YtPm<|UjE8@@3l3BbA;I{AYqZeiWFYnR&e1WL|Mp?v9p-94Hd_h91=%CJ; zv%n6^r1>xke)Ws4Z|^qYDY8=D%xtceog(6dEozAjj*l&K(wL`)RfafNcR=fdIs~!{ zgMM#-g*bcIITdob^IwrJnB-V*ueFNnBbJvy1E*jW=SkgGo*jz)yD$!e+v~G>HdaGi z#A8lE;8T7pjj^7UF{cAdQ{_6mhbvuBu}e644meOkv*nDD`ICv`OmZ$T4%o=q2Vr;o zh3&Hc^Z&sEyZ>0dv3jg;=A)S#q_ol&DeCDW{IR0wyu9*xj?znF<-;g@i}X^GPp9WY zD=32vjpi2Ted)yuY2G0!A-4kaAFqJ<&(qltFvL!kng?8T@x0pH8QAaj1j&`w6(k_& zr&gvF6cN?9L9q-ObsYwwwC-ukG7L@r8^tD!(?Z#M%$W=@_Mt-UejC(n(me3Z zbFAhyx!a0I1m9CLnF9}DfnFTSC>AV}h&hS?G%6q*9-_HgH{7;B=eD~t=`NOeA(w8_ zU_-W7)#9Lr2K=A?Q%yerv>f{601vebh&cTU0p~gx#o+_EE=J|Lk{VTn8W4uqOxB?9 z8$Q%f3EaeD`dxHzVKtdA-pD7}3h%)Fp&jD;8YQc5PKMPxrQWNl(fUO8>ipP4%R)BS zP=Q67i85uB=Ei4-QJ0L1lIoaP;r~E+oY;rsAC~#jM_mAf%YU?hNIb>_?!6lz5)VL` z6o%b_^D4Eg3`?oxYKdjhhY$HjSSzEsfFp0fm^2|0AV`%6JT<7KX+lpWXP>Oqj~0s^ z96VTUU)JD5Q~Yc)LGPeQXKBpDi3F!XkeOL+FSYpc+Om5vMBRuYmp5Ez(tAULa+$KB zh@-ji7plTVJB4FCeNi`HA?XJ~9_{8?eB6Mq$ERnvQ!z(No_P)9pgY3l<~h__nk!{X z{qy&ux#CJ3GW$j)8@OZSe8*Uqi>5KBfLy&H5@lPcJ8qjoNFM7e)-f6><(w2VD6rPT z^eyi@J&BfwjWAzMt%PG~0|{Q(+av}btHfbe2150O1ygRRj7oST0jOI1y)ILxop=J{ zbq1@Gg2PUT_K%t<6q<_~G#=j}aPZZ=`c}?c)|PR3%poRKBq3of+G(LwU-K;X_3C_i z^PS31WpygT0WO3ZIB(XJ!$!OK4>?V5#E4z4Px07G;j-oJ) zNRg^w(;Xj{3Ew?7vwUg@kZ3HwZP-CO>&8|r;4&N8qEc;OY`Bx>;M>b$96Vj7@FKLl zlE<7$TwGQtg|u+K2fB8UhE*AtiA#WvSvZkvsU+g=jIOPMf#6NZB?fs9-s~ben6)^z2lxtuX&-vG}F5 zSe$m_27~$UgqypLHcrtpCSk!<7ciH)RH(5(`4|$6p29zUVt*1$>iBP1@ctBpaR{cv zpD4Au%=!Kywdb1P`5MJaDyZEoVz*KWKqLCGLCK~0S9-VeV~3WtN|y$6ASiKw0tbZJ zh!XZAiqpGSET8)@__PZ~0RK9JM?_xhM_s>0Kf~ZhU^~IEiR}eFM{x|_nuUwv^H!M^ zHjwuYDK_0BOmk%FFMrKaKbQ&L3_}pt+Ys$+8BtaK?iRSjXIadn*QV~ZY}+9F(=aOU zUp?B;w*EAMoA-sm;LO1qUne3GB14^vns5npU2>WuccKuZAQJDf(DE8??S9PUn~n=`AVC!$5tpon{CO} z&yY~4UAE*tym>a8KIzItncGOu?@-+*La$19ONL&r{UBNjB}t^;(V^FqG~>+00U84Q zJjPEH33zZ)k{|0mcJeCwWEj>wsCJRpO4>H*lFj`13X#+&48DGB8A zc2YX#g3AWAh6bkC5MhjPwoGoW<=dltE7qgt_AJ8H4NgNUaoloR@Qc8Dw8Aj5MTw!| zK#5bL{ey}4YoVfQAeE^emoN#uk@iRI11rU*Xh?(_IJMQzh@Rfa&6ic4;6;!xqINaOqESA+urlw`CX!T0F zxLWV(AeRaVOvlsnix9gQ<#V*B8hUxcR+^4ClxB7TGLDXiqV_@65{JQZLJ4INq=F%L zn?waig}^QI8~{bB%+UxY6Q0&i=1RaM9*bh}moH!DQ4qx8v!8{ZBf%*&{0z7A1^&l# z++X@e^cA9!Li&|TP>NlsrxKJf+7Y7GH_%->`jY%tKMU}QO=7>mJGA_%^1-(e+32u9 z92_6voBFKzx4+*^mXTT=rc|xPpoM)%3GtLg0hr^^z~d?C$fMr~UPujQwqcF%n&o{0 zuFwwLSJ1G71#B>RsX|z_y_W#caQCPJ02d`kcQ}^`{RSUAMjxHfN7wDF-FeuW#BgiE zUq_k(T~|NpTH9|)&_e5UBXa`x_&f*92_*u8N?1TQXkDGKUJbjY3`dG-xU#&-m^so!7AHhmqLAeT{p=d`JRj$qzke~IrXwMErMhx z@L%&CAH5g%m15$-du;2X17<$ls(O`i!EY~%NTT+=wNRqgYk|jHgG#g0;QNlve-QMvBkQDbAh zX~97qOit1Y)2{tMqm}-91CG<;F-?&F73Mu2_-Kr>!Z@r2oVe>$I<^v#fi-XA(orcH zw_jPdh{zdTxVUoj{MK6(mMOe%EsWl9qcl-6@ZOCtjWf~JMEB_CUfc-sa zqFu^Q?(Lh&5~7KlQsJZG0LLbVJT2G?24zuQKHmze3fo7Y@;9|Z1Grz z8Mwgaj%~wRhzy^VlW_$3bO{4)i^y z^KgQO_MiE`mEjGqO`6^=yoP2(1&zH1;q6$y!;{C0NdvDfC( zyqj%um=-j`$b-5f$`~_|z+1r1;*EWJ+n|7?ZR&xjm6Q({hT}L- zo3Sbq8>Bl{#imJ8vXb{sqQxUP;AQJsw!d4DqRyv{bUy8N5vP9e)lY)wC@7R?_mxzw zsfm4v685*RU$ERZ<=ld7N#A1mA`DULA#Jk9)hUE_%&ygVH+AdWaal!ZCPOy4qO{_9 zY!?<7jWdsJB!g+o>t-0z({JZdvV0M>!Ka)gNZTNyfr--ygTH10uv7-Np$@So*xstr zEXi+4YhG18Thp*~%rz|0o{9=!)0f8q*FjZ53m#D6Ux!aZEz*?4`zIJh$Ba&38J&S7 z?gTWiBELqJ26bUrT>5+TaJ|Ej7XXmOt&-f9VWkn z6*3%O8)g}zEs{W%3C+nc3Ue%c@mP%DTb??>egDJVD-$GI9}O^WLlZzKZ1f-cRn_sm zAh{-&YGsin-}KEY%L?8HgF~$agPKj&*|w6t(u0(SfJ_?aA=M}prji1@qcK|N zRB8Qff~(NAqQG{ayq-o_sfS>b)p1!h;)qnY*rH14*obV5zJ}nK$WWXP6T90}X(D;- zEu$KP-Qz>Ek78(kUFNU9`B5Q=09qqK)`tOFqWU-Wya|07Za_zB%;H}1XCl?U$|hO* z1gl9{M|Mg8c6S5WV5aUmkj)!MPJ*yC@9AJPsLZxzettspT* z)?i@!4{mj(Y>TUo^4769*kE^m1u^-XpCu?wN{C5<_`pk5jXyDEV2Pd6R*k$h5V|f@ z64&a(Y>JvC`FIAa3l@=DtDkCJvxK82l*4qV$GY=v%EUvE_?o) z816JG6=jJFEF%vg90;GAFmU3Ac)8s1TxFnhZQ zWi@E!*j&CZ!GL%GaRW>D^5L!$wv{K6QC^38w$!YP6B9!@I25VFl zkh(UPb@*uX(PNEw$R-?JUVppJeD2_R!rw!C6$ax9e&Z~-%{8NhXoEp{yBY^BQgQ_ zjue_z)ve0^ZB>#L0)S0QQ0p?AH1AH3))YoQDUK#(Awt!x0BBao+B*~_&;Iw3C zf$P=ncTuI52I*7$1bwT{Ka;)HMKb2F@?Buc#$^S#a&Y|dcx=~zpG}?)m`}Q+9?J#K z-_g;*n*ojcr#6lc_sl3V2FWq<23}d=I_Rd2P>;Dm5w9adR+NotKzPmE%sADpZJdC+ zHMvP0$#E0Vv;(1Hc#Cq3E_Bh>8mv@b8eqPj(9XD}j0Z;jhlgqt!#72b4(vW;22bnD z8eDOxi<*TMYNtL`3q+A>>XR6@3(|m;9a_$u4u1Fsipd&7LPkEsbaP?89)33J?54{g zz0wsi9MF|>lK=aZ7e@9a_{W}+%~XoEwK9@&E-qLqZ8uui6t`o^)E476{I4qHd-Q|! z`NDr$7p0_IYO_nOv%}bM&tqoLvRhJFAw<&Ia&G!GzfV%RvVyNg`gqT>$dD!^pM=?O zVfe%8rZ{R;#NpZ~+m-S;Hi5!v^Z?zI6bfLJ$p#lB3gjC&O9u3lz*Fi$6eT4dmGQE8 zyjm6yDMdhKLBQCOqF7;6Ate{_B?@c{uUs&#lvX@=y@opAHkK2UNU$tok|X;_nd(>Y z2Z9?YER0NT4R{G<={72Il!$TF|4(F?OMG%`G5J4bVKL z$=(*CM1+ybFvMSlSGPhI$%%0^-96Ti!;*`^Zo$;3W#KamX#Xz^?Q6S&_TN-q!$e&zrw4sPU5&0aL+h3DI)}Xs zvNpw8fBg^JQ_p!An#Bs3DrnjckA^+H^@cuU51KZE^GtS7ah_de4_f|C(3?rAIy}&U zsnd8T#B=7cZ8M!A!qT7(M3j`%NKuWAvAx>T!RI4sWXz)MYm@{hSx6g-ALmX@NXsp< zz)T&x!xP&SM-5l<-MqQhTjIPuZ?=RD?EUWYhKEjnxz*e+U^{z^H#6S;E+_yrbiE}7 zfB`ByGBIU0(d=WFe>U>J|MH*w({yH>(!Hq~6KOujN7F<^eeTG(L zm^h~DBW})RW{-A{%($>YGlqx<%zZ?nx$2@HIPdKA zJNbro#gB2o>3&v&8?a?6I%MDL!aFjH^GGVE)h?XiHE<)bCHfO-vJL=<#Ci&N86bCE1F;@G#tvZF} z?%>#{Ii08fj^fxy;ebhsNQ#p*Fmpy$y;c7hrYYuAYcE{zdxAlPX~vv=P17HJi3}A7 zCMPl^RK!kXWsLeW)L8GyF}Q5FH^4yGo&l%H{X72^IiOR7X_-O&8&poFDsvv46KA5_ z3`caeE&%N&DPU%+Qa($@EMwYJ2MU+gQgYz(X&=u3r7R|vcjCII1rV|W^{-`Al zv5ofV1O4O+oU##%sKA#}uI8zJJz$MHRN^ED%1NG2(RQOEAXot4IinVbn8X#FGcNc# zYEmLDC_1w63Hdjypw^Sg$WcQJjkoKux1fa{3=P4B@5C5lrdBzJ2qh*ngyoYmiU8Gi z6P~<6=Dcm0-$NO}H*z%BVGb@HjHhK5a%B%3u8ZfuY&%m?y7p-s)Ew)IC)yeiM}yl3 z<}!!1N%!}r+_BKR_Sk%Z>pWOU1=S|q-)|*i*_@Q|SiQ*=$jP5^wA!_|;v8^?ol%HX z(S+HBiF6Y!(C*qd)EsxernzH|yJqQ8r|?`|sHdc9PG1vF60XH*JeDCmKX`@xDVnh* z9nKlp6qM}xH}O<8mZlka>`kO;jM&k>Rgj2YJ=hGKC{~!e9&<(VT!I_6P2z_`4yvth*W=kM=&}dr@ZWGDyvtg#Z4Ke`L>(2n9lxsBD=uK-83| z6RHKPJl3wnZF+lp)s1vRQ7OrU^c;+}oyagCI3pJB&S0sggk{(1cK;6RlxTA0i*N=m z?(C;z$*4hVOMgs#;lfwW*x1;e=l%i%hdDCl1fMA12tzXQI=5>)&iQ{g>Ls?7orvWL!4EIC|*w19boi<3XcjUeaPuPZhaBZ1CtZ&wS zy3&C*tepEsnyJcBz!dBUFf1QO{!L_wbIbqef)^EUK-#3zz+0$%5 z;eD9FY&sW|K5Dy%1DN_i+MnkvDvB_nIkg}Ng(3jr8cRGEx@k%Bm@Cezsxoq(-#9+% zvL;bLZ1`C_A0i}nn}@#^^Y{Wh4Y=%!Xr)>I2<>xf|HvBL`x@is0v3MP!7fE{%Q*?a zZMfjV<|c3E`;>bjf$Iyw9%W1-tNrcaBvfh>`Kwyt_JOxacyt)!qrKq}%}X`PiI?g* zI8SFkz{)sPlq0_zHAfA`Uz)>+C_qA^tLu~Z&4*f>wYN0wM8tOD>v-iYXCx3u*krx7 zLX&bvCvigkNt#fcJdjj7iHa#pY4zuxWMxjF^r$1&(qN_AsASy;<&=heQx%w`asQBy- zc5OVCQ*m}<fMx##Wc^fjC zEwiSYz38C2lkSBL1`4OXcn)}O!AxXfIG!!Q@)l`2o?al0_(sFB6np10&f8=wxldv4 zX{lONf8iXy##&EOFoDxpsVy>Z1JtUW+Tvygpd_DA+$v0F zHXVj;uI0b*+&SV1aYI*P3*4D|dnJPnmT`%0G3le7dFU$^W-C1Uk?Gn}ZQ&%%qnE4u z`#dc4_A|Mfp8XRUF`>1(X7Ekf*JfE0_lgz#|7OrG)C=KsC6!Rswz%9Rte(6*bDW z0p>B+g11_`*D^PN(zdB(_LwU^v4J7H!AX<3yn=jRzk~?2&7zsoFW@UQc(|Fx_t;o> z1D=H|n72`f)tev;T%aS1_T7?rKSOBf17;O4YV3>>>JSTpHhMiRCT#;M)>6!1w=8He zd-OBdS4}H7&a^2c?UweWXnm{Z-GWubCGVE^ z296Yll8rS1(d;=2kW#^e@lMdg=t8jR*lr?3dWpV>oIj37Ql3$@+uoVV$e{DD_L$m< z-6Ceik;@HQq6!9A>PMuiwdts z1!&?+SdsSU)^ua&s=&2>^^3|?tPvOl>?iqE1h68;3k8KNFQ)R07P1x%d*!jtlzt?y zHsu@`LR7OXzGfeN8{fBYhHlSP^9o_Z2>k37`6I7YZ7po0$c#~NqHa-IAx~v+9;foI zb7_=yAzI-bv@Q2rhm-VJ-;5lQbs6O58d=OIOU7Egi~gCN446Xpk%awBk4S9sGtgj3~qLbika{>tklK&Tt;;>O~rPPvQ0 zAUm+)_FN3mG0E$S!CbYkxwbV&3cZSm`RUadYhCAB{sCIp9DzUB$XCaALc*Y5XiE|X zO{8{I6^1xZpDCfNh}2}mPfVm%6AU}DB*=EN<&#q^NM*E{JTkYLiot;*V4OXMa}hC6 z$ZHg2Srksg1{k+}gK`$m309&66Kjv+NV$RK6``!Wo#`U-4i0>&3~@V*V4Cvfz@u+iB!* ztZJj%$+yJ6i*-=yYnsNe0{e|9Zkw5oZ3UP$OSxS+>ITtPm00exiY56sjMA0Wa%AJX zk|?PmYEzu*2R2XJ_<->S23LSVAz0du4)=c|PW2;&Ly9uKm0!wiq%?ZNjRwxA8C!If1nw9 zs&vVn#(S;lqU&^Wjx%ICB3=>^P_hLB%$|G^voVShaaT(D?p%NSWK4B8>e#oxd#tbU zw&g*3ZH2exr4Npe1{7FQm5$$UCVyY1g@5t&wa|48)WklZ+05qQgMWtyKMIL52Hz>G z#W%~7o6+7iVWY`13wPj0f}ZLt3Ng%45L|vm0$@^OZ=dpN#xR$9V1YU*H|qO%y&pUS zRwCE+ai$f~YzaH4uL}L}Oe+3cGwn8LYd2XeSK}frR9$Lm)g&2@rd7M~vxm@3LZjDG zW>qWbBpy>}NqbpQ{k8=@HBE4dc*HOXrpx>L$QH5UOG~7KH z=`Q$reBm$9>Nvf;3FnJgY=S=tx&#SUdOAYZQO^8(G`;WqK&W%W zkHJ(a@(M}rO4={6ruCwWZQ_m-@t5r3-7<%>^IWG9)=Y@4K#*Eef7R|9N2*6rj6_pq z>8Vvo#=hGJFSgl&6v|*%&LfM4N>|C&ZXZ2Frc7c)my53*M;z!f)Jc{W=`4-c1QKC{ z^e<*yWtwXdNKEoGDenpEKzS9eIQs6P21q5P&Em5l4oe^jv>(H4$75VGd6p&#ymt~~ zfs?5u0vEjx9Cu);Be&r6>Vo%imP1i$G*s4qo5hvkyUrSk)kQ76nS$$ddPjDM-x1Uje&iO%9jzbI*S&5%!)_9z}JV= zQ#nSQe7@X#SmsMuTVKh(`uLe+7FMc+y$$k`EpZ!yN2C?{0MDu53^AMEUcRAB1~yRh z$_6a2=u=H`=Rz!!I3qWrUs5ALk3|l>!qfBDr0`$#QqAL@_!Z>1M3Ayt?TG~RwF_8z z4dtp6RxlZSxPwg)_r>#Q9;uyCu-M=ThC?(`OKe|U>^c`q68ypI$kK15Dohy?RK;Oo z05ah5tVQXy#OQ$`w?TifMZ^%}qtR0se0?>^a8%>(&M0LjJnf=2TwbtL(1&Yfu=@Pj zqBC1!C;MsTv6!yCuF1ed=^f&*xAl;2>_5lpHCn^G=8B<#pimb*lM;HxT;FG5_n zUv9z-tS3Jp_7OM1|h+prBb)Tn+{(9l~0*{K7y>ye=p#cBWyP0<2(2MmSB z=CL;hh7Na+k5@8Y-(F_%GKYQb8V1;lE_f&>y+U~&%kV^&5ijoMH3!q7uJT>g2oF`2 zSp4(GhIqiJEd(my6Ra>e@&>zmqyG4gCcxf~Dt!E}oO=(@pS&_iWG;gq>yI`wLPQ

%mBh-$&m`ZK zzPtk~Tj7`M?J&JEdef!Q3EL+9aJD8fvAPml`?!@n5R5S3V1@(1H#9tP2J z{<&!xme?~r)}{<=qwDLjF2LnuZB0lmV?PEv0Gy4vhR|p^{?U*xQa-MC+@NK8+gfvQqmz& zK3U$ys9UN+H+EYk+i5SddXH?WyQpWDL#|6mQ+AO*T!%P;Z@`4A06DqPb&@0hEg8x* zcbDeTJ3$$f>)U@^rnFMgqVB9BX6UiQmJxt%n41 zBz;c)>SxFVZKK&%j=mACT))g|O+kdhrkCC2Bu#e0mk4b;=#{947&-Bm8&DecP_4JA z^W=IG2mWG8*_p6p1$nI64(ezHZ6rKwt#nH79cuye9KmGys<5na&^4^rymLdYU>jNd zJ-tWskpe@83ogA$p@ajcb96iuKzv1n69&r(W#uO_*K5$*!D^_Q8E@|sw!zinu_zXQ z`SN8R1wkA>`&syzv+#z+@H5=Y7x*7X34G}ZE7zq)l?X>=T{y*zmAP)KgL)Js#|BKc z<#{@bh|mXfZP1~=UY?#Y!_wbWUj;Tu8-k1B;h-mZ%I=Yzd-HIC1o;nUmR2;Nf5JsL z*_}W8u}Eo_G_2oP4PblB;kbleD9#kVu9|5KnZ&>Zd|etNSIco@l0Blj=#sc-hop2u zwpYcq&Eu0go7RkMyK!iFC5N~UUeG^>SgX{bmn&l7rrNFVQ5Xlgts7IJ%-7N8A_QP7 z1pHuEdji*K98PEHB0RlRi3|LQ>mV+VS=uadWK>O6)=atD8ceOqff?k0v44|=w(aP- z)N4?c-fKd>az#g&#{ovSb#d2n4tJQM*t2g`HB#o7KkI0Y5m_Yk&aD$$g=cAH@R&=b z%U_V?eS^td>K!{1CJj5y{QIJD$k)1CQXJb;cA8KYL()Q8M6y=_o)>c9$dKbsqoOJ^ zzApNEu|c0qPSSRKe{vno(zFN?l=?_^3WE^dl|Q>izi3PJBXB>4rV$oxY1$D*9_KMh zA4gQ#Y!h=_lTwJa+;IJw;g0zqbN>s%yXAvO*a=*^d&Za^TV2Oe7L{csXT^_iqQaKm zHI+o2)Uwc&>{-i#zerLUNU8J^nGY+6}--Aiu_4=Q88H?-EsR|lSp%S~k!9kCT0!JbmeMjXN4 zB9ito<;!0_6PsLcDHaZD}R=G;b)BfM}c0p|L@xKHXZ*-|NJlSf3dIMaJHRXP5uk! z-LE(7>-p8m-=O^l%eF|v!=JMVx$nb}<>`Ha*_HpzUehJ)2nhp24fA1qo<{{rS$s(| zHcw$Ry<)=>ON!xoXcH76miYY9z&WPE*dc5-_@zGjo#>&eyh+h^EH!c9-=o}M)+ zYZl-%w5cy00u;uP$D>>a&3{Q&@WxSN zmkYV39NB4hlxKeE2y_?z0iz80_HaDQrw13Sd43=MbeSeQzf8{A30&b%A4%f{e$tpN z`0M26%z6?TTtY;5WGb>fxB!_XX$3jkm zb`|&fnFc?9zjxtl`6h54+CvsA3gL~SdNGVPQOODoVzH3Zg5D60<`h~p{t*fDXzZfX z{x9(``2;e*%7+~_SuadKEE;ieB{e`lv$K2JY{ZU2BNAWyC*BH=DSRnHoLu(6h6e;E z;6szUgXjnUGOp=(0bH$cdZ+Lx9;AXxkiu|OzYL%7jAz)6;2=&Zc+?05Fa4q%8+4~4 zFDdR4UqV17WTh{`)lm3}ux?yl25(y3GCt;5ydKqaxVJdO+IYPZ!GjdPZa+J|dcyym zz^c!ey$>fJ*>HDv0LyQ}E+U)=6r#(;z`M=)i=cIblvF-feSc(+SKJqI?BFTLq)7Y_ z0XBcTJYBUe@GqMZ`8SOn{J~8i8~9F;{DsYu|HE0s>p?>&57BRaR7|2^6*HudISm$9 z_$~Edp*46XOm9{ooo;i@9rwO&xD!C@ecil*ebjY8o$xL@ag~JQlk?LkTfKdC=w048 zhsd5zfB9|o&h@c(eCywm0E0YrcP|dV%MP6Qu!f#T_aWxaDppDJ@Vo2)%uLKzpC$Kc z<+POt-`mZfk`+MUrNl2i`qHuYcI#qj2e=vidUJ7p2KL8G)!?_!cyHa{st;p%#Ogrl z*t@%Rc&=xs-wA_h-?wq#J>K;7>7{~}uiUtK@V(tUv0&HU{mRkzcKh8cI^M4II{PH*7KvxNO8vZ&J)&Q94! zb}{}hXqTD{cxxXW-9CT56^1UgH^2QP=id;wx)M~N9%+|de>7a-a-%Lg_|FxePB&?f zsN5#}4Bc#5@6I0Kb;v`s--4(}vu_x5%gaM~-HB};GJgm>>a9o1NBgN8RzCH;WIj9V z_%CsK=f@K%u~QKyD4)@FI+QwCwxp?-m(lEptM0Asnfp$atZV9yX}PKf)1;!t6+??! zP5b3LWH~ z+<6$^e_nwJ;ZLc+DWZrPlhI4A7n*@KO+V*d0MDl@0jzX*^o7dR-7V@~B=<9EvYsX` zZqlmMcX5-4*3&dg<9glZ$nk9+S+|+HxJTEwsOq4@=j-5ozU+alW9EzARUA0FQ`b{R zF$2NFoFYY3lscK?&Y$R>Vl6;D6Cp#16zE(l%a8M(^=x#tr#<6(J#JRl!wTaf_@2Hq zAXLqrAC~WYiaXBDyMsa1-2PGd_P=p4qo3jC6~#Om57~8^zB4>U&20~?+Xh=VSk8*~ zmxivn`=NFBqOj98cHZ^ziRdlA&h-wHTzdx zyS?cHYwTlk{->F?C3E^MmiW~g_ZBv*(jXKnPg=r!?Y;LOQk>4}!xm@pdd(51y=^2}_?9b{>kb~R?nrOABDwC(@#^b} zlJhWmC?3Td(;t7{mp0hlExonBh2cWYyq~vQgO%5JmRPHc@o~Ga&w1BY?I0#Cxkc>S$5Vm#d59pB z+w1eKV+H!%@3D2iCt+4_cz1ZJi3;9z7ltb6@f1IyDv(R4z;Fu-o4#98O>_Bh58dDH zvA*5!QCv91O>JQ?C~Pi1-Za}j#;)Jp?&-U=HMQUAa2V{Df^wAMIN1!-`FS(r!+|jc zZr$=^Zs83LD-8c-UYJ=a^YhQU)eeVc)YTNO)W%74bM}>NrttKmfkMcBooD~Tov#6F`8kidQ$ii z)&^rabx3u=p-}strSnA=iIU|gXB_dIi|XPSe@;n&xl#9ZQS>xaa3A$pF8r5hzMRwY z{*G6Kp%Q~G-}yB9_j|wfm9Z#p{Ul9h%PfO2^&3(@Y@f=qSvSnf4oBFV18w0I1#E_Y zMk2hM^gMbpi~=IZBNB)ws(sHxm_Pw9d!HeLo}?|xTX%p8^N@uP=Ub1u-bQ+MzmsnX zS2YLrNbTFvzzPNZ=X!V_)Ti+~c|%*>MpX%3lAovPj~mYSA+pcB7hfZ!9oV_^ktZMz{S4kzsvc?# z-%>OoL{!2)%={#X0^`+x?9$b@a%M-Wo-fI9t!~lz98Q;={yDljR9(f;M2oJ{;wic+ z7S4Cx)jieKvmmBO3?cX`It#r?Le5|k!KqBhi~k%Q9V#pz_Vn}|*4HUaz!tCe?3A<0 zC-z=(uHXb;0(;e+YvOQx@5|Lhykf*3aK})4Lz9&lj3H7-*AJ5PqK<7-#kV{n)s7bm7FwV9filmp=*TsZoF4YK$EWbku4Qg~9hM zox6QAzmE-apmJbHHVHoP|CEj$?P@FXt3Ue@Cc$)he;+y4IC{GpPu-m$A6lUKezkj;k!*>+dIQZ+CyRsShKo4}zfYXX!=_ z+F^I7ttOPLaUNaSMq2zp-}AR*mc0`2dmLjaN%82|zuj)-$g%E89{Y=6N5MdH=k9D3 zKD_1K?w9U%;UflN=k4wlDZ~v4Be-2?S`kXBy8q$lJ!v{Tpi^*lZ`2R;mJ3@~k-+|w z-JwQ7nCGJ4=@ps+>jc!zOPBcno)Z!f%)@XT=V`TQRMnVk`VjW)hj4p+?x^!{rT5iS zxm+U#q@Orul^*7QvRL*+_TWF6Mu)(M3Zzs;E2hbM^t}wZfr+Y!(-Atub-iTAQz2i1 z@;Vks?dIm3eK2u2A6I9sd@S@RiXyh|dIQj=;XBhIX7LcV@!mA4vHD<81*Fmsjw}`qp%|z_`HD07G_iS3`%A-BKh6~j?GB=XLe9=$4<~KMGAFm$D44Fd)vFae z-#3$@g9f77Mc0lHj;{^$TooPR9}@ZEwN8Q>P*Ms8IvqY|bOp|@pT+_I2<^FGvA3SX zIxuF#{>yZjAR7hq8#@2`m+%OzviY_NLk=1S993f2RNmx z(WZG%p|OG<6lZFgMbr4YV1F}ON_9oX5sN*=`3^TIGrCUb`8avl7Sp8tK#fm|%Ft*t zcmR!7#hPcd@keGf2$C|RMbHbGKdIQStXFDKM;Yz>1+HGN;#7kU&ipl1eq=OSwLA9H zupib+ok)3T5S+rk0w-Q6U6nXW>^4s4QF<4|d||gqiU_+E`4sGjDwqfC({zEp-ENez z8wX0Y(dG={)!^=JJZUdH#LN0va^*O8d?Uk>;c`KyPH*Y~M&Y$(khhcEB-Mm3u2!cPz_*!@PU-iYhl)jkwo=la}l z<(rXs(_OJ_&3E?rrD z40=Df5$pfy%KGoVH%7VbBqizDE%wI!?Hkp$5}N7y{#PKM&bu)(kT0iG8)`+Fkq0mh zP}j6?91Sl&5*NnU745#dX@X{y-2^T{k}sfLM8wQv2p@-)!frf)1r|k%xyMpI{UR(L z)1Y)fMDolgSm0E>Izrb=hq;e}{#&q&dFU$0M_)P3>z!`EXQCOKc@jr&{%>8VU|E)ZS-Lc1u2ae{gc&b z3w^+XF6d?h2jG6i93JTvQ~DX5+!nDnEktSN7D5C2R${x|O^$E>d3Js_zWy(@^6BJw zX;E-~;{$CWt3^zwxw|{MmC5qvx8H&_O!^{GuGeGNnzL)~^*{dj^T(e*{`~Rhk3WC> j`Qy(YfByLM$Dcp`{PE|HKY#prkAMDuewN4x0C)-jQ#yn~ literal 0 HcmV?d00001 diff --git a/dirsrvtests/tests/data/ticket47988/schema_ipa4.1.tar.gz b/dirsrvtests/tests/data/ticket47988/schema_ipa4.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..84de0e93835cb23d76bbaa22a753ea407dca493e GIT binary patch literal 87335 zcmV)2K+L}%iwFq*8NyTm19M|&Wo=egQE-@~2VR8WMU1@XMM$-1z^{<$cTxGjT zqIpVoQu~1>DVZBe;>#nk_ZtWdNkkyP#UY8=+W-D`&jHK;phSw2pd>^pWpM@=Jl)gN z*BmH)dh_g88LrdQGW^>pmrv@-zwz~^QmvnqEA>jba{8uRsZ`4KH>C0W(B8a>g3#~@ zc@s`N-!lGKd*4I#f6}Y;>7=~$0{iax)^>xHYaTD1XlA=5$FiqS^bYLcdVOvGH!4-u z|BchrM!D8#K>wdq8_@sdCwl+A*WbMV58ob=ubuPmC23vte+;_k-$vwX@2d3+l#k|i zK>EHn^Nj_8Kc_yWB=Dx;t>M$3$;yj}X}H9vmK}t?J&8g}?2s6)^~v+e!UG9fVL{|t z)Q9%MIVB?$6|g`T_hws*88g@!#Na;hInlfJdlvp%0 zY$p&D|A5{J0GDHtxp70GmrQEk04jr+-g31`7dW0fW7M&}OBnbwv8TlK!Xt9)+tBBs zm+c;jw`kDDH#u& zf}XBR49l{4gCHFS36|8f0XDre>5`WZfWB`=$lpk2KySbpf$-$hh6Ann_G}&^aL0D9 zS+(g|lru$<6eOP40J-o7NEy6=$+P4hG`5C+9}X@(_xQZuBQ0p*;3EzUe5Ep4@a@o` z=`AL<%a|2Fd$wyjk!1t(*@(IIjz|zqey3(AS?$;hJLLCs@deCF!#4o*a$X|pd!fB0 zj5#|D736Sx%r&wA6-YeSSqWx%Yx%+C!1tor9RBry#9Io(#G+H%W#b42_Z0dSFj>?M z?WvuNuBq(+6O9FwbiTJb{ZaSo5}KQ$l*oGmFY-MV8q_!#4 z-%56ZMI9QZAA;6EPC-Cn$S~Pspkv6$W=C{SOgUh4C2tkY zs+1~~+G(v^s==RCh!@CZ^P)rETLBKB3)bM+w%(I=XV@a|I}T$jAJbqm_!}b|te|`c zF?}jK-KSFrwX6WG!<^g8_hk43O!#*~DgfXFAk-02{RIB3G)k3f1yP-l@5fibD)6b^ z3kH+64fZ$m{1sSq;Hv+ge0=LMmELlUAXrajwN!%!1(6)qIiivjvL86)!1lWva9$7t zl#Kg?IsUwb=J-1}Ce6VQFu*?mONyc7>K0@ptN+sA+V_-`No?c=|F{I`$){<863Uieo5_3M%g z8wbKF004myym7!gg6WL_QIwuPe7vM#U>ab8TZt=5E)3V0an1}G#0_FaH^3HJo;$T? z#~y?(Ja|%zW$+ZgQ>w5eDh#2yINZA@+N(5_z-TiXwut>IpCx+HveK}Oxz>=v-(cb! zc(50GOL8$Dj^JfVofg>bfScBrBu8jGSEodS$Cu!@Q->rjDpxaLt9@f)J9dbJ zt7im~=YVJkq_cS|1X*TpLRH}g+?}`jz*&?9u2Fd~0ep2l(@@-jI3Q>PFeVmAptZ1F zRNqDjAO&#j5N4#-M5dvPOe+x4u@J9P12-3^3QLu8RfI@w zw8=R1H;PTGc>zvLk4_DSHd)B|6R#&_Iqzy<69W)N30rB?Mz4caJvNNq1nMZ^Zo2g{ zvY=dwCyBvA0voUVnc>=hu(A1`bpCJLWDXfxWl-P|^Efehyf8v@z8RN?-OKY{=lIuV zZ`{eDV_UpZB$hs%QXjNp4@5Izaa_zq*5MwYful9hC^C(Jc4scQhJuvw*WqZO6c1rg z0V)uvjcIK>HLbNYts{Fu|LwUs)P_(){_xyC1Ho&?&6lzu7d(!z?JW%3{R-&Xmy%li zMcS8WsKB85sP{s2t2xE(%ORK|d}_nt{{Z&;)arJ0RWfu9!KOulr0c*iQ6C%}kppma z<=;Tm0k?_P0W*RT3k{8JhLL}HoeLdtV!YwG@Hh!f-hr^kUu4KnLVE zIzcxSOng9tO=!@T#5_Ihx&nI`H`+8!2rj~|rNDRX|3p;D@?yXveRu^9_ygQo29KGc}LQQBtKdIM8ws~DaE&r zwA;B2ZUc+uAix*v9a+@u3J)EL2YnC9-)A{C1tA7R5Xjxb2V9uQNl(m+Qt)jw>VrCl z64b+e0Cem5_=Jodo`y+lowa1SrEI&$@>jY?trL~?x!3qm+rX%%VDy=fNL|L1lcVLr z@UNk9=Br}1R*MArT3Vic%V$E~+@xTQVcM~n!=QS{8^_=>pVWH-$D$`(UfEUpRQSM3eA-Cu|EpC`_xt}|ljr8J*)I{WEDI32C74!IXucqXJE5H@;6{@9u~%GCDq#fg zY3RQ>4p8a@(D#8ugRF(;I|F$f{II3Sphz?7cNS&Tz3Mg>i=zFycf z+;K;YTaZuIt@uKOD&M3)EQvWvHTW?c015Z=#FD-;6>LZd%xC-Wjzm@hS_B$7J1oM| z5MoiQySjy8N*U?#o7l*WTMgJKNHn>qM+Isbz9pwR9s8QGnhkUc5!H-O!if4KLcjR>aMv4HhVuOJ7RWS{*{^FEEN~WeBkG|58IH43y55q4iL9M6ccKKW3S-Iu$Ib z%}<}MgIAUCfYR_nOtybrNrWCanm2}TgT+M&7qjtxfK#b2g|L=`5c4_rVO-%2Am@wa z)+v4!WhN_>53*j0Cp;5nmEXzv>!5i$1iV9!ydze3Bn5@#f~Hvb`;yN3b1%fd^{z@4 zAmNx*VXGp1%z=rg_%umZ`f$F!`Bx#j=-_pK?R=F!)!6=DwiM@?azOXzf2s`_TB-a` zyk|9RQ{zhVV=GDXc|=1qd=Wbdc8%~TdX z_YU9uz|;-+`V|e5zQFS-0Oc*~UJJ-}tu!E3R3sp|bR`2zRut8J$zI_cslwu7fi?M} z%N%T?rYLyvNnl-f>J8{rLzu2CO7dbH<3TSUpt9EW3Bcv9dVLVw8TjyM3wvPJ^HHjI z6a|+ptKsYOFu|t*P1O}8lXwUKF7HA!sNqv93Ik{O7KTX>2Zi8dEp&jX%A!DC1;279 zL_-&s76psR7uz0{FM4rRQ2_bz5(CfE2XIncDCdUVPRb!jii=Xszk>Jf=?8}JqM|qj z;ffWRVMf4|@}i(!+U9izmnRML`?T8yi`ZgHEq1 z(D}3tCkLKdQ53i?W_cWkFXhhI`b=$6Fgtfk+h+*c5bJ9g^{PS#$dHeHoy{agHBO|!(858Pg*y7T{LU8IV)2S*^R-BVS%`_xYR+v5TX2WQ?%%mNa@}i*q z%kXh7Bx6yP^1?Czxu*U_jeE`sol0VEUBYhjQ#n0lOQ+$CT{{$u(=rLb&397r+*~GE z_o$;nO?UmFpcciAkbKJS9dX#XplVi-7o@UqtT0Y~Z9`O&m0FXm+Lgd`;wwXnbxM-*-AUnzpBxgD+zb0Ha~^7??45Ud$j^T3!L&RZHV$A}K_*^g>nd3p z`-y8Nhqzdj-K|G%$xEfhWhEJ(Svi$98>%RknV4Xkt{PCjnj&pZl=9t&6>Z`g^(|1L z(a(4RyNgWhOYngUM%<@U(L>afe=8 zS0ebxwkkdEB<}l9;ocBmT0f)?de$aJd5Ibta`6x$8CM}J7~<+t#vtrhuDh?iBOdNs za7CLGT|ZsAdmr-Iey*F88Fo&XGV!SwsB?^ZjhMt;OKZ^!TKCshSLsvvMBB>q3~Rt2 zIR6_Q*^|`z??$512;l^i0$zyIz!xt+f-@he76W`FeZ8|hwlgGY%I1}fb0N2KK^Fkgnuwu9czsY}H3Y!|ExucyI_aaKL0>~%7_ z7PA?bihC4Sg9r)z~AJsQYHPf@1)-zGm)Zqd`}LlDlS}xBWyyrVjHpjMXdT? z9cvDg^A6ZC6u6lr57gr(*hZHa#@xH5H`G6Z=J;V2a!-zOB839&H<<@XAIK08Jm{iSw4!dv zqk0(+G`-`QAq|I2t!%DU>gE4d8yGA9FC!>&D}KQgpGti#ZPEtTr^bmYoF)|`Aj19= za^3ao`q{0 z9(tO@ewyZB0+E?B}Y&&*s6+MNM} zd`iWYZ_(Jr+jbQX_Qy>vcWKdD`l<2-~Ch%P6FdENKz1$aZ+>I+#XhA*ZlXebVzV0Vl2=MzCl93*j)pwEx?AmjeI zm{QMt5^P6m8Y(s4j9{(^EdGqY`m~I6!!iArA2n|bb#tYUhSWC~cd6Q6hQSx(q#SoD7`S^fRRvX6!eEz#o ze%CW_`-UI7i4%Sn;SBPBBE#V)q{(@E^j5_8vX~W`@&5(2kk^$-n|5R6!@?s%WX`0eQUIgGTOv~r&2=W5^?rJ&(r(V+0 zzZ!PG1HZBC6^we#=nwhyD78AS>95!dW!6M|(6g*3G`>NcC0;lsRcW*N*R~*ha!nvA z-li89FufIsk8*L`EXKN;#&bt6A}5u;SZMtQheoPGF9_?n2D!Cj0RfqSzs^ zc=GLpo%Jg3v^I(ww})3v!K2p5@Mppx;@;jC|5*h7|i?8xBb;I%xgTdH|=e9?n2)Hplx=-Yse16#iL}|LYdglyciz$o2?g$ly_5&U)E8c z4jt~LJPsQEJe1cJbBJ~jVMtD0ySL_*6u_|s>AU38K(+fFU z>DEmm=FRwt83VanE?IVxvvDpnQK)`qIlVX8yM^%n<8FAhGz}9Q=(YTBMRTxgrutM0 z_$&jiR!ODgWs#DimPJ~^GPjVYD|aMUOX{$Wc|5&40jXzGl#fLsm?fv^=el%C^mF! zSSwE@LUbfaVnLR#3*O`U93!4rC&7Q*rvIcXm5HS95l5wiQZf6k(xfDn!2fB8uWAEB znynrOl#TdRtty2k8&z|LY2oayU@Q4i=!GFvKE5vqJk#dpHm&{jr{eF9<34clp{%^~ z4q_X-IZQodJQoaPkt2S+9&Kl{HDUnNsB%ZbLlp>xfiMdT7l6Ik{9UR7xAFy`2V5* z=QlS3st@B;d4Nv$|7`9b9JI3jp9lNzmJ+GhA(?=eWMhpkr8@bpi_^xUldi<->D^S1W4d9mD? z!O;TFFwYvEx$L`p6FQIDyfcQW=|H*ZVU4Bye2=_@;e@tY%?!+VHX1(`&7|*G z3xh~gQdkIU1MP~+25mTrWE*Et5@fu z=|&+<_f6yNVkcq-J_f!uMDmjn;=n8@>j)JHbd)`jJHW~uWVcqVB`FczL7Uttl_T_? z{8ab)bO)=Cn*DfsH`oCpwzQMa?XzA{FI1kh=tZJo5RC`0K!ap&u6bzb^KgB28dx{J ztLmG53Pazuf>{#1mf;>K2+b2#BK*ZnX6a&vN;jTs$oqw)ljgeA2x!O)NrF~N)x>8e zq-H5F@X0=TD|`lm(%H{#=sU6Duw>ofDUmT_1A0j$eUKy9dKWxttNKtC$;a3(!;3?@ z+NPP7!X@<+i<;~)k%#C?>!!y0p>7UEr`yswgvb$l8Al-uhX-*|txA-8;yrC-eB}5I z$v0!nET9%Y-8%2|skkuJiWEqQ+#S))NvGF7JG=b-A6J*X{t1Q#|1E_x`^@Ld?(gmH zN&C~;Y5G(>`&9o+{~w>)z0(u9$E!!1*+;vl7pK2tcezIobK~n?{?RFVv{ubNdUAdB zkKV7Rf3obO_1vTI|NqhN{K0aMHszyTpxaLOv8yFisavTB= z^6(gkKf5g-25Ad<)XzYxcJTN1@%icA@#XmrUP#@CE~I&NJ|s1DB+)>+5(1r;b1rT( zAEDPJhR#G`<+GFamB=A3eE-ybBU_Q*+lY@8Ww;EoyO(1nmXyI!iDUr3khyoV$iw^b z&mTWp_Q>6{!_m+Cjs1$L9jW~+%n9p(%f&Fnq-e)k7Q&2uOpIdb2~+bfH78N$D|-TQaVf`D~KsQ7KnXG zXoo%tZ`hJzQ0E|s#9QcC7YB(cpkjkJ{=rL0M7!SjAL462$-aNWex=YLzbE9+Dvq+Y z2mg9pD!x9s+G90&)jz(PZ#mZu=8L%C*q^S4&tV2B#d~arW4`0Yt`*t0c;;?sI?@8d zE26{bK;7?0uFiu2^|`$(%S#D!u18ucAh5=^E-y~E5sh`W)w}-mkAC;`bbC&$8BDN8 z3$AL%%}jr4V-cZH`c&fVQ?RsPKTIyaj2R$f z0fU`%90oG4q{NT0X$$u}&3ESSkR6rM?4lS;W zy8jiC#SHA9$_AuKjAz^g;H?=q0So(I+9psp6aX=brEdaK^j88u&#kM;`_e!(pJgs9 z=EEko8r216bQR+_%;oTrRgXWI$Ot3*){0KmiFidWh#rRnRZ{!DlM%^xb)E8<3#*usHg_Bqw-4Qd8!xzdCGR!yut~Dn- z%?vzWJ?!Oi-r>?Ax^g2ggl%tt>w|BYHLLmIPEc}%HWSE29O zk7E0rZ^7(mXp48HWV7XLhR->5&~}z*9Y8b;rC6fsMGhcJ)DIoBZ|)=8(xu^F-N$Xt z`iLaSX&AFogBGEgTSiul3sb&*j&JQTUG7xhg>Krt3%~(%7CNpxxXP=CV*lWp3y(=R z0KoA)jD3qz=-#-nS4uO}uMs+3_CPHB`RBj09^muz;`o&PTb{wmE_O%OKSA%j3qoOi z{;%qPvujxEwf&v^vtD36TgyKCExnof`>#5Gwo#YQj!GZ?uZDbPr3H-xc+Sng3Tx< zELB!_EVTg=9KW<}In53!`^LXA7iKQwcZ_9-IP=5i~U_2c-9%kFvmEZu-a^KVUaUrL`oZJ(WIn=dcU{?u=X=HAum zaYyT18hSqW8U=k%qY<5{XT%>_7$BDB9z8OOheY9u*Ka6l$;t-toGh_nF5mRK%cjSf zL_TQblEs#xn$95gal_ZgTmAxeQhYx6Ci49>ugJ%CcbR1;6RO9Q$Mc&+_ybFX%@SkM zvgE-z6ks3pzVu3zjk&ePW6)gZJWX$!r|Hl!Kz4ka$(`{+DzOsrQpI*pe@AzL1Bp^_ zNbNWV7pA5Fo1amRp=g?m_#UjhNVCi_%K(cw>C$-Uc{zCt<|X;1LEUOaofEpClfqS` z?mo4GN>*>Wj*8dt^H!5#X*yq`Ud3Ihx#X76*&C%?NV3OvvC6n-_>O75?6t*00GbDd zDrDRD@SI_Z=i5*54PqDZgyN0|6F(ar_)Nxem}MM2^#u$lT&YLz4Dh0jJ)aQenXn#Z zVf{?KuNY4A;5wz~^zf<}NO;K|jT0#_OPCAjJ@!aBN7u2bG%}}ux?y}c3x{67@kK`c z)x-)EZ6{jrTpIa>{&I7IW9a>qSqL*WEtOyC)y8Q2`QvnP-k!!iWDe4^d`~-8&%J|v zrfWxZkdg&|inb}xZ{guN5oYN9JW%h2+&hYpXR)kXsW3BXI+f)(9G6?X1%;ljhmQ9C!GoO#O zOwLJOA=lL5s#xa|{+8I03Vvip%<9VrKdRVAD;2bDwKB-_-1k$HYRo+#&^o*KWUV$u zxj0dJXr1go&03&mn8`%xWPHF;;uleV7`7q|y|4`BD#z;#W1nN72A48FT|8Qzp+bnO z>^;+?ulS`j3X7}MEsr;7&dT!n0xJ~1RbVdVHwumU{8sAg%db;cR(_p&HHrJCpBQ^z zc<8G=tFs_&`r4Su8abpb9D-zcHD>j4c+x$>2lwkT=T&JLf+RD-43eekNG80!cunjK zQHaj+yJw_DAb^V4ry8HyV|tk3B%%Wcc*Rludhpc0CT@(~x7Bvy zKXOe_9LDqR#Hxes8cQ_@c+B2??;AStB)42uNu7PkJP6~HrWO7&jGdrLgPT?5*qm!H zJnn}>THa_`gwdjkCxrmZim2P`bVW_ej zgk57yB-|IjLAd6{Pj~X3wsU}+_ai2o#pK~bF3(jiI-iz_5lmmWN$Q8`Pi|=ivBKg; z&V@(qdDA-*X$B1&uGpS+>u2UIVYNvgG_4(JdukaFZ5j2Kw<;|%eNhvPO;VEFPbUS= zkqgz9Df-HMq)_Yu@u7%w=14)~qgnm0e4S|9ami{y0aXK3)}WQ$(RN|UZFw%CwUz@G zMoeU1oaU`KbYWhG*e;Z8p3fFL&Kx_%^Lb*;*jv+$eCi(2S3zEeUkg`A&|u}0jaF_E zWBw3{J5p@o`ZSq!_%hIF0V5F+zDMo~B6M!e84lz<(Who?kshlcytsn_3};7mr0}OC zBk7WCq;B9uN45SwXwPh2Uv1Ba)9mpQ$I?@ph;sGkj3jlPS1e9ht$0QeBFo4G6ILBT;83d$7v z|DgPTHK`)(!WUOj2YPz`Klr(Skjeko#FT(<`Tt(v@3{q)8(KoyU$e58OmBmkDbrPM z@muR&{blC#q=&^A;EOFIk>|5E7f9qqs4PiOy0rPn{GVgkA_mFWd7b>9)qPm@>H2T& zQ~u9``rG<{iNBv%X8zeOyMpW8&;2XVOhj7HCI3+Z$DZr5?rHnv{B)0`W^taMe%uM| zNt);g4LsL(*#8TVu)nwa ze`k(+Ov z8fp9inmJpgHns%_(@vN1k!_h75MJc9w&0z@6I^JY#-kNP8ZiyiZ8lkTNp5JMN&$IhpGJ}ybn0`CiE_z z97rPlF%a0)5s2uR7lqejjzCAe`{SXom8Zc^R^Z%wPI8+fQ8m%p{q@sFShk=)`W~k4 z<C}KQmVt#c{oQG0)+t zW9o({@|+!08-%Ds9Z?g{NwL&>j1zZ+X;Ii#c;`lu=eV&}Q^TW-0ccv?{&DE)NJrQ3 zX><+0M|5SC=n`zzH8})_g`>I_a+oN)D_VK3AKE~}u{cKg7fN)PWjP9y#K+J~w6sTZ z59XFWwYWjSHsopTnv06OL6e1egR!^k&!n8ycrMe7vrRu>o&no0JrPgoe|sMfs@~WN zlkuvw|EKi-TD`ho&DQ^D)*Em7|4aP+#L%d83HpyJ0fGf{E;}bbmz6}_m&!Y)CT`UZ zNQ&i!Bd`{SQK{j1=0)z9mYUa+@S7W42j0IXTHWG4HZtDI(h^O}OrVu9y#bcysHTaZ zsAqvVk-~!j;&QB9k49GX4J9yy%8FU~WTB8TcgFCAVQFMxxd@X_loQ9Ckvq%x9CT)K zsCxR6-9{G%qgen(8*}EEP`Ih9!g|8d%EIxR8#rN_W8lw&w_a# zI(T6^4^s?e5S`~{%V5l9S z;5XI=gn9u87_ZSw+_5o!Y}}2hb!`UU$WqaLkZz1rEk#QU1Nu(P9e(Lqe(srza9Q#Q zo0$=IEytV0I5b`mNK{u0BT%HrVc?)v$e$q%GRRjAdgX=NDg@}5(&L?q|k5(Lq>PP@oF(ofAcQueeap&+FVT$f0%xzL^U!w!QN0Z@GWy{})f3aCO%IC;k5ps*Q%Q|F^1*RtxR_wd$My z?~DAQ|DT$Fwkzv>lS%*j1-||5T3neYR|&0jFoY=bKHI7ybvek!)qOIrzoo%D8ta(6lHj&qwEc16rW*W z>^K~atU&V%5Di=0Gv~%-?gJJiz~p0(Gh%N;5z{mf)13tEIKTY7(U^i|tsem+EdwL` zd?Q5(zmB)ab5-cX-w8%a@Ufq#kYXnNJyJ;tP7d-o`4WYbaf%eW{K2q-ZfY7@($i^d z7v?ZbWKM~;FoBXM10qq_Ni%G5Q;Zk$gKTe(+ophA~24;b-F_~0z(#Q5Br;r6JK zK`lQqSM+v@ncwF{>r+^r6{$1gbj?s&tD2l1fl3i-1=6yKB0-2Zd9oH<@S)Gq=}mVQ zSNId{&%oQk%i-+_k3osJdPZVLWPBj`k*qHGOW9pg$4ht+5O|v6OpAk6o`O;VVDFg} zY{gF@pouGDxcYDYQbnc$Gnuk@@KTy*4BnJp3#+8j2~8M0qT6@2Uv5TTTQz&wYT`s7x}{g%1@`rOpY(F{sgx2wa-4CT^|2h z5eXcwqHq{lBdQsU^>pKKklb65`wM#vCzRMBa`CuX=FU#g3Hu`jYXT`fVguFWt?=ZX zz~x3N*XfswYxae2?(AxE<9jwc^K3VWUG#t)V+$T&qu`24+T}czTPe|9EzWv^w4-b_WxGhryHV_fG%o<#iu=YhV1yes6cX z?Th}OzmQWpn%Lbtk&Fa{Zc2Ir!;GvTdBh=|pLUPG!t?D<9e#uyvCp0U#c8jHfLwN2 zn_acL{m$|AS-Z=wuDe&4z0*DNvwZ?nDlpb@6U)QAK?L!iFgr1f%NMz4BG+~)!yhK0 z89&Z41(;D*6tv)e9s+^CV5CA2V*ZuL<0qQA>Cq-Wv8zX4+WjjS}hbIH=$o-Nt0`94Q*5P`m-%0dV05P#JuI*O(UAgU(9uxApEK z40gXvM}%;1v0`?d=MRgP%}i4J_Hc&U05dM z?@j9n7WcrS42{weQ>`uxZKPE04m?M1Kz9SA68TIVP9j@;nL;7i7B;_YkH=An zq}x$nc(=XBGy2nG;Q+eQfhOA{Pji`Ijun-&D8_{ciy9uVsXi6vrUbB|r%7OQgyPA( z;8q1+R?FSCCb68O$c-mH6$iTyqi@2BC&}gJQS?^6*7n#X;@>1+gkfZTb4Aez94vGs z$v94FAts%+V61yY{Cs|I+{f%7a2=W?i+MVIOzwqiD~VO2S-~vivY;7Ct9{WWW;-L= z#T-}v6v#|7S;<#9*-?`*VJWhR;-Du*pnI${pv^|?C`6Gs@jJW~(BwWOF6Fy42pbRt z4-Q-Z0A09jOFWIA}FwM6)lZM?uc8G7}Jt#)$xt;_D{vIQNAAI|i=L z+1}RiHYQ7`0s9TuxrYmZBGY0)c-JwX2;v)Y%o8o--*1`piu)qc4y7ogva-<~mET~e z7bkh?g6Dt`r%ebohLh9}YK_WIe|x8$LaFR*xVru~NUB@OXj^1wjzwZw${%qev#!0% zoiR<<$(wa_&N$$KX+pI`k(hK*-K+5P1miURHL-lo+NhvBxzTFgb~Hxe<3ij;EXJZ5 z5{tX;NTi_>I6IUFI+U>bZeT#l%d>lihC`m=_E9o8Ka?qc2P$E(jPhByI>y5A9BS}z zZymH1@x=ei5l*zK(r^}^DX#Z?SjdI%d81Z7+c@mcmdy(k6_c7qRFdjo{1+!3m99{} zzdlr^ytxrRm3Oi2IIy0TkDs`7ixQ#{d_^@dp99*$(9|_(PC{Gxa>MGN*~zD?Au$T) z?DbcO^6WMkTRa1~={$@TxKA%<9&%~!iUCQ}z;o86QozfDR3k%vW`XDZvh-|t3y!O) zjq6f;kq=561ni1ws?o5>VN#69m?f1%(wsZ?p6UEsTmofgEryGN)+*$#1wh6rlhu)) zq9mUMEzhwRAFsZ<@r3yr4-vyf&Jv}q<-=5n&oVH9Z^5@0AGN-Rom)|S3vzcMmPhL5 zDzN<8_NceNm;KxOSgqP&QID_-A?%`{PLh>c-U(zaq7*H@V?Q!(_Gy+=QJ()*zwx zQMNkirPVgxS+@7iEYxWEai}a%R4EFs?_D%Zqhbx+S*koYyv=@Mp)fXa5a`=HkKn~+ z|MX}4W<)(>Hg-_LAJLo}MrcWbj_y1m-bu&_28oxSxuJ)@Z?T)nP?@$Q=2Eo@W%wbU z5MB;0WZe*WUo`O`2!3Oix)`|_4fAnAH_qw8M1}Yi@_gtA%|bh5wV+1W$9M}rksrAh z%%`y6<3l_@dBCt3-6J0as_xgIcl#-zb~qZr0N@E;ydAJKfp^1uVKSljkPOCAICdld z5x$2ONa}q&NoD~g5O%F}$e1k}=?e`T>F{Kp>E#}JnuY_u!IB{SGaWA*4L+6#669;% zi6=Lr2OIiJJza?esTyjGX}V>7nB2nBvYw-L>duS38{g%oC$z`$$?!e+bj-G}io@e5 zoWvqc{5H}vddzlPepH~n+ZOlmQ|$lwJ1wp4EopUX>{WlUY#&yf z>>FtbhabQDh0g}t!lFAnu*R@*(hd_@?zSnQ$qCrsnfj^~Ji=;v_sfg9ToeUy)b?6Z zk_9kQSBncbiEV4_DlQ^&?PKAeC^Rc~q-2VP)IQAQL{USRzUyB5%V}B|;1U)GuO6bG z=Btq?Qx=mUl`rIU0f=h>9MUiW6pt`U?L_)bXm1(gm%RR^hbwhLo?tq41~FYhXz28a z6swWDzAOMml-km&_~eFX`1cf751fq%>(erVy&Bw-(6os)Am;69a-Z1&ZXB)ygtfyx zX?US37hx2ybXGxz*}d+ac6ZM&PdcAF$89=ho00vz9*$}{j$HKdgAH*seg!AN?*N(7 z62;G;+&79VLQ-8v(&HP&Js+8M%%CIuF_UOwClkQQ?8SmTyjv zLt;u)S^24Sh3@BNQuG=BX$l+r>_su)a5M%jH{ge1`1}l9?Es%ErLmvNus84E=N$WT z)!LVw_B723m5!Wi;+1v4cwkjCzvPK88~hJ5^XG!~FyuY+O}vtrb&j^Gd9N;c;!6hq zgU&l{I&;naVFCJ}lU2=rZOOA=I{Y7I{`nyi&ptid%;!O@qCi+p)7p_?pWa^?A80j~ zMG5nQ^TSZaNvF?*VEc?sL0Skvde)`m6_EoaRbM7!C>{O}HT_EOc?JR0QVg2vlSu+X zNq_##FIxqeGVa-iy}46P-g2nc&NtK2VN5B-tJ?irOP=b2fq&P_d%8EBx%nyYV~P!- z^K;=$ryUUL#*$Yxe3innuTBONaTYv#f(|ifz4qGJ_e#NRrIZX(EbUkiNj&2LdwsKD zRleBqWQ?9gu5-*?4Q2zEEa4jj?m-sXQ@$X1UZd{<-e$du{v{1X#tPQYu7&&WQcpqF z8y6<2=MaMG+Hc&+Xhu$UuwfuKvmp1{y|Z%{gE+l-G%HVQttHglYol4yZVS;W z;Eq)@z*L*TE$Qe3wVs?_bx)7m{nL}&S6>wVMhbsG2pEmRpb-AqAkklcAwa5_NU71R z@70d#)oP;(Tnqo(tG5(v4oh}0KJZj~vIr^MX(3oY z5_hN{r0^#qr$r}lFcvkNEj|Qp0I>CR6 z@Y1KqKsi{Yw{pH!-xa0ECF2GlBibM^l1KfQiRaAdVqUMU2PE}$ZyZ>5?2SC%?Yq7^ zz6EA{A&S<)tp~AHJ`LEclr8#v*?E(aK6eB}PG^w#bV=aFM=MVRFe_3ZeL~l3j4i2H z+=dfa*=aS$A7}$@sv2whw-7#2VM9E0~Ocb=z9CtaQeV zd(WA)#{PO>`wBZa_i`*FDD2v-N1luoHY-}&Cn zno0_d@$@5}M9&sGwRc|>gu@hs1VO;$tC!IgW^@gNljwJ z8Q@uy-Mn7Y;CV=Ab_NJajLt8+;@bR)stXrP%9;LO##f2UqhYZI(9BT0Dc+i6cAd+UW++W zia+M0w5OH8%adlRx#|Vy@)V0^_%aF(H-?&}pzywmj-3l|8qHbTtD0? zV|G3(>6|DuvVHz|h?J&9bu>H$dwi9WYCIJk#oRVdHfCi?7N(y+K1EhxN>Q4eiFGt} zY!qNCPiagO<=`r3(Kd0Hb7q8BN-X@^i<j^q5LKq>T4?U3$2gp*WxYIjQFa+&O(m!lH&Y19AgFZ~09u7)h7L$iiUAWvW(6C&4(XFrHf8OX zlZHR*ROA?fHn|21F(}|k;wf59B@z%Pgq%E?XOpus*OVP+L@<59uLpstM3OKjUXygj zZ4PP7pGIOo!q)eyJZw$&LuoL=f2Cy*R@h9YB6#kVN1rW(P&>jBYRx(aiRt;FCO4eRf=>w3fGWU`tc>bh8x$175psvg3OV#6F~=aw?1$BlZARVE$gx zks3lA0&|$rUkrOzC;VT(@XQHlWj3oovP9omn8nOd-v^IKpsiUHdlzlG-5QG9`ZjmA z$3D+jajxP%C+1+)RKRV#KI^nv@~Xa2>*8!GwzapT0qC=h9U-}#pvAfeqE zZ#`>nc6dJP(pNOJt9)-M-+Q*MS{dH_zlx&#y4>jj6S%Ry)kQEvF@m^0|F_iu7Qz3| zYGB!UtDKRINJm1WkE(%J00YVR=oxGDh^PAv;}Wtq{AiEPEc{?hv#cMnp@2_N!a1Gf z2J;xczHt?yE1tJH6z#ZNA{$SSz~?{9fgSM0|11a6uC4<(0{|R2OZZRFA)-D{-G3_| zwQ5?mtyK{nI8bj~K+L$}#(0|RyKz!OgAJ>UPI%0OoWc_0n215bDR;^`pSu&d;5MIw z?7I~iCM!eGVwL|OF>MXtST>6HsJVXb<8adq>@4&241RXm{yK_t{r7Jv=w~T#<={f9 z8iMt953-TZ+4$h*M0j2BN9c7LywW#e)e~M*=?Q+6x0M7Ig0FYW_|3gRgYO(pswj4o zN=u>iY^dKKZ5&GGR>%b@G{tq6VH^K#Nh>{tIK7Y%*Et<$` zM9~&;(mql`yTrRfG_OVAhf<+X`h~ZFWKoUfCzIO?D={*hozt&`BW&%GWNZ1r>BohyqRSX=L|M@N+4yK8xc;vjO7`%-LwVXItwmBwL+k@kpo|8uoGta>@#E`g(wX zJqrZ{pf!jy;*~Pycst4>*mA?^don2+Xd=v=MF^X@FW{HpJ01eyRYC-a7!d1`?Hn1fek;zfG2c_t4ksy<>mC?@;8S zWQp@T1FbCw{es(=jy3g97D-!)I335A_fh;e9wdqibXTr}ViO zAo*>px2S5y)Y4e`L1u=r{&x9-7~x+4B;D$x{OO? z$6Y`kSVo4rZVoWc8P_9Kk*U4xDANqKO9YLKSq^*>ock?^)-p#xUR7Jnl)UkQS1U?J ze_HJ^H-rhbVs_gM=LM8G2j1E|8V4Da&{%rXZE*r&KEn+x~F zEkX~i$}V{feFg@|`r(;^+L_m5(ar)>O%zaAIrLL1Hz3d-o{kZ_1Paiy;V5cJc@BR| zP(U}kP8Qv&8hp((?Y`C=I>wwd78q<(On79=kqGoXt7%L;TpNNFL?j*S_wEz+Ugwpb zSX%T1LZHYrk*0)4_qu}OG&yfwVU?@%eX;Vk@S%e{2AL`4Sg?%!LE^L`h#}W{34S$`s-*T*4yNjLNjy-F?99{99 z8heMw$Vr7w?%Jx-IOKuY$rYX~c&u$>L-r0iL1 z{o$#irAvuFiszXs>pPi8Nt5AHbyMblNBOM>gz_YLM{c;BDVYs3EsGZ?=r<55evPCi z`XsXA#7XcH_{%WoI9rY8t#6#c$X|qGugs%&oA2RadrHdP6m^kSmy<9fEBDf;e(m$t zDcZ5pzB2O2dN5@wbIBvAo);V$r72%9xRgwh`8Vh-DL;xgLbGh~#v-x^!2)C?I7_;* z7q8`tOL#0ufwW^%^4iqcjzM(}=?qLiYA=OV-hGn}!jON#hkDJLU}Nl1@k-*i)q8C4 zr?}deH7mmQVPE=-H_x~4|LgTxIOA{K?+5C3y(jDe_S+l{cCah%RTOC_!V%4zhFjpe zQ{x+~EH1;KgqA6pbL+7w%wRRoc!ltCLU${g>wec>x>$U8R>y+gevlD3E!v8mU$W=Y z0exQB8{P57Mv{<0s!Ykps&L8gzw$j>1T@Hz`-a1jdMzvjSi=Nz06SDdF^V7vWehu1oOlZoLXF@J1+WSY*l`Mb zt(+D`i`6Z{phC+={VP3c##@wmX|2JTZjQd~w#}dEF}wg7KEg4rDdN~Nrkkd@?GT~1 z7$M_Z{VDlnpXv9}4E0gIbpC5lCvgazSX_Ti03%Xk^tqZ7EV22hrT*akvJoR4x#0U)eCngEo!DgRWYKmzOD=!8o zs09pJ8O_PRc!t z06#89JT+K@QwcSsVrxT6tPosQ;_wy_1O9=$woA6YhrktB2tT|Il3>MdF7HvpViTBY zpmI5)vY%bu7NgFuaIKocKd!640*D=RTQ7l*##=D_v?atA62J=yDbo739q_I(`yKh* zfH2^!T$goWE%D1H^HAF==MU{_#2|W3wXmXwi|9+&wcTqyRmregD5cu7_UfE)o~j_ZY4d%p+hsfKj*2-} zm3E@~YS@l0)#D$o&Xai_f>Q2CIkt)V5`E?PfHX>qxFW*}j^39KrW4SPVSRkbUGz~~ zR9@mHpl`97i0t?SVnKl3_f8>n6Lhnr8ml({4$LiMETbxd!v-RaH*B^|@5b(bDk`v1z44_*`N0bt8Of@|zo6JK`-{TupME~=7z z8_kfLKG46XazUM0t(@S2O%x9ka0uiE;&fCNR3ig=hfZ-yLhwD@EV$M{Yz=MzQURnVIR+P8UA*$z&y~>G7{#`Ztwaw{Z5IQHtLMlVduf1E$CmM>S!V_ZfvacE=y(~O(CN%D zH)_({_cm7@zF(;MQ_0E~Rv7C&fspb}+BAcv>A8;@LKQBWi)j*J1@sC>d=@@>&`YdPV;envUBE5fecpVzue^;)6v8t*pP)0XA@+3$ zVfZe-LMUfRXIK9Iww3% z6EPi?nad^3K`%RXD}&13kJPPI%e2H<@yPF+BG{LS^m0|d+*5n9olz6PRJ;vpGDW$T zvm|io5>5gD=Gzfv0XLnaz?0|K3C3B!Uxu+}+5G#|m7??sJ%GK#}NBp*9eW-R}!lISL)B z$2`&>=H;A3fjJRmIiW(fHcH2a>HT-ZGoc-V$6~Rbm5>K});^*1%~xxzfICY}o?hFJ&qRQtgcUxhWQBPi((S!Ni1Smx7f`DkK%t zynq_L6dTvrLfaqey;%mLc)J>&SD4i&CxMme!Fe6&R$@GfVQ^u!nr&qXyN|8)Ur|zk z=3Oi5N3%d36@f&xdwa3(9XR1b{{GAYwJO%9-0hXVe1!`Xv{%74oho`;Q;6YRz1}DE zEP~FD^(Lk%Xcz{)HwtjS`2XDFf~!1T5<@P8U6Dg-Y6szp88#2xn4m6bp^nM0W98W- zImZ%*3`s6p#SnseuWU72AP3OXWKo~L69h~hi>Q~p@ByW>m8AVUvgKT(#mG;kn6z+O z0OFaRz#xBUcMM2{#lapI&n^uiG%Jl|R^DW7Zxn`9+Ajl5P3DdI<1jG>TowL{#vd(l zcN91kohOQO@8^ojF?ni_Li?LqucO*ABb9B^!r=gDDhkKcrQI?BUyjK*L}YFlkKqd= zp3b{iO=E^fxqK)V{AcYlXW?KRI0=mf@#zV?Jh&x0-l!ZV6r2sGF*8@Vutx!!hRW`u zIM8tW@{&Rh^_aIp>_pVwJ6au9NY~ zyM4r+%yxOY&3bfv3Tq|>(ulv=vHw_tKmxm7a9v-MwYThRudLzk*rT~jC=@1!hiSyT}k$djSf8;9@I4|qDJAM zdn^so+0m#ITyP0Bl8j+HG&@ydfR@|41X6Wu(v;QOU;f@`lnb+B!ExKG!)Si!YAL5^ zv4B6v6W6hroVY26u)C9X=ZWui&=2jnT~AYDf_A#SSR2xdz38lXmxh z7TSJz49Tc<>spF+rfsi@m^N5YkC!tuLaVNXHvS+^d{X+i;?OjYm;C<6w1Lr3L(3(YHBA^<2$DibK_{X`Jxrtu@Q)3lHyUyYC+_L?J3mXVdtQUQwY)OF;j`fTCAMQ8Tnl} z4vd^jeuZ7dnab4`lJ}=ktyYzPkOW!13!B6ID$+ z{?jGU#H~vv!t$Odvh=FZV$E~Gb|u9WE;u_hq&2!cT--W#S(#}{ITA*8l?mn7q@V!M zGQ`U;otPo`tEq2SfL*$omFGkTRY>6b(h>Abe#7e1ggIn<1L~ z=ymQ9q+O1U7DSX6P1gzJvcp=clp37S45z;Ug72)~p*cJ*c+}>(>EyQj#|WZ5?RON= zI+fxROTkTNF)q~jVuny2fpycl?UMG|)pi`{-du;0!6Dw&rU?po*LAQdW!F;@oo-c_ znLyWCFdX}B^48&Y3p=%vt*=1a(v-TPJ$A>b?rt1)fNycZq}_W#+onN7@!zC}=cWz5 zfWVHgZifS+3A^`<8VA9aCpRUOjdl}*$It2_|FLMxk%=-}#`lgKv4K7cV#WXu=It$7 z`=!sEB!KwDI1XT6YSIi}=u%-q;;_d1`p}C$*bs-U`73z#gjO|>6_@elGK`?(IT5mo z3um?EO~^UXeJCtEd&qqAU>LCMexRgVko;VjQHw$CqKJ>BR zlnLcIxGEP+a$<_PzQYb5cG;R6Gnx${EH48&VZ2~4&a>8C1B9Z+`pKcHn2sLskQ^n4-1OE8XDKM zY_jwUmU2Q43O1A%*uBTW9TXAK+43F2(4?zdJoLT4ira3H%+%cttBUQ`aVg+B(7Xs} ziDClKLFStgYUPdwLEzG1c&;y)3Jrw;d<{)-QE35iwT-ThKruU#|1 zv^0p;fLSFH-xF)GTPcPly_lgt%M;_WDLX@sB0ZfU6vFm7+YKmjc65veC~94**4G+b zk9VEwmN-3P78k>4zmdRS1to==l%ybGit$&-X?9MOex6kzU?>;>ozGd;GWAGYww1QbVgmdqQ_M) zzsir{!Djk$ToKql{^J$Xg5_sbwEQC1?JM(@AThOGc*}gy{@OYXl(;p|cZC~04V5-ta5+gX_9Y9bS|U>c)E=eUo~m2kwl0y*G=NohOhSbRl*fC31Q zJ18{GcXP7!TWpsadNZUv)=`%0gDD`_Ne*vra^8NMuWabW?NF-&vnlmYx&YIe+InV| zj!78x8DCHYYmpsVi97_2i~8UG4)94d+S%)2_l1qzWEP}WFQTtJL$v3AhP9SCpw>*F zK|F(*2K+bVA7hwPgvDvf_nSEJz*3*%y2ZDa%vf{wMgvrn&(GLD#6z*vQjz16JeGXZ~L2p-M8)QEOCyOt+c7z5PaNWvjm3kuLj zRku-ldO>S)%c(Z{WQAEqWWIeuYM+A=zuSx@*#fzz*(H(f4m{z;9(>0cl`4ZCI&QKi zX$-y4WX=4PG>5)*_zkBg_yiKxIZ%J z%}#~tLsva9AM5DHl}e;DUC)aSIN;pjxbP0iebZdscqsUPHscr$-* zKnR9`LZ0k+OnsS#_{8cU4Vdp*xTZ+vbk5#62dgg$?A^b#^}!wCx~c-fq1Heb&}T<+ zRKN{C*p>}TB)cbp^ZlR6;$;f12=bn1RC6Y-3$mbJR96#q73>aRioM#X?#LcJaqCh( zOZ_pf*DF3Zm$dv;y^1M3BYZ~*D7!$|3MT*;J^h(w4!MXv5^87 zhUw<+0h+#IQKf6s(ITpoze_b;7m;JT>s*KJBq#|yj5r8qPN85!fxG_nNv8ARy) zSx+UttJQ-E>$5`a#!F$Za6({i!!+KxyGHz?vg1>O)8FoxX4y;hrgfevj5jZIC~YZ= z7Xh`8u^i}f1Ibw7a-gjRC^7fh(Z+aTJBUITN%cAdFGKxzhLOO(OszNMyLqY>ahMRR zlqOi2Sav5yQp;Q!VBlxj+Hr%@oYVWe zoAs)^B7WKf4*ZrHuR+*bTMEHmdb% z2pa0HdjJ#@*XUF+YKQfxa2W7oe?IyTiW|^*uj`w7s`whOp6q)vVwL<_#NmF>Br%Ne z;6nnmHvLs&PQzC8dZ;P}>Exz#Mj8kHFyw9lVaHG8Y>Gh8PCKUy=2bZfCRj+9+oSy~ zUq?{P7C_YmJkqcK#!Wr6LjoJQn+(uAFykp!|C08+VUPVoH8#wjUrENYz8zlx=7xLX zxZK5f!TqR5!Q1IMdA}SrC0azF_(FI9nr-~=Ov!h-_a*sr``T>-^Hab-&|D}ws4IYb zI~h_K;}_zk^)JT&eTzNO_(FB^U30tLtESUjC%$r^GpL|IJiGnAFWH*50_ylNM-rVqi_*1K!1azN!;4`A$PI{Ny zHC(~x{7=Rhx7BhaIuM?Ii~lgFzum24t!yD@2RId}hUSMul|EQ>W+nP_?ooRky896( zh=w#t4vsB6=Aiu`2)^BCf@uT>vIUrSwLNm3v%8e6o=GGO6`-+lVge*UE0cA-3z~F z4M25b=W=?$awG*Q(0li1elsS7xXH8?Z1SU=#r(85Rja1)Hjt zSjfTzU0nzSM7MSM!$j7bq_vrYcHcc*_q_b1plWOp4M^j|y0H(>DIe-pOWI2@A1kXn z{>eWEO~mIug>uP=v2=BR5GlW_CI$2Ku|DbB)AP(AUA5}quVbXkJd9&Fp?yp_I5gkr zID>F=@PcXTvoj}x2ll=a4zU>#L1}V6;?uv>#|@_Ao>?jX2^1YLxauS)d5lafhby}7 z=r*dGS}j@x~7DL0mO_nnDb#QlxmQVQ+j}P`ux4|+F7Lj&^{)nNVbxtoXP;V=KBJVE~ih}Ddt@0>LmKVO$UB{>fpq za69_{;)(-6;wjh1_Z&mn*g-JH2mg0~NIdyT9N+;MWKL{FMyY^ctYf6$)+=JcYUmtq zjR=hY?+~$ar=vUI8bXr%E|W7ywDpCVA90`gKVY%YfZ)HYKMdU)+reyfgrsuPkXf;` zyS#^M2_978l!L?g2ZO<4@QABQlInUu1|kZ{{l`%FqI;76XM~unF@roS9;U9r4W;C9 z@XM*g6Rjt;u7%Gn@`Ymp(-2E@r-0N?bVO1+%>=K!IbeZ<3g`ck9u_4)v%u`eD7BJp z2f+tvj++Xxge>9-TMsh;S0K#O>p=XF#VOoIZ@(ycte7ci#W0lc9!jA8U(q4s3^HcA z)M@~c2hqP6Fc5?<<~x^5pbm6;0Folpu(6C*32{R48?(+H>T^B*fSitUfECf*B__G; zoa9JH0~Wb_&_R$|mM^pyscvG5N(moMGY)gn8s_tI<|Ht^Q}@PxM`? zfwb*9O&Rn8fqnHHwf%p>#QZ2MnWWg+3Jmgh|G+J`Cl#d-C78S=f~YS0uTSxlv)sh* z^VSrUc}(8myZEjj)beB{K^mu&C6Ar17dQXC6ey%~oxXipL2NNYZs}Xub*Q^8g=Y#&|u#yg%uH|>t0x(7cV;%Im_M? zg}`HZ{KezsI=AhwztHrd*$ITl@-g$iOq_QB9nD=M?(6(|>GXcG>N>2ZXUODh6sZ$9 zfYW;?h&Pe^ge}Ps$pcgNkz_E?mS^A|JW;hHJqx|TRP|x#*(WRF%e+mUKOwc1?6Gq# zQ@x~C2|HYAP4=zx_xK`&zkCxqu=stvQ$F+k{H)zl{n@r%-LvMezYm}^n-QSxzCJMy zTj9A}y%VbWF}CZY+M%@bjEekTl%17dS5M7P`$!kC)*YdAdY20w$WuIt=~@O7F8N#N z=>WySdD2QpsOYqHRU#oAKs&rN3#T>T9pJ{$IO0TL4hy#rTmJ32MX|v^u>(*8GMHC8XvfEF~cw-&yUBL1YA!`#QVue^usmR_1*o*)3`F{{PXI_?lU7uD6^vvbW`Qm>I=`f-Yr8tzp~5&;n`H+EvEywb4Bxx zzon}A(ts`gX$D4yKTE%OQLFePNYw3(s-BC{l--SRDE?>Bh=)T+Vz0hOCq~tIBMXFz z@aiY2kR|{$p}koOszs{)0#03CM76CKE~UXz&7s9rty1I(y2hkNfueWJ-jtJwS-^oK z3Ff}ZC)456L(BcGTSfRWyN>F1^#^EVf~@gFcLyd6)%rB*O*olK=Gc-46~Oq4z%946 z}t z*A3DiIolyaLmdnE#M9o{)ZOh)!CY5B_KhQGA5X0Kj3t#FvLc;D9yR{`r$rLzQb)It zfsQ;lk-kowXj=&{EY5=ZW`rT;)>XujPodqy6X*T97Ihufg=G8F+(RYivcIqxFM+~N zmsuY8U9j(1Sk!qG1QmG0V3&D~#|xb0C5Q`=!!RPV+HCA*U|q$Tt*>vbO%1JUf|fbY z;{jc?OEbc|uK{?oL@nwYWc|9Mggc7TNKQc2aBC7irn=c>dFa4Ilieq+PuS3i*&kxW ziyry;BJ8qzvUZ%Q?f`A~o1}Qb2Alh>3AvNZtT&HyRy!LF_T-;V=EM)3*x-Ip6+u0c z{c7D{z=ehFd~nxZ?RdB^O7y))=uI~?k!4r?2x3S0X2`n1Z)H;4U9Z?_lZxp4OqtAenT@B`BB7p+wd`jZ|qs%-KrXjwF}7GgWiQ@ z^>uRH>^!Pj<5zIcE{{<;8&EfGC1UnZQJ6yyBCCBE4w$$E-|Yp=-;+Jup2%&3WF2Fr z{H>52D=Wm6a?x{Bkna*qZTv*3=?egGA+T`-)Zeq0)9!Qmd%}DMnRd$!I#UqaBNG<% z;NI6_{*oNst|TxmoW8jmHJ@b6ZPRo_+0Kp07iINNI&}2%#Jt(pA{Ba&ig-n1T=iiV z&zogD#StT%MSib>dT4zmkJcp=mCYzjyzoe#m!S=I&5rHHhiLdMeMjAP`|oe+wt@Da zx8fT=!l(~$UQ%G!)6-cA!^Rt&HG|uRetOVD^VC8-=w%^FFJ9+pfuaB`|KUlk04JDg z!h2QppzpEdfqriXp>h=D%f(k*j$d45Q!;!$%r`n?49x^sV@0f#5oa8<3Z$>yz7X-} zpHj*so%xXmpAQw)nc|k>%7w8zigpFO_Ds7x$9)tjA|5!)XF{Wd!(h$|M*MJoXvex! z#gF-W@I`4!`3fAsWTOx;0H#-hd!~!S>G!>Os=}41hwlb;`pTH<|M;JqcHA#l zZD$$m_?}b22XEWCxO_&RPJ%7JDdKU&ppC6zzO730&Ya$I&|(^K*$W-JZEpcH_`NlQtE`3|-3yc$mSv?g z3W0(^9dt)MlsLQOxPBLfM3N8}$H<>B889cemFYo;Ujm+Umd0gK-;I$ONe(2aLVxXi zeT=1G>C>*t&X0WQ^`w$Uvy)((ET+&Nwv(>3dE^-!8F!>dat&cy6F$>0AIj$2Kk0SR zx?-&4-7UcU?li7(tN0LlWFPWZ>bni`&v>%f?yJ}}n~!dKiL!`K@8mkoXHnRR;aCVNZkGm6odJ5+$gtdECy zKl**`yJ_!fOq0jCM>FCd45QDZc)KH~^j++AgYjd1_7@YY;a0aT_)L~b49K<(j2dEj zJ;?3qte!|V3w_V5=qox*5BG-jMtm79?T{|-ag?;j$`^vCk!Sq1cPQNMHy)M5sxz%7 z7Jh=#5$#Nk`vEzP zkmZ)(StKqmeU#D|eD|a1A3Om96ojEuCi^O?p`__a>-Zew+s0uf?Nmm?6dbiBEF#ii z(b;h23t=yfq@LT9dBbg+K83>YsQp4AAaOYE%q(HtArK(mJP0?pe@WDVOxA*6FCB3W zs}&KuBAQ|vrXD`wX~-{WJci-VOtEl)yN1FJb9+?9NbR;8%q(NNNt5CF=jVdpsRn5j zzlp9vpg5rnC)y8L2>fzHB8#aKvHP;$elWCpYGQX_t}%l&dJfO(dSzjCEK2965FLVy z??xLO^K(D7;`R_yWKAkJG6dSK6lz0i+AmMDksx?S`S4**$iuX>h(eE2K}2tju_U6t zXA}Z~WB&FhvYNYKGwI0Io;4;X#el?xa1(0S$qXh?{fnNtO-N==YBTxTB)pb9+!G5S z$k-MBZ0z@N@KuS$*)~+gFnRev)T^To3&wvH`IC&dnfnjl@&ozP4K4WSg3sVxG&)WU z-E-1=LssS{4=12Ogzb2qWZB;tn(0lX#cFhVmJq_nx>i0BI~!W45&9ERRZEi*PQ7dr z#yU3hO7riD=>FNp56Weu?z4NpxmIV;A4RY4dF}s^b_&SZfpDzhHHgas@Lm%BvGmqj zVj4A-EP@m^Xv!no!Y~%KSVI*qo9+i+Oyo>QbV?owe^TgAwaWU=%(noX&O^f7@WNZi zA~{+}VNuiQMVg+^?`V`yyeXjJ{jw?>tdOGck7Z?lW3@|*{e1{h(>_*~#LZOm#hl(O zTFL^H{8`gjbwDitB9Z0q04?Ei-69}k1?naXXD-$lfm10>InXq(vYSa0?|f--SeM|( zQW>vFp8M;%`)R%JCJ%TAPl(dkuS?>YPPnf#0K zyPW?!H9w=>W=Cg!-gbji=IFw(tLytwe>~6sI`U81(07&J=d*v4 z*5`?rZFtLSr1gDgqPBX^7rUEesN7n=SN{=T{pBjICx05X(^#9~uAT#feLLiOghDqE zXMY~6T2qbx_q!SMM_=sQz@E^j|Cf1KAgeYH92q}Tk_Z=yCUKUP^}1n#h8~g%$zoSn za}eyvubN|(cN}A8)%2@HtS6=;PgOS;(a6LX-5xu6NG$GyQk%Q$3`X_IZjeM)H9yJJ2zV8 zEseYIus_nSAzJIRKuUL5PjOKSa=SAoEC=Bc^8!*L{D!0(TzfE~3kwT?tE_%t@D1h1 zSHI;l!{30IGV=;5Q=JW){_2m_(#Tz?@Xr=vrddl{=!*CfqzXmtsWn~{#WjB;1J8mxRRda%TJ&@!A zt=8GsCf0}4XNOjtuNWQVCDKl;iAERC@0PEOf;6Py>-|@>-?JsTVtLK#jGwKU?`Gwu z<&B;(v{a_)Gw__{Zs!+okcY2kI!=80^`BPn#2er*xg^sQNNR^!%gx4VoS(VCmMeQn z?qHByO>o{`n3Dd^7KhZV{8qE$m&7AQPi8^P?bb*gbe&VZP+m7e>@rM@j)S3(@8}O& zwYaBag9A85Q{<_I0&|sAN`?0xy3Z}cute}hAy!1F`0DV$Z5Mw~oJKkYv!&elSl96) zkOUWWpWA4>=fnBcgVG%i%;b>tN?>j@*eBXRsh7HaKHHpbbp(1`Vt_k!!}c-xA!D+9 zp>7u_ef8up8g@;yFE+u)+K8~&j*r(J!|P_V07}k-*5u!mTA@u#i&{I^po)aniP}b* z#Wp1WiN`{g#b$+=vEMO3xdHbvTCnCA(8jZsNMT(V?2Q~5?5%ZgKs(jykthiF_Lz%Ks_Aku(SG~uk#e7?;X`_8FRJT~!pY$=@ zhM)8ue+(V3IqSM*lO5y>_~CiR9dtdb9bS9x$eaTci6xyKkYscnt1sD4p zU}pU-_wAo3z#8t)Jp%6Ke#xtGYSFGTewmpsH zUp~9FZSqTg)xos@4K)ZO^JtArz%0tw~wd`2(m zAp&*~7K(R-JBn?!nos8m8UA5f&7jDhS67`llne$=>zH$1dn zY#9pwmd*U)oI-msWF$MaxK;-H3PNrW%DAk5AD2-LsAu9^KfJ7$HvnAKFC$-c1>od# z((E*D;V)BYhWo-CfaUYqH(B+lRb4IPEP=XhS;Km8TbBLBPn^P6u^Fu2f|Ny( zztRl=RHfc9{5untjVO4_|K)> zD4w3V6VUyydj!Qdm4;5LMvz%{Jh!*8+q2(&&Yr+q@Cnj~EF@lmy)m<6HqjtW8~>{= zGVh7wA7g~&QgCJylO8I~%bO#WaPvnmIKm7|(+%xkD&~tvJx2x@y9AXPHpXV z#xhx&Gg=1|gw=r)bg@0juxirO-{R96pPH)%nc+UEUMNtr$Kj&ZfrPNQJ@TNKgA@#p zr}dzQYvkMe*B(d0rr>^8i==7^>{Kd5E=63#$03OSHb@j*@~VC&(cgX~SzsQRe^Do7 zLQIYSe>fx}V;0x;Y62)?luGwiAq+u-c7a8+Hu1smK1>hKR)L*pbhe2Lj3j~O+a*Pa zBpyxM2Pv-&d4jUrOMsR%0%-5Wq;Of4k@4xpBa?UAd$UdSgSP8QSTS3uhu9Fb;IZc~ zqtBEQhE{!kusJSdB4wYgVf>RkEE{m0{HC6o1KSwC%KuSF>@kG_4+q`U8uKF$b5PBm z>&?H@CF?ori>?ny7?Ban?j0E1pN&ZAbruAB(3R+kYRV0_F>I2x(yb=`wl!NW&JnDR zj2vKw1mh}A1$Ufnp-i08?}RBf`N1{|V~*@6>s1~#Cl;GsVCNpgJ&QYK1_TLXKmJ4u zn+io&PqMNxK4*M0VTD-p?UuF_0&=?qTe8e|_08OW}u>bLql1PtgGG7WoSi;^Mm4j8#oqPpNeE6z3J zy}I_Q9I*}0M*cnF8_d)PSP#&uB6I?J`|Yu0VN=-8e%#kAH1aQTAm?~EiOaYLkT`)h zGyEPN8Tjn!57lfZKI{Ce-f%Ym?g7=0dMOg?;^Sfq*SA`T?QSjx(o)uazAIJOi7sq0 z_TUFI!oPx!Qs_jSNK@Jz--jbv4=idqPKdNLcL$lAN2-RBK@my7My zSVDr84ObqwcxWU!uV|A62xxsjl=I=J5)Y&}8@mgd4o51x_R)bI=FLT0m8f)^j*~#F zaNu}7cg17-G&#xw%6bC$waKSSuG&b6m`kFS@6@%x^6b!o=$s&ODm&sT^_bvNuQE55QsOX7PTD-6U@tUwS zV31gS>3&>M`FBkxtyZuuCnyBw4dDns23$7CaO^a+v1h}>9R3)gmi3Z~KTDNm5e-Tq ziiTM{dbf6~AXKoU_{m+Rl$5+AM{YtL*G-`6k_*Ovz>V2Xxucj<3VcgpBqi zx-}g#-f`E*EXucOi4b4{vEbNYVVtwAH{1r>+Tn|-RN(pA2)v}QG-X05&J#tZD!>XL8+27R*zAuZ z81v!dgI8|SYE_K(-kd4bqYA0)O+U{DQGk(C(7125DI_#OkK(Ye1;jGfyFj8s7WLZ(YB2kd70+eJa zDX*<0e|Q1bwUp+pQpvKrBW-}_Q=>AvqE)p)N}>Rty=04eONgyBsohE$!|$GNAVQgz z`b^#Wps0i&rcvo4Vug&YCX;qxjhdKCa;U)2My@aGHdv7Zt`21T*Qko*+{oZi44JRV zqyU5L0yjU)o%*_2-bMMmQW?LZRu;f)9t)ACNwfBL_8>*V(b& z#qW1jX*M++ZC=c#MUVKOL;LC@%KeHwv0&C#>@)dft_2z;B@I{WMv*8zV_FzE_hAE$d_{%$5r0n+U$ z6d{TbVSnjtFFG^BTg!aURz22l#AE-b(KI={^WS#@E9Xn%bbr6Q^~XLGmOe+dzsl2J z-p?q1?_iYvl6?U_?C0c@C5blw)30L#7j06UGW#DR;df1aWt#^xIBzI6Tes(dJm+cZMCU?w zf1>gF(!w&74NCFu?dFCOX+GL91#4iK5ZVuz?Dv=kc_sv9;toq2F4 zV7k%RW6?q$4&jZzX+#C&<@&%9^S2Q=3<+KPA43cssu^>kItIUfAPkuP2QszN(^tXxfGrAoh zFzOy)*{T}*ASLhv^YY$t9Pi6avM~sZn(hluGKKMi|2((BUv9kLY;n~quRkeKBSzt` zn-K+sbPC^?d0sEEi+y##aQ=H(%Qqv0J$ z4vJv`Q{z&I+w1QA?iNhvP=d;mo8cj$FV)XkCO2r}dF3m(aQwfo`eb=~1q}xLfPI7O zpeBc5X^@`;eA_br!gxoxY1n!v>c1plz$1k%kt__p8?}7+CJMjzii-H;t2A$)xTHLf zIDNb`CqDZ&n7s5#HhbyQ+H^Cltv}jZbrrpsxTzoXqc>UyCKQe6yF{mru(Paj5aK8Y z50HX`s*CX^HgqY)5lK(0jDFSmOVCdizB1h+Zz2a=!a|R&+O)!Yo>=2j?0o&ODOcZ8 zU{$_it^Ob0MPJ4}nl+~90_-?H*2d3o@~`?YWA5+%j<^cp2A3;g3gI@Pz`G8_$r_Hh ziWlMGAkMFFfQGT=ouN(aDUKb_)6SK{!}myX_P4?Y=(juu;+|PU&!d0aAAr(n`_~R6 z>Q0-@M(n{A-IqPeS1!-5zdg3I^>uw}krQc1`Y+#=m4Zly`*=)+OUY!cH=sDbRGyT< z56V-ylas%cW}aX%iXgfPuj>6 zjyHYPHU8BSuH0Phe~V<^(7)PN5-1RNBMW0qjqnVWd~4tf-(NHKq(5$q-YvPD5S+&o zTa?kQ>JyOrc?wB%J>1>;SyCBRpd9`Wy52cBviM)ujWe-rYhv4&*tRFOZQHhOdt%$R z?WAvhd!K#l;+(2g)vMNjUA@%r_x(JNO6R`m{+qe&w0}0EHd_3kqj~=FyX#M8#%~#k zVGy)xNN{-z`oR#!!*2H}p2_VBne^@SA$qGEMQp*#*?pda-}+HXQB2}x!b1(vr)Z)$ zeU2ppHhBD^|LxpI0emw`Y%sTRFSO7cp4~XB8t{Y=lez2z!LC-obO?hq-LWs4EiBdb zSZ{oT(_aMP7@oG{#@NihC?U?a`VSB2636CnS%;&aD~F}ga8A(%Ee(I~` zK*R<&^|ww`6=kt>*BdS=o8?7^htlKF7!I>kc5FT2K1_b$I*+!NR}nQfeh{d51jMsJ zcMJymo-mcAUbuk~K143gvE>B9e5Hdi`10%*aMBOulHd)b!N5#cA4;?T^%;u)@iiuR*UxMi%SJhZAYJL!Tm>u#lkIsC%% zWpzlPjk}=R`jZUV`;jI8GHn|P#|PMt95lCx@qt?8QG?+H7DvzyJd(!09AG5#B^)^POb;2KEQD{Rkt z&|c;@(b-E>4CHacaNi-d+Q;n)YY)1BPLOQCtH{=`4l*rX;eF^j~hX?*lTJR||pk zCtlnh%Cl!F;OV{tp}U#>+qk#2bL&|YFr!Ba4ov=SccZs8#yNLj(a#RgKyesM)&4i(H;O4mi2WOUXY;kT^!?#L&NYMdHJeYC3G^oe zCbAQYD;0=u|03dlaxBls@jjr;%}4XZ#z8Ls?$$v~@v57BKH#nYVx81&gYDR|RB&IS zj1s?Ix@W3fG;3P7E|=lgUFd4{E&Orhydrc~|Bc^Ci1sn*UAM((djsO7R~_UV4+p%R zhUh<-XsgBdi0(eP0S0;P+0Wi#U8pYdpYmdZ)GQtlhRJodl6Z}0)X-oD$c@{%SsL(gZf8$Vp;w(29KuB6LRAG;aByEDSU;=oSr(%OrWn=?P z0Zh%HEP#Wr``nd|KCcs4G2Dy1#JKQt;??U1F!-k9$rB?)x)t+2(0RqHzHnb}2c&Z* z&=?P%MFF%NGbR`>5`X)9(tc8Dp%3)G11(Gd!+!#;Q$lF*04+2x4O-U?q3)a+q|x#; z3(!<4OmCEMF4Fc*o`~)7m3911k!q5sNB05*f(?=Af(>LgTfM-$K$BE(I+g?UFP3U;RbV9tuXu zEU?hW+)1ffoDx@8DsY~8e7OH-riEeTq$CR#hN{PIKhjR|xx;AZJ^kDg(~32E$Ex28 z%>80V#1r7a9s$0m6IlR1#BPZD@Bfo(MYTB9y*=)e((A-sbyFzDf~1!xwVmWWXb5Xd z5l8b_Uh`i1)A_sKE+UCZFPQrGfNhOZqhg%!F0Xrzf@4oN<+CPe+;{~2?&p2M?n88a0fG zj+4)6UR<~Mq6Q+>ZPG`KF2k>Ft8Q0jIFjTN)&v^~MCRzb1jMUSZ(&eSiDh}h0#rZX zf~VWOw}}=*L!&MAv~=4xn89fo^RU#Mg$CMK@lToEU=ItLPc;8%6&+ij9jQ!g38+G< z<G9P3vkCTIr4&n-MeZ_UoFljUe|%BacrgY z*osw6#3=0z9M97$ehiUd6N+Y*6%VvaBZX=$$BCl-rqA4}W?_~{kYx8YnVu3V*M>i8 zaShfIkp)vc%E-~2@FeTboKh@k=74?pa-dh7*n$}#1&R>Qy&++7*+H}JI?^NN617b2 zGgPdh3W9AJgSTsynS0F{rG8T?E!IS0Ry2vS*&Ob zDZuWz%uLvAiyjmCQIV@Tt5upR7Z~hmgB|S4;lB@?*OM0@bhsv4Bt2-?$wfMCR1;;e zKzTwGHz9xIyC8<~MAphCXAX8b-0nhVPi{-7kGi$0*$AU!ZicCNv1j?RxJKnG&(wBm zYRyBUp<%ollx|B>Ht=@38{tn^H)}tF1Is0I{S}<0z?FMI4IVB_!xO>z({d)@Me4Kr z&A0b|yTt(5g`(qgDMM6!-Zyr(n?Yq~QoN-^++?KSES2rH5vZZ6n`AZpL!6KW7CW&v zdy9dS0CFYc8E!F?J7gByKmfbn^7n6{ChV}0gVV-De3Z;3lKPQwgU7eVHYIx=@N(q& z_#G~o^p@sFrl;;9T``%TWhKR@iU7B2?_i%CQ>yO}0w zFFDCx6G(b1^#<1z)f5{RV7DRX(JAce!b_fWL3vT7iox8)o0c(C5@z2dyr~GiIp~`k z|Ev8c$WSD6pedmM-9#4Eo1QqA0_;b1L+jW@E3B^NRn;-uI%$86gSoBMD^$Ms^cR2lbXd-oEv~EoqP|iQ-3Va_|o_w8b|3oYh`C^ zKdKL*WYLgO4cud=d*G1mfFcpDMDH<2f_m)7si_T|PrdKyc6X?$R3tjiUA)X3HdsO) zb_d`T9zYPeJCJUV9^nhQ&E`eqhMkmEjai9Rfdn_YSv5OZb)80F;&F8#Zl3n)@6BxDI}?K76+ATt(DAFh)q9p6(3}6Sad}&BpswubcBS4wYKM)8W86 zGemuZk`pSE{*&5*UdDt*3ylvIT2vGPkVm8vQshthNlF672)t2Bzyk4JQ&-$x74cj6 zUS#>wf$~VCJ{)7S)x-aB{wP%5ofhG7E+AqXFrT~fq2O4+RGGrH`CdINzsQA4NWWSU>C{>aF8uxHEiTwe9K=7K#bcoA7a*^8M2iBw; zSXEe9@uKuO1v4b^9wyjcwl2raDqGLBy*xdrh}oQbo3!2Y4~}e^!y5T*4TV<;He9ri z>9f0By}GPG?QdCF()Z({TS8=3B>Ax=^G=@srRr!mW; zuh7v6VZ)gVcsSf=WlLS`iyofr^vF*Y#}Z(LBOHIVyT{ayb#G9I$41CAnl=I&D4imA zVm8eW>-wO9b%NQG!F;bln}n7sPu*Y^D7Vb}B*0YJuuDAl_rUB5M-t|+fDLXQBz(q& z?zsoyxzj_C$Hu1Yo_HR;h3&9n_USe#T4wQ&Xb=!JNV6h0rbS`$5h)2A)>0?L{lyO3 z^))%v9yl6p8(n@Nb2)uak;(22sqyNR${qkO*T9a_B8oyT0u75Ec-_yncu4I?%%iV8F0jC4<`Jt*qXl`@fbcf4+rYECqUM%o3DqVC-DM=S~rvJamY zDzFJog>2hdsUyL;QjJW2CX6=SCJa_zM|tBX$qLMYpZ?EgEW3F!UW$5g-j%sDrs2hW z#Zn;jVgc0XswLJ1y2%;Fk>-K3-E! zRZxy)kZ<2KfbC(7>&Un9DR|`_aP~DIT$g9<(|5|F`Ry3+hV1(z_S(J&bRPjcCjc)g zfE!xCj@EZC0Tn>6x?}PE>O@<>1oPn-xL!A2AbsLrs6FY#S0J4k9hwqv5;;no`%JOK zSN=edZanz@a6@mnIfR#a3ib$EH>LE!ZCJ6w1C!&&bEVN9VJLXcVIC^d4hb^666vEI zb2DRCIW9OOZ=uRUIuyp#x!CT$1Vz~0s&mPKp~#F^ZW~8MN!w|TwzN1H4+A~AMfJ+y zfOJU2yKbQi3w_{h?HQxNqMzP)6>zVpU;VHb@M5#LxDH9U)GA^3E|k@6=&>jS0>%!Q z*P^1=W3cfTnAo9F<6aQP``jB-udF*tFZzWeTT*vRxd|=cnNL+q9dJ8zFuG z_Eu5+@KvbfW5_q^Wf zzvG^kdJqj5&k@Dx_I$!)^I;SoBz%te1twA4KicAev%qY9LnCBxapRWN%tDVpTs_p- zTNUMU$v=TIUz?k1A(&0Go@_cvybtH_cu^RYaC<`IV~M;s!H;RkKqevXWLYa3XB6d| zz7C#cu%7w-^7D(o@BDn00J_iq@7*tncfINsWk4+3ulUQXqS4o7oZ520Nc>`) z{P9uYRlmz=38b0^hhf*0)#fSjOvWIv5CZdBnB&bLt_7cGkKH@v@RZ;6Ok~zFIq?Z) zXx0McYOxU_W5@NZH>G$2O>Q77I6{N@zO7$r-(*?2N+su_Q^1=10r(E5g$3tgRvRdc z2)J&2Au1!hZv@hAV?m#Ao0vR@!zOC4{L3!jJNMYn@sik=t4Ax5uKMA z^i&u{&QWZWJ*GuHZp6DPi&L(q1{5#L%YY`r=j3H>qMk`cbO$Os&%7*q0tUxL(Vg>Y zbzySXsD!c@3GnZEs6uW=yN~U%lNk2BVAlpwl7= z2{SQFzKbX$4JEEyZ4iThO;gayp(e}OGr)nsjt9s@ZtaAaJ3QCswCkN~I#@f-(^6IO=i!@;m6yIudcwMjL zgZu}QRX5-y8@!1nmmz`P1I~rafPnw$NWTmME|-R#@%o}^#o_!nt%Zj)UV@nY zU+nZ34fuvt1{F?Wc3JHaN{PuO`THtFA9u#V5x)mJ7rEiI31Fsoj?7;1Xz%#`zd`PJ zFbjb(qD5qU(Ebv<<%tmSd~Kq`3rtwjHayCKR!|4&?vYmIZgkYQxTPA{ouipsedP2A zkp}G`I3ZULZ>S9@m-N7mui-Z-(yk#ATiaUUtE7Q#;gEg%1R;N8CR-dHb|sWf>YOCQ zZBZ#+JfCR2O-~V`#^$9+&B!P62g(T#g-FKg^Y723t86isqIEgWqKMY2&4-Hw!gAAW zhi{{0av9NNX;z=SFcImkxsaO(HJOkzGt&h-Br1(8ldf$B;Qq|rScEm{QiAPjaXHF% z@2~Z>hGg>5ig(P4xjfAPCF^>i<_~Fv+YWka@BoFeH1Wz7mg(M#gh*6v9w912!~!|! zvM8CYg=DHGwXUCy3MvXcw#I(A8@!S#(dk-8DL$e~sY5-EhVBWO*=Y~Y*Krl=zB#r< zXv=Tf%I^G{4k96t41B!%>x@n?csuBBJA|IUxT84n74$mxJZUn-n{GIeKKtTan$lt9Gy~$D#E#ft zBagJ7DA~q`lprCRBBI1UwkK5;>aP+ETB#43(o+?#S|h;gYmu+yK{khEMZdqDr=1-9 z*L7wM+-}}ma6oj4esNnv9MddBVLcwtt#X=98eFAevaXkqO5IZh9Y!|(f`w5nmB}<$ zrRK9H(B*(kh{lo%w~@ds=+h{QqufJQItggLg`_jedXy3c(g0v(w!1-Wk5uA^`^#rm zk=-9%;J{-Xr7cMX0$uupxVGtXONn1;BmpeRv_i33RMDv`Umh%lY>mQqCaMz8AnYvI z_P_#ZyswPt$vs?NfF%;JBS$hmH;CM5bda2{fDfL;JP>kEQ^aYp_0g7~q}d^i$!5hx zn_<6PPCg2-qc)9*DL}{f;P3@y{5lVhhiM>!3XF$Q^!zP^UWaL2@w+B4s*OcPOlc)% z!wY5Nghwq(ab!OL;=ZCipXP~Ijyq$$2xTPE%JVpX5jr%Xv0$IqM2NDnBxNlp65@5e z2fOkW~E;`9kn*K8Ue-7dn!dL5IN-{7Yi|($WbZr%K>_hHP#8-StJ323D^lcuBcOtu^GNZ zYtEyXM@F<9Pj?`0O44#VUq>lKX*6vU3i}zE#fGOWpWGjbN{0^b=g0Djr>nn-uA4q@ zh6E4OrqvNMXe2l30+SGf zFN|kqn3bQ09?48KA;C4C7!HLLF7dhUaC-3`NkWBEr3Bm=uJ5tOxnCN2>7Z!@;qXm< ziyI902_qC`0=%s*EVrbj%%Jz6Q@&Ce(YPyeRTRfLIU23*x$yncKvuV2FKvyf7foM8 ziVs((XH;sX2JNl~n@N>sX(oI{3?=K_*nfw2 zcb$1~mnumPYQ@ z`RUa{L0=4~fN)T6iw{LJCD8cU(&j0dl`~u!Fbo|9MrFn_jfnY;+@6?||6qCTlLBI$ z8e+0U!KZe2J!*Ib#}^UCneq~ODbQ!IPPmlZW%`Gk$cw6D*5-?0W-)&^Ny{|k95$Y- zSGxU^N?{1LG;V8xt)w$-wG5C&4-gBamsiBMJx9LY6M**=z!NRt0wEdD{C%(lsHOr1 z9qmFj%tOsfjBLSo3Yb1gN(O1e{(RvzDOUDi+ufxGIsVc&6cpKwIzykL<)Orl=-r75 z7=J+Z>jv_<&kSN0mG)b6uHr^)U?_+*3ThnXcn$$3<4&WcI_f7UK4lO^v}OeA4JVLm z8aPhf>?DLm2{Ek_XiVqel(cuSf#bzVJO(FM0iP)p2Lw;Yc2V4pE5}x`h0xDk-;Uqm?+slmblIgWh#-$gU*w{Z~W5b9D zMhKJ$NloGgw!|71&WsrMEuo~jv6_z%PCQ5Pl89x|QD& z*;H{+!!%EhKTOg&KlirK(gN|ryM&&)JII5VYEWUPUnnmqqiZAax{m&>jW})nR&9Z* zHWPpx4bO|ZUo;(UX2|ej=a1boIXcvO(G0b0P*PKu!%DMGAEuI4O;eLbf zd!q|sbd3Jt1A|y80*xt`#@-kreouM@8lJ$_L8v>!}SfcGgr=|D>l}~ z&^O5J;Pl$)Qp?Ef1(2M5MGW(@Im+_ap3)^;}o5L(`OoyZr+9YmGR18*fK$$LxP3A(J;6Q zv&rk@inH^BS`rn{ueaq@jL4&P1Bc+l?Nq>pVD931%!09D^OJ+nt?CZ2JtJNawC)W) z3w*}kvVcs2%q#Npat2H3|Vu9 zLTsRo7K6rlXM?Qq-0F3fm778yk1DUPNfwqBU{`(XJil5gX`1+^b?z1hVZs}tMbqPa zkQ=d>IzW~eWNRp7cG5tStbz8hQcx;2G_M7|R(w3J_Gg!pvm8D#wOftK%!_m@O|^KU?=ZaUhbH=gmU z#C`gSfhrc$S!J$NBJ&KSu5~XMkEoIPpFlG90K5ah2<2MJh{i${5Z)<}&K9?sYSyE6 za(6ZTM{44)EGh-&(TTRx_V2hac+s*8>E(`-`E3K!%@I{Q>7IySlHOjl@42QE53wf# z_&|xz?7~S5&{Im#Sx$-2MuDQ^03M#rP{uHpS_U5zz|kZPZis&l_cA8;TwH8y*RX)) znm;^*T&xp=TXg>NQ~vk)+D=LIQjtBDC{UpIiiBIdnPL-z;@k^?9&lDky(zy&%%S0k zM~{TL++S=D7jYve-%<))pHXo#;pypsetcVK0k`1(R?T*@H?&8>W-SF66d9Nsm8phm z^~)|s{_$KhN5wHMD8JghQQq(_?qJuBurvg`2b6IwH)54D39Diu{>Z^+ZKU$KNg2V| z2E`1=K4uk=DbiM@``~Fq`)~Hq%NhJCL3%ZXu=OXj=s#&w!j?l@j%Ul2u`7tf3?d&d z4DaZXyGc#>z_ALu+6ta|()fANP(EGc#*i8VE2Vpte~wo$Mx@fiHNS3sk1-4SCm+T} zd|yByC&;xQP2e2_uD+_xc1qlO?HMO6HNpMSV7vbAK6`gzT|niF_8Q>Kc~et zx5&ab_Mi=}Nht3@m_HIoC#y>w#)1iKNQGjZ8yhShJFhpWF(zXHo27@pv%#5#0f}mc zMs%phL(xmEfv0&!7G!LqvqBJdgvH-Un!h}*ZV=IWigrbOeB1YjK&c9_Ktc0g?#5(B z?C+={d<2yZuHzjR3~%WfSdnPjnchJmR*QRJsaVE@P(LRYMxnfL^S=92Lm8@vgH6;# z86VS!z{>;ZzpoDCIv$`d^C8Dt+D$04WR?mnqO+JBb zI`KCTrM*=Bk*y=rTj|6jvu>ssCZ>25^^_lTq-+R8Wk0AZ^?402G#_8cb6<WF3#miaat0y4> zW}Lo~dvLM=L(is*4A;qweerd^X3= zsw2lc*v&FxSD$Dl8GqTI=DXs+D9f`o!j%Up70C9y8|1jZ7VgO+|8XkCmL{`P8m#4g z+K55SF*=LVwMNYf0J;z$rsc&!N-CcxU$5%cqN zXH9`{(AzRxK==pKfy!HKn5h8-0TZ|**VQ!6A2*}Ms)w8NpKBvDKe{yL;DwYY2+)m=*vqJ)`FjH;Ce&NrlOsm9tLe^@WUaUsB*`Abv z&Uu`PSN0{8$K{U~a|}9;QdD zpMUkmV~x{`R?yPR$0=$&{9;NDRQl_=d|#w7x1;cHq+H!bjLXsnyT@^9>KTBGFB)mb zIXo`{@?t46G2QJ}R!!@lFdu@9>3;1K)5clvaZ=2HNj6`&f(o<34(%Q4zLq&h$^;5L(0TFkerHTlOYwJfFZ z3QY>{2S@IyG96Hp zbczGaW{vvTL77lWbq?8LXVH>I#_=?&dp{Lu`*8jSTiso&nV1O8MuF*6E-OJ^PduFC z{3s!DDC@%&Wsk{1=q$6jQd;id=p9?(oh>-XPN9-C+iN(i50NkL!rO zqjwNe;Z=$K*t%sSZ%YLjeiM+5+g>b4Gl?}kFl4z|{0T@3bp*LS<9tv2qg9wuIa!K7 z*+5dEoClO}XYD7P>5Ru1GSo-%D?(_eXtDOo3X8Du>WA8H0eU!R7_;T_RXRB~f(KoW zup~FB52S$IX|A&qXIzO9d{(U)Tvgs!ytAF#p;KwnvD8Pwl51XaC8=z)!w9x46;$R$ zZQ)6_&10dp9B^DrfkSfqk~uqa;@}oL6+awhYS5f?Bwh^+b0x>p5A>E*RF!lLC_A$=bqk zhELg*&-_75jF5)+V&vgz?nn+)zfnQ(T=WMDCig=S3xmxsrpj5>Y|&hlo9Uq~i`Mc@ zUnaKVT9{ecIX@Dq4AMhz9DkQ%i9D$qTCMs_+%XOQHvrQ0W-D`v%r89$P`qw&y)yqv zU+p~!m^WYi`BUCCw4?P^+xo8eBgNZ3_w8N+cvJ$OQ~?*_6#$j$|Cz=_QjSpg{p&_E z%K+)Wq&uQFttp!PKiQh$MgZ-r>x)=%#zawd1}pegeghp?!AgzPYghjQ*uueBoucp6 zOYLenWF+ld*j=Zo&RuYJ=6q2S_^c0QLpJKkqq4gNsoQMirAT|&?Khd@G4IBzV}(Hp z*MTScP#5GByjjNk5olUJ3cd#VZ&ox79X>V1k)yg`LmCkUI5)Tyv%yJkt99+tV>Ynr z&#}^e4{Lw#v7ZGv6vuhkeYFL^d9$i4z_RDem;T`eh50|aYD@&JI24UQ;}^D}!l$jD z!jK?lZ@;zsm~X8zLBjxQ=`p~Pg#m}hUGT=5mok)Q!gxk`a%J+B1Wr9?xe*jzE(UwO6Bkt?Q7w!Xo>Z2(C7u1Imr$^@XC zRe(XOt;q|(`}M>c;OpO;J4zFGj~^EYlR<7tBb6>cE1=XVlW_NAecs;Lxp7z3zY3na zHPU=$`{sx;vb?++?t+mV#Y_Eb`^N`kxVv_#>;NLbO5r4;)!^{!h|AD!U2L<*ypg_p z+vcNUaQ-9>6D09zecWr`Y}1cQE3luN-h(%W1s>xhJ;R3;u4SENH7FyI$=3Mf~nh0`1&82kh&V8p?}w#|3Is0Fler~$7yZ%=<@3iv3CwBM7yT$ z6ZG!w%K{3pW6SpZ_O|2Gyj-PX2{{U|yq&@M`F{L~qLv^RGfn$Z5J^ZLi8#o6Q`~ol zVvqX5z6m=U_;pZy*RwL;-|%`NaEFEOtDV;N2&r5jzCTBDLVw`nR{y2B&h2gtU~t0? zMw@MMQAcEQ`|a}*8D_Q29Gl4suoW4mkc z- zZ>76gSwd1JemmOxs6eD&x0yH+bv3^vl5V;Vk!nml|ATPOm!k(V_pS}5G4Pec-m@kI zcE+7QP7uFu`_R%E2=k{AkHW8H@R&_Tmb`CE%(-$jkL;XCbHn?IPU(O=FzzA8`eh(1 zenv@HwVsBp1XNyPp3kGn!#KpBESeRnua|avP0!0HNRA>>+)P@i0$Ha^VRN9Zd0L%< z3YXyUSwS=igf|e?iA1r}j@{cNhp-$d>=3z$I#l3(b3cpKeZSY-#Mt_SQ?F=p)dsWc z0~66Yc~D@S;|~kxoh-dRGY)GXQPjk`=Md0C`njn^Sw!vQv3fxh3^gCA$@_-s*Hr|= zzwQz{K-!?T$6QLIe;CGd2d(u#^ggOg&-Y4GyQN95*lfg(;Y4ZoCXA91)R97}36)wQ zc=L1%wK>r<1EF8@m6_Qev$pm@?%q25+Gu3ZKDDulh~EG~-2EB-;M?HqSS_#Pn?X=0 znTn74MKD_)QWgveVX{)ixC@>6cME+bw$c*4!Vv?>HQ>uljOmA5i_GMM(=8I5N+(5N za%8ir@vzNVrFAK>2yT3qYVssd9X^08U@MR-=Imq=wFE+Z@BSKacN~tP#olva%%G;t zAZvz<#zqg1!-;G7cPO-G_;iCo5+(TY*Pz+)0A9}yWQY_*vi;s9d|_8~dXg zx8QNgE;B>N=kzU0&GAsuI1snPh&E>8^#@ZP(1t#U@-^L^GP>xoOWgDG86yJFZ5mlX zUIO``I6aB&DL6PHhj}_8;%%rYxF7yRzr4mZOBqkg?N-li_L#8$rko%VK_+}?p7Lo+ zD7-XV_4*4g52C|x9e7#F^;od_;sg=r!ZV%O-zd6&)V~^~gK&Xd;l3CKEPKe8u);7Rt>j*uwq3ewyZlmySqldcBGvC#amm& zg^2K^GxQiK!^8p^pCGeGoD$K#*id?{0=g!axkKdr@cbed924S$slT+dm@dhC^Y5c^ zA_$i<;O5_P8PKFE#hy@&$G4e#=zXAFB_fSvAN27i`*vENrYLFeXis(UmJ zc<1dxbYp!9VrWZL!j^0^xRa?S&EoW#O^_TvG>)dSqrZJd~?efhnWP z@6k)zqh#PH=Sotn?L_Pzur~lXKBihYTaF{bwF@o{%X%~uAsQnGE3E0EO__q7jr!m6 ziNDBDLL;;}!qX%wwQ2FYhXGc4gd-7R$|B?@Ejm6;NbVdO#tenfFg$~kRVjJMWh%{L zxCG>ilzwZF#lQ5AInPEzKZiwyHKV5YHzOlFm5Eew4b+6qh^$xl1+qwfahM@Rv@H`u z5;G*QdHp;BonL<2GF1NB_Tp4W^$p^^%5z_zldOj3KlhVUaT4;mjsmfuE6hi8^NnXj z{RfSr$wLH<{FM$KwWTzyIumsjahYo)pd=_vjOp zk10XDL3_qE@@BMVV_m;2r<$x{H2OSF6pFr-Xpp?|J3ld!b!T@i9q6#(foGgIa2`?y zsaxl^ldv{Ra>#R}c|X1f;jP1Dgoa!27=bz_0OD0{JGndOJ>nT{;3XT?HWWg-gy^^k z@u6y>sJXfKOLBRivXeD}L^ee+n!bSal#$s0lsbq0#hCTvJK|}`9{}sS^c^&!hS^5l zqiv??xvfZP)M;S~qQ;G=wHp=FB0#Df^{ zi$2D4FmYuUg(Cl}sjYmFyKpffxV5-{gMayonkUFF5dRc_Mt|{PTT$iJImhuR4vQX9Dk& zdQnU=b2*CZfPlX4s0PuQS>T;I>1q7B0q=1X#dj2442t-KEzCuB%G3=&RW=ZU4`7=t zn8OJzs&H(GEMNffIIx;>Jd~Rq-z9T*9*DHoC(*2B=~nU)XUzLorh>O(IGWkyD-zqFlVy#%9#py22D|xuhb8T~?u6a9FY4%UGjStE)07P{EmFh9M+)>r96oh??RB%2ImgTb+9J) z3!jRs=<@4#kk{QHjzh^o%Uhd3$uy7uFF#tJ<0vS(@D%}gw2JG;W?!FWDBPERROVa| zeuPh}j|=6|NI%^KOGe6&pNbK6HlapPKC4*GLwbQDl#e8emxDcS%&@^OL|6O?%5=;3 z_4{|Npc}!h4DJ^Q2Q=W457d+SO4bXfYw;#6Q@I}$H?*$_odmbhaW%*tWL?FN%AKJk zrvHu7c=rA{K?2N~`fvLm|BBxzRR@2vf(mzdUbd6Ql^=Mpov2b#9E(kaX5^3z{tBAE z?{Pd1?ioQTzim)C3Gm3>-#&Kp*sWF+FHdEQ&|40W!m526r`4;Zx89>rT#Y(f$t@59 zMe)LfB#?j|ArtXAR_&u|%hU+Vb-%fb5n;Xp$Hj{Ffw>|S|5oIcJYji&9*!-LfoSuL1TK2k(FodeGGwt|6KJYVKvFEo zjXEx&Gt9Qf#m(~M%s|${wyW%^mQNJ!8Yb$A7J1O4D1sa zDkivvJY?~VOFv*17Xw7T@v6Nxokp~lMr!G>A0m}7&)Bf{q*V_sga3NufX?`!<4=kI z28Y6S_s1@w9!c^qc704LRX@Typw|=(mCzgSUEUWDN-tdM@68fOCu91SyoE;qlbw;@ zB!s@JI$kI|%k#H&u!hwIUE8)$>OfgJ%ZdZyRr1>X>|0VgmG0#5Av$o%0LInbd*@*2 z++0P+Q#+Tk&4vh1eI>Ox59Ef6v-k(+44Xqx`0O$A3-#@(O|4RD5~sl$xCSG*G#zFHK&{|rG`O77(YKO6DNxQ82E(|hB8Cr=dBT=asv2eZtS!gx(uY= zu3yj+HI^L7Xz>;Nyn`68@0Gl|vWTk6Btsj&xlL(?dpczd!SSHTi_4N>ngt(Bg9^ND zA%S_bX*5*9%-FOJGBz+m<&q5{ELL$j8dLuU%Crko|Dkipm2&-M?6uAW@zbA;B6od+ zXBwlv8dQ!vWwS;S66F=-4mlqy;Z3(MMb~_GWVAXC=8%CH6XMzl0rmDK(&shx{mlqE z1}MoKU9jIEA|O(h9*0zDr;l->Yx5RXvRt^Bj44s}-b?_?4uqZ$ILac}kK^;brsp%9 zPcom!#xcrg6b{YEK^qMi`e7O0@y-eSLvyK!r&;IJsG^Qae40i?wOW;fBhg3&(+ldR zLfXb8tI|r3Aw*`2mhJY(f6FQNvrhR8ON6JU9u6$vdB!82pg~WD&j8X^Tlf3f>=FDo zxKJW7-TSD>-6lB-yMjSUoy#13*>X`|$Eoj+y>MEW{@oNx&7y*#F^tAn972#Hg53<; z-DH&qSQTAdNLU*zyWN`pST)9aTOS5SI`nb+G32`njfneB5?I_;HG+OQkwudTHJv$I5x{>CO& zTDKH&gW$1JCbF6N6=t%T`?~veCqwU~B%TE^qa>b#1s%ovs4o0hl2T*X!ihiP)=|*ucei6%$D4OpOzK!63#>^pA02vbSc>Y4MX_iUHYa1 zgT)-CtM0WxJ6Ph()8MrEr6O^)$Sh8Cr)=*1dUZ(n1&-Iv<0K3@!sz%|8c8v^6Dv(p zCK&g^w$dJzB)YT_8VqZH@JOw7arf(UWM1OfRPD9V?<9X{5@$b}m0QH#POpI3XxiI! zOSJyN=<0#RQFeCF93%?c)uzis-_6@4MB`R zO?U?s83Lh@`QX^Qa`1rP5W{;PWozM((NAR|>}sr2Y-Q~eK6W*75cOD!{K7m2=Fkgv zMQ!kv<)hn!1>O-phoTWle$n0~N+U@$AKE zWL7?^H@FdBz~MTRE82JRHa@z=vpcp21B@aT(v5mYi+E6Nm(h@p7WD=U`QeQiGQpdL za9Gl_+B37=YX)C(5OXvA8DEq4DEFJAf6An6k&t|ZIdL4{#TcDEp3%@v>U+@5NBEC# z&mR{dAVc^2GV!DrYXFJ}e8CezHFr<6Bb#9RufWDb$ZZMQe+SR>t`Y>)gcNbxT zHP_xt=nOwKR|n8=k28jIiYNO*oaY~v;VRrDhuPdXh?=hnFL?NgM`7k<9eGe)aO)Dt z-;o3lJ1Vr1?0fPUT#p?K2!sO6 zE_(g`8UG=V(k%W({MBx^(~EueGw7+GHVz%LxQgp>zpL)W-QU#j1_6w;Yxw%--pMC*)$@kxHwatm_gQGCgG|4OZXE3^ZDill5n!%bbwSx&)2kHB zxcBw*mDXL)@`3ZIf;u*VO^WTB8GKx(PP63BOh_av&g1UV9A~lWZ>umT_&=S z2D-)^;%1Mze}jbYe1%L}CEuDy>eJ3207Oo_8L{>T|gGC9icx=wZ`2s z#JIjiH(LG$joZRstOO_xTE&Vqb%|&bj*v{JOppr)m5WcI$rR z(zcIRG?P6L6L|VwXrka%;X5YYNKIHh%TKudif&1%A$z03Zu%g+y26P_r3Bz_{p#4p z2S9=`uG`MYybodm$g4a_fyg<^Un}gMgjBs%`W8{k4G}&< zgeM1C$!HP!5T72&v+AD!XQ6}Kzv0p7t_OioefUSM3q z1vH&_g8`5@-xmN9(X6y#V_{@k;R{IJlPK*`ToYY)Dhw?WcO=5{+n_^y3n$6RB+3~z z7Q)oNjwzjkD2Am@b|rfFQ_=&Rn*U{{xt~`YlkJbQJ5q?%~jwq zT5|0*Dp;Uv5dGEMxMPZj+1z2^|y z(4PEcHuDUO@MGv@H9-V*7h#<}FKC^wx>}>vLbSH_4y6Sjq!A;LfA{lo{h)F5Gds3? z7f%vIVS;HH{4F0IzV3F=z+w5HKk<+f_<5P!qE8;)i$x2X!rh3T5lzSKEA=jaff}+Y zQLrj44D3UJ==u}|9n|()6n!91T4HN-WA&_2Hn}}EW2G^yEQo6Ymqf39&eU_I390#X z@qV?~5?+f1rX1SO&h^yy*mBX&w&0F{q7$9%QwurK$b(qkfKH5qf!_8j@XJgS3Tjr6 z=G7N%=Mz2IJ~o2ZYuk$LJ6cGqcmU1H!d*vQbB7##h|15WBEDt#`ItUU^Z+j2-^1uz z%+vJ6YLJ>ux`!uU^2Uko%SSEe6M(}x;U*z!`DCfUHz`S)?Pv@(&?KHt1>F>+ui+#r zSDK#OVieUib*dw{&aLs7+?jQ{`vPM_JG{DCN^JV6sv#@?RMnZ&?-(;#Htk{ zv6N~hzOvG;#+kz7+aWxmmL$p8z*ABN!~1LxHGW~ryk_&|4f=V~o!`B{3GdUv(AR8Jniy^@! zAx0K;&k^2drxc_XtDzQd47JnCVsZ!I^oD zI1k`$6*f@`2JC5$1BFp@&mCONz#M3{t~oYp!c&{rBKLthWBvVv#^JXEw`WZ9!{Usy@z%2M|uzQy-IlxOB@$@51ThMk6k`1 zMef}dT>#4Y4{PHw{D*me1^&YoMh7i(QE;oUpjtv;WHc=|i5cCHVcao#%oGVonGJ_t zIu9M!mqFm@sA^^e4dVD86)I2tacqtLfj<`X8Pg6Af6bYRg|!vdy*Lrb@9G8T0hzAI ze7*vQw?o}usW)-L8Dr0kkSY;jmx-`KW6!x2e`7Lyg-&>nN8D*)B+6|DkJQ5Kk)y?; ziNRdT&=5YdpdDu}Pf2{m!!)z~+6?y7Z)x64dN*2gg_#fQadU9vB1}HHK#6X8-5&7T zE_ivFx)bqkDohPDk_9%Ge{z3lME$~t0j>F1a8}VwcfISAORRxDvI6Hru?MCWR~hp@ z&EQJFd@d+y*@0k(dJv9)>`OGx0*8eL1#lpiqCz4!sBcE zrkfyD+g8Tb8%&jj2|QrUVHNIlz7o8SGiSZ(q!&7(2h^Z5(R#FmbFtj?%H_R^U!iMN z={9ZBiJsajjJHbCmk+9J+OmN&_cG%C8IAcjAN-CCPJdL zo7ho7s>>w;*enE4*ARd~EA5=16QCMe#0+&FMgIUGzOFni%nyTb7Aa9U8%%3HiiXG# zox^i?x-KuGo3;yY)-<(d9-p)dW^)d;M=?I7r85&Ps`ATuFGB+BcmjlV1uCZSLDrXl(f#!7dm7o4X09(IlnNtK zflsCtOe0^!TP3%iaL5%)LtTKBkyz>tx}tZ`_CN4|`CP-K+_}=tS_BSs-8)fqL*#I$ z7jvyJ0Ls+O{jK5dH`hT{gczR$nFj7wtS;@go@{bXKR{!s*-6RX%TgN!bRo9=pmU6O5$6Li3_}9qV(UFfzVt7F)re<_OHNC9)))qb&!)%o?cY= zzzHD1^YsMLTI;j81HFIo)FPs38e3ZB#c{2!x%9OCO!V{7O(V%;Ueh7H$I?%p8?@W=|2N3CWG+qr?L>0q={F!(g&AW56iBv)#w zS5H3oyhqkvtZANGyc~ST(S{?g%T=&UE%}Zk%-Ql%Qi8lD^Y#KK?jqf7O>+)8xo&e~ zgKje&?pk@n1DRA|&T&Num4HuN!5y{JKjVZ01CPYCf=l?gUl9UfW3<8y=~h|xwt z*W3du7o2?K1&)3V^hw82mVf5nkwMUmn?I+pd6KUOAs!TvV|s)sRq(5-E<_qf5OaT6 zJ`|b1I*igguxK4h>aKlM+-etoTTh6InQh;v9hN-sbncolb;~ow0c=_-8g4tv zj1^cG+Kz;^i2G@*W+ZwxS0zej9lC!PXcofe40ula$|0Io$x9(xGk}W}Lzh_jS_EmD z87$C+XFSG0ZaONZl;Kh6^Bd8P2mA*ezqR*^tiBl9l%_gzoql-bMxp>JAtp><@Y*=0 z!%j{?&xKwy_+Ckwy=)0_p?><*>irZCdcoYWm}ah7uf^=`ica8=7Xh7bVeviW z{lFGO2Y|ute}pFno*to;hlYQk!h_WdQsFLz2DS68G~e-Wb^X+?!qPiB>)laSg1S1L z(Vi?^d2qYJu#SaFh5BB$tE#Ho>G1@%i@;G4%qbc>f$dKKne7D2y`=4@53*fv?Rvx8 zB)#N`ygqxrIuc7;F|2D9s6H^x62H}ICaH_7DcTObBn}Oo8AnLK%s0lmKE@uW-Ymxz z&A9^d=|QKMKj=d6T0%2ilAXZAQ%l)WVY0?5T^@(yNBuSk48Z4j(<~D+e+pv)yQPB- z3r+${KZ&+0EQgUofZ+{A*KpZ!)v{db6>i^`Wg8bYA6N#?j^U< z{ml3fdc%#zzBYfncTHwhchts2X0E~+s<36u(V?+?j$vES=8EAds>?cYL<5^fV zoSj_sdZ))EV^zqoj8@)hwxzTSUePScg8m>h?7(HhYZ$hK7kv(WCzP0>7 zTK*snr4^RXwqxd}S(Q$vr9{+@r=}$mNc~Fig$^A;^;Cu<-m0%mO-mt&d5*d1>B5!* zn(qAyf=0f*% z4i`G5pe@0N4!=vj;KfN{4ZthUCT1=BC$HS3)fVU3e4z7;mtaX1tK}`RhBhCUu&YL% z<8rl9Px4Way15@yrw3Dn~&yup0+}u4j_CN`}(}MC-|L z(yVSDm;?{a@d(N3184-Dc5Bx0*Y^vTWrfYWFspk3yTbA@1 z%1;GMoxAv8)liKP(^5K9oi`5lk5YGW3KMI0&OOYc62$h{@tt{b4&44&~a4T1zz ztnn>q9GuA+6qUKh$tp)wm1&T+ss^Oz;a{HbTdeIk5gyrm3d3(Dc~55M9e9l1GHkS5 zjo0jzn5aY++`Ge@GUNIEtsA+Rw}pK2tOWC0c~o;24_N}odq5_O_qon2(FQ2I2}9qt zf?22hU>b+1Firq-Fd6xodb57GS0_4^lGd+T|2AmYVN{j0)u^ymAuCC#H_J`nPRY!} zIADD}lg6LDPa4IY@&Tg=G{|jOP`S_KZ3^^%Hq@Yc&#|(n?j#uUSeU4I`Yek8VYn~? z^79EVQbB>d9;^gN+=G!5iBk|YRwdvYCEse4`6j*%C%z-Z2z^^c{g2|tXGX$QVyEI( z^H73vtJQ1N%eErtDJ_{-Wwx!a+>dAayvPh*4RsQrGHhi_Ka)QtP}0xL6?rj1+H^#? znuhIp_zJAPshq{gr}fM=2lG@tlACrA$G$aocH_xl;5|&KT(0_N30Je{l`JbvmgruH zUo?zEb)z7!96fpAsj?0HIFWf8KPeTwF1shEUBJC|gF=t*LY|Bq zV$tL;6QGcrR&nX?Clv-&e?}?{BiHe)UCg%Q@5VBlLCWQOUgGY?W7kHRhTNhlW|-b$ z>UnnaID~-1^tjzWJ%RC7SZ2h9WZt*pZ{z}C(6?$e2-_rUbp2R}uuZO; zE95<^Fxr%KoYr(uqlOkPj)L@f&|0E63Ul>rmFsEVgDyHJ7sib6rYY0Gd%<|YXKsT< zo1o^;ksqfXGMEpRq~=nQslr4C)MblI6ldn zZ$%mzr_NjM!`Sz15ELHaCx2d-G^a}mSXnS9C!|us{M(OVd3&y8SF6?)N0kv*Jf9qN zJHB_w49SBEWb<|zv8#wJQSrHSi>9EGFiZ1? zB^G9gb$EVX=nBp2bFtNFI#BmBCbg zmrY0z3h{l+ze^c^<7sWomt>+> zDonH*Xn(eCSJr1m3V_vf&~K6CmqF~Cs-xyUllg7d{hM;9(D*+ zWt^?B{|zsTTsJ^|Bw!CLJG&(i(B~+jEo_e`Q{F+XQIaLQNO&buG3Kot z3#lwmX~I4M{Ka*8mHAQ6+ojTdB2T!pDh!zdU%C3wZ>@wMpvB~gt}?)r?o@uvg504@ z-+zX-KYbH?wzgj?@$Bn?73u(6qKu3lD5Z)+(9R;(4}lG0rwfre7jb4j5((n3u0QU& z1B1Fn+Y>T6tnp>3OcBK_&VG1<9rCKD(yJ^Jk(Q>heegywOCyF!m*|WFgL9GR#Ih&@ zr)wTn$GgGv3p*T*(UGpekb^0W^tlx6^NOcZ+NrP-epMP^HZu+HY3?n#TAuPu4mOBI ztyKEZDQ;y+2N$?$?i=9_%9S@gr$Jv-4;WK==UH}PX%()pX)9~y^CpqZC7UNEHKCRW zBRI+mTbVGT%$Y4Cm28^fUJj31*jKE0KV1Zz>x8GmreJmnvnkHAyPacxyXDzO4P9!HU0(CAFlv4oRgTt)Ll&D1RlQ-Yf~}lTlF%rL zZiR6l8E!$WRU3=h55@ksxXT8I8B2c8W`1ZH)(1>8EiEiX7Kq9-gzqU9h>Fl57PUYe z94ZsUFdD|LkpQ93bvJlhQ6)nDX$F;5thKeavCDJ zjPM*0RIiDj!doIUwEF-GWC{0~nIenyg!w44+!axiwWNo;;;r2I5Nj^Fk8HwkmHVbW zlNHYA45J;ODWjM?K*N-Y{)F<}WzWw(R2b!pfcZ+FinU`i+$*RbBq}GgCwN30m!76o z*zDeUGwc?cgJNc`=Q~ZC;&WLmN;oTXx~85qlzJAMcVlXQ_IYrHJ>eQMyQgI_RISu3 zl?#xOvre9t*eryhpII3AkElmcvc38DlL~v5jc^Kgo=Y4s6NG6}x_P5eSO&=Y1=TU*HFyOTWe)@GSedJ3Gj>?OF-!Jm7ms8y&;7OX$*5FSY$j5+JgaBJ=C*! zwku3;oEwL?NizQV8PSt_YnRV&Qs^m1N)kv|32O_=4Ah8|_WU(bKETDEiL9wVfzRUPw zj7J&lW~2kEnNBq{f8*IR43fy*)j-1JU`zDtL2YI+w=+!_Yc?}AeMPM?)7L$;6F1>8 zj28A30oW|kNb1elWc2#v+VCKj&^NhgM^CO%Q&vF!FCMRcy{3$Rc?he^m zb%&|~1FYd7{#@%)k>#|Y2Ju`DoQG1NAGuVb(QtM6z>_{=yfUUO#O&-No?~b(#VkXX z6}F_ARQlMyQ5;Dtji&-?yx0x{Waf54QE)K}CrOMUU_O}uZ>jF(mdFJ6Guy4PzyB`~ z{|7s)O22~boNx=W;2rq`w&H&wumNztw_4G`w(0kl88z%eWfCKKQ?@Cgmk1JZV`DogdLS(nRw^;fy(5THin@Ve zF;7o1bfU{VMATd=_dLh`QzG{u6zHJ5kjJX#Mk7P$!@%y2ZSxR$Biv||Gc>xe3V1mXPms`#bqUQ^k$tOx{-OO2VDX8l~u?;K&h z#@tk%RGFUPwIQbjjrnCKHdtD==)?x!ne(^?&#;l-EHM-#C#=q8rxBd~l)`^bdS8Ce z?*i$)7t-678oZ!l@>TExy5fv|cURg@cmEmQ#M};xdBRgmEM|wqtTHi%WRlMwOnMNS zLC{kE2Kh9kuuY754_va$VrCLAwXs(I@1@X{#(} zeN%FTb|>QuHv`{kR-cXnpV3#aJPf{}LvECc?g`IMt`YaMrJ|o36fcroEbFXG`Ug#^ z1U$QQU@e;>NlzpsB8}#8MO%U^mu3oX*p9t2+3F3yOy8`V$KBRbP%{yTG~vQ@D5Xf-T}hj z?XY(qB?i62-=Gk@b0{IG^G;T$qPikDl&8SKBsKYMx6u9)1Anst5?91>P(q9w&j*e< zv#?lbzgEQ!$bNm{ipt$xFAa@_Hil9WCUZm2?I9khU@j=sfq6;jdG!E*d@cj^TwZ*7 z7X_waS zY3N#96GZnpWqKS&G63X4I)w`H#8=TYrh=#e@gDsylM$YSB2J2r2oqlk! zNS33{bGbi(<&zCfPbQaRUAatlPa3@P=E$tc>*8|vx(6G^`Q=IHbLY6-?_6G#%H=@6 z%Lzo*#1<+@rl;ZH70N1Em=`nAPR-U;g2akjg{7pTk{&_sEYll=749}*>E^m12Q>6=f_<3fb3VSMp*L=(%h)3}d z3)Q11B{#(zmcZQI0*8ks9Yjz9p%olNlv(Aqla?-QYgh!8+hSG>V%b^PvLlzJHmXG~ zx1A^#yj)?8qn~rZ%dp?`aAlFK0Y-q_O%^ZOfXL-30(;ZQ(8tSqlw{~bzhc~~@5Bkm zN>XDz!^=1yvY?V12konVHg^!K#@Z z4<(CNj)zoL&oSK(g})HL#oCK{Ay$~-hq$m8V(Hdg+t1lou#8Cu^huo9)H&KL$j75p zM(N2F3b&qki6McjdWdu``$6~FSfVpneP*8_t>k<@VGOoT(fiRTxDv-<4Ct2CugrK} z?M9)y1TQ1JGJw&BGHc{rxwZGrVoM#X~sOab+|*{-l9 zXAj7T@YQTCx`)Wi3-Ep5Zxb>OW2sYz`68m`50GfKs5(6+O2YV>No4DZ731wGYCSHy z115R%0x0kkhfB@r%NJ8V2d=K$60S&C$d z&QW2{b^&i3=qB{9;mEzR5_RN@*JP~2vg0`W*B8eiQs4s%1*q!QzUNxXQ@2bxgFNyZ z-3^2~u^}F_==5Uvyj->;H%VRj;F@6r<}xAU#&T?zPo3UAnR$H~anV}1Y`!pbdgh+` zZzLg#^<(+$+=OU~@=HFU)*aHcB5&l6))TduMT|`U3X?(eB3ZnUTOd5WpSiN0K9E~R zI4}=#KFYw>wH$8}cU_8gNlg?N>Ig~}*inznwfCawY33uh#UO-FH?$)pbn*tm%Lh^sdNP5-sRAzJuL`JRy6z~vbMwiRcovJLZRI3`E&pV+v=WOZWA;wZykJ6E9M7#WnK@JOxqWAO zKArfB$GF01hp@aKFy5LQMQ1Rj8e!OrhXKvxJF|$_gjxrw*TfijLb25qQ=wr>(2?dm z#h>Q}BpGzWbKZ`uN3M!s#}st{Tn3;9EThL2`LvYP2zicQ)f5Z;bNs3*Q-h=r)Byxm z1)*vw++9!pEQ~ynZevR#k*T`c%%Re9!~k(-@Us`+kUMSM`}+CHG!pfCUm42GpK&XL z*`wLsVNPTXl3mYD2D`Cq$G5wn*zZ}i}Vyf70uS-MBqt3}dizU(c-m!13BccoZE&g^Lgo<-tO z7d+r7&LClA^g9dfZ$JbmlgKztJ_})+#T(2KcYxEe5$r?gqn0L*XjFGZ0tu``2U}!5 zcLe8{m01d%%Z2dduN358xPzE{r~<}m4XN0MpiJfe8yiU z4M1e1<>&at)!{48@T#A(ZF3Q5F87nMjLZ5=4s;r`$lNIqhv0K_*{~NljMXeVsxr9Y z0(kBww_)nwj+rdE%L|WmL4xBNn&~(=qSs<+=_yD*HjctO54+>;VY-oM>`p(6Db;A^ zsBQd2Nt(G5m6=bPijS=QM=%ikh$`UK@!8bhp_JaHf#j~lEb{64In&4bFlC!s+ z5#Rk|GaukmL}tG70I;PMu4o$eId2%CR(a=Y-W}w`EstSTHT77OSVv6;=7*ddBmOGd zZ=-NzR$n)g5iPC6dS&i&8{#G!Xud%R3>GhJ>4;HS>H7K`~m*wY;JdlM(@PJ(tC zW+N;Tlqfh9LBdQ1(Q=C@G9Fn8MDeCcz$`p3K_O{G=}pl_y+RKCJSQR|`nT*+bLa!h;&O|4o&=|%CWbJ=6u zw?ZD1ASo{9B3NNdP|fw|*<22fcCtvea!|)?17$0NrFEm%e9pSiuiS;OA zmS>7^<87%Hn$_Yl5AaO&;%D0{X0m>+tiDAy%^Fs+uzj=!4hFHC;PMfeq*QBo2lD~P zhRt(!hiefkyga8bBQM}-;NUxDX#>UWmpRl}Lgv79H>>Zb2B>putgqOD{fw6>f3EbJ zD}40a#BVj-2^Jln02v_s^0<#QcLVtnqH#vt7j+p8zm-`P9d-Wv)M3GMSg01*DS4<0 z?7WPI*MXO$SyZ6`Sg6cG3akZhGrT{y93)ChRM<-db>@?1@f|g_GgL5-xM(Vl)0`{* z0#%Bor(MY!ahtjk*QjNz1mb+Ds*P8}7c>vQS z0OM2JVH=NljIsodcw%mSd`dafWmPEH6N^Eyz7rvd2>#vaDcNL32lx!u=d)aih~G^1 zFRk_El4 zEh`FC?TerkE;*X7;LL`yu%&U@Ld^w*g)&iT@!D7_7_&)pZGO!2cFZW-6eM=7OiS&G zu)-(lgM2{jitxRN8r-PrYA_W*)j z9(QWFjhdpzeceoSYz3IG+VZ)sriqK77UWLhQWF8)cuwV+C&T*|kA6Q;2@mcpekM!K z=8jpOa6{5ljoie_h;p*&bz_-ROWl#qqIh{-40#up88OJK3cKue{t!l)#T7E1@obq2 z8LzV0b?@@&YO=Rp{-`ixS8QZcdhpnY#C3M*{1v#6Zw14NHFS4XMy^!9y5P?+`OKD) z!-Ho#0&c4|J4XAeupWxM7t8X;H=-<8Wk0Mp3+#vSV_DwrjrV@5%MV=L4CX|51E^JIroH~x;`O?yAv*Q8e;?*6}^?(#ZjMtg-@jHv}@@B@7K8r9$ms>zbV+ad|21Bs}zUh_ym2d##oHo-0) z=0d1p!Vy!jo|Ca?BJiCoCKgkFvyzO9B%ZHll!LRbyV3rl=1L{&`avQ1NQ{OiIE{+z zRpc?n!)%rW8S*8x@EvnS_O8`5hZdCzOr{fX0;k&W5-wtoEmty6NN%D^b+1>sDop3x z2o7xe{Z9%dANk~XaBBC-ofn2a@hZux!)p}d$zt>s7eTT#c;Jr-z?nUMVC)L*8$B)W z;&9GUoiq7`Y;}iHGO5on^%`&;S={X5d;htPcwT`Dn>jP2*{e%GU4hq;o9R_y_D!4L z1~z*v@5uAnx5f@wm`0pIxFq>=;-j-_>wdSlJ<;-E2@Uwf^S$C+$ z)XukawolBsui`Wfusl_s&P!79FzbdC;!Xm>r2JvKn%vnU(7j+X&k)F0ZY)SI0^>n`#0-Dv zJv6|J!Ub*Wf|Sqoer*Qos+n$(CX6|0Q!a`6YH~59eDZz022aKpu;7+1!c-C}Y?tM7 z9dSIivN8D53}4|RlBULL++%Kt_o=bOn0dC41<}>5s=Gd_V1?UWbBVtUf=>|$qW{v5G565U3HIb33W8H1FP>yZ97n) z8qOag3r=S?S4PP>{Ol>pI{Y6QF~XWtL$N&%brrGc;+V=i{);ZZZd#-HMp@Ggppf8up6cJDmUwWty|~8Vs-Q*yG}iQ zcX1EvF{B<;%-I-4T=R1@E`wMXjun-5eO8j)k6l$TOoH${Ta9P4TAc_g@HEJLSbNeH zQC!WadR0P4zjMG@%3}>2iJr;64I%Tta8~AIaEaj|Ggl++N)&JkD)G7X^YQcc|FNPGT^E zrgwfA+5+`$8S@H*P?Cg=2ayteX=ElwWz)-m7|D{$UDM9Nl1oc2XT9pNidsvnpb{fc zUW8f_u$%-xcHGojiaUb-V9h&%=Nz6H_k%ao!1&dWS$4zPZjh#&T}_V< zKZoAz9+eKx*V%21Tx6<{0G9N`gR66xB0XV7m=jWP#9G%_oX$?CI~U_gwJk2zBUhqM zC1JBB3}uDj@yH_5q1-(x#i*5^TG$0*L3prO9Np-8)L@d?EM?SyV&D+we;L8RAw3t* zOqW?z;HW48DXT#K?PRH99K1TK$1s;nC61z&QCB$4w3M@nvED)GUB$I$d> zVEj*pZmWFUhK6Hv>ZSLZ6^kw5Ene}S6tE%wjrC3BXPa!!61T-NMtfartV^b7eINLH zeDBYZGa$8mVBPG%2X+Cu9`+AP*#M^K33#EX)a@~=scWt7MxoT^q3#~5AM6GLB1#Lq z6GrRvS7MYS_yz?lU@Sjrm;$(37@=nF{RJB-_KghL$}?6KaB4;`gIyL_`w6rRl_j5TZGTH>2cY4)<3Iav0# z)5YpeVqMVoQd?=c!yU*jyaeWHR?QyKf;F&Eg=SRS*5Ek2@o$4D9|hHo8=XQ-_CA-C z7YS2XtVrJyZ&l%!*FB0f=y5xAr z>Wek(o7)X9OT!RjPOt$U1OD_0DZ(<%vv3$9@`0sU` zd0)8L1Ro5wuy=^yH`v!nkAkaIco7O$Fiyx&A0n6E_8JRRG%JXsOS-GWph)2`Nqll~ zyzs>T?hDffX=bJ?DN!M53@O5(PTxdbXeoVq%t!`^Uv)mGn`u)>B=FRqtx>DH1SBjE z6)-bBr}J6B6}oCI81|Zy72-4@YC-QY-avU4ST5=J5J-c!n9u_&m|z?7T;M=8($aBr*OMqS02qV8;^yuqFt zXo^*#={h+p(=*786837BbZ)(pan{f?(4DQ#(r!^W2_EnB8(b)88jIQ+6>-1xu`&!x zDwwyx)M3a!QbpTd&eIN$oy!rk2IE;AmKo?hcF}#s(FS_W9!pYu zv&=2Wp#OaNGb%cnkVY#)j`QUx`pAna?GUU@M5kS-jIa;A_{|3G*?rsUJC3sAyag!*zPOfJeDk1_f3nGCt9bT z$lmkmaYSJS;~~u*DWR_{(}t+rIok7&OZ4+1#+(o(1QQB=i@Ow|cwCPm0eqs^!soG1 zj8ExZybcjULj+}s{_y4)1q`hXDxk_7uR_Y?3zz%qspM!MDQ>mHiNLK=4S|}pOEtIy ztu(Rt$5J8GAjGlgtKqqq^&0%gUL7G~mA$NW+Nb3ZBj|6BHHH{%vh8a`{5A!hcXLr^ zEVD-1{L=Dk+~*7B*Ey2?jn&uxAZB@I)z@6Zs;h)C*u<)YP1PJ(M{h z<L6nu-~T7cz>oTa!RE(&GpweuJT5#z+gQiuC7fgP zEe7SYfnEp5Kc}Z6Au+Dv<0aqiB|ivN5h@^pfLsV(=|G=5uTtR1VJ&*h3CHw~K>F0F zvMAIbz~$)6NCHQpoG;`}`ORk1?s2jQDRl#Lt_2sQ&Yi;7h5jvGE|Y0Au3s;NezROZ z-l4laOM_()`d9G1t2?mRByTnx`oUf48av!@*w_p1G2!q3sPbV{qWJpKR#Y|*l$L6d z9BmtudcX9tx2={_5DEh)rzqJiF(I%~a3cBwwA77_ot_j_AaKLRPNrdpI&qN|GD2?% z+*}h@TP@W`mpk~R%wh_;Avl_!kf+_OPrYZmEqtjidzS8)2s z&v@n6XRu>5c=R&?rx{mGqMw25oh82X*I?_kNH%L!==WIjn(GY}*ITl-Hh9cpb(*<|h8;HBUu-bmN( zJpBW?ovnbF(Ym3+ws~@WBSB~lQ#(rk<|UYqy0tkamciTiPcp|$Co3Dx?74x z<&}wM{ev^_0`qZ>G*K-Ywu{979>nW(0v;U z?Sh!VEO?jBA8~g}B5B$)%vy^LU!vNIE#yhjh{R!Mg|Z8jKCnf%qZnEhq)U@N!1*HG zUwK8t&rzNyY%M4Iz*jqAK8)0s8>J7+BTR~c%-D;U{bhoS00hI3yp&Nj5glkCyun=$;44Mo}8dl zis8eCXa%ASXlOsxeL}rb7?)Rp-+FeiuvVp4+>==NYm3rji;$7)v0o`hH5~1JY(yMW zUL4h9T_c#*4d^w?C8<*B5Lshpcm5Jpr0QxYY#|OY^0%Lc(q7$;@wIs6wB(2EsgnFS zLdq*S+eK*`rV?~xW9v^SeJGs|aD<;u>BHEagwn@_mt;m^KbZQciD4*WL_!ma3M9GN zLNFM#3uE($~T`!%885FCH zyKT1pj|VEIy5bsm^COdi9@}~hTG^3+V>P3oFX0VDde-K&O9GBCJwCDubj@bBN~7iB zVC*fIx@=jYZlK{P9LYtRz65?aPn}e#mlr@chvo-|5k0 z_hNiGKD9S<$}nM2a^ztDt`m}P9*IKQ?S{|nU{7Y@k~q%h(atQ4Q-3E5%z(*@*Tkr< za5tWiulaIX4FM(^F?o!6{9qfU*~$v{c1p8bY9s2_x>qI6_jDd<7GuT;*5qg&K9Xoh z@<@Ixsq(nPnpSzc?Xac^(xv2kTzUzJcP1CkRBbOM?yn&0q`?ys*I(x6S)8^0p%b@N z#8#eBh9}SB$Ypr6M`w`Rxmj>du6yk1M0m6~&BzWp#u$1w)rBr&Z%GMo)JVaDY_(a_ zx+X*FQ&)+OK3GtV^KoichyDT$jC`~$6`@bz;?@o}2w3d4LWvwC&TM`T?fKdkq50LO zT%x35K($0(!;6%3CjG~h;E24P;9^{Sgk%$Ak<_i_LdZ*xG4C=x?fTM)lz`#GY)PsU2x zArC>JJrA$UGr29jdw<7^<~z%H?uXhhz4x&oF`6@K&y%*bf*|~l(UC%Zp z!KIg?*NWJ$=;|r;n`v-s`*>41fM3~VkMVG=BX_T%%&9wm2TK|_FC35W|4J6+O%SK- zY;)$SCR-)UqVA5*MsEC0Bwu?L$=7F?ow-VDK4Vb_x>#l1dNP;nk}Y&cl(~w6XP5q> z99Aa|S}QZJEa_lR+aatTYe=+P9@pL1aoxlCAqrz}{u!3%hhVO)=FhY;QxjGuv#+23 zn!ZPrT^KBbjLpU8u=LiSbAaaNNbkm|O8{0tslW3`?*G5y5xH&da@*BFfd*Cj7zPXsgu{~vg;$YBuRNNWHb#9R)jIu60=7geO?ms!v zaR-DZgHhj(`h$!5xD%}0S`4EKi=l1ME#jE_%fqutyj;Z*mdTm+PvK~Zyse|*prfRQ zV-#}Wt|Cg@)22X|GMLNrN2bfcloli2srTdJVLsNZRi~mTt)~H#-Yxi0x){wMD%csY z|M&mF@{O@%AJr86Jcv@7ZW!8eRkH>UPS24;wRd0}8kfQCU8Zdev@l>jmo`R%M>iQ6 zHSS=KZIGF1y9f;WI{PDU06`9>k5Pt2JxD$&5C^iUEBWL`)4PSv64up3sv8o z1u6W(ty$62ospuFGOjj~Td>3V15iu{vCA>h z7@>&SUz@3z_3EXw>t2hVOWhoctWJm}o%*vo50>O*s$G}q%A5H+slW0_7+SEXE!a|> zYf=#3_*~#ns11SHd+$H~vT<*3Wx4fOGo_CDv9Ev_J99i7y7Bo9WTlQ;R#;*mdhzri zAC1xo*aohn;9qNB*Ddk)ESOXE=(gDZ_OO~9V~;gL-qqde{Aix1rj$)DBTPY;TZSn( z<-zZ$(vzp}fN8=BJj&@ikN~@hzfaJ|_If;Z@$Zf9)hr1o-t5l2SF*{$y>eAJv}aWg zO=S$>D4I>ZFvBkZgS>>Mp>_PA=Q3ozZ-kP*364|TQdFtXSFnqw|1lUS22{O^Fq@xX z^7VgDk0!s5&yJ_3|9kb1i=*=Chbd$yDL%eIG-T<@(XU9~P?+r8M?*$ZQveA(AlN*` zDUz|MJ$*<$CjU*Nx0qOJ6bq)J*V0QFe;c*tJ7 z3F>;1l|&md3u+Q=ER4wvQ@O_mWF`ujxG;9|gKOlmxH4p@&uf@4RR9h9;LDC-Y*I$r zH!WGx+nHrZWT}ZQF*ggQsIQL^pO2swpv9;@9eEjnS=vj6WDeSQ)&Aj3{IG=J#PnnTWU)(6#3OfryPF?=G}tzbY@ zXFu!)K0+^qJ7FP8rT0MaWC)h#P=4 zu*GgunQ=;R+sFuy($7IOzbF>*+XtL-+f*P1JK=%`A3iF#DiU9KiIG{#1?pkQ7>b&~ z=uQ28b#(z#?bc7TzvAO>Q<80}P^uHQ&XvQfOZd&d$?v#LO3L(Bqz1may0o_5-%{1NK|DLBGXM)IaskhR-1Wb zL*8w_l#PPx#YLEKfixwR3bq<4)rEcvo23jQ)q#)J zU{P`yTa>~LqYhR@C=xI zRBrmH!xShO&wH(vT3{F`wZz`7qx&d+0MlBKm;6c(2mkwhlUY?#@b7R|<@rnU+^F>5 z9ja^29xWh?ASsl>%yc3zfX)I7!=i+h(GHQMsi`ta6|`j|y?%3OOOLrCC&@F1TAJ?H zJn+E@3(4|=yPoo)(b+XA8ucN~wO@}!Yzz1t)8@^SbqcSG+D<4};&AKQBWO=`jZz1V>R66fe!@XIH$Gg;U3eCDl|q zQC5m4g-6aEeO#h*hYdkeDhwj{|9|(xRe`V+Yg0PJ7xRRry0$ZQqyeDA`h&j87nLX> z!Mwvpxb|EM>9M^GQl!IIJtsOyA7re&sv5ePC{h(Du5ac5P6-%t$nzVT>y_+`F&t<7 zg!C?0sVs;9khE|y1e=B9i1NUqY$d*hzzir)sK(*O$Eqhz6@#~LwF-+qe66|%Q~1$c zBzXfp;lT6=!Kb}=n4bg-UndrO%po};M&R9$6MnP_PmT0w@<c(q|QK!U2zIM zqG=O{WdnMkjnwRhx`#@#3F)zzuv5&+KNC{ZWwrOnCYXGX0rC?+y4A%iCx`%n_jsRV zJdKGn6$_3ANA?jL87~%v?6$!===(eA=8yrOdmy)>f)&y~T7bK(&OBE)va>2hj3nS1t7 zY%07St02Q0^Gq4L;1}_N_%a&F{gf*GREYfOZr30{YYpfcDVPbm$fmo9+~r^X8yUDt z*N;|2OCL6{&p4y39N7?KX-v*$@L+1%(J{S8Y!K()ZKb$umT0`oCEJ z_t%xTq(2&L6O~{vt6&Bnoave_!eSkA5j!*72Cf4<14K`O&s*(r7>`zwV9HhD%-$#4 zCp5zYPYYJ<;t*Efn!%oVYc72+TpIZltCp#IKBYCmcNHYmkmV2>u&B&z(poP1-Uq84@6Pw;C02QZg?7t)XhP0XiS#q~RF3q!Sl@*3$m-1%Jc#Mh1QCAh z-754V_?h=?g=Yz*G&g28ug40Saf|+qdAtFudznd;D_wO!Ov(|xW?&a=xj356l3&86=6Kfac0eZhduiu3*{2_nIRSjTBibg9kjA zHM4u4^apDsnJ_KsNZkl^!0M)zgaF%=lGJ6=Z1PA+xEy|?zMq!c$lLQxnISw*@p?`a zT@x&B@CE61k9B5c-db~zlS~pVTPqH>^WM0*P9#ueVJi+*hFhU4aI?)=6lb`>OC68) z5l?U?o(MY&Yxf$q@aZbf5NT&;P|PDQihHX{%SxrJBcD3`dzP7blriIY{gj|xf_wm{ zc5Ase1}1Y8sj3D-RTjhJ*;O9scY3&oC|F$k1qyZ@1+#drOPt%}L3*r_yV^85ZL){# z<}6E*z1fla&)UY6wQbp>9O`VHB$)QOTQ9vx$@20~GOm=uDMl7bwHJd`(h5Zq{%#7i zbp;5XP(udhyDY2zWggAqrK%_9f&gB~{WzmOrSPP-K(O^#ai2Up-?^S1UGAKoA0B@> zo{X=K&(CUTFBGe1N;gu}X`P=())p$-elBN$K}w=-#MH)j9&!mz;%W%cp^@m$-ThHl zaSm{|oS{3(>ev85CPhFSd~AsXR+2Trlk0-Iz7`6#nnt0oEgRexFcM^jQ@|4KF|sjp zTE|O2yNl;7C>3x?*k}_qp_Ma%YI&APeC}}7rR(nIYzWuQWV zAXf{a+AC3eNhC;$;!9vwyA)r_xsNV#BT;(v!=L53_C(v3M-A){cQ}@<9LAei5-jG= zum0n2exyhea1bz$2!JfBSgBHnoICXHsgOf+AZ&l^$Yg0>zgk%H%f&=Dgq$s`_~}>d zw_T9XV-EEBnkG`KaA%*)@I)yb0PS#v;_40u*j5tP5Dw5{Vv=4=X?{^u^#{bDwCb^k zd}EhvV;x_)LADWr-rd1EyBaSF4yxBdcAe7l+zO*_>jTb>y zol@hiP&}Mc*kHi=n%tn}_HUD79tMCWCPH4u6BOWD_(>vSEfs*kE#>9;SW8#yt%&Ba z7|y20hbG^FmZ9#kL&lGEhBLZl_A~ar(ZJmMsE(Z99Mxw8F}o3{r5@KVK`g!UyZh#q zM^E5eoZP1w8T)F>JLxe|+(AF|V4T9^EOzdk=z%GiZ_xqkd*zN)|2ucU+i8L;3>j7B z9Y;JBSykWATv>Z#X&z@duP+K-u^tRR>>5=m;}luo{rU0XAA$d%TyAtM;O2dYHcY?L zDR`5(pW`Lq-K|59Q}jG>0%1cMlHbpc#nJ=Av7N5x@#Q)igTG*ah{+3-b<=gLrU_ik zbGH<2i-jfB=s!I(G%M5nI#Lvj368fp+gkas(9Qi)s zAZ3?x?1Bw<94a+5WoBFvlJI{NrI+5@N;CG-+fw0YgOEi@rCD?PbGL7VSl}B! z4u_{+5c0|dIg(|Ml^$(tz`%{ED4lb|Ry4@56&*(*d<`mdz|7IhC#{a~Y~ew6ct)6p zRG!pOuE8jh-tPF;WnC=~O7F@YpLQ)fE`1h9J6Fg~AHjSJaZrRoV3+<}mMjYq>HULY zlckP$?Ar2n7OzJ^Hnz6Wx=K(q$cME9EmC96vk#Ome6YSW2nD(#vfH%)az&Is1NW|T z6=1a~(%{-gsjR!S0+oeg%$HDcSLz7tS+qmP{9@*$St7>sgm9#&&C=@nZxq;cfEXS0 zbs3>4cQ}coMQ}S#d`}B8xKY=bVidnqOrX|%(;_a?`u}oualJw*mP>TZ6elshVee+J z2ra?Tmz=tAG95wLm-mzsUejl>NIwYublZJ>J`tCya!Q2--~o-Xm8CkRB$ZLY#nG6e zvNEm6X>BX91WQ_CR!pa9Q;p@O)Hwo%u^gP(0JXVS!vL*|KdY3kQFa{JW>a}P#REiuY-C&WxyOuXlBEJzNFZ-4 zbNL_YusmStlN$gYxjVH*1!0HB$J^SXMB8i0r5*Im$$A|j?c$ZcT!nJZQjPE-#XB<5 zjyDcrW{>y>I7i6tBj_68VOKC1JHICGAPn45n4_hN9xnjgSGk(mFQ^wyg3Dz!f7O~m z-80n~{N7A9RjU9{_8#o)W>tT~!KkR3K>8mDyTGD2d;^2Vx2~$<$~Ch$(5-CV=If*? zOAWMri%W@@Tbn8%K~!G_gbH1S54T)`gM$x=`W$AVZ+#B8N8vnY)-~FD&a68QV=+jW zPz{75r@sWK-mSe=E(@YWK{7fC4V|nxt=Hxv*oI!}_W~FHcbkI$=R$ko&;EYlfjjkn zeDQ*ighr_l6`Vue;^46Z-;uow0FOZy9Dr8!yN7GC7(SyDeEJ9k9G;W@<+)FQeVz5RH@J2ZO@oE>6(y%~_Mj z<1>^(`fWPh8DAVTeV#HXqs?_Mwcw|@`!t>MIBGh(^Os&ntc1K-i+|14DkbZMD?tKv zQ4!_F3Cz^4NstFwEid79q-_d2%Xy7@yTwbJh3 zpD?~&`G)M68bcEHkBW|<$-jwZC_+bFczbP<6FN0fhgG!pEu&jLxedN~L3RQ%hsw_ybYuZI<$toD4jNC}4Fpz$MuJm;j z#1i+Y_p?PWgZY4vpZ$p z?XoD{lx)}!tWsvym)ruH`IqO!BsRkFD zR;yZ#>JVeyWC-V=Iy#z!fgfd)59SEyR*H(FB1VC6If{zVyei`eV z9v>QI7;rDRo74f-GjpS+PU6Ib` zIdv|*d9Y69DlLsJ;ac%~%Q(Jao#bg1YM{-^gvm+@X6xVd*)m15fB?8AiG|Vp^W-Y{ zKP8L?bBY5jjiNyY^9B7$AL?eR3f9WGr$#`Z{Vk&pfjo;5NQ30-85M*gdkaEN(WO=r#5?j$0@lap#d-6A4ZC_u|K$Q@6~HC!aY(n}u4 z3$W?~v0O`*G;xes2b*J`?XX|GA(Y1L?ZTkq`N5KNij0smF`SpL)d?tSrQre5Qhbr?Rff2|Q(%(>qG1}AZqY{dxZ zvA>-i9-cgg5ACwP@I+=_i|*o z@jMyFy{-#Zd#V?Cw`Nhu;TaWslVk&th#Qq}{N%=BKT3G9H4LoQSoaF2ZRyt;F-7;|$s7X=p{zArN5nG7u@&=3r$Jb|qorQDskjAL8;SvObW z3|iLiRN)M`VsCrG-M&Rk;r+PuBiIAs<`a_2B;0iacoK{*jl-@%nyzz&X|ic6G-!Kx z##LR~u32k&bP`1CA7%h}9H9a(Z>QL9cise8GF(GJ}<}gvv5A_P^)z zYO5CaJuM%xjBg0-EB?6hLw|J_M?TmRB4YdANJ?euFdei!rQEUH-Ke#Zjrs+PWN$Pq z+Yx#>3~9divhUR%h9>qXx)&v+A5WTX?d1Qd(g)POK+MIZzX~6(U?(#>FL=vc<@d?c ze?IApQK^S}90l289nG}w;L5$Nu-X2ABBHz3^Jvol%{*U4m%%9=fh5!3bkChC| zos%mtQ$#AE#TO6`B#0G)>``d6%UHcs)(F%IEaYc&UCO&?c9ipE?3xJ(%6=yXR|LID zScnk`%*}ysaEA$Sg*X7OAP+!kAB%OD-i^}F>mZ!Vgo;gPXdZd-T(=k<+%bWO^a$b-K0dA@txmG-0g+%P%}n5#347fwg_djJNk$E#Hm ze^;9K#yl)J`os!Po99M23<+tPL4 z3U^h~D6~wp)W;`})^{6nTbG=VZxJbuM2$vd0gMU7=~9=i^-* z&N)S)kU&72BJnVc%n(}|q?~IRtR(o_f373KOK^@1{FL3N$sJ4#Kf29dIt-39bOE$l zMo}vRuCEKV42#(j9^?$=*%YOt^pJZ@G`mm;->8(-WNpeBi>ek=8jEuw`MQIo#1W^W zl#nraj^~yUDIsI>L(KRPrSVqqn82)|iSo#BwdTJwXO#3}1f@Z0lq6o(H$I!w;5WmJ zSrk_ze605SD$JW@u)6(%hQ?KVLV*eiR>d~B>%4HyH|xXEd6*&4VlG^US~4&=h8{CU zLHR)hY@l~^EU*RaF!2^yXLi-Sp_#xrvA3XMpCxOHE;tbu>{V_%gfZDT`u7oa7B+-Rqe0yL=wV&99bn>@RqoMsliFn z)&{AdHn+7}vn5xmpp14R|23scONteE#?D!>La#gfq-HJhg76}VZxe4Rh0wLRZskb2 z2gwXc>I(6%4sk#%m7`$}c1I)r!+Rg)T>_JQ;)UaRa(#KMsF}V@h6lT!{*zrJl{al) z{&&>C;yKt9eh?uxbuiGmKoP80Z3!E5`#E;7c2NeHwP|)8rQUbn41t=>KMyILhr7v; z4Wiv9@!Y@hQnkomU!J^6-(v|b5wAURiY4C);&JR7{d7=rhsp}Y5iryQS)GHowZnkP z=PV_4%HLy6On(wY_k?GIej#%<62)3{~l6%D?@^DtB%hR{pk>z64+ za6-iA}q;^_&M}u_hEpkqFKDeRI{SLBrqiO@h}y& zqv+wSGw#m@;&gU8-MJV~sy9lJDr%M=tzN4;V6S*>;`kQ!`qHXJb>x>K2&pus-l1Hv zsz7?E!g9FyANtYbWT}=@PAVC}Oyq!QRqJf-Afhc5rP2vb(kPI%Z9aJw7TaWxH2@md z%l3BIYHV{`25`a{wwCFgABG#O?S^cVo8oL_1@u@~nT>-FN}M%a&tv0OPWW9ybBF4* zZ+zzefLSPt5b^A4ug}^W&Gpm-J5u{k)`&7Wx$_v>i-$Q@=IE4Nk2&KDA9YDXVVcsqt@o?0Pi>+!~CfbDE}F6~ZVCo%jh(5uWFlGIclq1V3h$wV)Jh1d(%- zJj9yL9Oy?xR9-shfwu^e@fJ2YS8nc zT7l3i0J|y9$loOBh0J|)TH;I0R|gKvXs9MEabemuz4;<;H~IITosVqKiHYZ=xq1lI zrm!*E8ih&d6X8DmAJ{td6PUf#t5%%+iY&%a#yR+J(#I6K^PxFhy}mct=JVeuHOB+$$=$}qMF69I_LBjzKxviQk5iPo)guI;ganxMQ5rBVl` znfG-*o61OsY38-{ElNBK7wjk`YpaSj{S}ts1hXP00yo+tfr%g?!&x&}L{5wm{EPMs zN|mw%yS8~3ED+e|3oGw4MO*7ti`Ii~ZosQ@3VKbwK8uKhez}aJpFlxhv=wTy&KvzL z8RT`ug9o{Yg4tXWPT)Nx6!_DzAMIQ0N0^?YO6QXO^^&(^9br;9kh0W?- zV1bVpi!yj9+>Rb|0S|2`^&6$r>B-Qto3Wu*ypC58I8dkHJw%@1M#6q{QoQfsOZ)(uZ0#WXH4{VG2a}X65lMd|iRi#W_ z4CyM9;J}J0n=@4elxG6j<-soyn><*d31`z(ENLwB?vWBH^x*irb-E_7E2b;omuMG( zrQ{}>%q>2%2C;E8*{mLs#*qXB2CLPM(9S4u$6@;Y_~HV&*t2*Rhf;QfVzwAtHz9qJ zLoThv_Vt(}KHB_3;EXbE*v|#hu(I^jTPgM(e5iz%tS3A&m#ielQD}PmDAYs9ip%lg z@%2>9>RhQwMNOT%s{H!lx5^3=wZ{MbHB^|W(5|X5nfi()@9=E;^$2C;r$-lT5qh`m z9ctCVGJ~En+{c?B12g&kf0A73UVnE~1HxWe$k-0TUQV4<8OzRTuwB4|G=s^jl0+9& zv_(ziWuyXB!D*8yWp=($pGtYl#-x0Yxq5(g5CyKsPVFRSHO|mX?0%t?_3YkG#mibS zc~lhBz^zaHjGkUe9mcbXvWnNJv*DtT7@c7cJ%)Jq>xQN2FyF?X_CcCfW;_oZW*~W>C7+gvptR+o(Kon>e=r0GGJL}j zYhf1Oa&_o|z1(gG8)7w$3$S5}=~-SkVlf?<>(2D}P_M^ue`$gFEw{iNwyPvTX~8F9 zIH;;RQl*NKpKL0cQtQtiy2HVD|Ifd&KMR5i{2NxyKT{#6KmRku4%aE)gd|U4 zopfU@PpG6a$f^sft0ZXF(F}5C^FQO8o%(PgZK`HVsrdW2a*2ivF8vAp{hi$md=7@O&-+Ms}w_;w197pBdv;HJ_39H4;O zAkp$Tv_(-d0Y4%^+NnG*M~~4VmccO{IC@8EF|;~!^c3=p^nJO3P#+~*Zm{L{3h*Q9 z6V&HPDyUL$2NvQTm;~^_omm{liM?J%xb~r+vX&kSog}IZ;j@f?R^;H9-XrGV<8`)L zX9jP5j}=M`>#dCC7pp`Tsou)imA*dDYr*O3Idvo==yfb&5+}S$caF;hKhI{e2b(Lp z-|VB1+1w>aWnU7jvazYyK}kJ}v@mC0c#gU6$@t>>@>o6lvZMuVOcc-A;ju$F1)aN? zvgI@M^XFa#=)Ba-?6FQz-F!_;k6~3yM<#cZM1xXR)5mCbadjy##R_A;%OGPZwBIFh z6#QG&j=*VHgN}oF%V!_J8Ma*s%{ z^xXg5c8AcI4rhQr-{Yo4t}^gLUFa1A*<45oIu*X5bo&y(BhD9BLp zRBCU?U<(}b6F;fG3VDc1Y_LY-geXL zcQ2XaMZ5^T3_ESvU-^U2!*Wvdwtg>PJ}x{-7pucf%rnu}=IQ=-0e^ylY^w$4uhYqo5Y& z_rQzbF}Xp_x|OKV=ty!8dzE8i@k+c@Nsc&(KHlKk#TCz@k3B|jU5Rw|n5*n??LbIX zB-Q{~abzFj#sy93%c*CmEO(RJa}vkdJldIikLiw(BGBHLLz3L1ogRDgA~!R-Z=n#S zqj~gW6(mY4r8WG&4E$fzn08mNv1_R3%Pq|a`mf2{4XcYg-f^UycgQ=AkOdP(Sm=Bu?RXU=Cts4l zsjdIukc5)poP&oJoLKh{ZE1vPch8Ivfxi<+Qv$H78ft7}SaX4`uyJJNi0DSxfsN{f z4xZi72P+?cK2H1vm@aoFw{U_WaBSpopY9~Xbqu%$B*WXhAi`NvbyXgGdBsWaHUKbt z%u#T%rcGa65@&4Z7wa3aMZRhsKi&ZQ#XaRHq4jddk7n^4Mj=qu>NDv1uy?pFjD{ck z6@kh6AlV8xrZ_1PbJ{GvmRE;7h4CoZ#Q7=%ZOGBqOOggixpnX zE1~kRA#VTiI@6$Nk#tb)Z7Y9ztR5e3C#;gT$dN?;0(Y8U_}^;hfhEtSTt~fWTzlJu zX>5bRQupw{T zW7`C78S86&)OOcxn=T!4%#yNNkYz}8z%9$G>Gpn#lwQFWJ?54Yu zV08y}U4BEA?JqXrr-M5q9o)HIg|RpP>_zj3V4f-4=QB}cQWJX@MC|M5zap$Q=1LxH zO`l@v%J-4UBCfOYRx!f04D~eFQ;ASFPa(sD++lp1t{02ohYtI?FwrUW+hbdcQJNNy z8D@c@%ysIm1htRe8ASt|wifDA_No(1^oBS?BgkNsUPr;d*1keGTaRJx*z?FfIZ)d% z!91UG`$gns>%@KbkYB6rG*nKUD=ZfD{%OnwFdK0Gh&Cke*&qq#&mEorCo zQ^f7`Scu_H9&o`8>D|pE6NP2(w~MdmSL-L0b?cPMHY;LFfu?*nGLfbw>~;FVXhP;< zQ3Y?$bG0)zHRC5m@9DdOxouYVI&QKRvF)~%oT`hJrK%s*ps+;d7b-wMPcD-9JKQzD zs%Dj-1MWtOrK;6+Yqdsdb{z5Ves%e3B|Yz;G~To`_g8*22iqjt$-tOg<(I$?3*ZKs zpw=pCe+2%61qHEI^TJWr{2qER7Ne?DMrC8E8IH`g#-bc}Iq2|mh*-Z60KAGPcefW0 zDk1SDPG-2lUQ_V_T8b1CTo6RcDpoG3RsNL?>95F28lu2~tMrT`Dgs{0VVGe^8GVw| zI66U`yh63)sH4Y|<01viHb_$$z1;>17FWE{dxae0H!q1u?+$Z_l(2z&t{Pu)ooTM% z+2;8(C{vyA+HGV-+U90Q>39aK5n@bjWf$4HVaZ1pG>1Xm8ntjp<#oP5lo1zpP#v}p zl)@gMx6LcCJ5e(1elpj&Gyg|+sc${LWoK6mp-d!Ma*H5jV%#K?`Z2q+r6B7rk~t7j1AOu8WRs8Oe05 zCsM-f5U&Z3owyeuS!6 z@Xr~YEz7UDlAll8UK%elgkiyx05)$JVyDbIg@o+Q)xs;S_Ily&vLIkLlVDfFUOifb zbNUhFoiD(-_HJ?6NPK~iLa705$Hu*txd7Y{048a%dtfq4?Duclu2Dbsq zcyJ&rSf{eV1r)ZDa-$s-wyw%dsXrr!Z;)f7#_;(%yN$_LkzmrXEi#<110bp)@gauE zYGLSk1y*gGuszmPL}KHTu$=%bU*DIf5lRuHo-c$JWqq(K%YwdONfn!Xf{!a;FgZp~wt&pqqv3fym>KJZe zkcFAqQJ#zn{7lT`|G@KcX@e&JO(-TNpp?AW^*b{Dv?paoN+c%*eHF!UiW%eb58F~o zdElS)tzc`@WpD={haIgY&Nk-ETG}p;mn(ylV^(Ew=gBRvedD@NRPiQ**m$55B{(mA z>oJ$bZ#;fT4v1d}EAr;&S5>R7$TODMvn$R_^4qnp6ga!Wa!X!g$J<{7(73*YdUe+8 zqnY%&3TF4dlq`NZl{jTF$UQR#iE?;{@yxUw{sv8Kj;WsYQtA#XV`;_(U|ZPnIm#Tz z+IN^c?#n@W>nuK{1P9Umz}!LP42`kJ5S|Ff89yPt3s#(Uj9AZ`#N~04QLw7?W;v(W z=5>7*kJX8Hqruahd%wq4RqBLo;3?JhMfG7#aMtnR7c#qTOp|e-G`K?1b$8f8n+&Bz z0z69T^XHL2o}9qFwX;;#p~852UBX4h@gT&db3#8#Kd*yuUZ4oF+Fumvv$C*Irnf|4 zA%&fHf|c2MamifWhF*7=NU3K#vPf&dr$@aiKf2WrR%i>BV8Vpjc@OCX1Aj1TSfpH& z5#Al6nX2SRZaP>4z;Z$wm7G+MQ4Hz=DPMu)asiG{{O?$VV>xKwwXktz-8*)-$DV;^ zYdG93M2x_B1e*nJz&i0c!v_XsRu6Nt?O1s_&4Wnrb($)wesDe{2-=@NM&2@*u{9k|8Ip!$bn4$!i1c*1jP4lSJqtK@ z0u#&-$e^Bs0p_Swyqq7Zu{U9|n(yVpkxTH{b^>G3<8?sjJ1mK<+KRt=HwZDIJC%~| zHr&G32*IvMol28Lec;qn_Q=>+Acfj*N;*uxQoIk=xcRSKL&}J_dXXV6#Vx)3Wzxi1 zE%}J-jOz9P^$dj^32$#wOsd9>n;*t@oChi@ixhRfWIn?+kwOx)c)5Z_BI0Brvi7np z1ElQ4`r!-7&)$l|thn;@nCUGK_v!{bt>4)_*oW(5Xd^A-e+OacfiL!ZwhT{U--oaL zAzEoozk~KAwZE?;-?U-TJcTPl-^+xV$3DmLeaE=%(A+3E_xu>iZ%qw1Fe9haqX|JS z-mO9}g5P=1JboH!OaxYqUg>J9Ks>N<+Q+w08E#vZsrt0FgH3Frr=r%ycnGcb=g$ui zkRtGk{Im9f=kfbnJSn5y;SlDQepaZ8rbG+rs0a__>^4&^lmyow|2 zVl&A_9WYyuxvQ)z6DjRN#;;lJ4fX|5Rd|F8-JxK{#!CRMS$n3B;#18*44vrCZN`$* zJelnY8n_YoEGQ(Z54PbrHzsP2JqO3R0?I-?BB;LmF!YGOcno zSc{3A#D#8P&%t9{j8p!Bw$YMaQUV< zG4l#NLFbV@N*JU#o87IKVBE^jFwUx*1~(xG6bdaUsr4&<3!WusW%boKQAdo!W#qaC zGSWBm!ig7xr}enfm0w$Ru!jin`~N-IiS?lgt~22?DqT0d-QM;=yC*} zKlMUJ-~L@++&Z>+{Tx*O=ANDJTu+ZKcTUd_kG~vG##hJZXY6`9{_O}JI1zL@SE^)& zN!}%Wx@R%~`N{G)nuY7RKUevxi8KX_N-O^day157_=wU4biNr<>;$iFP7>;*Bx`6g zri?ji(2xRnViADc1a}b+j?#-nirm?SDyq2>P~3B8`(lO&nc1J9=yP{Bw^yA8kxW#W z_2tftVy=tl$|yFOm;{yZMVtmd&KHZ+&$O*^aXvl%JC<^yR8=W5@aI-Tp`M407#1zh zpLj^~fuMAI5J=AL%^KnjJ0h@gV~my&0-%VS)5mh%!>6UCMrv92>I=&exot5=15Xvf z6Xm1DC3*9$?eV=e=qH=td%=-(Bq%;GijjG-Jg2df_v<$wv(QN}Q~V%&fdkt(v8oko zQ^LTta3+(9*9YdbyXvBWz8c>W9x^t`0>4h6_x~{%aFdan*AL=6jC(Z)glw{vI+k@9 z9z;LS3NyR&5?E?YG8pAUVD+X!1|v?b$pKSjfZ?WVa}Jn}7t9H~*(6f@J%({!#&Jf# z6Qko`NVF;%eTEH~YL#?l=KWxB=+BZzT}XlzNg9 zTJIAuvMf`t^bE~p<)Dy^3|CX6*i9kXKnrQ`V#XMq%}1LAx~FNN6$x}IPi;;I4Wnop zM&EQdd#oAx)^vI@>2P2J=8hKD;pqJ2Zz z476(cNQO~)8|zTzJGFN!uFjU$-Etswi(@mVTQi*y&mW_zY`fl1CBj+%td9?*K1d&@n1^K~a+gaOgZJxOE zj4l0Jk2KBS3yL-dpUG2U*UL*7E51u@x+*>)1z+K5C{8HEOV?HsFFH9)c)G+Thm;{45m**f%aosjj;c&Tm)?O8dQw^JYYShE?^jHIZtwowvZ=-S3B zFS+&290u-b`O?OWPU0S2!(wN|K0QlOoLxtr@;5% z20>TYLy+C^Xs#Xjmf=D)_-gH(^}>bqKtDW)BqwQw)I$EaYke)74X|ODX*C#XB|D?% zR{PImqOdl-eTyGPfHtr0kh&obHCPV(8ahIEFlF8XH@q8fE;xSS$Nc3gOG}7-OY7_E ziVf8ah&5%%5&tyY^CF3}cov5nydU_D7GdX&Ir@g)Pm~@@5=F^3Y&{l*qc1A zIP*mdm|i1I?d_o>v;k{R$FqN2S`!f7*W~_dUeS_+>exUXSTs98byOlTd-fsEE~|PaAyq=bugPc-{E?m6IESv%3W;p-Bwu3Vc^W1jjH-T`u<~aH@Nh z=+i+l$>seRV;YNjmOOE8?_h|WWlHRJD;42UOSxh3Iy}2w0;#3bZ{0C;EF+}0= zuo*w6`SK|@f+yz?!IZaw;Z+&$Ya?N;36D1?yvhBmk?)St&~=yZKHDmJ?mFL1ih-XB zp`@c9vv8fl%5w=f`G?+3^U)+baX5+sTFcs?B+Yj+{3gMD*^ijepiDF&Jn5(nZ#FOZOUgN6PnXP|?9?1iw3 z2HD+GhxIkx?pPmuK_CK?Z8=YG67gF0^{Rw%xyKMV7pJ^xk)KH(7=3sL77pKA!ZwRw zWSHK;63+G6dWBI&mcq@3PZ2T=?={K>ld=f9<^ot5!deNo$kLw&>*a^Ks7kRVHNc#} zqq5b3>#v?{(6<4lh=6D6uJY~%tYMAt8U)J;HfpAr^8 zSGwys$DW{iuo87rV8#0HwIMS0`S|Sc6Grrj{_tOTh>a&F3>J@NG3{CJ&gE5IpM(-i z-oo8-^-miPJAa3h0J2|UfniS1pZY^{myU0$XqSY5dQ;qP&prA5kD^q zB}cZdUAi9(=tgTpeL}|djn8kEKntyqPr++jTqYe6cg1Cu<-z+ZmA68cpIb9hEE>?( zjNl95{@r-9`&CTOQ%&ekF+|g24$(fl8a6AE7-pbOhUvH>MR}kuRf}Ei@?NS@=_n#- zTr5?^{{$j}CJ-M3Bpe<0CGf*}YBP;>QUkT-Bw4TyYB@id4;@x0e}g5%c=)vL+zh#X zqVN%)LMl<#>x+CSD=L?bN3xzIX6;9^hT!i87T19#f4;uCN_;;xD{*@+Ih)vbUS-#< zVs0dZiB~7naiLyr2T{RuHbw<#b2Ef}4m*#v% z_z^e!_V+)1#KcwiuqOM`rN}hQc5)wS~@yd^OGJ`VOmHEDb`>v~NQeE?Fa1r6{ z*Y!WD&KIVG2uKlE3forXTT9b#+e2E{B*2M63~xC;6s!H0at_lx^>d}s+M0h|E3bP& z$ejjBG+6K&Ttz470=wtBucC0;FLmCp9#_WW0h_za$D^oE@+6`RyF)X&|23H1mr}*U z-OH6y(=ST$i7>te0}aum2wslSrc~ z({+fvx`;g#lG?^CMpT)=t)y^o@F*`f#;e9bxcnSUw6ZA9*pi#IXs6?Nh&C`@E|KH| z4GFlc$vOg8r77=OM@ukA_EB=#yAYybtj_|zoR1Te(+P``aSMWL#GBo0s+&oe8VCQX z#oJ(k5F+fSfr<9D+Mi5$#=!V)>74hYymMME_GvrU`;*((hrf>cQMyCi&>zBiuyFkS z`0B%JZ?6yk9rgSBd&Yn9HS7=f_y05)?u`x(_WGmI{-64T-Tl4MpIHA1`cim-d*LOF z{VBTvd)NDS<$2qVztY!#^!|f=KEi1>IluS^Ot{~#*yoe;$yaE>upg`0{dmcJ+_{ zB2N`7M*Qz$iw~BoFhHNxOTZT9Ci>|%U* zbv(H~8DFxC>&uJt>Cp!;RQzpMinKIhqJqu9kW9sh{{eR=g?@!|cIOd1XXYc25G?gs zyn3v23&I#SV;mjbJADEFivt9f3iSC0dveJk@Rvlm{W`2pS$UWNgB6Se(!D z>cN*)T)%gJK8vHB-!4wr1iskF>%0i`(?vY;5f2pneR6bxT)Oae3!EkLoHSl1Gx5um0%Py6 z`Oo9kDv5FG9;;vY^ZO6%0rU_H@9IvT7BAqd%t3>V_$cra8HTGFLKs6X1w`N>IANB= z^e%{C*zis3XvQz-B8it`wJP~#^|;Txbt>;sLYm9?4yh#wWbCWya`Py@t@>H}z|Qgd z+tU}vu=MVIMEFOy)OGkGIgL|27gC}jE$QnAn*99!-uRFCPT+HBPg%GTV2cyoHq17G zB!>pESjfkM?hwxA7+Mql7RzpF?jj%GKgGqAg_ruHeA-cyb;I<6k#2Qd!*VO-Pk3vji<$2*2gaZ9-kd`M%M zj_Q};9iH(3+YubZM+z=AVsmo8DCY+CR7A)`FYzYKeT3iVJ_O%}+=P^mr@2R+R$a!+ z9E#hcMh<-oeJr`rD-m2s@$2@rH z=>Mhk!RiF<@|gSO31O4!25%zpT!y z3}@8<)Cn(g5UuoQUqZ(@jOTFr+qYuR^|2S+^`mHx@r|n9i^DH+022?^(34={W45AX zl{62($N@+h7+Ykuc<`ll{*bHyN@Yi0?$YOuy|k{2sXfQd==ZDBlVh+yew0mq`;3=1 z49=N0mPc$2a{Jhe>w4N&JN+kj`ttB>BDEC@9XAiYw9Zp9qq6sfqc5%d?NO&MqWkTs z7oKrFCnlJ4iqK4O>CP?b`NJ=50PS^Ye%2Ka(pBg^o)vaa-Tuo~hQp&y(iG-CicsD|*boZpJ4**3)M3ik)6hui%?!5&H`l2K|n^7kkf6$NzwK z$?S$*d+(_G{Q8y{y3}63`%%h2A-Y-!D$t0u%dX!Vu5i9lBW(Xt@ac4u_K5Or!q3pn zmi6xJ5?=Z|M0+$3vN$=ypj(=s%9~DXa*_E(;8AZqTi)AO-LUd$>^bw<*}#7b;~Ou$ zkPMh5VS@Y_Z6Al+0P~hKjq)s*-Mbpz#*w)nRL;7l;h2`IYA{VIYAhI9)N0xa(rDHvM>&IAA~j@Ty%c2PP2H4yQI}^-Q0R* zk=I;X4leq86|dqjzJ09dckyte?MHp8^vV}(36}%9AOK(KVECc7H=Q63|IX{f zU;9Hu&&5xM{@H^68T1FE!GXa4jQYEy5#oRLhJ!c!&vU%q@IP<(pEvx^8~*1F|MQ0b zdBgv_;eVbN|1-gTi(`3yWq0sN7!zz%V2{G>#7@Aq#0xLg9q`Vey~Za{zMcm*?$i$# z9||xb{3#VUMHErp3MNSqz@I>yG@UCag6GqYE?ql3`iqVQ(E&S5yhYZemP~Qok+{QQ zLC z*GY-IP3uluyOh&T?^|;plk>0UvCWy&&#}Z885A1WtV-HMFw1L+u#J6h!L`3d?(}*( z{_RN1oSZ9-4A&zb7IX$+%-_6(YX4DcKwkpc>QZuG3+>*sU54GdAY(!x|KB-*IHE zF2>uZy?xGyRM|X$+=rHRDX6qCDlDXUaR3Xk9DswRF?8T(i)djvvf{%D1n2pruiSDTmtX zq3VX$JlK!@vcZ15k*lwI^Qs3~3@m^lf9bD$Pc6H~`&T{GVxZv^Yhg)IB=Gh0HJe`b zfQ#V<7#*o;<^q3K+bbUOU{oA3B~uU2L^MghdCEZ!pLmda#f9k#EW!Kh)f{H-vs=Wj zeLNL-Uy_jY_2tQvV+FeP_mkD%iJxQ~-t8Z1qJkGagrN$0d=I~)l!r^G!0-tcHr?Cl zEMB?nu7$mJ)ZI_IyI+DZbBddKg2|w;xp;ZwBQq%qV6g&B^? zc9_oV&5RER#v^d;mM8NG?$EHr@L#8ynUyl%zuv8OILxE2rtnSPtxwFmPdO8xd|;)v zzD6gAzhCpMD_XjgsSr6B0ieRcnk@v`|L%padFZ2&+@NN0I+h=L(Yw@WG|*k9%H&1h z8b1BBmwc%E&#TC?#CLqnpLPJd#sEaQ@7yVo+S7V{yLPeRNvt@@u-4I1i=;woS%&=5F%Dez;gRz|2r@CNYXur(rLe^Al$Y4Got-u1#<6kVUh(QKV0FsHsD^~2LsS=JkdC1^Ur z(d=srFUw#v`~`{duHuv6yI~X%IUbQfe5cy?)Q1OX&dc6s$e<@_i_*pepu#+4;lt;x zLtU>DiM*wn{TCHzfN%MzN>T5;bh<{493-;P6C+r#tIO*nVz7`0)sn8 zO7NoeB#!T|INyiJKJ!t04v=iMD+*Xjm?PvLYq=+`mSp&BZNCK?Qt7Edu$v2ecdq3)`o9?wIH#1Mk7WUw%r z$ma|u0h~%>MP83rG0>sH^5IAiPhfqW!UNdg)*c^nR+$v(y`K9K-u?Kg;b?Wi_5}*V zZh2&poy!Lw_;&O2`(j4-(H>pBMS0^Oi!1bt8SE!}u(f9I#<3Qs^2-?ONY(sC=_Ob^ zZvE7@W{{(Wc4Q3=ld&!b_k82nx5n`lnVqLKDDWy}q?#A%MVa0(i+m0ju zoA-$0cujL@U@XJv3=k?!dp7hIvuz$r$eZhwPXu4GD`YA+WlrPo{&?0Xd+_rw`f#v6 zw1=U-t)VaWBF3_7k3}r2uW=-M_DF;ca^W>l8GfdOAbhdJrGcd$C!E|%C7X)B-v0zW zfVVBK^QNH7bX;cfUVfRd-TvNa+ZaaH7z9DzYZ*ob+Mz$xRuf9rIFGJ8MOu7c_xUKA zC65IB9*0;;lHED>Z=beu1xBJA21;rjB#(cs~mUe-wEa*Y^}ZsM3_dYFGq*O^OrpY>tJrB8o2UQWLBXoxAddY#uLcRp$bu5tD)zt}mXX0?)7oS>rS?E$^ zS!nfo3(%(KJ<}m(aS@*4zG+fp^~RtIR&5pmFSM4@+CqC3Su7kvF;Io_6=(9t#O68e zE)7?HISUlpEkp%{oSnfQPTG!nPHwYNFkL^@s0w(#Ba@RSbl` ziR6vfItgk*Nhuf@wEvLMH*kLaIGpph(4Gnwd+R!E0%O)3zf6Zoe)tL!`VF@ePAWXS zTL|at-W%yD%4u(}KU*>I8#-MeWr3?)&S7gG;FPXLo8~=*#u9o^d{Xl)n#RWk`ZaN?ERw-QH* z-NxxWa`%FmFYGo+5n;C?pMrf+1@nM?nl8|{+l?}I<3O%9+I&KIHMn~lPudH&;kr7O zTsqGkcVw6|Tu#Xp@(;bt`>FjhD|iW%(_SE6lq~bVc%+s7Ae3RbzUBYrokfG7!=;HQd@OGXswuKH~hV-gW_+s zVUHVKfQ@+KI+!~jrV-vC2vUoYhI4N@d0A>7)IBYy>4_fzNC zP?|mTf4tO=YBblW7a>}(eMiggi0kfZABwMYUHV&kXXIjJqTAe0V+~(D^I?H_+Ce9jjvx8Zip%gEJ-Vd(C`hQqh|J{$qD7U?cNqY7P zN8`TxMzyVkX1eZw0rKg57$XDuayYf2R+JgJ1=9d^O}oa?@asq7i!pXZyRUA#Kr_m2 z0+%34SI{mZV&*Y~kHbn~H%?%IMbTpJvE)xb^|QNpo;x5Sd1ezVaH?J%q3gNB+($wG zZN3h9=xUyhKKr*pB)`*NBz}5Vh+fl){bc=}{)YdG^H01qJ0-PQe=bjxmp~M)h}J}m zlSh!IFxF`h&3GVfy~>@1U&}jt6wND-(PuXu&DLq|Fh6u0ksh$0<`3hik6|L0|0*7- z`b}}n_{F(@v%XE_Y%IGLpV#T*H!sj}M15%Llkn|@w@!WIa5=))QclAAC3C(F?m`hW#p(9H%8!2OCj{HRw<>1VWZ zTg2Y95~Z0>5E|IC65Gu>Illh;@yYS{@*isD)5-DNqTsya18pIzMNFr;+dI0Y$@2Q$ zZ@?NReUTv5>#=Li*^Pbu)7$Iq_4ayuy}jOEZ?Cu4+w1N1_Ii80z207LueaCR>+SXS wdV9US-d=C7x7XY2?e+G0d%eBhUT?3r*W2su_4ayuJ=g312Xc7;Bml4p0C5%+oB#j- literal 0 HcmV?d00001 diff --git a/dirsrvtests/tests/data/ticket48212/__init__.py b/dirsrvtests/tests/data/ticket48212/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/data/ticket48212/example1k_posix.ldif b/dirsrvtests/tests/data/ticket48212/example1k_posix.ldif new file mode 100644 index 0000000..50000f2 --- /dev/null +++ b/dirsrvtests/tests/data/ticket48212/example1k_posix.ldif @@ -0,0 +1,17017 @@ +dn: dc=example,dc=com +objectClass: top +objectClass: domain +dc: example +aci: (target=ldap:///dc=example,dc=com)(targetattr=*)(version 3.0; acl "acl1"; allow(write) userdn = "ldap:///self";) +aci: (target=ldap:///dc=example,dc=com)(targetattr=*)(version 3.0; acl "acl2"; allow(read, search, compare) userdn = "ldap:///anyone";) + +dn: ou=People,dc=example,dc=com +objectClass: top +objectClass: organizationalunit +ou: People + +dn: ou=Groups,dc=example,dc=com +objectClass: top +objectClass: organizationalunit +ou: Groups + +dn: cn=user0,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user0 +sn: user0 +uid: uid0 +givenname: givenname0 +description: description0 +userPassword: password0 +mail: uid0 +uidnumber: 0 +gidnumber: 0 +homeDirectory: /home/uid0 + +dn: cn=user1,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user1 +sn: user1 +uid: uid1 +givenname: givenname1 +description: description1 +userPassword: password1 +mail: uid1 +uidnumber: 1 +gidnumber: 1 +homeDirectory: /home/uid1 + +dn: cn=user2,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user2 +sn: user2 +uid: uid2 +givenname: givenname2 +description: description2 +userPassword: password2 +mail: uid2 +uidnumber: 2 +gidnumber: 2 +homeDirectory: /home/uid2 + +dn: cn=user3,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user3 +sn: user3 +uid: uid3 +givenname: givenname3 +description: description3 +userPassword: password3 +mail: uid3 +uidnumber: 3 +gidnumber: 3 +homeDirectory: /home/uid3 + +dn: cn=user4,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user4 +sn: user4 +uid: uid4 +givenname: givenname4 +description: description4 +userPassword: password4 +mail: uid4 +uidnumber: 4 +gidnumber: 4 +homeDirectory: /home/uid4 + +dn: cn=user5,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user5 +sn: user5 +uid: uid5 +givenname: givenname5 +description: description5 +userPassword: password5 +mail: uid5 +uidnumber: 5 +gidnumber: 5 +homeDirectory: /home/uid5 + +dn: cn=user6,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user6 +sn: user6 +uid: uid6 +givenname: givenname6 +description: description6 +userPassword: password6 +mail: uid6 +uidnumber: 6 +gidnumber: 6 +homeDirectory: /home/uid6 + +dn: cn=user7,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user7 +sn: user7 +uid: uid7 +givenname: givenname7 +description: description7 +userPassword: password7 +mail: uid7 +uidnumber: 7 +gidnumber: 7 +homeDirectory: /home/uid7 + +dn: cn=user8,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user8 +sn: user8 +uid: uid8 +givenname: givenname8 +description: description8 +userPassword: password8 +mail: uid8 +uidnumber: 8 +gidnumber: 8 +homeDirectory: /home/uid8 + +dn: cn=user9,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user9 +sn: user9 +uid: uid9 +givenname: givenname9 +description: description9 +userPassword: password9 +mail: uid9 +uidnumber: 9 +gidnumber: 9 +homeDirectory: /home/uid9 + +dn: cn=user10,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user10 +sn: user10 +uid: uid10 +givenname: givenname10 +description: description10 +userPassword: password10 +mail: uid10 +uidnumber: 10 +gidnumber: 10 +homeDirectory: /home/uid10 + +dn: cn=user11,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user11 +sn: user11 +uid: uid11 +givenname: givenname11 +description: description11 +userPassword: password11 +mail: uid11 +uidnumber: 11 +gidnumber: 11 +homeDirectory: /home/uid11 + +dn: cn=user12,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user12 +sn: user12 +uid: uid12 +givenname: givenname12 +description: description12 +userPassword: password12 +mail: uid12 +uidnumber: 12 +gidnumber: 12 +homeDirectory: /home/uid12 + +dn: cn=user13,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user13 +sn: user13 +uid: uid13 +givenname: givenname13 +description: description13 +userPassword: password13 +mail: uid13 +uidnumber: 13 +gidnumber: 13 +homeDirectory: /home/uid13 + +dn: cn=user14,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user14 +sn: user14 +uid: uid14 +givenname: givenname14 +description: description14 +userPassword: password14 +mail: uid14 +uidnumber: 14 +gidnumber: 14 +homeDirectory: /home/uid14 + +dn: cn=user15,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user15 +sn: user15 +uid: uid15 +givenname: givenname15 +description: description15 +userPassword: password15 +mail: uid15 +uidnumber: 15 +gidnumber: 15 +homeDirectory: /home/uid15 + +dn: cn=user16,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user16 +sn: user16 +uid: uid16 +givenname: givenname16 +description: description16 +userPassword: password16 +mail: uid16 +uidnumber: 16 +gidnumber: 16 +homeDirectory: /home/uid16 + +dn: cn=user17,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user17 +sn: user17 +uid: uid17 +givenname: givenname17 +description: description17 +userPassword: password17 +mail: uid17 +uidnumber: 17 +gidnumber: 17 +homeDirectory: /home/uid17 + +dn: cn=user18,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user18 +sn: user18 +uid: uid18 +givenname: givenname18 +description: description18 +userPassword: password18 +mail: uid18 +uidnumber: 18 +gidnumber: 18 +homeDirectory: /home/uid18 + +dn: cn=user19,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user19 +sn: user19 +uid: uid19 +givenname: givenname19 +description: description19 +userPassword: password19 +mail: uid19 +uidnumber: 19 +gidnumber: 19 +homeDirectory: /home/uid19 + +dn: cn=user20,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user20 +sn: user20 +uid: uid20 +givenname: givenname20 +description: description20 +userPassword: password20 +mail: uid20 +uidnumber: 20 +gidnumber: 20 +homeDirectory: /home/uid20 + +dn: cn=user21,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user21 +sn: user21 +uid: uid21 +givenname: givenname21 +description: description21 +userPassword: password21 +mail: uid21 +uidnumber: 21 +gidnumber: 21 +homeDirectory: /home/uid21 + +dn: cn=user22,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user22 +sn: user22 +uid: uid22 +givenname: givenname22 +description: description22 +userPassword: password22 +mail: uid22 +uidnumber: 22 +gidnumber: 22 +homeDirectory: /home/uid22 + +dn: cn=user23,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user23 +sn: user23 +uid: uid23 +givenname: givenname23 +description: description23 +userPassword: password23 +mail: uid23 +uidnumber: 23 +gidnumber: 23 +homeDirectory: /home/uid23 + +dn: cn=user24,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user24 +sn: user24 +uid: uid24 +givenname: givenname24 +description: description24 +userPassword: password24 +mail: uid24 +uidnumber: 24 +gidnumber: 24 +homeDirectory: /home/uid24 + +dn: cn=user25,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user25 +sn: user25 +uid: uid25 +givenname: givenname25 +description: description25 +userPassword: password25 +mail: uid25 +uidnumber: 25 +gidnumber: 25 +homeDirectory: /home/uid25 + +dn: cn=user26,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user26 +sn: user26 +uid: uid26 +givenname: givenname26 +description: description26 +userPassword: password26 +mail: uid26 +uidnumber: 26 +gidnumber: 26 +homeDirectory: /home/uid26 + +dn: cn=user27,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user27 +sn: user27 +uid: uid27 +givenname: givenname27 +description: description27 +userPassword: password27 +mail: uid27 +uidnumber: 27 +gidnumber: 27 +homeDirectory: /home/uid27 + +dn: cn=user28,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user28 +sn: user28 +uid: uid28 +givenname: givenname28 +description: description28 +userPassword: password28 +mail: uid28 +uidnumber: 28 +gidnumber: 28 +homeDirectory: /home/uid28 + +dn: cn=user29,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user29 +sn: user29 +uid: uid29 +givenname: givenname29 +description: description29 +userPassword: password29 +mail: uid29 +uidnumber: 29 +gidnumber: 29 +homeDirectory: /home/uid29 + +dn: cn=user30,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user30 +sn: user30 +uid: uid30 +givenname: givenname30 +description: description30 +userPassword: password30 +mail: uid30 +uidnumber: 30 +gidnumber: 30 +homeDirectory: /home/uid30 + +dn: cn=user31,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user31 +sn: user31 +uid: uid31 +givenname: givenname31 +description: description31 +userPassword: password31 +mail: uid31 +uidnumber: 31 +gidnumber: 31 +homeDirectory: /home/uid31 + +dn: cn=user32,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user32 +sn: user32 +uid: uid32 +givenname: givenname32 +description: description32 +userPassword: password32 +mail: uid32 +uidnumber: 32 +gidnumber: 32 +homeDirectory: /home/uid32 + +dn: cn=user33,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user33 +sn: user33 +uid: uid33 +givenname: givenname33 +description: description33 +userPassword: password33 +mail: uid33 +uidnumber: 33 +gidnumber: 33 +homeDirectory: /home/uid33 + +dn: cn=user34,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user34 +sn: user34 +uid: uid34 +givenname: givenname34 +description: description34 +userPassword: password34 +mail: uid34 +uidnumber: 34 +gidnumber: 34 +homeDirectory: /home/uid34 + +dn: cn=user35,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user35 +sn: user35 +uid: uid35 +givenname: givenname35 +description: description35 +userPassword: password35 +mail: uid35 +uidnumber: 35 +gidnumber: 35 +homeDirectory: /home/uid35 + +dn: cn=user36,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user36 +sn: user36 +uid: uid36 +givenname: givenname36 +description: description36 +userPassword: password36 +mail: uid36 +uidnumber: 36 +gidnumber: 36 +homeDirectory: /home/uid36 + +dn: cn=user37,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user37 +sn: user37 +uid: uid37 +givenname: givenname37 +description: description37 +userPassword: password37 +mail: uid37 +uidnumber: 37 +gidnumber: 37 +homeDirectory: /home/uid37 + +dn: cn=user38,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user38 +sn: user38 +uid: uid38 +givenname: givenname38 +description: description38 +userPassword: password38 +mail: uid38 +uidnumber: 38 +gidnumber: 38 +homeDirectory: /home/uid38 + +dn: cn=user39,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user39 +sn: user39 +uid: uid39 +givenname: givenname39 +description: description39 +userPassword: password39 +mail: uid39 +uidnumber: 39 +gidnumber: 39 +homeDirectory: /home/uid39 + +dn: cn=user40,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user40 +sn: user40 +uid: uid40 +givenname: givenname40 +description: description40 +userPassword: password40 +mail: uid40 +uidnumber: 40 +gidnumber: 40 +homeDirectory: /home/uid40 + +dn: cn=user41,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user41 +sn: user41 +uid: uid41 +givenname: givenname41 +description: description41 +userPassword: password41 +mail: uid41 +uidnumber: 41 +gidnumber: 41 +homeDirectory: /home/uid41 + +dn: cn=user42,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user42 +sn: user42 +uid: uid42 +givenname: givenname42 +description: description42 +userPassword: password42 +mail: uid42 +uidnumber: 42 +gidnumber: 42 +homeDirectory: /home/uid42 + +dn: cn=user43,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user43 +sn: user43 +uid: uid43 +givenname: givenname43 +description: description43 +userPassword: password43 +mail: uid43 +uidnumber: 43 +gidnumber: 43 +homeDirectory: /home/uid43 + +dn: cn=user44,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user44 +sn: user44 +uid: uid44 +givenname: givenname44 +description: description44 +userPassword: password44 +mail: uid44 +uidnumber: 44 +gidnumber: 44 +homeDirectory: /home/uid44 + +dn: cn=user45,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user45 +sn: user45 +uid: uid45 +givenname: givenname45 +description: description45 +userPassword: password45 +mail: uid45 +uidnumber: 45 +gidnumber: 45 +homeDirectory: /home/uid45 + +dn: cn=user46,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user46 +sn: user46 +uid: uid46 +givenname: givenname46 +description: description46 +userPassword: password46 +mail: uid46 +uidnumber: 46 +gidnumber: 46 +homeDirectory: /home/uid46 + +dn: cn=user47,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user47 +sn: user47 +uid: uid47 +givenname: givenname47 +description: description47 +userPassword: password47 +mail: uid47 +uidnumber: 47 +gidnumber: 47 +homeDirectory: /home/uid47 + +dn: cn=user48,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user48 +sn: user48 +uid: uid48 +givenname: givenname48 +description: description48 +userPassword: password48 +mail: uid48 +uidnumber: 48 +gidnumber: 48 +homeDirectory: /home/uid48 + +dn: cn=user49,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user49 +sn: user49 +uid: uid49 +givenname: givenname49 +description: description49 +userPassword: password49 +mail: uid49 +uidnumber: 49 +gidnumber: 49 +homeDirectory: /home/uid49 + +dn: cn=user50,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user50 +sn: user50 +uid: uid50 +givenname: givenname50 +description: description50 +userPassword: password50 +mail: uid50 +uidnumber: 50 +gidnumber: 50 +homeDirectory: /home/uid50 + +dn: cn=user51,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user51 +sn: user51 +uid: uid51 +givenname: givenname51 +description: description51 +userPassword: password51 +mail: uid51 +uidnumber: 51 +gidnumber: 51 +homeDirectory: /home/uid51 + +dn: cn=user52,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user52 +sn: user52 +uid: uid52 +givenname: givenname52 +description: description52 +userPassword: password52 +mail: uid52 +uidnumber: 52 +gidnumber: 52 +homeDirectory: /home/uid52 + +dn: cn=user53,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user53 +sn: user53 +uid: uid53 +givenname: givenname53 +description: description53 +userPassword: password53 +mail: uid53 +uidnumber: 53 +gidnumber: 53 +homeDirectory: /home/uid53 + +dn: cn=user54,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user54 +sn: user54 +uid: uid54 +givenname: givenname54 +description: description54 +userPassword: password54 +mail: uid54 +uidnumber: 54 +gidnumber: 54 +homeDirectory: /home/uid54 + +dn: cn=user55,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user55 +sn: user55 +uid: uid55 +givenname: givenname55 +description: description55 +userPassword: password55 +mail: uid55 +uidnumber: 55 +gidnumber: 55 +homeDirectory: /home/uid55 + +dn: cn=user56,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user56 +sn: user56 +uid: uid56 +givenname: givenname56 +description: description56 +userPassword: password56 +mail: uid56 +uidnumber: 56 +gidnumber: 56 +homeDirectory: /home/uid56 + +dn: cn=user57,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user57 +sn: user57 +uid: uid57 +givenname: givenname57 +description: description57 +userPassword: password57 +mail: uid57 +uidnumber: 57 +gidnumber: 57 +homeDirectory: /home/uid57 + +dn: cn=user58,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user58 +sn: user58 +uid: uid58 +givenname: givenname58 +description: description58 +userPassword: password58 +mail: uid58 +uidnumber: 58 +gidnumber: 58 +homeDirectory: /home/uid58 + +dn: cn=user59,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user59 +sn: user59 +uid: uid59 +givenname: givenname59 +description: description59 +userPassword: password59 +mail: uid59 +uidnumber: 59 +gidnumber: 59 +homeDirectory: /home/uid59 + +dn: cn=user60,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user60 +sn: user60 +uid: uid60 +givenname: givenname60 +description: description60 +userPassword: password60 +mail: uid60 +uidnumber: 60 +gidnumber: 60 +homeDirectory: /home/uid60 + +dn: cn=user61,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user61 +sn: user61 +uid: uid61 +givenname: givenname61 +description: description61 +userPassword: password61 +mail: uid61 +uidnumber: 61 +gidnumber: 61 +homeDirectory: /home/uid61 + +dn: cn=user62,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user62 +sn: user62 +uid: uid62 +givenname: givenname62 +description: description62 +userPassword: password62 +mail: uid62 +uidnumber: 62 +gidnumber: 62 +homeDirectory: /home/uid62 + +dn: cn=user63,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user63 +sn: user63 +uid: uid63 +givenname: givenname63 +description: description63 +userPassword: password63 +mail: uid63 +uidnumber: 63 +gidnumber: 63 +homeDirectory: /home/uid63 + +dn: cn=user64,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user64 +sn: user64 +uid: uid64 +givenname: givenname64 +description: description64 +userPassword: password64 +mail: uid64 +uidnumber: 64 +gidnumber: 64 +homeDirectory: /home/uid64 + +dn: cn=user65,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user65 +sn: user65 +uid: uid65 +givenname: givenname65 +description: description65 +userPassword: password65 +mail: uid65 +uidnumber: 65 +gidnumber: 65 +homeDirectory: /home/uid65 + +dn: cn=user66,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user66 +sn: user66 +uid: uid66 +givenname: givenname66 +description: description66 +userPassword: password66 +mail: uid66 +uidnumber: 66 +gidnumber: 66 +homeDirectory: /home/uid66 + +dn: cn=user67,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user67 +sn: user67 +uid: uid67 +givenname: givenname67 +description: description67 +userPassword: password67 +mail: uid67 +uidnumber: 67 +gidnumber: 67 +homeDirectory: /home/uid67 + +dn: cn=user68,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user68 +sn: user68 +uid: uid68 +givenname: givenname68 +description: description68 +userPassword: password68 +mail: uid68 +uidnumber: 68 +gidnumber: 68 +homeDirectory: /home/uid68 + +dn: cn=user69,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user69 +sn: user69 +uid: uid69 +givenname: givenname69 +description: description69 +userPassword: password69 +mail: uid69 +uidnumber: 69 +gidnumber: 69 +homeDirectory: /home/uid69 + +dn: cn=user70,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user70 +sn: user70 +uid: uid70 +givenname: givenname70 +description: description70 +userPassword: password70 +mail: uid70 +uidnumber: 70 +gidnumber: 70 +homeDirectory: /home/uid70 + +dn: cn=user71,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user71 +sn: user71 +uid: uid71 +givenname: givenname71 +description: description71 +userPassword: password71 +mail: uid71 +uidnumber: 71 +gidnumber: 71 +homeDirectory: /home/uid71 + +dn: cn=user72,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user72 +sn: user72 +uid: uid72 +givenname: givenname72 +description: description72 +userPassword: password72 +mail: uid72 +uidnumber: 72 +gidnumber: 72 +homeDirectory: /home/uid72 + +dn: cn=user73,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user73 +sn: user73 +uid: uid73 +givenname: givenname73 +description: description73 +userPassword: password73 +mail: uid73 +uidnumber: 73 +gidnumber: 73 +homeDirectory: /home/uid73 + +dn: cn=user74,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user74 +sn: user74 +uid: uid74 +givenname: givenname74 +description: description74 +userPassword: password74 +mail: uid74 +uidnumber: 74 +gidnumber: 74 +homeDirectory: /home/uid74 + +dn: cn=user75,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user75 +sn: user75 +uid: uid75 +givenname: givenname75 +description: description75 +userPassword: password75 +mail: uid75 +uidnumber: 75 +gidnumber: 75 +homeDirectory: /home/uid75 + +dn: cn=user76,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user76 +sn: user76 +uid: uid76 +givenname: givenname76 +description: description76 +userPassword: password76 +mail: uid76 +uidnumber: 76 +gidnumber: 76 +homeDirectory: /home/uid76 + +dn: cn=user77,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user77 +sn: user77 +uid: uid77 +givenname: givenname77 +description: description77 +userPassword: password77 +mail: uid77 +uidnumber: 77 +gidnumber: 77 +homeDirectory: /home/uid77 + +dn: cn=user78,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user78 +sn: user78 +uid: uid78 +givenname: givenname78 +description: description78 +userPassword: password78 +mail: uid78 +uidnumber: 78 +gidnumber: 78 +homeDirectory: /home/uid78 + +dn: cn=user79,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user79 +sn: user79 +uid: uid79 +givenname: givenname79 +description: description79 +userPassword: password79 +mail: uid79 +uidnumber: 79 +gidnumber: 79 +homeDirectory: /home/uid79 + +dn: cn=user80,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user80 +sn: user80 +uid: uid80 +givenname: givenname80 +description: description80 +userPassword: password80 +mail: uid80 +uidnumber: 80 +gidnumber: 80 +homeDirectory: /home/uid80 + +dn: cn=user81,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user81 +sn: user81 +uid: uid81 +givenname: givenname81 +description: description81 +userPassword: password81 +mail: uid81 +uidnumber: 81 +gidnumber: 81 +homeDirectory: /home/uid81 + +dn: cn=user82,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user82 +sn: user82 +uid: uid82 +givenname: givenname82 +description: description82 +userPassword: password82 +mail: uid82 +uidnumber: 82 +gidnumber: 82 +homeDirectory: /home/uid82 + +dn: cn=user83,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user83 +sn: user83 +uid: uid83 +givenname: givenname83 +description: description83 +userPassword: password83 +mail: uid83 +uidnumber: 83 +gidnumber: 83 +homeDirectory: /home/uid83 + +dn: cn=user84,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user84 +sn: user84 +uid: uid84 +givenname: givenname84 +description: description84 +userPassword: password84 +mail: uid84 +uidnumber: 84 +gidnumber: 84 +homeDirectory: /home/uid84 + +dn: cn=user85,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user85 +sn: user85 +uid: uid85 +givenname: givenname85 +description: description85 +userPassword: password85 +mail: uid85 +uidnumber: 85 +gidnumber: 85 +homeDirectory: /home/uid85 + +dn: cn=user86,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user86 +sn: user86 +uid: uid86 +givenname: givenname86 +description: description86 +userPassword: password86 +mail: uid86 +uidnumber: 86 +gidnumber: 86 +homeDirectory: /home/uid86 + +dn: cn=user87,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user87 +sn: user87 +uid: uid87 +givenname: givenname87 +description: description87 +userPassword: password87 +mail: uid87 +uidnumber: 87 +gidnumber: 87 +homeDirectory: /home/uid87 + +dn: cn=user88,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user88 +sn: user88 +uid: uid88 +givenname: givenname88 +description: description88 +userPassword: password88 +mail: uid88 +uidnumber: 88 +gidnumber: 88 +homeDirectory: /home/uid88 + +dn: cn=user89,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user89 +sn: user89 +uid: uid89 +givenname: givenname89 +description: description89 +userPassword: password89 +mail: uid89 +uidnumber: 89 +gidnumber: 89 +homeDirectory: /home/uid89 + +dn: cn=user90,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user90 +sn: user90 +uid: uid90 +givenname: givenname90 +description: description90 +userPassword: password90 +mail: uid90 +uidnumber: 90 +gidnumber: 90 +homeDirectory: /home/uid90 + +dn: cn=user91,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user91 +sn: user91 +uid: uid91 +givenname: givenname91 +description: description91 +userPassword: password91 +mail: uid91 +uidnumber: 91 +gidnumber: 91 +homeDirectory: /home/uid91 + +dn: cn=user92,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user92 +sn: user92 +uid: uid92 +givenname: givenname92 +description: description92 +userPassword: password92 +mail: uid92 +uidnumber: 92 +gidnumber: 92 +homeDirectory: /home/uid92 + +dn: cn=user93,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user93 +sn: user93 +uid: uid93 +givenname: givenname93 +description: description93 +userPassword: password93 +mail: uid93 +uidnumber: 93 +gidnumber: 93 +homeDirectory: /home/uid93 + +dn: cn=user94,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user94 +sn: user94 +uid: uid94 +givenname: givenname94 +description: description94 +userPassword: password94 +mail: uid94 +uidnumber: 94 +gidnumber: 94 +homeDirectory: /home/uid94 + +dn: cn=user95,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user95 +sn: user95 +uid: uid95 +givenname: givenname95 +description: description95 +userPassword: password95 +mail: uid95 +uidnumber: 95 +gidnumber: 95 +homeDirectory: /home/uid95 + +dn: cn=user96,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user96 +sn: user96 +uid: uid96 +givenname: givenname96 +description: description96 +userPassword: password96 +mail: uid96 +uidnumber: 96 +gidnumber: 96 +homeDirectory: /home/uid96 + +dn: cn=user97,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user97 +sn: user97 +uid: uid97 +givenname: givenname97 +description: description97 +userPassword: password97 +mail: uid97 +uidnumber: 97 +gidnumber: 97 +homeDirectory: /home/uid97 + +dn: cn=user98,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user98 +sn: user98 +uid: uid98 +givenname: givenname98 +description: description98 +userPassword: password98 +mail: uid98 +uidnumber: 98 +gidnumber: 98 +homeDirectory: /home/uid98 + +dn: cn=user99,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user99 +sn: user99 +uid: uid99 +givenname: givenname99 +description: description99 +userPassword: password99 +mail: uid99 +uidnumber: 99 +gidnumber: 99 +homeDirectory: /home/uid99 + +dn: cn=user100,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user100 +sn: user100 +uid: uid100 +givenname: givenname100 +description: description100 +userPassword: password100 +mail: uid100 +uidnumber: 100 +gidnumber: 100 +homeDirectory: /home/uid100 + +dn: cn=user101,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user101 +sn: user101 +uid: uid101 +givenname: givenname101 +description: description101 +userPassword: password101 +mail: uid101 +uidnumber: 101 +gidnumber: 101 +homeDirectory: /home/uid101 + +dn: cn=user102,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user102 +sn: user102 +uid: uid102 +givenname: givenname102 +description: description102 +userPassword: password102 +mail: uid102 +uidnumber: 102 +gidnumber: 102 +homeDirectory: /home/uid102 + +dn: cn=user103,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user103 +sn: user103 +uid: uid103 +givenname: givenname103 +description: description103 +userPassword: password103 +mail: uid103 +uidnumber: 103 +gidnumber: 103 +homeDirectory: /home/uid103 + +dn: cn=user104,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user104 +sn: user104 +uid: uid104 +givenname: givenname104 +description: description104 +userPassword: password104 +mail: uid104 +uidnumber: 104 +gidnumber: 104 +homeDirectory: /home/uid104 + +dn: cn=user105,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user105 +sn: user105 +uid: uid105 +givenname: givenname105 +description: description105 +userPassword: password105 +mail: uid105 +uidnumber: 105 +gidnumber: 105 +homeDirectory: /home/uid105 + +dn: cn=user106,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user106 +sn: user106 +uid: uid106 +givenname: givenname106 +description: description106 +userPassword: password106 +mail: uid106 +uidnumber: 106 +gidnumber: 106 +homeDirectory: /home/uid106 + +dn: cn=user107,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user107 +sn: user107 +uid: uid107 +givenname: givenname107 +description: description107 +userPassword: password107 +mail: uid107 +uidnumber: 107 +gidnumber: 107 +homeDirectory: /home/uid107 + +dn: cn=user108,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user108 +sn: user108 +uid: uid108 +givenname: givenname108 +description: description108 +userPassword: password108 +mail: uid108 +uidnumber: 108 +gidnumber: 108 +homeDirectory: /home/uid108 + +dn: cn=user109,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user109 +sn: user109 +uid: uid109 +givenname: givenname109 +description: description109 +userPassword: password109 +mail: uid109 +uidnumber: 109 +gidnumber: 109 +homeDirectory: /home/uid109 + +dn: cn=user110,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user110 +sn: user110 +uid: uid110 +givenname: givenname110 +description: description110 +userPassword: password110 +mail: uid110 +uidnumber: 110 +gidnumber: 110 +homeDirectory: /home/uid110 + +dn: cn=user111,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user111 +sn: user111 +uid: uid111 +givenname: givenname111 +description: description111 +userPassword: password111 +mail: uid111 +uidnumber: 111 +gidnumber: 111 +homeDirectory: /home/uid111 + +dn: cn=user112,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user112 +sn: user112 +uid: uid112 +givenname: givenname112 +description: description112 +userPassword: password112 +mail: uid112 +uidnumber: 112 +gidnumber: 112 +homeDirectory: /home/uid112 + +dn: cn=user113,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user113 +sn: user113 +uid: uid113 +givenname: givenname113 +description: description113 +userPassword: password113 +mail: uid113 +uidnumber: 113 +gidnumber: 113 +homeDirectory: /home/uid113 + +dn: cn=user114,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user114 +sn: user114 +uid: uid114 +givenname: givenname114 +description: description114 +userPassword: password114 +mail: uid114 +uidnumber: 114 +gidnumber: 114 +homeDirectory: /home/uid114 + +dn: cn=user115,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user115 +sn: user115 +uid: uid115 +givenname: givenname115 +description: description115 +userPassword: password115 +mail: uid115 +uidnumber: 115 +gidnumber: 115 +homeDirectory: /home/uid115 + +dn: cn=user116,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user116 +sn: user116 +uid: uid116 +givenname: givenname116 +description: description116 +userPassword: password116 +mail: uid116 +uidnumber: 116 +gidnumber: 116 +homeDirectory: /home/uid116 + +dn: cn=user117,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user117 +sn: user117 +uid: uid117 +givenname: givenname117 +description: description117 +userPassword: password117 +mail: uid117 +uidnumber: 117 +gidnumber: 117 +homeDirectory: /home/uid117 + +dn: cn=user118,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user118 +sn: user118 +uid: uid118 +givenname: givenname118 +description: description118 +userPassword: password118 +mail: uid118 +uidnumber: 118 +gidnumber: 118 +homeDirectory: /home/uid118 + +dn: cn=user119,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user119 +sn: user119 +uid: uid119 +givenname: givenname119 +description: description119 +userPassword: password119 +mail: uid119 +uidnumber: 119 +gidnumber: 119 +homeDirectory: /home/uid119 + +dn: cn=user120,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user120 +sn: user120 +uid: uid120 +givenname: givenname120 +description: description120 +userPassword: password120 +mail: uid120 +uidnumber: 120 +gidnumber: 120 +homeDirectory: /home/uid120 + +dn: cn=user121,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user121 +sn: user121 +uid: uid121 +givenname: givenname121 +description: description121 +userPassword: password121 +mail: uid121 +uidnumber: 121 +gidnumber: 121 +homeDirectory: /home/uid121 + +dn: cn=user122,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user122 +sn: user122 +uid: uid122 +givenname: givenname122 +description: description122 +userPassword: password122 +mail: uid122 +uidnumber: 122 +gidnumber: 122 +homeDirectory: /home/uid122 + +dn: cn=user123,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user123 +sn: user123 +uid: uid123 +givenname: givenname123 +description: description123 +userPassword: password123 +mail: uid123 +uidnumber: 123 +gidnumber: 123 +homeDirectory: /home/uid123 + +dn: cn=user124,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user124 +sn: user124 +uid: uid124 +givenname: givenname124 +description: description124 +userPassword: password124 +mail: uid124 +uidnumber: 124 +gidnumber: 124 +homeDirectory: /home/uid124 + +dn: cn=user125,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user125 +sn: user125 +uid: uid125 +givenname: givenname125 +description: description125 +userPassword: password125 +mail: uid125 +uidnumber: 125 +gidnumber: 125 +homeDirectory: /home/uid125 + +dn: cn=user126,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user126 +sn: user126 +uid: uid126 +givenname: givenname126 +description: description126 +userPassword: password126 +mail: uid126 +uidnumber: 126 +gidnumber: 126 +homeDirectory: /home/uid126 + +dn: cn=user127,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user127 +sn: user127 +uid: uid127 +givenname: givenname127 +description: description127 +userPassword: password127 +mail: uid127 +uidnumber: 127 +gidnumber: 127 +homeDirectory: /home/uid127 + +dn: cn=user128,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user128 +sn: user128 +uid: uid128 +givenname: givenname128 +description: description128 +userPassword: password128 +mail: uid128 +uidnumber: 128 +gidnumber: 128 +homeDirectory: /home/uid128 + +dn: cn=user129,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user129 +sn: user129 +uid: uid129 +givenname: givenname129 +description: description129 +userPassword: password129 +mail: uid129 +uidnumber: 129 +gidnumber: 129 +homeDirectory: /home/uid129 + +dn: cn=user130,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user130 +sn: user130 +uid: uid130 +givenname: givenname130 +description: description130 +userPassword: password130 +mail: uid130 +uidnumber: 130 +gidnumber: 130 +homeDirectory: /home/uid130 + +dn: cn=user131,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user131 +sn: user131 +uid: uid131 +givenname: givenname131 +description: description131 +userPassword: password131 +mail: uid131 +uidnumber: 131 +gidnumber: 131 +homeDirectory: /home/uid131 + +dn: cn=user132,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user132 +sn: user132 +uid: uid132 +givenname: givenname132 +description: description132 +userPassword: password132 +mail: uid132 +uidnumber: 132 +gidnumber: 132 +homeDirectory: /home/uid132 + +dn: cn=user133,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user133 +sn: user133 +uid: uid133 +givenname: givenname133 +description: description133 +userPassword: password133 +mail: uid133 +uidnumber: 133 +gidnumber: 133 +homeDirectory: /home/uid133 + +dn: cn=user134,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user134 +sn: user134 +uid: uid134 +givenname: givenname134 +description: description134 +userPassword: password134 +mail: uid134 +uidnumber: 134 +gidnumber: 134 +homeDirectory: /home/uid134 + +dn: cn=user135,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user135 +sn: user135 +uid: uid135 +givenname: givenname135 +description: description135 +userPassword: password135 +mail: uid135 +uidnumber: 135 +gidnumber: 135 +homeDirectory: /home/uid135 + +dn: cn=user136,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user136 +sn: user136 +uid: uid136 +givenname: givenname136 +description: description136 +userPassword: password136 +mail: uid136 +uidnumber: 136 +gidnumber: 136 +homeDirectory: /home/uid136 + +dn: cn=user137,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user137 +sn: user137 +uid: uid137 +givenname: givenname137 +description: description137 +userPassword: password137 +mail: uid137 +uidnumber: 137 +gidnumber: 137 +homeDirectory: /home/uid137 + +dn: cn=user138,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user138 +sn: user138 +uid: uid138 +givenname: givenname138 +description: description138 +userPassword: password138 +mail: uid138 +uidnumber: 138 +gidnumber: 138 +homeDirectory: /home/uid138 + +dn: cn=user139,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user139 +sn: user139 +uid: uid139 +givenname: givenname139 +description: description139 +userPassword: password139 +mail: uid139 +uidnumber: 139 +gidnumber: 139 +homeDirectory: /home/uid139 + +dn: cn=user140,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user140 +sn: user140 +uid: uid140 +givenname: givenname140 +description: description140 +userPassword: password140 +mail: uid140 +uidnumber: 140 +gidnumber: 140 +homeDirectory: /home/uid140 + +dn: cn=user141,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user141 +sn: user141 +uid: uid141 +givenname: givenname141 +description: description141 +userPassword: password141 +mail: uid141 +uidnumber: 141 +gidnumber: 141 +homeDirectory: /home/uid141 + +dn: cn=user142,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user142 +sn: user142 +uid: uid142 +givenname: givenname142 +description: description142 +userPassword: password142 +mail: uid142 +uidnumber: 142 +gidnumber: 142 +homeDirectory: /home/uid142 + +dn: cn=user143,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user143 +sn: user143 +uid: uid143 +givenname: givenname143 +description: description143 +userPassword: password143 +mail: uid143 +uidnumber: 143 +gidnumber: 143 +homeDirectory: /home/uid143 + +dn: cn=user144,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user144 +sn: user144 +uid: uid144 +givenname: givenname144 +description: description144 +userPassword: password144 +mail: uid144 +uidnumber: 144 +gidnumber: 144 +homeDirectory: /home/uid144 + +dn: cn=user145,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user145 +sn: user145 +uid: uid145 +givenname: givenname145 +description: description145 +userPassword: password145 +mail: uid145 +uidnumber: 145 +gidnumber: 145 +homeDirectory: /home/uid145 + +dn: cn=user146,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user146 +sn: user146 +uid: uid146 +givenname: givenname146 +description: description146 +userPassword: password146 +mail: uid146 +uidnumber: 146 +gidnumber: 146 +homeDirectory: /home/uid146 + +dn: cn=user147,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user147 +sn: user147 +uid: uid147 +givenname: givenname147 +description: description147 +userPassword: password147 +mail: uid147 +uidnumber: 147 +gidnumber: 147 +homeDirectory: /home/uid147 + +dn: cn=user148,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user148 +sn: user148 +uid: uid148 +givenname: givenname148 +description: description148 +userPassword: password148 +mail: uid148 +uidnumber: 148 +gidnumber: 148 +homeDirectory: /home/uid148 + +dn: cn=user149,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user149 +sn: user149 +uid: uid149 +givenname: givenname149 +description: description149 +userPassword: password149 +mail: uid149 +uidnumber: 149 +gidnumber: 149 +homeDirectory: /home/uid149 + +dn: cn=user150,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user150 +sn: user150 +uid: uid150 +givenname: givenname150 +description: description150 +userPassword: password150 +mail: uid150 +uidnumber: 150 +gidnumber: 150 +homeDirectory: /home/uid150 + +dn: cn=user151,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user151 +sn: user151 +uid: uid151 +givenname: givenname151 +description: description151 +userPassword: password151 +mail: uid151 +uidnumber: 151 +gidnumber: 151 +homeDirectory: /home/uid151 + +dn: cn=user152,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user152 +sn: user152 +uid: uid152 +givenname: givenname152 +description: description152 +userPassword: password152 +mail: uid152 +uidnumber: 152 +gidnumber: 152 +homeDirectory: /home/uid152 + +dn: cn=user153,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user153 +sn: user153 +uid: uid153 +givenname: givenname153 +description: description153 +userPassword: password153 +mail: uid153 +uidnumber: 153 +gidnumber: 153 +homeDirectory: /home/uid153 + +dn: cn=user154,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user154 +sn: user154 +uid: uid154 +givenname: givenname154 +description: description154 +userPassword: password154 +mail: uid154 +uidnumber: 154 +gidnumber: 154 +homeDirectory: /home/uid154 + +dn: cn=user155,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user155 +sn: user155 +uid: uid155 +givenname: givenname155 +description: description155 +userPassword: password155 +mail: uid155 +uidnumber: 155 +gidnumber: 155 +homeDirectory: /home/uid155 + +dn: cn=user156,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user156 +sn: user156 +uid: uid156 +givenname: givenname156 +description: description156 +userPassword: password156 +mail: uid156 +uidnumber: 156 +gidnumber: 156 +homeDirectory: /home/uid156 + +dn: cn=user157,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user157 +sn: user157 +uid: uid157 +givenname: givenname157 +description: description157 +userPassword: password157 +mail: uid157 +uidnumber: 157 +gidnumber: 157 +homeDirectory: /home/uid157 + +dn: cn=user158,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user158 +sn: user158 +uid: uid158 +givenname: givenname158 +description: description158 +userPassword: password158 +mail: uid158 +uidnumber: 158 +gidnumber: 158 +homeDirectory: /home/uid158 + +dn: cn=user159,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user159 +sn: user159 +uid: uid159 +givenname: givenname159 +description: description159 +userPassword: password159 +mail: uid159 +uidnumber: 159 +gidnumber: 159 +homeDirectory: /home/uid159 + +dn: cn=user160,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user160 +sn: user160 +uid: uid160 +givenname: givenname160 +description: description160 +userPassword: password160 +mail: uid160 +uidnumber: 160 +gidnumber: 160 +homeDirectory: /home/uid160 + +dn: cn=user161,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user161 +sn: user161 +uid: uid161 +givenname: givenname161 +description: description161 +userPassword: password161 +mail: uid161 +uidnumber: 161 +gidnumber: 161 +homeDirectory: /home/uid161 + +dn: cn=user162,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user162 +sn: user162 +uid: uid162 +givenname: givenname162 +description: description162 +userPassword: password162 +mail: uid162 +uidnumber: 162 +gidnumber: 162 +homeDirectory: /home/uid162 + +dn: cn=user163,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user163 +sn: user163 +uid: uid163 +givenname: givenname163 +description: description163 +userPassword: password163 +mail: uid163 +uidnumber: 163 +gidnumber: 163 +homeDirectory: /home/uid163 + +dn: cn=user164,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user164 +sn: user164 +uid: uid164 +givenname: givenname164 +description: description164 +userPassword: password164 +mail: uid164 +uidnumber: 164 +gidnumber: 164 +homeDirectory: /home/uid164 + +dn: cn=user165,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user165 +sn: user165 +uid: uid165 +givenname: givenname165 +description: description165 +userPassword: password165 +mail: uid165 +uidnumber: 165 +gidnumber: 165 +homeDirectory: /home/uid165 + +dn: cn=user166,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user166 +sn: user166 +uid: uid166 +givenname: givenname166 +description: description166 +userPassword: password166 +mail: uid166 +uidnumber: 166 +gidnumber: 166 +homeDirectory: /home/uid166 + +dn: cn=user167,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user167 +sn: user167 +uid: uid167 +givenname: givenname167 +description: description167 +userPassword: password167 +mail: uid167 +uidnumber: 167 +gidnumber: 167 +homeDirectory: /home/uid167 + +dn: cn=user168,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user168 +sn: user168 +uid: uid168 +givenname: givenname168 +description: description168 +userPassword: password168 +mail: uid168 +uidnumber: 168 +gidnumber: 168 +homeDirectory: /home/uid168 + +dn: cn=user169,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user169 +sn: user169 +uid: uid169 +givenname: givenname169 +description: description169 +userPassword: password169 +mail: uid169 +uidnumber: 169 +gidnumber: 169 +homeDirectory: /home/uid169 + +dn: cn=user170,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user170 +sn: user170 +uid: uid170 +givenname: givenname170 +description: description170 +userPassword: password170 +mail: uid170 +uidnumber: 170 +gidnumber: 170 +homeDirectory: /home/uid170 + +dn: cn=user171,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user171 +sn: user171 +uid: uid171 +givenname: givenname171 +description: description171 +userPassword: password171 +mail: uid171 +uidnumber: 171 +gidnumber: 171 +homeDirectory: /home/uid171 + +dn: cn=user172,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user172 +sn: user172 +uid: uid172 +givenname: givenname172 +description: description172 +userPassword: password172 +mail: uid172 +uidnumber: 172 +gidnumber: 172 +homeDirectory: /home/uid172 + +dn: cn=user173,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user173 +sn: user173 +uid: uid173 +givenname: givenname173 +description: description173 +userPassword: password173 +mail: uid173 +uidnumber: 173 +gidnumber: 173 +homeDirectory: /home/uid173 + +dn: cn=user174,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user174 +sn: user174 +uid: uid174 +givenname: givenname174 +description: description174 +userPassword: password174 +mail: uid174 +uidnumber: 174 +gidnumber: 174 +homeDirectory: /home/uid174 + +dn: cn=user175,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user175 +sn: user175 +uid: uid175 +givenname: givenname175 +description: description175 +userPassword: password175 +mail: uid175 +uidnumber: 175 +gidnumber: 175 +homeDirectory: /home/uid175 + +dn: cn=user176,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user176 +sn: user176 +uid: uid176 +givenname: givenname176 +description: description176 +userPassword: password176 +mail: uid176 +uidnumber: 176 +gidnumber: 176 +homeDirectory: /home/uid176 + +dn: cn=user177,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user177 +sn: user177 +uid: uid177 +givenname: givenname177 +description: description177 +userPassword: password177 +mail: uid177 +uidnumber: 177 +gidnumber: 177 +homeDirectory: /home/uid177 + +dn: cn=user178,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user178 +sn: user178 +uid: uid178 +givenname: givenname178 +description: description178 +userPassword: password178 +mail: uid178 +uidnumber: 178 +gidnumber: 178 +homeDirectory: /home/uid178 + +dn: cn=user179,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user179 +sn: user179 +uid: uid179 +givenname: givenname179 +description: description179 +userPassword: password179 +mail: uid179 +uidnumber: 179 +gidnumber: 179 +homeDirectory: /home/uid179 + +dn: cn=user180,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user180 +sn: user180 +uid: uid180 +givenname: givenname180 +description: description180 +userPassword: password180 +mail: uid180 +uidnumber: 180 +gidnumber: 180 +homeDirectory: /home/uid180 + +dn: cn=user181,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user181 +sn: user181 +uid: uid181 +givenname: givenname181 +description: description181 +userPassword: password181 +mail: uid181 +uidnumber: 181 +gidnumber: 181 +homeDirectory: /home/uid181 + +dn: cn=user182,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user182 +sn: user182 +uid: uid182 +givenname: givenname182 +description: description182 +userPassword: password182 +mail: uid182 +uidnumber: 182 +gidnumber: 182 +homeDirectory: /home/uid182 + +dn: cn=user183,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user183 +sn: user183 +uid: uid183 +givenname: givenname183 +description: description183 +userPassword: password183 +mail: uid183 +uidnumber: 183 +gidnumber: 183 +homeDirectory: /home/uid183 + +dn: cn=user184,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user184 +sn: user184 +uid: uid184 +givenname: givenname184 +description: description184 +userPassword: password184 +mail: uid184 +uidnumber: 184 +gidnumber: 184 +homeDirectory: /home/uid184 + +dn: cn=user185,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user185 +sn: user185 +uid: uid185 +givenname: givenname185 +description: description185 +userPassword: password185 +mail: uid185 +uidnumber: 185 +gidnumber: 185 +homeDirectory: /home/uid185 + +dn: cn=user186,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user186 +sn: user186 +uid: uid186 +givenname: givenname186 +description: description186 +userPassword: password186 +mail: uid186 +uidnumber: 186 +gidnumber: 186 +homeDirectory: /home/uid186 + +dn: cn=user187,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user187 +sn: user187 +uid: uid187 +givenname: givenname187 +description: description187 +userPassword: password187 +mail: uid187 +uidnumber: 187 +gidnumber: 187 +homeDirectory: /home/uid187 + +dn: cn=user188,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user188 +sn: user188 +uid: uid188 +givenname: givenname188 +description: description188 +userPassword: password188 +mail: uid188 +uidnumber: 188 +gidnumber: 188 +homeDirectory: /home/uid188 + +dn: cn=user189,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user189 +sn: user189 +uid: uid189 +givenname: givenname189 +description: description189 +userPassword: password189 +mail: uid189 +uidnumber: 189 +gidnumber: 189 +homeDirectory: /home/uid189 + +dn: cn=user190,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user190 +sn: user190 +uid: uid190 +givenname: givenname190 +description: description190 +userPassword: password190 +mail: uid190 +uidnumber: 190 +gidnumber: 190 +homeDirectory: /home/uid190 + +dn: cn=user191,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user191 +sn: user191 +uid: uid191 +givenname: givenname191 +description: description191 +userPassword: password191 +mail: uid191 +uidnumber: 191 +gidnumber: 191 +homeDirectory: /home/uid191 + +dn: cn=user192,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user192 +sn: user192 +uid: uid192 +givenname: givenname192 +description: description192 +userPassword: password192 +mail: uid192 +uidnumber: 192 +gidnumber: 192 +homeDirectory: /home/uid192 + +dn: cn=user193,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user193 +sn: user193 +uid: uid193 +givenname: givenname193 +description: description193 +userPassword: password193 +mail: uid193 +uidnumber: 193 +gidnumber: 193 +homeDirectory: /home/uid193 + +dn: cn=user194,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user194 +sn: user194 +uid: uid194 +givenname: givenname194 +description: description194 +userPassword: password194 +mail: uid194 +uidnumber: 194 +gidnumber: 194 +homeDirectory: /home/uid194 + +dn: cn=user195,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user195 +sn: user195 +uid: uid195 +givenname: givenname195 +description: description195 +userPassword: password195 +mail: uid195 +uidnumber: 195 +gidnumber: 195 +homeDirectory: /home/uid195 + +dn: cn=user196,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user196 +sn: user196 +uid: uid196 +givenname: givenname196 +description: description196 +userPassword: password196 +mail: uid196 +uidnumber: 196 +gidnumber: 196 +homeDirectory: /home/uid196 + +dn: cn=user197,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user197 +sn: user197 +uid: uid197 +givenname: givenname197 +description: description197 +userPassword: password197 +mail: uid197 +uidnumber: 197 +gidnumber: 197 +homeDirectory: /home/uid197 + +dn: cn=user198,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user198 +sn: user198 +uid: uid198 +givenname: givenname198 +description: description198 +userPassword: password198 +mail: uid198 +uidnumber: 198 +gidnumber: 198 +homeDirectory: /home/uid198 + +dn: cn=user199,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user199 +sn: user199 +uid: uid199 +givenname: givenname199 +description: description199 +userPassword: password199 +mail: uid199 +uidnumber: 199 +gidnumber: 199 +homeDirectory: /home/uid199 + +dn: cn=user200,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user200 +sn: user200 +uid: uid200 +givenname: givenname200 +description: description200 +userPassword: password200 +mail: uid200 +uidnumber: 200 +gidnumber: 200 +homeDirectory: /home/uid200 + +dn: cn=user201,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user201 +sn: user201 +uid: uid201 +givenname: givenname201 +description: description201 +userPassword: password201 +mail: uid201 +uidnumber: 201 +gidnumber: 201 +homeDirectory: /home/uid201 + +dn: cn=user202,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user202 +sn: user202 +uid: uid202 +givenname: givenname202 +description: description202 +userPassword: password202 +mail: uid202 +uidnumber: 202 +gidnumber: 202 +homeDirectory: /home/uid202 + +dn: cn=user203,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user203 +sn: user203 +uid: uid203 +givenname: givenname203 +description: description203 +userPassword: password203 +mail: uid203 +uidnumber: 203 +gidnumber: 203 +homeDirectory: /home/uid203 + +dn: cn=user204,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user204 +sn: user204 +uid: uid204 +givenname: givenname204 +description: description204 +userPassword: password204 +mail: uid204 +uidnumber: 204 +gidnumber: 204 +homeDirectory: /home/uid204 + +dn: cn=user205,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user205 +sn: user205 +uid: uid205 +givenname: givenname205 +description: description205 +userPassword: password205 +mail: uid205 +uidnumber: 205 +gidnumber: 205 +homeDirectory: /home/uid205 + +dn: cn=user206,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user206 +sn: user206 +uid: uid206 +givenname: givenname206 +description: description206 +userPassword: password206 +mail: uid206 +uidnumber: 206 +gidnumber: 206 +homeDirectory: /home/uid206 + +dn: cn=user207,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user207 +sn: user207 +uid: uid207 +givenname: givenname207 +description: description207 +userPassword: password207 +mail: uid207 +uidnumber: 207 +gidnumber: 207 +homeDirectory: /home/uid207 + +dn: cn=user208,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user208 +sn: user208 +uid: uid208 +givenname: givenname208 +description: description208 +userPassword: password208 +mail: uid208 +uidnumber: 208 +gidnumber: 208 +homeDirectory: /home/uid208 + +dn: cn=user209,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user209 +sn: user209 +uid: uid209 +givenname: givenname209 +description: description209 +userPassword: password209 +mail: uid209 +uidnumber: 209 +gidnumber: 209 +homeDirectory: /home/uid209 + +dn: cn=user210,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user210 +sn: user210 +uid: uid210 +givenname: givenname210 +description: description210 +userPassword: password210 +mail: uid210 +uidnumber: 210 +gidnumber: 210 +homeDirectory: /home/uid210 + +dn: cn=user211,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user211 +sn: user211 +uid: uid211 +givenname: givenname211 +description: description211 +userPassword: password211 +mail: uid211 +uidnumber: 211 +gidnumber: 211 +homeDirectory: /home/uid211 + +dn: cn=user212,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user212 +sn: user212 +uid: uid212 +givenname: givenname212 +description: description212 +userPassword: password212 +mail: uid212 +uidnumber: 212 +gidnumber: 212 +homeDirectory: /home/uid212 + +dn: cn=user213,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user213 +sn: user213 +uid: uid213 +givenname: givenname213 +description: description213 +userPassword: password213 +mail: uid213 +uidnumber: 213 +gidnumber: 213 +homeDirectory: /home/uid213 + +dn: cn=user214,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user214 +sn: user214 +uid: uid214 +givenname: givenname214 +description: description214 +userPassword: password214 +mail: uid214 +uidnumber: 214 +gidnumber: 214 +homeDirectory: /home/uid214 + +dn: cn=user215,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user215 +sn: user215 +uid: uid215 +givenname: givenname215 +description: description215 +userPassword: password215 +mail: uid215 +uidnumber: 215 +gidnumber: 215 +homeDirectory: /home/uid215 + +dn: cn=user216,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user216 +sn: user216 +uid: uid216 +givenname: givenname216 +description: description216 +userPassword: password216 +mail: uid216 +uidnumber: 216 +gidnumber: 216 +homeDirectory: /home/uid216 + +dn: cn=user217,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user217 +sn: user217 +uid: uid217 +givenname: givenname217 +description: description217 +userPassword: password217 +mail: uid217 +uidnumber: 217 +gidnumber: 217 +homeDirectory: /home/uid217 + +dn: cn=user218,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user218 +sn: user218 +uid: uid218 +givenname: givenname218 +description: description218 +userPassword: password218 +mail: uid218 +uidnumber: 218 +gidnumber: 218 +homeDirectory: /home/uid218 + +dn: cn=user219,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user219 +sn: user219 +uid: uid219 +givenname: givenname219 +description: description219 +userPassword: password219 +mail: uid219 +uidnumber: 219 +gidnumber: 219 +homeDirectory: /home/uid219 + +dn: cn=user220,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user220 +sn: user220 +uid: uid220 +givenname: givenname220 +description: description220 +userPassword: password220 +mail: uid220 +uidnumber: 220 +gidnumber: 220 +homeDirectory: /home/uid220 + +dn: cn=user221,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user221 +sn: user221 +uid: uid221 +givenname: givenname221 +description: description221 +userPassword: password221 +mail: uid221 +uidnumber: 221 +gidnumber: 221 +homeDirectory: /home/uid221 + +dn: cn=user222,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user222 +sn: user222 +uid: uid222 +givenname: givenname222 +description: description222 +userPassword: password222 +mail: uid222 +uidnumber: 222 +gidnumber: 222 +homeDirectory: /home/uid222 + +dn: cn=user223,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user223 +sn: user223 +uid: uid223 +givenname: givenname223 +description: description223 +userPassword: password223 +mail: uid223 +uidnumber: 223 +gidnumber: 223 +homeDirectory: /home/uid223 + +dn: cn=user224,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user224 +sn: user224 +uid: uid224 +givenname: givenname224 +description: description224 +userPassword: password224 +mail: uid224 +uidnumber: 224 +gidnumber: 224 +homeDirectory: /home/uid224 + +dn: cn=user225,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user225 +sn: user225 +uid: uid225 +givenname: givenname225 +description: description225 +userPassword: password225 +mail: uid225 +uidnumber: 225 +gidnumber: 225 +homeDirectory: /home/uid225 + +dn: cn=user226,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user226 +sn: user226 +uid: uid226 +givenname: givenname226 +description: description226 +userPassword: password226 +mail: uid226 +uidnumber: 226 +gidnumber: 226 +homeDirectory: /home/uid226 + +dn: cn=user227,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user227 +sn: user227 +uid: uid227 +givenname: givenname227 +description: description227 +userPassword: password227 +mail: uid227 +uidnumber: 227 +gidnumber: 227 +homeDirectory: /home/uid227 + +dn: cn=user228,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user228 +sn: user228 +uid: uid228 +givenname: givenname228 +description: description228 +userPassword: password228 +mail: uid228 +uidnumber: 228 +gidnumber: 228 +homeDirectory: /home/uid228 + +dn: cn=user229,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user229 +sn: user229 +uid: uid229 +givenname: givenname229 +description: description229 +userPassword: password229 +mail: uid229 +uidnumber: 229 +gidnumber: 229 +homeDirectory: /home/uid229 + +dn: cn=user230,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user230 +sn: user230 +uid: uid230 +givenname: givenname230 +description: description230 +userPassword: password230 +mail: uid230 +uidnumber: 230 +gidnumber: 230 +homeDirectory: /home/uid230 + +dn: cn=user231,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user231 +sn: user231 +uid: uid231 +givenname: givenname231 +description: description231 +userPassword: password231 +mail: uid231 +uidnumber: 231 +gidnumber: 231 +homeDirectory: /home/uid231 + +dn: cn=user232,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user232 +sn: user232 +uid: uid232 +givenname: givenname232 +description: description232 +userPassword: password232 +mail: uid232 +uidnumber: 232 +gidnumber: 232 +homeDirectory: /home/uid232 + +dn: cn=user233,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user233 +sn: user233 +uid: uid233 +givenname: givenname233 +description: description233 +userPassword: password233 +mail: uid233 +uidnumber: 233 +gidnumber: 233 +homeDirectory: /home/uid233 + +dn: cn=user234,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user234 +sn: user234 +uid: uid234 +givenname: givenname234 +description: description234 +userPassword: password234 +mail: uid234 +uidnumber: 234 +gidnumber: 234 +homeDirectory: /home/uid234 + +dn: cn=user235,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user235 +sn: user235 +uid: uid235 +givenname: givenname235 +description: description235 +userPassword: password235 +mail: uid235 +uidnumber: 235 +gidnumber: 235 +homeDirectory: /home/uid235 + +dn: cn=user236,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user236 +sn: user236 +uid: uid236 +givenname: givenname236 +description: description236 +userPassword: password236 +mail: uid236 +uidnumber: 236 +gidnumber: 236 +homeDirectory: /home/uid236 + +dn: cn=user237,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user237 +sn: user237 +uid: uid237 +givenname: givenname237 +description: description237 +userPassword: password237 +mail: uid237 +uidnumber: 237 +gidnumber: 237 +homeDirectory: /home/uid237 + +dn: cn=user238,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user238 +sn: user238 +uid: uid238 +givenname: givenname238 +description: description238 +userPassword: password238 +mail: uid238 +uidnumber: 238 +gidnumber: 238 +homeDirectory: /home/uid238 + +dn: cn=user239,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user239 +sn: user239 +uid: uid239 +givenname: givenname239 +description: description239 +userPassword: password239 +mail: uid239 +uidnumber: 239 +gidnumber: 239 +homeDirectory: /home/uid239 + +dn: cn=user240,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user240 +sn: user240 +uid: uid240 +givenname: givenname240 +description: description240 +userPassword: password240 +mail: uid240 +uidnumber: 240 +gidnumber: 240 +homeDirectory: /home/uid240 + +dn: cn=user241,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user241 +sn: user241 +uid: uid241 +givenname: givenname241 +description: description241 +userPassword: password241 +mail: uid241 +uidnumber: 241 +gidnumber: 241 +homeDirectory: /home/uid241 + +dn: cn=user242,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user242 +sn: user242 +uid: uid242 +givenname: givenname242 +description: description242 +userPassword: password242 +mail: uid242 +uidnumber: 242 +gidnumber: 242 +homeDirectory: /home/uid242 + +dn: cn=user243,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user243 +sn: user243 +uid: uid243 +givenname: givenname243 +description: description243 +userPassword: password243 +mail: uid243 +uidnumber: 243 +gidnumber: 243 +homeDirectory: /home/uid243 + +dn: cn=user244,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user244 +sn: user244 +uid: uid244 +givenname: givenname244 +description: description244 +userPassword: password244 +mail: uid244 +uidnumber: 244 +gidnumber: 244 +homeDirectory: /home/uid244 + +dn: cn=user245,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user245 +sn: user245 +uid: uid245 +givenname: givenname245 +description: description245 +userPassword: password245 +mail: uid245 +uidnumber: 245 +gidnumber: 245 +homeDirectory: /home/uid245 + +dn: cn=user246,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user246 +sn: user246 +uid: uid246 +givenname: givenname246 +description: description246 +userPassword: password246 +mail: uid246 +uidnumber: 246 +gidnumber: 246 +homeDirectory: /home/uid246 + +dn: cn=user247,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user247 +sn: user247 +uid: uid247 +givenname: givenname247 +description: description247 +userPassword: password247 +mail: uid247 +uidnumber: 247 +gidnumber: 247 +homeDirectory: /home/uid247 + +dn: cn=user248,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user248 +sn: user248 +uid: uid248 +givenname: givenname248 +description: description248 +userPassword: password248 +mail: uid248 +uidnumber: 248 +gidnumber: 248 +homeDirectory: /home/uid248 + +dn: cn=user249,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user249 +sn: user249 +uid: uid249 +givenname: givenname249 +description: description249 +userPassword: password249 +mail: uid249 +uidnumber: 249 +gidnumber: 249 +homeDirectory: /home/uid249 + +dn: cn=user250,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user250 +sn: user250 +uid: uid250 +givenname: givenname250 +description: description250 +userPassword: password250 +mail: uid250 +uidnumber: 250 +gidnumber: 250 +homeDirectory: /home/uid250 + +dn: cn=user251,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user251 +sn: user251 +uid: uid251 +givenname: givenname251 +description: description251 +userPassword: password251 +mail: uid251 +uidnumber: 251 +gidnumber: 251 +homeDirectory: /home/uid251 + +dn: cn=user252,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user252 +sn: user252 +uid: uid252 +givenname: givenname252 +description: description252 +userPassword: password252 +mail: uid252 +uidnumber: 252 +gidnumber: 252 +homeDirectory: /home/uid252 + +dn: cn=user253,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user253 +sn: user253 +uid: uid253 +givenname: givenname253 +description: description253 +userPassword: password253 +mail: uid253 +uidnumber: 253 +gidnumber: 253 +homeDirectory: /home/uid253 + +dn: cn=user254,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user254 +sn: user254 +uid: uid254 +givenname: givenname254 +description: description254 +userPassword: password254 +mail: uid254 +uidnumber: 254 +gidnumber: 254 +homeDirectory: /home/uid254 + +dn: cn=user255,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user255 +sn: user255 +uid: uid255 +givenname: givenname255 +description: description255 +userPassword: password255 +mail: uid255 +uidnumber: 255 +gidnumber: 255 +homeDirectory: /home/uid255 + +dn: cn=user256,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user256 +sn: user256 +uid: uid256 +givenname: givenname256 +description: description256 +userPassword: password256 +mail: uid256 +uidnumber: 256 +gidnumber: 256 +homeDirectory: /home/uid256 + +dn: cn=user257,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user257 +sn: user257 +uid: uid257 +givenname: givenname257 +description: description257 +userPassword: password257 +mail: uid257 +uidnumber: 257 +gidnumber: 257 +homeDirectory: /home/uid257 + +dn: cn=user258,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user258 +sn: user258 +uid: uid258 +givenname: givenname258 +description: description258 +userPassword: password258 +mail: uid258 +uidnumber: 258 +gidnumber: 258 +homeDirectory: /home/uid258 + +dn: cn=user259,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user259 +sn: user259 +uid: uid259 +givenname: givenname259 +description: description259 +userPassword: password259 +mail: uid259 +uidnumber: 259 +gidnumber: 259 +homeDirectory: /home/uid259 + +dn: cn=user260,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user260 +sn: user260 +uid: uid260 +givenname: givenname260 +description: description260 +userPassword: password260 +mail: uid260 +uidnumber: 260 +gidnumber: 260 +homeDirectory: /home/uid260 + +dn: cn=user261,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user261 +sn: user261 +uid: uid261 +givenname: givenname261 +description: description261 +userPassword: password261 +mail: uid261 +uidnumber: 261 +gidnumber: 261 +homeDirectory: /home/uid261 + +dn: cn=user262,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user262 +sn: user262 +uid: uid262 +givenname: givenname262 +description: description262 +userPassword: password262 +mail: uid262 +uidnumber: 262 +gidnumber: 262 +homeDirectory: /home/uid262 + +dn: cn=user263,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user263 +sn: user263 +uid: uid263 +givenname: givenname263 +description: description263 +userPassword: password263 +mail: uid263 +uidnumber: 263 +gidnumber: 263 +homeDirectory: /home/uid263 + +dn: cn=user264,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user264 +sn: user264 +uid: uid264 +givenname: givenname264 +description: description264 +userPassword: password264 +mail: uid264 +uidnumber: 264 +gidnumber: 264 +homeDirectory: /home/uid264 + +dn: cn=user265,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user265 +sn: user265 +uid: uid265 +givenname: givenname265 +description: description265 +userPassword: password265 +mail: uid265 +uidnumber: 265 +gidnumber: 265 +homeDirectory: /home/uid265 + +dn: cn=user266,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user266 +sn: user266 +uid: uid266 +givenname: givenname266 +description: description266 +userPassword: password266 +mail: uid266 +uidnumber: 266 +gidnumber: 266 +homeDirectory: /home/uid266 + +dn: cn=user267,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user267 +sn: user267 +uid: uid267 +givenname: givenname267 +description: description267 +userPassword: password267 +mail: uid267 +uidnumber: 267 +gidnumber: 267 +homeDirectory: /home/uid267 + +dn: cn=user268,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user268 +sn: user268 +uid: uid268 +givenname: givenname268 +description: description268 +userPassword: password268 +mail: uid268 +uidnumber: 268 +gidnumber: 268 +homeDirectory: /home/uid268 + +dn: cn=user269,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user269 +sn: user269 +uid: uid269 +givenname: givenname269 +description: description269 +userPassword: password269 +mail: uid269 +uidnumber: 269 +gidnumber: 269 +homeDirectory: /home/uid269 + +dn: cn=user270,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user270 +sn: user270 +uid: uid270 +givenname: givenname270 +description: description270 +userPassword: password270 +mail: uid270 +uidnumber: 270 +gidnumber: 270 +homeDirectory: /home/uid270 + +dn: cn=user271,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user271 +sn: user271 +uid: uid271 +givenname: givenname271 +description: description271 +userPassword: password271 +mail: uid271 +uidnumber: 271 +gidnumber: 271 +homeDirectory: /home/uid271 + +dn: cn=user272,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user272 +sn: user272 +uid: uid272 +givenname: givenname272 +description: description272 +userPassword: password272 +mail: uid272 +uidnumber: 272 +gidnumber: 272 +homeDirectory: /home/uid272 + +dn: cn=user273,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user273 +sn: user273 +uid: uid273 +givenname: givenname273 +description: description273 +userPassword: password273 +mail: uid273 +uidnumber: 273 +gidnumber: 273 +homeDirectory: /home/uid273 + +dn: cn=user274,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user274 +sn: user274 +uid: uid274 +givenname: givenname274 +description: description274 +userPassword: password274 +mail: uid274 +uidnumber: 274 +gidnumber: 274 +homeDirectory: /home/uid274 + +dn: cn=user275,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user275 +sn: user275 +uid: uid275 +givenname: givenname275 +description: description275 +userPassword: password275 +mail: uid275 +uidnumber: 275 +gidnumber: 275 +homeDirectory: /home/uid275 + +dn: cn=user276,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user276 +sn: user276 +uid: uid276 +givenname: givenname276 +description: description276 +userPassword: password276 +mail: uid276 +uidnumber: 276 +gidnumber: 276 +homeDirectory: /home/uid276 + +dn: cn=user277,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user277 +sn: user277 +uid: uid277 +givenname: givenname277 +description: description277 +userPassword: password277 +mail: uid277 +uidnumber: 277 +gidnumber: 277 +homeDirectory: /home/uid277 + +dn: cn=user278,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user278 +sn: user278 +uid: uid278 +givenname: givenname278 +description: description278 +userPassword: password278 +mail: uid278 +uidnumber: 278 +gidnumber: 278 +homeDirectory: /home/uid278 + +dn: cn=user279,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user279 +sn: user279 +uid: uid279 +givenname: givenname279 +description: description279 +userPassword: password279 +mail: uid279 +uidnumber: 279 +gidnumber: 279 +homeDirectory: /home/uid279 + +dn: cn=user280,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user280 +sn: user280 +uid: uid280 +givenname: givenname280 +description: description280 +userPassword: password280 +mail: uid280 +uidnumber: 280 +gidnumber: 280 +homeDirectory: /home/uid280 + +dn: cn=user281,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user281 +sn: user281 +uid: uid281 +givenname: givenname281 +description: description281 +userPassword: password281 +mail: uid281 +uidnumber: 281 +gidnumber: 281 +homeDirectory: /home/uid281 + +dn: cn=user282,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user282 +sn: user282 +uid: uid282 +givenname: givenname282 +description: description282 +userPassword: password282 +mail: uid282 +uidnumber: 282 +gidnumber: 282 +homeDirectory: /home/uid282 + +dn: cn=user283,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user283 +sn: user283 +uid: uid283 +givenname: givenname283 +description: description283 +userPassword: password283 +mail: uid283 +uidnumber: 283 +gidnumber: 283 +homeDirectory: /home/uid283 + +dn: cn=user284,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user284 +sn: user284 +uid: uid284 +givenname: givenname284 +description: description284 +userPassword: password284 +mail: uid284 +uidnumber: 284 +gidnumber: 284 +homeDirectory: /home/uid284 + +dn: cn=user285,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user285 +sn: user285 +uid: uid285 +givenname: givenname285 +description: description285 +userPassword: password285 +mail: uid285 +uidnumber: 285 +gidnumber: 285 +homeDirectory: /home/uid285 + +dn: cn=user286,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user286 +sn: user286 +uid: uid286 +givenname: givenname286 +description: description286 +userPassword: password286 +mail: uid286 +uidnumber: 286 +gidnumber: 286 +homeDirectory: /home/uid286 + +dn: cn=user287,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user287 +sn: user287 +uid: uid287 +givenname: givenname287 +description: description287 +userPassword: password287 +mail: uid287 +uidnumber: 287 +gidnumber: 287 +homeDirectory: /home/uid287 + +dn: cn=user288,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user288 +sn: user288 +uid: uid288 +givenname: givenname288 +description: description288 +userPassword: password288 +mail: uid288 +uidnumber: 288 +gidnumber: 288 +homeDirectory: /home/uid288 + +dn: cn=user289,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user289 +sn: user289 +uid: uid289 +givenname: givenname289 +description: description289 +userPassword: password289 +mail: uid289 +uidnumber: 289 +gidnumber: 289 +homeDirectory: /home/uid289 + +dn: cn=user290,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user290 +sn: user290 +uid: uid290 +givenname: givenname290 +description: description290 +userPassword: password290 +mail: uid290 +uidnumber: 290 +gidnumber: 290 +homeDirectory: /home/uid290 + +dn: cn=user291,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user291 +sn: user291 +uid: uid291 +givenname: givenname291 +description: description291 +userPassword: password291 +mail: uid291 +uidnumber: 291 +gidnumber: 291 +homeDirectory: /home/uid291 + +dn: cn=user292,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user292 +sn: user292 +uid: uid292 +givenname: givenname292 +description: description292 +userPassword: password292 +mail: uid292 +uidnumber: 292 +gidnumber: 292 +homeDirectory: /home/uid292 + +dn: cn=user293,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user293 +sn: user293 +uid: uid293 +givenname: givenname293 +description: description293 +userPassword: password293 +mail: uid293 +uidnumber: 293 +gidnumber: 293 +homeDirectory: /home/uid293 + +dn: cn=user294,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user294 +sn: user294 +uid: uid294 +givenname: givenname294 +description: description294 +userPassword: password294 +mail: uid294 +uidnumber: 294 +gidnumber: 294 +homeDirectory: /home/uid294 + +dn: cn=user295,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user295 +sn: user295 +uid: uid295 +givenname: givenname295 +description: description295 +userPassword: password295 +mail: uid295 +uidnumber: 295 +gidnumber: 295 +homeDirectory: /home/uid295 + +dn: cn=user296,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user296 +sn: user296 +uid: uid296 +givenname: givenname296 +description: description296 +userPassword: password296 +mail: uid296 +uidnumber: 296 +gidnumber: 296 +homeDirectory: /home/uid296 + +dn: cn=user297,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user297 +sn: user297 +uid: uid297 +givenname: givenname297 +description: description297 +userPassword: password297 +mail: uid297 +uidnumber: 297 +gidnumber: 297 +homeDirectory: /home/uid297 + +dn: cn=user298,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user298 +sn: user298 +uid: uid298 +givenname: givenname298 +description: description298 +userPassword: password298 +mail: uid298 +uidnumber: 298 +gidnumber: 298 +homeDirectory: /home/uid298 + +dn: cn=user299,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user299 +sn: user299 +uid: uid299 +givenname: givenname299 +description: description299 +userPassword: password299 +mail: uid299 +uidnumber: 299 +gidnumber: 299 +homeDirectory: /home/uid299 + +dn: cn=user300,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user300 +sn: user300 +uid: uid300 +givenname: givenname300 +description: description300 +userPassword: password300 +mail: uid300 +uidnumber: 300 +gidnumber: 300 +homeDirectory: /home/uid300 + +dn: cn=user301,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user301 +sn: user301 +uid: uid301 +givenname: givenname301 +description: description301 +userPassword: password301 +mail: uid301 +uidnumber: 301 +gidnumber: 301 +homeDirectory: /home/uid301 + +dn: cn=user302,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user302 +sn: user302 +uid: uid302 +givenname: givenname302 +description: description302 +userPassword: password302 +mail: uid302 +uidnumber: 302 +gidnumber: 302 +homeDirectory: /home/uid302 + +dn: cn=user303,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user303 +sn: user303 +uid: uid303 +givenname: givenname303 +description: description303 +userPassword: password303 +mail: uid303 +uidnumber: 303 +gidnumber: 303 +homeDirectory: /home/uid303 + +dn: cn=user304,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user304 +sn: user304 +uid: uid304 +givenname: givenname304 +description: description304 +userPassword: password304 +mail: uid304 +uidnumber: 304 +gidnumber: 304 +homeDirectory: /home/uid304 + +dn: cn=user305,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user305 +sn: user305 +uid: uid305 +givenname: givenname305 +description: description305 +userPassword: password305 +mail: uid305 +uidnumber: 305 +gidnumber: 305 +homeDirectory: /home/uid305 + +dn: cn=user306,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user306 +sn: user306 +uid: uid306 +givenname: givenname306 +description: description306 +userPassword: password306 +mail: uid306 +uidnumber: 306 +gidnumber: 306 +homeDirectory: /home/uid306 + +dn: cn=user307,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user307 +sn: user307 +uid: uid307 +givenname: givenname307 +description: description307 +userPassword: password307 +mail: uid307 +uidnumber: 307 +gidnumber: 307 +homeDirectory: /home/uid307 + +dn: cn=user308,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user308 +sn: user308 +uid: uid308 +givenname: givenname308 +description: description308 +userPassword: password308 +mail: uid308 +uidnumber: 308 +gidnumber: 308 +homeDirectory: /home/uid308 + +dn: cn=user309,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user309 +sn: user309 +uid: uid309 +givenname: givenname309 +description: description309 +userPassword: password309 +mail: uid309 +uidnumber: 309 +gidnumber: 309 +homeDirectory: /home/uid309 + +dn: cn=user310,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user310 +sn: user310 +uid: uid310 +givenname: givenname310 +description: description310 +userPassword: password310 +mail: uid310 +uidnumber: 310 +gidnumber: 310 +homeDirectory: /home/uid310 + +dn: cn=user311,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user311 +sn: user311 +uid: uid311 +givenname: givenname311 +description: description311 +userPassword: password311 +mail: uid311 +uidnumber: 311 +gidnumber: 311 +homeDirectory: /home/uid311 + +dn: cn=user312,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user312 +sn: user312 +uid: uid312 +givenname: givenname312 +description: description312 +userPassword: password312 +mail: uid312 +uidnumber: 312 +gidnumber: 312 +homeDirectory: /home/uid312 + +dn: cn=user313,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user313 +sn: user313 +uid: uid313 +givenname: givenname313 +description: description313 +userPassword: password313 +mail: uid313 +uidnumber: 313 +gidnumber: 313 +homeDirectory: /home/uid313 + +dn: cn=user314,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user314 +sn: user314 +uid: uid314 +givenname: givenname314 +description: description314 +userPassword: password314 +mail: uid314 +uidnumber: 314 +gidnumber: 314 +homeDirectory: /home/uid314 + +dn: cn=user315,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user315 +sn: user315 +uid: uid315 +givenname: givenname315 +description: description315 +userPassword: password315 +mail: uid315 +uidnumber: 315 +gidnumber: 315 +homeDirectory: /home/uid315 + +dn: cn=user316,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user316 +sn: user316 +uid: uid316 +givenname: givenname316 +description: description316 +userPassword: password316 +mail: uid316 +uidnumber: 316 +gidnumber: 316 +homeDirectory: /home/uid316 + +dn: cn=user317,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user317 +sn: user317 +uid: uid317 +givenname: givenname317 +description: description317 +userPassword: password317 +mail: uid317 +uidnumber: 317 +gidnumber: 317 +homeDirectory: /home/uid317 + +dn: cn=user318,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user318 +sn: user318 +uid: uid318 +givenname: givenname318 +description: description318 +userPassword: password318 +mail: uid318 +uidnumber: 318 +gidnumber: 318 +homeDirectory: /home/uid318 + +dn: cn=user319,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user319 +sn: user319 +uid: uid319 +givenname: givenname319 +description: description319 +userPassword: password319 +mail: uid319 +uidnumber: 319 +gidnumber: 319 +homeDirectory: /home/uid319 + +dn: cn=user320,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user320 +sn: user320 +uid: uid320 +givenname: givenname320 +description: description320 +userPassword: password320 +mail: uid320 +uidnumber: 320 +gidnumber: 320 +homeDirectory: /home/uid320 + +dn: cn=user321,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user321 +sn: user321 +uid: uid321 +givenname: givenname321 +description: description321 +userPassword: password321 +mail: uid321 +uidnumber: 321 +gidnumber: 321 +homeDirectory: /home/uid321 + +dn: cn=user322,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user322 +sn: user322 +uid: uid322 +givenname: givenname322 +description: description322 +userPassword: password322 +mail: uid322 +uidnumber: 322 +gidnumber: 322 +homeDirectory: /home/uid322 + +dn: cn=user323,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user323 +sn: user323 +uid: uid323 +givenname: givenname323 +description: description323 +userPassword: password323 +mail: uid323 +uidnumber: 323 +gidnumber: 323 +homeDirectory: /home/uid323 + +dn: cn=user324,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user324 +sn: user324 +uid: uid324 +givenname: givenname324 +description: description324 +userPassword: password324 +mail: uid324 +uidnumber: 324 +gidnumber: 324 +homeDirectory: /home/uid324 + +dn: cn=user325,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user325 +sn: user325 +uid: uid325 +givenname: givenname325 +description: description325 +userPassword: password325 +mail: uid325 +uidnumber: 325 +gidnumber: 325 +homeDirectory: /home/uid325 + +dn: cn=user326,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user326 +sn: user326 +uid: uid326 +givenname: givenname326 +description: description326 +userPassword: password326 +mail: uid326 +uidnumber: 326 +gidnumber: 326 +homeDirectory: /home/uid326 + +dn: cn=user327,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user327 +sn: user327 +uid: uid327 +givenname: givenname327 +description: description327 +userPassword: password327 +mail: uid327 +uidnumber: 327 +gidnumber: 327 +homeDirectory: /home/uid327 + +dn: cn=user328,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user328 +sn: user328 +uid: uid328 +givenname: givenname328 +description: description328 +userPassword: password328 +mail: uid328 +uidnumber: 328 +gidnumber: 328 +homeDirectory: /home/uid328 + +dn: cn=user329,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user329 +sn: user329 +uid: uid329 +givenname: givenname329 +description: description329 +userPassword: password329 +mail: uid329 +uidnumber: 329 +gidnumber: 329 +homeDirectory: /home/uid329 + +dn: cn=user330,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user330 +sn: user330 +uid: uid330 +givenname: givenname330 +description: description330 +userPassword: password330 +mail: uid330 +uidnumber: 330 +gidnumber: 330 +homeDirectory: /home/uid330 + +dn: cn=user331,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user331 +sn: user331 +uid: uid331 +givenname: givenname331 +description: description331 +userPassword: password331 +mail: uid331 +uidnumber: 331 +gidnumber: 331 +homeDirectory: /home/uid331 + +dn: cn=user332,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user332 +sn: user332 +uid: uid332 +givenname: givenname332 +description: description332 +userPassword: password332 +mail: uid332 +uidnumber: 332 +gidnumber: 332 +homeDirectory: /home/uid332 + +dn: cn=user333,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user333 +sn: user333 +uid: uid333 +givenname: givenname333 +description: description333 +userPassword: password333 +mail: uid333 +uidnumber: 333 +gidnumber: 333 +homeDirectory: /home/uid333 + +dn: cn=user334,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user334 +sn: user334 +uid: uid334 +givenname: givenname334 +description: description334 +userPassword: password334 +mail: uid334 +uidnumber: 334 +gidnumber: 334 +homeDirectory: /home/uid334 + +dn: cn=user335,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user335 +sn: user335 +uid: uid335 +givenname: givenname335 +description: description335 +userPassword: password335 +mail: uid335 +uidnumber: 335 +gidnumber: 335 +homeDirectory: /home/uid335 + +dn: cn=user336,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user336 +sn: user336 +uid: uid336 +givenname: givenname336 +description: description336 +userPassword: password336 +mail: uid336 +uidnumber: 336 +gidnumber: 336 +homeDirectory: /home/uid336 + +dn: cn=user337,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user337 +sn: user337 +uid: uid337 +givenname: givenname337 +description: description337 +userPassword: password337 +mail: uid337 +uidnumber: 337 +gidnumber: 337 +homeDirectory: /home/uid337 + +dn: cn=user338,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user338 +sn: user338 +uid: uid338 +givenname: givenname338 +description: description338 +userPassword: password338 +mail: uid338 +uidnumber: 338 +gidnumber: 338 +homeDirectory: /home/uid338 + +dn: cn=user339,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user339 +sn: user339 +uid: uid339 +givenname: givenname339 +description: description339 +userPassword: password339 +mail: uid339 +uidnumber: 339 +gidnumber: 339 +homeDirectory: /home/uid339 + +dn: cn=user340,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user340 +sn: user340 +uid: uid340 +givenname: givenname340 +description: description340 +userPassword: password340 +mail: uid340 +uidnumber: 340 +gidnumber: 340 +homeDirectory: /home/uid340 + +dn: cn=user341,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user341 +sn: user341 +uid: uid341 +givenname: givenname341 +description: description341 +userPassword: password341 +mail: uid341 +uidnumber: 341 +gidnumber: 341 +homeDirectory: /home/uid341 + +dn: cn=user342,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user342 +sn: user342 +uid: uid342 +givenname: givenname342 +description: description342 +userPassword: password342 +mail: uid342 +uidnumber: 342 +gidnumber: 342 +homeDirectory: /home/uid342 + +dn: cn=user343,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user343 +sn: user343 +uid: uid343 +givenname: givenname343 +description: description343 +userPassword: password343 +mail: uid343 +uidnumber: 343 +gidnumber: 343 +homeDirectory: /home/uid343 + +dn: cn=user344,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user344 +sn: user344 +uid: uid344 +givenname: givenname344 +description: description344 +userPassword: password344 +mail: uid344 +uidnumber: 344 +gidnumber: 344 +homeDirectory: /home/uid344 + +dn: cn=user345,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user345 +sn: user345 +uid: uid345 +givenname: givenname345 +description: description345 +userPassword: password345 +mail: uid345 +uidnumber: 345 +gidnumber: 345 +homeDirectory: /home/uid345 + +dn: cn=user346,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user346 +sn: user346 +uid: uid346 +givenname: givenname346 +description: description346 +userPassword: password346 +mail: uid346 +uidnumber: 346 +gidnumber: 346 +homeDirectory: /home/uid346 + +dn: cn=user347,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user347 +sn: user347 +uid: uid347 +givenname: givenname347 +description: description347 +userPassword: password347 +mail: uid347 +uidnumber: 347 +gidnumber: 347 +homeDirectory: /home/uid347 + +dn: cn=user348,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user348 +sn: user348 +uid: uid348 +givenname: givenname348 +description: description348 +userPassword: password348 +mail: uid348 +uidnumber: 348 +gidnumber: 348 +homeDirectory: /home/uid348 + +dn: cn=user349,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user349 +sn: user349 +uid: uid349 +givenname: givenname349 +description: description349 +userPassword: password349 +mail: uid349 +uidnumber: 349 +gidnumber: 349 +homeDirectory: /home/uid349 + +dn: cn=user350,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user350 +sn: user350 +uid: uid350 +givenname: givenname350 +description: description350 +userPassword: password350 +mail: uid350 +uidnumber: 350 +gidnumber: 350 +homeDirectory: /home/uid350 + +dn: cn=user351,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user351 +sn: user351 +uid: uid351 +givenname: givenname351 +description: description351 +userPassword: password351 +mail: uid351 +uidnumber: 351 +gidnumber: 351 +homeDirectory: /home/uid351 + +dn: cn=user352,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user352 +sn: user352 +uid: uid352 +givenname: givenname352 +description: description352 +userPassword: password352 +mail: uid352 +uidnumber: 352 +gidnumber: 352 +homeDirectory: /home/uid352 + +dn: cn=user353,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user353 +sn: user353 +uid: uid353 +givenname: givenname353 +description: description353 +userPassword: password353 +mail: uid353 +uidnumber: 353 +gidnumber: 353 +homeDirectory: /home/uid353 + +dn: cn=user354,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user354 +sn: user354 +uid: uid354 +givenname: givenname354 +description: description354 +userPassword: password354 +mail: uid354 +uidnumber: 354 +gidnumber: 354 +homeDirectory: /home/uid354 + +dn: cn=user355,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user355 +sn: user355 +uid: uid355 +givenname: givenname355 +description: description355 +userPassword: password355 +mail: uid355 +uidnumber: 355 +gidnumber: 355 +homeDirectory: /home/uid355 + +dn: cn=user356,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user356 +sn: user356 +uid: uid356 +givenname: givenname356 +description: description356 +userPassword: password356 +mail: uid356 +uidnumber: 356 +gidnumber: 356 +homeDirectory: /home/uid356 + +dn: cn=user357,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user357 +sn: user357 +uid: uid357 +givenname: givenname357 +description: description357 +userPassword: password357 +mail: uid357 +uidnumber: 357 +gidnumber: 357 +homeDirectory: /home/uid357 + +dn: cn=user358,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user358 +sn: user358 +uid: uid358 +givenname: givenname358 +description: description358 +userPassword: password358 +mail: uid358 +uidnumber: 358 +gidnumber: 358 +homeDirectory: /home/uid358 + +dn: cn=user359,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user359 +sn: user359 +uid: uid359 +givenname: givenname359 +description: description359 +userPassword: password359 +mail: uid359 +uidnumber: 359 +gidnumber: 359 +homeDirectory: /home/uid359 + +dn: cn=user360,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user360 +sn: user360 +uid: uid360 +givenname: givenname360 +description: description360 +userPassword: password360 +mail: uid360 +uidnumber: 360 +gidnumber: 360 +homeDirectory: /home/uid360 + +dn: cn=user361,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user361 +sn: user361 +uid: uid361 +givenname: givenname361 +description: description361 +userPassword: password361 +mail: uid361 +uidnumber: 361 +gidnumber: 361 +homeDirectory: /home/uid361 + +dn: cn=user362,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user362 +sn: user362 +uid: uid362 +givenname: givenname362 +description: description362 +userPassword: password362 +mail: uid362 +uidnumber: 362 +gidnumber: 362 +homeDirectory: /home/uid362 + +dn: cn=user363,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user363 +sn: user363 +uid: uid363 +givenname: givenname363 +description: description363 +userPassword: password363 +mail: uid363 +uidnumber: 363 +gidnumber: 363 +homeDirectory: /home/uid363 + +dn: cn=user364,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user364 +sn: user364 +uid: uid364 +givenname: givenname364 +description: description364 +userPassword: password364 +mail: uid364 +uidnumber: 364 +gidnumber: 364 +homeDirectory: /home/uid364 + +dn: cn=user365,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user365 +sn: user365 +uid: uid365 +givenname: givenname365 +description: description365 +userPassword: password365 +mail: uid365 +uidnumber: 365 +gidnumber: 365 +homeDirectory: /home/uid365 + +dn: cn=user366,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user366 +sn: user366 +uid: uid366 +givenname: givenname366 +description: description366 +userPassword: password366 +mail: uid366 +uidnumber: 366 +gidnumber: 366 +homeDirectory: /home/uid366 + +dn: cn=user367,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user367 +sn: user367 +uid: uid367 +givenname: givenname367 +description: description367 +userPassword: password367 +mail: uid367 +uidnumber: 367 +gidnumber: 367 +homeDirectory: /home/uid367 + +dn: cn=user368,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user368 +sn: user368 +uid: uid368 +givenname: givenname368 +description: description368 +userPassword: password368 +mail: uid368 +uidnumber: 368 +gidnumber: 368 +homeDirectory: /home/uid368 + +dn: cn=user369,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user369 +sn: user369 +uid: uid369 +givenname: givenname369 +description: description369 +userPassword: password369 +mail: uid369 +uidnumber: 369 +gidnumber: 369 +homeDirectory: /home/uid369 + +dn: cn=user370,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user370 +sn: user370 +uid: uid370 +givenname: givenname370 +description: description370 +userPassword: password370 +mail: uid370 +uidnumber: 370 +gidnumber: 370 +homeDirectory: /home/uid370 + +dn: cn=user371,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user371 +sn: user371 +uid: uid371 +givenname: givenname371 +description: description371 +userPassword: password371 +mail: uid371 +uidnumber: 371 +gidnumber: 371 +homeDirectory: /home/uid371 + +dn: cn=user372,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user372 +sn: user372 +uid: uid372 +givenname: givenname372 +description: description372 +userPassword: password372 +mail: uid372 +uidnumber: 372 +gidnumber: 372 +homeDirectory: /home/uid372 + +dn: cn=user373,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user373 +sn: user373 +uid: uid373 +givenname: givenname373 +description: description373 +userPassword: password373 +mail: uid373 +uidnumber: 373 +gidnumber: 373 +homeDirectory: /home/uid373 + +dn: cn=user374,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user374 +sn: user374 +uid: uid374 +givenname: givenname374 +description: description374 +userPassword: password374 +mail: uid374 +uidnumber: 374 +gidnumber: 374 +homeDirectory: /home/uid374 + +dn: cn=user375,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user375 +sn: user375 +uid: uid375 +givenname: givenname375 +description: description375 +userPassword: password375 +mail: uid375 +uidnumber: 375 +gidnumber: 375 +homeDirectory: /home/uid375 + +dn: cn=user376,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user376 +sn: user376 +uid: uid376 +givenname: givenname376 +description: description376 +userPassword: password376 +mail: uid376 +uidnumber: 376 +gidnumber: 376 +homeDirectory: /home/uid376 + +dn: cn=user377,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user377 +sn: user377 +uid: uid377 +givenname: givenname377 +description: description377 +userPassword: password377 +mail: uid377 +uidnumber: 377 +gidnumber: 377 +homeDirectory: /home/uid377 + +dn: cn=user378,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user378 +sn: user378 +uid: uid378 +givenname: givenname378 +description: description378 +userPassword: password378 +mail: uid378 +uidnumber: 378 +gidnumber: 378 +homeDirectory: /home/uid378 + +dn: cn=user379,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user379 +sn: user379 +uid: uid379 +givenname: givenname379 +description: description379 +userPassword: password379 +mail: uid379 +uidnumber: 379 +gidnumber: 379 +homeDirectory: /home/uid379 + +dn: cn=user380,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user380 +sn: user380 +uid: uid380 +givenname: givenname380 +description: description380 +userPassword: password380 +mail: uid380 +uidnumber: 380 +gidnumber: 380 +homeDirectory: /home/uid380 + +dn: cn=user381,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user381 +sn: user381 +uid: uid381 +givenname: givenname381 +description: description381 +userPassword: password381 +mail: uid381 +uidnumber: 381 +gidnumber: 381 +homeDirectory: /home/uid381 + +dn: cn=user382,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user382 +sn: user382 +uid: uid382 +givenname: givenname382 +description: description382 +userPassword: password382 +mail: uid382 +uidnumber: 382 +gidnumber: 382 +homeDirectory: /home/uid382 + +dn: cn=user383,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user383 +sn: user383 +uid: uid383 +givenname: givenname383 +description: description383 +userPassword: password383 +mail: uid383 +uidnumber: 383 +gidnumber: 383 +homeDirectory: /home/uid383 + +dn: cn=user384,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user384 +sn: user384 +uid: uid384 +givenname: givenname384 +description: description384 +userPassword: password384 +mail: uid384 +uidnumber: 384 +gidnumber: 384 +homeDirectory: /home/uid384 + +dn: cn=user385,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user385 +sn: user385 +uid: uid385 +givenname: givenname385 +description: description385 +userPassword: password385 +mail: uid385 +uidnumber: 385 +gidnumber: 385 +homeDirectory: /home/uid385 + +dn: cn=user386,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user386 +sn: user386 +uid: uid386 +givenname: givenname386 +description: description386 +userPassword: password386 +mail: uid386 +uidnumber: 386 +gidnumber: 386 +homeDirectory: /home/uid386 + +dn: cn=user387,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user387 +sn: user387 +uid: uid387 +givenname: givenname387 +description: description387 +userPassword: password387 +mail: uid387 +uidnumber: 387 +gidnumber: 387 +homeDirectory: /home/uid387 + +dn: cn=user388,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user388 +sn: user388 +uid: uid388 +givenname: givenname388 +description: description388 +userPassword: password388 +mail: uid388 +uidnumber: 388 +gidnumber: 388 +homeDirectory: /home/uid388 + +dn: cn=user389,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user389 +sn: user389 +uid: uid389 +givenname: givenname389 +description: description389 +userPassword: password389 +mail: uid389 +uidnumber: 389 +gidnumber: 389 +homeDirectory: /home/uid389 + +dn: cn=user390,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user390 +sn: user390 +uid: uid390 +givenname: givenname390 +description: description390 +userPassword: password390 +mail: uid390 +uidnumber: 390 +gidnumber: 390 +homeDirectory: /home/uid390 + +dn: cn=user391,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user391 +sn: user391 +uid: uid391 +givenname: givenname391 +description: description391 +userPassword: password391 +mail: uid391 +uidnumber: 391 +gidnumber: 391 +homeDirectory: /home/uid391 + +dn: cn=user392,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user392 +sn: user392 +uid: uid392 +givenname: givenname392 +description: description392 +userPassword: password392 +mail: uid392 +uidnumber: 392 +gidnumber: 392 +homeDirectory: /home/uid392 + +dn: cn=user393,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user393 +sn: user393 +uid: uid393 +givenname: givenname393 +description: description393 +userPassword: password393 +mail: uid393 +uidnumber: 393 +gidnumber: 393 +homeDirectory: /home/uid393 + +dn: cn=user394,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user394 +sn: user394 +uid: uid394 +givenname: givenname394 +description: description394 +userPassword: password394 +mail: uid394 +uidnumber: 394 +gidnumber: 394 +homeDirectory: /home/uid394 + +dn: cn=user395,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user395 +sn: user395 +uid: uid395 +givenname: givenname395 +description: description395 +userPassword: password395 +mail: uid395 +uidnumber: 395 +gidnumber: 395 +homeDirectory: /home/uid395 + +dn: cn=user396,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user396 +sn: user396 +uid: uid396 +givenname: givenname396 +description: description396 +userPassword: password396 +mail: uid396 +uidnumber: 396 +gidnumber: 396 +homeDirectory: /home/uid396 + +dn: cn=user397,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user397 +sn: user397 +uid: uid397 +givenname: givenname397 +description: description397 +userPassword: password397 +mail: uid397 +uidnumber: 397 +gidnumber: 397 +homeDirectory: /home/uid397 + +dn: cn=user398,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user398 +sn: user398 +uid: uid398 +givenname: givenname398 +description: description398 +userPassword: password398 +mail: uid398 +uidnumber: 398 +gidnumber: 398 +homeDirectory: /home/uid398 + +dn: cn=user399,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user399 +sn: user399 +uid: uid399 +givenname: givenname399 +description: description399 +userPassword: password399 +mail: uid399 +uidnumber: 399 +gidnumber: 399 +homeDirectory: /home/uid399 + +dn: cn=user400,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user400 +sn: user400 +uid: uid400 +givenname: givenname400 +description: description400 +userPassword: password400 +mail: uid400 +uidnumber: 400 +gidnumber: 400 +homeDirectory: /home/uid400 + +dn: cn=user401,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user401 +sn: user401 +uid: uid401 +givenname: givenname401 +description: description401 +userPassword: password401 +mail: uid401 +uidnumber: 401 +gidnumber: 401 +homeDirectory: /home/uid401 + +dn: cn=user402,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user402 +sn: user402 +uid: uid402 +givenname: givenname402 +description: description402 +userPassword: password402 +mail: uid402 +uidnumber: 402 +gidnumber: 402 +homeDirectory: /home/uid402 + +dn: cn=user403,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user403 +sn: user403 +uid: uid403 +givenname: givenname403 +description: description403 +userPassword: password403 +mail: uid403 +uidnumber: 403 +gidnumber: 403 +homeDirectory: /home/uid403 + +dn: cn=user404,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user404 +sn: user404 +uid: uid404 +givenname: givenname404 +description: description404 +userPassword: password404 +mail: uid404 +uidnumber: 404 +gidnumber: 404 +homeDirectory: /home/uid404 + +dn: cn=user405,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user405 +sn: user405 +uid: uid405 +givenname: givenname405 +description: description405 +userPassword: password405 +mail: uid405 +uidnumber: 405 +gidnumber: 405 +homeDirectory: /home/uid405 + +dn: cn=user406,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user406 +sn: user406 +uid: uid406 +givenname: givenname406 +description: description406 +userPassword: password406 +mail: uid406 +uidnumber: 406 +gidnumber: 406 +homeDirectory: /home/uid406 + +dn: cn=user407,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user407 +sn: user407 +uid: uid407 +givenname: givenname407 +description: description407 +userPassword: password407 +mail: uid407 +uidnumber: 407 +gidnumber: 407 +homeDirectory: /home/uid407 + +dn: cn=user408,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user408 +sn: user408 +uid: uid408 +givenname: givenname408 +description: description408 +userPassword: password408 +mail: uid408 +uidnumber: 408 +gidnumber: 408 +homeDirectory: /home/uid408 + +dn: cn=user409,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user409 +sn: user409 +uid: uid409 +givenname: givenname409 +description: description409 +userPassword: password409 +mail: uid409 +uidnumber: 409 +gidnumber: 409 +homeDirectory: /home/uid409 + +dn: cn=user410,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user410 +sn: user410 +uid: uid410 +givenname: givenname410 +description: description410 +userPassword: password410 +mail: uid410 +uidnumber: 410 +gidnumber: 410 +homeDirectory: /home/uid410 + +dn: cn=user411,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user411 +sn: user411 +uid: uid411 +givenname: givenname411 +description: description411 +userPassword: password411 +mail: uid411 +uidnumber: 411 +gidnumber: 411 +homeDirectory: /home/uid411 + +dn: cn=user412,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user412 +sn: user412 +uid: uid412 +givenname: givenname412 +description: description412 +userPassword: password412 +mail: uid412 +uidnumber: 412 +gidnumber: 412 +homeDirectory: /home/uid412 + +dn: cn=user413,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user413 +sn: user413 +uid: uid413 +givenname: givenname413 +description: description413 +userPassword: password413 +mail: uid413 +uidnumber: 413 +gidnumber: 413 +homeDirectory: /home/uid413 + +dn: cn=user414,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user414 +sn: user414 +uid: uid414 +givenname: givenname414 +description: description414 +userPassword: password414 +mail: uid414 +uidnumber: 414 +gidnumber: 414 +homeDirectory: /home/uid414 + +dn: cn=user415,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user415 +sn: user415 +uid: uid415 +givenname: givenname415 +description: description415 +userPassword: password415 +mail: uid415 +uidnumber: 415 +gidnumber: 415 +homeDirectory: /home/uid415 + +dn: cn=user416,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user416 +sn: user416 +uid: uid416 +givenname: givenname416 +description: description416 +userPassword: password416 +mail: uid416 +uidnumber: 416 +gidnumber: 416 +homeDirectory: /home/uid416 + +dn: cn=user417,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user417 +sn: user417 +uid: uid417 +givenname: givenname417 +description: description417 +userPassword: password417 +mail: uid417 +uidnumber: 417 +gidnumber: 417 +homeDirectory: /home/uid417 + +dn: cn=user418,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user418 +sn: user418 +uid: uid418 +givenname: givenname418 +description: description418 +userPassword: password418 +mail: uid418 +uidnumber: 418 +gidnumber: 418 +homeDirectory: /home/uid418 + +dn: cn=user419,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user419 +sn: user419 +uid: uid419 +givenname: givenname419 +description: description419 +userPassword: password419 +mail: uid419 +uidnumber: 419 +gidnumber: 419 +homeDirectory: /home/uid419 + +dn: cn=user420,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user420 +sn: user420 +uid: uid420 +givenname: givenname420 +description: description420 +userPassword: password420 +mail: uid420 +uidnumber: 420 +gidnumber: 420 +homeDirectory: /home/uid420 + +dn: cn=user421,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user421 +sn: user421 +uid: uid421 +givenname: givenname421 +description: description421 +userPassword: password421 +mail: uid421 +uidnumber: 421 +gidnumber: 421 +homeDirectory: /home/uid421 + +dn: cn=user422,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user422 +sn: user422 +uid: uid422 +givenname: givenname422 +description: description422 +userPassword: password422 +mail: uid422 +uidnumber: 422 +gidnumber: 422 +homeDirectory: /home/uid422 + +dn: cn=user423,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user423 +sn: user423 +uid: uid423 +givenname: givenname423 +description: description423 +userPassword: password423 +mail: uid423 +uidnumber: 423 +gidnumber: 423 +homeDirectory: /home/uid423 + +dn: cn=user424,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user424 +sn: user424 +uid: uid424 +givenname: givenname424 +description: description424 +userPassword: password424 +mail: uid424 +uidnumber: 424 +gidnumber: 424 +homeDirectory: /home/uid424 + +dn: cn=user425,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user425 +sn: user425 +uid: uid425 +givenname: givenname425 +description: description425 +userPassword: password425 +mail: uid425 +uidnumber: 425 +gidnumber: 425 +homeDirectory: /home/uid425 + +dn: cn=user426,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user426 +sn: user426 +uid: uid426 +givenname: givenname426 +description: description426 +userPassword: password426 +mail: uid426 +uidnumber: 426 +gidnumber: 426 +homeDirectory: /home/uid426 + +dn: cn=user427,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user427 +sn: user427 +uid: uid427 +givenname: givenname427 +description: description427 +userPassword: password427 +mail: uid427 +uidnumber: 427 +gidnumber: 427 +homeDirectory: /home/uid427 + +dn: cn=user428,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user428 +sn: user428 +uid: uid428 +givenname: givenname428 +description: description428 +userPassword: password428 +mail: uid428 +uidnumber: 428 +gidnumber: 428 +homeDirectory: /home/uid428 + +dn: cn=user429,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user429 +sn: user429 +uid: uid429 +givenname: givenname429 +description: description429 +userPassword: password429 +mail: uid429 +uidnumber: 429 +gidnumber: 429 +homeDirectory: /home/uid429 + +dn: cn=user430,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user430 +sn: user430 +uid: uid430 +givenname: givenname430 +description: description430 +userPassword: password430 +mail: uid430 +uidnumber: 430 +gidnumber: 430 +homeDirectory: /home/uid430 + +dn: cn=user431,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user431 +sn: user431 +uid: uid431 +givenname: givenname431 +description: description431 +userPassword: password431 +mail: uid431 +uidnumber: 431 +gidnumber: 431 +homeDirectory: /home/uid431 + +dn: cn=user432,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user432 +sn: user432 +uid: uid432 +givenname: givenname432 +description: description432 +userPassword: password432 +mail: uid432 +uidnumber: 432 +gidnumber: 432 +homeDirectory: /home/uid432 + +dn: cn=user433,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user433 +sn: user433 +uid: uid433 +givenname: givenname433 +description: description433 +userPassword: password433 +mail: uid433 +uidnumber: 433 +gidnumber: 433 +homeDirectory: /home/uid433 + +dn: cn=user434,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user434 +sn: user434 +uid: uid434 +givenname: givenname434 +description: description434 +userPassword: password434 +mail: uid434 +uidnumber: 434 +gidnumber: 434 +homeDirectory: /home/uid434 + +dn: cn=user435,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user435 +sn: user435 +uid: uid435 +givenname: givenname435 +description: description435 +userPassword: password435 +mail: uid435 +uidnumber: 435 +gidnumber: 435 +homeDirectory: /home/uid435 + +dn: cn=user436,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user436 +sn: user436 +uid: uid436 +givenname: givenname436 +description: description436 +userPassword: password436 +mail: uid436 +uidnumber: 436 +gidnumber: 436 +homeDirectory: /home/uid436 + +dn: cn=user437,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user437 +sn: user437 +uid: uid437 +givenname: givenname437 +description: description437 +userPassword: password437 +mail: uid437 +uidnumber: 437 +gidnumber: 437 +homeDirectory: /home/uid437 + +dn: cn=user438,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user438 +sn: user438 +uid: uid438 +givenname: givenname438 +description: description438 +userPassword: password438 +mail: uid438 +uidnumber: 438 +gidnumber: 438 +homeDirectory: /home/uid438 + +dn: cn=user439,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user439 +sn: user439 +uid: uid439 +givenname: givenname439 +description: description439 +userPassword: password439 +mail: uid439 +uidnumber: 439 +gidnumber: 439 +homeDirectory: /home/uid439 + +dn: cn=user440,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user440 +sn: user440 +uid: uid440 +givenname: givenname440 +description: description440 +userPassword: password440 +mail: uid440 +uidnumber: 440 +gidnumber: 440 +homeDirectory: /home/uid440 + +dn: cn=user441,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user441 +sn: user441 +uid: uid441 +givenname: givenname441 +description: description441 +userPassword: password441 +mail: uid441 +uidnumber: 441 +gidnumber: 441 +homeDirectory: /home/uid441 + +dn: cn=user442,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user442 +sn: user442 +uid: uid442 +givenname: givenname442 +description: description442 +userPassword: password442 +mail: uid442 +uidnumber: 442 +gidnumber: 442 +homeDirectory: /home/uid442 + +dn: cn=user443,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user443 +sn: user443 +uid: uid443 +givenname: givenname443 +description: description443 +userPassword: password443 +mail: uid443 +uidnumber: 443 +gidnumber: 443 +homeDirectory: /home/uid443 + +dn: cn=user444,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user444 +sn: user444 +uid: uid444 +givenname: givenname444 +description: description444 +userPassword: password444 +mail: uid444 +uidnumber: 444 +gidnumber: 444 +homeDirectory: /home/uid444 + +dn: cn=user445,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user445 +sn: user445 +uid: uid445 +givenname: givenname445 +description: description445 +userPassword: password445 +mail: uid445 +uidnumber: 445 +gidnumber: 445 +homeDirectory: /home/uid445 + +dn: cn=user446,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user446 +sn: user446 +uid: uid446 +givenname: givenname446 +description: description446 +userPassword: password446 +mail: uid446 +uidnumber: 446 +gidnumber: 446 +homeDirectory: /home/uid446 + +dn: cn=user447,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user447 +sn: user447 +uid: uid447 +givenname: givenname447 +description: description447 +userPassword: password447 +mail: uid447 +uidnumber: 447 +gidnumber: 447 +homeDirectory: /home/uid447 + +dn: cn=user448,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user448 +sn: user448 +uid: uid448 +givenname: givenname448 +description: description448 +userPassword: password448 +mail: uid448 +uidnumber: 448 +gidnumber: 448 +homeDirectory: /home/uid448 + +dn: cn=user449,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user449 +sn: user449 +uid: uid449 +givenname: givenname449 +description: description449 +userPassword: password449 +mail: uid449 +uidnumber: 449 +gidnumber: 449 +homeDirectory: /home/uid449 + +dn: cn=user450,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user450 +sn: user450 +uid: uid450 +givenname: givenname450 +description: description450 +userPassword: password450 +mail: uid450 +uidnumber: 450 +gidnumber: 450 +homeDirectory: /home/uid450 + +dn: cn=user451,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user451 +sn: user451 +uid: uid451 +givenname: givenname451 +description: description451 +userPassword: password451 +mail: uid451 +uidnumber: 451 +gidnumber: 451 +homeDirectory: /home/uid451 + +dn: cn=user452,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user452 +sn: user452 +uid: uid452 +givenname: givenname452 +description: description452 +userPassword: password452 +mail: uid452 +uidnumber: 452 +gidnumber: 452 +homeDirectory: /home/uid452 + +dn: cn=user453,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user453 +sn: user453 +uid: uid453 +givenname: givenname453 +description: description453 +userPassword: password453 +mail: uid453 +uidnumber: 453 +gidnumber: 453 +homeDirectory: /home/uid453 + +dn: cn=user454,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user454 +sn: user454 +uid: uid454 +givenname: givenname454 +description: description454 +userPassword: password454 +mail: uid454 +uidnumber: 454 +gidnumber: 454 +homeDirectory: /home/uid454 + +dn: cn=user455,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user455 +sn: user455 +uid: uid455 +givenname: givenname455 +description: description455 +userPassword: password455 +mail: uid455 +uidnumber: 455 +gidnumber: 455 +homeDirectory: /home/uid455 + +dn: cn=user456,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user456 +sn: user456 +uid: uid456 +givenname: givenname456 +description: description456 +userPassword: password456 +mail: uid456 +uidnumber: 456 +gidnumber: 456 +homeDirectory: /home/uid456 + +dn: cn=user457,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user457 +sn: user457 +uid: uid457 +givenname: givenname457 +description: description457 +userPassword: password457 +mail: uid457 +uidnumber: 457 +gidnumber: 457 +homeDirectory: /home/uid457 + +dn: cn=user458,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user458 +sn: user458 +uid: uid458 +givenname: givenname458 +description: description458 +userPassword: password458 +mail: uid458 +uidnumber: 458 +gidnumber: 458 +homeDirectory: /home/uid458 + +dn: cn=user459,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user459 +sn: user459 +uid: uid459 +givenname: givenname459 +description: description459 +userPassword: password459 +mail: uid459 +uidnumber: 459 +gidnumber: 459 +homeDirectory: /home/uid459 + +dn: cn=user460,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user460 +sn: user460 +uid: uid460 +givenname: givenname460 +description: description460 +userPassword: password460 +mail: uid460 +uidnumber: 460 +gidnumber: 460 +homeDirectory: /home/uid460 + +dn: cn=user461,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user461 +sn: user461 +uid: uid461 +givenname: givenname461 +description: description461 +userPassword: password461 +mail: uid461 +uidnumber: 461 +gidnumber: 461 +homeDirectory: /home/uid461 + +dn: cn=user462,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user462 +sn: user462 +uid: uid462 +givenname: givenname462 +description: description462 +userPassword: password462 +mail: uid462 +uidnumber: 462 +gidnumber: 462 +homeDirectory: /home/uid462 + +dn: cn=user463,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user463 +sn: user463 +uid: uid463 +givenname: givenname463 +description: description463 +userPassword: password463 +mail: uid463 +uidnumber: 463 +gidnumber: 463 +homeDirectory: /home/uid463 + +dn: cn=user464,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user464 +sn: user464 +uid: uid464 +givenname: givenname464 +description: description464 +userPassword: password464 +mail: uid464 +uidnumber: 464 +gidnumber: 464 +homeDirectory: /home/uid464 + +dn: cn=user465,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user465 +sn: user465 +uid: uid465 +givenname: givenname465 +description: description465 +userPassword: password465 +mail: uid465 +uidnumber: 465 +gidnumber: 465 +homeDirectory: /home/uid465 + +dn: cn=user466,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user466 +sn: user466 +uid: uid466 +givenname: givenname466 +description: description466 +userPassword: password466 +mail: uid466 +uidnumber: 466 +gidnumber: 466 +homeDirectory: /home/uid466 + +dn: cn=user467,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user467 +sn: user467 +uid: uid467 +givenname: givenname467 +description: description467 +userPassword: password467 +mail: uid467 +uidnumber: 467 +gidnumber: 467 +homeDirectory: /home/uid467 + +dn: cn=user468,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user468 +sn: user468 +uid: uid468 +givenname: givenname468 +description: description468 +userPassword: password468 +mail: uid468 +uidnumber: 468 +gidnumber: 468 +homeDirectory: /home/uid468 + +dn: cn=user469,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user469 +sn: user469 +uid: uid469 +givenname: givenname469 +description: description469 +userPassword: password469 +mail: uid469 +uidnumber: 469 +gidnumber: 469 +homeDirectory: /home/uid469 + +dn: cn=user470,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user470 +sn: user470 +uid: uid470 +givenname: givenname470 +description: description470 +userPassword: password470 +mail: uid470 +uidnumber: 470 +gidnumber: 470 +homeDirectory: /home/uid470 + +dn: cn=user471,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user471 +sn: user471 +uid: uid471 +givenname: givenname471 +description: description471 +userPassword: password471 +mail: uid471 +uidnumber: 471 +gidnumber: 471 +homeDirectory: /home/uid471 + +dn: cn=user472,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user472 +sn: user472 +uid: uid472 +givenname: givenname472 +description: description472 +userPassword: password472 +mail: uid472 +uidnumber: 472 +gidnumber: 472 +homeDirectory: /home/uid472 + +dn: cn=user473,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user473 +sn: user473 +uid: uid473 +givenname: givenname473 +description: description473 +userPassword: password473 +mail: uid473 +uidnumber: 473 +gidnumber: 473 +homeDirectory: /home/uid473 + +dn: cn=user474,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user474 +sn: user474 +uid: uid474 +givenname: givenname474 +description: description474 +userPassword: password474 +mail: uid474 +uidnumber: 474 +gidnumber: 474 +homeDirectory: /home/uid474 + +dn: cn=user475,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user475 +sn: user475 +uid: uid475 +givenname: givenname475 +description: description475 +userPassword: password475 +mail: uid475 +uidnumber: 475 +gidnumber: 475 +homeDirectory: /home/uid475 + +dn: cn=user476,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user476 +sn: user476 +uid: uid476 +givenname: givenname476 +description: description476 +userPassword: password476 +mail: uid476 +uidnumber: 476 +gidnumber: 476 +homeDirectory: /home/uid476 + +dn: cn=user477,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user477 +sn: user477 +uid: uid477 +givenname: givenname477 +description: description477 +userPassword: password477 +mail: uid477 +uidnumber: 477 +gidnumber: 477 +homeDirectory: /home/uid477 + +dn: cn=user478,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user478 +sn: user478 +uid: uid478 +givenname: givenname478 +description: description478 +userPassword: password478 +mail: uid478 +uidnumber: 478 +gidnumber: 478 +homeDirectory: /home/uid478 + +dn: cn=user479,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user479 +sn: user479 +uid: uid479 +givenname: givenname479 +description: description479 +userPassword: password479 +mail: uid479 +uidnumber: 479 +gidnumber: 479 +homeDirectory: /home/uid479 + +dn: cn=user480,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user480 +sn: user480 +uid: uid480 +givenname: givenname480 +description: description480 +userPassword: password480 +mail: uid480 +uidnumber: 480 +gidnumber: 480 +homeDirectory: /home/uid480 + +dn: cn=user481,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user481 +sn: user481 +uid: uid481 +givenname: givenname481 +description: description481 +userPassword: password481 +mail: uid481 +uidnumber: 481 +gidnumber: 481 +homeDirectory: /home/uid481 + +dn: cn=user482,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user482 +sn: user482 +uid: uid482 +givenname: givenname482 +description: description482 +userPassword: password482 +mail: uid482 +uidnumber: 482 +gidnumber: 482 +homeDirectory: /home/uid482 + +dn: cn=user483,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user483 +sn: user483 +uid: uid483 +givenname: givenname483 +description: description483 +userPassword: password483 +mail: uid483 +uidnumber: 483 +gidnumber: 483 +homeDirectory: /home/uid483 + +dn: cn=user484,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user484 +sn: user484 +uid: uid484 +givenname: givenname484 +description: description484 +userPassword: password484 +mail: uid484 +uidnumber: 484 +gidnumber: 484 +homeDirectory: /home/uid484 + +dn: cn=user485,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user485 +sn: user485 +uid: uid485 +givenname: givenname485 +description: description485 +userPassword: password485 +mail: uid485 +uidnumber: 485 +gidnumber: 485 +homeDirectory: /home/uid485 + +dn: cn=user486,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user486 +sn: user486 +uid: uid486 +givenname: givenname486 +description: description486 +userPassword: password486 +mail: uid486 +uidnumber: 486 +gidnumber: 486 +homeDirectory: /home/uid486 + +dn: cn=user487,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user487 +sn: user487 +uid: uid487 +givenname: givenname487 +description: description487 +userPassword: password487 +mail: uid487 +uidnumber: 487 +gidnumber: 487 +homeDirectory: /home/uid487 + +dn: cn=user488,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user488 +sn: user488 +uid: uid488 +givenname: givenname488 +description: description488 +userPassword: password488 +mail: uid488 +uidnumber: 488 +gidnumber: 488 +homeDirectory: /home/uid488 + +dn: cn=user489,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user489 +sn: user489 +uid: uid489 +givenname: givenname489 +description: description489 +userPassword: password489 +mail: uid489 +uidnumber: 489 +gidnumber: 489 +homeDirectory: /home/uid489 + +dn: cn=user490,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user490 +sn: user490 +uid: uid490 +givenname: givenname490 +description: description490 +userPassword: password490 +mail: uid490 +uidnumber: 490 +gidnumber: 490 +homeDirectory: /home/uid490 + +dn: cn=user491,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user491 +sn: user491 +uid: uid491 +givenname: givenname491 +description: description491 +userPassword: password491 +mail: uid491 +uidnumber: 491 +gidnumber: 491 +homeDirectory: /home/uid491 + +dn: cn=user492,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user492 +sn: user492 +uid: uid492 +givenname: givenname492 +description: description492 +userPassword: password492 +mail: uid492 +uidnumber: 492 +gidnumber: 492 +homeDirectory: /home/uid492 + +dn: cn=user493,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user493 +sn: user493 +uid: uid493 +givenname: givenname493 +description: description493 +userPassword: password493 +mail: uid493 +uidnumber: 493 +gidnumber: 493 +homeDirectory: /home/uid493 + +dn: cn=user494,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user494 +sn: user494 +uid: uid494 +givenname: givenname494 +description: description494 +userPassword: password494 +mail: uid494 +uidnumber: 494 +gidnumber: 494 +homeDirectory: /home/uid494 + +dn: cn=user495,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user495 +sn: user495 +uid: uid495 +givenname: givenname495 +description: description495 +userPassword: password495 +mail: uid495 +uidnumber: 495 +gidnumber: 495 +homeDirectory: /home/uid495 + +dn: cn=user496,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user496 +sn: user496 +uid: uid496 +givenname: givenname496 +description: description496 +userPassword: password496 +mail: uid496 +uidnumber: 496 +gidnumber: 496 +homeDirectory: /home/uid496 + +dn: cn=user497,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user497 +sn: user497 +uid: uid497 +givenname: givenname497 +description: description497 +userPassword: password497 +mail: uid497 +uidnumber: 497 +gidnumber: 497 +homeDirectory: /home/uid497 + +dn: cn=user498,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user498 +sn: user498 +uid: uid498 +givenname: givenname498 +description: description498 +userPassword: password498 +mail: uid498 +uidnumber: 498 +gidnumber: 498 +homeDirectory: /home/uid498 + +dn: cn=user499,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user499 +sn: user499 +uid: uid499 +givenname: givenname499 +description: description499 +userPassword: password499 +mail: uid499 +uidnumber: 499 +gidnumber: 499 +homeDirectory: /home/uid499 + +dn: cn=user500,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user500 +sn: user500 +uid: uid500 +givenname: givenname500 +description: description500 +userPassword: password500 +mail: uid500 +uidnumber: 500 +gidnumber: 500 +homeDirectory: /home/uid500 + +dn: cn=user501,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user501 +sn: user501 +uid: uid501 +givenname: givenname501 +description: description501 +userPassword: password501 +mail: uid501 +uidnumber: 501 +gidnumber: 501 +homeDirectory: /home/uid501 + +dn: cn=user502,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user502 +sn: user502 +uid: uid502 +givenname: givenname502 +description: description502 +userPassword: password502 +mail: uid502 +uidnumber: 502 +gidnumber: 502 +homeDirectory: /home/uid502 + +dn: cn=user503,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user503 +sn: user503 +uid: uid503 +givenname: givenname503 +description: description503 +userPassword: password503 +mail: uid503 +uidnumber: 503 +gidnumber: 503 +homeDirectory: /home/uid503 + +dn: cn=user504,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user504 +sn: user504 +uid: uid504 +givenname: givenname504 +description: description504 +userPassword: password504 +mail: uid504 +uidnumber: 504 +gidnumber: 504 +homeDirectory: /home/uid504 + +dn: cn=user505,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user505 +sn: user505 +uid: uid505 +givenname: givenname505 +description: description505 +userPassword: password505 +mail: uid505 +uidnumber: 505 +gidnumber: 505 +homeDirectory: /home/uid505 + +dn: cn=user506,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user506 +sn: user506 +uid: uid506 +givenname: givenname506 +description: description506 +userPassword: password506 +mail: uid506 +uidnumber: 506 +gidnumber: 506 +homeDirectory: /home/uid506 + +dn: cn=user507,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user507 +sn: user507 +uid: uid507 +givenname: givenname507 +description: description507 +userPassword: password507 +mail: uid507 +uidnumber: 507 +gidnumber: 507 +homeDirectory: /home/uid507 + +dn: cn=user508,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user508 +sn: user508 +uid: uid508 +givenname: givenname508 +description: description508 +userPassword: password508 +mail: uid508 +uidnumber: 508 +gidnumber: 508 +homeDirectory: /home/uid508 + +dn: cn=user509,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user509 +sn: user509 +uid: uid509 +givenname: givenname509 +description: description509 +userPassword: password509 +mail: uid509 +uidnumber: 509 +gidnumber: 509 +homeDirectory: /home/uid509 + +dn: cn=user510,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user510 +sn: user510 +uid: uid510 +givenname: givenname510 +description: description510 +userPassword: password510 +mail: uid510 +uidnumber: 510 +gidnumber: 510 +homeDirectory: /home/uid510 + +dn: cn=user511,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user511 +sn: user511 +uid: uid511 +givenname: givenname511 +description: description511 +userPassword: password511 +mail: uid511 +uidnumber: 511 +gidnumber: 511 +homeDirectory: /home/uid511 + +dn: cn=user512,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user512 +sn: user512 +uid: uid512 +givenname: givenname512 +description: description512 +userPassword: password512 +mail: uid512 +uidnumber: 512 +gidnumber: 512 +homeDirectory: /home/uid512 + +dn: cn=user513,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user513 +sn: user513 +uid: uid513 +givenname: givenname513 +description: description513 +userPassword: password513 +mail: uid513 +uidnumber: 513 +gidnumber: 513 +homeDirectory: /home/uid513 + +dn: cn=user514,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user514 +sn: user514 +uid: uid514 +givenname: givenname514 +description: description514 +userPassword: password514 +mail: uid514 +uidnumber: 514 +gidnumber: 514 +homeDirectory: /home/uid514 + +dn: cn=user515,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user515 +sn: user515 +uid: uid515 +givenname: givenname515 +description: description515 +userPassword: password515 +mail: uid515 +uidnumber: 515 +gidnumber: 515 +homeDirectory: /home/uid515 + +dn: cn=user516,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user516 +sn: user516 +uid: uid516 +givenname: givenname516 +description: description516 +userPassword: password516 +mail: uid516 +uidnumber: 516 +gidnumber: 516 +homeDirectory: /home/uid516 + +dn: cn=user517,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user517 +sn: user517 +uid: uid517 +givenname: givenname517 +description: description517 +userPassword: password517 +mail: uid517 +uidnumber: 517 +gidnumber: 517 +homeDirectory: /home/uid517 + +dn: cn=user518,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user518 +sn: user518 +uid: uid518 +givenname: givenname518 +description: description518 +userPassword: password518 +mail: uid518 +uidnumber: 518 +gidnumber: 518 +homeDirectory: /home/uid518 + +dn: cn=user519,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user519 +sn: user519 +uid: uid519 +givenname: givenname519 +description: description519 +userPassword: password519 +mail: uid519 +uidnumber: 519 +gidnumber: 519 +homeDirectory: /home/uid519 + +dn: cn=user520,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user520 +sn: user520 +uid: uid520 +givenname: givenname520 +description: description520 +userPassword: password520 +mail: uid520 +uidnumber: 520 +gidnumber: 520 +homeDirectory: /home/uid520 + +dn: cn=user521,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user521 +sn: user521 +uid: uid521 +givenname: givenname521 +description: description521 +userPassword: password521 +mail: uid521 +uidnumber: 521 +gidnumber: 521 +homeDirectory: /home/uid521 + +dn: cn=user522,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user522 +sn: user522 +uid: uid522 +givenname: givenname522 +description: description522 +userPassword: password522 +mail: uid522 +uidnumber: 522 +gidnumber: 522 +homeDirectory: /home/uid522 + +dn: cn=user523,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user523 +sn: user523 +uid: uid523 +givenname: givenname523 +description: description523 +userPassword: password523 +mail: uid523 +uidnumber: 523 +gidnumber: 523 +homeDirectory: /home/uid523 + +dn: cn=user524,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user524 +sn: user524 +uid: uid524 +givenname: givenname524 +description: description524 +userPassword: password524 +mail: uid524 +uidnumber: 524 +gidnumber: 524 +homeDirectory: /home/uid524 + +dn: cn=user525,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user525 +sn: user525 +uid: uid525 +givenname: givenname525 +description: description525 +userPassword: password525 +mail: uid525 +uidnumber: 525 +gidnumber: 525 +homeDirectory: /home/uid525 + +dn: cn=user526,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user526 +sn: user526 +uid: uid526 +givenname: givenname526 +description: description526 +userPassword: password526 +mail: uid526 +uidnumber: 526 +gidnumber: 526 +homeDirectory: /home/uid526 + +dn: cn=user527,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user527 +sn: user527 +uid: uid527 +givenname: givenname527 +description: description527 +userPassword: password527 +mail: uid527 +uidnumber: 527 +gidnumber: 527 +homeDirectory: /home/uid527 + +dn: cn=user528,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user528 +sn: user528 +uid: uid528 +givenname: givenname528 +description: description528 +userPassword: password528 +mail: uid528 +uidnumber: 528 +gidnumber: 528 +homeDirectory: /home/uid528 + +dn: cn=user529,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user529 +sn: user529 +uid: uid529 +givenname: givenname529 +description: description529 +userPassword: password529 +mail: uid529 +uidnumber: 529 +gidnumber: 529 +homeDirectory: /home/uid529 + +dn: cn=user530,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user530 +sn: user530 +uid: uid530 +givenname: givenname530 +description: description530 +userPassword: password530 +mail: uid530 +uidnumber: 530 +gidnumber: 530 +homeDirectory: /home/uid530 + +dn: cn=user531,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user531 +sn: user531 +uid: uid531 +givenname: givenname531 +description: description531 +userPassword: password531 +mail: uid531 +uidnumber: 531 +gidnumber: 531 +homeDirectory: /home/uid531 + +dn: cn=user532,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user532 +sn: user532 +uid: uid532 +givenname: givenname532 +description: description532 +userPassword: password532 +mail: uid532 +uidnumber: 532 +gidnumber: 532 +homeDirectory: /home/uid532 + +dn: cn=user533,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user533 +sn: user533 +uid: uid533 +givenname: givenname533 +description: description533 +userPassword: password533 +mail: uid533 +uidnumber: 533 +gidnumber: 533 +homeDirectory: /home/uid533 + +dn: cn=user534,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user534 +sn: user534 +uid: uid534 +givenname: givenname534 +description: description534 +userPassword: password534 +mail: uid534 +uidnumber: 534 +gidnumber: 534 +homeDirectory: /home/uid534 + +dn: cn=user535,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user535 +sn: user535 +uid: uid535 +givenname: givenname535 +description: description535 +userPassword: password535 +mail: uid535 +uidnumber: 535 +gidnumber: 535 +homeDirectory: /home/uid535 + +dn: cn=user536,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user536 +sn: user536 +uid: uid536 +givenname: givenname536 +description: description536 +userPassword: password536 +mail: uid536 +uidnumber: 536 +gidnumber: 536 +homeDirectory: /home/uid536 + +dn: cn=user537,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user537 +sn: user537 +uid: uid537 +givenname: givenname537 +description: description537 +userPassword: password537 +mail: uid537 +uidnumber: 537 +gidnumber: 537 +homeDirectory: /home/uid537 + +dn: cn=user538,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user538 +sn: user538 +uid: uid538 +givenname: givenname538 +description: description538 +userPassword: password538 +mail: uid538 +uidnumber: 538 +gidnumber: 538 +homeDirectory: /home/uid538 + +dn: cn=user539,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user539 +sn: user539 +uid: uid539 +givenname: givenname539 +description: description539 +userPassword: password539 +mail: uid539 +uidnumber: 539 +gidnumber: 539 +homeDirectory: /home/uid539 + +dn: cn=user540,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user540 +sn: user540 +uid: uid540 +givenname: givenname540 +description: description540 +userPassword: password540 +mail: uid540 +uidnumber: 540 +gidnumber: 540 +homeDirectory: /home/uid540 + +dn: cn=user541,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user541 +sn: user541 +uid: uid541 +givenname: givenname541 +description: description541 +userPassword: password541 +mail: uid541 +uidnumber: 541 +gidnumber: 541 +homeDirectory: /home/uid541 + +dn: cn=user542,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user542 +sn: user542 +uid: uid542 +givenname: givenname542 +description: description542 +userPassword: password542 +mail: uid542 +uidnumber: 542 +gidnumber: 542 +homeDirectory: /home/uid542 + +dn: cn=user543,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user543 +sn: user543 +uid: uid543 +givenname: givenname543 +description: description543 +userPassword: password543 +mail: uid543 +uidnumber: 543 +gidnumber: 543 +homeDirectory: /home/uid543 + +dn: cn=user544,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user544 +sn: user544 +uid: uid544 +givenname: givenname544 +description: description544 +userPassword: password544 +mail: uid544 +uidnumber: 544 +gidnumber: 544 +homeDirectory: /home/uid544 + +dn: cn=user545,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user545 +sn: user545 +uid: uid545 +givenname: givenname545 +description: description545 +userPassword: password545 +mail: uid545 +uidnumber: 545 +gidnumber: 545 +homeDirectory: /home/uid545 + +dn: cn=user546,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user546 +sn: user546 +uid: uid546 +givenname: givenname546 +description: description546 +userPassword: password546 +mail: uid546 +uidnumber: 546 +gidnumber: 546 +homeDirectory: /home/uid546 + +dn: cn=user547,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user547 +sn: user547 +uid: uid547 +givenname: givenname547 +description: description547 +userPassword: password547 +mail: uid547 +uidnumber: 547 +gidnumber: 547 +homeDirectory: /home/uid547 + +dn: cn=user548,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user548 +sn: user548 +uid: uid548 +givenname: givenname548 +description: description548 +userPassword: password548 +mail: uid548 +uidnumber: 548 +gidnumber: 548 +homeDirectory: /home/uid548 + +dn: cn=user549,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user549 +sn: user549 +uid: uid549 +givenname: givenname549 +description: description549 +userPassword: password549 +mail: uid549 +uidnumber: 549 +gidnumber: 549 +homeDirectory: /home/uid549 + +dn: cn=user550,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user550 +sn: user550 +uid: uid550 +givenname: givenname550 +description: description550 +userPassword: password550 +mail: uid550 +uidnumber: 550 +gidnumber: 550 +homeDirectory: /home/uid550 + +dn: cn=user551,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user551 +sn: user551 +uid: uid551 +givenname: givenname551 +description: description551 +userPassword: password551 +mail: uid551 +uidnumber: 551 +gidnumber: 551 +homeDirectory: /home/uid551 + +dn: cn=user552,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user552 +sn: user552 +uid: uid552 +givenname: givenname552 +description: description552 +userPassword: password552 +mail: uid552 +uidnumber: 552 +gidnumber: 552 +homeDirectory: /home/uid552 + +dn: cn=user553,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user553 +sn: user553 +uid: uid553 +givenname: givenname553 +description: description553 +userPassword: password553 +mail: uid553 +uidnumber: 553 +gidnumber: 553 +homeDirectory: /home/uid553 + +dn: cn=user554,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user554 +sn: user554 +uid: uid554 +givenname: givenname554 +description: description554 +userPassword: password554 +mail: uid554 +uidnumber: 554 +gidnumber: 554 +homeDirectory: /home/uid554 + +dn: cn=user555,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user555 +sn: user555 +uid: uid555 +givenname: givenname555 +description: description555 +userPassword: password555 +mail: uid555 +uidnumber: 555 +gidnumber: 555 +homeDirectory: /home/uid555 + +dn: cn=user556,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user556 +sn: user556 +uid: uid556 +givenname: givenname556 +description: description556 +userPassword: password556 +mail: uid556 +uidnumber: 556 +gidnumber: 556 +homeDirectory: /home/uid556 + +dn: cn=user557,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user557 +sn: user557 +uid: uid557 +givenname: givenname557 +description: description557 +userPassword: password557 +mail: uid557 +uidnumber: 557 +gidnumber: 557 +homeDirectory: /home/uid557 + +dn: cn=user558,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user558 +sn: user558 +uid: uid558 +givenname: givenname558 +description: description558 +userPassword: password558 +mail: uid558 +uidnumber: 558 +gidnumber: 558 +homeDirectory: /home/uid558 + +dn: cn=user559,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user559 +sn: user559 +uid: uid559 +givenname: givenname559 +description: description559 +userPassword: password559 +mail: uid559 +uidnumber: 559 +gidnumber: 559 +homeDirectory: /home/uid559 + +dn: cn=user560,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user560 +sn: user560 +uid: uid560 +givenname: givenname560 +description: description560 +userPassword: password560 +mail: uid560 +uidnumber: 560 +gidnumber: 560 +homeDirectory: /home/uid560 + +dn: cn=user561,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user561 +sn: user561 +uid: uid561 +givenname: givenname561 +description: description561 +userPassword: password561 +mail: uid561 +uidnumber: 561 +gidnumber: 561 +homeDirectory: /home/uid561 + +dn: cn=user562,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user562 +sn: user562 +uid: uid562 +givenname: givenname562 +description: description562 +userPassword: password562 +mail: uid562 +uidnumber: 562 +gidnumber: 562 +homeDirectory: /home/uid562 + +dn: cn=user563,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user563 +sn: user563 +uid: uid563 +givenname: givenname563 +description: description563 +userPassword: password563 +mail: uid563 +uidnumber: 563 +gidnumber: 563 +homeDirectory: /home/uid563 + +dn: cn=user564,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user564 +sn: user564 +uid: uid564 +givenname: givenname564 +description: description564 +userPassword: password564 +mail: uid564 +uidnumber: 564 +gidnumber: 564 +homeDirectory: /home/uid564 + +dn: cn=user565,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user565 +sn: user565 +uid: uid565 +givenname: givenname565 +description: description565 +userPassword: password565 +mail: uid565 +uidnumber: 565 +gidnumber: 565 +homeDirectory: /home/uid565 + +dn: cn=user566,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user566 +sn: user566 +uid: uid566 +givenname: givenname566 +description: description566 +userPassword: password566 +mail: uid566 +uidnumber: 566 +gidnumber: 566 +homeDirectory: /home/uid566 + +dn: cn=user567,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user567 +sn: user567 +uid: uid567 +givenname: givenname567 +description: description567 +userPassword: password567 +mail: uid567 +uidnumber: 567 +gidnumber: 567 +homeDirectory: /home/uid567 + +dn: cn=user568,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user568 +sn: user568 +uid: uid568 +givenname: givenname568 +description: description568 +userPassword: password568 +mail: uid568 +uidnumber: 568 +gidnumber: 568 +homeDirectory: /home/uid568 + +dn: cn=user569,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user569 +sn: user569 +uid: uid569 +givenname: givenname569 +description: description569 +userPassword: password569 +mail: uid569 +uidnumber: 569 +gidnumber: 569 +homeDirectory: /home/uid569 + +dn: cn=user570,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user570 +sn: user570 +uid: uid570 +givenname: givenname570 +description: description570 +userPassword: password570 +mail: uid570 +uidnumber: 570 +gidnumber: 570 +homeDirectory: /home/uid570 + +dn: cn=user571,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user571 +sn: user571 +uid: uid571 +givenname: givenname571 +description: description571 +userPassword: password571 +mail: uid571 +uidnumber: 571 +gidnumber: 571 +homeDirectory: /home/uid571 + +dn: cn=user572,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user572 +sn: user572 +uid: uid572 +givenname: givenname572 +description: description572 +userPassword: password572 +mail: uid572 +uidnumber: 572 +gidnumber: 572 +homeDirectory: /home/uid572 + +dn: cn=user573,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user573 +sn: user573 +uid: uid573 +givenname: givenname573 +description: description573 +userPassword: password573 +mail: uid573 +uidnumber: 573 +gidnumber: 573 +homeDirectory: /home/uid573 + +dn: cn=user574,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user574 +sn: user574 +uid: uid574 +givenname: givenname574 +description: description574 +userPassword: password574 +mail: uid574 +uidnumber: 574 +gidnumber: 574 +homeDirectory: /home/uid574 + +dn: cn=user575,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user575 +sn: user575 +uid: uid575 +givenname: givenname575 +description: description575 +userPassword: password575 +mail: uid575 +uidnumber: 575 +gidnumber: 575 +homeDirectory: /home/uid575 + +dn: cn=user576,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user576 +sn: user576 +uid: uid576 +givenname: givenname576 +description: description576 +userPassword: password576 +mail: uid576 +uidnumber: 576 +gidnumber: 576 +homeDirectory: /home/uid576 + +dn: cn=user577,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user577 +sn: user577 +uid: uid577 +givenname: givenname577 +description: description577 +userPassword: password577 +mail: uid577 +uidnumber: 577 +gidnumber: 577 +homeDirectory: /home/uid577 + +dn: cn=user578,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user578 +sn: user578 +uid: uid578 +givenname: givenname578 +description: description578 +userPassword: password578 +mail: uid578 +uidnumber: 578 +gidnumber: 578 +homeDirectory: /home/uid578 + +dn: cn=user579,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user579 +sn: user579 +uid: uid579 +givenname: givenname579 +description: description579 +userPassword: password579 +mail: uid579 +uidnumber: 579 +gidnumber: 579 +homeDirectory: /home/uid579 + +dn: cn=user580,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user580 +sn: user580 +uid: uid580 +givenname: givenname580 +description: description580 +userPassword: password580 +mail: uid580 +uidnumber: 580 +gidnumber: 580 +homeDirectory: /home/uid580 + +dn: cn=user581,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user581 +sn: user581 +uid: uid581 +givenname: givenname581 +description: description581 +userPassword: password581 +mail: uid581 +uidnumber: 581 +gidnumber: 581 +homeDirectory: /home/uid581 + +dn: cn=user582,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user582 +sn: user582 +uid: uid582 +givenname: givenname582 +description: description582 +userPassword: password582 +mail: uid582 +uidnumber: 582 +gidnumber: 582 +homeDirectory: /home/uid582 + +dn: cn=user583,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user583 +sn: user583 +uid: uid583 +givenname: givenname583 +description: description583 +userPassword: password583 +mail: uid583 +uidnumber: 583 +gidnumber: 583 +homeDirectory: /home/uid583 + +dn: cn=user584,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user584 +sn: user584 +uid: uid584 +givenname: givenname584 +description: description584 +userPassword: password584 +mail: uid584 +uidnumber: 584 +gidnumber: 584 +homeDirectory: /home/uid584 + +dn: cn=user585,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user585 +sn: user585 +uid: uid585 +givenname: givenname585 +description: description585 +userPassword: password585 +mail: uid585 +uidnumber: 585 +gidnumber: 585 +homeDirectory: /home/uid585 + +dn: cn=user586,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user586 +sn: user586 +uid: uid586 +givenname: givenname586 +description: description586 +userPassword: password586 +mail: uid586 +uidnumber: 586 +gidnumber: 586 +homeDirectory: /home/uid586 + +dn: cn=user587,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user587 +sn: user587 +uid: uid587 +givenname: givenname587 +description: description587 +userPassword: password587 +mail: uid587 +uidnumber: 587 +gidnumber: 587 +homeDirectory: /home/uid587 + +dn: cn=user588,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user588 +sn: user588 +uid: uid588 +givenname: givenname588 +description: description588 +userPassword: password588 +mail: uid588 +uidnumber: 588 +gidnumber: 588 +homeDirectory: /home/uid588 + +dn: cn=user589,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user589 +sn: user589 +uid: uid589 +givenname: givenname589 +description: description589 +userPassword: password589 +mail: uid589 +uidnumber: 589 +gidnumber: 589 +homeDirectory: /home/uid589 + +dn: cn=user590,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user590 +sn: user590 +uid: uid590 +givenname: givenname590 +description: description590 +userPassword: password590 +mail: uid590 +uidnumber: 590 +gidnumber: 590 +homeDirectory: /home/uid590 + +dn: cn=user591,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user591 +sn: user591 +uid: uid591 +givenname: givenname591 +description: description591 +userPassword: password591 +mail: uid591 +uidnumber: 591 +gidnumber: 591 +homeDirectory: /home/uid591 + +dn: cn=user592,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user592 +sn: user592 +uid: uid592 +givenname: givenname592 +description: description592 +userPassword: password592 +mail: uid592 +uidnumber: 592 +gidnumber: 592 +homeDirectory: /home/uid592 + +dn: cn=user593,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user593 +sn: user593 +uid: uid593 +givenname: givenname593 +description: description593 +userPassword: password593 +mail: uid593 +uidnumber: 593 +gidnumber: 593 +homeDirectory: /home/uid593 + +dn: cn=user594,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user594 +sn: user594 +uid: uid594 +givenname: givenname594 +description: description594 +userPassword: password594 +mail: uid594 +uidnumber: 594 +gidnumber: 594 +homeDirectory: /home/uid594 + +dn: cn=user595,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user595 +sn: user595 +uid: uid595 +givenname: givenname595 +description: description595 +userPassword: password595 +mail: uid595 +uidnumber: 595 +gidnumber: 595 +homeDirectory: /home/uid595 + +dn: cn=user596,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user596 +sn: user596 +uid: uid596 +givenname: givenname596 +description: description596 +userPassword: password596 +mail: uid596 +uidnumber: 596 +gidnumber: 596 +homeDirectory: /home/uid596 + +dn: cn=user597,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user597 +sn: user597 +uid: uid597 +givenname: givenname597 +description: description597 +userPassword: password597 +mail: uid597 +uidnumber: 597 +gidnumber: 597 +homeDirectory: /home/uid597 + +dn: cn=user598,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user598 +sn: user598 +uid: uid598 +givenname: givenname598 +description: description598 +userPassword: password598 +mail: uid598 +uidnumber: 598 +gidnumber: 598 +homeDirectory: /home/uid598 + +dn: cn=user599,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user599 +sn: user599 +uid: uid599 +givenname: givenname599 +description: description599 +userPassword: password599 +mail: uid599 +uidnumber: 599 +gidnumber: 599 +homeDirectory: /home/uid599 + +dn: cn=user600,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user600 +sn: user600 +uid: uid600 +givenname: givenname600 +description: description600 +userPassword: password600 +mail: uid600 +uidnumber: 600 +gidnumber: 600 +homeDirectory: /home/uid600 + +dn: cn=user601,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user601 +sn: user601 +uid: uid601 +givenname: givenname601 +description: description601 +userPassword: password601 +mail: uid601 +uidnumber: 601 +gidnumber: 601 +homeDirectory: /home/uid601 + +dn: cn=user602,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user602 +sn: user602 +uid: uid602 +givenname: givenname602 +description: description602 +userPassword: password602 +mail: uid602 +uidnumber: 602 +gidnumber: 602 +homeDirectory: /home/uid602 + +dn: cn=user603,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user603 +sn: user603 +uid: uid603 +givenname: givenname603 +description: description603 +userPassword: password603 +mail: uid603 +uidnumber: 603 +gidnumber: 603 +homeDirectory: /home/uid603 + +dn: cn=user604,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user604 +sn: user604 +uid: uid604 +givenname: givenname604 +description: description604 +userPassword: password604 +mail: uid604 +uidnumber: 604 +gidnumber: 604 +homeDirectory: /home/uid604 + +dn: cn=user605,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user605 +sn: user605 +uid: uid605 +givenname: givenname605 +description: description605 +userPassword: password605 +mail: uid605 +uidnumber: 605 +gidnumber: 605 +homeDirectory: /home/uid605 + +dn: cn=user606,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user606 +sn: user606 +uid: uid606 +givenname: givenname606 +description: description606 +userPassword: password606 +mail: uid606 +uidnumber: 606 +gidnumber: 606 +homeDirectory: /home/uid606 + +dn: cn=user607,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user607 +sn: user607 +uid: uid607 +givenname: givenname607 +description: description607 +userPassword: password607 +mail: uid607 +uidnumber: 607 +gidnumber: 607 +homeDirectory: /home/uid607 + +dn: cn=user608,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user608 +sn: user608 +uid: uid608 +givenname: givenname608 +description: description608 +userPassword: password608 +mail: uid608 +uidnumber: 608 +gidnumber: 608 +homeDirectory: /home/uid608 + +dn: cn=user609,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user609 +sn: user609 +uid: uid609 +givenname: givenname609 +description: description609 +userPassword: password609 +mail: uid609 +uidnumber: 609 +gidnumber: 609 +homeDirectory: /home/uid609 + +dn: cn=user610,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user610 +sn: user610 +uid: uid610 +givenname: givenname610 +description: description610 +userPassword: password610 +mail: uid610 +uidnumber: 610 +gidnumber: 610 +homeDirectory: /home/uid610 + +dn: cn=user611,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user611 +sn: user611 +uid: uid611 +givenname: givenname611 +description: description611 +userPassword: password611 +mail: uid611 +uidnumber: 611 +gidnumber: 611 +homeDirectory: /home/uid611 + +dn: cn=user612,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user612 +sn: user612 +uid: uid612 +givenname: givenname612 +description: description612 +userPassword: password612 +mail: uid612 +uidnumber: 612 +gidnumber: 612 +homeDirectory: /home/uid612 + +dn: cn=user613,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user613 +sn: user613 +uid: uid613 +givenname: givenname613 +description: description613 +userPassword: password613 +mail: uid613 +uidnumber: 613 +gidnumber: 613 +homeDirectory: /home/uid613 + +dn: cn=user614,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user614 +sn: user614 +uid: uid614 +givenname: givenname614 +description: description614 +userPassword: password614 +mail: uid614 +uidnumber: 614 +gidnumber: 614 +homeDirectory: /home/uid614 + +dn: cn=user615,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user615 +sn: user615 +uid: uid615 +givenname: givenname615 +description: description615 +userPassword: password615 +mail: uid615 +uidnumber: 615 +gidnumber: 615 +homeDirectory: /home/uid615 + +dn: cn=user616,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user616 +sn: user616 +uid: uid616 +givenname: givenname616 +description: description616 +userPassword: password616 +mail: uid616 +uidnumber: 616 +gidnumber: 616 +homeDirectory: /home/uid616 + +dn: cn=user617,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user617 +sn: user617 +uid: uid617 +givenname: givenname617 +description: description617 +userPassword: password617 +mail: uid617 +uidnumber: 617 +gidnumber: 617 +homeDirectory: /home/uid617 + +dn: cn=user618,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user618 +sn: user618 +uid: uid618 +givenname: givenname618 +description: description618 +userPassword: password618 +mail: uid618 +uidnumber: 618 +gidnumber: 618 +homeDirectory: /home/uid618 + +dn: cn=user619,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user619 +sn: user619 +uid: uid619 +givenname: givenname619 +description: description619 +userPassword: password619 +mail: uid619 +uidnumber: 619 +gidnumber: 619 +homeDirectory: /home/uid619 + +dn: cn=user620,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user620 +sn: user620 +uid: uid620 +givenname: givenname620 +description: description620 +userPassword: password620 +mail: uid620 +uidnumber: 620 +gidnumber: 620 +homeDirectory: /home/uid620 + +dn: cn=user621,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user621 +sn: user621 +uid: uid621 +givenname: givenname621 +description: description621 +userPassword: password621 +mail: uid621 +uidnumber: 621 +gidnumber: 621 +homeDirectory: /home/uid621 + +dn: cn=user622,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user622 +sn: user622 +uid: uid622 +givenname: givenname622 +description: description622 +userPassword: password622 +mail: uid622 +uidnumber: 622 +gidnumber: 622 +homeDirectory: /home/uid622 + +dn: cn=user623,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user623 +sn: user623 +uid: uid623 +givenname: givenname623 +description: description623 +userPassword: password623 +mail: uid623 +uidnumber: 623 +gidnumber: 623 +homeDirectory: /home/uid623 + +dn: cn=user624,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user624 +sn: user624 +uid: uid624 +givenname: givenname624 +description: description624 +userPassword: password624 +mail: uid624 +uidnumber: 624 +gidnumber: 624 +homeDirectory: /home/uid624 + +dn: cn=user625,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user625 +sn: user625 +uid: uid625 +givenname: givenname625 +description: description625 +userPassword: password625 +mail: uid625 +uidnumber: 625 +gidnumber: 625 +homeDirectory: /home/uid625 + +dn: cn=user626,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user626 +sn: user626 +uid: uid626 +givenname: givenname626 +description: description626 +userPassword: password626 +mail: uid626 +uidnumber: 626 +gidnumber: 626 +homeDirectory: /home/uid626 + +dn: cn=user627,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user627 +sn: user627 +uid: uid627 +givenname: givenname627 +description: description627 +userPassword: password627 +mail: uid627 +uidnumber: 627 +gidnumber: 627 +homeDirectory: /home/uid627 + +dn: cn=user628,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user628 +sn: user628 +uid: uid628 +givenname: givenname628 +description: description628 +userPassword: password628 +mail: uid628 +uidnumber: 628 +gidnumber: 628 +homeDirectory: /home/uid628 + +dn: cn=user629,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user629 +sn: user629 +uid: uid629 +givenname: givenname629 +description: description629 +userPassword: password629 +mail: uid629 +uidnumber: 629 +gidnumber: 629 +homeDirectory: /home/uid629 + +dn: cn=user630,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user630 +sn: user630 +uid: uid630 +givenname: givenname630 +description: description630 +userPassword: password630 +mail: uid630 +uidnumber: 630 +gidnumber: 630 +homeDirectory: /home/uid630 + +dn: cn=user631,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user631 +sn: user631 +uid: uid631 +givenname: givenname631 +description: description631 +userPassword: password631 +mail: uid631 +uidnumber: 631 +gidnumber: 631 +homeDirectory: /home/uid631 + +dn: cn=user632,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user632 +sn: user632 +uid: uid632 +givenname: givenname632 +description: description632 +userPassword: password632 +mail: uid632 +uidnumber: 632 +gidnumber: 632 +homeDirectory: /home/uid632 + +dn: cn=user633,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user633 +sn: user633 +uid: uid633 +givenname: givenname633 +description: description633 +userPassword: password633 +mail: uid633 +uidnumber: 633 +gidnumber: 633 +homeDirectory: /home/uid633 + +dn: cn=user634,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user634 +sn: user634 +uid: uid634 +givenname: givenname634 +description: description634 +userPassword: password634 +mail: uid634 +uidnumber: 634 +gidnumber: 634 +homeDirectory: /home/uid634 + +dn: cn=user635,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user635 +sn: user635 +uid: uid635 +givenname: givenname635 +description: description635 +userPassword: password635 +mail: uid635 +uidnumber: 635 +gidnumber: 635 +homeDirectory: /home/uid635 + +dn: cn=user636,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user636 +sn: user636 +uid: uid636 +givenname: givenname636 +description: description636 +userPassword: password636 +mail: uid636 +uidnumber: 636 +gidnumber: 636 +homeDirectory: /home/uid636 + +dn: cn=user637,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user637 +sn: user637 +uid: uid637 +givenname: givenname637 +description: description637 +userPassword: password637 +mail: uid637 +uidnumber: 637 +gidnumber: 637 +homeDirectory: /home/uid637 + +dn: cn=user638,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user638 +sn: user638 +uid: uid638 +givenname: givenname638 +description: description638 +userPassword: password638 +mail: uid638 +uidnumber: 638 +gidnumber: 638 +homeDirectory: /home/uid638 + +dn: cn=user639,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user639 +sn: user639 +uid: uid639 +givenname: givenname639 +description: description639 +userPassword: password639 +mail: uid639 +uidnumber: 639 +gidnumber: 639 +homeDirectory: /home/uid639 + +dn: cn=user640,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user640 +sn: user640 +uid: uid640 +givenname: givenname640 +description: description640 +userPassword: password640 +mail: uid640 +uidnumber: 640 +gidnumber: 640 +homeDirectory: /home/uid640 + +dn: cn=user641,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user641 +sn: user641 +uid: uid641 +givenname: givenname641 +description: description641 +userPassword: password641 +mail: uid641 +uidnumber: 641 +gidnumber: 641 +homeDirectory: /home/uid641 + +dn: cn=user642,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user642 +sn: user642 +uid: uid642 +givenname: givenname642 +description: description642 +userPassword: password642 +mail: uid642 +uidnumber: 642 +gidnumber: 642 +homeDirectory: /home/uid642 + +dn: cn=user643,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user643 +sn: user643 +uid: uid643 +givenname: givenname643 +description: description643 +userPassword: password643 +mail: uid643 +uidnumber: 643 +gidnumber: 643 +homeDirectory: /home/uid643 + +dn: cn=user644,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user644 +sn: user644 +uid: uid644 +givenname: givenname644 +description: description644 +userPassword: password644 +mail: uid644 +uidnumber: 644 +gidnumber: 644 +homeDirectory: /home/uid644 + +dn: cn=user645,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user645 +sn: user645 +uid: uid645 +givenname: givenname645 +description: description645 +userPassword: password645 +mail: uid645 +uidnumber: 645 +gidnumber: 645 +homeDirectory: /home/uid645 + +dn: cn=user646,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user646 +sn: user646 +uid: uid646 +givenname: givenname646 +description: description646 +userPassword: password646 +mail: uid646 +uidnumber: 646 +gidnumber: 646 +homeDirectory: /home/uid646 + +dn: cn=user647,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user647 +sn: user647 +uid: uid647 +givenname: givenname647 +description: description647 +userPassword: password647 +mail: uid647 +uidnumber: 647 +gidnumber: 647 +homeDirectory: /home/uid647 + +dn: cn=user648,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user648 +sn: user648 +uid: uid648 +givenname: givenname648 +description: description648 +userPassword: password648 +mail: uid648 +uidnumber: 648 +gidnumber: 648 +homeDirectory: /home/uid648 + +dn: cn=user649,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user649 +sn: user649 +uid: uid649 +givenname: givenname649 +description: description649 +userPassword: password649 +mail: uid649 +uidnumber: 649 +gidnumber: 649 +homeDirectory: /home/uid649 + +dn: cn=user650,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user650 +sn: user650 +uid: uid650 +givenname: givenname650 +description: description650 +userPassword: password650 +mail: uid650 +uidnumber: 650 +gidnumber: 650 +homeDirectory: /home/uid650 + +dn: cn=user651,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user651 +sn: user651 +uid: uid651 +givenname: givenname651 +description: description651 +userPassword: password651 +mail: uid651 +uidnumber: 651 +gidnumber: 651 +homeDirectory: /home/uid651 + +dn: cn=user652,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user652 +sn: user652 +uid: uid652 +givenname: givenname652 +description: description652 +userPassword: password652 +mail: uid652 +uidnumber: 652 +gidnumber: 652 +homeDirectory: /home/uid652 + +dn: cn=user653,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user653 +sn: user653 +uid: uid653 +givenname: givenname653 +description: description653 +userPassword: password653 +mail: uid653 +uidnumber: 653 +gidnumber: 653 +homeDirectory: /home/uid653 + +dn: cn=user654,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user654 +sn: user654 +uid: uid654 +givenname: givenname654 +description: description654 +userPassword: password654 +mail: uid654 +uidnumber: 654 +gidnumber: 654 +homeDirectory: /home/uid654 + +dn: cn=user655,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user655 +sn: user655 +uid: uid655 +givenname: givenname655 +description: description655 +userPassword: password655 +mail: uid655 +uidnumber: 655 +gidnumber: 655 +homeDirectory: /home/uid655 + +dn: cn=user656,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user656 +sn: user656 +uid: uid656 +givenname: givenname656 +description: description656 +userPassword: password656 +mail: uid656 +uidnumber: 656 +gidnumber: 656 +homeDirectory: /home/uid656 + +dn: cn=user657,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user657 +sn: user657 +uid: uid657 +givenname: givenname657 +description: description657 +userPassword: password657 +mail: uid657 +uidnumber: 657 +gidnumber: 657 +homeDirectory: /home/uid657 + +dn: cn=user658,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user658 +sn: user658 +uid: uid658 +givenname: givenname658 +description: description658 +userPassword: password658 +mail: uid658 +uidnumber: 658 +gidnumber: 658 +homeDirectory: /home/uid658 + +dn: cn=user659,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user659 +sn: user659 +uid: uid659 +givenname: givenname659 +description: description659 +userPassword: password659 +mail: uid659 +uidnumber: 659 +gidnumber: 659 +homeDirectory: /home/uid659 + +dn: cn=user660,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user660 +sn: user660 +uid: uid660 +givenname: givenname660 +description: description660 +userPassword: password660 +mail: uid660 +uidnumber: 660 +gidnumber: 660 +homeDirectory: /home/uid660 + +dn: cn=user661,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user661 +sn: user661 +uid: uid661 +givenname: givenname661 +description: description661 +userPassword: password661 +mail: uid661 +uidnumber: 661 +gidnumber: 661 +homeDirectory: /home/uid661 + +dn: cn=user662,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user662 +sn: user662 +uid: uid662 +givenname: givenname662 +description: description662 +userPassword: password662 +mail: uid662 +uidnumber: 662 +gidnumber: 662 +homeDirectory: /home/uid662 + +dn: cn=user663,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user663 +sn: user663 +uid: uid663 +givenname: givenname663 +description: description663 +userPassword: password663 +mail: uid663 +uidnumber: 663 +gidnumber: 663 +homeDirectory: /home/uid663 + +dn: cn=user664,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user664 +sn: user664 +uid: uid664 +givenname: givenname664 +description: description664 +userPassword: password664 +mail: uid664 +uidnumber: 664 +gidnumber: 664 +homeDirectory: /home/uid664 + +dn: cn=user665,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user665 +sn: user665 +uid: uid665 +givenname: givenname665 +description: description665 +userPassword: password665 +mail: uid665 +uidnumber: 665 +gidnumber: 665 +homeDirectory: /home/uid665 + +dn: cn=user666,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user666 +sn: user666 +uid: uid666 +givenname: givenname666 +description: description666 +userPassword: password666 +mail: uid666 +uidnumber: 666 +gidnumber: 666 +homeDirectory: /home/uid666 + +dn: cn=user667,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user667 +sn: user667 +uid: uid667 +givenname: givenname667 +description: description667 +userPassword: password667 +mail: uid667 +uidnumber: 667 +gidnumber: 667 +homeDirectory: /home/uid667 + +dn: cn=user668,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user668 +sn: user668 +uid: uid668 +givenname: givenname668 +description: description668 +userPassword: password668 +mail: uid668 +uidnumber: 668 +gidnumber: 668 +homeDirectory: /home/uid668 + +dn: cn=user669,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user669 +sn: user669 +uid: uid669 +givenname: givenname669 +description: description669 +userPassword: password669 +mail: uid669 +uidnumber: 669 +gidnumber: 669 +homeDirectory: /home/uid669 + +dn: cn=user670,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user670 +sn: user670 +uid: uid670 +givenname: givenname670 +description: description670 +userPassword: password670 +mail: uid670 +uidnumber: 670 +gidnumber: 670 +homeDirectory: /home/uid670 + +dn: cn=user671,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user671 +sn: user671 +uid: uid671 +givenname: givenname671 +description: description671 +userPassword: password671 +mail: uid671 +uidnumber: 671 +gidnumber: 671 +homeDirectory: /home/uid671 + +dn: cn=user672,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user672 +sn: user672 +uid: uid672 +givenname: givenname672 +description: description672 +userPassword: password672 +mail: uid672 +uidnumber: 672 +gidnumber: 672 +homeDirectory: /home/uid672 + +dn: cn=user673,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user673 +sn: user673 +uid: uid673 +givenname: givenname673 +description: description673 +userPassword: password673 +mail: uid673 +uidnumber: 673 +gidnumber: 673 +homeDirectory: /home/uid673 + +dn: cn=user674,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user674 +sn: user674 +uid: uid674 +givenname: givenname674 +description: description674 +userPassword: password674 +mail: uid674 +uidnumber: 674 +gidnumber: 674 +homeDirectory: /home/uid674 + +dn: cn=user675,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user675 +sn: user675 +uid: uid675 +givenname: givenname675 +description: description675 +userPassword: password675 +mail: uid675 +uidnumber: 675 +gidnumber: 675 +homeDirectory: /home/uid675 + +dn: cn=user676,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user676 +sn: user676 +uid: uid676 +givenname: givenname676 +description: description676 +userPassword: password676 +mail: uid676 +uidnumber: 676 +gidnumber: 676 +homeDirectory: /home/uid676 + +dn: cn=user677,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user677 +sn: user677 +uid: uid677 +givenname: givenname677 +description: description677 +userPassword: password677 +mail: uid677 +uidnumber: 677 +gidnumber: 677 +homeDirectory: /home/uid677 + +dn: cn=user678,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user678 +sn: user678 +uid: uid678 +givenname: givenname678 +description: description678 +userPassword: password678 +mail: uid678 +uidnumber: 678 +gidnumber: 678 +homeDirectory: /home/uid678 + +dn: cn=user679,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user679 +sn: user679 +uid: uid679 +givenname: givenname679 +description: description679 +userPassword: password679 +mail: uid679 +uidnumber: 679 +gidnumber: 679 +homeDirectory: /home/uid679 + +dn: cn=user680,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user680 +sn: user680 +uid: uid680 +givenname: givenname680 +description: description680 +userPassword: password680 +mail: uid680 +uidnumber: 680 +gidnumber: 680 +homeDirectory: /home/uid680 + +dn: cn=user681,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user681 +sn: user681 +uid: uid681 +givenname: givenname681 +description: description681 +userPassword: password681 +mail: uid681 +uidnumber: 681 +gidnumber: 681 +homeDirectory: /home/uid681 + +dn: cn=user682,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user682 +sn: user682 +uid: uid682 +givenname: givenname682 +description: description682 +userPassword: password682 +mail: uid682 +uidnumber: 682 +gidnumber: 682 +homeDirectory: /home/uid682 + +dn: cn=user683,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user683 +sn: user683 +uid: uid683 +givenname: givenname683 +description: description683 +userPassword: password683 +mail: uid683 +uidnumber: 683 +gidnumber: 683 +homeDirectory: /home/uid683 + +dn: cn=user684,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user684 +sn: user684 +uid: uid684 +givenname: givenname684 +description: description684 +userPassword: password684 +mail: uid684 +uidnumber: 684 +gidnumber: 684 +homeDirectory: /home/uid684 + +dn: cn=user685,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user685 +sn: user685 +uid: uid685 +givenname: givenname685 +description: description685 +userPassword: password685 +mail: uid685 +uidnumber: 685 +gidnumber: 685 +homeDirectory: /home/uid685 + +dn: cn=user686,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user686 +sn: user686 +uid: uid686 +givenname: givenname686 +description: description686 +userPassword: password686 +mail: uid686 +uidnumber: 686 +gidnumber: 686 +homeDirectory: /home/uid686 + +dn: cn=user687,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user687 +sn: user687 +uid: uid687 +givenname: givenname687 +description: description687 +userPassword: password687 +mail: uid687 +uidnumber: 687 +gidnumber: 687 +homeDirectory: /home/uid687 + +dn: cn=user688,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user688 +sn: user688 +uid: uid688 +givenname: givenname688 +description: description688 +userPassword: password688 +mail: uid688 +uidnumber: 688 +gidnumber: 688 +homeDirectory: /home/uid688 + +dn: cn=user689,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user689 +sn: user689 +uid: uid689 +givenname: givenname689 +description: description689 +userPassword: password689 +mail: uid689 +uidnumber: 689 +gidnumber: 689 +homeDirectory: /home/uid689 + +dn: cn=user690,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user690 +sn: user690 +uid: uid690 +givenname: givenname690 +description: description690 +userPassword: password690 +mail: uid690 +uidnumber: 690 +gidnumber: 690 +homeDirectory: /home/uid690 + +dn: cn=user691,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user691 +sn: user691 +uid: uid691 +givenname: givenname691 +description: description691 +userPassword: password691 +mail: uid691 +uidnumber: 691 +gidnumber: 691 +homeDirectory: /home/uid691 + +dn: cn=user692,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user692 +sn: user692 +uid: uid692 +givenname: givenname692 +description: description692 +userPassword: password692 +mail: uid692 +uidnumber: 692 +gidnumber: 692 +homeDirectory: /home/uid692 + +dn: cn=user693,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user693 +sn: user693 +uid: uid693 +givenname: givenname693 +description: description693 +userPassword: password693 +mail: uid693 +uidnumber: 693 +gidnumber: 693 +homeDirectory: /home/uid693 + +dn: cn=user694,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user694 +sn: user694 +uid: uid694 +givenname: givenname694 +description: description694 +userPassword: password694 +mail: uid694 +uidnumber: 694 +gidnumber: 694 +homeDirectory: /home/uid694 + +dn: cn=user695,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user695 +sn: user695 +uid: uid695 +givenname: givenname695 +description: description695 +userPassword: password695 +mail: uid695 +uidnumber: 695 +gidnumber: 695 +homeDirectory: /home/uid695 + +dn: cn=user696,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user696 +sn: user696 +uid: uid696 +givenname: givenname696 +description: description696 +userPassword: password696 +mail: uid696 +uidnumber: 696 +gidnumber: 696 +homeDirectory: /home/uid696 + +dn: cn=user697,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user697 +sn: user697 +uid: uid697 +givenname: givenname697 +description: description697 +userPassword: password697 +mail: uid697 +uidnumber: 697 +gidnumber: 697 +homeDirectory: /home/uid697 + +dn: cn=user698,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user698 +sn: user698 +uid: uid698 +givenname: givenname698 +description: description698 +userPassword: password698 +mail: uid698 +uidnumber: 698 +gidnumber: 698 +homeDirectory: /home/uid698 + +dn: cn=user699,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user699 +sn: user699 +uid: uid699 +givenname: givenname699 +description: description699 +userPassword: password699 +mail: uid699 +uidnumber: 699 +gidnumber: 699 +homeDirectory: /home/uid699 + +dn: cn=user700,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user700 +sn: user700 +uid: uid700 +givenname: givenname700 +description: description700 +userPassword: password700 +mail: uid700 +uidnumber: 700 +gidnumber: 700 +homeDirectory: /home/uid700 + +dn: cn=user701,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user701 +sn: user701 +uid: uid701 +givenname: givenname701 +description: description701 +userPassword: password701 +mail: uid701 +uidnumber: 701 +gidnumber: 701 +homeDirectory: /home/uid701 + +dn: cn=user702,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user702 +sn: user702 +uid: uid702 +givenname: givenname702 +description: description702 +userPassword: password702 +mail: uid702 +uidnumber: 702 +gidnumber: 702 +homeDirectory: /home/uid702 + +dn: cn=user703,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user703 +sn: user703 +uid: uid703 +givenname: givenname703 +description: description703 +userPassword: password703 +mail: uid703 +uidnumber: 703 +gidnumber: 703 +homeDirectory: /home/uid703 + +dn: cn=user704,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user704 +sn: user704 +uid: uid704 +givenname: givenname704 +description: description704 +userPassword: password704 +mail: uid704 +uidnumber: 704 +gidnumber: 704 +homeDirectory: /home/uid704 + +dn: cn=user705,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user705 +sn: user705 +uid: uid705 +givenname: givenname705 +description: description705 +userPassword: password705 +mail: uid705 +uidnumber: 705 +gidnumber: 705 +homeDirectory: /home/uid705 + +dn: cn=user706,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user706 +sn: user706 +uid: uid706 +givenname: givenname706 +description: description706 +userPassword: password706 +mail: uid706 +uidnumber: 706 +gidnumber: 706 +homeDirectory: /home/uid706 + +dn: cn=user707,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user707 +sn: user707 +uid: uid707 +givenname: givenname707 +description: description707 +userPassword: password707 +mail: uid707 +uidnumber: 707 +gidnumber: 707 +homeDirectory: /home/uid707 + +dn: cn=user708,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user708 +sn: user708 +uid: uid708 +givenname: givenname708 +description: description708 +userPassword: password708 +mail: uid708 +uidnumber: 708 +gidnumber: 708 +homeDirectory: /home/uid708 + +dn: cn=user709,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user709 +sn: user709 +uid: uid709 +givenname: givenname709 +description: description709 +userPassword: password709 +mail: uid709 +uidnumber: 709 +gidnumber: 709 +homeDirectory: /home/uid709 + +dn: cn=user710,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user710 +sn: user710 +uid: uid710 +givenname: givenname710 +description: description710 +userPassword: password710 +mail: uid710 +uidnumber: 710 +gidnumber: 710 +homeDirectory: /home/uid710 + +dn: cn=user711,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user711 +sn: user711 +uid: uid711 +givenname: givenname711 +description: description711 +userPassword: password711 +mail: uid711 +uidnumber: 711 +gidnumber: 711 +homeDirectory: /home/uid711 + +dn: cn=user712,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user712 +sn: user712 +uid: uid712 +givenname: givenname712 +description: description712 +userPassword: password712 +mail: uid712 +uidnumber: 712 +gidnumber: 712 +homeDirectory: /home/uid712 + +dn: cn=user713,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user713 +sn: user713 +uid: uid713 +givenname: givenname713 +description: description713 +userPassword: password713 +mail: uid713 +uidnumber: 713 +gidnumber: 713 +homeDirectory: /home/uid713 + +dn: cn=user714,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user714 +sn: user714 +uid: uid714 +givenname: givenname714 +description: description714 +userPassword: password714 +mail: uid714 +uidnumber: 714 +gidnumber: 714 +homeDirectory: /home/uid714 + +dn: cn=user715,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user715 +sn: user715 +uid: uid715 +givenname: givenname715 +description: description715 +userPassword: password715 +mail: uid715 +uidnumber: 715 +gidnumber: 715 +homeDirectory: /home/uid715 + +dn: cn=user716,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user716 +sn: user716 +uid: uid716 +givenname: givenname716 +description: description716 +userPassword: password716 +mail: uid716 +uidnumber: 716 +gidnumber: 716 +homeDirectory: /home/uid716 + +dn: cn=user717,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user717 +sn: user717 +uid: uid717 +givenname: givenname717 +description: description717 +userPassword: password717 +mail: uid717 +uidnumber: 717 +gidnumber: 717 +homeDirectory: /home/uid717 + +dn: cn=user718,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user718 +sn: user718 +uid: uid718 +givenname: givenname718 +description: description718 +userPassword: password718 +mail: uid718 +uidnumber: 718 +gidnumber: 718 +homeDirectory: /home/uid718 + +dn: cn=user719,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user719 +sn: user719 +uid: uid719 +givenname: givenname719 +description: description719 +userPassword: password719 +mail: uid719 +uidnumber: 719 +gidnumber: 719 +homeDirectory: /home/uid719 + +dn: cn=user720,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user720 +sn: user720 +uid: uid720 +givenname: givenname720 +description: description720 +userPassword: password720 +mail: uid720 +uidnumber: 720 +gidnumber: 720 +homeDirectory: /home/uid720 + +dn: cn=user721,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user721 +sn: user721 +uid: uid721 +givenname: givenname721 +description: description721 +userPassword: password721 +mail: uid721 +uidnumber: 721 +gidnumber: 721 +homeDirectory: /home/uid721 + +dn: cn=user722,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user722 +sn: user722 +uid: uid722 +givenname: givenname722 +description: description722 +userPassword: password722 +mail: uid722 +uidnumber: 722 +gidnumber: 722 +homeDirectory: /home/uid722 + +dn: cn=user723,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user723 +sn: user723 +uid: uid723 +givenname: givenname723 +description: description723 +userPassword: password723 +mail: uid723 +uidnumber: 723 +gidnumber: 723 +homeDirectory: /home/uid723 + +dn: cn=user724,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user724 +sn: user724 +uid: uid724 +givenname: givenname724 +description: description724 +userPassword: password724 +mail: uid724 +uidnumber: 724 +gidnumber: 724 +homeDirectory: /home/uid724 + +dn: cn=user725,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user725 +sn: user725 +uid: uid725 +givenname: givenname725 +description: description725 +userPassword: password725 +mail: uid725 +uidnumber: 725 +gidnumber: 725 +homeDirectory: /home/uid725 + +dn: cn=user726,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user726 +sn: user726 +uid: uid726 +givenname: givenname726 +description: description726 +userPassword: password726 +mail: uid726 +uidnumber: 726 +gidnumber: 726 +homeDirectory: /home/uid726 + +dn: cn=user727,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user727 +sn: user727 +uid: uid727 +givenname: givenname727 +description: description727 +userPassword: password727 +mail: uid727 +uidnumber: 727 +gidnumber: 727 +homeDirectory: /home/uid727 + +dn: cn=user728,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user728 +sn: user728 +uid: uid728 +givenname: givenname728 +description: description728 +userPassword: password728 +mail: uid728 +uidnumber: 728 +gidnumber: 728 +homeDirectory: /home/uid728 + +dn: cn=user729,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user729 +sn: user729 +uid: uid729 +givenname: givenname729 +description: description729 +userPassword: password729 +mail: uid729 +uidnumber: 729 +gidnumber: 729 +homeDirectory: /home/uid729 + +dn: cn=user730,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user730 +sn: user730 +uid: uid730 +givenname: givenname730 +description: description730 +userPassword: password730 +mail: uid730 +uidnumber: 730 +gidnumber: 730 +homeDirectory: /home/uid730 + +dn: cn=user731,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user731 +sn: user731 +uid: uid731 +givenname: givenname731 +description: description731 +userPassword: password731 +mail: uid731 +uidnumber: 731 +gidnumber: 731 +homeDirectory: /home/uid731 + +dn: cn=user732,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user732 +sn: user732 +uid: uid732 +givenname: givenname732 +description: description732 +userPassword: password732 +mail: uid732 +uidnumber: 732 +gidnumber: 732 +homeDirectory: /home/uid732 + +dn: cn=user733,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user733 +sn: user733 +uid: uid733 +givenname: givenname733 +description: description733 +userPassword: password733 +mail: uid733 +uidnumber: 733 +gidnumber: 733 +homeDirectory: /home/uid733 + +dn: cn=user734,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user734 +sn: user734 +uid: uid734 +givenname: givenname734 +description: description734 +userPassword: password734 +mail: uid734 +uidnumber: 734 +gidnumber: 734 +homeDirectory: /home/uid734 + +dn: cn=user735,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user735 +sn: user735 +uid: uid735 +givenname: givenname735 +description: description735 +userPassword: password735 +mail: uid735 +uidnumber: 735 +gidnumber: 735 +homeDirectory: /home/uid735 + +dn: cn=user736,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user736 +sn: user736 +uid: uid736 +givenname: givenname736 +description: description736 +userPassword: password736 +mail: uid736 +uidnumber: 736 +gidnumber: 736 +homeDirectory: /home/uid736 + +dn: cn=user737,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user737 +sn: user737 +uid: uid737 +givenname: givenname737 +description: description737 +userPassword: password737 +mail: uid737 +uidnumber: 737 +gidnumber: 737 +homeDirectory: /home/uid737 + +dn: cn=user738,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user738 +sn: user738 +uid: uid738 +givenname: givenname738 +description: description738 +userPassword: password738 +mail: uid738 +uidnumber: 738 +gidnumber: 738 +homeDirectory: /home/uid738 + +dn: cn=user739,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user739 +sn: user739 +uid: uid739 +givenname: givenname739 +description: description739 +userPassword: password739 +mail: uid739 +uidnumber: 739 +gidnumber: 739 +homeDirectory: /home/uid739 + +dn: cn=user740,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user740 +sn: user740 +uid: uid740 +givenname: givenname740 +description: description740 +userPassword: password740 +mail: uid740 +uidnumber: 740 +gidnumber: 740 +homeDirectory: /home/uid740 + +dn: cn=user741,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user741 +sn: user741 +uid: uid741 +givenname: givenname741 +description: description741 +userPassword: password741 +mail: uid741 +uidnumber: 741 +gidnumber: 741 +homeDirectory: /home/uid741 + +dn: cn=user742,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user742 +sn: user742 +uid: uid742 +givenname: givenname742 +description: description742 +userPassword: password742 +mail: uid742 +uidnumber: 742 +gidnumber: 742 +homeDirectory: /home/uid742 + +dn: cn=user743,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user743 +sn: user743 +uid: uid743 +givenname: givenname743 +description: description743 +userPassword: password743 +mail: uid743 +uidnumber: 743 +gidnumber: 743 +homeDirectory: /home/uid743 + +dn: cn=user744,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user744 +sn: user744 +uid: uid744 +givenname: givenname744 +description: description744 +userPassword: password744 +mail: uid744 +uidnumber: 744 +gidnumber: 744 +homeDirectory: /home/uid744 + +dn: cn=user745,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user745 +sn: user745 +uid: uid745 +givenname: givenname745 +description: description745 +userPassword: password745 +mail: uid745 +uidnumber: 745 +gidnumber: 745 +homeDirectory: /home/uid745 + +dn: cn=user746,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user746 +sn: user746 +uid: uid746 +givenname: givenname746 +description: description746 +userPassword: password746 +mail: uid746 +uidnumber: 746 +gidnumber: 746 +homeDirectory: /home/uid746 + +dn: cn=user747,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user747 +sn: user747 +uid: uid747 +givenname: givenname747 +description: description747 +userPassword: password747 +mail: uid747 +uidnumber: 747 +gidnumber: 747 +homeDirectory: /home/uid747 + +dn: cn=user748,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user748 +sn: user748 +uid: uid748 +givenname: givenname748 +description: description748 +userPassword: password748 +mail: uid748 +uidnumber: 748 +gidnumber: 748 +homeDirectory: /home/uid748 + +dn: cn=user749,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user749 +sn: user749 +uid: uid749 +givenname: givenname749 +description: description749 +userPassword: password749 +mail: uid749 +uidnumber: 749 +gidnumber: 749 +homeDirectory: /home/uid749 + +dn: cn=user750,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user750 +sn: user750 +uid: uid750 +givenname: givenname750 +description: description750 +userPassword: password750 +mail: uid750 +uidnumber: 750 +gidnumber: 750 +homeDirectory: /home/uid750 + +dn: cn=user751,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user751 +sn: user751 +uid: uid751 +givenname: givenname751 +description: description751 +userPassword: password751 +mail: uid751 +uidnumber: 751 +gidnumber: 751 +homeDirectory: /home/uid751 + +dn: cn=user752,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user752 +sn: user752 +uid: uid752 +givenname: givenname752 +description: description752 +userPassword: password752 +mail: uid752 +uidnumber: 752 +gidnumber: 752 +homeDirectory: /home/uid752 + +dn: cn=user753,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user753 +sn: user753 +uid: uid753 +givenname: givenname753 +description: description753 +userPassword: password753 +mail: uid753 +uidnumber: 753 +gidnumber: 753 +homeDirectory: /home/uid753 + +dn: cn=user754,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user754 +sn: user754 +uid: uid754 +givenname: givenname754 +description: description754 +userPassword: password754 +mail: uid754 +uidnumber: 754 +gidnumber: 754 +homeDirectory: /home/uid754 + +dn: cn=user755,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user755 +sn: user755 +uid: uid755 +givenname: givenname755 +description: description755 +userPassword: password755 +mail: uid755 +uidnumber: 755 +gidnumber: 755 +homeDirectory: /home/uid755 + +dn: cn=user756,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user756 +sn: user756 +uid: uid756 +givenname: givenname756 +description: description756 +userPassword: password756 +mail: uid756 +uidnumber: 756 +gidnumber: 756 +homeDirectory: /home/uid756 + +dn: cn=user757,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user757 +sn: user757 +uid: uid757 +givenname: givenname757 +description: description757 +userPassword: password757 +mail: uid757 +uidnumber: 757 +gidnumber: 757 +homeDirectory: /home/uid757 + +dn: cn=user758,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user758 +sn: user758 +uid: uid758 +givenname: givenname758 +description: description758 +userPassword: password758 +mail: uid758 +uidnumber: 758 +gidnumber: 758 +homeDirectory: /home/uid758 + +dn: cn=user759,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user759 +sn: user759 +uid: uid759 +givenname: givenname759 +description: description759 +userPassword: password759 +mail: uid759 +uidnumber: 759 +gidnumber: 759 +homeDirectory: /home/uid759 + +dn: cn=user760,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user760 +sn: user760 +uid: uid760 +givenname: givenname760 +description: description760 +userPassword: password760 +mail: uid760 +uidnumber: 760 +gidnumber: 760 +homeDirectory: /home/uid760 + +dn: cn=user761,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user761 +sn: user761 +uid: uid761 +givenname: givenname761 +description: description761 +userPassword: password761 +mail: uid761 +uidnumber: 761 +gidnumber: 761 +homeDirectory: /home/uid761 + +dn: cn=user762,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user762 +sn: user762 +uid: uid762 +givenname: givenname762 +description: description762 +userPassword: password762 +mail: uid762 +uidnumber: 762 +gidnumber: 762 +homeDirectory: /home/uid762 + +dn: cn=user763,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user763 +sn: user763 +uid: uid763 +givenname: givenname763 +description: description763 +userPassword: password763 +mail: uid763 +uidnumber: 763 +gidnumber: 763 +homeDirectory: /home/uid763 + +dn: cn=user764,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user764 +sn: user764 +uid: uid764 +givenname: givenname764 +description: description764 +userPassword: password764 +mail: uid764 +uidnumber: 764 +gidnumber: 764 +homeDirectory: /home/uid764 + +dn: cn=user765,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user765 +sn: user765 +uid: uid765 +givenname: givenname765 +description: description765 +userPassword: password765 +mail: uid765 +uidnumber: 765 +gidnumber: 765 +homeDirectory: /home/uid765 + +dn: cn=user766,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user766 +sn: user766 +uid: uid766 +givenname: givenname766 +description: description766 +userPassword: password766 +mail: uid766 +uidnumber: 766 +gidnumber: 766 +homeDirectory: /home/uid766 + +dn: cn=user767,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user767 +sn: user767 +uid: uid767 +givenname: givenname767 +description: description767 +userPassword: password767 +mail: uid767 +uidnumber: 767 +gidnumber: 767 +homeDirectory: /home/uid767 + +dn: cn=user768,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user768 +sn: user768 +uid: uid768 +givenname: givenname768 +description: description768 +userPassword: password768 +mail: uid768 +uidnumber: 768 +gidnumber: 768 +homeDirectory: /home/uid768 + +dn: cn=user769,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user769 +sn: user769 +uid: uid769 +givenname: givenname769 +description: description769 +userPassword: password769 +mail: uid769 +uidnumber: 769 +gidnumber: 769 +homeDirectory: /home/uid769 + +dn: cn=user770,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user770 +sn: user770 +uid: uid770 +givenname: givenname770 +description: description770 +userPassword: password770 +mail: uid770 +uidnumber: 770 +gidnumber: 770 +homeDirectory: /home/uid770 + +dn: cn=user771,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user771 +sn: user771 +uid: uid771 +givenname: givenname771 +description: description771 +userPassword: password771 +mail: uid771 +uidnumber: 771 +gidnumber: 771 +homeDirectory: /home/uid771 + +dn: cn=user772,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user772 +sn: user772 +uid: uid772 +givenname: givenname772 +description: description772 +userPassword: password772 +mail: uid772 +uidnumber: 772 +gidnumber: 772 +homeDirectory: /home/uid772 + +dn: cn=user773,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user773 +sn: user773 +uid: uid773 +givenname: givenname773 +description: description773 +userPassword: password773 +mail: uid773 +uidnumber: 773 +gidnumber: 773 +homeDirectory: /home/uid773 + +dn: cn=user774,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user774 +sn: user774 +uid: uid774 +givenname: givenname774 +description: description774 +userPassword: password774 +mail: uid774 +uidnumber: 774 +gidnumber: 774 +homeDirectory: /home/uid774 + +dn: cn=user775,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user775 +sn: user775 +uid: uid775 +givenname: givenname775 +description: description775 +userPassword: password775 +mail: uid775 +uidnumber: 775 +gidnumber: 775 +homeDirectory: /home/uid775 + +dn: cn=user776,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user776 +sn: user776 +uid: uid776 +givenname: givenname776 +description: description776 +userPassword: password776 +mail: uid776 +uidnumber: 776 +gidnumber: 776 +homeDirectory: /home/uid776 + +dn: cn=user777,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user777 +sn: user777 +uid: uid777 +givenname: givenname777 +description: description777 +userPassword: password777 +mail: uid777 +uidnumber: 777 +gidnumber: 777 +homeDirectory: /home/uid777 + +dn: cn=user778,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user778 +sn: user778 +uid: uid778 +givenname: givenname778 +description: description778 +userPassword: password778 +mail: uid778 +uidnumber: 778 +gidnumber: 778 +homeDirectory: /home/uid778 + +dn: cn=user779,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user779 +sn: user779 +uid: uid779 +givenname: givenname779 +description: description779 +userPassword: password779 +mail: uid779 +uidnumber: 779 +gidnumber: 779 +homeDirectory: /home/uid779 + +dn: cn=user780,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user780 +sn: user780 +uid: uid780 +givenname: givenname780 +description: description780 +userPassword: password780 +mail: uid780 +uidnumber: 780 +gidnumber: 780 +homeDirectory: /home/uid780 + +dn: cn=user781,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user781 +sn: user781 +uid: uid781 +givenname: givenname781 +description: description781 +userPassword: password781 +mail: uid781 +uidnumber: 781 +gidnumber: 781 +homeDirectory: /home/uid781 + +dn: cn=user782,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user782 +sn: user782 +uid: uid782 +givenname: givenname782 +description: description782 +userPassword: password782 +mail: uid782 +uidnumber: 782 +gidnumber: 782 +homeDirectory: /home/uid782 + +dn: cn=user783,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user783 +sn: user783 +uid: uid783 +givenname: givenname783 +description: description783 +userPassword: password783 +mail: uid783 +uidnumber: 783 +gidnumber: 783 +homeDirectory: /home/uid783 + +dn: cn=user784,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user784 +sn: user784 +uid: uid784 +givenname: givenname784 +description: description784 +userPassword: password784 +mail: uid784 +uidnumber: 784 +gidnumber: 784 +homeDirectory: /home/uid784 + +dn: cn=user785,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user785 +sn: user785 +uid: uid785 +givenname: givenname785 +description: description785 +userPassword: password785 +mail: uid785 +uidnumber: 785 +gidnumber: 785 +homeDirectory: /home/uid785 + +dn: cn=user786,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user786 +sn: user786 +uid: uid786 +givenname: givenname786 +description: description786 +userPassword: password786 +mail: uid786 +uidnumber: 786 +gidnumber: 786 +homeDirectory: /home/uid786 + +dn: cn=user787,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user787 +sn: user787 +uid: uid787 +givenname: givenname787 +description: description787 +userPassword: password787 +mail: uid787 +uidnumber: 787 +gidnumber: 787 +homeDirectory: /home/uid787 + +dn: cn=user788,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user788 +sn: user788 +uid: uid788 +givenname: givenname788 +description: description788 +userPassword: password788 +mail: uid788 +uidnumber: 788 +gidnumber: 788 +homeDirectory: /home/uid788 + +dn: cn=user789,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user789 +sn: user789 +uid: uid789 +givenname: givenname789 +description: description789 +userPassword: password789 +mail: uid789 +uidnumber: 789 +gidnumber: 789 +homeDirectory: /home/uid789 + +dn: cn=user790,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user790 +sn: user790 +uid: uid790 +givenname: givenname790 +description: description790 +userPassword: password790 +mail: uid790 +uidnumber: 790 +gidnumber: 790 +homeDirectory: /home/uid790 + +dn: cn=user791,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user791 +sn: user791 +uid: uid791 +givenname: givenname791 +description: description791 +userPassword: password791 +mail: uid791 +uidnumber: 791 +gidnumber: 791 +homeDirectory: /home/uid791 + +dn: cn=user792,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user792 +sn: user792 +uid: uid792 +givenname: givenname792 +description: description792 +userPassword: password792 +mail: uid792 +uidnumber: 792 +gidnumber: 792 +homeDirectory: /home/uid792 + +dn: cn=user793,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user793 +sn: user793 +uid: uid793 +givenname: givenname793 +description: description793 +userPassword: password793 +mail: uid793 +uidnumber: 793 +gidnumber: 793 +homeDirectory: /home/uid793 + +dn: cn=user794,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user794 +sn: user794 +uid: uid794 +givenname: givenname794 +description: description794 +userPassword: password794 +mail: uid794 +uidnumber: 794 +gidnumber: 794 +homeDirectory: /home/uid794 + +dn: cn=user795,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user795 +sn: user795 +uid: uid795 +givenname: givenname795 +description: description795 +userPassword: password795 +mail: uid795 +uidnumber: 795 +gidnumber: 795 +homeDirectory: /home/uid795 + +dn: cn=user796,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user796 +sn: user796 +uid: uid796 +givenname: givenname796 +description: description796 +userPassword: password796 +mail: uid796 +uidnumber: 796 +gidnumber: 796 +homeDirectory: /home/uid796 + +dn: cn=user797,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user797 +sn: user797 +uid: uid797 +givenname: givenname797 +description: description797 +userPassword: password797 +mail: uid797 +uidnumber: 797 +gidnumber: 797 +homeDirectory: /home/uid797 + +dn: cn=user798,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user798 +sn: user798 +uid: uid798 +givenname: givenname798 +description: description798 +userPassword: password798 +mail: uid798 +uidnumber: 798 +gidnumber: 798 +homeDirectory: /home/uid798 + +dn: cn=user799,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user799 +sn: user799 +uid: uid799 +givenname: givenname799 +description: description799 +userPassword: password799 +mail: uid799 +uidnumber: 799 +gidnumber: 799 +homeDirectory: /home/uid799 + +dn: cn=user800,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user800 +sn: user800 +uid: uid800 +givenname: givenname800 +description: description800 +userPassword: password800 +mail: uid800 +uidnumber: 800 +gidnumber: 800 +homeDirectory: /home/uid800 + +dn: cn=user801,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user801 +sn: user801 +uid: uid801 +givenname: givenname801 +description: description801 +userPassword: password801 +mail: uid801 +uidnumber: 801 +gidnumber: 801 +homeDirectory: /home/uid801 + +dn: cn=user802,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user802 +sn: user802 +uid: uid802 +givenname: givenname802 +description: description802 +userPassword: password802 +mail: uid802 +uidnumber: 802 +gidnumber: 802 +homeDirectory: /home/uid802 + +dn: cn=user803,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user803 +sn: user803 +uid: uid803 +givenname: givenname803 +description: description803 +userPassword: password803 +mail: uid803 +uidnumber: 803 +gidnumber: 803 +homeDirectory: /home/uid803 + +dn: cn=user804,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user804 +sn: user804 +uid: uid804 +givenname: givenname804 +description: description804 +userPassword: password804 +mail: uid804 +uidnumber: 804 +gidnumber: 804 +homeDirectory: /home/uid804 + +dn: cn=user805,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user805 +sn: user805 +uid: uid805 +givenname: givenname805 +description: description805 +userPassword: password805 +mail: uid805 +uidnumber: 805 +gidnumber: 805 +homeDirectory: /home/uid805 + +dn: cn=user806,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user806 +sn: user806 +uid: uid806 +givenname: givenname806 +description: description806 +userPassword: password806 +mail: uid806 +uidnumber: 806 +gidnumber: 806 +homeDirectory: /home/uid806 + +dn: cn=user807,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user807 +sn: user807 +uid: uid807 +givenname: givenname807 +description: description807 +userPassword: password807 +mail: uid807 +uidnumber: 807 +gidnumber: 807 +homeDirectory: /home/uid807 + +dn: cn=user808,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user808 +sn: user808 +uid: uid808 +givenname: givenname808 +description: description808 +userPassword: password808 +mail: uid808 +uidnumber: 808 +gidnumber: 808 +homeDirectory: /home/uid808 + +dn: cn=user809,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user809 +sn: user809 +uid: uid809 +givenname: givenname809 +description: description809 +userPassword: password809 +mail: uid809 +uidnumber: 809 +gidnumber: 809 +homeDirectory: /home/uid809 + +dn: cn=user810,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user810 +sn: user810 +uid: uid810 +givenname: givenname810 +description: description810 +userPassword: password810 +mail: uid810 +uidnumber: 810 +gidnumber: 810 +homeDirectory: /home/uid810 + +dn: cn=user811,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user811 +sn: user811 +uid: uid811 +givenname: givenname811 +description: description811 +userPassword: password811 +mail: uid811 +uidnumber: 811 +gidnumber: 811 +homeDirectory: /home/uid811 + +dn: cn=user812,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user812 +sn: user812 +uid: uid812 +givenname: givenname812 +description: description812 +userPassword: password812 +mail: uid812 +uidnumber: 812 +gidnumber: 812 +homeDirectory: /home/uid812 + +dn: cn=user813,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user813 +sn: user813 +uid: uid813 +givenname: givenname813 +description: description813 +userPassword: password813 +mail: uid813 +uidnumber: 813 +gidnumber: 813 +homeDirectory: /home/uid813 + +dn: cn=user814,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user814 +sn: user814 +uid: uid814 +givenname: givenname814 +description: description814 +userPassword: password814 +mail: uid814 +uidnumber: 814 +gidnumber: 814 +homeDirectory: /home/uid814 + +dn: cn=user815,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user815 +sn: user815 +uid: uid815 +givenname: givenname815 +description: description815 +userPassword: password815 +mail: uid815 +uidnumber: 815 +gidnumber: 815 +homeDirectory: /home/uid815 + +dn: cn=user816,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user816 +sn: user816 +uid: uid816 +givenname: givenname816 +description: description816 +userPassword: password816 +mail: uid816 +uidnumber: 816 +gidnumber: 816 +homeDirectory: /home/uid816 + +dn: cn=user817,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user817 +sn: user817 +uid: uid817 +givenname: givenname817 +description: description817 +userPassword: password817 +mail: uid817 +uidnumber: 817 +gidnumber: 817 +homeDirectory: /home/uid817 + +dn: cn=user818,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user818 +sn: user818 +uid: uid818 +givenname: givenname818 +description: description818 +userPassword: password818 +mail: uid818 +uidnumber: 818 +gidnumber: 818 +homeDirectory: /home/uid818 + +dn: cn=user819,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user819 +sn: user819 +uid: uid819 +givenname: givenname819 +description: description819 +userPassword: password819 +mail: uid819 +uidnumber: 819 +gidnumber: 819 +homeDirectory: /home/uid819 + +dn: cn=user820,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user820 +sn: user820 +uid: uid820 +givenname: givenname820 +description: description820 +userPassword: password820 +mail: uid820 +uidnumber: 820 +gidnumber: 820 +homeDirectory: /home/uid820 + +dn: cn=user821,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user821 +sn: user821 +uid: uid821 +givenname: givenname821 +description: description821 +userPassword: password821 +mail: uid821 +uidnumber: 821 +gidnumber: 821 +homeDirectory: /home/uid821 + +dn: cn=user822,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user822 +sn: user822 +uid: uid822 +givenname: givenname822 +description: description822 +userPassword: password822 +mail: uid822 +uidnumber: 822 +gidnumber: 822 +homeDirectory: /home/uid822 + +dn: cn=user823,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user823 +sn: user823 +uid: uid823 +givenname: givenname823 +description: description823 +userPassword: password823 +mail: uid823 +uidnumber: 823 +gidnumber: 823 +homeDirectory: /home/uid823 + +dn: cn=user824,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user824 +sn: user824 +uid: uid824 +givenname: givenname824 +description: description824 +userPassword: password824 +mail: uid824 +uidnumber: 824 +gidnumber: 824 +homeDirectory: /home/uid824 + +dn: cn=user825,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user825 +sn: user825 +uid: uid825 +givenname: givenname825 +description: description825 +userPassword: password825 +mail: uid825 +uidnumber: 825 +gidnumber: 825 +homeDirectory: /home/uid825 + +dn: cn=user826,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user826 +sn: user826 +uid: uid826 +givenname: givenname826 +description: description826 +userPassword: password826 +mail: uid826 +uidnumber: 826 +gidnumber: 826 +homeDirectory: /home/uid826 + +dn: cn=user827,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user827 +sn: user827 +uid: uid827 +givenname: givenname827 +description: description827 +userPassword: password827 +mail: uid827 +uidnumber: 827 +gidnumber: 827 +homeDirectory: /home/uid827 + +dn: cn=user828,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user828 +sn: user828 +uid: uid828 +givenname: givenname828 +description: description828 +userPassword: password828 +mail: uid828 +uidnumber: 828 +gidnumber: 828 +homeDirectory: /home/uid828 + +dn: cn=user829,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user829 +sn: user829 +uid: uid829 +givenname: givenname829 +description: description829 +userPassword: password829 +mail: uid829 +uidnumber: 829 +gidnumber: 829 +homeDirectory: /home/uid829 + +dn: cn=user830,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user830 +sn: user830 +uid: uid830 +givenname: givenname830 +description: description830 +userPassword: password830 +mail: uid830 +uidnumber: 830 +gidnumber: 830 +homeDirectory: /home/uid830 + +dn: cn=user831,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user831 +sn: user831 +uid: uid831 +givenname: givenname831 +description: description831 +userPassword: password831 +mail: uid831 +uidnumber: 831 +gidnumber: 831 +homeDirectory: /home/uid831 + +dn: cn=user832,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user832 +sn: user832 +uid: uid832 +givenname: givenname832 +description: description832 +userPassword: password832 +mail: uid832 +uidnumber: 832 +gidnumber: 832 +homeDirectory: /home/uid832 + +dn: cn=user833,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user833 +sn: user833 +uid: uid833 +givenname: givenname833 +description: description833 +userPassword: password833 +mail: uid833 +uidnumber: 833 +gidnumber: 833 +homeDirectory: /home/uid833 + +dn: cn=user834,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user834 +sn: user834 +uid: uid834 +givenname: givenname834 +description: description834 +userPassword: password834 +mail: uid834 +uidnumber: 834 +gidnumber: 834 +homeDirectory: /home/uid834 + +dn: cn=user835,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user835 +sn: user835 +uid: uid835 +givenname: givenname835 +description: description835 +userPassword: password835 +mail: uid835 +uidnumber: 835 +gidnumber: 835 +homeDirectory: /home/uid835 + +dn: cn=user836,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user836 +sn: user836 +uid: uid836 +givenname: givenname836 +description: description836 +userPassword: password836 +mail: uid836 +uidnumber: 836 +gidnumber: 836 +homeDirectory: /home/uid836 + +dn: cn=user837,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user837 +sn: user837 +uid: uid837 +givenname: givenname837 +description: description837 +userPassword: password837 +mail: uid837 +uidnumber: 837 +gidnumber: 837 +homeDirectory: /home/uid837 + +dn: cn=user838,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user838 +sn: user838 +uid: uid838 +givenname: givenname838 +description: description838 +userPassword: password838 +mail: uid838 +uidnumber: 838 +gidnumber: 838 +homeDirectory: /home/uid838 + +dn: cn=user839,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user839 +sn: user839 +uid: uid839 +givenname: givenname839 +description: description839 +userPassword: password839 +mail: uid839 +uidnumber: 839 +gidnumber: 839 +homeDirectory: /home/uid839 + +dn: cn=user840,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user840 +sn: user840 +uid: uid840 +givenname: givenname840 +description: description840 +userPassword: password840 +mail: uid840 +uidnumber: 840 +gidnumber: 840 +homeDirectory: /home/uid840 + +dn: cn=user841,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user841 +sn: user841 +uid: uid841 +givenname: givenname841 +description: description841 +userPassword: password841 +mail: uid841 +uidnumber: 841 +gidnumber: 841 +homeDirectory: /home/uid841 + +dn: cn=user842,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user842 +sn: user842 +uid: uid842 +givenname: givenname842 +description: description842 +userPassword: password842 +mail: uid842 +uidnumber: 842 +gidnumber: 842 +homeDirectory: /home/uid842 + +dn: cn=user843,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user843 +sn: user843 +uid: uid843 +givenname: givenname843 +description: description843 +userPassword: password843 +mail: uid843 +uidnumber: 843 +gidnumber: 843 +homeDirectory: /home/uid843 + +dn: cn=user844,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user844 +sn: user844 +uid: uid844 +givenname: givenname844 +description: description844 +userPassword: password844 +mail: uid844 +uidnumber: 844 +gidnumber: 844 +homeDirectory: /home/uid844 + +dn: cn=user845,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user845 +sn: user845 +uid: uid845 +givenname: givenname845 +description: description845 +userPassword: password845 +mail: uid845 +uidnumber: 845 +gidnumber: 845 +homeDirectory: /home/uid845 + +dn: cn=user846,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user846 +sn: user846 +uid: uid846 +givenname: givenname846 +description: description846 +userPassword: password846 +mail: uid846 +uidnumber: 846 +gidnumber: 846 +homeDirectory: /home/uid846 + +dn: cn=user847,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user847 +sn: user847 +uid: uid847 +givenname: givenname847 +description: description847 +userPassword: password847 +mail: uid847 +uidnumber: 847 +gidnumber: 847 +homeDirectory: /home/uid847 + +dn: cn=user848,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user848 +sn: user848 +uid: uid848 +givenname: givenname848 +description: description848 +userPassword: password848 +mail: uid848 +uidnumber: 848 +gidnumber: 848 +homeDirectory: /home/uid848 + +dn: cn=user849,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user849 +sn: user849 +uid: uid849 +givenname: givenname849 +description: description849 +userPassword: password849 +mail: uid849 +uidnumber: 849 +gidnumber: 849 +homeDirectory: /home/uid849 + +dn: cn=user850,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user850 +sn: user850 +uid: uid850 +givenname: givenname850 +description: description850 +userPassword: password850 +mail: uid850 +uidnumber: 850 +gidnumber: 850 +homeDirectory: /home/uid850 + +dn: cn=user851,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user851 +sn: user851 +uid: uid851 +givenname: givenname851 +description: description851 +userPassword: password851 +mail: uid851 +uidnumber: 851 +gidnumber: 851 +homeDirectory: /home/uid851 + +dn: cn=user852,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user852 +sn: user852 +uid: uid852 +givenname: givenname852 +description: description852 +userPassword: password852 +mail: uid852 +uidnumber: 852 +gidnumber: 852 +homeDirectory: /home/uid852 + +dn: cn=user853,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user853 +sn: user853 +uid: uid853 +givenname: givenname853 +description: description853 +userPassword: password853 +mail: uid853 +uidnumber: 853 +gidnumber: 853 +homeDirectory: /home/uid853 + +dn: cn=user854,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user854 +sn: user854 +uid: uid854 +givenname: givenname854 +description: description854 +userPassword: password854 +mail: uid854 +uidnumber: 854 +gidnumber: 854 +homeDirectory: /home/uid854 + +dn: cn=user855,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user855 +sn: user855 +uid: uid855 +givenname: givenname855 +description: description855 +userPassword: password855 +mail: uid855 +uidnumber: 855 +gidnumber: 855 +homeDirectory: /home/uid855 + +dn: cn=user856,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user856 +sn: user856 +uid: uid856 +givenname: givenname856 +description: description856 +userPassword: password856 +mail: uid856 +uidnumber: 856 +gidnumber: 856 +homeDirectory: /home/uid856 + +dn: cn=user857,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user857 +sn: user857 +uid: uid857 +givenname: givenname857 +description: description857 +userPassword: password857 +mail: uid857 +uidnumber: 857 +gidnumber: 857 +homeDirectory: /home/uid857 + +dn: cn=user858,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user858 +sn: user858 +uid: uid858 +givenname: givenname858 +description: description858 +userPassword: password858 +mail: uid858 +uidnumber: 858 +gidnumber: 858 +homeDirectory: /home/uid858 + +dn: cn=user859,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user859 +sn: user859 +uid: uid859 +givenname: givenname859 +description: description859 +userPassword: password859 +mail: uid859 +uidnumber: 859 +gidnumber: 859 +homeDirectory: /home/uid859 + +dn: cn=user860,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user860 +sn: user860 +uid: uid860 +givenname: givenname860 +description: description860 +userPassword: password860 +mail: uid860 +uidnumber: 860 +gidnumber: 860 +homeDirectory: /home/uid860 + +dn: cn=user861,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user861 +sn: user861 +uid: uid861 +givenname: givenname861 +description: description861 +userPassword: password861 +mail: uid861 +uidnumber: 861 +gidnumber: 861 +homeDirectory: /home/uid861 + +dn: cn=user862,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user862 +sn: user862 +uid: uid862 +givenname: givenname862 +description: description862 +userPassword: password862 +mail: uid862 +uidnumber: 862 +gidnumber: 862 +homeDirectory: /home/uid862 + +dn: cn=user863,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user863 +sn: user863 +uid: uid863 +givenname: givenname863 +description: description863 +userPassword: password863 +mail: uid863 +uidnumber: 863 +gidnumber: 863 +homeDirectory: /home/uid863 + +dn: cn=user864,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user864 +sn: user864 +uid: uid864 +givenname: givenname864 +description: description864 +userPassword: password864 +mail: uid864 +uidnumber: 864 +gidnumber: 864 +homeDirectory: /home/uid864 + +dn: cn=user865,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user865 +sn: user865 +uid: uid865 +givenname: givenname865 +description: description865 +userPassword: password865 +mail: uid865 +uidnumber: 865 +gidnumber: 865 +homeDirectory: /home/uid865 + +dn: cn=user866,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user866 +sn: user866 +uid: uid866 +givenname: givenname866 +description: description866 +userPassword: password866 +mail: uid866 +uidnumber: 866 +gidnumber: 866 +homeDirectory: /home/uid866 + +dn: cn=user867,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user867 +sn: user867 +uid: uid867 +givenname: givenname867 +description: description867 +userPassword: password867 +mail: uid867 +uidnumber: 867 +gidnumber: 867 +homeDirectory: /home/uid867 + +dn: cn=user868,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user868 +sn: user868 +uid: uid868 +givenname: givenname868 +description: description868 +userPassword: password868 +mail: uid868 +uidnumber: 868 +gidnumber: 868 +homeDirectory: /home/uid868 + +dn: cn=user869,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user869 +sn: user869 +uid: uid869 +givenname: givenname869 +description: description869 +userPassword: password869 +mail: uid869 +uidnumber: 869 +gidnumber: 869 +homeDirectory: /home/uid869 + +dn: cn=user870,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user870 +sn: user870 +uid: uid870 +givenname: givenname870 +description: description870 +userPassword: password870 +mail: uid870 +uidnumber: 870 +gidnumber: 870 +homeDirectory: /home/uid870 + +dn: cn=user871,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user871 +sn: user871 +uid: uid871 +givenname: givenname871 +description: description871 +userPassword: password871 +mail: uid871 +uidnumber: 871 +gidnumber: 871 +homeDirectory: /home/uid871 + +dn: cn=user872,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user872 +sn: user872 +uid: uid872 +givenname: givenname872 +description: description872 +userPassword: password872 +mail: uid872 +uidnumber: 872 +gidnumber: 872 +homeDirectory: /home/uid872 + +dn: cn=user873,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user873 +sn: user873 +uid: uid873 +givenname: givenname873 +description: description873 +userPassword: password873 +mail: uid873 +uidnumber: 873 +gidnumber: 873 +homeDirectory: /home/uid873 + +dn: cn=user874,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user874 +sn: user874 +uid: uid874 +givenname: givenname874 +description: description874 +userPassword: password874 +mail: uid874 +uidnumber: 874 +gidnumber: 874 +homeDirectory: /home/uid874 + +dn: cn=user875,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user875 +sn: user875 +uid: uid875 +givenname: givenname875 +description: description875 +userPassword: password875 +mail: uid875 +uidnumber: 875 +gidnumber: 875 +homeDirectory: /home/uid875 + +dn: cn=user876,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user876 +sn: user876 +uid: uid876 +givenname: givenname876 +description: description876 +userPassword: password876 +mail: uid876 +uidnumber: 876 +gidnumber: 876 +homeDirectory: /home/uid876 + +dn: cn=user877,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user877 +sn: user877 +uid: uid877 +givenname: givenname877 +description: description877 +userPassword: password877 +mail: uid877 +uidnumber: 877 +gidnumber: 877 +homeDirectory: /home/uid877 + +dn: cn=user878,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user878 +sn: user878 +uid: uid878 +givenname: givenname878 +description: description878 +userPassword: password878 +mail: uid878 +uidnumber: 878 +gidnumber: 878 +homeDirectory: /home/uid878 + +dn: cn=user879,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user879 +sn: user879 +uid: uid879 +givenname: givenname879 +description: description879 +userPassword: password879 +mail: uid879 +uidnumber: 879 +gidnumber: 879 +homeDirectory: /home/uid879 + +dn: cn=user880,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user880 +sn: user880 +uid: uid880 +givenname: givenname880 +description: description880 +userPassword: password880 +mail: uid880 +uidnumber: 880 +gidnumber: 880 +homeDirectory: /home/uid880 + +dn: cn=user881,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user881 +sn: user881 +uid: uid881 +givenname: givenname881 +description: description881 +userPassword: password881 +mail: uid881 +uidnumber: 881 +gidnumber: 881 +homeDirectory: /home/uid881 + +dn: cn=user882,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user882 +sn: user882 +uid: uid882 +givenname: givenname882 +description: description882 +userPassword: password882 +mail: uid882 +uidnumber: 882 +gidnumber: 882 +homeDirectory: /home/uid882 + +dn: cn=user883,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user883 +sn: user883 +uid: uid883 +givenname: givenname883 +description: description883 +userPassword: password883 +mail: uid883 +uidnumber: 883 +gidnumber: 883 +homeDirectory: /home/uid883 + +dn: cn=user884,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user884 +sn: user884 +uid: uid884 +givenname: givenname884 +description: description884 +userPassword: password884 +mail: uid884 +uidnumber: 884 +gidnumber: 884 +homeDirectory: /home/uid884 + +dn: cn=user885,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user885 +sn: user885 +uid: uid885 +givenname: givenname885 +description: description885 +userPassword: password885 +mail: uid885 +uidnumber: 885 +gidnumber: 885 +homeDirectory: /home/uid885 + +dn: cn=user886,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user886 +sn: user886 +uid: uid886 +givenname: givenname886 +description: description886 +userPassword: password886 +mail: uid886 +uidnumber: 886 +gidnumber: 886 +homeDirectory: /home/uid886 + +dn: cn=user887,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user887 +sn: user887 +uid: uid887 +givenname: givenname887 +description: description887 +userPassword: password887 +mail: uid887 +uidnumber: 887 +gidnumber: 887 +homeDirectory: /home/uid887 + +dn: cn=user888,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user888 +sn: user888 +uid: uid888 +givenname: givenname888 +description: description888 +userPassword: password888 +mail: uid888 +uidnumber: 888 +gidnumber: 888 +homeDirectory: /home/uid888 + +dn: cn=user889,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user889 +sn: user889 +uid: uid889 +givenname: givenname889 +description: description889 +userPassword: password889 +mail: uid889 +uidnumber: 889 +gidnumber: 889 +homeDirectory: /home/uid889 + +dn: cn=user890,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user890 +sn: user890 +uid: uid890 +givenname: givenname890 +description: description890 +userPassword: password890 +mail: uid890 +uidnumber: 890 +gidnumber: 890 +homeDirectory: /home/uid890 + +dn: cn=user891,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user891 +sn: user891 +uid: uid891 +givenname: givenname891 +description: description891 +userPassword: password891 +mail: uid891 +uidnumber: 891 +gidnumber: 891 +homeDirectory: /home/uid891 + +dn: cn=user892,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user892 +sn: user892 +uid: uid892 +givenname: givenname892 +description: description892 +userPassword: password892 +mail: uid892 +uidnumber: 892 +gidnumber: 892 +homeDirectory: /home/uid892 + +dn: cn=user893,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user893 +sn: user893 +uid: uid893 +givenname: givenname893 +description: description893 +userPassword: password893 +mail: uid893 +uidnumber: 893 +gidnumber: 893 +homeDirectory: /home/uid893 + +dn: cn=user894,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user894 +sn: user894 +uid: uid894 +givenname: givenname894 +description: description894 +userPassword: password894 +mail: uid894 +uidnumber: 894 +gidnumber: 894 +homeDirectory: /home/uid894 + +dn: cn=user895,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user895 +sn: user895 +uid: uid895 +givenname: givenname895 +description: description895 +userPassword: password895 +mail: uid895 +uidnumber: 895 +gidnumber: 895 +homeDirectory: /home/uid895 + +dn: cn=user896,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user896 +sn: user896 +uid: uid896 +givenname: givenname896 +description: description896 +userPassword: password896 +mail: uid896 +uidnumber: 896 +gidnumber: 896 +homeDirectory: /home/uid896 + +dn: cn=user897,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user897 +sn: user897 +uid: uid897 +givenname: givenname897 +description: description897 +userPassword: password897 +mail: uid897 +uidnumber: 897 +gidnumber: 897 +homeDirectory: /home/uid897 + +dn: cn=user898,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user898 +sn: user898 +uid: uid898 +givenname: givenname898 +description: description898 +userPassword: password898 +mail: uid898 +uidnumber: 898 +gidnumber: 898 +homeDirectory: /home/uid898 + +dn: cn=user899,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user899 +sn: user899 +uid: uid899 +givenname: givenname899 +description: description899 +userPassword: password899 +mail: uid899 +uidnumber: 899 +gidnumber: 899 +homeDirectory: /home/uid899 + +dn: cn=user900,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user900 +sn: user900 +uid: uid900 +givenname: givenname900 +description: description900 +userPassword: password900 +mail: uid900 +uidnumber: 900 +gidnumber: 900 +homeDirectory: /home/uid900 + +dn: cn=user901,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user901 +sn: user901 +uid: uid901 +givenname: givenname901 +description: description901 +userPassword: password901 +mail: uid901 +uidnumber: 901 +gidnumber: 901 +homeDirectory: /home/uid901 + +dn: cn=user902,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user902 +sn: user902 +uid: uid902 +givenname: givenname902 +description: description902 +userPassword: password902 +mail: uid902 +uidnumber: 902 +gidnumber: 902 +homeDirectory: /home/uid902 + +dn: cn=user903,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user903 +sn: user903 +uid: uid903 +givenname: givenname903 +description: description903 +userPassword: password903 +mail: uid903 +uidnumber: 903 +gidnumber: 903 +homeDirectory: /home/uid903 + +dn: cn=user904,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user904 +sn: user904 +uid: uid904 +givenname: givenname904 +description: description904 +userPassword: password904 +mail: uid904 +uidnumber: 904 +gidnumber: 904 +homeDirectory: /home/uid904 + +dn: cn=user905,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user905 +sn: user905 +uid: uid905 +givenname: givenname905 +description: description905 +userPassword: password905 +mail: uid905 +uidnumber: 905 +gidnumber: 905 +homeDirectory: /home/uid905 + +dn: cn=user906,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user906 +sn: user906 +uid: uid906 +givenname: givenname906 +description: description906 +userPassword: password906 +mail: uid906 +uidnumber: 906 +gidnumber: 906 +homeDirectory: /home/uid906 + +dn: cn=user907,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user907 +sn: user907 +uid: uid907 +givenname: givenname907 +description: description907 +userPassword: password907 +mail: uid907 +uidnumber: 907 +gidnumber: 907 +homeDirectory: /home/uid907 + +dn: cn=user908,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user908 +sn: user908 +uid: uid908 +givenname: givenname908 +description: description908 +userPassword: password908 +mail: uid908 +uidnumber: 908 +gidnumber: 908 +homeDirectory: /home/uid908 + +dn: cn=user909,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user909 +sn: user909 +uid: uid909 +givenname: givenname909 +description: description909 +userPassword: password909 +mail: uid909 +uidnumber: 909 +gidnumber: 909 +homeDirectory: /home/uid909 + +dn: cn=user910,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user910 +sn: user910 +uid: uid910 +givenname: givenname910 +description: description910 +userPassword: password910 +mail: uid910 +uidnumber: 910 +gidnumber: 910 +homeDirectory: /home/uid910 + +dn: cn=user911,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user911 +sn: user911 +uid: uid911 +givenname: givenname911 +description: description911 +userPassword: password911 +mail: uid911 +uidnumber: 911 +gidnumber: 911 +homeDirectory: /home/uid911 + +dn: cn=user912,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user912 +sn: user912 +uid: uid912 +givenname: givenname912 +description: description912 +userPassword: password912 +mail: uid912 +uidnumber: 912 +gidnumber: 912 +homeDirectory: /home/uid912 + +dn: cn=user913,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user913 +sn: user913 +uid: uid913 +givenname: givenname913 +description: description913 +userPassword: password913 +mail: uid913 +uidnumber: 913 +gidnumber: 913 +homeDirectory: /home/uid913 + +dn: cn=user914,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user914 +sn: user914 +uid: uid914 +givenname: givenname914 +description: description914 +userPassword: password914 +mail: uid914 +uidnumber: 914 +gidnumber: 914 +homeDirectory: /home/uid914 + +dn: cn=user915,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user915 +sn: user915 +uid: uid915 +givenname: givenname915 +description: description915 +userPassword: password915 +mail: uid915 +uidnumber: 915 +gidnumber: 915 +homeDirectory: /home/uid915 + +dn: cn=user916,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user916 +sn: user916 +uid: uid916 +givenname: givenname916 +description: description916 +userPassword: password916 +mail: uid916 +uidnumber: 916 +gidnumber: 916 +homeDirectory: /home/uid916 + +dn: cn=user917,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user917 +sn: user917 +uid: uid917 +givenname: givenname917 +description: description917 +userPassword: password917 +mail: uid917 +uidnumber: 917 +gidnumber: 917 +homeDirectory: /home/uid917 + +dn: cn=user918,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user918 +sn: user918 +uid: uid918 +givenname: givenname918 +description: description918 +userPassword: password918 +mail: uid918 +uidnumber: 918 +gidnumber: 918 +homeDirectory: /home/uid918 + +dn: cn=user919,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user919 +sn: user919 +uid: uid919 +givenname: givenname919 +description: description919 +userPassword: password919 +mail: uid919 +uidnumber: 919 +gidnumber: 919 +homeDirectory: /home/uid919 + +dn: cn=user920,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user920 +sn: user920 +uid: uid920 +givenname: givenname920 +description: description920 +userPassword: password920 +mail: uid920 +uidnumber: 920 +gidnumber: 920 +homeDirectory: /home/uid920 + +dn: cn=user921,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user921 +sn: user921 +uid: uid921 +givenname: givenname921 +description: description921 +userPassword: password921 +mail: uid921 +uidnumber: 921 +gidnumber: 921 +homeDirectory: /home/uid921 + +dn: cn=user922,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user922 +sn: user922 +uid: uid922 +givenname: givenname922 +description: description922 +userPassword: password922 +mail: uid922 +uidnumber: 922 +gidnumber: 922 +homeDirectory: /home/uid922 + +dn: cn=user923,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user923 +sn: user923 +uid: uid923 +givenname: givenname923 +description: description923 +userPassword: password923 +mail: uid923 +uidnumber: 923 +gidnumber: 923 +homeDirectory: /home/uid923 + +dn: cn=user924,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user924 +sn: user924 +uid: uid924 +givenname: givenname924 +description: description924 +userPassword: password924 +mail: uid924 +uidnumber: 924 +gidnumber: 924 +homeDirectory: /home/uid924 + +dn: cn=user925,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user925 +sn: user925 +uid: uid925 +givenname: givenname925 +description: description925 +userPassword: password925 +mail: uid925 +uidnumber: 925 +gidnumber: 925 +homeDirectory: /home/uid925 + +dn: cn=user926,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user926 +sn: user926 +uid: uid926 +givenname: givenname926 +description: description926 +userPassword: password926 +mail: uid926 +uidnumber: 926 +gidnumber: 926 +homeDirectory: /home/uid926 + +dn: cn=user927,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user927 +sn: user927 +uid: uid927 +givenname: givenname927 +description: description927 +userPassword: password927 +mail: uid927 +uidnumber: 927 +gidnumber: 927 +homeDirectory: /home/uid927 + +dn: cn=user928,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user928 +sn: user928 +uid: uid928 +givenname: givenname928 +description: description928 +userPassword: password928 +mail: uid928 +uidnumber: 928 +gidnumber: 928 +homeDirectory: /home/uid928 + +dn: cn=user929,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user929 +sn: user929 +uid: uid929 +givenname: givenname929 +description: description929 +userPassword: password929 +mail: uid929 +uidnumber: 929 +gidnumber: 929 +homeDirectory: /home/uid929 + +dn: cn=user930,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user930 +sn: user930 +uid: uid930 +givenname: givenname930 +description: description930 +userPassword: password930 +mail: uid930 +uidnumber: 930 +gidnumber: 930 +homeDirectory: /home/uid930 + +dn: cn=user931,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user931 +sn: user931 +uid: uid931 +givenname: givenname931 +description: description931 +userPassword: password931 +mail: uid931 +uidnumber: 931 +gidnumber: 931 +homeDirectory: /home/uid931 + +dn: cn=user932,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user932 +sn: user932 +uid: uid932 +givenname: givenname932 +description: description932 +userPassword: password932 +mail: uid932 +uidnumber: 932 +gidnumber: 932 +homeDirectory: /home/uid932 + +dn: cn=user933,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user933 +sn: user933 +uid: uid933 +givenname: givenname933 +description: description933 +userPassword: password933 +mail: uid933 +uidnumber: 933 +gidnumber: 933 +homeDirectory: /home/uid933 + +dn: cn=user934,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user934 +sn: user934 +uid: uid934 +givenname: givenname934 +description: description934 +userPassword: password934 +mail: uid934 +uidnumber: 934 +gidnumber: 934 +homeDirectory: /home/uid934 + +dn: cn=user935,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user935 +sn: user935 +uid: uid935 +givenname: givenname935 +description: description935 +userPassword: password935 +mail: uid935 +uidnumber: 935 +gidnumber: 935 +homeDirectory: /home/uid935 + +dn: cn=user936,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user936 +sn: user936 +uid: uid936 +givenname: givenname936 +description: description936 +userPassword: password936 +mail: uid936 +uidnumber: 936 +gidnumber: 936 +homeDirectory: /home/uid936 + +dn: cn=user937,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user937 +sn: user937 +uid: uid937 +givenname: givenname937 +description: description937 +userPassword: password937 +mail: uid937 +uidnumber: 937 +gidnumber: 937 +homeDirectory: /home/uid937 + +dn: cn=user938,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user938 +sn: user938 +uid: uid938 +givenname: givenname938 +description: description938 +userPassword: password938 +mail: uid938 +uidnumber: 938 +gidnumber: 938 +homeDirectory: /home/uid938 + +dn: cn=user939,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user939 +sn: user939 +uid: uid939 +givenname: givenname939 +description: description939 +userPassword: password939 +mail: uid939 +uidnumber: 939 +gidnumber: 939 +homeDirectory: /home/uid939 + +dn: cn=user940,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user940 +sn: user940 +uid: uid940 +givenname: givenname940 +description: description940 +userPassword: password940 +mail: uid940 +uidnumber: 940 +gidnumber: 940 +homeDirectory: /home/uid940 + +dn: cn=user941,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user941 +sn: user941 +uid: uid941 +givenname: givenname941 +description: description941 +userPassword: password941 +mail: uid941 +uidnumber: 941 +gidnumber: 941 +homeDirectory: /home/uid941 + +dn: cn=user942,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user942 +sn: user942 +uid: uid942 +givenname: givenname942 +description: description942 +userPassword: password942 +mail: uid942 +uidnumber: 942 +gidnumber: 942 +homeDirectory: /home/uid942 + +dn: cn=user943,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user943 +sn: user943 +uid: uid943 +givenname: givenname943 +description: description943 +userPassword: password943 +mail: uid943 +uidnumber: 943 +gidnumber: 943 +homeDirectory: /home/uid943 + +dn: cn=user944,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user944 +sn: user944 +uid: uid944 +givenname: givenname944 +description: description944 +userPassword: password944 +mail: uid944 +uidnumber: 944 +gidnumber: 944 +homeDirectory: /home/uid944 + +dn: cn=user945,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user945 +sn: user945 +uid: uid945 +givenname: givenname945 +description: description945 +userPassword: password945 +mail: uid945 +uidnumber: 945 +gidnumber: 945 +homeDirectory: /home/uid945 + +dn: cn=user946,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user946 +sn: user946 +uid: uid946 +givenname: givenname946 +description: description946 +userPassword: password946 +mail: uid946 +uidnumber: 946 +gidnumber: 946 +homeDirectory: /home/uid946 + +dn: cn=user947,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user947 +sn: user947 +uid: uid947 +givenname: givenname947 +description: description947 +userPassword: password947 +mail: uid947 +uidnumber: 947 +gidnumber: 947 +homeDirectory: /home/uid947 + +dn: cn=user948,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user948 +sn: user948 +uid: uid948 +givenname: givenname948 +description: description948 +userPassword: password948 +mail: uid948 +uidnumber: 948 +gidnumber: 948 +homeDirectory: /home/uid948 + +dn: cn=user949,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user949 +sn: user949 +uid: uid949 +givenname: givenname949 +description: description949 +userPassword: password949 +mail: uid949 +uidnumber: 949 +gidnumber: 949 +homeDirectory: /home/uid949 + +dn: cn=user950,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user950 +sn: user950 +uid: uid950 +givenname: givenname950 +description: description950 +userPassword: password950 +mail: uid950 +uidnumber: 950 +gidnumber: 950 +homeDirectory: /home/uid950 + +dn: cn=user951,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user951 +sn: user951 +uid: uid951 +givenname: givenname951 +description: description951 +userPassword: password951 +mail: uid951 +uidnumber: 951 +gidnumber: 951 +homeDirectory: /home/uid951 + +dn: cn=user952,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user952 +sn: user952 +uid: uid952 +givenname: givenname952 +description: description952 +userPassword: password952 +mail: uid952 +uidnumber: 952 +gidnumber: 952 +homeDirectory: /home/uid952 + +dn: cn=user953,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user953 +sn: user953 +uid: uid953 +givenname: givenname953 +description: description953 +userPassword: password953 +mail: uid953 +uidnumber: 953 +gidnumber: 953 +homeDirectory: /home/uid953 + +dn: cn=user954,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user954 +sn: user954 +uid: uid954 +givenname: givenname954 +description: description954 +userPassword: password954 +mail: uid954 +uidnumber: 954 +gidnumber: 954 +homeDirectory: /home/uid954 + +dn: cn=user955,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user955 +sn: user955 +uid: uid955 +givenname: givenname955 +description: description955 +userPassword: password955 +mail: uid955 +uidnumber: 955 +gidnumber: 955 +homeDirectory: /home/uid955 + +dn: cn=user956,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user956 +sn: user956 +uid: uid956 +givenname: givenname956 +description: description956 +userPassword: password956 +mail: uid956 +uidnumber: 956 +gidnumber: 956 +homeDirectory: /home/uid956 + +dn: cn=user957,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user957 +sn: user957 +uid: uid957 +givenname: givenname957 +description: description957 +userPassword: password957 +mail: uid957 +uidnumber: 957 +gidnumber: 957 +homeDirectory: /home/uid957 + +dn: cn=user958,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user958 +sn: user958 +uid: uid958 +givenname: givenname958 +description: description958 +userPassword: password958 +mail: uid958 +uidnumber: 958 +gidnumber: 958 +homeDirectory: /home/uid958 + +dn: cn=user959,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user959 +sn: user959 +uid: uid959 +givenname: givenname959 +description: description959 +userPassword: password959 +mail: uid959 +uidnumber: 959 +gidnumber: 959 +homeDirectory: /home/uid959 + +dn: cn=user960,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user960 +sn: user960 +uid: uid960 +givenname: givenname960 +description: description960 +userPassword: password960 +mail: uid960 +uidnumber: 960 +gidnumber: 960 +homeDirectory: /home/uid960 + +dn: cn=user961,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user961 +sn: user961 +uid: uid961 +givenname: givenname961 +description: description961 +userPassword: password961 +mail: uid961 +uidnumber: 961 +gidnumber: 961 +homeDirectory: /home/uid961 + +dn: cn=user962,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user962 +sn: user962 +uid: uid962 +givenname: givenname962 +description: description962 +userPassword: password962 +mail: uid962 +uidnumber: 962 +gidnumber: 962 +homeDirectory: /home/uid962 + +dn: cn=user963,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user963 +sn: user963 +uid: uid963 +givenname: givenname963 +description: description963 +userPassword: password963 +mail: uid963 +uidnumber: 963 +gidnumber: 963 +homeDirectory: /home/uid963 + +dn: cn=user964,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user964 +sn: user964 +uid: uid964 +givenname: givenname964 +description: description964 +userPassword: password964 +mail: uid964 +uidnumber: 964 +gidnumber: 964 +homeDirectory: /home/uid964 + +dn: cn=user965,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user965 +sn: user965 +uid: uid965 +givenname: givenname965 +description: description965 +userPassword: password965 +mail: uid965 +uidnumber: 965 +gidnumber: 965 +homeDirectory: /home/uid965 + +dn: cn=user966,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user966 +sn: user966 +uid: uid966 +givenname: givenname966 +description: description966 +userPassword: password966 +mail: uid966 +uidnumber: 966 +gidnumber: 966 +homeDirectory: /home/uid966 + +dn: cn=user967,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user967 +sn: user967 +uid: uid967 +givenname: givenname967 +description: description967 +userPassword: password967 +mail: uid967 +uidnumber: 967 +gidnumber: 967 +homeDirectory: /home/uid967 + +dn: cn=user968,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user968 +sn: user968 +uid: uid968 +givenname: givenname968 +description: description968 +userPassword: password968 +mail: uid968 +uidnumber: 968 +gidnumber: 968 +homeDirectory: /home/uid968 + +dn: cn=user969,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user969 +sn: user969 +uid: uid969 +givenname: givenname969 +description: description969 +userPassword: password969 +mail: uid969 +uidnumber: 969 +gidnumber: 969 +homeDirectory: /home/uid969 + +dn: cn=user970,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user970 +sn: user970 +uid: uid970 +givenname: givenname970 +description: description970 +userPassword: password970 +mail: uid970 +uidnumber: 970 +gidnumber: 970 +homeDirectory: /home/uid970 + +dn: cn=user971,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user971 +sn: user971 +uid: uid971 +givenname: givenname971 +description: description971 +userPassword: password971 +mail: uid971 +uidnumber: 971 +gidnumber: 971 +homeDirectory: /home/uid971 + +dn: cn=user972,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user972 +sn: user972 +uid: uid972 +givenname: givenname972 +description: description972 +userPassword: password972 +mail: uid972 +uidnumber: 972 +gidnumber: 972 +homeDirectory: /home/uid972 + +dn: cn=user973,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user973 +sn: user973 +uid: uid973 +givenname: givenname973 +description: description973 +userPassword: password973 +mail: uid973 +uidnumber: 973 +gidnumber: 973 +homeDirectory: /home/uid973 + +dn: cn=user974,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user974 +sn: user974 +uid: uid974 +givenname: givenname974 +description: description974 +userPassword: password974 +mail: uid974 +uidnumber: 974 +gidnumber: 974 +homeDirectory: /home/uid974 + +dn: cn=user975,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user975 +sn: user975 +uid: uid975 +givenname: givenname975 +description: description975 +userPassword: password975 +mail: uid975 +uidnumber: 975 +gidnumber: 975 +homeDirectory: /home/uid975 + +dn: cn=user976,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user976 +sn: user976 +uid: uid976 +givenname: givenname976 +description: description976 +userPassword: password976 +mail: uid976 +uidnumber: 976 +gidnumber: 976 +homeDirectory: /home/uid976 + +dn: cn=user977,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user977 +sn: user977 +uid: uid977 +givenname: givenname977 +description: description977 +userPassword: password977 +mail: uid977 +uidnumber: 977 +gidnumber: 977 +homeDirectory: /home/uid977 + +dn: cn=user978,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user978 +sn: user978 +uid: uid978 +givenname: givenname978 +description: description978 +userPassword: password978 +mail: uid978 +uidnumber: 978 +gidnumber: 978 +homeDirectory: /home/uid978 + +dn: cn=user979,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user979 +sn: user979 +uid: uid979 +givenname: givenname979 +description: description979 +userPassword: password979 +mail: uid979 +uidnumber: 979 +gidnumber: 979 +homeDirectory: /home/uid979 + +dn: cn=user980,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user980 +sn: user980 +uid: uid980 +givenname: givenname980 +description: description980 +userPassword: password980 +mail: uid980 +uidnumber: 980 +gidnumber: 980 +homeDirectory: /home/uid980 + +dn: cn=user981,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user981 +sn: user981 +uid: uid981 +givenname: givenname981 +description: description981 +userPassword: password981 +mail: uid981 +uidnumber: 981 +gidnumber: 981 +homeDirectory: /home/uid981 + +dn: cn=user982,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user982 +sn: user982 +uid: uid982 +givenname: givenname982 +description: description982 +userPassword: password982 +mail: uid982 +uidnumber: 982 +gidnumber: 982 +homeDirectory: /home/uid982 + +dn: cn=user983,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user983 +sn: user983 +uid: uid983 +givenname: givenname983 +description: description983 +userPassword: password983 +mail: uid983 +uidnumber: 983 +gidnumber: 983 +homeDirectory: /home/uid983 + +dn: cn=user984,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user984 +sn: user984 +uid: uid984 +givenname: givenname984 +description: description984 +userPassword: password984 +mail: uid984 +uidnumber: 984 +gidnumber: 984 +homeDirectory: /home/uid984 + +dn: cn=user985,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user985 +sn: user985 +uid: uid985 +givenname: givenname985 +description: description985 +userPassword: password985 +mail: uid985 +uidnumber: 985 +gidnumber: 985 +homeDirectory: /home/uid985 + +dn: cn=user986,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user986 +sn: user986 +uid: uid986 +givenname: givenname986 +description: description986 +userPassword: password986 +mail: uid986 +uidnumber: 986 +gidnumber: 986 +homeDirectory: /home/uid986 + +dn: cn=user987,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user987 +sn: user987 +uid: uid987 +givenname: givenname987 +description: description987 +userPassword: password987 +mail: uid987 +uidnumber: 987 +gidnumber: 987 +homeDirectory: /home/uid987 + +dn: cn=user988,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user988 +sn: user988 +uid: uid988 +givenname: givenname988 +description: description988 +userPassword: password988 +mail: uid988 +uidnumber: 988 +gidnumber: 988 +homeDirectory: /home/uid988 + +dn: cn=user989,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user989 +sn: user989 +uid: uid989 +givenname: givenname989 +description: description989 +userPassword: password989 +mail: uid989 +uidnumber: 989 +gidnumber: 989 +homeDirectory: /home/uid989 + +dn: cn=user990,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user990 +sn: user990 +uid: uid990 +givenname: givenname990 +description: description990 +userPassword: password990 +mail: uid990 +uidnumber: 990 +gidnumber: 990 +homeDirectory: /home/uid990 + +dn: cn=user991,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user991 +sn: user991 +uid: uid991 +givenname: givenname991 +description: description991 +userPassword: password991 +mail: uid991 +uidnumber: 991 +gidnumber: 991 +homeDirectory: /home/uid991 + +dn: cn=user992,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user992 +sn: user992 +uid: uid992 +givenname: givenname992 +description: description992 +userPassword: password992 +mail: uid992 +uidnumber: 992 +gidnumber: 992 +homeDirectory: /home/uid992 + +dn: cn=user993,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user993 +sn: user993 +uid: uid993 +givenname: givenname993 +description: description993 +userPassword: password993 +mail: uid993 +uidnumber: 993 +gidnumber: 993 +homeDirectory: /home/uid993 + +dn: cn=user994,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user994 +sn: user994 +uid: uid994 +givenname: givenname994 +description: description994 +userPassword: password994 +mail: uid994 +uidnumber: 994 +gidnumber: 994 +homeDirectory: /home/uid994 + +dn: cn=user995,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user995 +sn: user995 +uid: uid995 +givenname: givenname995 +description: description995 +userPassword: password995 +mail: uid995 +uidnumber: 995 +gidnumber: 995 +homeDirectory: /home/uid995 + +dn: cn=user996,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user996 +sn: user996 +uid: uid996 +givenname: givenname996 +description: description996 +userPassword: password996 +mail: uid996 +uidnumber: 996 +gidnumber: 996 +homeDirectory: /home/uid996 + +dn: cn=user997,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user997 +sn: user997 +uid: uid997 +givenname: givenname997 +description: description997 +userPassword: password997 +mail: uid997 +uidnumber: 997 +gidnumber: 997 +homeDirectory: /home/uid997 + +dn: cn=user998,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user998 +sn: user998 +uid: uid998 +givenname: givenname998 +description: description998 +userPassword: password998 +mail: uid998 +uidnumber: 998 +gidnumber: 998 +homeDirectory: /home/uid998 + +dn: cn=user999,ou=People,dc=example,dc=com +objectClass: top +objectClass: person +objectClass: organizationalPerson +objectClass: inetOrgPerson +objectClass: posixAccount +cn: user999 +sn: user999 +uid: uid999 +givenname: givenname999 +description: description999 +userPassword: password999 +mail: uid999 +uidnumber: 999 +gidnumber: 999 +homeDirectory: /home/uid999 + diff --git a/dirsrvtests/tests/data/ticket49121/utf8str.txt b/dirsrvtests/tests/data/ticket49121/utf8str.txt new file mode 100644 index 0000000..0005c4e --- /dev/null +++ b/dirsrvtests/tests/data/ticket49121/utf8str.txt @@ -0,0 +1 @@ +あいうえお diff --git a/dirsrvtests/tests/stress/README b/dirsrvtests/tests/stress/README new file mode 100644 index 0000000..758cad4 --- /dev/null +++ b/dirsrvtests/tests/stress/README @@ -0,0 +1,13 @@ +README for "Stress" Tests + +Reliablity Tests +============================== + +A generic high load, long running tests + +reliab7_5_test.py +------------------------------ + +This script is a light-weight version of the legacy TET stress test called "Reliabilty 15". This test consists of two MMR Masters, and a 5000 entry database. The test starts off with two threads doing unindexed searchesi(1 for each master). These do not exit untl the entire test completes. Then while the unindexed searches are going on, the test performs a set of adds, mods, deletes, and modrdns on each master at the same time. It performs this set of operations 1000 times. The main goal of this script is to test stablilty, replication convergence, and memory growth/fragmentation. + +Known issue: the server can deadlock in the libdb4 code while performing modrdns(under investigation via https://fedorahosted.org/389/ticket/48166) diff --git a/dirsrvtests/tests/stress/__init__.py b/dirsrvtests/tests/stress/__init__.py new file mode 100644 index 0000000..40a96af --- /dev/null +++ b/dirsrvtests/tests/stress/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/dirsrvtests/tests/stress/reliabilty/__init__.py b/dirsrvtests/tests/stress/reliabilty/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/stress/reliabilty/reliab_7_5_test.py b/dirsrvtests/tests/stress/reliabilty/reliab_7_5_test.py new file mode 100644 index 0000000..d00d78c --- /dev/null +++ b/dirsrvtests/tests/stress/reliabilty/reliab_7_5_test.py @@ -0,0 +1,568 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- + +import sys +import time +import ldap +import logging +import pytest +import threading +import random +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s' + + ' - %(message)s') +handler = logging.StreamHandler() +handler.setFormatter(formatter) +log = logging.getLogger(__name__) +log.addHandler(handler) + +installation1_prefix = None +NUM_USERS = 5000 +MAX_PASSES = 1000 +CHECK_CONVERGENCE = True +ENABLE_VALGRIND = False +RUNNING = True + + +class TopologyReplication(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating master 1... + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + master2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_2) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, + port=master2.port, + properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, + port=master1.port, + properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Import tests entries into master1 before we initialize master2 + # + ldif_dir = master1.get_ldif_dir() + + import_ldif = ldif_dir + '/rel7.5-entries.ldif' + + # First generate an ldif + try: + ldif = open(import_ldif, 'w') + except IOError as e: + log.fatal('Failed to create test ldif, error: %s - %s' % + (e.errno, e.strerror)) + assert False + + # Create the root node + ldif.write('dn: ' + DEFAULT_SUFFIX + '\n') + ldif.write('objectclass: top\n') + ldif.write('objectclass: domain\n') + ldif.write('dc: example\n') + ldif.write('\n') + + # Create the entries + idx = 0 + while idx < NUM_USERS: + count = str(idx) + ldif.write('dn: uid=master1_entry' + count + ',' + + DEFAULT_SUFFIX + '\n') + ldif.write('objectclass: top\n') + ldif.write('objectclass: person\n') + ldif.write('objectclass: inetorgperson\n') + ldif.write('objectclass: organizationalperson\n') + ldif.write('uid: master1_entry' + count + '\n') + ldif.write('cn: master1 entry' + count + '\n') + ldif.write('givenname: master1 ' + count + '\n') + ldif.write('sn: entry ' + count + '\n') + ldif.write('userpassword: master1_entry' + count + '\n') + ldif.write('description: ' + 'a' * random.randint(1, 1000) + '\n') + ldif.write('\n') + + ldif.write('dn: uid=master2_entry' + count + ',' + + DEFAULT_SUFFIX + '\n') + ldif.write('objectclass: top\n') + ldif.write('objectclass: person\n') + ldif.write('objectclass: inetorgperson\n') + ldif.write('objectclass: organizationalperson\n') + ldif.write('uid: master2_entry' + count + '\n') + ldif.write('cn: master2 entry' + count + '\n') + ldif.write('givenname: master2 ' + count + '\n') + ldif.write('sn: entry ' + count + '\n') + ldif.write('userpassword: master2_entry' + count + '\n') + ldif.write('description: ' + 'a' * random.randint(1, 1000) + '\n') + ldif.write('\n') + idx += 1 + + ldif.close() + + # Now import it + try: + master1.tasks.importLDIF(suffix=DEFAULT_SUFFIX, input_file=import_ldif, + args={TASK_WAIT: True}) + except ValueError: + log.fatal('test_reliab_7.5: Online import failed') + assert False + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Clear out the tmp dir + master1.clearTmpDir(__file__) + + # Delete each instance in the end + def fin(): + master1.delete() + master2.delete() + if ENABLE_VALGRIND: + sbin_dir = get_sbin_dir(prefix=master1.prefix) + valgrind_disable(sbin_dir) + request.addfinalizer(fin) + + return TopologyReplication(master1, master2) + + +class AddDelUsers(threading.Thread): + def __init__(self, inst, masterid): + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + self.id = masterid + + def run(self): + # Add 5000 entries + idx = 0 + RDN = 'uid=add_del_master_' + self.id + '-' + + conn = self.inst.openConnection() + while idx < NUM_USERS: + USER_DN = RDN + str(idx) + ',' + DEFAULT_SUFFIX + try: + conn.add_s(Entry((USER_DN, {'objectclass': + 'top extensibleObject'.split(), + 'uid': 'user' + str(idx), + 'cn': 'g' * random.randint(1, 500) + }))) + except ldap.LDAPError as e: + log.fatal('Add users to master ' + self.id + ' failed (' + + USER_DN + ') error: ' + e.message['desc']) + idx += 1 + conn.close() + + # Delete 5000 entries + conn = self.inst.openConnection() + idx = 0 + while idx < NUM_USERS: + USER_DN = RDN + str(idx) + ',' + DEFAULT_SUFFIX + try: + conn.delete_s(USER_DN) + except ldap.LDAPError as e: + log.fatal('Failed to delete (' + USER_DN + ') on master ' + + self.id + ': error ' + e.message['desc']) + idx += 1 + conn.close() + + +class ModUsers(threading.Thread): + # Do mods and modrdns + def __init__(self, inst, masterid): + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + self.id = masterid + + def run(self): + # Mod existing entries + conn = self.inst.openConnection() + idx = 0 + while idx < NUM_USERS: + USER_DN = ('uid=master' + self.id + '_entry' + str(idx) + ',' + + DEFAULT_SUFFIX) + try: + conn.modify(USER_DN, [(ldap.MOD_REPLACE, + 'givenname', + 'new givenname master1-' + str(idx))]) + except ldap.LDAPError as e: + log.fatal('Failed to modify (' + USER_DN + ') on master ' + + self.id + ': error ' + e.message['desc']) + idx += 1 + conn.close() + + # Modrdn existing entries + conn = self.inst.openConnection() + idx = 0 + while idx < NUM_USERS: + USER_DN = ('uid=master' + self.id + '_entry' + str(idx) + ',' + + DEFAULT_SUFFIX) + NEW_RDN = 'cn=master' + self.id + '_entry' + str(idx) + try: + conn.rename_s(USER_DN, NEW_RDN, delold=1) + except ldap.LDAPError as e: + log.error('Failed to modrdn (' + USER_DN + ') on master ' + + self.id + ': error ' + e.message['desc']) + idx += 1 + conn.close() + + # Undo modrdn to we can rerun this test + conn = self.inst.openConnection() + idx = 0 + while idx < NUM_USERS: + USER_DN = ('cn=master' + self.id + '_entry' + str(idx) + ',' + + DEFAULT_SUFFIX) + NEW_RDN = 'uid=master' + self.id + '_entry' + str(idx) + try: + conn.rename_s(USER_DN, NEW_RDN, delold=1) + except ldap.LDAPError as e: + log.error('Failed to modrdn (' + USER_DN + ') on master ' + + self.id + ': error ' + e.message['desc']) + idx += 1 + conn.close() + + +class DoSearches(threading.Thread): + # Search a master + def __init__(self, inst, masterid): + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + self.id = masterid + + def run(self): + # Equality + conn = self.inst.openConnection() + idx = 0 + while idx < NUM_USERS: + search_filter = ('(|(uid=master' + self.id + '_entry' + str(idx) + + ')(cn=master' + self.id + '_entry' + str(idx) + + '))') + try: + conn.search(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, search_filter) + except ldap.LDAPError as e: + log.fatal('Search Users: Search failed (%s): %s' % + (search_filter, e.message['desc'])) + conn.close() + return + + idx += 1 + conn.close() + + # Substring + conn = self.inst.openConnection() + idx = 0 + while idx < NUM_USERS: + search_filter = ('(|(uid=master' + self.id + '_entry' + str(idx) + + '*)(cn=master' + self.id + '_entry' + str(idx) + + '*))') + try: + conn.search(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, search_filter) + except ldap.LDAPError as e: + log.fatal('Search Users: Search failed (%s): %s' % + (search_filter, e.message['desc'])) + conn.close() + return + + idx += 1 + conn.close() + + +class DoFullSearches(threading.Thread): + # Search a master + def __init__(self, inst): + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + + def run(self): + global RUNNING + conn = self.inst.openConnection() + while RUNNING: + time.sleep(2) + try: + conn.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + 'objectclass=top') + except ldap.LDAPError as e: + log.fatal('Full Search Users: Search failed (%s): %s' % + ('objectclass=*', e.message['desc'])) + conn.close() + assert False + + conn.close() + + +def test_reliab7_5_init(topology): + ''' + Reduce entry cache - to increase the cache churn + + Then process "reliability 15" type tests + ''' + + BACKEND_DN = 'cn=userroot,cn=ldbm database,cn=plugins,cn=config' + + # Update master 1 + try: + topology.master1.modify_s(BACKEND_DN, [(ldap.MOD_REPLACE, + 'nsslapd-cachememsize', + '512000'), + (ldap.MOD_REPLACE, + 'nsslapd-cachesize', + '500')]) + except ldap.LDAPError as e: + log.fatal('Failed to set cache settings: error ' + e.message['desc']) + assert False + + # Update master 2 + try: + topology.master2.modify_s(BACKEND_DN, [(ldap.MOD_REPLACE, + 'nsslapd-cachememsize', + '512000'), + (ldap.MOD_REPLACE, + 'nsslapd-cachesize', + '500')]) + except ldap.LDAPError as e: + log.fatal('Failed to set cache settings: error ' + e.message['desc']) + assert False + + # Restart the masters to pick up the new cache settings + topology.master1.stop(timeout=10) + topology.master2.stop(timeout=10) + + # This is the time to enable valgrind (if enabled) + if ENABLE_VALGRIND: + sbin_dir = get_sbin_dir(prefix=topology.master1.prefix) + valgrind_enable(sbin_dir) + + topology.master1.start(timeout=30) + topology.master2.start(timeout=30) + + +def test_reliab7_5_run(topology): + ''' + Starting issuing adds, deletes, mods, modrdns, and searches + ''' + global RUNNING + count = 1 + RUNNING = True + + # Start some searches to run through the entire stress test + fullSearch1 = DoFullSearches(topology.master1) + fullSearch1.start() + fullSearch2 = DoFullSearches(topology.master2) + fullSearch2.start() + + while count <= MAX_PASSES: + log.info('################## Reliabilty 7.5 Pass: %d' % count) + + # Master 1 + add_del_users1 = AddDelUsers(topology.master1, '1') + add_del_users1.start() + mod_users1 = ModUsers(topology.master1, '1') + mod_users1.start() + search1 = DoSearches(topology.master1, '1') + search1.start() + + # Master 2 + add_del_users2 = AddDelUsers(topology.master2, '2') + add_del_users2.start() + mod_users2 = ModUsers(topology.master2, '2') + mod_users2.start() + search2 = DoSearches(topology.master2, '2') + search2.start() + + # Search the masters + search3 = DoSearches(topology.master1, '1') + search3.start() + search4 = DoSearches(topology.master2, '2') + search4.start() + + # Wait for threads to finish + log.info('################## Waiting for threads to finish...') + add_del_users1.join() + mod_users1.join() + add_del_users2.join() + mod_users2.join() + log.info('################## Update threads finished.') + search1.join() + search2.join() + search3.join() + search4.join() + log.info('################## All threads finished.') + + # Allow some time for replication to catch up before firing + # off the next round of updates + time.sleep(5) + count += 1 + + # + # Wait for replication to converge + # + if CHECK_CONVERGENCE: + # Add an entry to each master, and wait for it to replicate + MASTER1_DN = 'uid=rel7.5-master1,' + DEFAULT_SUFFIX + MASTER2_DN = 'uid=rel7.5-master2,' + DEFAULT_SUFFIX + + # Master 1 + try: + topology.master1.add_s(Entry((MASTER1_DN, {'objectclass': + ['top', + 'extensibleObject'], + 'sn': '1', + 'cn': 'user 1', + 'uid': 'rel7.5-master1', + 'userpassword': + PASSWORD}))) + except ldap.LDAPError as e: + log.fatal('Failed to add replication test entry ' + MASTER1_DN + + ': error ' + e.message['desc']) + assert False + + log.info('################## Waiting for master 2 to converge...') + + while True: + entry = None + try: + entry = topology.master2.search_s(MASTER1_DN, + ldap.SCOPE_BASE, + 'objectclass=*') + except ldap.NO_SUCH_OBJECT: + pass + except ldap.LDAPError as e: + log.fatal('Search Users: Search failed (%s): %s' % + (MASTER1_DN, e.message['desc'])) + assert False + if entry: + break + time.sleep(5) + + log.info('################## Master 2 converged.') + + # Master 2 + try: + topology.master2.add_s( + Entry((MASTER2_DN, {'objectclass': ['top', + 'extensibleObject'], + 'sn': '1', + 'cn': 'user 1', + 'uid': 'rel7.5-master2', + 'userpassword': PASSWORD}))) + except ldap.LDAPError as e: + log.fatal('Failed to add replication test entry ' + MASTER1_DN + + ': error ' + e.message['desc']) + assert False + + log.info('################## Waiting for master 1 to converge...') + while True: + entry = None + try: + entry = topology.master1.search_s(MASTER2_DN, + ldap.SCOPE_BASE, + 'objectclass=*') + except ldap.NO_SUCH_OBJECT: + pass + except ldap.LDAPError as e: + log.fatal('Search Users: Search failed (%s): %s' % + (MASTER2_DN, e.message['desc'])) + assert False + if entry: + break + time.sleep(5) + + log.info('################## Master 1 converged.') + + # Stop the full searches + RUNNING = False + fullSearch1.join() + fullSearch2.join() + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/stress/reliabilty/reliab_conn_test.py b/dirsrvtests/tests/stress/reliabilty/reliab_conn_test.py new file mode 100644 index 0000000..d3ee773 --- /dev/null +++ b/dirsrvtests/tests/stress/reliabilty/reliab_conn_test.py @@ -0,0 +1,289 @@ +import os +import sys +import time +import ldap +import logging +import pytest +import signal +import threading +from lib389 import DirSrv +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +DEBUGGING = False + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + +MAX_CONNS = 10000000 +MAX_THREADS = 20 +STOP = False +HOSTNAME = DirSrvTools.getLocalhost() +PORT = 389 + + +class TopologyStandalone(object): + """The DS Topology Class""" + def __init__(self, standalone): + """Init""" + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + """Create DS Deployment""" + + # Creating standalone instance ... + if DEBUGGING: + standalone = DirSrv(verbose=True) + else: + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + """If we are debugging just stop the instances, otherwise remove them + """ + if DEBUGGING: + standalone.stop() + else: + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def signalHandler(signal, frame): + """ + handle control-C cleanly + """ + global STOP + STOP = True + sys.exit(0) + + +def init(inst): + """Set the idle timeout, and add sample entries + """ + + try: + inst.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, + 'nsslapd-idletimeout', + '5')]) + except ldap.LDAPError as e: + log.fatal('Failed to set idletimeout: ' + str(e)) + assert False + + try: + inst.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, + 'nsslapd-enable-nunc-stans', + 'on')]) + except ldap.LDAPError as e: + log.fatal('Failed to enable nunc-stans: ' + str(e)) + assert False + + for idx in range(0, 9): + user_dn = 'uid=entry%d,%s' % (idx, DEFAULT_SUFFIX) + try: + inst.add_s(Entry((user_dn, + {'objectclass': ['top', 'extensibleObject'], + 'uid': 'entry%d' % idx, + 'cn': 'entry%d' % idx, + 'userpassword': 'password'}))) + except ldap.LDAPError as e: + log.fatal('Failed to add user entry (%s): %s' % (user_dn, str(e))) + assert False + + inst.restart() + + +class BindOnlyConn(threading.Thread): + """This class opens and closes connections + """ + def __init__(self, inst): + """Initialize the thread class with the server instance info""" + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + + def run(self): + """Keep opening and closing connections""" + idx = 0 + err_count = 0 + global STOP + while idx < MAX_CONNS and not STOP: + try: + conn = self.inst.openConnection() + conn.unbind_s() + time.sleep(.2) + err_count = 0 + except ldap.LDAPError as e: + err_count += 1 + if err_count > 3: + log.error('BindOnlyConn exiting thread: %s' % + (str(e))) + return + time.sleep(.4) + idx += 1 + + +class IdleConn(threading.Thread): + """This class opens and closes connections + """ + def __init__(self, inst): + """Initialize the thread class withte server isntance info""" + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + + def run(self): + """Assume idleTimeout is set to less than 10 seconds + """ + idx = 0 + err_count = 0 + global STOP + while idx < (MAX_CONNS / 10) and not STOP: + try: + conn = self.inst.openConnection() + conn.simple_bind_s('uid=entry0,dc=example,dc=com', 'password') + conn.search_s('dc=example,dc=com', ldap.SCOPE_SUBTREE, + 'uid=*') + time.sleep(10) + conn.search_s('dc=example,dc=com', ldap.SCOPE_SUBTREE, + 'cn=*') + conn.unbind_s() + time.sleep(.2) + err_count = 0 + except ldap.LDAPError as e: + err_count += 1 + if err_count > 3: + log.error('IdleConn exiting thread: %s' % + (str(e))) + return + time.sleep(.4) + idx += 1 + + +class LongConn(threading.Thread): + """This class opens and closes connections to a specified server + """ + def __init__(self, inst): + """Initialize the thread class with the server instance info""" + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + + def run(self): + """Assume idleTimeout is set to less than 10 seconds + """ + idx = 0 + err_count = 0 + global STOP + while idx < MAX_CONNS and not STOP: + try: + conn = self.inst.openConnection() + conn.search_s('dc=example,dc=com', ldap.SCOPE_SUBTREE, + 'objectclass=*') + conn.search_s('dc=example,dc=com', ldap.SCOPE_SUBTREE, + 'uid=mark') + conn.search_s('dc=example,dc=com', ldap.SCOPE_SUBTREE, + 'cn=*') + conn.search_s('', ldap.SCOPE_BASE, 'objectclass=*') + conn.unbind_s() + time.sleep(.2) + err_count = 0 + except ldap.LDAPError as e: + err_count += 1 + if err_count > 3: + log.error('LongConn search exiting thread: %s' % + (str(e))) + return + time.sleep(.4) + idx += 1 + + +def test_connection_load(topology): + """Send the server a variety of connections using many threads: + - Open, Bind, Close + - Open, Bind, Search, wait to trigger idletimeout, Search, Close + - Open, Bind, Search, Search, Search, Close + """ + + # setup the control-C signal handler + signal.signal(signal.SIGINT, signalHandler) + + # Set the config and add sample entries + log.info('Initializing setup...') + init(topology.standalone) + + # + # Bind/Unbind Conn Threads + # + log.info('Launching Bind-Only Connection threads...') + threads = [] + idx = 0 + while idx < MAX_THREADS: + threads.append(BindOnlyConn(topology.standalone)) + idx += 1 + for thread in threads: + thread.start() + time.sleep(0.1) + + # + # Idle Conn Threads + # + log.info('Launching Idle Connection threads...') + idx = 0 + idle_threads = [] + while idx < MAX_THREADS: + idle_threads.append(IdleConn(topology.standalone)) + idx += 1 + for thread in idle_threads: + thread.start() + time.sleep(0.1) + + # + # Long Conn Threads + # + log.info('Launching Long Connection threads...') + idx = 0 + long_threads = [] + while idx < MAX_THREADS: + long_threads.append(LongConn(topology.standalone)) + idx += 1 + for thread in long_threads: + thread.start() + time.sleep(0.1) + + # + # Now wait for all the threads to complete + # + log.info('Waiting for threads to finish...') + while threading.active_count() > 0: + time.sleep(1) + + log.info('Done') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/stress/replication/mmr_01_4m-2h-4c_test.py b/dirsrvtests/tests/stress/replication/mmr_01_4m-2h-4c_test.py new file mode 100644 index 0000000..2ac4723 --- /dev/null +++ b/dirsrvtests/tests/stress/replication/mmr_01_4m-2h-4c_test.py @@ -0,0 +1,969 @@ +import os +import sys +import time +import datetime +import ldap +import logging +import pytest +import threading +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +from lib389.repltools import ReplTools + +logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + +DEBUGGING = False +ADD_DEL_COUNT = 5000 +MAX_LOOPS = 5 +TEST_CONVERGE_LATENCY = True +CONVERGENCE_TIMEOUT = '60' +master_list = [] +hub_list = [] +con_list = [] +TEST_START = time.time() + +LAST_DN_IDX = ADD_DEL_COUNT - 1 +LAST_DN_M1 = 'DEL dn="uid=master_1-%d,%s' % (LAST_DN_IDX, DEFAULT_SUFFIX) +LAST_DN_M2 = 'DEL dn="uid=master_2-%d,%s' % (LAST_DN_IDX, DEFAULT_SUFFIX) +LAST_DN_M3 = 'DEL dn="uid=master_3-%d,%s' % (LAST_DN_IDX, DEFAULT_SUFFIX) +LAST_DN_M4 = 'DEL dn="uid=master_4-%d,%s' % (LAST_DN_IDX, DEFAULT_SUFFIX) + + +class TopologyReplication(object): + """The Replication Topology Class""" + def __init__(self, master1, master2, master3, master4, hub1, hub2, + consumer1, consumer2, consumer3, consumer4): + """Init""" + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + master3.open() + self.master3 = master3 + master4.open() + self.master4 = master4 + hub1.open() + self.hub1 = hub1 + hub2.open() + self.hub2 = hub2 + consumer1.open() + self.consumer1 = consumer1 + consumer2.open() + self.consumer2 = consumer2 + consumer3.open() + self.consumer3 = consumer3 + consumer4.open() + self.consumer4 = consumer4 + master_list.append(master1.serverid) + master_list.append(master2.serverid) + master_list.append(master3.serverid) + master_list.append(master4.serverid) + hub_list.append(hub1.serverid) + hub_list.append(hub2.serverid) + con_list.append(consumer1.serverid) + con_list.append(consumer2.serverid) + con_list.append(consumer3.serverid) + con_list.append(consumer4.serverid) + + +@pytest.fixture(scope="module") +def topology(request): + """Create Replication Deployment""" + + # Creating master 1... + if DEBUGGING: + master1 = DirSrv(verbose=True) + else: + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + if DEBUGGING: + master2 = DirSrv(verbose=True) + else: + master2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_2) + + # Creating master 3... + if DEBUGGING: + master3 = DirSrv(verbose=True) + else: + master3 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_3 + args_instance[SER_PORT] = PORT_MASTER_3 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_3 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master3.allocate(args_master) + instance_master3 = master3.exists() + if instance_master3: + master3.delete() + master3.create() + master3.open() + master3.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_3) + + # Creating master 4... + if DEBUGGING: + master4 = DirSrv(verbose=True) + else: + master4 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_4 + args_instance[SER_PORT] = PORT_MASTER_4 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_4 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master4.allocate(args_master) + instance_master4 = master4.exists() + if instance_master4: + master4.delete() + master4.create() + master4.open() + master4.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_4) + + # Creating hub 1... + if DEBUGGING: + hub1 = DirSrv(verbose=True) + else: + hub1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_HUB_1 + args_instance[SER_PORT] = PORT_HUB_1 + args_instance[SER_SERVERID_PROP] = SERVERID_HUB_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_hub = args_instance.copy() + hub1.allocate(args_hub) + instance_hub1 = hub1.exists() + if instance_hub1: + hub1.delete() + hub1.create() + hub1.open() + hub1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_HUB, + replicaId=REPLICAID_HUB_1) + + # Creating hub 2... + if DEBUGGING: + hub2 = DirSrv(verbose=True) + else: + hub2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_HUB_2 + args_instance[SER_PORT] = PORT_HUB_2 + args_instance[SER_SERVERID_PROP] = SERVERID_HUB_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_hub = args_instance.copy() + hub2.allocate(args_hub) + instance_hub2 = hub2.exists() + if instance_hub2: + hub2.delete() + hub2.create() + hub2.open() + hub2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_HUB, + replicaId=REPLICAID_HUB_2) + + # Creating consumer 1... + if DEBUGGING: + consumer1 = DirSrv(verbose=True) + else: + consumer1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_CONSUMER_1 + args_instance[SER_PORT] = PORT_CONSUMER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_CONSUMER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_consumer = args_instance.copy() + consumer1.allocate(args_consumer) + instance_consumer1 = consumer1.exists() + if instance_consumer1: + consumer1.delete() + consumer1.create() + consumer1.open() + consumer1.replica.enableReplication(suffix=SUFFIX, + role=REPLICAROLE_CONSUMER, + replicaId=CONSUMER_REPLICAID) + + # Creating consumer 2... + if DEBUGGING: + consumer2 = DirSrv(verbose=True) + else: + consumer2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_CONSUMER_2 + args_instance[SER_PORT] = PORT_CONSUMER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_CONSUMER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_consumer = args_instance.copy() + consumer2.allocate(args_consumer) + instance_consumer2 = consumer2.exists() + if instance_consumer2: + consumer2.delete() + consumer2.create() + consumer2.open() + consumer2.replica.enableReplication(suffix=SUFFIX, + role=REPLICAROLE_CONSUMER, + replicaId=CONSUMER_REPLICAID) + + # Creating consumer 3... + if DEBUGGING: + consumer3 = DirSrv(verbose=True) + else: + consumer3 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_CONSUMER_3 + args_instance[SER_PORT] = PORT_CONSUMER_3 + args_instance[SER_SERVERID_PROP] = SERVERID_CONSUMER_3 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_consumer = args_instance.copy() + consumer3.allocate(args_consumer) + instance_consumer3 = consumer3.exists() + if instance_consumer3: + consumer3.delete() + consumer3.create() + consumer3.open() + consumer3.replica.enableReplication(suffix=SUFFIX, + role=REPLICAROLE_CONSUMER, + replicaId=CONSUMER_REPLICAID) + + # Creating consumer 4... + if DEBUGGING: + consumer4 = DirSrv(verbose=True) + else: + consumer4 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_CONSUMER_4 + args_instance[SER_PORT] = PORT_CONSUMER_4 + args_instance[SER_SERVERID_PROP] = SERVERID_CONSUMER_4 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_consumer = args_instance.copy() + consumer4.allocate(args_consumer) + instance_consumer4 = consumer4.exists() + if instance_consumer4: + consumer4.delete() + consumer4.create() + consumer4.open() + consumer4.replica.enableReplication(suffix=SUFFIX, + role=REPLICAROLE_CONSUMER, + replicaId=CONSUMER_REPLICAID) + + # + # Create all the agreements + # + + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: 'meTo_' + master2.host + ':' + str(master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, + port=master2.port, + properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 1 to master 3 + properties = {RA_NAME: 'meTo_' + master3.host + ':' + str(master3.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m3_agmt = master1.agreement.create(suffix=SUFFIX, host=master3.host, + port=master3.port, + properties=properties) + if not m1_m3_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m3_agmt) + + # Creating agreement from master 1 to master 4 + properties = {RA_NAME: 'meTo_' + master4.host + ':' + str(master4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m4_agmt = master1.agreement.create(suffix=SUFFIX, host=master4.host, + port=master4.port, + properties=properties) + if not m1_m4_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m4_agmt) + + # Creating agreement from master 1 to hub 1 + properties = {RA_NAME: 'meTo_' + hub1.host + ':' + str(hub1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_h1_agmt = master1.agreement.create(suffix=SUFFIX, host=hub1.host, + port=hub1.port, + properties=properties) + if not m1_h1_agmt: + log.fatal("Fail to create a master -> hub replica agreement") + sys.exit(1) + log.debug("%s created" % m1_h1_agmt) + + # Creating agreement from master 1 to hub 2 + properties = {RA_NAME: 'meTo_' + hub2.host + ':' + str(hub2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_h2_agmt = master1.agreement.create(suffix=SUFFIX, host=hub2.host, + port=hub2.port, + properties=properties) + if not m1_h2_agmt: + log.fatal("Fail to create a master -> hub replica agreement") + sys.exit(1) + log.debug("%s created" % m1_h2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: 'meTo_' + master1.host + ':' + str(master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, + port=master1.port, + properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Creating agreement from master 2 to master 3 + properties = {RA_NAME: 'meTo_' + master3.host + ':' + str(master3.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m3_agmt = master2.agreement.create(suffix=SUFFIX, host=master3.host, + port=master3.port, + properties=properties) + if not m2_m3_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m3_agmt) + + # Creating agreement from master 2 to master 4 + properties = {RA_NAME: 'meTo_' + master4.host + ':' + str(master4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m4_agmt = master2.agreement.create(suffix=SUFFIX, host=master4.host, + port=master4.port, + properties=properties) + if not m2_m4_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m4_agmt) + + # Creating agreement from master 2 to hub 1 + properties = {RA_NAME: 'meTo_' + hub1.host + ':' + str(hub1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_h1_agmt = master2.agreement.create(suffix=SUFFIX, host=hub1.host, + port=hub1.port, + properties=properties) + if not m2_h1_agmt: + log.fatal("Fail to create a master -> hub replica agreement") + sys.exit(1) + log.debug("%s created" % m2_h1_agmt) + + # Creating agreement from master 2 to hub 2 + properties = {RA_NAME: 'meTo_' + hub2.host + ':' + str(hub2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_h2_agmt = master2.agreement.create(suffix=SUFFIX, host=hub2.host, + port=hub2.port, + properties=properties) + if not m2_h2_agmt: + log.fatal("Fail to create a master -> hub replica agreement") + sys.exit(1) + log.debug("%s created" % m2_h2_agmt) + + # Creating agreement from master 3 to master 1 + properties = {RA_NAME: 'meTo_' + master1.host + ':' + str(master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_m1_agmt = master3.agreement.create(suffix=SUFFIX, host=master1.host, + port=master1.port, + properties=properties) + if not m3_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m3_m1_agmt) + + # Creating agreement from master 3 to master 2 + properties = {RA_NAME: 'meTo_' + master2.host + ':' + str(master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_m2_agmt = master3.agreement.create(suffix=SUFFIX, host=master2.host, + port=master2.port, + properties=properties) + if not m3_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m3_m2_agmt) + + # Creating agreement from master 3 to master 4 + properties = {RA_NAME: 'meTo_' + master4.host + ':' + str(master4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_m4_agmt = master3.agreement.create(suffix=SUFFIX, host=master4.host, + port=master4.port, + properties=properties) + if not m3_m4_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m3_m4_agmt) + + # Creating agreement from master 3 to hub 1 + properties = {RA_NAME: 'meTo_' + hub1.host + ':' + str(hub1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_h1_agmt = master3.agreement.create(suffix=SUFFIX, host=hub1.host, + port=hub1.port, + properties=properties) + if not m3_h1_agmt: + log.fatal("Fail to create a master -> hub replica agreement") + sys.exit(1) + log.debug("%s created" % m3_h1_agmt) + + # Creating agreement from master 3 to hub 2 + properties = {RA_NAME: 'meTo_' + hub2.host + ':' + str(hub2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_h2_agmt = master3.agreement.create(suffix=SUFFIX, host=hub2.host, + port=hub2.port, + properties=properties) + if not m3_h2_agmt: + log.fatal("Fail to create a master -> hub replica agreement") + sys.exit(1) + log.debug("%s created" % m3_h2_agmt) + + # Creating agreement from master 4 to master 1 + properties = {RA_NAME: 'meTo_' + master1.host + ':' + str(master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_m1_agmt = master4.agreement.create(suffix=SUFFIX, host=master1.host, + port=master1.port, + properties=properties) + if not m4_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m4_m1_agmt) + + # Creating agreement from master 4 to master 2 + properties = {RA_NAME: 'meTo_' + master2.host + ':' + str(master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_m2_agmt = master4.agreement.create(suffix=SUFFIX, host=master2.host, + port=master2.port, + properties=properties) + if not m4_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m4_m2_agmt) + + # Creating agreement from master 4 to master 3 + properties = {RA_NAME: 'meTo_' + master3.host + ':' + str(master3.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_m3_agmt = master4.agreement.create(suffix=SUFFIX, host=master3.host, + port=master3.port, + properties=properties) + if not m4_m3_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m4_m3_agmt) + + # Creating agreement from master 4 to hub 1 + properties = {RA_NAME: 'meTo_' + hub1.host + ':' + str(hub1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_h1_agmt = master4.agreement.create(suffix=SUFFIX, host=hub1.host, + port=hub1.port, + properties=properties) + if not m4_h1_agmt: + log.fatal("Fail to create a master -> hub replica agreement") + sys.exit(1) + log.debug("%s created" % m4_h1_agmt) + + # Creating agreement from master 4 to hub 2 + properties = {RA_NAME: 'meTo_' + hub2.host + ':' + str(hub2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_h2_agmt = master4.agreement.create(suffix=SUFFIX, host=hub2.host, + port=hub2.port, + properties=properties) + if not m4_h2_agmt: + log.fatal("Fail to create a master -> hub replica agreement") + sys.exit(1) + log.debug("%s created" % m4_h2_agmt) + + # Creating agreement from hub 1 to consumer 1 + properties = {RA_NAME: 'me2_' + consumer1.host + ':' + str(consumer1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + h1_c1_agmt = hub1.agreement.create(suffix=SUFFIX, host=consumer1.host, + port=consumer1.port, + properties=properties) + if not h1_c1_agmt: + log.fatal("Fail to create a hub -> consumer replica agreement") + sys.exit(1) + log.debug("%s created" % h1_c1_agmt) + + # Creating agreement from hub 1 to consumer 2 + properties = {RA_NAME: 'me2_' + consumer2.host + ':' + str(consumer2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + h1_c2_agmt = hub1.agreement.create(suffix=SUFFIX, host=consumer2.host, + port=consumer2.port, + properties=properties) + if not h1_c2_agmt: + log.fatal("Fail to create a hub -> consumer replica agreement") + sys.exit(1) + log.debug("%s created" % h1_c2_agmt) + + # Creating agreement from hub 1 to consumer 3 + properties = {RA_NAME: 'me2_' + consumer3.host + ':' + str(consumer3.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + h1_c3_agmt = hub1.agreement.create(suffix=SUFFIX, host=consumer3.host, + port=consumer3.port, + properties=properties) + if not h1_c3_agmt: + log.fatal("Fail to create a hub -> consumer replica agreement") + sys.exit(1) + log.debug("%s created" % h1_c3_agmt) + + # Creating agreement from hub 1 to consumer 4 + properties = {RA_NAME: 'me2_' + consumer4.host + ':' + str(consumer4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + h1_c4_agmt = hub1.agreement.create(suffix=SUFFIX, host=consumer4.host, + port=consumer4.port, + properties=properties) + if not h1_c4_agmt: + log.fatal("Fail to create a hub -> consumer replica agreement") + sys.exit(1) + log.debug("%s created" % h1_c4_agmt) + + # Creating agreement from hub 2 to consumer 1 + properties = {RA_NAME: 'me2_' + consumer1.host + ':' + str(consumer1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + h2_c1_agmt = hub2.agreement.create(suffix=SUFFIX, host=consumer1.host, + port=consumer1.port, + properties=properties) + if not h2_c1_agmt: + log.fatal("Fail to create a hub -> consumer replica agreement") + sys.exit(1) + log.debug("%s created" % h2_c1_agmt) + + # Creating agreement from hub 2 to consumer 2 + properties = {RA_NAME: 'me2_' + consumer2.host + ':' + str(consumer2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + h2_c2_agmt = hub2.agreement.create(suffix=SUFFIX, host=consumer2.host, + port=consumer2.port, + properties=properties) + if not h2_c2_agmt: + log.fatal("Fail to create a hub -> consumer replica agreement") + sys.exit(1) + log.debug("%s created" % h2_c2_agmt) + + # Creating agreement from hub 2 to consumer 3 + properties = {RA_NAME: 'me2_' + consumer3.host + ':' + str(consumer3.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + h2_c3_agmt = hub2.agreement.create(suffix=SUFFIX, host=consumer3.host, + port=consumer3.port, + properties=properties) + if not h2_c3_agmt: + log.fatal("Fail to create a hub -> consumer replica agreement") + sys.exit(1) + log.debug("%s created" % h2_c3_agmt) + + # Creating agreement from hub 2 to consumer 4 + properties = {RA_NAME: 'me2_' + consumer4.host + ':' + str(consumer4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + h2_c4_agmt = hub2.agreement.create(suffix=SUFFIX, host=consumer4.host, + port=consumer4.port, + properties=properties) + if not h2_c4_agmt: + log.fatal("Fail to create a hub -> consumer replica agreement") + sys.exit(1) + log.debug("%s created" % h2_c4_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + master1.agreement.init(SUFFIX, HOST_MASTER_3, PORT_MASTER_3) + master1.waitForReplInit(m1_m3_agmt) + master1.agreement.init(SUFFIX, HOST_MASTER_4, PORT_MASTER_4) + master1.waitForReplInit(m1_m4_agmt) + master1.agreement.init(SUFFIX, HOST_HUB_1, PORT_HUB_1) + master1.waitForReplInit(m1_h1_agmt) + hub1.agreement.init(SUFFIX, HOST_CONSUMER_1, PORT_CONSUMER_1) + hub1.waitForReplInit(h1_c1_agmt) + hub1.agreement.init(SUFFIX, HOST_CONSUMER_2, PORT_CONSUMER_2) + hub1.waitForReplInit(h1_c2_agmt) + hub1.agreement.init(SUFFIX, HOST_CONSUMER_3, PORT_CONSUMER_3) + hub1.waitForReplInit(h1_c3_agmt) + hub1.agreement.init(SUFFIX, HOST_CONSUMER_4, PORT_CONSUMER_4) + hub1.waitForReplInit(h1_c4_agmt) + master1.agreement.init(SUFFIX, HOST_HUB_2, PORT_HUB_2) + master1.waitForReplInit(m1_h2_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, consumer1): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + """If we are debugging just stop the instances, otherwise remove + them + """ + if DEBUGGING: + master1.stop() + master2.stop() + master3.stop() + master4.stop() + hub1.stop() + hub2.stop() + consumer1.stop() + consumer2.stop() + consumer3.stop() + consumer4.stop() + else: + master1.delete() + master2.delete() + master3.delete() + master4.delete() + hub1.delete() + hub2.delete() + consumer1.delete() + consumer2.delete() + consumer3.delete() + consumer4.delete() + request.addfinalizer(fin) + + return TopologyReplication(master1, master2, master3, master4, hub1, hub2, + consumer1, consumer2, consumer3, consumer4) + + +class AddDelUsers(threading.Thread): + """Add's and delets 50000 entries""" + def __init__(self, inst): + """ + Initialize the thread + """ + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + self.name = inst.serverid + + def run(self): + """ + Start adding users + """ + idx = 0 + + log.info('AddDelUsers (%s) Adding and deleting %d entries...' % + (self.name, ADD_DEL_COUNT)) + + while idx < ADD_DEL_COUNT: + RDN_VAL = ('uid=%s-%d' % (self.name, idx)) + USER_DN = ('%s,%s' % (RDN_VAL, DEFAULT_SUFFIX)) + + try: + self.inst.add_s(Entry((USER_DN, {'objectclass': + 'top extensibleObject'.split(), + 'uid': RDN_VAL}))) + except ldap.LDAPError as e: + log.fatal('AddDelUsers (%s): failed to add (%s) error: %s' % + (self.name, USER_DN, str(e))) + assert False + + try: + self.inst.delete_s(USER_DN) + except ldap.LDAPError as e: + log.fatal('AddDelUsers (%s): failed to delete (%s) error: %s' % + (self.name, USER_DN, str(e))) + assert False + + idx += 1 + + log.info('AddDelUsers (%s) - Finished at: %s' % + (self.name, getDateTime())) + + +def measureConvergence(topology): + """Find and measure the convergence of entries from each master + """ + + replicas = [topology.master1, topology.master2, topology.master3, + topology.master4, topology.hub1, topology.hub2, + topology.consumer1, topology.consumer2, topology.consumer3, + topology.consumer4] + + if ADD_DEL_COUNT > 10: + interval = int(ADD_DEL_COUNT / 10) + else: + interval = 1 + + for master in [('1', topology.master1), + ('2', topology.master2), + ('3', topology.master3), + ('4', topology.master4)]: + # Start with the first entry + entries = ['ADD dn="uid=master_%s-0,%s' % + (master[0], DEFAULT_SUFFIX)] + + # Add incremental entries to the list + idx = interval + while idx < ADD_DEL_COUNT: + entries.append('ADD dn="uid=master_%s-%d,%s' % + (master[0], idx, DEFAULT_SUFFIX)) + idx += interval + + # Add the last entry to the list (if it was not already added) + if idx != (ADD_DEL_COUNT - 1): + entries.append('ADD dn="uid=master_%s-%d,%s' % + (master[0], (ADD_DEL_COUNT - 1), + DEFAULT_SUFFIX)) + + ReplTools.replConvReport(DEFAULT_SUFFIX, entries, master[1], replicas) + + +def test_MMR_Integrity(topology): + """Apply load to 4 masters at the same time. Perform adds and deletes. + If any updates are missed we will see an error 32 in the access logs or + we will have entries left over once the test completes. + """ + loop = 0 + + ALL_REPLICAS = [topology.master1, topology.master2, topology.master3, + topology.master4, + topology.hub1, topology.hub2, + topology.consumer1, topology.consumer2, + topology.consumer3, topology.consumer4] + + if TEST_CONVERGE_LATENCY: + try: + for inst in ALL_REPLICAS: + replica = inst.replicas.get(DEFAULT_SUFFIX) + replica.set('nsds5ReplicaReleaseTimeout', CONVERGENCE_TIMEOUT) + except ldap.LDAPError as e: + log.fatal('Failed to set replicas release timeout - error: %s' % + (str(e))) + assert False + + if DEBUGGING: + # Enable Repl logging, and increase the max logs + try: + for inst in ALL_REPLICAS: + inst.enableReplLogging() + inst.modify_s("cn=config", [(ldap.MOD_REPLACE, + 'nsslapd-errorlog-maxlogsperdir', + '5')]) + except ldap.LDAPError as e: + log.fatal('Failed to set max logs - error: %s' % (str(e))) + assert False + + while loop < MAX_LOOPS: + # Remove the current logs so we have a clean set of logs to check. + log.info('Pass %d...' % (loop + 1)) + log.info("Removing logs...") + for inst in ALL_REPLICAS: + inst.deleteAllLogs() + + # Fire off 4 threads to apply the load + log.info("Start adding/deleting: " + getDateTime()) + startTime = time.time() + add_del_m1 = AddDelUsers(topology.master1) + add_del_m1.start() + add_del_m2 = AddDelUsers(topology.master2) + add_del_m2.start() + add_del_m3 = AddDelUsers(topology.master3) + add_del_m3.start() + add_del_m4 = AddDelUsers(topology.master4) + add_del_m4.start() + + # Wait for threads to finish sending their updates + add_del_m1.join() + add_del_m2.join() + add_del_m3.join() + add_del_m4.join() + log.info("Finished adding/deleting entries: " + getDateTime()) + + # + # Loop checking for error 32's, and for convergence to complete + # + log.info("Waiting for replication to converge...") + while True: + # First check for error 32's + for inst in ALL_REPLICAS: + if inst.searchAccessLog(" err=32 "): + log.fatal('An add was missed on: ' + inst.serverid) + assert False + + # Next check to see if the last update is in the access log + converged = True + for inst in ALL_REPLICAS: + if not inst.searchAccessLog(LAST_DN_M1) or \ + not inst.searchAccessLog(LAST_DN_M2) or \ + not inst.searchAccessLog(LAST_DN_M3) or \ + not inst.searchAccessLog(LAST_DN_M4): + converged = False + break + + if converged: + elapsed_tm = int(time.time() - startTime) + convtime = str(datetime.timedelta(seconds=elapsed_tm)) + log.info('Replication converged at: ' + getDateTime() + + ' - Elapsed Time: ' + convtime) + break + else: + # Check if replication is idle + replicas = [topology.master1, topology.master2, + topology.master3, topology.master4, + topology.hub1, topology.hub2] + if ReplTools.replIdle(replicas, DEFAULT_SUFFIX): + # Replication is idle - wait 30 secs for access log buffer + time.sleep(30) + + # Now check the access log again... + converged = True + for inst in ALL_REPLICAS: + if not inst.searchAccessLog(LAST_DN_M1) or \ + not inst.searchAccessLog(LAST_DN_M2) or \ + not inst.searchAccessLog(LAST_DN_M3) or \ + not inst.searchAccessLog(LAST_DN_M4): + converged = False + break + + if converged: + elapsed_tm = int(time.time() - startTime) + convtime = str(datetime.timedelta(seconds=elapsed_tm)) + log.info('Replication converged at: ' + getDateTime() + + ' - Elapsed Time: ' + convtime) + break + else: + log.fatal('Stopping replication check: ' + + getDateTime()) + log.fatal('Failure: Replication is complete, but we ' + + 'never converged.') + assert False + + # Sleep a bit before the next pass + time.sleep(3) + + # + # Finally check the CSN's + # + log.info("Check the CSN's...") + if not ReplTools.checkCSNs(ALL_REPLICAS): + assert False + log.info("All CSN's present and accounted for.") + + # + # Print the convergence report + # + log.info('Measuring convergence...') + measureConvergence(topology) + + # + # Test complete + # + log.info('No lingering entries.') + log.info('Pass %d complete.' % (loop + 1)) + elapsed_tm = int(time.time() - TEST_START) + convtime = str(datetime.timedelta(seconds=elapsed_tm)) + log.info('Entire test ran for: ' + convtime) + + loop += 1 + + log.info('Test PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/stress/replication/mmr_01_4m_test.py b/dirsrvtests/tests/stress/replication/mmr_01_4m_test.py new file mode 100644 index 0000000..b7d677e --- /dev/null +++ b/dirsrvtests/tests/stress/replication/mmr_01_4m_test.py @@ -0,0 +1,572 @@ +import os +import sys +import time +import datetime +import ldap +import logging +import pytest +import threading +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +from lib389.repltools import ReplTools + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +DEBUGGING = False +ADD_DEL_COUNT = 5000 +MAX_LOOPS = 5 +TEST_CONVERGE_LATENCY = True +CONVERGENCE_TIMEOUT = '60' +master_list = [] +hub_list = [] +con_list = [] +TEST_START = time.time() + +LAST_DN_IDX = ADD_DEL_COUNT - 1 +LAST_DN_M1 = 'DEL dn="uid=master_1-%d,%s' % (LAST_DN_IDX, DEFAULT_SUFFIX) +LAST_DN_M2 = 'DEL dn="uid=master_2-%d,%s' % (LAST_DN_IDX, DEFAULT_SUFFIX) +LAST_DN_M3 = 'DEL dn="uid=master_3-%d,%s' % (LAST_DN_IDX, DEFAULT_SUFFIX) +LAST_DN_M4 = 'DEL dn="uid=master_4-%d,%s' % (LAST_DN_IDX, DEFAULT_SUFFIX) + + +class TopologyReplication(object): + """The Replication Topology Class""" + def __init__(self, master1, master2, master3, master4): + """Init""" + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + master3.open() + self.master3 = master3 + master4.open() + self.master4 = master4 + + +@pytest.fixture(scope="module") +def topology(request): + """Create Replication Deployment""" + + # Creating master 1... + if DEBUGGING: + master1 = DirSrv(verbose=True) + else: + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + if DEBUGGING: + master2 = DirSrv(verbose=True) + else: + master2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_2) + + # Creating master 3... + if DEBUGGING: + master3 = DirSrv(verbose=True) + else: + master3 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_3 + args_instance[SER_PORT] = PORT_MASTER_3 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_3 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master3.allocate(args_master) + instance_master3 = master3.exists() + if instance_master3: + master3.delete() + master3.create() + master3.open() + master3.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_3) + + # Creating master 4... + if DEBUGGING: + master4 = DirSrv(verbose=True) + else: + master4 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_4 + args_instance[SER_PORT] = PORT_MASTER_4 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_4 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master4.allocate(args_master) + instance_master4 = master4.exists() + if instance_master4: + master4.delete() + master4.create() + master4.open() + master4.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_4) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: 'meTo_' + master2.host + ':' + str(master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, + port=master2.port, + properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 1 to master 3 + properties = {RA_NAME: 'meTo_' + master3.host + ':' + str(master3.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m3_agmt = master1.agreement.create(suffix=SUFFIX, host=master3.host, + port=master3.port, + properties=properties) + if not m1_m3_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m3_agmt) + + # Creating agreement from master 1 to master 4 + properties = {RA_NAME: 'meTo_' + master4.host + ':' + str(master4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m4_agmt = master1.agreement.create(suffix=SUFFIX, host=master4.host, + port=master4.port, + properties=properties) + if not m1_m4_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m4_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: 'meTo_' + master1.host + ':' + str(master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, + port=master1.port, + properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Creating agreement from master 2 to master 3 + properties = {RA_NAME: 'meTo_' + master3.host + ':' + str(master3.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m3_agmt = master2.agreement.create(suffix=SUFFIX, host=master3.host, + port=master3.port, + properties=properties) + if not m2_m3_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m3_agmt) + + # Creating agreement from master 2 to master 4 + properties = {RA_NAME: 'meTo_' + master4.host + ':' + str(master4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m4_agmt = master2.agreement.create(suffix=SUFFIX, host=master4.host, + port=master4.port, + properties=properties) + if not m2_m4_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m4_agmt) + + # Creating agreement from master 3 to master 1 + properties = {RA_NAME: 'meTo_' + master1.host + ':' + str(master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_m1_agmt = master3.agreement.create(suffix=SUFFIX, host=master1.host, + port=master1.port, + properties=properties) + if not m3_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m3_m1_agmt) + + # Creating agreement from master 3 to master 2 + properties = {RA_NAME: 'meTo_' + master2.host + ':' + str(master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_m2_agmt = master3.agreement.create(suffix=SUFFIX, host=master2.host, + port=master2.port, + properties=properties) + if not m3_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m3_m2_agmt) + + # Creating agreement from master 3 to master 4 + properties = {RA_NAME: 'meTo_' + master4.host + ':' + str(master4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_m4_agmt = master3.agreement.create(suffix=SUFFIX, host=master4.host, + port=master4.port, + properties=properties) + if not m3_m4_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m3_m4_agmt) + + # Creating agreement from master 4 to master 1 + properties = {RA_NAME: 'meTo_' + master1.host + ':' + str(master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_m1_agmt = master4.agreement.create(suffix=SUFFIX, host=master1.host, + port=master1.port, + properties=properties) + if not m4_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m4_m1_agmt) + + # Creating agreement from master 4 to master 2 + properties = {RA_NAME: 'meTo_' + master2.host + ':' + str(master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_m2_agmt = master4.agreement.create(suffix=SUFFIX, host=master2.host, + port=master2.port, + properties=properties) + if not m4_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m4_m2_agmt) + + # Creating agreement from master 4 to master 3 + properties = {RA_NAME: 'meTo_' + master3.host + ':' + str(master3.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_m3_agmt = master4.agreement.create(suffix=SUFFIX, host=master3.host, + port=master3.port, + properties=properties) + if not m4_m3_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m4_m3_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + master1.agreement.init(SUFFIX, HOST_MASTER_3, PORT_MASTER_3) + master1.waitForReplInit(m1_m3_agmt) + master1.agreement.init(SUFFIX, HOST_MASTER_4, PORT_MASTER_4) + master1.waitForReplInit(m1_m4_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master4): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + """If we are debugging just stop the instances, otherwise remove + them + """ + if 1 or DEBUGGING: + master1.stop() + master2.stop() + master3.stop() + master4.stop() + else: + master1.delete() + master2.delete() + master3.delete() + master4.delete() + request.addfinalizer(fin) + + return TopologyReplication(master1, master2, master3, master4) + + +class AddDelUsers(threading.Thread): + """Add's and delets 50000 entries""" + def __init__(self, inst): + """ + Initialize the thread + """ + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + self.name = inst.serverid + + def run(self): + """ + Start adding users + """ + idx = 0 + + log.info('AddDelUsers (%s) Adding and deleting %d entries...' % + (self.name, ADD_DEL_COUNT)) + + while idx < ADD_DEL_COUNT: + RDN_VAL = ('uid=%s-%d' % (self.name, idx)) + USER_DN = ('%s,%s' % (RDN_VAL, DEFAULT_SUFFIX)) + + try: + self.inst.add_s(Entry((USER_DN, {'objectclass': + 'top extensibleObject'.split(), + 'uid': RDN_VAL}))) + except ldap.LDAPError as e: + log.fatal('AddDelUsers (%s): failed to add (%s) error: %s' % + (self.name, USER_DN, str(e))) + assert False + + try: + self.inst.delete_s(USER_DN) + except ldap.LDAPError as e: + log.fatal('AddDelUsers (%s): failed to delete (%s) error: %s' % + (self.name, USER_DN, str(e))) + assert False + + idx += 1 + + log.info('AddDelUsers (%s) - Finished at: %s' % + (self.name, getDateTime())) + + +def measureConvergence(topology): + """Find and measure the convergence of entries from each master + """ + + replicas = [topology.master1, topology.master2, topology.master3, + topology.master4] + + if ADD_DEL_COUNT > 10: + interval = int(ADD_DEL_COUNT / 10) + else: + interval = 1 + + for master in [('1', topology.master1), + ('2', topology.master2), + ('3', topology.master3), + ('4', topology.master4)]: + # Start with the first entry + entries = ['ADD dn="uid=master_%s-0,%s' % + (master[0], DEFAULT_SUFFIX)] + + # Add incremental entries to the list + idx = interval + while idx < ADD_DEL_COUNT: + entries.append('ADD dn="uid=master_%s-%d,%s' % + (master[0], idx, DEFAULT_SUFFIX)) + idx += interval + + # Add the last entry to the list (if it was not already added) + if idx != (ADD_DEL_COUNT - 1): + entries.append('ADD dn="uid=master_%s-%d,%s' % + (master[0], (ADD_DEL_COUNT - 1), + DEFAULT_SUFFIX)) + + ReplTools.replConvReport(DEFAULT_SUFFIX, entries, master[1], replicas) + + +def test_MMR_Integrity(topology): + """Apply load to 4 masters at the same time. Perform adds and deletes. + If any updates are missed we will see an error 32 in the access logs or + we will have entries left over once the test completes. + """ + loop = 0 + + ALL_REPLICAS = [topology.master1, topology.master2, topology.master3, + topology.master4] + + if TEST_CONVERGE_LATENCY: + try: + for inst in ALL_REPLICAS: + replica = inst.replicas.get(DEFAULT_SUFFIX) + replica.set('nsds5ReplicaReleaseTimeout', CONVERGENCE_TIMEOUT) + except ldap.LDAPError as e: + log.fatal('Failed to set replicas release timeout - error: %s' % + (str(e))) + assert False + + if DEBUGGING: + # Enable Repl logging, and increase the max logs + try: + for inst in ALL_REPLICAS: + inst.enableReplLogging() + inst.modify_s("cn=config", [(ldap.MOD_REPLACE, + 'nsslapd-errorlog-maxlogsperdir', + '5')]) + except ldap.LDAPError as e: + log.fatal('Failed to set max logs - error: %s' % (str(e))) + assert False + + while loop < MAX_LOOPS: + # Remove the current logs so we have a clean set of logs to check. + log.info('Pass %d...' % (loop + 1)) + log.info("Removing logs...") + for inst in ALL_REPLICAS: + inst.deleteAllLogs() + + # Fire off 4 threads to apply the load + log.info("Start adding/deleting: " + getDateTime()) + startTime = time.time() + add_del_m1 = AddDelUsers(topology.master1) + add_del_m1.start() + add_del_m2 = AddDelUsers(topology.master2) + add_del_m2.start() + add_del_m3 = AddDelUsers(topology.master3) + add_del_m3.start() + add_del_m4 = AddDelUsers(topology.master4) + add_del_m4.start() + + # Wait for threads to finish sending their updates + add_del_m1.join() + add_del_m2.join() + add_del_m3.join() + add_del_m4.join() + log.info("Finished adding/deleting entries: " + getDateTime()) + + # + # Loop checking for error 32's, and for convergence to complete + # + log.info("Waiting for replication to converge...") + while True: + # First check for error 32's + for inst in ALL_REPLICAS: + if inst.searchAccessLog(" err=32 "): + log.fatal('An add was missed on: ' + inst.serverid) + assert False + + # Next check to see if the last update is in the access log + converged = True + for inst in ALL_REPLICAS: + if not inst.searchAccessLog(LAST_DN_M1) or \ + not inst.searchAccessLog(LAST_DN_M2) or \ + not inst.searchAccessLog(LAST_DN_M3) or \ + not inst.searchAccessLog(LAST_DN_M4): + converged = False + break + + if converged: + elapsed_tm = int(time.time() - startTime) + convtime = str(datetime.timedelta(seconds=elapsed_tm)) + log.info('Replication converged at: ' + getDateTime() + + ' - Elapsed Time: ' + convtime) + break + else: + # Check if replication is idle + replicas = [topology.master1, topology.master2, + topology.master3, topology.master4] + if ReplTools.replIdle(replicas, DEFAULT_SUFFIX): + # Replication is idle - wait 30 secs for access log buffer + time.sleep(30) + + # Now check the access log again... + converged = True + for inst in ALL_REPLICAS: + if not inst.searchAccessLog(LAST_DN_M1) or \ + not inst.searchAccessLog(LAST_DN_M2) or \ + not inst.searchAccessLog(LAST_DN_M3) or \ + not inst.searchAccessLog(LAST_DN_M4): + converged = False + break + + if converged: + elapsed_tm = int(time.time() - startTime) + convtime = str(datetime.timedelta(seconds=elapsed_tm)) + log.info('Replication converged at: ' + getDateTime() + + ' - Elapsed Time: ' + convtime) + break + else: + log.fatal('Stopping replication check: ' + + getDateTime()) + log.fatal('Failure: Replication is complete, but we ' + + 'never converged.') + assert False + + # Sleep a bit before the next pass + time.sleep(3) + + # + # Finally check the CSN's + # + log.info("Check the CSN's...") + if not ReplTools.checkCSNs(ALL_REPLICAS): + assert False + log.info("All CSN's present and accounted for.") + + # + # Print the convergence report + # + log.info('Measuring convergence...') + measureConvergence(topology) + + # + # Test complete + # + log.info('No lingering entries.') + log.info('Pass %d complete.' % (loop + 1)) + elapsed_tm = int(time.time() - TEST_START) + convtime = str(datetime.timedelta(seconds=elapsed_tm)) + log.info('Entire test ran for: ' + convtime) + + loop += 1 + + log.info('Test PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/__init__.py b/dirsrvtests/tests/suites/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/acct_usability_plugin/__init__.py b/dirsrvtests/tests/suites/acct_usability_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/acct_usability_plugin/acct_usability_test.py b/dirsrvtests/tests/suites/acct_usability_plugin/acct_usability_test.py new file mode 100644 index 0000000..b7ac869 --- /dev/null +++ b/dirsrvtests/tests/suites/acct_usability_plugin/acct_usability_test.py @@ -0,0 +1,84 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_acct_usability_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_acct_usability_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/acctpolicy_plugin/__init__.py b/dirsrvtests/tests/suites/acctpolicy_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/acctpolicy_plugin/acctpolicy_test.py b/dirsrvtests/tests/suites/acctpolicy_plugin/acctpolicy_test.py new file mode 100644 index 0000000..14c6851 --- /dev/null +++ b/dirsrvtests/tests/suites/acctpolicy_plugin/acctpolicy_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_acctpolicy_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_acctpolicy_(topology): + ''' + Write a single test here... + ''' + log.info('acctpolicy test suite PASSED') + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/acl/__init__.py b/dirsrvtests/tests/suites/acl/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/acl/acl_test.py b/dirsrvtests/tests/suites/acl/acl_test.py new file mode 100644 index 0000000..f42a584 --- /dev/null +++ b/dirsrvtests/tests/suites/acl/acl_test.py @@ -0,0 +1,1059 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +from ldap.controls.simple import GetEffectiveRightsControl + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +# +# important part. We can deploy Master1 and Master2 on different versions +# +installation1_prefix = None +installation2_prefix = None + +TEST_REPL_DN = "cn=test_repl, %s" % SUFFIX + +STAGING_CN = "staged user" +PRODUCTION_CN = "accounts" +EXCEPT_CN = "excepts" + +STAGING_DN = "cn=%s,%s" % (STAGING_CN, SUFFIX) +PRODUCTION_DN = "cn=%s,%s" % (PRODUCTION_CN, SUFFIX) +PROD_EXCEPT_DN = "cn=%s,%s" % (EXCEPT_CN, PRODUCTION_DN) + +STAGING_PATTERN = "cn=%s*,%s" % (STAGING_CN[:2], SUFFIX) +PRODUCTION_PATTERN = "cn=%s*,%s" % (PRODUCTION_CN[:2], SUFFIX) +BAD_STAGING_PATTERN = "cn=bad*,%s" % (SUFFIX) +BAD_PRODUCTION_PATTERN = "cn=bad*,%s" % (SUFFIX) + +BIND_CN = "bind_entry" +BIND_DN = "cn=%s,%s" % (BIND_CN, SUFFIX) +BIND_PW = "password" + +NEW_ACCOUNT = "new_account" +MAX_ACCOUNTS = 20 + +CONFIG_MODDN_ACI_ATTR = "nsslapd-moddn-aci" + +SRC_ENTRY_CN = "tuser" +EXT_RDN = "01" +DST_ENTRY_CN = SRC_ENTRY_CN + EXT_RDN + +SRC_ENTRY_DN = "cn=%s,%s" % (SRC_ENTRY_CN, SUFFIX) +DST_ENTRY_DN = "cn=%s,%s" % (DST_ENTRY_CN, SUFFIX) + + +class TopologyMaster1Master2(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + """This fixture is used to create a replicated topology for the 'module'. + The replicated topology is MASTER1 <-> Master2. + """ + + global installation1_prefix + global installation2_prefix + + # allocate master1 on a given deployement + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Args for the master1 instance + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_master = args_instance.copy() + master1.allocate(args_master) + + # allocate master1 on a given deployement + master2 = DirSrv(verbose=False) + if installation2_prefix: + args_instance[SER_DEPLOYED_DIR] = installation2_prefix + + # Args for the consumer instance + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_master = args_instance.copy() + master2.allocate(args_master) + + # Get the status of the instance and restart it if it exists + instance_master1 = master1.exists() + instance_master2 = master2.exists() + + # Remove all the instances + if instance_master1: + master1.delete() + if instance_master2: + master2.delete() + + # Create the instances + master1.create() + master1.open() + master2.create() + master2.open() + + # + # Now prepare the Master-Consumer topology + # + # First Enable replication + master1.replica.enableReplication(suffix=SUFFIX, + role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_1) + master2.replica.enableReplication(suffix=SUFFIX, + role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_2) + + # Initialize the supplier->consumer + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + repl_agreement = master1.agreement.create(suffix=SUFFIX, + host=master2.host, + port=master2.port, + properties=properties) + + if not repl_agreement: + log.fatal("Fail to create a replica agreement") + sys.exit(1) + + log.debug("%s created" % repl_agreement) + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + master2.agreement.create(suffix=SUFFIX, + host=master1.host, + port=master1.port, + properties=properties) + + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(repl_agreement) + + # Check replication is working fine + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + # clear the tmp directory + master1.clearTmpDir(__file__) + + # Here we have two instances master and consumer + # with replication working. + return TopologyMaster1Master2(master1, master2) + + +def add_attr(topology, attr_name): + """Adds attribute to the schema""" + + ATTR_VALUE = """(NAME '%s' \ + DESC 'Attribute filteri-Multi-Valued' \ + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27)""" % attr_name + mod = [(ldap.MOD_ADD, 'attributeTypes', ATTR_VALUE)] + + try: + topology.master1.modify_s(DN_SCHEMA, mod) + except ldap.LDAPError as e: + log.fatal('Failed to add attr (%s): error (%s)' % (attr_name, + e.message['desc'])) + assert False + + +@pytest.fixture(params=["lang-ja", "binary", "phonetic"]) +def aci_with_attr_subtype(request, topology): + """Adds and deletes an ACI in the DEFAULT_SUFFIX""" + + TARGET_ATTR = 'protectedOperation' + USER_ATTR = 'allowedToPerform' + SUBTYPE = request.param + + log.info("========Executing test with '%s' subtype========" % SUBTYPE) + log.info(" Add a target attribute") + add_attr(topology, TARGET_ATTR) + + log.info(" Add a user attribute") + add_attr(topology, USER_ATTR) + + ACI_TARGET = '(targetattr=%s;%s)' % (TARGET_ATTR, SUBTYPE) + ACI_ALLOW = '(version 3.0; acl "test aci for subtypes"; allow (read) ' + ACI_SUBJECT = 'userattr = "%s;%s#GROUPDN";)' % (USER_ATTR, SUBTYPE) + ACI_BODY = ACI_TARGET + ACI_ALLOW + ACI_SUBJECT + + log.info(" Add an ACI with attribute subtype") + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + try: + topology.master1.modify_s(DEFAULT_SUFFIX, mod) + except ldap.LDAPError as e: + log.fatal('Failed to add ACI: error (%s)' % (e.message['desc'])) + assert False + + def fin(): + log.info(" Finally, delete an ACI with the '%s' subtype" % + SUBTYPE) + mod = [(ldap.MOD_DELETE, 'aci', ACI_BODY)] + try: + topology.master1.modify_s(DEFAULT_SUFFIX, mod) + except ldap.LDAPError as e: + log.fatal('Failed to delete ACI: error (%s)' % (e.message['desc'])) + assert False + request.addfinalizer(fin) + + return ACI_BODY + + +def test_aci_attr_subtype_targetattr(topology, aci_with_attr_subtype): + """Checks, that ACIs allow attribute subtypes in the targetattr keyword + + Test description: + 1. Define two attributes in the schema + - first will be a targetattr + - second will be a userattr + 2. Add an ACI with an attribute subtype + - or language subtype + - or binary subtype + - or pronunciation subtype + """ + + log.info(" Search for the added attribute") + try: + entries = topology.master1.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_BASE, + '(objectclass=*)', ['aci']) + entry = str(entries[0]) + assert aci_with_attr_subtype in entry + log.info(" The added attribute was found") + + except ldap.LDAPError as e: + log.fatal('Search failed, error: ' + e.message['desc']) + assert False + + +def _bind_manager(topology): + topology.master1.log.info("Bind as %s " % DN_DM) + topology.master1.simple_bind_s(DN_DM, PASSWORD) + + +def _bind_normal(topology): + # bind as bind_entry + topology.master1.log.info("Bind as %s" % BIND_DN) + topology.master1.simple_bind_s(BIND_DN, BIND_PW) + + +def _moddn_aci_deny_tree(topology, mod_type=None, + target_from=STAGING_DN, target_to=PROD_EXCEPT_DN): + """It denies the access moddn_to in cn=except,cn=accounts,SUFFIX""" + + assert mod_type is not None + + ACI_TARGET_FROM = "" + ACI_TARGET_TO = "" + if target_from: + ACI_TARGET_FROM = "(target_from = \"ldap:///%s\")" % (target_from) + if target_to: + ACI_TARGET_TO = "(target_to = \"ldap:///%s\")" % (target_to) + + ACI_ALLOW = "(version 3.0; acl \"Deny MODDN to prod_except\"; deny (moddn)" + ACI_SUBJECT = " userdn = \"ldap:///%s\";)" % BIND_DN + ACI_BODY = ACI_TARGET_TO + ACI_TARGET_FROM + ACI_ALLOW + ACI_SUBJECT + mod = [(mod_type, 'aci', ACI_BODY)] + #topology.master1.modify_s(SUFFIX, mod) + topology.master1.log.info("Add a DENY aci under %s " % PROD_EXCEPT_DN) + topology.master1.modify_s(PROD_EXCEPT_DN, mod) + + +def _write_aci_staging(topology, mod_type=None): + assert mod_type is not None + + ACI_TARGET = "(targetattr= \"cn\")(target=\"ldap:///cn=*,%s\")" % STAGING_DN + ACI_ALLOW = "(version 3.0; acl \"write staging entries\"; allow (write)" + ACI_SUBJECT = " userdn = \"ldap:///%s\";)" % BIND_DN + ACI_BODY = ACI_TARGET + ACI_ALLOW + ACI_SUBJECT + mod = [(mod_type, 'aci', ACI_BODY)] + topology.master1.modify_s(SUFFIX, mod) + + +def _write_aci_production(topology, mod_type=None): + assert mod_type is not None + + ACI_TARGET = "(targetattr= \"cn\")(target=\"ldap:///cn=*,%s\")" % PRODUCTION_DN + ACI_ALLOW = "(version 3.0; acl \"write production entries\"; allow (write)" + ACI_SUBJECT = " userdn = \"ldap:///%s\";)" % BIND_DN + ACI_BODY = ACI_TARGET + ACI_ALLOW + ACI_SUBJECT + mod = [(mod_type, 'aci', ACI_BODY)] + topology.master1.modify_s(SUFFIX, mod) + + +def _moddn_aci_staging_to_production(topology, mod_type=None, + target_from=STAGING_DN, target_to=PRODUCTION_DN): + assert mod_type is not None + + + ACI_TARGET_FROM = "" + ACI_TARGET_TO = "" + if target_from: + ACI_TARGET_FROM = "(target_from = \"ldap:///%s\")" % (target_from) + if target_to: + ACI_TARGET_TO = "(target_to = \"ldap:///%s\")" % (target_to) + + ACI_ALLOW = "(version 3.0; acl \"MODDN from staging to production\"; allow (moddn)" + ACI_SUBJECT = " userdn = \"ldap:///%s\";)" % BIND_DN + ACI_BODY = ACI_TARGET_FROM + ACI_TARGET_TO + ACI_ALLOW + ACI_SUBJECT + mod = [(mod_type, 'aci', ACI_BODY)] + topology.master1.modify_s(SUFFIX, mod) + + _write_aci_staging(topology, mod_type=mod_type) + + +def _moddn_aci_from_production_to_staging(topology, mod_type=None): + assert mod_type is not None + + ACI_TARGET = "(target_from = \"ldap:///%s\") (target_to = \"ldap:///%s\")" % ( + PRODUCTION_DN, STAGING_DN) + ACI_ALLOW = "(version 3.0; acl \"MODDN from production to staging\"; allow (moddn)" + ACI_SUBJECT = " userdn = \"ldap:///%s\";)" % BIND_DN + ACI_BODY = ACI_TARGET + ACI_ALLOW + ACI_SUBJECT + mod = [(mod_type, 'aci', ACI_BODY)] + topology.master1.modify_s(SUFFIX, mod) + + _write_aci_production(topology, mod_type=mod_type) + + +@pytest.fixture(scope="module") +def moddn_setup(topology): + """Creates + - a staging DIT + - a production DIT + - add accounts in staging DIT + - enable ACL logging (commented for performance reason) + """ + + topology.master1.log.info("\n\n######## INITIALIZATION ########\n") + + # entry used to bind with + topology.master1.log.info("Add %s" % BIND_DN) + topology.master1.add_s(Entry((BIND_DN, { + 'objectclass': "top person".split(), + 'sn': BIND_CN, + 'cn': BIND_CN, + 'userpassword': BIND_PW}))) + + # DIT for staging + topology.master1.log.info("Add %s" % STAGING_DN) + topology.master1.add_s(Entry((STAGING_DN, { + 'objectclass': "top organizationalRole".split(), + 'cn': STAGING_CN, + 'description': "staging DIT"}))) + + # DIT for production + topology.master1.log.info("Add %s" % PRODUCTION_DN) + topology.master1.add_s(Entry((PRODUCTION_DN, { + 'objectclass': "top organizationalRole".split(), + 'cn': PRODUCTION_CN, + 'description': "production DIT"}))) + + # DIT for production/except + topology.master1.log.info("Add %s" % PROD_EXCEPT_DN) + topology.master1.add_s(Entry((PROD_EXCEPT_DN, { + 'objectclass': "top organizationalRole".split(), + 'cn': EXCEPT_CN, + 'description': "production except DIT"}))) + + # enable acl error logging + #mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '128')] + #topology.master1.modify_s(DN_CONFIG, mod) + #topology.master2.modify_s(DN_CONFIG, mod) + + # add dummy entries in the staging DIT + for cpt in range(MAX_ACCOUNTS): + name = "%s%d" % (NEW_ACCOUNT, cpt) + topology.master1.add_s(Entry(("cn=%s,%s" % (name, STAGING_DN), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + + +def test_mode_default_add_deny(topology, moddn_setup): + """This test case checks + that the ADD operation fails (no ADD aci on production) + """ + + topology.master1.log.info("\n\n######## mode moddn_aci : ADD (should fail) ########\n") + + _bind_normal(topology) + + # + # First try to add an entry in production => INSUFFICIENT_ACCESS + # + try: + topology.master1.log.info("Try to add %s" % PRODUCTION_DN) + name = "%s%d" % (NEW_ACCOUNT, 0) + topology.master1.add_s(Entry(("cn=%s,%s" % (name, PRODUCTION_DN), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + assert 0 # this is an error, we should not be allowed to add an entry in production + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + +def test_mode_default_delete_deny(topology, moddn_setup): + """This test case checks + that the DEL operation fails (no 'delete' aci on production) + """ + + topology.master1.log.info("\n\n######## DELETE (should fail) ########\n") + + _bind_normal(topology) + # + # Second try to delete an entry in staging => INSUFFICIENT_ACCESS + # + try: + topology.master1.log.info("Try to delete %s" % STAGING_DN) + name = "%s%d" % (NEW_ACCOUNT, 0) + topology.master1.delete_s("cn=%s,%s" % (name, STAGING_DN)) + assert 0 # this is an error, we should not be allowed to add an entry in production + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + +@pytest.mark.parametrize("index,tfrom,tto,failure", + [(0, STAGING_DN, PRODUCTION_DN, False), + (1, STAGING_DN, PRODUCTION_DN, False), + (2, STAGING_DN, BAD_PRODUCTION_PATTERN, True), + (3, STAGING_PATTERN, PRODUCTION_DN, False), + (4, BAD_STAGING_PATTERN, PRODUCTION_DN, True), + (5, STAGING_PATTERN, PRODUCTION_PATTERN, False), + (6, None, PRODUCTION_PATTERN, False), + (7, STAGING_PATTERN, None, False), + (8, None, None, False)]) +def test_moddn_staging_prod(topology, moddn_setup, + index, tfrom, tto, failure): + """This test case MOVE entry NEW_ACCOUNT0 from staging to prod + target_to/target_from: equality filter + """ + + topology.master1.log.info("\n\n######## MOVE staging -> Prod (%s) ########\n" % index) + _bind_normal(topology) + + old_rdn = "cn=%s%s" % (NEW_ACCOUNT, index) + old_dn = "%s,%s" % (old_rdn, STAGING_DN) + new_rdn = old_rdn + new_superior = PRODUCTION_DN + + # + # Try to rename without the apropriate ACI => INSUFFICIENT_ACCESS + # + try: + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + assert 0 + except AssertionError: + topology.master1.log.info("Exception (not really expected exception but that is fine as it fails to rename)") + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + + # successfull MOD with the ACI + topology.master1.log.info("\n\n######## MOVE to and from equality filter ########\n") + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_ADD, + target_from=tfrom, target_to=tto) + _bind_normal(topology) + + try: + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + if failure: + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + # successfull MOD with the both ACI + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_DELETE, + target_from=tfrom, target_to=tto) + _bind_normal(topology) + + +def test_moddn_staging_prod_9(topology, moddn_setup): + """This test case disable the 'moddn' right so a MODDN requires a 'add' right + to be successfull. + It fails to MOVE entry NEW_ACCOUNT9 from staging to prod. + Add a 'add' right to prod. + Then it succeeds to MOVE NEW_ACCOUNT9 from staging to prod. + + Then enable the 'moddn' right so a MODDN requires a 'moddn' right + It fails to MOVE entry NEW_ACCOUNT10 from staging to prod. + Add a 'moddn' right to prod. + Then it succeeds to MOVE NEW_ACCOUNT10 from staging to prod. + """ + + topology.master1.log.info("\n\n######## MOVE staging -> Prod (9) ########\n") + + _bind_normal(topology) + old_rdn = "cn=%s9" % NEW_ACCOUNT + old_dn = "%s,%s" % (old_rdn, STAGING_DN) + new_rdn = old_rdn + new_superior = PRODUCTION_DN + + # + # Try to rename without the apropriate ACI => INSUFFICIENT_ACCESS + # + try: + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + assert 0 + except AssertionError: + topology.master1.log.info("Exception (not really expected exception but that is fine as it fails to rename)") + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + ############# + # Now do tests with no support of moddn aci + ############# + topology.master1.log.info("Disable the moddn right") + _bind_manager(topology) + mod = [(ldap.MOD_REPLACE, CONFIG_MODDN_ACI_ATTR, 'off')] + topology.master1.modify_s(DN_CONFIG, mod) + + # Add the moddn aci that will not be evaluated because of the config flag + topology.master1.log.info("\n\n######## MOVE to and from equality filter ########\n") + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_ADD, + target_from=STAGING_DN, target_to=PRODUCTION_DN) + _bind_normal(topology) + + # It will fail because it will test the ADD right + try: + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + assert 0 + except AssertionError: + topology.master1.log.info("Exception (not really expected exception but that is fine as it fails to rename)") + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + # remove the moddn aci + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_DELETE, + target_from=STAGING_DN, target_to=PRODUCTION_DN) + _bind_normal(topology) + + # + # add the 'add' right to the production DN + # Then do a successfull moddn + # + ACI_ALLOW = "(version 3.0; acl \"ADD rights to allow moddn\"; allow (add)" + ACI_SUBJECT = " userdn = \"ldap:///%s\";)" % BIND_DN + ACI_BODY = ACI_ALLOW + ACI_SUBJECT + + _bind_manager(topology) + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + topology.master1.modify_s(PRODUCTION_DN, mod) + _write_aci_staging(topology, mod_type=ldap.MOD_ADD) + _bind_normal(topology) + + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + + _bind_manager(topology) + mod = [(ldap.MOD_DELETE, 'aci', ACI_BODY)] + topology.master1.modify_s(PRODUCTION_DN, mod) + _write_aci_staging(topology, mod_type=ldap.MOD_DELETE) + _bind_normal(topology) + + ############# + # Now do tests with support of moddn aci + ############# + topology.master1.log.info("Enable the moddn right") + _bind_manager(topology) + mod = [(ldap.MOD_REPLACE, CONFIG_MODDN_ACI_ATTR, 'on')] + topology.master1.modify_s(DN_CONFIG, mod) + + topology.master1.log.info("\n\n######## MOVE staging -> Prod (10) ########\n") + + _bind_normal(topology) + old_rdn = "cn=%s10" % NEW_ACCOUNT + old_dn = "%s,%s" % (old_rdn, STAGING_DN) + new_rdn = old_rdn + new_superior = PRODUCTION_DN + + # + # Try to rename without the apropriate ACI => INSUFFICIENT_ACCESS + # + try: + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + assert 0 + except AssertionError: + topology.master1.log.info("Exception (not really expected exception but that is fine as it fails to rename)") + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + # + # add the 'add' right to the production DN + # Then do a failing moddn + # + ACI_ALLOW = "(version 3.0; acl \"ADD rights to allow moddn\"; allow (add)" + ACI_SUBJECT = " userdn = \"ldap:///%s\";)" % BIND_DN + ACI_BODY = ACI_ALLOW + ACI_SUBJECT + + _bind_manager(topology) + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + topology.master1.modify_s(PRODUCTION_DN, mod) + _write_aci_staging(topology, mod_type=ldap.MOD_ADD) + _bind_normal(topology) + + try: + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + assert 0 + except AssertionError: + topology.master1.log.info("Exception (not really expected exception but that is fine as it fails to rename)") + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + _bind_manager(topology) + mod = [(ldap.MOD_DELETE, 'aci', ACI_BODY)] + topology.master1.modify_s(PRODUCTION_DN, mod) + _write_aci_staging(topology, mod_type=ldap.MOD_DELETE) + _bind_normal(topology) + + # Add the moddn aci that will be evaluated because of the config flag + topology.master1.log.info("\n\n######## MOVE to and from equality filter ########\n") + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_ADD, + target_from=STAGING_DN, target_to=PRODUCTION_DN) + _bind_normal(topology) + + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + + # remove the moddn aci + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_DELETE, + target_from=STAGING_DN, target_to=PRODUCTION_DN) + _bind_normal(topology) + + +def test_moddn_prod_staging(topology, moddn_setup): + """This test checks that we can move ACCOUNT11 from staging to prod + but not move back ACCOUNT11 from prod to staging + """ + + topology.master1.log.info("\n\n######## MOVE staging -> Prod (11) ########\n") + + _bind_normal(topology) + + old_rdn = "cn=%s11" % NEW_ACCOUNT + old_dn = "%s,%s" % (old_rdn, STAGING_DN) + new_rdn = old_rdn + new_superior = PRODUCTION_DN + + # + # Try to rename without the apropriate ACI => INSUFFICIENT_ACCESS + # + try: + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + assert 0 + except AssertionError: + topology.master1.log.info("Exception (not really expected exception but that is fine as it fails to rename)") + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + # successfull MOD with the ACI + topology.master1.log.info("\n\n######## MOVE to and from equality filter ########\n") + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_ADD, + target_from=STAGING_DN, target_to=PRODUCTION_DN) + _bind_normal(topology) + + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + + # Now check we can not move back the entry to staging + old_rdn = "cn=%s11" % NEW_ACCOUNT + old_dn = "%s,%s" % (old_rdn, PRODUCTION_DN) + new_rdn = old_rdn + new_superior = STAGING_DN + + # add the write right because we want to check the moddn + _bind_manager(topology) + _write_aci_production(topology, mod_type=ldap.MOD_ADD) + _bind_normal(topology) + + try: + topology.master1.log.info("Try to move back MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + assert 0 + except AssertionError: + topology.master1.log.info("Exception (not really expected exception but that is fine as it fails to rename)") + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + _bind_manager(topology) + _write_aci_production(topology, mod_type=ldap.MOD_DELETE) + _bind_normal(topology) + + # successfull MOD with the both ACI + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_DELETE, + target_from=STAGING_DN, target_to=PRODUCTION_DN) + _bind_normal(topology) + + +def test_check_repl_M2_to_M1(topology, moddn_setup): + """Checks that replication is still working M2->M1, using ACCOUNT12""" + + topology.master1.log.info("Bind as %s (M2)" % DN_DM) + topology.master2.simple_bind_s(DN_DM, PASSWORD) + + rdn = "cn=%s12" % NEW_ACCOUNT + dn = "%s,%s" % (rdn, STAGING_DN) + + # First wait for the ACCOUNT19 entry being replicated on M2 + loop = 0 + while loop <= 10: + try: + ent = topology.master2.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)") + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + assert loop <= 10 + + attribute = 'description' + tested_value = 'Hello world' + mod = [(ldap.MOD_ADD, attribute, tested_value)] + topology.master1.log.info("Update (M2) %s (%s)" % (dn, attribute)) + topology.master2.modify_s(dn, mod) + + loop = 0 + while loop <= 10: + ent = topology.master1.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent is not None + if ent.hasAttr(attribute) and (ent.getValue(attribute) == tested_value): + break + + time.sleep(1) + loop += 1 + assert loop < 10 + topology.master1.log.info("Update %s (%s) replicated on M1" % (dn, attribute)) + + +def test_moddn_staging_prod_except(topology, moddn_setup): + """This test case MOVE entry NEW_ACCOUNT13 from staging to prod + but fails to move entry NEW_ACCOUNT14 from staging to prod_except + """ + + topology.master1.log.info("\n\n######## MOVE staging -> Prod (13) ########\n") + _bind_normal(topology) + + old_rdn = "cn=%s13" % NEW_ACCOUNT + old_dn = "%s,%s" % (old_rdn, STAGING_DN) + new_rdn = old_rdn + new_superior = PRODUCTION_DN + + # + # Try to rename without the apropriate ACI => INSUFFICIENT_ACCESS + # + try: + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + assert 0 + except AssertionError: + topology.master1.log.info("Exception (not really expected exception but that is fine as it fails to rename)") + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + # successfull MOD with the ACI + topology.master1.log.info("\n\n######## MOVE to and from equality filter ########\n") + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_ADD, + target_from=STAGING_DN, target_to=PRODUCTION_DN) + _moddn_aci_deny_tree(topology, mod_type=ldap.MOD_ADD) + _bind_normal(topology) + + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + + # + # Now try to move an entry under except + # + topology.master1.log.info("\n\n######## MOVE staging -> Prod/Except (14) ########\n") + old_rdn = "cn=%s14" % NEW_ACCOUNT + old_dn = "%s,%s" % (old_rdn, STAGING_DN) + new_rdn = old_rdn + new_superior = PROD_EXCEPT_DN + try: + topology.master1.log.info("Try to MODDN %s -> %s,%s" % (old_dn, new_rdn, new_superior)) + topology.master1.rename_s(old_dn, new_rdn, newsuperior=new_superior) + assert 0 + except AssertionError: + topology.master1.log.info("Exception (not really expected exception but that is fine as it fails to rename)") + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + # successfull MOD with the both ACI + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_DELETE, + target_from=STAGING_DN, target_to=PRODUCTION_DN) + _moddn_aci_deny_tree(topology, mod_type=ldap.MOD_DELETE) + _bind_normal(topology) + + +def test_mode_default_ger_no_moddn(topology, moddn_setup): + topology.master1.log.info("\n\n######## mode moddn_aci : GER no moddn ########\n") + request_ctrl = GetEffectiveRightsControl(criticality=True, authzId="dn: " + BIND_DN) + msg_id = topology.master1.search_ext(PRODUCTION_DN, + ldap.SCOPE_SUBTREE, + "objectclass=*", + serverctrls=[request_ctrl]) + rtype, rdata, rmsgid, response_ctrl = topology.master1.result3(msg_id) + #ger={} + value = '' + for dn, attrs in rdata: + topology.master1.log.info("dn: %s" % dn) + value = attrs['entryLevelRights'][0] + + topology.master1.log.info("######## entryLevelRights: %r" % value) + assert 'n' not in value + + +def test_mode_default_ger_with_moddn(topology, moddn_setup): + """This test case adds the moddn aci and check ger contains 'n'""" + + topology.master1.log.info("\n\n######## mode moddn_aci: GER with moddn ########\n") + + # successfull MOD with the ACI + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_ADD, + target_from=STAGING_DN, target_to=PRODUCTION_DN) + _bind_normal(topology) + + request_ctrl = GetEffectiveRightsControl(criticality=True, authzId="dn: " + BIND_DN) + msg_id = topology.master1.search_ext(PRODUCTION_DN, + ldap.SCOPE_SUBTREE, + "objectclass=*", + serverctrls=[request_ctrl]) + rtype, rdata, rmsgid, response_ctrl = topology.master1.result3(msg_id) + #ger={} + value = '' + for dn, attrs in rdata: + topology.master1.log.info("dn: %s" % dn) + value = attrs['entryLevelRights'][0] + + topology.master1.log.info("######## entryLevelRights: %r" % value) + assert 'n' in value + + # successfull MOD with the both ACI + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_DELETE, + target_from=STAGING_DN, target_to=PRODUCTION_DN) + _bind_normal(topology) + + +def test_mode_switch_default_to_legacy(topology, moddn_setup): + """This test switch the server from default mode to legacy""" + + topology.master1.log.info("\n\n######## Disable the moddn aci mod ########\n") + _bind_manager(topology) + mod = [(ldap.MOD_REPLACE, CONFIG_MODDN_ACI_ATTR, 'off')] + topology.master1.modify_s(DN_CONFIG, mod) + + +def test_mode_legacy_ger_no_moddn1(topology, moddn_setup): + topology.master1.log.info("\n\n######## mode legacy 1: GER no moddn ########\n") + request_ctrl = GetEffectiveRightsControl(criticality=True, authzId="dn: " + BIND_DN) + msg_id = topology.master1.search_ext(PRODUCTION_DN, + ldap.SCOPE_SUBTREE, + "objectclass=*", + serverctrls=[request_ctrl]) + rtype, rdata, rmsgid, response_ctrl = topology.master1.result3(msg_id) + #ger={} + value = '' + for dn, attrs in rdata: + topology.master1.log.info("dn: %s" % dn) + value = attrs['entryLevelRights'][0] + + topology.master1.log.info("######## entryLevelRights: %r" % value) + assert 'n' not in value + + +def test_mode_legacy_ger_no_moddn2(topology, moddn_setup): + topology.master1.log.info("\n\n######## mode legacy 2: GER no moddn ########\n") + # successfull MOD with the ACI + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_ADD, + target_from=STAGING_DN, target_to=PRODUCTION_DN) + _bind_normal(topology) + + request_ctrl = GetEffectiveRightsControl(criticality=True, authzId="dn: " + BIND_DN) + msg_id = topology.master1.search_ext(PRODUCTION_DN, + ldap.SCOPE_SUBTREE, + "objectclass=*", + serverctrls=[request_ctrl]) + rtype, rdata, rmsgid, response_ctrl = topology.master1.result3(msg_id) + #ger={} + value = '' + for dn, attrs in rdata: + topology.master1.log.info("dn: %s" % dn) + value = attrs['entryLevelRights'][0] + + topology.master1.log.info("######## entryLevelRights: %r" % value) + assert 'n' not in value + + # successfull MOD with the both ACI + _bind_manager(topology) + _moddn_aci_staging_to_production(topology, mod_type=ldap.MOD_DELETE, + target_from=STAGING_DN, target_to=PRODUCTION_DN) + _bind_normal(topology) + + +def test_mode_legacy_ger_with_moddn(topology, moddn_setup): + topology.master1.log.info("\n\n######## mode legacy : GER with moddn ########\n") + + # being allowed to read/write the RDN attribute use to allow the RDN + ACI_TARGET = "(target = \"ldap:///%s\")(targetattr=\"cn\")" % (PRODUCTION_DN) + ACI_ALLOW = "(version 3.0; acl \"MODDN production changing the RDN attribute\"; allow (read,search,write)" + ACI_SUBJECT = " userdn = \"ldap:///%s\";)" % BIND_DN + ACI_BODY = ACI_TARGET + ACI_ALLOW + ACI_SUBJECT + + # successfull MOD with the ACI + _bind_manager(topology) + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + topology.master1.modify_s(SUFFIX, mod) + _bind_normal(topology) + + request_ctrl = GetEffectiveRightsControl(criticality=True, authzId="dn: " + BIND_DN) + msg_id = topology.master1.search_ext(PRODUCTION_DN, + ldap.SCOPE_SUBTREE, + "objectclass=*", + serverctrls=[request_ctrl]) + rtype, rdata, rmsgid, response_ctrl = topology.master1.result3(msg_id) + #ger={} + value = '' + for dn, attrs in rdata: + topology.master1.log.info("dn: %s" % dn) + value = attrs['entryLevelRights'][0] + + topology.master1.log.info("######## entryLevelRights: %r" % value) + assert 'n' in value + + # successfull MOD with the both ACI + _bind_manager(topology) + mod = [(ldap.MOD_DELETE, 'aci', ACI_BODY)] + topology.master1.modify_s(SUFFIX, mod) + #_bind_normal(topology) + + +@pytest.fixture(scope="module") +def rdn_write_setup(topology): + topology.master1.log.info("\n\n######## Add entry tuser ########\n") + topology.master1.add_s(Entry((SRC_ENTRY_DN, { + 'objectclass': "top person".split(), + 'sn': SRC_ENTRY_CN, + 'cn': SRC_ENTRY_CN}))) + + +def test_rdn_write_get_ger(topology, rdn_write_setup): + ANONYMOUS_DN = "" + topology.master1.log.info("\n\n######## GER rights for anonymous ########\n") + request_ctrl = GetEffectiveRightsControl(criticality=True, + authzId="dn:" + ANONYMOUS_DN) + msg_id = topology.master1.search_ext(SUFFIX, + ldap.SCOPE_SUBTREE, + "objectclass=*", + serverctrls=[request_ctrl]) + rtype, rdata, rmsgid, response_ctrl = topology.master1.result3(msg_id) + value = '' + for dn, attrs in rdata: + topology.master1.log.info("dn: %s" % dn) + for value in attrs['entryLevelRights']: + topology.master1.log.info("######## entryLevelRights: %r" % value) + assert 'n' not in value + + +def test_rdn_write_modrdn_anonymous(topology, rdn_write_setup): + ANONYMOUS_DN = "" + topology.master1.close() + topology.master1.binddn = ANONYMOUS_DN + topology.master1.open() + msg_id = topology.master1.search_ext("", ldap.SCOPE_BASE, "objectclass=*") + rtype, rdata, rmsgid, response_ctrl = topology.master1.result3(msg_id) + for dn, attrs in rdata: + topology.master1.log.info("dn: %s" % dn) + for attr in attrs: + topology.master1.log.info("######## %r: %r" % (attr, attrs[attr])) + + try: + topology.master1.rename_s(SRC_ENTRY_DN, "cn=%s" % DST_ENTRY_CN, delold=True) + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + isinstance(e, ldap.INSUFFICIENT_ACCESS) + + try: + topology.master1.getEntry(DST_ENTRY_DN, ldap.SCOPE_BASE, "objectclass=*") + assert False + except Exception as e: + topology.master1.log.info("The entry was not renamed (expected)") + isinstance(e, ldap.NO_SUCH_OBJECT) + + _bind_manager(topology) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/attr_encryption/__init__.py b/dirsrvtests/tests/suites/attr_encryption/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/attr_encryption/attr_encrypt_test.py b/dirsrvtests/tests/suites/attr_encryption/attr_encrypt_test.py new file mode 100644 index 0000000..6116aed --- /dev/null +++ b/dirsrvtests/tests/suites/attr_encryption/attr_encrypt_test.py @@ -0,0 +1,84 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_attr_encrypt_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_attr_encrypt_(topology): + ''' + Write a single test here... + ''' + log.info('attr_encrypt test suite PASSED') + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/attr_uniqueness_plugin/__init__.py b/dirsrvtests/tests/suites/attr_uniqueness_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/attr_uniqueness_plugin/attr_uniqueness_test.py b/dirsrvtests/tests/suites/attr_uniqueness_plugin/attr_uniqueness_test.py new file mode 100644 index 0000000..6550f43 --- /dev/null +++ b/dirsrvtests/tests/suites/attr_uniqueness_plugin/attr_uniqueness_test.py @@ -0,0 +1,236 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) +USER1_DN = 'uid=user1,' + DEFAULT_SUFFIX +USER2_DN = 'uid=user2,' + DEFAULT_SUFFIX +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_attr_uniqueness_init(topology): + ''' + Enable dynamic plugins - makes things easier + ''' + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-dynamic-plugins', 'on')]) + except ldap.LDAPError as e: + ldap.fatal('Failed to enable dynamic plugin!' + e.message['desc']) + assert False + + topology.standalone.plugins.enable(name=PLUGIN_ATTR_UNIQUENESS) + + +def test_attr_uniqueness(topology): + log.info('Running test_attr_uniqueness...') + + # + # Configure plugin + # + try: + topology.standalone.modify_s('cn=' + PLUGIN_ATTR_UNIQUENESS + ',cn=plugins,cn=config', + [(ldap.MOD_REPLACE, 'uniqueness-attribute-name', 'uid')]) + + except ldap.LDAPError as e: + log.fatal('test_attr_uniqueness: Failed to configure plugin for "uid": error ' + e.message['desc']) + assert False + + # Add an entry + try: + topology.standalone.add_s(Entry((USER1_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '1', + 'cn': 'user 1', + 'uid': 'user1', + 'mail': 'user1@example.com', + 'mailAlternateAddress': 'user1@alt.example.com', + 'userpassword': 'password'}))) + except ldap.LDAPError as e: + log.fatal('test_attr_uniqueness: Failed to add test user' + USER1_DN + ': error ' + e.message['desc']) + assert False + + # Add an entry with a duplicate "uid" + try: + topology.standalone.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'uid': 'user1', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.fatal('test_attr_uniqueness: Adding of 2nd entry(uid) incorrectly succeeded') + assert False + + # + # Change config to use "mail" instead of "uid" + # + try: + topology.standalone.modify_s('cn=' + PLUGIN_ATTR_UNIQUENESS + ',cn=plugins,cn=config', + [(ldap.MOD_REPLACE, 'uniqueness-attribute-name', 'mail')]) + + except ldap.LDAPError as e: + log.fatal('test_attr_uniqueness: Failed to configure plugin for "mail": error ' + e.message['desc']) + assert False + + # + # Test plugin - Add an entry, that has a duplicate "mail" value + # + try: + topology.standalone.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mail': 'user1@example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.fatal('test_attr_uniqueness: Adding of 2nd entry(mail) incorrectly succeeded') + assert False + + # + # Reconfigure plugin for mail and mailAlternateAddress + # + try: + topology.standalone.modify_s('cn=' + PLUGIN_ATTR_UNIQUENESS + ',cn=plugins,cn=config', + [(ldap.MOD_REPLACE, 'uniqueness-attribute-name', 'mail'), + (ldap.MOD_ADD, 'uniqueness-attribute-name', + 'mailAlternateAddress')]) + except ldap.LDAPError as e: + log.error('test_attr_uniqueness: Failed to reconfigure plugin for "mail mailAlternateAddress": error ' + + e.message['desc']) + assert False + + # + # Test plugin - Add an entry, that has a duplicate "mail" value + # + try: + topology.standalone.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mail': 'user1@example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.error('test_attr_uniqueness: Adding of 3rd entry(mail) incorrectly succeeded') + assert False + + # + # Test plugin - Add an entry, that has a duplicate "mailAlternateAddress" value + # + try: + topology.standalone.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mailAlternateAddress': 'user1@alt.example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.error('test_attr_uniqueness: Adding of 4th entry(mailAlternateAddress) incorrectly succeeded') + assert False + + # + # Test plugin - Add an entry, that has a duplicate "mail" value conflicting mailAlternateAddress + # + try: + topology.standalone.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mail': 'user1@alt.example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.error('test_attr_uniqueness: Adding of 5th entry(mailAlternateAddress) incorrectly succeeded') + assert False + + # + # Test plugin - Add an entry, that has a duplicate "mailAlternateAddress" conflicting mail + # + try: + topology.standalone.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mailAlternateAddress': 'user1@example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.error('test_attr_uniqueness: Adding of 6th entry(mail) incorrectly succeeded') + assert False + + # + # Cleanup + # + try: + topology.standalone.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_attr_uniqueness: Failed to delete test entry: ' + e.message['desc']) + assert False + + log.info('test_attr_uniqueness: PASS\n') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/automember_plugin/__init__.py b/dirsrvtests/tests/suites/automember_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/automember_plugin/automember_test.py b/dirsrvtests/tests/suites/automember_plugin/automember_test.py new file mode 100644 index 0000000..f3a1113 --- /dev/null +++ b/dirsrvtests/tests/suites/automember_plugin/automember_test.py @@ -0,0 +1,84 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_automember_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_automember_(topology): + ''' + Write a single test here... + ''' + log.info('automember test suite PASSED') + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/basic/__init__.py b/dirsrvtests/tests/suites/basic/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/basic/basic_test.py b/dirsrvtests/tests/suites/basic/basic_test.py new file mode 100644 index 0000000..517ace6 --- /dev/null +++ b/dirsrvtests/tests/suites/basic/basic_test.py @@ -0,0 +1,776 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import ldap.sasl +import logging +import pytest +import shutil +from subprocess import check_output +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +# Globals +USER1_DN = 'uid=user1,' + DEFAULT_SUFFIX +USER2_DN = 'uid=user2,' + DEFAULT_SUFFIX +USER3_DN = 'uid=user3,' + DEFAULT_SUFFIX + +ROOTDSE_DEF_ATTR_LIST = ('namingContexts', + 'supportedLDAPVersion', + 'supportedControl', + 'supportedExtension', + 'supportedSASLMechanisms', + 'vendorName', + 'vendorVersion') + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + """This fixture is used to standalone topology for the 'module'.""" + + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +@pytest.fixture(scope="module") +def import_example_ldif(topology): + """Import the Example LDIF for the tests in this suite""" + + log.info('Initializing the "basic" test suite') + + ldif = '%s/Example.ldif' % get_data_dir(topology.standalone.prefix) + import_ldif = topology.standalone.get_ldif_dir() + "/Example.ldif" + shutil.copyfile(ldif, import_ldif) + try: + topology.standalone.tasks.importLDIF(suffix=DEFAULT_SUFFIX, + input_file=import_ldif, + args={TASK_WAIT: True}) + except ValueError: + log.error('Online import failed') + assert False + + +@pytest.fixture(params=ROOTDSE_DEF_ATTR_LIST) +def rootdse_attr(topology, request): + """Adds an attr from the list + as the default attr to the rootDSE + """ + + RETURN_DEFAULT_OPATTR = "nsslapd-return-default-opattr" + rootdse_attr_name = request.param + + log.info(" Add the %s: %s to rootdse" % (RETURN_DEFAULT_OPATTR, + rootdse_attr_name)) + mod = [(ldap.MOD_ADD, RETURN_DEFAULT_OPATTR, rootdse_attr_name)] + try: + topology.standalone.modify_s("", mod) + except ldap.LDAPError as e: + log.fatal('Failed to add attr: error (%s)' % (e.message['desc'])) + assert False + + def fin(): + log.info(" Delete the %s: %s from rootdse" % (RETURN_DEFAULT_OPATTR, + rootdse_attr_name)) + mod = [(ldap.MOD_DELETE, RETURN_DEFAULT_OPATTR, rootdse_attr_name)] + try: + topology.standalone.modify_s("", mod) + except ldap.LDAPError as e: + log.fatal('Failed to delete attr: error (%s)' % (e.message['desc'])) + assert False + request.addfinalizer(fin) + + return rootdse_attr_name + + +def test_basic_ops(topology, import_example_ldif): + """Test doing adds, mods, modrdns, and deletes""" + + log.info('Running test_basic_ops...') + + USER1_NEWDN = 'cn=user1' + USER2_NEWDN = 'cn=user2' + USER3_NEWDN = 'cn=user3' + NEW_SUPERIOR = 'ou=people,' + DEFAULT_SUFFIX + USER1_RDN_DN = 'cn=user1,' + DEFAULT_SUFFIX + USER2_RDN_DN = 'cn=user2,' + DEFAULT_SUFFIX + USER3_RDN_DN = 'cn=user3,' + NEW_SUPERIOR # New superior test + + # + # Adds + # + try: + topology.standalone.add_s(Entry((USER1_DN, + {'objectclass': "top extensibleObject".split(), + 'sn': '1', + 'cn': 'user1', + 'uid': 'user1', + 'userpassword': 'password'}))) + except ldap.LDAPError as e: + log.error('Failed to add test user' + USER1_DN + ': error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((USER2_DN, + {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user2', + 'uid': 'user2', + 'userpassword': 'password'}))) + except ldap.LDAPError as e: + log.error('Failed to add test user' + USER2_DN + ': error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((USER3_DN, + {'objectclass': "top extensibleObject".split(), + 'sn': '3', + 'cn': 'user3', + 'uid': 'user3', + 'userpassword': 'password'}))) + except ldap.LDAPError as e: + log.error('Failed to add test user' + USER3_DN + ': error ' + e.message['desc']) + assert False + + # + # Mods + # + try: + topology.standalone.modify_s(USER1_DN, [(ldap.MOD_ADD, 'description', + 'New description')]) + except ldap.LDAPError as e: + log.error('Failed to add description: error ' + e.message['desc']) + assert False + + try: + topology.standalone.modify_s(USER1_DN, [(ldap.MOD_REPLACE, 'description', + 'Modified description')]) + except ldap.LDAPError as e: + log.error('Failed to modify description: error ' + e.message['desc']) + assert False + + try: + topology.standalone.modify_s(USER1_DN, [(ldap.MOD_DELETE, 'description', + None)]) + except ldap.LDAPError as e: + log.error('Failed to delete description: error ' + e.message['desc']) + assert False + + # + # Modrdns + # + try: + topology.standalone.rename_s(USER1_DN, USER1_NEWDN, delold=1) + except ldap.LDAPError as e: + log.error('Failed to modrdn user1: error ' + e.message['desc']) + assert False + + try: + topology.standalone.rename_s(USER2_DN, USER2_NEWDN, delold=0) + except ldap.LDAPError as e: + log.error('Failed to modrdn user2: error ' + e.message['desc']) + assert False + + # Modrdn - New superior + try: + topology.standalone.rename_s(USER3_DN, USER3_NEWDN, + newsuperior=NEW_SUPERIOR, delold=1) + except ldap.LDAPError as e: + log.error('Failed to modrdn(new superior) user3: error ' + e.message['desc']) + assert False + + # + # Deletes + # + try: + topology.standalone.delete_s(USER1_RDN_DN) + except ldap.LDAPError as e: + log.error('Failed to delete test entry1: ' + e.message['desc']) + assert False + + try: + topology.standalone.delete_s(USER2_RDN_DN) + except ldap.LDAPError as e: + log.error('Failed to delete test entry2: ' + e.message['desc']) + assert False + + try: + topology.standalone.delete_s(USER3_RDN_DN) + except ldap.LDAPError as e: + log.error('Failed to delete test entry3: ' + e.message['desc']) + assert False + + log.info('test_basic_ops: PASSED') + + +def test_basic_import_export(topology, import_example_ldif): + """Test online and offline LDIF imports & exports""" + + log.info('Running test_basic_import_export...') + + tmp_dir = '/tmp' + + # + # Test online/offline LDIF imports + # + + # Generate a test ldif (50k entries) + ldif_dir = topology.standalone.get_ldif_dir() + import_ldif = ldif_dir + '/basic_import.ldif' + try: + topology.standalone.buildLDIF(50000, import_ldif) + except OSError as e: + log.fatal('test_basic_import_export: failed to create test ldif,\ + error: %s - %s' % (e.errno, e.strerror)) + assert False + + # Online + try: + topology.standalone.tasks.importLDIF(suffix=DEFAULT_SUFFIX, + input_file=import_ldif, + args={TASK_WAIT: True}) + except ValueError: + log.fatal('test_basic_import_export: Online import failed') + assert False + + # Offline + if not topology.standalone.ldif2db(DEFAULT_BENAME, None, None, None, import_ldif): + log.fatal('test_basic_import_export: Offline import failed') + assert False + + # + # Test online and offline LDIF export + # + + # Online export + export_ldif = ldif_dir + '/export.ldif' + exportTask = Tasks(topology.standalone) + try: + args = {TASK_WAIT: True} + exportTask.exportLDIF(DEFAULT_SUFFIX, None, export_ldif, args) + except ValueError: + log.fatal('test_basic_import_export: Online export failed') + assert False + + # Offline export + if not topology.standalone.db2ldif(DEFAULT_BENAME, (DEFAULT_SUFFIX,), + None, None, None, export_ldif): + log.fatal('test_basic_import_export: Failed to run offline db2ldif') + assert False + + # + # Cleanup - Import the Example LDIF for the other tests in this suite + # + ldif = '%s/Example.ldif' % get_data_dir(topology.standalone.prefix) + import_ldif = topology.standalone.get_ldif_dir() + "/Example.ldif" + shutil.copyfile(ldif, import_ldif) + try: + topology.standalone.tasks.importLDIF(suffix=DEFAULT_SUFFIX, + input_file=import_ldif, + args={TASK_WAIT: True}) + except ValueError: + log.fatal('test_basic_import_export: Online import failed') + assert False + + log.info('test_basic_import_export: PASSED') + + +def test_basic_backup(topology, import_example_ldif): + """Test online and offline back and restore""" + + log.info('Running test_basic_backup...') + + backup_dir = topology.standalone.get_bak_dir() + '/backup_test' + + # Test online backup + try: + topology.standalone.tasks.db2bak(backup_dir=backup_dir, + args={TASK_WAIT: True}) + except ValueError: + log.fatal('test_basic_backup: Online backup failed') + assert False + + # Test online restore + try: + topology.standalone.tasks.bak2db(backup_dir=backup_dir, + args={TASK_WAIT: True}) + except ValueError: + log.fatal('test_basic_backup: Online restore failed') + assert False + + # Test offline backup + if not topology.standalone.db2bak(backup_dir): + log.fatal('test_basic_backup: Offline backup failed') + assert False + + # Test offline restore + if not topology.standalone.bak2db(backup_dir): + log.fatal('test_basic_backup: Offline backup failed') + assert False + + log.info('test_basic_backup: PASSED') + + +def test_basic_acl(topology, import_example_ldif): + """Run some basic access control(ACL) tests""" + + log.info('Running test_basic_acl...') + + DENY_ACI = ('(targetattr = "*") (version 3.0;acl "deny user";deny (all)' + + '(userdn = "ldap:///' + USER1_DN + '");)') + + # + # Add two users + # + try: + topology.standalone.add_s(Entry((USER1_DN, + {'objectclass': "top extensibleObject".split(), + 'sn': '1', + 'cn': 'user 1', + 'uid': 'user1', + 'userpassword': PASSWORD}))) + except ldap.LDAPError as e: + log.fatal('test_basic_acl: Failed to add test user ' + USER1_DN + + ': error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((USER2_DN, + {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'userpassword': PASSWORD}))) + except ldap.LDAPError as e: + log.fatal('test_basic_acl: Failed to add test user ' + USER1_DN + + ': error ' + e.message['desc']) + assert False + + # + # Add an aci that denies USER1 from doing anything, + # and also set the default anonymous access + # + try: + topology.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_ADD, 'aci', DENY_ACI)]) + except ldap.LDAPError as e: + log.fatal('test_basic_acl: Failed to add DENY ACI: error ' + e.message['desc']) + assert False + + # + # Make sure USER1_DN can not search anything, but USER2_dn can... + # + try: + topology.standalone.simple_bind_s(USER1_DN, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_basic_acl: Failed to bind as user1, error: ' + e.message['desc']) + assert False + + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + '(uid=*)') + if entries: + log.fatal('test_basic_acl: User1 was incorrectly able to search the suffix!') + assert False + except ldap.LDAPError as e: + log.fatal('test_basic_acl: Search suffix failed(as user1): ' + e.message['desc']) + assert False + + # Now try user2... Also check that userpassword is stripped out + try: + topology.standalone.simple_bind_s(USER2_DN, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_basic_acl: Failed to bind as user2, error: ' + e.message['desc']) + assert False + + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + '(uid=user1)') + if not entries: + log.fatal('test_basic_acl: User1 incorrectly not able to search the suffix') + assert False + if entries[0].hasAttr('userpassword'): + # The default anonymous access aci should have stripped out userpassword + log.fatal('test_basic_acl: User2 was incorrectly able to see userpassword') + assert False + except ldap.LDAPError as e: + log.fatal('test_basic_acl: Search for user1 failed(as user2): ' + e.message['desc']) + assert False + + # Make sure Root DN can also search (this also resets the bind dn to the + # Root DN for future operations) + try: + topology.standalone.simple_bind_s(DN_DM, PW_DM) + except ldap.LDAPError as e: + log.fatal('test_basic_acl: Failed to bind as ROotDN, error: ' + e.message['desc']) + assert False + + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + '(uid=*)') + if not entries: + log.fatal('test_basic_acl: Root DN incorrectly not able to search the suffix') + assert False + except ldap.LDAPError as e: + log.fatal('test_basic_acl: Search for user1 failed(as user2): ' + e.message['desc']) + assert False + + # + # Cleanup + # + try: + topology.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_DELETE, 'aci', DENY_ACI)]) + except ldap.LDAPError as e: + log.fatal('test_basic_acl: Failed to delete DENY ACI: error ' + e.message['desc']) + assert False + + try: + topology.standalone.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_basic_acl: Failed to delete test entry1: ' + e.message['desc']) + assert False + + try: + topology.standalone.delete_s(USER2_DN) + except ldap.LDAPError as e: + log.fatal('test_basic_acl: Failed to delete test entry2: ' + e.message['desc']) + assert False + + log.info('test_basic_acl: PASSED') + + +def test_basic_searches(topology, import_example_ldif): + """The search results are gathered from testing with Example.ldif""" + + log.info('Running test_basic_searches...') + + filters = (('(uid=scarter)', 1), + ('(uid=tmorris*)', 1), + ('(uid=*hunt*)', 4), + ('(uid=*cope)', 2), + ('(mail=*)', 150), + ('(roomnumber>=4000)', 35), + ('(roomnumber<=4000)', 115), + ('(&(roomnumber>=4000)(roomnumber<=4500))', 18), + ('(!(l=sunnyvale))', 120), + ('(&(uid=t*)(l=santa clara))', 7), + ('(|(uid=k*)(uid=r*))', 18), + ('(|(uid=t*)(l=sunnyvale))', 50), + ('(&(!(uid=r*))(ou=people))', 139), + ('(&(uid=m*)(l=sunnyvale)(ou=people)(mail=*example*)(roomNumber=*))', 3), + ('(&(|(uid=m*)(l=santa clara))(roomNumber=22*))', 5), + ('(&(|(uid=m*)(l=santa clara))(roomNumber=22*)(!(roomnumber=2254)))', 4)) + + for (search_filter, search_result) in filters: + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_filter) + if len(entries) != search_result: + log.fatal('test_basic_searches: An incorrect number of entries\ + was returned from filter (%s): (%d) expected (%d)' % + (search_filter, len(entries), search_result)) + assert False + except ldap.LDAPError as e: + log.fatal('Search failed: ' + e.message['desc']) + assert False + + log.info('test_basic_searches: PASSED') + + +def test_basic_referrals(topology, import_example_ldif): + """Set the server to referral mode, + and make sure we recive the referal error(10) + """ + + log.info('Running test_basic_referrals...') + + SUFFIX_CONFIG = 'cn="dc=example,dc=com",cn=mapping tree,cn=config' + + # + # Set the referral, adn the backend state + # + try: + topology.standalone.modify_s(SUFFIX_CONFIG, + [(ldap.MOD_REPLACE, + 'nsslapd-referral', + 'ldap://localhost.localdomain:389/o%3dnetscaperoot')]) + except ldap.LDAPError as e: + log.fatal('test_basic_referrals: Failed to set referral: error ' + e.message['desc']) + assert False + + try: + topology.standalone.modify_s(SUFFIX_CONFIG, [(ldap.MOD_REPLACE, + 'nsslapd-state', 'Referral')]) + except ldap.LDAPError as e: + log.fatal('test_basic_referrals: Failed to set backend state: error ' + + e.message['desc']) + assert False + + # + # Test that a referral error is returned + # + topology.standalone.set_option(ldap.OPT_REFERRALS, 0) # Do not follow referral + try: + topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, 'objectclass=top') + except ldap.REFERRAL: + pass + except ldap.LDAPError as e: + log.fatal('test_basic_referrals: Search failed: ' + e.message['desc']) + assert False + + # + # Make sure server can restart in referral mode + # + topology.standalone.restart(timeout=10) + + # + # Cleanup + # + try: + topology.standalone.modify_s(SUFFIX_CONFIG, [(ldap.MOD_REPLACE, + 'nsslapd-state', 'Backend')]) + except ldap.LDAPError as e: + log.fatal('test_basic_referrals: Failed to set backend state: error ' + + e.message['desc']) + assert False + + try: + topology.standalone.modify_s(SUFFIX_CONFIG, [(ldap.MOD_DELETE, + 'nsslapd-referral', None)]) + except ldap.LDAPError as e: + log.fatal('test_basic_referrals: Failed to delete referral: error ' + + e.message['desc']) + assert False + topology.standalone.set_option(ldap.OPT_REFERRALS, 1) + + log.info('test_basic_referrals: PASSED') + + +def test_basic_systemctl(topology, import_example_ldif): + """Test systemctl can stop and start the server. Also test that start reports an + error when the instance does not start. Only for RPM builds + """ + + log.info('Running test_basic_systemctl...') + + # We can only use systemctl on RPM installations + if topology.standalone.prefix and topology.standalone.prefix != '/': + return + + data_dir = topology.standalone.getDir(__file__, DATA_DIR) + tmp_dir = '/tmp' + config_dir = topology.standalone.confdir + start_ds = 'sudo systemctl start dirsrv@' + topology.standalone.serverid + '.service' + stop_ds = 'sudo systemctl stop dirsrv@' + topology.standalone.serverid + '.service' + is_running = 'sudo systemctl is-active dirsrv@' + topology.standalone.serverid + '.service' + + # + # Stop the server + # + log.info('Stopping the server...') + rc = os.system(stop_ds) + log.info('Check the status...') + if rc != 0 or os.system(is_running) == 0: + log.fatal('test_basic_systemctl: Failed to stop the server') + assert False + log.info('Stopped the server.') + + # + # Start the server + # + log.info('Starting the server...') + rc = os.system(start_ds) + log.info('Check the status...') + if rc != 0 or os.system(is_running) != 0: + log.fatal('test_basic_systemctl: Failed to start the server') + assert False + log.info('Started the server.') + + # + # Stop the server, break the dse.ldif so a start fails, + # and verify that systemctl detects the failed start + # + log.info('Stopping the server...') + rc = os.system(stop_ds) + log.info('Check the status...') + if rc != 0 or os.system(is_running) == 0: + log.fatal('test_basic_systemctl: Failed to stop the server') + assert False + log.info('Stopped the server before breaking the dse.ldif.') + + shutil.copy(config_dir + '/dse.ldif', tmp_dir) + shutil.copy(data_dir + 'basic/dse.ldif.broken', config_dir + '/dse.ldif') + + log.info('Attempting to start the server with broken dse.ldif...') + rc = os.system(start_ds) + log.info('Check the status...') + if rc == 0 or os.system(is_running) == 0: + log.fatal('test_basic_systemctl: The server incorrectly started') + assert False + log.info('Server failed to start as expected') + time.sleep(5) + + # + # Fix the dse.ldif, and make sure the server starts up, + # and systemctl correctly identifies the successful start + # + shutil.copy(tmp_dir + '/dse.ldif', config_dir) + log.info('Starting the server with good dse.ldif...') + rc = os.system(start_ds) + time.sleep(5) + log.info('Check the status...') + if rc != 0 or os.system(is_running) != 0: + log.fatal('test_basic_systemctl: Failed to start the server') + assert False + log.info('Server started after fixing dse.ldif.') + time.sleep(1) + + log.info('test_basic_systemctl: PASSED') + + +def test_basic_ldapagent(topology, import_example_ldif): + """Test that the ldap agent starts""" + + log.info('Running test_basic_ldapagent...') + + var_dir = topology.standalone.prefix + '/var' + config_file = topology.standalone.prefix + '/etc/dirsrv/config/agent.conf' + cmd = 'sudo %s/ldap-agent %s' % (get_sbin_dir(prefix=topology.standalone.prefix), + config_file) + + agent_config_file = open(config_file, 'w') + agent_config_file.write('agentx-master ' + var_dir + '/agentx/master\n') + agent_config_file.write('agent-logdir ' + var_dir + '/log/dirsrv\n') + agent_config_file.write('server slapd-' + topology.standalone.serverid + '\n') + agent_config_file.close() + + rc = os.system(cmd) + if rc != 0: + log.fatal('test_basic_ldapagent: Failed to start snmp ldap agent: error %d' % rc) + assert False + + log.info('snmp ldap agent started') + + # + # Cleanup - kill the agent + # + pid = check_output(['pidof', '-s', 'ldap-agent-bin']) + log.info('Cleanup - killing agent: ' + pid) + rc = os.system('sudo kill -9 ' + pid) + + log.info('test_basic_ldapagent: PASSED') + + +def test_basic_dse(topology, import_example_ldif): + """Test that the dse.ldif is not wipped out + after the process is killed (bug 910581) + """ + + log.info('Running test_basic_dse...') + + dse_file = topology.standalone.confdir + '/dse.ldif' + pid = check_output(['pidof', '-s', 'ns-slapd']) + os.system('sudo kill -9 ' + pid) + if os.path.getsize(dse_file) == 0: + log.fatal('test_basic_dse: dse.ldif\'s content was incorrectly removed!') + assert False + + topology.standalone.start(timeout=60) + log.info('dse.ldif was not corrupted, and the server was restarted') + + log.info('test_basic_dse: PASSED') + + +@pytest.mark.parametrize("rootdse_attr_name", ROOTDSE_DEF_ATTR_LIST) +def test_def_rootdse_attr(topology, import_example_ldif, rootdse_attr_name): + """Tests that operational attributes + are not returned by default in rootDSE searches + """ + + log.info(" Assert rootdse search hasn't %s attr" % rootdse_attr_name) + try: + entries = topology.standalone.search_s("", ldap.SCOPE_BASE) + entry = str(entries[0]) + assert rootdse_attr_name not in entry + + except ldap.LDAPError as e: + log.fatal('Search failed, error: ' + e.message['desc']) + assert False + + +def test_mod_def_rootdse_attr(topology, import_example_ldif, rootdse_attr): + """Tests that operational attributes are returned + by default in rootDSE searches after config modification + """ + + log.info(" Assert rootdse search has %s attr" % rootdse_attr) + try: + entries = topology.standalone.search_s("", ldap.SCOPE_BASE) + entry = str(entries[0]) + assert rootdse_attr in entry + + except ldap.LDAPError as e: + log.fatal('Search failed, error: ' + e.message['desc']) + assert False + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/betxns/__init__.py b/dirsrvtests/tests/suites/betxns/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/betxns/betxn_test.py b/dirsrvtests/tests/suites/betxns/betxn_test.py new file mode 100644 index 0000000..aa688de --- /dev/null +++ b/dirsrvtests/tests/suites/betxns/betxn_test.py @@ -0,0 +1,243 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +import six +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_betxn_init(topology): + # First enable dynamic plugins - makes plugin testing much easier + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-dynamic-plugins', 'on')]) + except ldap.LDAPError as e: + ldap.error('Failed to enable dynamic plugin!' + e.message['desc']) + assert False + + +def test_betxt_7bit(topology): + ''' + Test that the 7-bit plugin correctly rejects an invlaid update + ''' + + log.info('Running test_betxt_7bit...') + + USER_DN = 'uid=test_entry,' + DEFAULT_SUFFIX + eight_bit_rdn = six.u('uid=Fu\u00c4\u00e8') + BAD_RDN = eight_bit_rdn.encode('utf-8') + + # This plugin should on by default, but just in case... + topology.standalone.plugins.enable(name=PLUGIN_7_BIT_CHECK) + + # Add our test user + try: + topology.standalone.add_s(Entry((USER_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '1', + 'cn': 'test 1', + 'uid': 'test_entry', + 'userpassword': 'password'}))) + except ldap.LDAPError as e: + log.error('Failed to add test user' + USER_DN + ': error ' + e.message['desc']) + assert False + + # Attempt a modrdn, this should fail + try: + topology.standalone.rename_s(USER_DN, BAD_RDN, delold=0) + log.fatal('test_betxt_7bit: Modrdn operation incorrectly succeeded') + assert False + except ldap.LDAPError as e: + log.info('Modrdn failed as expected: error ' + e.message['desc']) + + # Make sure the operation did not succeed, attempt to search for the new RDN + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, BAD_RDN) + if entries: + log.fatal('test_betxt_7bit: Incorrectly found the entry using the invalid RDN') + assert False + except ldap.LDAPError as e: + log.fatal('Error whiles earching for test entry: ' + e.message['desc']) + assert False + + # + # Cleanup - remove the user + # + try: + topology.standalone.delete_s(USER_DN) + except ldap.LDAPError as e: + log.fatal('Failed to delete test entry: ' + e.message['desc']) + assert False + + log.info('test_betxt_7bit: PASSED') + + +def test_betxn_attr_uniqueness(topology): + ''' + Test that we can not add two entries that have the same attr value that is + defined by the plugin. + ''' + + log.info('Running test_betxn_attr_uniqueness...') + + USER1_DN = 'uid=test_entry1,' + DEFAULT_SUFFIX + USER2_DN = 'uid=test_entry2,' + DEFAULT_SUFFIX + + topology.standalone.plugins.enable(name=PLUGIN_ATTR_UNIQUENESS) + + # Add the first entry + try: + topology.standalone.add_s(Entry((USER1_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '1', + 'cn': 'test 1', + 'uid': 'test_entry1', + 'userpassword': 'password1'}))) + except ldap.LDAPError as e: + log.fatal('test_betxn_attr_uniqueness: Failed to add test user: ' + + USER1_DN + ', error ' + e.message['desc']) + assert False + + # Add the second entry with a dupliate uid + try: + topology.standalone.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'test 2', + 'uid': 'test_entry2', + 'uid': 'test_entry1', # Duplicate value + 'userpassword': 'password2'}))) + log.fatal('test_betxn_attr_uniqueness: The second entry was incorrectly added.') + assert False + except ldap.LDAPError as e: + log.error('test_betxn_attr_uniqueness: Failed to add test user as expected: ' + + USER1_DN + ', error ' + e.message['desc']) + + # + # Cleanup - disable plugin, remove test entry + # + topology.standalone.plugins.disable(name=PLUGIN_ATTR_UNIQUENESS) + + try: + topology.standalone.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_betxn_attr_uniqueness: Failed to delete test entry1: ' + + e.message['desc']) + assert False + + log.info('test_betxn_attr_uniqueness: PASSED') + + +def test_betxn_memberof(topology): + ENTRY1_DN = 'cn=group1,' + DEFAULT_SUFFIX + ENTRY2_DN = 'cn=group2,' + DEFAULT_SUFFIX + PLUGIN_DN = 'cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config' + + # Enable and configure memberOf plugin + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'memberofgroupattr', 'member')]) + except ldap.LDAPError as e: + log.fatal('test_betxn_memberof: Failed to update config(member): error ' + e.message['desc']) + assert False + + # Add our test entries + try: + topology.standalone.add_s(Entry((ENTRY1_DN, {'objectclass': "top groupofnames".split(), + 'cn': 'group1'}))) + except ldap.LDAPError as e: + log.error('test_betxn_memberof: Failed to add group1:' + + ENTRY1_DN + ', error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((ENTRY2_DN, {'objectclass': "top groupofnames".split(), + 'cn': 'group1'}))) + except ldap.LDAPError as e: + log.error('test_betxn_memberof: Failed to add group2:' + + ENTRY2_DN + ', error ' + e.message['desc']) + assert False + + # + # Test mod replace + # + + # Add group2 to group1 - it should fail with objectclass violation + try: + topology.standalone.modify_s(ENTRY1_DN, [(ldap.MOD_REPLACE, 'member', ENTRY2_DN)]) + log.fatal('test_betxn_memberof: Group2 was incorrectly allowed to be added to group1') + assert False + except ldap.LDAPError as e: + log.info('test_betxn_memberof: Group2 was correctly rejected (mod replace): error ' + e.message['desc']) + + # + # Test mod add + # + + # Add group2 to group1 - it should fail with objectclass violation + try: + topology.standalone.modify_s(ENTRY1_DN, [(ldap.MOD_ADD, 'member', ENTRY2_DN)]) + log.fatal('test_betxn_memberof: Group2 was incorrectly allowed to be added to group1') + assert False + except ldap.LDAPError as e: + log.info('test_betxn_memberof: Group2 was correctly rejected (mod add): error ' + e.message['desc']) + + # + # Done + # + log.info('test_betxn_memberof: PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/chaining_plugin/__init__.py b/dirsrvtests/tests/suites/chaining_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/chaining_plugin/chaining_test.py b/dirsrvtests/tests/suites/chaining_plugin/chaining_test.py new file mode 100644 index 0000000..dc7807b --- /dev/null +++ b/dirsrvtests/tests/suites/chaining_plugin/chaining_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_chaining_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_chaining_(topology): + ''' + Write a single test here... + ''' + log.info('chaining test suite PASSED') + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/clu/__init__.py b/dirsrvtests/tests/suites/clu/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/clu/clu_test.py b/dirsrvtests/tests/suites/clu/clu_test.py new file mode 100644 index 0000000..231b011 --- /dev/null +++ b/dirsrvtests/tests/suites/clu/clu_test.py @@ -0,0 +1,97 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_clu_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_clu_pwdhash(topology): + ''' + Test the pwdhash script + ''' + + log.info('Running test_clu_pwdhash...') + + cmd = 'pwdhash -s ssha testpassword' + + p = os.popen(cmd) + result = p.readline() + p.close() + + if not result: + log.fatal('test_clu_pwdhash: Failed to run pwdhash') + assert False + + if len(result) < 20: + log.fatal('test_clu_pwdhash: Encrypted password is too short') + assert False + + log.info('pwdhash generated: ' + result) + log.info('test_clu_pwdhash: PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/clu/db2ldif_test.py b/dirsrvtests/tests/suites/clu/db2ldif_test.py new file mode 100644 index 0000000..be4405a --- /dev/null +++ b/dirsrvtests/tests/suites/clu/db2ldif_test.py @@ -0,0 +1,72 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_db2ldif_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/collation_plugin/__init__.py b/dirsrvtests/tests/suites/collation_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/collation_plugin/collatation_test.py b/dirsrvtests/tests/suites/collation_plugin/collatation_test.py new file mode 100644 index 0000000..d915165 --- /dev/null +++ b/dirsrvtests/tests/suites/collation_plugin/collatation_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_collatation_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_collatation_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/config/__init__.py b/dirsrvtests/tests/suites/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/config/config_test.py b/dirsrvtests/tests/suites/config/config_test.py new file mode 100644 index 0000000..4670bb1 --- /dev/null +++ b/dirsrvtests/tests/suites/config/config_test.py @@ -0,0 +1,361 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +DEBUGGING = False +USER_DN = 'uid=test_user,%s' % DEFAULT_SUFFIX + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) + +log = logging.getLogger(__name__) + + +class TopologyReplication(object): + """The Replication Topology Class""" + def __init__(self, master1, master2): + """Init""" + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + """Create Replication Deployment""" + + # Creating master 1... + if DEBUGGING: + master1 = DirSrv(verbose=True) + else: + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + if DEBUGGING: + master2 = DirSrv(verbose=True) + else: + master2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: 'meTo_' + master2.host + ':' + str(master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: 'meTo_' + master1.host + ':' + str(master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + raise + + def fin(): + """If we are debugging just stop the instances, otherwise remove + them + """ + if DEBUGGING: + master1.stop() + master2.stop() + else: + master1.delete() + master2.delete() + + request.addfinalizer(fin) + + # Clear out the tmp dir + master1.clearTmpDir(__file__) + + return TopologyReplication(master1, master2) + + +@pytest.fixture(scope="module") +def big_file(): + TEMP_BIG_FILE = '' + # 1024*1024=1048576 + # B for 1 MiB + # Big for 3 MiB + for x in range(1048576): + TEMP_BIG_FILE += '+' + + return TEMP_BIG_FILE + + +@pytest.fixture +def test_user(topology): + """Add and remove test user""" + + try: + topology.master1.add_s(Entry((USER_DN, { + 'uid': 'test_user', + 'givenName': 'test_user', + 'objectclass': ['top', 'person', + 'organizationalPerson', + 'inetorgperson'], + 'cn': 'test_user', + 'sn': 'test_user'}))) + time.sleep(1) + except ldap.LDAPError as e: + log.fatal('Failed to add user (%s): error (%s)' % (USER_DN, + e.message['desc'])) + raise + + def fin(): + try: + topology.master1.delete_s(USER_DN) + time.sleep(1) + except ldap.LDAPError as e: + log.fatal('Failed to delete user (%s): error (%s)' % ( + USER_DN, + e.message['desc'])) + raise + + +def test_maxbersize_repl(topology, test_user, big_file): + """maxbersize is ignored in the replicated operations. + + :Feature: Config + + :Setup: MMR with two masters, test user, + 1 MiB big value for attribute + + :Steps: 1. Set 20KiB small maxbersize on master2 + 2. Add big value to master2 + 3. Add big value to master1 + + :Assert: Adding the big value to master2 is failed, + adding the big value to master1 is succeed, + the big value is successfully replicated to master2 + """ + log.info("Set nsslapd-maxbersize: 20K to master2") + try: + topology.master2.modify_s("cn=config", [(ldap.MOD_REPLACE, + 'nsslapd-maxbersize', '20480')]) + except ldap.LDAPError as e: + log.error('Failed to set nsslapd-maxbersize == 20480: error ' + + e.message['desc']) + raise + + topology.master2.restart(20) + + log.info('Try to add attribute with a big value to master2 - expect to FAIL') + with pytest.raises(ldap.SERVER_DOWN): + topology.master2.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'jpegphoto', big_file)]) + + topology.master2.restart(20) + topology.master1.restart(20) + + log.info('Try to add attribute with a big value to master1 - expect to PASS') + try: + topology.master1.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'jpegphoto', big_file)]) + except ldap.SERVER_DOWN as e: + log.fatal('Failed to add a big attribute, error: ' + e.message['desc']) + raise + + time.sleep(1) + + log.info('Check if a big value was successfully added to master1') + try: + entries = topology.master1.search_s(USER_DN, ldap.SCOPE_BASE, + '(cn=*)', + ['jpegphoto']) + assert entries[0].data['jpegphoto'] + except ldap.LDAPError as e: + log.fatal('Search failed, error: ' + e.message['desc']) + raise + + log.info('Check if a big value was successfully replicated to master2') + try: + entries = topology.master2.search_s(USER_DN, ldap.SCOPE_BASE, + '(cn=*)', + ['jpegphoto']) + assert entries[0].data['jpegphoto'] + except ldap.LDAPError as e: + log.fatal('Search failed, error: ' + e.message['desc']) + raise + + log.info("Set nsslapd-maxbersize: 2097152 (default) to master2") + try: + topology.master2.modify_s("cn=config", [(ldap.MOD_REPLACE, + 'nsslapd-maxbersize', '2097152')]) + except ldap.LDAPError as e: + log.error('Failed to set nsslapd-maxbersize == 2097152 error ' + + e.message['desc']) + raise + + +def test_config_listen_backport_size(topology): + """We need to check that we can search on nsslapd-listen-backlog-size, + and change its value: to a psoitive number and a negative number. + Verify invalid value is rejected. + """ + + try: + entry = topology.master1.search_s(DN_CONFIG, ldap.SCOPE_BASE, 'objectclass=top', + ['nsslapd-listen-backlog-size']) + default_val = entry[0].data['nsslapd-listen-backlog-size'][0] + assert default_val, 'Failed to get nsslapd-listen-backlog-size from config' + except ldap.LDAPError as e: + log.fatal('Failed to search config, error: ' + e.message('desc')) + raise + + try: + topology.master1.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, + 'nsslapd-listen-backlog-size', + '256')]) + except ldap.LDAPError as e: + log.fatal('Failed to modify config, error: ' + e.message('desc')) + raise + + try: + topology.master1.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, + 'nsslapd-listen-backlog-size', + '-1')]) + except ldap.LDAPError as e: + log.fatal('Failed to modify config(negative value), error: ' + + e.message('desc')) + raise + + with pytest.raises(ldap.LDAPError): + topology.master1.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, + 'nsslapd-listen-backlog-size', + 'ZZ')]) + log.fatal('Invalid value was successfully added') + + # Cleanup - undo what we've done + try: + topology.master1.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, + 'nsslapd-listen-backlog-size', + default_val)]) + except ldap.LDAPError as e: + log.fatal('Failed to reset config, error: ' + e.message('desc')) + raise + + +def test_config_deadlock_policy(topology): + """We need to check that nsslapd-db-deadlock-policy exists, that we can + change the value, and invalid values are rejected + """ + + LDBM_DN = 'cn=config,cn=ldbm database,cn=plugins,cn=config' + default_val = '9' + + try: + entry = topology.master1.search_s(LDBM_DN, ldap.SCOPE_BASE, 'objectclass=top', + ['nsslapd-db-deadlock-policy']) + val = entry[0].data['nsslapd-db-deadlock-policy'][0] + assert val, 'Failed to get nsslapd-db-deadlock-policy from config' + assert val == default_val, 'The wrong derfualt value was present' + except ldap.LDAPError as e: + log.fatal('Failed to search config, error: ' + e.message('desc')) + raise + + # Try a range of valid values + for val in ('0', '5', '9'): + try: + topology.master1.modify_s(LDBM_DN, [(ldap.MOD_REPLACE, + 'nsslapd-db-deadlock-policy', + val)]) + except ldap.LDAPError as e: + log.fatal('Failed to modify config: nsslapd-db-deadlock-policy to (%s), error: %s' % + (val, e.message('desc'))) + raise + + # Try a range of invalid values + for val in ('-1', '10'): + with pytest.raises(ldap.LDAPError): + topology.master1.modify_s(LDBM_DN, [(ldap.MOD_REPLACE, + 'nsslapd-db-deadlock-policy', + val)]) + log.fatal('Able to add invalid value to nsslapd-db-deadlock-policy(%s)' % (val)) + + # Cleanup - undo what we've done + try: + topology.master1.modify_s(LDBM_DN, [(ldap.MOD_REPLACE, + 'nsslapd-db-deadlock-policy', + default_val)]) + except ldap.LDAPError as e: + log.fatal('Failed to reset nsslapd-db-deadlock-policy to the default value(%s), error: %s' % + (default_val, e.message('desc'))) + raise + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/cos_plugin/__init__.py b/dirsrvtests/tests/suites/cos_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/cos_plugin/cos_test.py b/dirsrvtests/tests/suites/cos_plugin/cos_test.py new file mode 100644 index 0000000..f06b9d4 --- /dev/null +++ b/dirsrvtests/tests/suites/cos_plugin/cos_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_cos_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_cos_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/deref_plugin/__init__.py b/dirsrvtests/tests/suites/deref_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/deref_plugin/deref_test.py b/dirsrvtests/tests/suites/deref_plugin/deref_test.py new file mode 100644 index 0000000..0153932 --- /dev/null +++ b/dirsrvtests/tests/suites/deref_plugin/deref_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_deref_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_deref_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/disk_monitoring/__init__.py b/dirsrvtests/tests/suites/disk_monitoring/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/disk_monitoring/disk_monitor_test.py b/dirsrvtests/tests/suites/disk_monitoring/disk_monitor_test.py new file mode 100644 index 0000000..8930ebd --- /dev/null +++ b/dirsrvtests/tests/suites/disk_monitoring/disk_monitor_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_disk_monitor_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_disk_monitor_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/distrib_plugin/__init__.py b/dirsrvtests/tests/suites/distrib_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/distrib_plugin/distrib_test.py b/dirsrvtests/tests/suites/distrib_plugin/distrib_test.py new file mode 100644 index 0000000..101d65c --- /dev/null +++ b/dirsrvtests/tests/suites/distrib_plugin/distrib_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_distrib_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_distrib_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/dna_plugin/__init__.py b/dirsrvtests/tests/suites/dna_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/dna_plugin/dna_test.py b/dirsrvtests/tests/suites/dna_plugin/dna_test.py new file mode 100644 index 0000000..18b871b --- /dev/null +++ b/dirsrvtests/tests/suites/dna_plugin/dna_test.py @@ -0,0 +1,229 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +USER1_DN = 'uid=user1,' + DEFAULT_SUFFIX +USER2_DN = 'uid=user2,' + DEFAULT_SUFFIX +USER3_DN = 'uid=user3,' + DEFAULT_SUFFIX +BUSER1_DN = 'uid=user1,ou=branch1,' + DEFAULT_SUFFIX +BUSER2_DN = 'uid=user2,ou=branch2,' + DEFAULT_SUFFIX +BUSER3_DN = 'uid=user3,ou=branch2,' + DEFAULT_SUFFIX +BRANCH1_DN = 'ou=branch1,' + DEFAULT_SUFFIX +BRANCH2_DN = 'ou=branch2,' + DEFAULT_SUFFIX +GROUP_OU = 'ou=groups,' + DEFAULT_SUFFIX +PEOPLE_OU = 'ou=people,' + DEFAULT_SUFFIX +GROUP_DN = 'cn=group,' + DEFAULT_SUFFIX +CONFIG_AREA = 'nsslapd-pluginConfigArea' + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + # This is useful for analysing the test env. + standalone.db2ldif(bename=DEFAULT_BENAME, suffixes=[DEFAULT_SUFFIX], excludeSuffixes=[], encrypt=False, \ + repl_data=True, outputfile='%s/ldif/%s.ldif' % (standalone.dbdir,SERVERID_STANDALONE )) + standalone.clearBackupFS() + standalone.backupFS() + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def test_dna_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_dna_(topology): + ''' + Write a single test here... + ''' + + # stop the plugin, and start it + topology.standalone.plugins.disable(name=PLUGIN_DNA) + topology.standalone.plugins.enable(name=PLUGIN_DNA) + + CONFIG_DN = 'cn=config,cn=' + PLUGIN_DNA + ',cn=plugins,cn=config' + + log.info('Testing ' + PLUGIN_DNA + '...') + + ############################################################################ + # Configure plugin + ############################################################################ + + try: + topology.standalone.add_s(Entry((CONFIG_DN, { + 'objectclass': 'top dnaPluginConfig'.split(), + 'cn': 'config', + 'dnatype': 'uidNumber', + 'dnafilter': '(objectclass=top)', + 'dnascope': DEFAULT_SUFFIX, + 'dnaMagicRegen': '-1', + 'dnaMaxValue': '50000', + 'dnaNextValue': '1' + }))) + except ldap.ALREADY_EXISTS: + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'dnaNextValue', '1'), + (ldap.MOD_REPLACE, 'dnaMagicRegen', '-1')]) + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to set the DNA plugin: error ' + e.message['desc']) + assert False + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to add config entry: error ' + e.message['desc']) + assert False + + # Do we need to restart for the plugin? + + topology.standalone.restart() + + ############################################################################ + # Test plugin + ############################################################################ + + try: + topology.standalone.add_s(Entry((USER1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to user1: error ' + e.message['desc']) + assert False + + # See if the entry now has the new uidNumber assignment - uidNumber=1 + try: + entries = topology.standalone.search_s(USER1_DN, ldap.SCOPE_BASE, '(uidNumber=1)') + if not entries: + log.fatal('test_dna: user1 was not updated - (looking for uidNumber: 1)') + assert False + except ldap.LDAPError as e: + log.fatal('test_dna: Search for user1 failed: ' + e.message['desc']) + assert False + + # Test the magic regen value + try: + topology.standalone.modify_s(USER1_DN, [(ldap.MOD_REPLACE, 'uidNumber', '-1')]) + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to set the magic reg value: error ' + e.message['desc']) + assert False + + # See if the entry now has the new uidNumber assignment - uidNumber=2 + try: + entries = topology.standalone.search_s(USER1_DN, ldap.SCOPE_BASE, '(uidNumber=2)') + if not entries: + log.fatal('test_dna: user1 was not updated (looking for uidNumber: 2)') + assert False + except ldap.LDAPError as e: + log.fatal('test_dna: Search for user1 failed: ' + e.message['desc']) + assert False + + ################################################################################ + # Change the config + ################################################################################ + + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'dnaMagicRegen', '-2')]) + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to set the magic reg value to -2: error ' + e.message['desc']) + assert False + + ################################################################################ + # Test plugin + ################################################################################ + + # Test the magic regen value + try: + topology.standalone.modify_s(USER1_DN, [(ldap.MOD_REPLACE, 'uidNumber', '-2')]) + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to set the magic reg value: error ' + e.message['desc']) + assert False + + # See if the entry now has the new uidNumber assignment - uidNumber=3 + try: + entries = topology.standalone.search_s(USER1_DN, ldap.SCOPE_BASE, '(uidNumber=3)') + if not entries: + log.fatal('test_dna: user1 was not updated (looking for uidNumber: 3)') + assert False + except ldap.LDAPError as e: + log.fatal('test_dna: Search for user1 failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin dependency + ############################################################################ + + #test_dependency(inst, PLUGIN_AUTOMEMBER) + + ############################################################################ + # Cleanup + ############################################################################ + + try: + topology.standalone.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to delete test entry1: ' + e.message['desc']) + assert False + + topology.standalone.plugins.disable(name=PLUGIN_DNA) + + ############################################################################ + # Test passed + ############################################################################ + + log.info('test_dna: PASS\n') + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/ds_logs/__init__.py b/dirsrvtests/tests/suites/ds_logs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/ds_logs/ds_logs_test.py b/dirsrvtests/tests/suites/ds_logs/ds_logs_test.py new file mode 100644 index 0000000..1f6862d --- /dev/null +++ b/dirsrvtests/tests/suites/ds_logs/ds_logs_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ds_logs_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_ds_logs_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/dynamic-plugins/__init__.py b/dirsrvtests/tests/suites/dynamic-plugins/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/dynamic-plugins/plugin_tests.py b/dirsrvtests/tests/suites/dynamic-plugins/plugin_tests.py new file mode 100644 index 0000000..0a74eef --- /dev/null +++ b/dirsrvtests/tests/suites/dynamic-plugins/plugin_tests.py @@ -0,0 +1,2483 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Dec 09, 2014 + +@author: mreynolds +''' +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +USER1_DN = 'uid=user1,' + DEFAULT_SUFFIX +USER2_DN = 'uid=user2,' + DEFAULT_SUFFIX +USER3_DN = 'uid=user3,' + DEFAULT_SUFFIX +BUSER1_DN = 'uid=user1,ou=branch1,' + DEFAULT_SUFFIX +BUSER2_DN = 'uid=user2,ou=branch2,' + DEFAULT_SUFFIX +BUSER3_DN = 'uid=user3,ou=branch2,' + DEFAULT_SUFFIX +BRANCH1_DN = 'ou=branch1,' + DEFAULT_SUFFIX +BRANCH2_DN = 'ou=branch2,' + DEFAULT_SUFFIX +GROUP_OU = 'ou=groups,' + DEFAULT_SUFFIX +PEOPLE_OU = 'ou=people,' + DEFAULT_SUFFIX +GROUP_DN = 'cn=group,' + DEFAULT_SUFFIX +CONFIG_AREA = 'nsslapd-pluginConfigArea' + +''' + Functional tests for each plugin + + Test: + plugin restarts (test when on and off) + plugin config validation + plugin dependencies + plugin functionality (including plugin tasks) +''' + + +################################################################################ +# +# Test Plugin Dependency +# +################################################################################ +def test_dependency(inst, plugin): + """ + Set the "account usabilty" plugin to depend on this plugin. This plugin + is generic, always enabled, and perfect for our testing + """ + + try: + inst.modify_s('cn=' + PLUGIN_ACCT_USABILITY + ',cn=plugins,cn=config', + [(ldap.MOD_REPLACE, 'nsslapd-plugin-depends-on-named', plugin)]) + + except ldap.LDAPError as e: + log.fatal('test_dependency: Failed to modify ' + PLUGIN_ACCT_USABILITY + ': error ' + e.message['desc']) + assert False + + try: + inst.modify_s('cn=' + plugin + ',cn=plugins,cn=config', + [(ldap.MOD_REPLACE, 'nsslapd-pluginenabled', 'off')]) + + except ldap.UNWILLING_TO_PERFORM: + # failed as expected + pass + else: + # Incorrectly succeeded + log.fatal('test_dependency: Plugin dependency check failed (%s)' % plugin) + assert False + + # Now undo the change + try: + inst.modify_s('cn=' + PLUGIN_ACCT_USABILITY + ',cn=plugins,cn=config', + [(ldap.MOD_DELETE, 'nsslapd-plugin-depends-on-named', None)]) + except ldap.LDAPError as e: + log.fatal('test_dependency: Failed to reset ' + plugin + ': error ' + e.message['desc']) + assert False + + +################################################################################ +# +# Wait for task to complete +# +################################################################################ +def wait_for_task(conn, task_dn): + finished = False + exitcode = 0 + count = 0 + while count < 60: + try: + task_entry = conn.search_s(task_dn, ldap.SCOPE_BASE, 'objectclass=*') + if not task_entry: + log.fatal('wait_for_task: Search failed to find task: ' + task_dn) + assert False + if task_entry[0].hasAttr('nstaskexitcode'): + # task is done + exitcode = task_entry[0].nsTaskExitCode + finished = True + break + except ldap.LDAPError as e: + log.fatal('wait_for_task: Search failed: ' + e.message['desc']) + assert False + + time.sleep(1) + count += 1 + if not finished: + log.fatal('wait_for_task: Task (%s) did not complete!' % task_dn) + assert False + + return exitcode + + +################################################################################ +# +# Test Account Policy Plugin (0) +# +################################################################################ +def test_acctpolicy(inst, args=None): + # stop the plugin, and start it + inst.plugins.disable(name=PLUGIN_ACCT_POLICY) + inst.plugins.enable(name=PLUGIN_ACCT_POLICY) + + if args == "restart": + return True + + CONFIG_DN = 'cn=config,cn=Account Policy Plugin,cn=plugins,cn=config' + + log.info('Testing ' + PLUGIN_ACCT_POLICY + '...') + + ############################################################################ + # Configure plugin + ############################################################################ + + # Add the config entry + try: + inst.add_s(Entry((CONFIG_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'cn': 'config', + 'alwaysrecordlogin': 'yes', + 'stateattrname': 'lastLoginTime' + }))) + except ldap.ALREADY_EXISTS: + try: + inst.modify_s(CONFIG_DN, + [(ldap.MOD_REPLACE, 'alwaysrecordlogin', 'yes'), + (ldap.MOD_REPLACE, 'stateattrname', 'lastLoginTime')]) + except ldap.LDAPError as e: + log.fatal('test_acctpolicy: Failed to modify config entry: error ' + e.message['desc']) + assert False + except ldap.LDAPError as e: + log.fatal('test_acctpolicy: Failed to add config entry: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # Add an entry + time.sleep(1) + try: + inst.add_s(Entry((USER1_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '1', + 'cn': 'user 1', + 'uid': 'user1', + 'userpassword': 'password'}))) + except ldap.LDAPError as e: + log.fatal('test_acctpolicy: Failed to add test user' + USER1_DN + ': error ' + e.message['desc']) + assert False + + # bind as user + try: + inst.simple_bind_s(USER1_DN, "password") + except ldap.LDAPError as e: + log.fatal('test_acctpolicy: Failed to bind as user1: ' + e.message['desc']) + assert False + + # Bind as Root DN + time.sleep(1) + try: + inst.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_acctpolicy: Failed to bind as rootDN: ' + e.message['desc']) + assert False + + # Check lastLoginTime of USER1 + try: + entries = inst.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, 'lastLoginTime=*') + if not entries: + log.fatal('test_acctpolicy: Search failed to find an entry with lastLoginTime.') + assert False + except ldap.LDAPError as e: + log.fatal('test_acctpolicy: Search failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Change config - change the stateAttrName to a new attribute + ############################################################################ + + try: + inst.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'stateattrname', 'testLastLoginTime')]) + + except ldap.LDAPError as e: + log.fatal('test_acctpolicy: Failed to modify config entry: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + time.sleep(1) + # login as user + try: + inst.simple_bind_s(USER1_DN, "password") + except ldap.LDAPError as e: + log.fatal('test_acctpolicy: Failed to bind(2nd) as user1: ' + e.message['desc']) + assert False + + time.sleep(1) + # Bind as Root DN + try: + inst.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_acctpolicy: Failed to bind as rootDN: ' + e.message['desc']) + assert False + + # Check testLastLoginTime was added to USER1 + try: + entries = inst.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(testLastLoginTime=*)') + if not entries: + log.fatal('test_acctpolicy: Search failed to find an entry with testLastLoginTime.') + assert False + except ldap.LDAPError as e: + log.fatal('test_acctpolicy: Search failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin dependency + ############################################################################ + + test_dependency(inst, PLUGIN_ACCT_POLICY) + + ############################################################################ + # Cleanup + ############################################################################ + + try: + inst.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_acctpolicy: Failed to delete test entry: ' + e.message['desc']) + assert False + + ############################################################################ + # Test passed + ############################################################################ + + log.info('test_acctpolicy: PASS\n') + + return + + +################################################################################ +# +# Test Attribute Uniqueness Plugin (1) +# +################################################################################ +def test_attruniq(inst, args=None): + # stop the plugin, and start it + inst.plugins.disable(name=PLUGIN_ATTR_UNIQUENESS) + inst.plugins.enable(name=PLUGIN_ATTR_UNIQUENESS) + + if args == "restart": + return + + log.info('Testing ' + PLUGIN_ATTR_UNIQUENESS + '...') + + ############################################################################ + # Configure plugin + ############################################################################ + + try: + inst.modify_s('cn=' + PLUGIN_ATTR_UNIQUENESS + ',cn=plugins,cn=config', + [(ldap.MOD_REPLACE, 'uniqueness-attribute-name', 'uid')]) + + except ldap.LDAPError as e: + log.fatal('test_attruniq: Failed to configure plugin for "uid": error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # Add an entry + try: + inst.add_s(Entry((USER1_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '1', + 'cn': 'user 1', + 'uid': 'user1', + 'mail': 'user1@example.com', + 'mailAlternateAddress' : 'user1@alt.example.com', + 'userpassword': 'password'}))) + except ldap.LDAPError as e: + log.fatal('test_attruniq: Failed to add test user' + USER1_DN + ': error ' + e.message['desc']) + assert False + + # Add an entry with a duplicate "uid" + try: + inst.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'uid': 'user1', + 'userpassword': 'password'}))) + + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.fatal('test_attruniq: Adding of 2nd entry(uid) incorrectly succeeded') + assert False + + ############################################################################ + # Change config to use "mail" instead of "uid" + ############################################################################ + + try: + inst.modify_s('cn=' + PLUGIN_ATTR_UNIQUENESS + ',cn=plugins,cn=config', + [(ldap.MOD_REPLACE, 'uniqueness-attribute-name', 'mail')]) + + except ldap.LDAPError as e: + log.fatal('test_attruniq: Failed to configure plugin for "mail": error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin - Add an entry, that has a duplicate "mail" value + ############################################################################ + + try: + inst.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mail': 'user1@example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.fatal('test_attruniq: Adding of 2nd entry(mail) incorrectly succeeded') + assert False + + ############################################################################ + # Reconfigure plugin for mail and mailAlternateAddress + ############################################################################ + + try: + inst.modify_s('cn=' + PLUGIN_ATTR_UNIQUENESS + ',cn=plugins,cn=config', + [(ldap.MOD_REPLACE, 'uniqueness-attribute-name', 'mail'), + (ldap.MOD_ADD, 'uniqueness-attribute-name', + 'mailAlternateAddress')]) + + except ldap.LDAPError as e: + log.error('test_attruniq: Failed to reconfigure plugin for "mail mailAlternateAddress": error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin - Add an entry, that has a duplicate "mail" value + ############################################################################ + + try: + inst.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mail': 'user1@example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.error('test_attruniq: Adding of 3rd entry(mail) incorrectly succeeded') + assert False + + ############################################################################ + # Test plugin - Add an entry, that has a duplicate "mailAlternateAddress" value + ############################################################################ + + try: + inst.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mailAlternateAddress': 'user1@alt.example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.error('test_attruniq: Adding of 4th entry(mailAlternateAddress) incorrectly succeeded') + assert False + + ############################################################################ + # Test plugin - Add an entry, that has a duplicate "mail" value conflicting mailAlternateAddress + ############################################################################ + + try: + inst.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mail': 'user1@alt.example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.error('test_attruniq: Adding of 5th entry(mailAlternateAddress) incorrectly succeeded') + assert False + + ############################################################################ + # Test plugin - Add an entry, that has a duplicate "mailAlternateAddress" conflicting mail + ############################################################################ + + try: + inst.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mailAlternateAddress': 'user1@example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.error('test_attruniq: Adding of 6th entry(mail) incorrectly succeeded') + assert False + + ############################################################################ + # Test plugin dependency + ############################################################################ + + test_dependency(inst, PLUGIN_ATTR_UNIQUENESS) + + ############################################################################ + # Cleanup + ############################################################################ + + try: + inst.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_attruniq: Failed to delete test entry: ' + e.message['desc']) + assert False + + ############################################################################ + # Test passed + ############################################################################ + + log.info('test_attruniq: PASS\n') + return + + +################################################################################ +# +# Test Auto Membership Plugin (2) +# +################################################################################ +def test_automember(inst, args=None): + # stop the plugin, and start it + inst.plugins.disable(name=PLUGIN_AUTOMEMBER) + inst.plugins.enable(name=PLUGIN_AUTOMEMBER) + + if args == "restart": + return + + CONFIG_DN = 'cn=config,cn=' + PLUGIN_AUTOMEMBER + ',cn=plugins,cn=config' + + log.info('Testing ' + PLUGIN_AUTOMEMBER + '...') + + ############################################################################ + # Configure plugin + ############################################################################ + + # Add the automember group + try: + inst.add_s(Entry((GROUP_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'cn': 'group' + }))) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to add group: error ' + e.message['desc']) + assert False + + # Add ou=branch1 + try: + inst.add_s(Entry((BRANCH1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'ou': 'branch1' + }))) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to add branch1: error ' + e.message['desc']) + assert False + + # Add ou=branch2 + try: + inst.add_s(Entry((BRANCH2_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'ou': 'branch2' + }))) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to add branch2: error ' + e.message['desc']) + assert False + + # Add the automember config entry + try: + inst.add_s(Entry((CONFIG_DN, { + 'objectclass': 'top autoMemberDefinition'.split(), + 'cn': 'config', + 'autoMemberScope': 'ou=branch1,' + DEFAULT_SUFFIX, + 'autoMemberFilter': 'objectclass=top', + 'autoMemberDefaultGroup': 'cn=group,' + DEFAULT_SUFFIX, + 'autoMemberGroupingAttr': 'member:dn' + }))) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to add config entry: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test the plugin + ############################################################################ + + # Add a user that should get added to the group + try: + inst.add_s(Entry((BUSER1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to add user: error ' + e.message['desc']) + assert False + + # Check the group + try: + entries = inst.search_s(GROUP_DN, ldap.SCOPE_BASE, + '(member=' + BUSER1_DN + ')') + if not entries: + log.fatal('test_automember: Search failed to find member user1') + assert False + except ldap.LDAPError as e: + log.fatal('test_automember: Search failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Change config + ############################################################################ + + try: + inst.modify_s(CONFIG_DN, + [(ldap.MOD_REPLACE, 'autoMemberGroupingAttr', 'uniquemember:dn'), + (ldap.MOD_REPLACE, 'autoMemberScope', 'ou=branch2,' + DEFAULT_SUFFIX)]) + + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to modify config entry: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # Add a user that should get added to the group + try: + inst.add_s(Entry((BUSER2_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user2' + }))) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to user to branch2: error ' + e.message['desc']) + assert False + + # Check the group + try: + entries = inst.search_s(GROUP_DN, ldap.SCOPE_BASE, + '(uniquemember=' + BUSER2_DN + ')') + if not entries: + log.fatal('test_automember: Search failed to find uniquemember user2') + assert False + except ldap.LDAPError as e: + log.fatal('test_automember: Search failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Test Task + ############################################################################ + + # Disable plugin + inst.plugins.disable(name=PLUGIN_AUTOMEMBER) + + # Add an entry that should be picked up by automember - verify it is not(yet) + try: + inst.add_s(Entry((BUSER3_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user3' + }))) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to user3 to branch2: error ' + e.message['desc']) + assert False + + # Check the group - uniquemember should not exist + try: + entries = inst.search_s(GROUP_DN, ldap.SCOPE_BASE, + '(uniquemember=' + BUSER3_DN + ')') + if entries: + log.fatal('test_automember: user3 was incorrectly added to the group') + assert False + except ldap.LDAPError as e: + log.fatal('test_automember: Search failed: ' + e.message['desc']) + assert False + + # Enable plugin + inst.plugins.enable(name=PLUGIN_AUTOMEMBER) + + TASK_DN = 'cn=task-' + str(int(time.time())) + ',cn=automember rebuild membership,cn=tasks,cn=config' + # Add the task + try: + inst.add_s(Entry((TASK_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'basedn': 'ou=branch2,' + DEFAULT_SUFFIX, + 'filter': 'objectclass=top'}))) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to add task: error ' + e.message['desc']) + assert False + + wait_for_task(inst, TASK_DN) + + # Verify the fixup task worked + try: + entries = inst.search_s(GROUP_DN, ldap.SCOPE_BASE, + '(uniquemember=' + BUSER3_DN + ')') + if not entries: + log.fatal('test_automember: user3 was not added to the group') + assert False + except ldap.LDAPError as e: + log.fatal('test_automember: Search failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin dependency + ############################################################################ + + test_dependency(inst, PLUGIN_AUTOMEMBER) + + ############################################################################ + # Cleanup + ############################################################################ + + try: + inst.delete_s(BUSER1_DN) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to delete test entry1: ' + e.message['desc']) + assert False + + try: + inst.delete_s(BUSER2_DN) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to delete test entry2: ' + e.message['desc']) + assert False + + try: + inst.delete_s(BUSER3_DN) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to delete test entry3: ' + e.message['desc']) + assert False + + try: + inst.delete_s(BRANCH1_DN) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to delete branch1: ' + e.message['desc']) + assert False + + try: + inst.delete_s(BRANCH2_DN) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to delete test branch2: ' + e.message['desc']) + assert False + + try: + inst.delete_s(GROUP_DN) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to delete test group: ' + e.message['desc']) + assert False + + try: + inst.delete_s(CONFIG_DN) + except ldap.LDAPError as e: + log.fatal('test_automember: Failed to delete plugin config entry: ' + e.message['desc']) + assert False + + ############################################################################ + # Test passed + ############################################################################ + + log.info('test_automember: PASS\n') + return + + +################################################################################ +# +# Test DNA Plugin (3) +# +################################################################################ +def test_dna(inst, args=None): + # stop the plugin, and start it + inst.plugins.disable(name=PLUGIN_DNA) + inst.plugins.enable(name=PLUGIN_DNA) + + if args == "restart": + return + + CONFIG_DN = 'cn=config,cn=' + PLUGIN_DNA + ',cn=plugins,cn=config' + + log.info('Testing ' + PLUGIN_DNA + '...') + + ############################################################################ + # Configure plugin + ############################################################################ + + try: + inst.add_s(Entry((CONFIG_DN, { + 'objectclass': 'top dnaPluginConfig'.split(), + 'cn': 'config', + 'dnatype': 'uidNumber', + 'dnafilter': '(objectclass=top)', + 'dnascope': DEFAULT_SUFFIX, + 'dnaMagicRegen': '-1', + 'dnaMaxValue': '50000', + 'dnaNextValue': '1' + }))) + except ldap.ALREADY_EXISTS: + try: + inst.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'dnaNextValue', '1'), + (ldap.MOD_REPLACE, 'dnaMagicRegen', '-1')]) + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to set the DNA plugin: error ' + e.message['desc']) + assert False + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to add config entry: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + try: + inst.add_s(Entry((USER1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to user1: error ' + e.message['desc']) + assert False + + # See if the entry now has the new uidNumber assignment - uidNumber=1 + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(uidNumber=1)') + if not entries: + log.fatal('test_dna: user1 was not updated - (looking for uidNumber: 1)') + assert False + except ldap.LDAPError as e: + log.fatal('test_dna: Search for user1 failed: ' + e.message['desc']) + assert False + + # Test the magic regen value + try: + inst.modify_s(USER1_DN, [(ldap.MOD_REPLACE, 'uidNumber', '-1')]) + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to set the magic reg value: error ' + e.message['desc']) + assert False + + # See if the entry now has the new uidNumber assignment - uidNumber=2 + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(uidNumber=2)') + if not entries: + log.fatal('test_dna: user1 was not updated (looking for uidNumber: 2)') + assert False + except ldap.LDAPError as e: + log.fatal('test_dna: Search for user1 failed: ' + e.message['desc']) + assert False + + ################################################################################ + # Change the config + ################################################################################ + + try: + inst.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'dnaMagicRegen', '-2')]) + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to set the magic reg value to -2: error ' + e.message['desc']) + assert False + + ################################################################################ + # Test plugin + ################################################################################ + + # Test the magic regen value + try: + inst.modify_s(USER1_DN, [(ldap.MOD_REPLACE, 'uidNumber', '-2')]) + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to set the magic reg value: error ' + e.message['desc']) + assert False + + # See if the entry now has the new uidNumber assignment - uidNumber=3 + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(uidNumber=3)') + if not entries: + log.fatal('test_dna: user1 was not updated (looking for uidNumber: 3)') + assert False + except ldap.LDAPError as e: + log.fatal('test_dna: Search for user1 failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin dependency + ############################################################################ + + test_dependency(inst, PLUGIN_AUTOMEMBER) + + ############################################################################ + # Cleanup + ############################################################################ + + try: + inst.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_dna: Failed to delete test entry1: ' + e.message['desc']) + assert False + + inst.plugins.disable(name=PLUGIN_DNA) + + ############################################################################ + # Test passed + ############################################################################ + + log.info('test_dna: PASS\n') + + return + + +################################################################################ +# +# Test Linked Attrs Plugin (4) +# +################################################################################ +def test_linkedattrs(inst, args=None): + # stop the plugin, and start it + inst.plugins.disable(name=PLUGIN_LINKED_ATTRS) + inst.plugins.enable(name=PLUGIN_LINKED_ATTRS) + + if args == "restart": + return + + CONFIG_DN = 'cn=config,cn=' + PLUGIN_LINKED_ATTRS + ',cn=plugins,cn=config' + + log.info('Testing ' + PLUGIN_LINKED_ATTRS + '...') + + ############################################################################ + # Configure plugin + ############################################################################ + + # Add test entries + try: + inst.add_s(Entry((USER1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to user1: error ' + e.message['desc']) + assert False + + try: + inst.add_s(Entry((USER2_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user2' + }))) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to user1: error ' + e.message['desc']) + assert False + + # Add the linked attrs config entry + try: + inst.add_s(Entry((CONFIG_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'cn': 'config', + 'linkType': 'directReport', + 'managedType': 'manager' + }))) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to add config entry: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # Set "directReport" should add "manager" to the other entry + try: + inst.modify_s(USER1_DN, [(ldap.MOD_REPLACE, 'directReport', USER2_DN)]) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to add "directReport" to user1: error ' + e.message['desc']) + assert False + + # See if manager was added to the other entry + try: + entries = inst.search_s(USER2_DN, ldap.SCOPE_BASE, '(manager=*)') + if not entries: + log.fatal('test_linkedattrs: user2 missing "manager" attribute') + assert False + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Search for user1 failed: ' + e.message['desc']) + assert False + + # Remove "directReport" should remove "manager" to the other entry + try: + inst.modify_s(USER1_DN, [(ldap.MOD_DELETE, 'directReport', None)]) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to delete directReport: error ' + e.message['desc']) + assert False + + # See if manager was removed + try: + entries = inst.search_s(USER2_DN, ldap.SCOPE_BASE, '(manager=*)') + if entries: + log.fatal('test_linkedattrs: user2 "manager" attribute not removed') + assert False + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Search for user1 failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Change the config - using linkType "indirectReport" now + ############################################################################ + + try: + inst.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'linkType', 'indirectReport')]) + except ldap.LDAPError as e: + log.error('test_linkedattrs: Failed to set linkTypee: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # Make sure the old linkType(directManager) is not working + try: + inst.modify_s(USER1_DN, [(ldap.MOD_REPLACE, 'directReport', USER2_DN)]) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to add "directReport" to user1: error ' + e.message['desc']) + assert False + + # See if manager was added to the other entry, better not be... + try: + entries = inst.search_s(USER2_DN, ldap.SCOPE_BASE, '(manager=*)') + if entries: + log.fatal('test_linkedattrs: user2 had "manager" added unexpectedly') + assert False + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Search for user2 failed: ' + e.message['desc']) + assert False + + # Now, set the new linkType "indirectReport", which should add "manager" to the other entry + try: + inst.modify_s(USER1_DN, [(ldap.MOD_REPLACE, 'indirectReport', USER2_DN)]) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to add "indirectReport" to user1: error ' + e.message['desc']) + assert False + + # See if manager was added to the other entry, better not be + try: + entries = inst.search_s(USER2_DN, ldap.SCOPE_BASE, '(manager=*)') + if not entries: + log.fatal('test_linkedattrs: user2 missing "manager"') + assert False + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Search for user2 failed: ' + e.message['desc']) + assert False + + # Remove "indirectReport" should remove "manager" to the other entry + try: + inst.modify_s(USER1_DN, [(ldap.MOD_DELETE, 'indirectReport', None)]) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to delete directReport: error ' + e.message['desc']) + assert False + + # See if manager was removed + try: + entries = inst.search_s(USER2_DN, ldap.SCOPE_BASE, '(manager=*)') + if entries: + log.fatal('test_linkedattrs: user2 "manager" attribute not removed') + assert False + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Search for user1 failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Test Fixup Task + ############################################################################ + + # Disable plugin and make some updates that would of triggered the plugin + inst.plugins.disable(name=PLUGIN_LINKED_ATTRS) + + try: + inst.modify_s(USER1_DN, [(ldap.MOD_REPLACE, 'indirectReport', USER2_DN)]) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to add "indirectReport" to user1: error ' + e.message['desc']) + assert False + + # The entry should not have a manager attribute + try: + entries = inst.search_s(USER2_DN, ldap.SCOPE_BASE, '(manager=*)') + if entries: + log.fatal('test_linkedattrs: user2 incorrectly has a "manager" attr') + assert False + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Search for user1 failed: ' + e.message['desc']) + assert False + + # Enable the plugin and rerun the task entry + inst.plugins.enable(name=PLUGIN_LINKED_ATTRS) + + # Add the task again + TASK_DN = 'cn=task-' + str(int(time.time())) + ',cn=fixup linked attributes,cn=tasks,cn=config' + try: + inst.add_s(Entry(('cn=task-' + str(int(time.time())) + ',cn=fixup linked attributes,cn=tasks,cn=config', { + 'objectclass': 'top extensibleObject'.split(), + 'basedn': DEFAULT_SUFFIX, + 'filter': 'objectclass=top'}))) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to add task: error ' + e.message['desc']) + assert False + + wait_for_task(inst, TASK_DN) + + # Check if user2 now has a manager attribute now + try: + entries = inst.search_s(USER2_DN, ldap.SCOPE_BASE, '(manager=*)') + if not entries: + log.fatal('test_linkedattrs: task failed: user2 missing "manager" attr') + assert False + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Search for user1 failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin dependency + ############################################################################ + + test_dependency(inst, PLUGIN_LINKED_ATTRS) + + ############################################################################ + # Cleanup + ############################################################################ + + try: + inst.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to delete test entry1: ' + e.message['desc']) + assert False + + try: + inst.delete_s(USER2_DN) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to delete test entry2: ' + e.message['desc']) + assert False + + try: + inst.delete_s(CONFIG_DN) + except ldap.LDAPError as e: + log.fatal('test_linkedattrs: Failed to delete plugin config entry: ' + e.message['desc']) + assert False + + ############################################################################ + # Test passed + ############################################################################ + + log.info('test_linkedattrs: PASS\n') + return + + +################################################################################ +# +# Test MemberOf Plugin (5) +# +################################################################################ +def test_memberof(inst, args=None): + # stop the plugin, and start it + inst.plugins.disable(name=PLUGIN_MEMBER_OF) + inst.plugins.enable(name=PLUGIN_MEMBER_OF) + + if args == "restart": + return + + PLUGIN_DN = 'cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config' + SHARED_CONFIG_DN = 'cn=memberOf Config,' + DEFAULT_SUFFIX + + log.info('Testing ' + PLUGIN_MEMBER_OF + '...') + + ############################################################################ + # Configure plugin + ############################################################################ + + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'memberofgroupattr', 'member')]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to update config(member): error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # Add our test entries + try: + inst.add_s(Entry((USER1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add user1: error ' + e.message['desc']) + assert False + + try: + inst.add_s(Entry((GROUP_DN, { + 'objectclass': 'top groupOfNames groupOfUniqueNames extensibleObject'.split(), + 'cn': 'group', + 'member': USER1_DN + }))) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add group: error ' + e.message['desc']) + assert False + + try: + inst.add_s(Entry((SHARED_CONFIG_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'memberofgroupattr': 'member', + 'memberofattr': 'memberof' + }))) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to shared config entry: error ' + e.message['desc']) + assert False + + # Check if the user now has a "memberOf" attribute + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(memberOf=*)') + if not entries: + log.fatal('test_memberof: user1 missing memberOf') + assert False + except ldap.LDAPError as e: + log.fatal('test_memberof: Search for user1 failed: ' + e.message['desc']) + assert False + + # Remove "member" should remove "memberOf" from the entry + try: + inst.modify_s(GROUP_DN, [(ldap.MOD_DELETE, 'member', None)]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to delete member: error ' + e.message['desc']) + assert False + + # Check that "memberOf" was removed + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(memberOf=*)') + if entries: + log.fatal('test_memberof: user1 incorrectly has memberOf attr') + assert False + except ldap.LDAPError as e: + log.fatal('test_memberof: Search for user1 failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Change the config + ############################################################################ + + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'memberofgroupattr', 'uniquemember')]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to update config(uniquemember): error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + try: + inst.modify_s(GROUP_DN, [(ldap.MOD_REPLACE, 'uniquemember', USER1_DN)]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add uniquemember: error ' + e.message['desc']) + assert False + + # Check if the user now has a "memberOf" attribute + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(memberOf=*)') + if not entries: + log.fatal('test_memberof: user1 missing memberOf') + assert False + except ldap.LDAPError as e: + log.fatal('test_memberof: Search for user1 failed: ' + e.message['desc']) + assert False + + # Remove "uniquemember" should remove "memberOf" from the entry + try: + inst.modify_s(GROUP_DN, [(ldap.MOD_DELETE, 'uniquemember', None)]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to delete member: error ' + e.message['desc']) + assert False + + # Check that "memberOf" was removed + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(memberOf=*)') + if entries: + log.fatal('test_memberof: user1 incorrectly has memberOf attr') + assert False + except ldap.LDAPError as e: + log.fatal('test_memberof: Search for user1 failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Set the shared config entry and test the plugin + ############################################################################ + + # The shared config entry uses "member" - the above test uses "uniquemember" + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, CONFIG_AREA, SHARED_CONFIG_DN)]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to set plugin area: error ' + e.message['desc']) + assert False + + # Delete the test entries then readd them to start with a clean slate + try: + inst.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to delete test entry1: ' + e.message['desc']) + assert False + + try: + inst.delete_s(GROUP_DN) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to delete test group: ' + e.message['desc']) + assert False + + try: + inst.add_s(Entry((USER1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add user1: error ' + e.message['desc']) + assert False + + try: + inst.add_s(Entry((GROUP_DN, { + 'objectclass': 'top groupOfNames groupOfUniqueNames extensibleObject'.split(), + 'cn': 'group', + 'member': USER1_DN + }))) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add group: error ' + e.message['desc']) + assert False + + # Test the shared config + # Check if the user now has a "memberOf" attribute + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(memberOf=*)') + if not entries: + log.fatal('test_memberof: user1 missing memberOf') + assert False + except ldap.LDAPError as e: + log.fatal('test_memberof: Search for user1 failed: ' + e.message['desc']) + assert False + + # Remove "member" should remove "memberOf" from the entry + try: + inst.modify_s(GROUP_DN, [(ldap.MOD_DELETE, 'member', None)]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to delete member: error ' + e.message['desc']) + assert False + + # Check that "memberOf" was removed + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(memberOf=*)') + if entries: + log.fatal('test_memberof: user1 incorrectly has memberOf attr') + assert False + except ldap.LDAPError as e: + log.fatal('test_memberof: Search for user1 failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Change the shared config entry to use 'uniquemember' and test the plugin + ############################################################################ + + try: + inst.modify_s(SHARED_CONFIG_DN, [(ldap.MOD_REPLACE, 'memberofgroupattr', 'uniquemember')]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to set shared plugin entry(uniquemember): error ' + + e.message['desc']) + assert False + + try: + inst.modify_s(GROUP_DN, [(ldap.MOD_REPLACE, 'uniquemember', USER1_DN)]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add uniquemember: error ' + e.message['desc']) + assert False + + # Check if the user now has a "memberOf" attribute + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(memberOf=*)') + if not entries: + log.fatal('test_memberof: user1 missing memberOf') + assert False + except ldap.LDAPError as e: + log.fatal('test_memberof: Search for user1 failed: ' + e.message['desc']) + assert False + + # Remove "uniquemember" should remove "memberOf" from the entry + try: + inst.modify_s(GROUP_DN, [(ldap.MOD_DELETE, 'uniquemember', None)]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to delete member: error ' + e.message['desc']) + assert False + + # Check that "memberOf" was removed + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(memberOf=*)') + if entries: + log.fatal('test_memberof: user1 incorrectly has memberOf attr') + assert False + except ldap.LDAPError as e: + log.fatal('test_memberof: Search for user1 failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Remove shared config from plugin, and retest + ############################################################################ + + # First change the plugin to use member before we move the shared config that uses uniquemember + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'memberofgroupattr', 'member')]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to update config(uniquemember): error ' + e.message['desc']) + assert False + + # Remove shared config from plugin + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, CONFIG_AREA, None)]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add uniquemember: error ' + e.message['desc']) + assert False + + try: + inst.modify_s(GROUP_DN, [(ldap.MOD_REPLACE, 'member', USER1_DN)]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add uniquemember: error ' + e.message['desc']) + assert False + + # Check if the user now has a "memberOf" attribute + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(memberOf=*)') + if not entries: + log.fatal('test_memberof: user1 missing memberOf') + assert False + except ldap.LDAPError as e: + log.fatal('test_memberof: Search for user1 failed: ' + e.message['desc']) + assert False + + # Remove "uniquemember" should remove "memberOf" from the entry + try: + inst.modify_s(GROUP_DN, [(ldap.MOD_DELETE, 'member', None)]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to delete member: error ' + e.message['desc']) + assert False + + # Check that "memberOf" was removed + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(memberOf=*)') + if entries: + log.fatal('test_memberof: user1 incorrectly has memberOf attr') + assert False + except ldap.LDAPError as e: + log.fatal('test_memberof: Search for user1 failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Test Fixup Task + ############################################################################ + + inst.plugins.disable(name=PLUGIN_MEMBER_OF) + + # First change the plugin to use uniquemember + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'memberofgroupattr', 'uniquemember')]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to update config(uniquemember): error ' + e.message['desc']) + assert False + + # Add uniquemember, should not update USER1 + try: + inst.modify_s(GROUP_DN, [(ldap.MOD_REPLACE, 'uniquemember', USER1_DN)]) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add uniquemember: error ' + e.message['desc']) + assert False + + # Check for "memberOf" + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(memberOf=*)') + if entries: + log.fatal('test_memberof: user1 incorrect has memberOf attr') + assert False + except ldap.LDAPError as e: + log.fatal('test_memberof: Search for user1 failed: ' + e.message['desc']) + assert False + + # Enable memberof plugin + inst.plugins.enable(name=PLUGIN_MEMBER_OF) + + ############################################################# + # Test memberOf fixup arg validation: Test the DN and filter + ############################################################# + + # + # Test bad/nonexistant DN + # + TASK_DN = 'cn=task-' + str(int(time.time())) + ',' + DN_MBO_TASK + try: + inst.add_s(Entry((TASK_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'basedn': DEFAULT_SUFFIX + "bad", + 'filter': 'objectclass=top'}))) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add task(bad dn): error ' + + e.message['desc']) + assert False + + exitcode = wait_for_task(inst, TASK_DN) + if exitcode == "0": + # We should an error + log.fatal('test_memberof: Task with invalid DN still reported success') + assert False + + # + # Test invalid DN syntax + # + TASK_DN = 'cn=task-' + str(int(time.time())) + ',' + DN_MBO_TASK + try: + inst.add_s(Entry((TASK_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'basedn': "bad", + 'filter': 'objectclass=top'}))) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add task(invalid dn syntax): ' + + e.message['desc']) + assert False + + exitcode = wait_for_task(inst, TASK_DN) + if exitcode == "0": + # We should an error + log.fatal('test_memberof: Task with invalid DN syntax still reported' + + ' success') + assert False + + # + # Test bad filter (missing closing parenthesis) + # + TASK_DN = 'cn=task-' + str(int(time.time())) + ',' + DN_MBO_TASK + try: + inst.add_s(Entry((TASK_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'basedn': DEFAULT_SUFFIX, + 'filter': '(objectclass=top'}))) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add task(bad filter: error ' + + e.message['desc']) + assert False + + exitcode = wait_for_task(inst, TASK_DN) + if exitcode == "0": + # We should an error + log.fatal('test_memberof: Task with invalid filter still reported ' + + 'success') + assert False + + #################################################### + # Test fixup works + #################################################### + + # + # Run the task and validate that it worked + # + TASK_DN = 'cn=task-' + str(int(time.time())) + ',' + DN_MBO_TASK + try: + inst.add_s(Entry((TASK_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'basedn': DEFAULT_SUFFIX, + 'filter': 'objectclass=top'}))) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to add task: error ' + e.message['desc']) + assert False + + wait_for_task(inst, TASK_DN) + + # Check for "memberOf" + try: + entries = inst.search_s(USER1_DN, ldap.SCOPE_BASE, '(memberOf=*)') + if not entries: + log.fatal('test_memberof: user1 missing memberOf attr') + assert False + except ldap.LDAPError as e: + log.fatal('test_memberof: Search for user1 failed: ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin dependency + ############################################################################ + + test_dependency(inst, PLUGIN_MEMBER_OF) + + ############################################################################ + # Cleanup + ############################################################################ + + try: + inst.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to delete test entry1: ' + e.message['desc']) + assert False + + try: + inst.delete_s(GROUP_DN) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to delete test group: ' + e.message['desc']) + assert False + + try: + inst.delete_s(SHARED_CONFIG_DN) + except ldap.LDAPError as e: + log.fatal('test_memberof: Failed to delete shared config entry: ' + e.message['desc']) + assert False + + ############################################################################ + # Test passed + ############################################################################ + + log.info('test_memberof: PASS\n') + + return + + +################################################################################ +# +# Test Managed Entry Plugin (6) +# +################################################################################ +def test_mep(inst, args=None): + # stop the plugin, and start it + inst.plugins.disable(name=PLUGIN_MANAGED_ENTRY) + inst.plugins.enable(name=PLUGIN_MANAGED_ENTRY) + + if args == "restart": + return + + USER_DN = 'uid=user1,ou=people,' + DEFAULT_SUFFIX + MEP_USER_DN = 'cn=user1,ou=groups,' + DEFAULT_SUFFIX + USER_DN2 = 'uid=user 1,ou=people,' + DEFAULT_SUFFIX + MEP_USER_DN2 = 'uid=user 1,ou=groups,' + DEFAULT_SUFFIX + CONFIG_DN = 'cn=config,cn=' + PLUGIN_MANAGED_ENTRY + ',cn=plugins,cn=config' + TEMPLATE_DN = 'cn=MEP Template,' + DEFAULT_SUFFIX + TEMPLATE_DN2 = 'cn=MEP Template2,' + DEFAULT_SUFFIX + + log.info('Testing ' + PLUGIN_MANAGED_ENTRY + '...') + + ############################################################################ + # Configure plugin + ############################################################################ + + # Add our org units + try: + inst.add_s(Entry((PEOPLE_OU, { + 'objectclass': 'top extensibleObject'.split(), + 'ou': 'people'}))) + except ldap.ALREADY_EXISTS: + pass + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to add people org unit: error ' + e.message['desc']) + assert False + + try: + inst.add_s(Entry((GROUP_OU, { + 'objectclass': 'top extensibleObject'.split(), + 'ou': 'people'}))) + except ldap.ALREADY_EXISTS: + pass + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to add people org unit: error ' + e.message['desc']) + assert False + + # Add the template entry + try: + inst.add_s(Entry((TEMPLATE_DN, { + 'objectclass': 'top mepTemplateEntry extensibleObject'.split(), + 'cn': 'MEP Template', + 'mepRDNAttr': 'cn', + 'mepStaticAttr': 'objectclass: posixGroup|objectclass: extensibleObject'.split('|'), + 'mepMappedAttr': 'cn: $cn|uid: $cn|gidNumber: $uidNumber'.split('|') + }))) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to add template entry: error ' + e.message['desc']) + assert False + + # Add the config entry + try: + inst.add_s(Entry((CONFIG_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'cn': 'config', + 'originScope': PEOPLE_OU, + 'originFilter': 'objectclass=posixAccount', + 'managedBase': GROUP_OU, + 'managedTemplate': TEMPLATE_DN + }))) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to add config entry: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # Add an entry that meets the MEP scope + try: + inst.add_s(Entry((USER_DN, { + 'objectclass': 'top posixAccount extensibleObject'.split(), + 'uid': 'user1', + 'cn': 'user1', + 'uidNumber': '1', + 'gidNumber': '1', + 'homeDirectory': '/home/user1' + }))) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to user1: error ' + e.message['desc']) + assert False + + # Check if a managed group entry was created + try: + inst.search_s(MEP_USER_DN, ldap.SCOPE_BASE, '(objectclass=top)') + except ldap.LDAPError as e: + log.fatal('test_mep: Unable to find MEP entry: ' + e.message['desc']) + assert False + + ############################################################################ + # Change the config + ############################################################################ + + # Add a new template entry + try: + inst.add_s(Entry((TEMPLATE_DN2, { + 'objectclass': 'top mepTemplateEntry extensibleObject'.split(), + 'cn': 'MEP Template2', + 'mepRDNAttr': 'uid', + 'mepStaticAttr': 'objectclass: posixGroup|objectclass: extensibleObject'.split('|'), + 'mepMappedAttr': 'cn: $uid|uid: $cn|gidNumber: $gidNumber'.split('|') + }))) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to add template entry2: error ' + e.message['desc']) + assert False + + # Set the new template dn + try: + inst.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'managedTemplate', TEMPLATE_DN2)]) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to set mep plugin config: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # Add an entry that meets the MEP scope + try: + inst.add_s(Entry((USER_DN2, { + 'objectclass': 'top posixAccount extensibleObject'.split(), + 'uid': 'user 1', + 'cn': 'user 1', + 'uidNumber': '1', + 'gidNumber': '1', + 'homeDirectory': '/home/user2' + }))) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to user2: error ' + e.message['desc']) + assert False + + # Check if a managed group entry was created + try: + inst.search_s(MEP_USER_DN2, ldap.SCOPE_BASE, '(objectclass=top)') + except ldap.LDAPError as e: + log.fatal('test_mep: Unable to find MEP entry2: ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin dependency + ############################################################################ + + test_dependency(inst, PLUGIN_MANAGED_ENTRY) + + ############################################################################ + # Cleanup + ############################################################################ + + try: + inst.delete_s(USER_DN) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to delete test user1: ' + e.message['desc']) + assert False + + try: + inst.delete_s(USER_DN2) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to delete test user 2: ' + e.message['desc']) + assert False + + try: + inst.delete_s(TEMPLATE_DN) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to delete template1: ' + e.message['desc']) + assert False + + inst.plugins.disable(name=PLUGIN_MANAGED_ENTRY) + + try: + inst.delete_s(TEMPLATE_DN2) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to delete template2: ' + e.message['desc']) + assert False + + try: + inst.delete_s(CONFIG_DN) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to delete config: ' + e.message['desc']) + assert False + + ############################################################################ + # Test passed + ############################################################################ + + log.info('test_mep: PASS\n') + return + + +################################################################################ +# +# Test Passthru Plugin (7) +# +################################################################################ +def test_passthru(inst, args=None): + # Passthru is a bit picky about the state of the entry - we can't just restart it + if args == "restart": + return + + # stop the plugin + inst.plugins.disable(name=PLUGIN_PASSTHRU) + + PLUGIN_DN = 'cn=' + PLUGIN_PASSTHRU + ',cn=plugins,cn=config' + PASSTHRU_DN = 'uid=admin,dc=pass,dc=thru' + PASSTHRU_DN2 = 'uid=admin2,dc=pass2,dc=thru' + PASS_SUFFIX1 = 'dc=pass,dc=thru' + PASS_SUFFIX2 = 'dc=pass2,dc=thru' + PASS_BE2 = 'PASS2' + + log.info('Testing ' + PLUGIN_PASSTHRU + '...') + + ############################################################################ + # Add a new "remote" instance, and a user for auth + ############################################################################ + + # Create second instance + passthru_inst = DirSrv(verbose=False) + + # Args for the instance + args_instance[SER_HOST] = LOCALHOST + args_instance[SER_PORT] = 33333 + args_instance[SER_SERVERID_PROP] = 'passthru' + args_instance[SER_CREATION_SUFFIX] = PASS_SUFFIX1 + args_passthru_inst = args_instance.copy() + passthru_inst.allocate(args_passthru_inst) + passthru_inst.create() + passthru_inst.open() + + # Create a second backend + passthru_inst.backend.create(PASS_SUFFIX2, {BACKEND_NAME: PASS_BE2}) + passthru_inst.mappingtree.create(PASS_SUFFIX2, bename=PASS_BE2) + + # Create the top of the tree + try: + passthru_inst.add_s(Entry((PASS_SUFFIX2, { + 'objectclass': 'top domain'.split(), + 'dc': 'pass2'}))) + except ldap.ALREADY_EXISTS: + pass + except ldap.LDAPError as e: + log.fatal('test_passthru: Failed to create suffix entry: error ' + e.message['desc']) + passthru_inst.delete() + assert False + + # Add user to suffix1 + try: + passthru_inst.add_s(Entry((PASSTHRU_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'admin', + 'userpassword': 'password' + }))) + except ldap.LDAPError as e: + log.fatal('test_passthru: Failed to admin1: error ' + e.message['desc']) + passthru_inst.delete() + assert False + + # Add user to suffix 2 + try: + passthru_inst.add_s(Entry((PASSTHRU_DN2, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'admin2', + 'userpassword': 'password' + }))) + except ldap.LDAPError as e: + log.fatal('test_passthru: Failed to admin2 : error ' + e.message['desc']) + passthru_inst.delete() + assert False + + ############################################################################ + # Configure and start plugin + ############################################################################ + + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'nsslapd-pluginenabled', 'on'), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg0', 'ldap://127.0.0.1:33333/dc=pass,dc=thru')]) + except ldap.LDAPError as e: + log.fatal('test_passthru: Failed to set mep plugin config: error ' + e.message['desc']) + passthru_inst.delete() + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # login as user + try: + inst.simple_bind_s(PASSTHRU_DN, "password") + except ldap.LDAPError as e: + log.fatal('test_passthru: pass through bind failed: ' + e.message['desc']) + passthru_inst.delete() + assert False + + ############################################################################ + # Change the config + ############################################################################ + + # login as root DN + try: + inst.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_passthru: pass through bind failed: ' + e.message['desc']) + passthru_inst.delete() + assert False + + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'nsslapd-pluginarg0', 'ldap://127.0.0.1:33333/dc=pass2,dc=thru')]) + except ldap.LDAPError as e: + log.fatal('test_passthru: Failed to set mep plugin config: error ' + e.message['desc']) + passthru_inst.delete() + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # login as user + try: + inst.simple_bind_s(PASSTHRU_DN2, "password") + except ldap.LDAPError as e: + log.fatal('test_passthru: pass through bind failed: ' + e.message['desc']) + passthru_inst.delete() + assert False + + # login as root DN + try: + inst.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_passthru: pass through bind failed: ' + e.message['desc']) + passthru_inst.delete() + assert False + + ############################################################################ + # Test plugin dependency + ############################################################################ + + test_dependency(inst, PLUGIN_PASSTHRU) + + ############################################################################ + # Cleanup + ############################################################################ + + # remove the passthru instance + passthru_inst.delete() + + ############################################################################ + # Test passed + ############################################################################ + + log.info('test_passthru: PASS\n') + + return + + +################################################################################ +# +# Test Referential Integrity Plugin (8) +# +################################################################################ +def test_referint(inst, args=None): + # stop the plugin, and start it + inst.plugins.disable(name=PLUGIN_REFER_INTEGRITY) + inst.plugins.enable(name=PLUGIN_REFER_INTEGRITY) + + if args == "restart": + return + + log.info('Testing ' + PLUGIN_REFER_INTEGRITY + '...') + PLUGIN_DN = 'cn=' + PLUGIN_REFER_INTEGRITY + ',cn=plugins,cn=config' + SHARED_CONFIG_DN = 'cn=RI Config,' + DEFAULT_SUFFIX + + ############################################################################ + # Configure plugin + ############################################################################ + + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'referint-membership-attr', 'member')]) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to configure RI plugin: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # Add some users and a group + try: + inst.add_s(Entry((USER1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to add user1: error ' + e.message['desc']) + assert False + + try: + inst.add_s(Entry((USER2_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user2' + }))) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to add user2: error ' + e.message['desc']) + assert False + + try: + inst.add_s(Entry((GROUP_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'cn': 'group', + 'member': USER1_DN, + 'uniquemember': USER2_DN + }))) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to add group: error ' + e.message['desc']) + assert False + + # Grab the referint log file from the plugin + + try: + entries = inst.search_s(PLUGIN_DN, ldap.SCOPE_BASE, '(objectclass=top)') + REFERINT_LOGFILE = entries[0].getValue('referint-logfile') + except ldap.LDAPError as e: + log.fatal('test_referint: Unable to search plugin entry: ' + e.message['desc']) + assert False + + # Add shared config entry + try: + inst.add_s(Entry((SHARED_CONFIG_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'referint-membership-attr': 'member', + 'referint-update-delay': '0', + 'referint-logfile': REFERINT_LOGFILE, + 'referint-logchanges': '0' + }))) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to shared config entry: error ' + e.message['desc']) + assert False + + # Delete a user + try: + inst.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to delete user1: ' + e.message['desc']) + assert False + + # Check for integrity + try: + entry = inst.search_s(GROUP_DN, ldap.SCOPE_BASE, '(member=' + USER1_DN + ')') + if entry: + log.fatal('test_referint: user1 was not removed from group') + assert False + except ldap.LDAPError as e: + log.fatal('test_referint: Unable to search group: ' + e.message['desc']) + assert False + + ############################################################################ + # Change the config + ############################################################################ + + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'referint-membership-attr', 'uniquemember')]) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to configure RI plugin: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # Delete a user + try: + inst.delete_s(USER2_DN) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to delete user1: ' + e.message['desc']) + assert False + + # Check for integrity + try: + entry = inst.search_s(GROUP_DN, ldap.SCOPE_BASE, '(uniquemember=' + USER2_DN + ')') + if entry: + log.fatal('test_referint: user2 was not removed from group') + assert False + except ldap.LDAPError as e: + log.fatal('test_referint: Unable to search group: ' + e.message['desc']) + assert False + + ############################################################################ + # Set the shared config entry and test the plugin + ############################################################################ + + # The shared config entry uses "member" - the above test used "uniquemember" + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, CONFIG_AREA, SHARED_CONFIG_DN)]) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to set plugin area: error ' + e.message['desc']) + assert False + + # Delete the group, and readd everything + try: + inst.delete_s(GROUP_DN) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to delete group: ' + e.message['desc']) + assert False + + try: + inst.add_s(Entry((USER1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to add user1: error ' + e.message['desc']) + assert False + + try: + inst.add_s(Entry((USER2_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user2' + }))) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to add user2: error ' + e.message['desc']) + assert False + + try: + inst.add_s(Entry((GROUP_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'cn': 'group', + 'member': USER1_DN, + 'uniquemember': USER2_DN + }))) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to add group: error ' + e.message['desc']) + assert False + + # Delete a user + try: + inst.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to delete user1: ' + e.message['desc']) + assert False + + # Check for integrity + try: + entry = inst.search_s(GROUP_DN, ldap.SCOPE_BASE, '(member=' + USER1_DN + ')') + if entry: + log.fatal('test_referint: user1 was not removed from group') + assert False + except ldap.LDAPError as e: + log.fatal('test_referint: Unable to search group: ' + e.message['desc']) + assert False + + ############################################################################ + # Change the shared config entry to use 'uniquemember' and test the plugin + ############################################################################ + + try: + inst.modify_s(SHARED_CONFIG_DN, [(ldap.MOD_REPLACE, 'referint-membership-attr', 'uniquemember')]) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to set shared plugin entry(uniquemember): error ' + + e.message['desc']) + assert False + + # Delete a user + try: + inst.delete_s(USER2_DN) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to delete user1: ' + e.message['desc']) + assert False + + # Check for integrity + try: + entry = inst.search_s(GROUP_DN, ldap.SCOPE_BASE, '(uniquemember=' + USER2_DN + ')') + if entry: + log.fatal('test_referint: user2 was not removed from group') + assert False + except ldap.LDAPError as e: + log.fatal('test_referint: Unable to search group: ' + e.message['desc']) + assert False + + ############################################################################ + # Remove shared config from plugin, and retest + ############################################################################ + + # First change the plugin to use member before we move the shared config that uses uniquemember + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'referint-membership-attr', 'member')]) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to update config(uniquemember): error ' + e.message['desc']) + assert False + + # Remove shared config from plugin + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, CONFIG_AREA, None)]) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to add uniquemember: error ' + e.message['desc']) + assert False + + # Add test user + try: + inst.add_s(Entry((USER1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to add user1: error ' + e.message['desc']) + assert False + + # Add user to group + try: + inst.modify_s(GROUP_DN, [(ldap.MOD_REPLACE, 'member', USER1_DN)]) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to add uniquemember: error ' + e.message['desc']) + assert False + + # Delete a user + try: + inst.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to delete user1: ' + e.message['desc']) + assert False + + # Check for integrity + try: + entry = inst.search_s(GROUP_DN, ldap.SCOPE_BASE, '(member=' + USER1_DN + ')') + if entry: + log.fatal('test_referint: user1 was not removed from group') + assert False + except ldap.LDAPError as e: + log.fatal('test_referint: Unable to search group: ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin dependency + ############################################################################ + + test_dependency(inst, PLUGIN_REFER_INTEGRITY) + + ############################################################################ + # Cleanup + ############################################################################ + + try: + inst.delete_s(GROUP_DN) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to delete group: ' + e.message['desc']) + assert False + + try: + inst.delete_s(SHARED_CONFIG_DN) + except ldap.LDAPError as e: + log.fatal('test_referint: Failed to delete shared config entry: ' + e.message['desc']) + assert False + + ############################################################################ + # Test passed + ############################################################################ + + log.info('test_referint: PASS\n') + + return + + +################################################################################ +# +# Test Retro Changelog Plugin (9) +# +################################################################################ +def test_retrocl(inst, args=None): + # stop the plugin, and start it + inst.plugins.disable(name=PLUGIN_RETRO_CHANGELOG) + inst.plugins.enable(name=PLUGIN_RETRO_CHANGELOG) + + if args == "restart": + return + + log.info('Testing ' + PLUGIN_RETRO_CHANGELOG + '...') + + ############################################################################ + # Configure plugin + ############################################################################ + + # Gather the current change count (it's not 1 once we start the stabilty tests) + try: + entry = inst.search_s(RETROCL_SUFFIX, ldap.SCOPE_SUBTREE, '(changenumber=*)') + except ldap.LDAPError as e: + log.fatal('test_retrocl: Failed to get the count: error ' + e.message['desc']) + assert False + + entry_count = len(entry) + + ############################################################################ + # Test plugin + ############################################################################ + + # Add a user + try: + inst.add_s(Entry((USER1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.fatal('test_retrocl: Failed to add user1: error ' + e.message['desc']) + assert False + + # Check we logged this in the retro cl + try: + entry = inst.search_s(RETROCL_SUFFIX, ldap.SCOPE_SUBTREE, '(changenumber=*)') + if not entry or len(entry) == entry_count: + log.fatal('test_retrocl: changelog not updated') + assert False + except ldap.LDAPError as e: + log.fatal('test_retrocl: Unable to search group: ' + e.message['desc']) + assert False + + entry_count += 1 + + ############################################################################ + # Change the config - disable plugin + ############################################################################ + + inst.plugins.disable(name=PLUGIN_RETRO_CHANGELOG) + + ############################################################################ + # Test plugin + ############################################################################ + + try: + inst.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_retrocl: Failed to delete user1: ' + e.message['desc']) + assert False + + # Check we didn't logged this in the retro cl + try: + entry = inst.search_s(RETROCL_SUFFIX, ldap.SCOPE_SUBTREE, '(changenumber=*)') + if len(entry) != entry_count: + log.fatal('test_retrocl: changelog incorrectly updated - change count: ' + + str(len(entry)) + ' - expected 1') + assert False + except ldap.LDAPError as e: + log.fatal('test_retrocl: Unable to search retro changelog: ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin dependency + ############################################################################ + + inst.plugins.enable(name=PLUGIN_RETRO_CHANGELOG) + test_dependency(inst, PLUGIN_RETRO_CHANGELOG) + + ############################################################################ + # Cleanup + ############################################################################ + + # None + + ############################################################################ + # Test passed + ############################################################################ + + log.info('test_retrocl: PASS\n') + + return + + +################################################################################ +# +# Test Root DN Access Control Plugin (10) +# +################################################################################ +def test_rootdn(inst, args=None): + # stop the plugin, and start it + inst.plugins.disable(name=PLUGIN_ROOTDN_ACCESS) + inst.plugins.enable(name=PLUGIN_ROOTDN_ACCESS) + + if args == "restart": + return + + PLUGIN_DN = 'cn=' + PLUGIN_ROOTDN_ACCESS + ',cn=plugins,cn=config' + + log.info('Testing ' + PLUGIN_ROOTDN_ACCESS + '...') + + ############################################################################ + # Configure plugin + ############################################################################ + + # Add an user and aci to open up cn=config + try: + inst.add_s(Entry((USER1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1', + 'userpassword': 'password' + }))) + except ldap.LDAPError as e: + log.fatal('test_rootdn: Failed to add user1: error ' + e.message['desc']) + assert False + + # Set an aci so we can modify the plugin after ew deny the root dn + ACI = ('(target ="ldap:///cn=config")(targetattr = "*")(version 3.0;acl ' + + '"all access";allow (all)(userdn="ldap:///anyone");)') + try: + inst.modify_s(DN_CONFIG, [(ldap.MOD_ADD, 'aci', ACI)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn: Failed to add aci to config: error ' + e.message['desc']) + assert False + + # Set allowed IP to an unknown host - blocks root dn + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-allow-ip', '10.10.10.10')]) + except ldap.LDAPError as e: + log.fatal('test_rootdn: Failed to set rootDN plugin config: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # Bind as Root DN + failed = False + try: + inst.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + failed = True + + if not failed: + log.fatal('test_rootdn: Root DN was incorrectly able to bind') + assert False + + ############################################################################ + # Change the config + ############################################################################ + + # Bind as the user who can make updates to the config + try: + inst.simple_bind_s(USER1_DN, 'password') + except ldap.LDAPError as e: + log.fatal('test_rootdn: failed to bind as user1') + assert False + + # First, test that invalid plugin changes are rejected + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-deny-ip', '12.12.ZZZ.12')]) + log.fatal('test_rootdn: Incorrectly allowed to add invalid "rootdn-deny-ip: 12.12.ZZZ.12"') + assert False + except ldap.LDAPError: + pass + + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-allow-host', 'host._.com')]) + log.fatal('test_rootdn: Incorrectly allowed to add invalid "rootdn-allow-host: host._.com"') + assert False + except ldap.LDAPError: + pass + + # Remove the restriction + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-allow-ip', None)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn: Failed to set rootDN plugin config: error ' + e.message['desc']) + assert False + + ############################################################################ + # Test plugin + ############################################################################ + + # Bind as Root DN + failed = False + try: + inst.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + failed = True + + if failed: + log.fatal('test_rootdn: Root DN was not able to bind') + assert False + + ############################################################################ + # Test plugin dependency + ############################################################################ + + test_dependency(inst, PLUGIN_ROOTDN_ACCESS) + + ############################################################################ + # Cleanup - remove ACI from cn=config and test user + ############################################################################ + + try: + inst.modify_s(DN_CONFIG, [(ldap.MOD_DELETE, 'aci', ACI)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn: Failed to add aci to config: error ' + e.message['desc']) + assert False + + try: + inst.delete_s(USER1_DN) + except ldap.LDAPError as e: + log.fatal('test_rootdn: Failed to delete user1: ' + e.message['desc']) + assert False + + ############################################################################ + # Test passed + ############################################################################ + + log.info('test_rootdn: PASS\n') + + return + + +# Array of test functions +func_tests = [test_acctpolicy, test_attruniq, test_automember, test_dna, + test_linkedattrs, test_memberof, test_mep, test_passthru, + test_referint, test_retrocl, test_rootdn] + + +def test_all_plugins(inst, args=None): + for func in func_tests: + func(inst, args) + + return + diff --git a/dirsrvtests/tests/suites/dynamic-plugins/stress_tests.py b/dirsrvtests/tests/suites/dynamic-plugins/stress_tests.py new file mode 100644 index 0000000..79a8086 --- /dev/null +++ b/dirsrvtests/tests/suites/dynamic-plugins/stress_tests.py @@ -0,0 +1,148 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Dec 16, 2014 + +@author: mreynolds +''' +import os +import sys +import time +import ldap +import logging +import pytest +import threading +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +NUM_USERS = 250 +GROUP_DN = 'cn=stress-group,' + DEFAULT_SUFFIX + + +def openConnection(inst): + # Open a new connection to our LDAP server + server = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + server.allocate(args_standalone) + server.open() + + return server + + +# Configure Referential Integrity Plugin for stress test +def configureRI(inst): + inst.plugins.enable(name=PLUGIN_REFER_INTEGRITY) + PLUGIN_DN = 'cn=' + PLUGIN_REFER_INTEGRITY + ',cn=plugins,cn=config' + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'referint-membership-attr', 'uniquemember')]) + except ldap.LDAPError as e: + log.fatal('configureRI: Failed to configure RI plugin: error ' + e.message['desc']) + assert False + + +# Configure MemberOf Plugin for stress test +def configureMO(inst): + inst.plugins.enable(name=PLUGIN_MEMBER_OF) + PLUGIN_DN = 'cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config' + try: + inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'memberofgroupattr', 'uniquemember')]) + except ldap.LDAPError as e: + log.fatal('configureMO: Failed to update config(uniquemember): error ' + e.message['desc']) + assert False + + +def cleanup(conn): + try: + conn.delete_s(GROUP_DN) + except ldap.LDAPError as e: + log.fatal('cleanup: failed to delete group (' + GROUP_DN + ') error: ' + e.message['desc']) + assert False + + +class DelUsers(threading.Thread): + def __init__(self, inst, rdnval): + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + self.rdnval = rdnval + + def run(self): + conn = openConnection(self.inst) + idx = 0 + log.info('DelUsers - Deleting ' + str(NUM_USERS) + ' entries (' + self.rdnval + ')...') + while idx < NUM_USERS: + USER_DN = 'uid=' + self.rdnval + str(idx) + ',' + DEFAULT_SUFFIX + try: + conn.delete_s(USER_DN) + except ldap.LDAPError as e: + if e == ldap.UNAVAILABLE or e == ldap.SERVER_DOWN: + log.fatal('DeleteUsers: failed to delete (' + USER_DN + ') error: ' + e.message['desc']) + assert False + + idx += 1 + + conn.close() + log.info('DelUsers - Finished deleting ' + str(NUM_USERS) + ' entries (' + self.rdnval + ').') + + +class AddUsers(threading.Thread): + def __init__(self, inst, rdnval, addToGroup): + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + self.addToGroup = addToGroup + self.rdnval = rdnval + + def run(self): + # Start adding users + conn = openConnection(self.inst) + idx = 0 + + if self.addToGroup: + try: + conn.add_s(Entry((GROUP_DN, + {'objectclass': 'top groupOfNames groupOfUniqueNames extensibleObject'.split(), + 'uid': 'user' + str(idx)}))) + except ldap.LDAPError as e: + if e == ldap.UNAVAILABLE or e == ldap.SERVER_DOWN: + log.fatal('AddUsers: failed to add group (' + USER_DN + ') error: ' + e.message['desc']) + assert False + + log.info('AddUsers - Adding ' + str(NUM_USERS) + ' entries (' + self.rdnval + ')...') + + while idx < NUM_USERS: + USER_DN = 'uid=' + self.rdnval + str(idx) + ',' + DEFAULT_SUFFIX + try: + conn.add_s(Entry((USER_DN, {'objectclass': 'top extensibleObject'.split(), + 'uid': 'user' + str(idx)}))) + except ldap.LDAPError as e: + if e == ldap.UNAVAILABLE or e == ldap.SERVER_DOWN: + log.fatal('AddUsers: failed to add (' + USER_DN + ') error: ' + e.message['desc']) + assert False + + if self.addToGroup: + # Add the user to the group + try: + conn.modify_s(GROUP_DN, [(ldap.MOD_ADD, 'uniquemember', USER_DN)]) + except ldap.LDAPError as e: + if e == ldap.UNAVAILABLE or e == ldap.SERVER_DOWN: + log.fatal('AddUsers: Failed to add user' + USER_DN + ' to group: error ' + e.message['desc']) + assert False + + idx += 1 + + conn.close() + log.info('AddUsers - Finished adding ' + str(NUM_USERS) + ' entries (' + self.rdnval + ').') diff --git a/dirsrvtests/tests/suites/dynamic-plugins/test_dynamic_plugins.py b/dirsrvtests/tests/suites/dynamic-plugins/test_dynamic_plugins.py new file mode 100644 index 0000000..0945cde --- /dev/null +++ b/dirsrvtests/tests/suites/dynamic-plugins/test_dynamic_plugins.py @@ -0,0 +1,481 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Dec 09, 2014 + +@author: mreynolds +''' +import os +import sys +import time +import ldap +import ldap.sasl +import logging +import pytest +import plugin_tests +import stress_tests +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +installation_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +def repl_fail(replica): + # remove replica instance, and assert failure + replica.delete() + assert False + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_dynamic_plugins(topology): + """ + Test Dynamic Plugins - exercise each plugin and its main features, while + changing the configuration without restarting the server. + + Need to test: functionality, stability, and stress. These tests need to run + with replication disabled, and with replication setup with a + second instance. Then test if replication is working, and we have + same entries on each side. + + Functionality - Make sure that as configuration changes are made they take + effect immediately. Cross plugin interaction (e.g. automember/memberOf) + needs to tested, as well as plugin tasks. Need to test plugin + config validation(dependencies, etc). + + Memory Corruption - Restart the plugins many times, and in different orders and test + functionality, and stability. This will excerise the internal + plugin linked lists, dse callbacks, and task handlers. + + Stress - Put the server under load that will trigger multiple plugins(MO, RI, DNA, etc) + Restart various plugins while these operations are going on. Perform this test + 5 times(stress_max_run). + + """ + + REPLICA_PORT = 33334 + RUV_FILTER = '(&(nsuniqueid=ffffffff-ffffffff-ffffffff-ffffffff)(objectclass=nstombstone))' + master_maxcsn = 0 + replica_maxcsn = 0 + msg = ' (no replication)' + replication_run = False + stress_max_runs = 5 + + # First enable dynamic plugins + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-dynamic-plugins', 'on')]) + except ldap.LDAPError as e: + ldap.fatal('Failed to enable dynamic plugin!' + e.message['desc']) + assert False + + # Test that critical plugins can be updated even though the change might not be applied + try: + topology.standalone.modify_s(DN_LDBM, [(ldap.MOD_REPLACE, 'description', 'test')]) + except ldap.LDAPError as e: + ldap.fatal('Failed to apply change to critical plugin' + e.message['desc']) + assert False + + while 1: + # + # First run the tests with replication disabled, then rerun them with replication set up + # + + ############################################################################ + # Test plugin functionality + ############################################################################ + + log.info('####################################################################') + log.info('Testing Dynamic Plugins Functionality' + msg + '...') + log.info('####################################################################\n') + + plugin_tests.test_all_plugins(topology.standalone) + + log.info('####################################################################') + log.info('Successfully Tested Dynamic Plugins Functionality' + msg + '.') + log.info('####################################################################\n') + + ############################################################################ + # Test the stability by exercising the internal lists, callabcks, and task handlers + ############################################################################ + + log.info('####################################################################') + log.info('Testing Dynamic Plugins for Memory Corruption' + msg + '...') + log.info('####################################################################\n') + prev_plugin_test = None + prev_prev_plugin_test = None + + for plugin_test in plugin_tests.func_tests: + # + # Restart the plugin several times (and prev plugins) - work that linked list + # + plugin_test(topology.standalone, "restart") + + if prev_prev_plugin_test: + prev_prev_plugin_test(topology.standalone, "restart") + + plugin_test(topology.standalone, "restart") + + if prev_plugin_test: + prev_plugin_test(topology.standalone, "restart") + + plugin_test(topology.standalone, "restart") + + # Now run the functional test + plugin_test(topology.standalone) + + # Set the previous tests + if prev_plugin_test: + prev_prev_plugin_test = prev_plugin_test + prev_plugin_test = plugin_test + + log.info('####################################################################') + log.info('Successfully Tested Dynamic Plugins for Memory Corruption' + msg + '.') + log.info('####################################################################\n') + + ############################################################################ + # Stress two plugins while restarting it, and while restarting other plugins. + # The goal is to not crash, and have the plugins work after stressing them. + ############################################################################ + + log.info('####################################################################') + log.info('Stressing Dynamic Plugins' + msg + '...') + log.info('####################################################################\n') + + stress_tests.configureMO(topology.standalone) + stress_tests.configureRI(topology.standalone) + + stress_count = 0 + while stress_count < stress_max_runs: + log.info('####################################################################') + log.info('Running stress test' + msg + '. Run (%d/%d)...' % (stress_count + 1, stress_max_runs)) + log.info('####################################################################\n') + + try: + # Launch three new threads to add a bunch of users + add_users = stress_tests.AddUsers(topology.standalone, 'employee', True) + add_users.start() + add_users2 = stress_tests.AddUsers(topology.standalone, 'entry', True) + add_users2.start() + add_users3 = stress_tests.AddUsers(topology.standalone, 'person', True) + add_users3.start() + time.sleep(1) + + # While we are adding users restart the MO plugin and an idle plugin + topology.standalone.plugins.disable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + time.sleep(1) + topology.standalone.plugins.disable(name=PLUGIN_MEMBER_OF) + time.sleep(1) + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.disable(name=PLUGIN_LINKED_ATTRS) + topology.standalone.plugins.enable(name=PLUGIN_LINKED_ATTRS) + time.sleep(1) + topology.standalone.plugins.disable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + time.sleep(2) + topology.standalone.plugins.disable(name=PLUGIN_MEMBER_OF) + time.sleep(1) + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.disable(name=PLUGIN_LINKED_ATTRS) + topology.standalone.plugins.enable(name=PLUGIN_LINKED_ATTRS) + topology.standalone.plugins.disable(name=PLUGIN_MEMBER_OF) + time.sleep(1) + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.disable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + + # Wait for the 'adding' threads to complete + add_users.join() + add_users2.join() + add_users3.join() + + # Now launch three threads to delete the users + del_users = stress_tests.DelUsers(topology.standalone, 'employee') + del_users.start() + del_users2 = stress_tests.DelUsers(topology.standalone, 'entry') + del_users2.start() + del_users3 = stress_tests.DelUsers(topology.standalone, 'person') + del_users3.start() + time.sleep(1) + + # Restart both the MO, RI plugins during these deletes, and an idle plugin + topology.standalone.plugins.disable(name=PLUGIN_REFER_INTEGRITY) + topology.standalone.plugins.disable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.enable(name=PLUGIN_REFER_INTEGRITY) + time.sleep(1) + topology.standalone.plugins.disable(name=PLUGIN_REFER_INTEGRITY) + time.sleep(1) + topology.standalone.plugins.disable(name=PLUGIN_MEMBER_OF) + time.sleep(1) + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + time.sleep(1) + topology.standalone.plugins.enable(name=PLUGIN_REFER_INTEGRITY) + topology.standalone.plugins.disable(name=PLUGIN_LINKED_ATTRS) + topology.standalone.plugins.enable(name=PLUGIN_LINKED_ATTRS) + topology.standalone.plugins.disable(name=PLUGIN_REFER_INTEGRITY) + topology.standalone.plugins.disable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.enable(name=PLUGIN_REFER_INTEGRITY) + time.sleep(2) + topology.standalone.plugins.disable(name=PLUGIN_REFER_INTEGRITY) + time.sleep(1) + topology.standalone.plugins.disable(name=PLUGIN_MEMBER_OF) + time.sleep(1) + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + time.sleep(1) + topology.standalone.plugins.enable(name=PLUGIN_REFER_INTEGRITY) + topology.standalone.plugins.disable(name=PLUGIN_LINKED_ATTRS) + topology.standalone.plugins.enable(name=PLUGIN_LINKED_ATTRS) + + # Wait for the 'deleting' threads to complete + del_users.join() + del_users2.join() + del_users3.join() + + # Now make sure both the MO and RI plugins still work correctly + plugin_tests.func_tests[8](topology.standalone) # RI plugin + plugin_tests.func_tests[5](topology.standalone) # MO plugin + + # Cleanup the stress tests + stress_tests.cleanup(topology.standalone) + + except: + log.info('Stress test failed!') + if replication_run: + repl_fail(replica_inst) + + stress_count += 1 + log.info('####################################################################') + log.info('Successfully Stressed Dynamic Plugins' + msg + + '. Completed (%d/%d)' % (stress_count, stress_max_runs)) + log.info('####################################################################\n') + + if replication_run: + # We're done. + break + else: + # + # Enable replication and run everything one more time + # + log.info('Setting up replication, and rerunning the tests...\n') + + # Create replica instance + replica_inst = DirSrv(verbose=False) + args_instance[SER_HOST] = LOCALHOST + args_instance[SER_PORT] = REPLICA_PORT + args_instance[SER_SERVERID_PROP] = 'replica' + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + + args_replica_inst = args_instance.copy() + replica_inst.allocate(args_replica_inst) + replica_inst.create() + replica_inst.open() + + try: + topology.standalone.replica.enableReplication(suffix=DEFAULT_SUFFIX, + role=REPLICAROLE_MASTER, + replicaId=1) + replica_inst.replica.enableReplication(suffix=DEFAULT_SUFFIX, + role=REPLICAROLE_CONSUMER, + replicaId=65535) + properties = {RA_NAME: r'to_replica', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + + repl_agreement = topology.standalone.agreement.create(suffix=DEFAULT_SUFFIX, + host=LOCALHOST, + port=REPLICA_PORT, + properties=properties) + + if not repl_agreement: + log.fatal("Fail to create a replica agreement") + repl_fail(replica_inst) + + topology.standalone.agreement.init(DEFAULT_SUFFIX, LOCALHOST, REPLICA_PORT) + topology.standalone.waitForReplInit(repl_agreement) + except: + log.info('Failed to setup replication!') + repl_fail(replica_inst) + + replication_run = True + msg = ' (replication enabled)' + time.sleep(1) + + ############################################################################ + # Check replication, and data are in sync, and remove the instance + ############################################################################ + + log.info('Checking if replication is in sync...') + + try: + # Grab master's max CSN + entry = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, RUV_FILTER) + if not entry: + log.error('Failed to find db tombstone entry from master') + repl_fail(replica_inst) + elements = entry[0].getValues('nsds50ruv') + for ruv in elements: + if 'replica 1' in ruv: + parts = ruv.split() + if len(parts) == 5: + master_maxcsn = parts[4] + break + else: + log.error('RUV is incomplete') + repl_fail(replica_inst) + if master_maxcsn == 0: + log.error('Failed to find maxcsn on master') + repl_fail(replica_inst) + + except ldap.LDAPError as e: + log.fatal('Unable to search masterfor db tombstone: ' + e.message['desc']) + repl_fail(replica_inst) + + # Loop on the consumer - waiting for it to catch up + count = 0 + insync = False + while count < 60: + try: + # Grab master's max CSN + entry = replica_inst.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, RUV_FILTER) + if not entry: + log.error('Failed to find db tombstone entry on consumer') + repl_fail(replica_inst) + elements = entry[0].getValues('nsds50ruv') + for ruv in elements: + if 'replica 1' in ruv: + parts = ruv.split() + if len(parts) == 5: + replica_maxcsn = parts[4] + break + if replica_maxcsn == 0: + log.error('Failed to find maxcsn on consumer') + repl_fail(replica_inst) + except ldap.LDAPError as e: + log.fatal('Unable to search for db tombstone on consumer: ' + e.message['desc']) + repl_fail(replica_inst) + + if master_maxcsn == replica_maxcsn: + insync = True + log.info('Replication is in sync.\n') + break + count += 1 + time.sleep(1) + + # Report on replication status + if not insync: + log.error('Consumer not in sync with master!') + repl_fail(replica_inst) + + # + # Verify the databases are identical. There should not be any "user, entry, employee" entries + # + log.info('Checking if the data is the same between the replicas...') + + # Check the master + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + "(|(uid=person*)(uid=entry*)(uid=employee*))") + if len(entries) > 0: + log.error('Master database has incorrect data set!\n') + repl_fail(replica_inst) + except ldap.LDAPError as e: + log.fatal('Unable to search db on master: ' + e.message['desc']) + repl_fail(replica_inst) + + # Check the consumer + try: + entries = replica_inst.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + "(|(uid=person*)(uid=entry*)(uid=employee*))") + if len(entries) > 0: + log.error('Consumer database in not consistent with master database') + repl_fail(replica_inst) + except ldap.LDAPError as e: + log.fatal('Unable to search db on consumer: ' + e.message['desc']) + repl_fail(replica_inst) + + log.info('Data is consistent across the replicas.\n') + + log.info('####################################################################') + log.info('Replication consistency test passed') + log.info('####################################################################\n') + + # Remove the replica instance + replica_inst.delete() + + ############################################################################ + # We made it to the end! + ############################################################################ + + log.info('#####################################################') + log.info('#####################################################') + log.info("Dynamic Plugins Testsuite: Completed Successfully!") + log.info('#####################################################') + log.info('#####################################################\n') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/filter/__init__.py b/dirsrvtests/tests/suites/filter/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/filter/filter_test.py b/dirsrvtests/tests/suites/filter/filter_test.py new file mode 100644 index 0000000..1601c23 --- /dev/null +++ b/dirsrvtests/tests/suites/filter/filter_test.py @@ -0,0 +1,137 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_filter_init(topology): + ''' + Write your testcase here... + ''' + return + + +def test_filter_escaped(topology): + ''' + Test we can search for an '*' in a attribute value. + ''' + + log.info('Running test_filter_escaped...') + + USER1_DN = 'uid=test_entry,' + DEFAULT_SUFFIX + USER2_DN = 'uid=test_entry2,' + DEFAULT_SUFFIX + + try: + topology.standalone.add_s(Entry((USER1_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '1', + 'cn': 'test * me', + 'uid': 'test_entry', + 'userpassword': PASSWORD}))) + except ldap.LDAPError as e: + log.fatal('test_filter_escaped: Failed to add test user ' + USER1_DN + ': error ' + + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'test me', + 'uid': 'test_entry2', + 'userpassword': PASSWORD}))) + except ldap.LDAPError as e: + log.fatal('test_filter_escaped: Failed to add test user ' + USER2_DN + ': error ' + e.message['desc']) + assert False + + try: + entry = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, 'cn=*\**') + if not entry or len(entry) > 1: + log.fatal('test_filter_escaped: Entry was not found using "cn=*\**"') + assert False + except ldap.LDAPError as e: + log.fatal('test_filter_escaped: Failed to search for user(%s), error: %s' % + (USER1_DN, e.message('desc'))) + assert False + + log.info('test_filter_escaped: PASSED') + + +def test_filter_search_original_attrs(topology): + ''' + Search and request attributes with extra characters. The returned entry + should not have these extra characters: "objectclass EXTRA" + ''' + + log.info('Running test_filter_search_original_attrs...') + + try: + entry = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_BASE, + 'objectclass=top', ['objectclass-EXTRA']) + if entry[0].hasAttr('objectclass-EXTRA'): + log.fatal('test_filter_search_original_attrs: Entry does not have the original attribute') + assert False + except ldap.LDAPError as e: + log.fatal('test_filter_search_original_attrs: Failed to search suffix(%s), error: %s' % + (DEFAULT_SUFFIX, e.message('desc'))) + assert False + + log.info('test_filter_search_original_attrs: PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/filter/rfc3673_all_oper_attrs_test.py b/dirsrvtests/tests/suites/filter/rfc3673_all_oper_attrs_test.py new file mode 100644 index 0000000..0fc207e --- /dev/null +++ b/dirsrvtests/tests/suites/filter/rfc3673_all_oper_attrs_test.py @@ -0,0 +1,209 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- + +import os +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +DN_PEOPLE = 'ou=people,%s' % DEFAULT_SUFFIX +DN_ROOT = '' +TEST_USER_NAME = 'all_attrs_test' +TEST_USER_DN = 'uid=%s,%s' % (TEST_USER_NAME, DN_PEOPLE) +TEST_USER_PWD = 'all_attrs_test' + +# Suffix for search, Regular user boolean, List of expected attrs +TEST_PARAMS = [(DN_ROOT, False, [ + 'aci', 'createTimestamp', 'creatorsName', + 'modifiersName', 'modifyTimestamp', 'namingContexts', + 'nsBackendSuffix', 'nsUniqueId', 'subschemaSubentry', + 'supportedControl', 'supportedExtension', + 'supportedFeatures', 'supportedLDAPVersion', + 'supportedSASLMechanisms', 'vendorName', 'vendorVersion' + ]), + (DN_ROOT, True, [ + 'createTimestamp', 'creatorsName', + 'modifiersName', 'modifyTimestamp', 'namingContexts', + 'nsBackendSuffix', 'nsUniqueId', 'subschemaSubentry', + 'supportedControl', 'supportedExtension', + 'supportedFeatures', 'supportedLDAPVersion', + 'supportedSASLMechanisms', 'vendorName', 'vendorVersion' + ]), + (DN_PEOPLE, False, [ + 'aci', 'createTimestamp', 'creatorsName', 'entrydn', + 'entryid', 'modifiersName', 'modifyTimestamp', + 'nsUniqueId', 'numSubordinates', 'parentid' + ]), + (DN_PEOPLE, True, [ + 'createTimestamp', 'creatorsName', 'entrydn', + 'entryid', 'modifyTimestamp', 'nsUniqueId', + 'numSubordinates', 'parentid' + ]), + (TEST_USER_DN, False, [ + 'createTimestamp', 'creatorsName', 'entrydn', + 'entryid', 'modifiersName', 'modifyTimestamp', + 'nsUniqueId', 'parentid' + ]), + (TEST_USER_DN, True, [ + 'createTimestamp', 'creatorsName', 'entrydn', + 'entryid', 'modifyTimestamp', 'nsUniqueId', 'parentid' + ]), + (DN_CONFIG, False, ['numSubordinates', 'passwordHistory'])] + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +@pytest.fixture(scope="module") +def test_user(topology): + """User for binding operation""" + + try: + topology.standalone.add_s(Entry((TEST_USER_DN, { + 'objectclass': 'top person'.split(), + 'objectclass': 'organizationalPerson', + 'objectclass': 'inetorgperson', + 'cn': TEST_USER_NAME, + 'sn': TEST_USER_NAME, + 'userpassword': TEST_USER_PWD, + 'mail': '%s@redhat.com' % TEST_USER_NAME, + 'uid': TEST_USER_NAME + }))) + except ldap.LDAPError as e: + log.error('Failed to add user (%s): error (%s)' % (TEST_USER_DN, + e.message['desc'])) + raise e + + +@pytest.fixture(scope="module") +def user_aci(topology): + """Deny modifiersName attribute for the test user + under whole suffix + """ + + ACI_TARGET = '(targetattr= "modifiersName")' + ACI_ALLOW = '(version 3.0; acl "Deny modifiersName for user"; deny (read)' + ACI_SUBJECT = ' userdn = "ldap:///%s";)' % TEST_USER_DN + ACI_BODY = ACI_TARGET + ACI_ALLOW + ACI_SUBJECT + topology.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_ADD, + 'aci', + ACI_BODY)]) + + +def test_supported_features(topology): + """Verify that OID 1.3.6.1.4.1.4203.1.5.1 is published + in the supportedFeatures [RFC3674] attribute in the rootDSE. + + :Feature: Filter + + :Setup: Standalone instance + + :Steps: 1. Search for 'supportedFeatures' at rootDSE + + :Assert: Value 1.3.6.1.4.1.4203.1.5.1 is presented + """ + + entries = topology.standalone.search_s('', ldap.SCOPE_BASE, + '(objectClass=*)', + ['supportedFeatures']) + supported_value = entries[0].data['supportedfeatures'] + + assert supported_value == ['1.3.6.1.4.1.4203.1.5.1'] + + +@pytest.mark.parametrize('add_attr', ['', '*', 'objectClass']) +@pytest.mark.parametrize('search_suffix,regular_user,oper_attr_list', + TEST_PARAMS) +def test_search_basic(topology, test_user, user_aci, add_attr, + search_suffix, regular_user, oper_attr_list): + """Verify that you can get all expected operational attributes + by a Search Request [RFC2251] with '+' (ASCII 43) filter. + Please see: https://tools.ietf.org/html/rfc3673 + + :Feature: Filter + + :Setup: Standalone instance, test user for binding, + deny one attribute aci for that user + + :Steps: 1. Bind as regular user or Directory Manager + 2. Search with '+' filter and with additionaly + 'objectClass' and '*' attrs too + + :Assert: All expected values were returned, not more + """ + + if regular_user: + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + else: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + search_filter = ['+'] + if add_attr: + search_filter.append(add_attr) + expected_attrs = sorted(oper_attr_list + ['objectClass']) + else: + expected_attrs = sorted(oper_attr_list) + + entries = topology.standalone.search_s(search_suffix, ldap.SCOPE_BASE, + '(objectclass=*)', + search_filter) + found_attrs = sorted(entries[0].data.keys()) + + if add_attr == '*': + # Check that found attrs contain both operational + # and non-operational attributes + assert all(attr in found_attrs + for attr in ['objectClass', expected_attrs[0]]) + else: + assert cmp(found_attrs, expected_attrs) == 0 + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/get_effective_rights/__init__.py b/dirsrvtests/tests/suites/get_effective_rights/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/get_effective_rights/ger_test.py b/dirsrvtests/tests/suites/get_effective_rights/ger_test.py new file mode 100644 index 0000000..57c97c3 --- /dev/null +++ b/dirsrvtests/tests/suites/get_effective_rights/ger_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ger_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_ger_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/gssapi_repl/gssapi_repl_test.py b/dirsrvtests/tests/suites/gssapi_repl/gssapi_repl_test.py new file mode 100644 index 0000000..805dd89 --- /dev/null +++ b/dirsrvtests/tests/suites/gssapi_repl/gssapi_repl_test.py @@ -0,0 +1,217 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +from lib389.mit_krb5 import MitKrb5 + + +######################################### +# +# WARNING!!!!! If this test is failing, and your here to find out why, the +# reason is very likely your hosts file!!!! +# +# IT MUST LOOK LIKE THIS BELOW: Note the unique IPS for each kdc name! +# +# 127.0.0.1 ldapkdc.example.com localhost +# 127.0.1.1 ldapkdc1.example.com +# 127.0.2.1 ldapkdc2.example.com +# +######################################### + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +REALM = "EXAMPLE.COM" + +HOST_MASTER_1 = 'ldapkdc1.example.com' +HOST_MASTER_2 = 'ldapkdc2.example.com' + +class TopologyReplication(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + return + # Create the realm first + krb = MitKrb5(realm=REALM) + if krb.check_realm(): + krb.destroy_realm() + krb.create_realm() + DEBUG = False + + # Creating master 1... + master1 = DirSrv(verbose=DEBUG) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_instance[SER_REALM] = REALM + args_instance[SER_STRICT_HOSTNAME_CHECKING] = False + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() # There is some magic in .create that finds the realm, and adds the keytab for us. + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + master2 = DirSrv(verbose=DEBUG) + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_instance[SER_REALM] = REALM + args_instance[SER_STRICT_HOSTNAME_CHECKING] = False + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # Delete each instance in the end + def fin(): + master1.delete() + master2.delete() + if krb.check_realm(): + krb.destroy_realm() + request.addfinalizer(fin) + + # Clear out the tmp dir + master1.clearTmpDir(__file__) + + return TopologyReplication(master1, master2) + +def _create_machine_ou(inst): + inst.add_s( Entry(( "ou=Machines,%s" % DEFAULT_SUFFIX, { + 'objectClass' : 'top organizationalUnit'.split(), + 'ou' : 'Machines' + } + )) + ) + +def _create_machine_account(inst, name): + # Create the simple security objects for the servers to replicate to + inst.add_s( Entry(( "uid=%s,ou=Machines,%s" % (name, DEFAULT_SUFFIX), + { + 'objectClass' : 'top account'.split(), + 'uid' : name + } + ))) + +def _check_machine_account(inst, name): + r = inst.search_s( 'ou=Machines,%s' % DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=%s)' % name) + if len(r) > 0: + return True + return False + +def _allow_machine_account(inst, name): + # First we need to get the mapping tree dn + mt = inst.mappingtree.list(suffix=DEFAULT_SUFFIX)[0] + inst.modify_s('cn=replica,%s' % mt.dn, [ + (ldap.MOD_REPLACE, 'nsDS5ReplicaBindDN', "uid=%s,ou=Machines,%s" % (name, DEFAULT_SUFFIX)) + ]) + +def test_gssapi_repl(topology): + """ + Create a kdc, then using that, provision two masters which have a gssapi + authenticated replication agreement. + """ + return + master1 = topology.master1 + master2 = topology.master2 + + + # Create the locations on each master for the other to bind to. + _create_machine_ou(master1) + _create_machine_ou(master2) + + _create_machine_account(master1, 'ldap/%s' % HOST_MASTER_1) + _create_machine_account(master1, 'ldap/%s' % HOST_MASTER_2) + _create_machine_account(master2, 'ldap/%s' % HOST_MASTER_1) + _create_machine_account(master2, 'ldap/%s' % HOST_MASTER_2) + + # Set on the cn=replica config to accept the other masters princ mapping under mapping tree + _allow_machine_account(master1, 'ldap/%s' % HOST_MASTER_2) + _allow_machine_account(master2, 'ldap/%s' % HOST_MASTER_1) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + + # Set the replica bind method to sasl gssapi + properties = {RA_NAME: r'meTo_$host:$port', + RA_METHOD: 'SASL/GSSAPI', + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + + # Set the replica bind method to sasl gssapi + properties = {RA_NAME: r'meTo_$host:$port', + RA_METHOD: 'SASL/GSSAPI', + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Add a user to master 1 + _create_machine_account(master1, 'http/one.example.com') + # Check it's on 2 + time.sleep(5) + assert(_check_machine_account(master2, 'http/one.example.com')) + # Add a user to master 2 + _create_machine_account(master2, 'http/two.example.com') + # Check it's on 1 + time.sleep(5) + assert(_check_machine_account(master2, 'http/two.example.com')) + + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/ldapi/__init__.py b/dirsrvtests/tests/suites/ldapi/__init__.py new file mode 100644 index 0000000..40a96af --- /dev/null +++ b/dirsrvtests/tests/suites/ldapi/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/dirsrvtests/tests/suites/ldapi/ldapi_test.py b/dirsrvtests/tests/suites/ldapi/ldapi_test.py new file mode 100644 index 0000000..2c30fc0 --- /dev/null +++ b/dirsrvtests/tests/suites/ldapi/ldapi_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ldapi_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_ldapi_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/linkedattrs_plugin/__init__.py b/dirsrvtests/tests/suites/linkedattrs_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/linkedattrs_plugin/linked_attrs_test.py b/dirsrvtests/tests/suites/linkedattrs_plugin/linked_attrs_test.py new file mode 100644 index 0000000..461da3f --- /dev/null +++ b/dirsrvtests/tests/suites/linkedattrs_plugin/linked_attrs_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_linked_attrs_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_linked_attrs_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/mapping_tree/__init__.py b/dirsrvtests/tests/suites/mapping_tree/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/mapping_tree/mapping_tree_test.py b/dirsrvtests/tests/suites/mapping_tree/mapping_tree_test.py new file mode 100644 index 0000000..d7a436b --- /dev/null +++ b/dirsrvtests/tests/suites/mapping_tree/mapping_tree_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_mapping_tree_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_mapping_tree_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/memberof_plugin/__init__.py b/dirsrvtests/tests/suites/memberof_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/memberof_plugin/memberof_test.py b/dirsrvtests/tests/suites/memberof_plugin/memberof_test.py new file mode 100644 index 0000000..2123a7c --- /dev/null +++ b/dirsrvtests/tests/suites/memberof_plugin/memberof_test.py @@ -0,0 +1,175 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# + +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) +installation1_prefix = None + +MEMBEROF_PLUGIN_DN = ('cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config') +USER1_DN = 'uid=user1,' + DEFAULT_SUFFIX +USER2_DN = 'uid=user2,' + DEFAULT_SUFFIX +GROUP_DN = 'cn=group,' + DEFAULT_SUFFIX + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def test_memberof_auto_add_oc(topology): + """ + Test the auto add objectclass feature. The plugin should add a predefined + objectclass that will allow memberOf to be added to an entry. + """ + + # enable dynamic plugins + try: + topology.standalone.modify_s(DN_CONFIG, + [(ldap.MOD_REPLACE, + 'nsslapd-dynamic-plugins', + 'on')]) + except ldap.LDAPError as e: + ldap.error('Failed to enable dynamic plugins! ' + e.message['desc']) + assert False + + # Enable the plugin + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + + # First test invalid value (config validation) + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + try: + topology.standalone.modify_s(MEMBEROF_PLUGIN_DN, + [(ldap.MOD_REPLACE, + 'memberofAutoAddOC', + 'invalid123')]) + log.fatal('Incorrectly added invalid objectclass!') + assert False + except ldap.UNWILLING_TO_PERFORM: + log.info('Correctly rejected invalid objectclass') + except ldap.LDAPError as e: + ldap.error('Unexpected error adding invalid objectclass - error: ' + e.message['desc']) + assert False + + # Add valid objectclass + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + try: + topology.standalone.modify_s(MEMBEROF_PLUGIN_DN, + [(ldap.MOD_REPLACE, + 'memberofAutoAddOC', + 'inetuser')]) + except ldap.LDAPError as e: + log.fatal('Failed to configure memberOf plugin: error ' + e.message['desc']) + assert False + + # Add two users + try: + topology.standalone.add_s(Entry((USER1_DN, + {'objectclass': 'top', + 'objectclass': 'person', + 'objectclass': 'organizationalPerson', + 'objectclass': 'inetorgperson', + 'sn': 'last', + 'cn': 'full', + 'givenname': 'user1', + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.fatal('Failed to add user1 entry, error: ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((USER2_DN, + {'objectclass': 'top', + 'objectclass': 'person', + 'objectclass': 'organizationalPerson', + 'objectclass': 'inetorgperson', + 'sn': 'last', + 'cn': 'full', + 'givenname': 'user2', + 'uid': 'user2' + }))) + except ldap.LDAPError as e: + log.fatal('Failed to add user2 entry, error: ' + e.message['desc']) + assert False + + # Add a group(that already includes one user + try: + topology.standalone.add_s(Entry((GROUP_DN, + {'objectclass': 'top', + 'objectclass': 'groupOfNames', + 'cn': 'group', + 'member': USER1_DN + }))) + except ldap.LDAPError as e: + log.fatal('Failed to add group entry, error: ' + e.message['desc']) + assert False + + # Add a user to the group + try: + topology.standalone.modify_s(GROUP_DN, + [(ldap.MOD_ADD, + 'member', + USER2_DN)]) + except ldap.LDAPError as e: + log.fatal('Failed to add user2 to group: error ' + e.message['desc']) + assert False + + log.info('Test complete.') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) \ No newline at end of file diff --git a/dirsrvtests/tests/suites/memory_leaks/__init__.py b/dirsrvtests/tests/suites/memory_leaks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/memory_leaks/range_search_test.py b/dirsrvtests/tests/suites/memory_leaks/range_search_test.py new file mode 100644 index 0000000..e3566a4 --- /dev/null +++ b/dirsrvtests/tests/suites/memory_leaks/range_search_test.py @@ -0,0 +1,138 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + def fin(): + standalone.delete() + sbin_dir = get_sbin_dir(prefix=standalone.prefix) + valgrind_disable(sbin_dir) + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_range_search_init(topology): + ''' + Enable retro cl, and valgrind. Since valgrind tests move the ns-slapd binary + around it's important to always "valgrind_disable" before "assert False"ing, + otherwise we leave the wrong ns-slapd in place if there is a failure + ''' + + log.info('Initializing test_range_search...') + + topology.standalone.plugins.enable(name=PLUGIN_RETRO_CHANGELOG) + + # First stop the instance + topology.standalone.stop(timeout=30) + + # Get the sbin directory so we know where to replace 'ns-slapd' + sbin_dir = get_sbin_dir(prefix=topology.standalone.prefix) + + # Enable valgrind + valgrind_enable(sbin_dir) + + # Now start the server with a longer timeout + topology.standalone.start() + + +def test_range_search(topology): + ''' + Add a 100 entries, and run a range search. When we encounter an error we + still need to disable valgrind before exiting + ''' + + log.info('Running test_range_search...') + + success = True + + # Add 100 test entries + for idx in range(1, 100): + idx = str(idx) + USER_DN = 'uid=user' + idx + ',' + DEFAULT_SUFFIX + try: + topology.standalone.add_s(Entry((USER_DN, {'objectclass': "top extensibleObject".split(), + 'uid': 'user' + idx}))) + except ldap.LDAPError as e: + log.fatal('test_range_search: Failed to add test user ' + USER_DN + ': error ' + e.message['desc']) + success = False + time.sleep(1) + + if success: + # Issue range search + try: + topology.standalone.search_s(RETROCL_SUFFIX, ldap.SCOPE_SUBTREE, + '(&(changenumber>=74)(changenumber<=84))') + except ldap.LDAPError as e: + log.fatal('test_range_search: Failed to search retro changelog(%s), error: %s' % + (RETROCL_SUFFIX, e.message('desc'))) + success = False + + if success: + # Get the results file, stop the server, and check for the leak + results_file = valgrind_get_results_file(topology.standalone) + topology.standalone.stop(timeout=30) + if valgrind_check_file(results_file, VALGRIND_LEAK_STR, 'range_candidates'): + log.fatal('test_range_search: Memory leak is still present!') + assert False + + log.info('test_range_search: PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/suites/mep_plugin/__init__.py b/dirsrvtests/tests/suites/mep_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/monitor/__init__.py b/dirsrvtests/tests/suites/monitor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/monitor/monitor_test.py b/dirsrvtests/tests/suites/monitor/monitor_test.py new file mode 100644 index 0000000..c1fc303 --- /dev/null +++ b/dirsrvtests/tests/suites/monitor/monitor_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_monitor_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_monitor_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/paged_results/__init__.py b/dirsrvtests/tests/suites/paged_results/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/paged_results/paged_results_test.py b/dirsrvtests/tests/suites/paged_results/paged_results_test.py new file mode 100644 index 0000000..273d2eb --- /dev/null +++ b/dirsrvtests/tests/suites/paged_results/paged_results_test.py @@ -0,0 +1,1317 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import time +import ldap +import logging +import pytest +from random import sample +from ldap.controls import SimplePagedResultsControl, GetEffectiveRightsControl +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +from sss_control import SSSRequestControl + +DEBUGGING = False + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) + +log = logging.getLogger(__name__) + +TEST_USER_NAME = 'simplepaged_test' +TEST_USER_DN = 'uid={},{}'.format(TEST_USER_NAME, DEFAULT_SUFFIX) +TEST_USER_PWD = 'simplepaged_test' +NEW_SUFFIX_1_NAME = 'test_parent' +NEW_SUFFIX_1 = 'o={}'.format(NEW_SUFFIX_1_NAME) +NEW_SUFFIX_2_NAME = 'child' +NEW_SUFFIX_2 = 'ou={},{}'.format(NEW_SUFFIX_2_NAME, NEW_SUFFIX_1) +NEW_BACKEND_1 = 'parent_base' +NEW_BACKEND_2 = 'child_base' + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +@pytest.fixture(scope="module") +def test_user(topology, request): + """User for binding operation""" + + log.info('Adding user {}'.format(TEST_USER_DN)) + try: + topology.standalone.add_s(Entry((TEST_USER_DN, { + 'objectclass': 'top person'.split(), + 'objectclass': 'organizationalPerson', + 'objectclass': 'inetorgperson', + 'cn': TEST_USER_NAME, + 'sn': TEST_USER_NAME, + 'userpassword': TEST_USER_PWD, + 'mail': '%s@redhat.com' % TEST_USER_NAME, + 'uid': TEST_USER_NAME + }))) + except ldap.LDAPError as e: + log.error('Failed to add user (%s): error (%s)' % (TEST_USER_DN, + e.message['desc'])) + raise e + + def fin(): + log.info('Deleting user {}'.format(TEST_USER_DN)) + topology.standalone.delete_s(TEST_USER_DN) + request.addfinalizer(fin) + + +@pytest.fixture(scope="module") +def new_suffixes(topology): + """Add two suffixes with backends, one is a parent + of the another + """ + + log.info('Adding suffix:{} and backend: {}'.format(NEW_SUFFIX_1, NEW_BACKEND_1)) + topology.standalone.backend.create(NEW_SUFFIX_1, + {BACKEND_NAME: NEW_BACKEND_1}) + topology.standalone.mappingtree.create(NEW_SUFFIX_1, + bename=NEW_BACKEND_1) + try: + topology.standalone.add_s(Entry((NEW_SUFFIX_1, { + 'objectclass': 'top', + 'objectclass': 'organization', + 'o': NEW_SUFFIX_1_NAME + }))) + except ldap.LDAPError as e: + log.error('Failed to add suffix ({}): error ({})'.format(NEW_SUFFIX_1, + e.message['desc'])) + raise + + log.info('Adding suffix:{} and backend: {}'.format(NEW_SUFFIX_2, NEW_BACKEND_2)) + topology.standalone.backend.create(NEW_SUFFIX_2, + {BACKEND_NAME: NEW_BACKEND_2}) + topology.standalone.mappingtree.create(NEW_SUFFIX_2, + bename=NEW_BACKEND_2, + parent=NEW_SUFFIX_1) + + try: + topology.standalone.add_s(Entry((NEW_SUFFIX_2, { + 'objectclass': 'top', + 'objectclass': 'organizationalunit', + 'ou': NEW_SUFFIX_2_NAME + }))) + except ldap.LDAPError as e: + log.error('Failed to add suffix ({}): error ({})'.format(NEW_SUFFIX_2, + e.message['desc'])) + raise + + log.info('Adding ACI to allow our test user to search') + ACI_TARGET = '(targetattr != "userPassword || aci")' + ACI_ALLOW = '(version 3.0; acl "Enable anonymous access";allow (read, search, compare)' + ACI_SUBJECT = '(userdn = "ldap:///anyone");)' + ACI_BODY = ACI_TARGET + ACI_ALLOW + ACI_SUBJECT + + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + topology.standalone.modify_s(NEW_SUFFIX_1, mod) + + +def add_users(topology, users_num, suffix): + """Add users to the default suffix + + Return the list of added user DNs. + """ + + users_list = [] + log.info('Adding %d users' % users_num) + for num in sample(range(1000), users_num): + num_ran = int(round(num)) + USER_NAME = 'test%05d' % num_ran + USER_DN = 'uid=%s,%s' % (USER_NAME, suffix) + users_list.append(USER_DN) + try: + topology.standalone.add_s(Entry((USER_DN, { + 'objectclass': 'top person'.split(), + 'objectclass': 'organizationalPerson', + 'objectclass': 'inetorgperson', + 'cn': USER_NAME, + 'sn': USER_NAME, + 'userpassword': 'pass%s' % num_ran, + 'mail': '%s@redhat.com' % USER_NAME, + 'uid': USER_NAME}))) + except ldap.LDAPError as e: + log.error('Failed to add user (%s): error (%s)' % (USER_DN, + e.message['desc'])) + raise e + return users_list + + +def del_users(topology, users_list): + """Delete users with DNs from given list""" + + log.info('Deleting %d users' % len(users_list)) + for user_dn in users_list: + try: + topology.standalone.delete_s(user_dn) + except ldap.LDAPError as e: + log.error('Failed to delete user (%s): error (%s)' % (user_dn, + e.message['desc'])) + raise e + + +def change_conf_attr(topology, suffix, attr_name, attr_value): + """Change configurational attribute in the given suffix. + + Returns previous attribute value. + """ + + try: + entries = topology.standalone.search_s(suffix, ldap.SCOPE_BASE, + 'objectclass=top', + [attr_name]) + attr_value_bck = entries[0].data.get(attr_name) + log.info('Set %s to %s. Previous value - %s. Modified suffix - %s.' % ( + attr_name, attr_value, attr_value_bck, suffix)) + if attr_value is None: + topology.standalone.modify_s(suffix, [(ldap.MOD_DELETE, + attr_name, + attr_value)]) + else: + topology.standalone.modify_s(suffix, [(ldap.MOD_REPLACE, + attr_name, + attr_value)]) + except ldap.LDAPError as e: + log.error('Failed to change attr value (%s): error (%s)' % (attr_name, + e.message['desc'])) + raise e + + return attr_value_bck + + +def paged_search(topology, suffix, controls, search_flt, searchreq_attrlist): + """Search at the DEFAULT_SUFFIX with ldap.SCOPE_SUBTREE + using Simple Paged Control(should the first item in the + list controls. + Assert that no cookie left at the end. + + Return the list with results summarized from all pages. + """ + + pages = 0 + pctrls = [] + all_results = [] + req_pr_ctrl = controls[0] + log.info('Running simple paged result search with - ' + 'search suffix: {}; filter: {}; attr list {}; ' + 'page_size = {}; controls: {}.'.format(suffix, search_flt, + searchreq_attrlist, + req_pr_ctrl.size, + str(controls))) + msgid = topology.standalone.search_ext(suffix, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + while True: + log.info('Getting page %d' % (pages,)) + rtype, rdata, rmsgid, rctrls = topology.standalone.result3(msgid) + log.debug('Data: {}'.format(rdata)) + all_results.extend(rdata) + pages += 1 + pctrls = [ + c + for c in rctrls + if c.controlType == SimplePagedResultsControl.controlType + ] + + if pctrls: + if pctrls[0].cookie: + # Copy cookie from response control to request control + log.debug('Cookie: {}'.format(pctrls[0].cookie)) + req_pr_ctrl.cookie = pctrls[0].cookie + msgid = topology.standalone.search_ext(suffix, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + else: + break # No more pages available + else: + break + + assert not pctrls[0].cookie + return all_results + + +@pytest.mark.parametrize("page_size,users_num", + [(6, 5), (5, 5), (5, 25)]) +def test_search_success(topology, test_user, page_size, users_num): + """Verify that search with a simple paged results control + returns all entries it should without errors. + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + variated number of users for the search base + + :Steps: 1. Bind as test user + 2. Search through added users with a simple paged control + + :Assert: All users should be found + """ + + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + + all_results = paged_search(topology, DEFAULT_SUFFIX, [req_ctrl], + search_flt, searchreq_attrlist) + + log.info('%d results' % len(all_results)) + assert len(all_results) == len(users_list) + finally: + log.info('Set Directory Manager bind back (test_search_success)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + + + +@pytest.mark.parametrize("page_size,users_num,suffix,attr_name,attr_value,expected_err", [ + (50, 200, 'cn=config,%s' % DN_LDBM, 'nsslapd-idlistscanlimit', '100', + ldap.UNWILLING_TO_PERFORM), + (5, 15, DN_CONFIG, 'nsslapd-timelimit', '20', + ldap.UNAVAILABLE_CRITICAL_EXTENSION), + (21, 50, DN_CONFIG, 'nsslapd-sizelimit', '20', + ldap.SIZELIMIT_EXCEEDED), + (21, 50, DN_CONFIG, 'nsslapd-pagedsizelimit', '5', + ldap.SIZELIMIT_EXCEEDED), + (5, 50, 'cn=config,%s' % DN_LDBM, 'nsslapd-lookthroughlimit', '20', + ldap.ADMINLIMIT_EXCEEDED)]) +def test_search_limits_fail(topology, test_user, page_size, users_num, + suffix, attr_name, attr_value, expected_err): + """Verify that search with a simple paged results control + throws expected exceptoins when corresponding limits are + exceeded. + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + variated number of users for the search base + + :Steps: 1. Bind as test user + 2. Set limit attribute to the value that will cause + an expected exception + 3. Search through added users with a simple paged control + + :Assert: Should fail with appropriate exception + """ + + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + attr_value_bck = change_conf_attr(topology, suffix, attr_name, attr_value) + conf_param_dict = {attr_name: attr_value} + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + controls = [] + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + log.info('Create simple paged results control instance') + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls.append(req_ctrl) + if attr_name == 'nsslapd-idlistscanlimit': + sort_ctrl = SSSRequestControl(True, ['sn']) + controls.append(sort_ctrl) + log.info('Initiate ldapsearch with created control instance') + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + + time_val = conf_param_dict.get('nsslapd-timelimit') + if time_val: + time.sleep(int(time_val) + 10) + + pages = 0 + all_results = [] + pctrls = [] + while True: + log.info('Getting page %d' % (pages,)) + if pages == 0 and (time_val or attr_name in ('nsslapd-lookthroughlimit', + 'nsslapd-pagesizelimit')): + rtype, rdata, rmsgid, rctrls = topology.standalone.result3(msgid) + else: + with pytest.raises(expected_err): + rtype, rdata, rmsgid, rctrls = topology.standalone.result3(msgid) + all_results.extend(rdata) + pages += 1 + pctrls = [ + c + for c in rctrls + if c.controlType == SimplePagedResultsControl.controlType + ] + + if pctrls: + if pctrls[0].cookie: + # Copy cookie from response control to request control + req_ctrl.cookie = pctrls[0].cookie + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + else: + break # No more pages available + else: + break + finally: + if expected_err == ldap.UNAVAILABLE_CRITICAL_EXTENSION: + topology.standalone.open() + + log.info('Set Directory Manager bind back (test_search_limits_fail)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + change_conf_attr(topology, suffix, attr_name, attr_value_bck) + + +def test_search_sort_success(topology, test_user): + """Verify that search with a simple paged results control + and a server side sort control returns all entries + it should without errors. + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + variated number of users for the search base + + :Steps: 1. Bind as test user + 2. Search through added users with a simple paged control + and a server side sort control + + :Assert: All users should be found and sorted + """ + + users_num = 50 + page_size = 5 + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + sort_ctrl = SSSRequestControl(True, ['sn']) + + log.info('Initiate ldapsearch with created control instance') + log.info('Collect data with sorting') + controls = [req_ctrl, sort_ctrl] + results_sorted = paged_search(topology, DEFAULT_SUFFIX, controls, + search_flt, searchreq_attrlist) + + log.info('Substring numbers from user DNs') + r_nums = map(lambda x: int(x[0][8:13]), results_sorted) + + log.info('Assert that list is sorted') + assert all(r_nums[i] <= r_nums[i+1] for i in range(len(r_nums)-1)) + finally: + log.info('Set Directory Manager bind back (test_search_sort_success)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + + +def test_search_abandon(topology, test_user): + """Verify that search with simple paged results control + can be abandon + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + variated number of users for the search base + + :Steps: 1. Bind as test user + 2. Search through added users with a simple paged control + 3. Abandon the search + + :Assert: It will throw an ldap.TIMEOUT exception, while trying + to get the rest of the search results + """ + + users_num = 10 + page_size = 2 + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + log.info('Create simple paged results control instance') + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + log.info('Initiate a search with a paged results control') + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + log.info('Abandon the search') + topology.standalone.abandon(msgid) + + log.info('Expect an ldap.TIMEOUT exception, while trying to get the search results') + with pytest.raises(ldap.TIMEOUT): + topology.standalone.result3(msgid, timeout=5) + finally: + log.info('Set Directory Manager bind back (test_search_abandon)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + + +def test_search_with_timelimit(topology, test_user): + """Verify that after performing multiple simple paged searches + to completion, each with a timelimit, it wouldn't fail, if we sleep + for a time more than the timelimit. + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + variated number of users for the search base + + :Steps: 1. Bind as test user + 2. Search through added users with a simple paged control + and timelimit set to 5 + 3. When the returned cookie is empty, wait 10 seconds + 4. Perform steps 2 and 3 three times in a row + + :Assert: No error happens + """ + + users_num = 100 + page_size = 50 + timelimit = 5 + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + log.info('Create simple paged results control instance') + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + for ii in range(3): + log.info('Iteration %d' % ii) + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls, + timeout=timelimit) + + pages = 0 + pctrls = [] + while True: + log.info('Getting page %d' % (pages,)) + rtype, rdata, rmsgid, rctrls = topology.standalone.result3(msgid) + pages += 1 + pctrls = [ + c + for c in rctrls + if c.controlType == SimplePagedResultsControl.controlType + ] + + if pctrls: + if pctrls[0].cookie: + # Copy cookie from response control to request control + req_ctrl.cookie = pctrls[0].cookie + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls, + timeout=timelimit) + else: + log.info('Done with this search - sleeping %d seconds' % ( + timelimit * 2)) + time.sleep(timelimit * 2) + break # No more pages available + else: + break + finally: + log.info('Set Directory Manager bind back (test_search_with_timelimit)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + + +@pytest.mark.parametrize('aci_subject', + ('dns = "localhost.localdomain"', + 'ip = "::1" or ip = "127.0.0.1"')) +def test_search_dns_ip_aci(topology, test_user, aci_subject): + """Verify that after performing multiple simple paged searches + to completion on the suffix with DNS or IP based ACI + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + variated number of users for the search base + + :Steps: 1. Back up and remove all previous ACI from suffix + 2. Add an anonymous ACI for DNS check + 3. Bind as test user + 4. Search through added users with a simple paged control + 5. Perform steps 4 three times in a row + 6. Return ACI to the initial state + 7. Go through all steps onece again, but use IP subjectdn + insted of DNS + + :Assert: No error happens, all users should be found and sorted + """ + + users_num = 100 + page_size = 5 + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + + try: + log.info('Back up current suffix ACI') + acis_bck = topology.standalone.aci.list(DEFAULT_SUFFIX, ldap.SCOPE_BASE) + + log.info('Add test ACI') + ACI_TARGET = '(targetattr != "userPassword")' + ACI_ALLOW = '(version 3.0;acl "Anonymous access within domain"; allow (read,compare,search)' + ACI_SUBJECT = '(userdn = "ldap:///anyone") and (%s);)' % aci_subject + ACI_BODY = ACI_TARGET + ACI_ALLOW + ACI_SUBJECT + try: + topology.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_REPLACE, + 'aci', + ACI_BODY)]) + except ldap.LDAPError as e: + log.fatal('Failed to add ACI: error (%s)' % (e.message['desc'])) + raise e + + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + log.info('Create simple paged results control instance') + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + log.info('Initiate three searches with a paged results control') + for ii in range(3): + log.info('%d search' % (ii + 1)) + all_results = paged_search(topology, DEFAULT_SUFFIX, controls, + search_flt, searchreq_attrlist) + log.info('%d results' % len(all_results)) + assert len(all_results) == len(users_list) + log.info('If we are here, then no error has happened. We are good.') + + finally: + log.info('Set Directory Manager bind back (test_search_dns_ip_aci)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + log.info('Restore ACI') + topology.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_DELETE, + 'aci', + None)]) + for aci in acis_bck: + topology.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_ADD, + 'aci', + aci.getRawAci())]) + del_users(topology, users_list) + + +def test_search_multiple_paging(topology, test_user): + """Verify that after performing multiple simple paged searches + on a single connection without a complition, it wouldn't fail. + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + variated number of users for the search base + + :Steps: 1. Bind as test user + 2. Initiate the search with a simple paged control + 3. Acquire the returned cookie only one time + 4. Perform steps 2 and 3 three times in a row + + :Assert: No error happens + """ + + users_num = 100 + page_size = 30 + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + log.info('Create simple paged results control instance') + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + for ii in range(3): + log.info('Iteration %d' % ii) + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + rtype, rdata, rmsgid, rctrls = topology.standalone.result3(msgid) + pctrls = [ + c + for c in rctrls + if c.controlType == SimplePagedResultsControl.controlType + ] + + # Copy cookie from response control to request control + req_ctrl.cookie = pctrls[0].cookie + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + finally: + log.info('Set Directory Manager bind back (test_search_multiple_paging)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + + +@pytest.mark.parametrize("invalid_cookie", [1000, -1]) +def test_search_invalid_cookie(topology, test_user, invalid_cookie): + """Verify that using invalid cookie while performing + search with the simple paged results control throws + a TypeError exception + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + variated number of users for the search base + + :Steps: 1. Bind as test user + 2. Initiate the search with a simple paged control + 3. Put an invalid cookie (-1, 1000) to the control + 4. Continue the search + + :Assert: It will throw an TypeError exception + """ + + users_num = 100 + page_size = 50 + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + log.info('Create simple paged results control instance') + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + rtype, rdata, rmsgid, rctrls = topology.standalone.result3(msgid) + + log.info('Put an invalid cookie (%d) to the control. TypeError is expected' % + invalid_cookie) + req_ctrl.cookie = invalid_cookie + with pytest.raises(TypeError): + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + finally: + log.info('Set Directory Manager bind back (test_search_invalid_cookie)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + + +def test_search_abandon_with_zero_size(topology, test_user): + """Verify that search with simple paged results control + can be abandon using page_size = 0 + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + variated number of users for the search base + + :Steps: 1. Bind as test user + 2. Search through added users with a simple paged control + and page_size = 0 + + :Assert: No cookie should be returned at all + """ + + users_num = 10 + page_size = 0 + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + log.info('Create simple paged results control instance') + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + rtype, rdata, rmsgid, rctrls = topology.standalone.result3(msgid) + pctrls = [ + c + for c in rctrls + if c.controlType == SimplePagedResultsControl.controlType + ] + assert not pctrls[0].cookie + finally: + log.info('Set Directory Manager bind back (test_search_abandon_with_zero_size)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + + +def test_search_pagedsizelimit_success(topology, test_user): + """Verify that search with a simple paged results control + returns all entries it should without errors while + valid value set to nsslapd-pagedsizelimit. + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + 10 users for the search base + + :Steps: 1. Set nsslapd-pagedsizelimit: 20 + 2. Bind as test user + 3. Search through added users with a simple paged control + using page_size = 10 + + :Assert: All users should be found + """ + + users_num = 10 + page_size = 10 + attr_name = 'nsslapd-pagedsizelimit' + attr_value = '20' + attr_value_bck = change_conf_attr(topology, DN_CONFIG, + attr_name, attr_value) + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + all_results = paged_search(topology, DEFAULT_SUFFIX, controls, + search_flt, searchreq_attrlist) + + log.info('%d results' % len(all_results)) + assert len(all_results) == len(users_list) + + finally: + log.info('Set Directory Manager bind back (test_search_pagedsizelimit_success)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + change_conf_attr(topology, DN_CONFIG, + 'nsslapd-pagedsizelimit', attr_value_bck) + + +@pytest.mark.parametrize('conf_attr,user_attr,expected_rs', + (('5', '15', 'PASS'), ('15', '5', ldap.SIZELIMIT_EXCEEDED))) +def test_search_nspagedsizelimit(topology, test_user, + conf_attr, user_attr, expected_rs): + """Verify that nsPagedSizeLimit attribute overrides + nsslapd-pagedsizelimit while performing search with + the simple paged results control. + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + 10 users for the search base + + :Steps: 1. Set nsslapd-pagedsizelimit: 5 + 2. Set nsPagedSizeLimit: 15 + 3. Bind as test user + 4. Search through added users with a simple paged control + using page_size = 10 + 5. Bind as Directory Manager + 6. Restore all values + 7. Set nsslapd-pagedsizelimit: 15 + 8. Set nsPagedSizeLimit: 5 + 9. Bind as test user + 10. Search through added users with a simple paged control + using page_size = 10 + + :Assert: After the steps 1-4, it should PASS. + After the steps 7-10, it should throw + SIZELIMIT_EXCEEDED exception + """ + + users_num = 10 + page_size = 10 + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + conf_attr_bck = change_conf_attr(topology, DN_CONFIG, + 'nsslapd-pagedsizelimit', conf_attr) + user_attr_bck = change_conf_attr(topology, TEST_USER_DN, + 'nsPagedSizeLimit', user_attr) + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + if expected_rs == ldap.SIZELIMIT_EXCEEDED: + log.info('Expect to fail with SIZELIMIT_EXCEEDED') + with pytest.raises(expected_rs): + all_results = paged_search(topology, DEFAULT_SUFFIX, controls, + search_flt, searchreq_attrlist) + elif expected_rs == 'PASS': + log.info('Expect to pass') + all_results = paged_search(topology, DEFAULT_SUFFIX, controls, + search_flt, searchreq_attrlist) + log.info('%d results' % len(all_results)) + assert len(all_results) == len(users_list) + + finally: + log.info('Set Directory Manager bind back (test_search_nspagedsizelimit)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + change_conf_attr(topology, DN_CONFIG, + 'nsslapd-pagedsizelimit', conf_attr_bck) + change_conf_attr(topology, TEST_USER_DN, + 'nsPagedSizeLimit', user_attr_bck) + + +@pytest.mark.parametrize('conf_attr_values,expected_rs', + ((('5000', '100', '100'), ldap.ADMINLIMIT_EXCEEDED), + (('5000', '120', '122'), 'PASS'))) +def test_search_paged_limits(topology, test_user, conf_attr_values, expected_rs): + """Verify that nsslapd-idlistscanlimit and + nsslapd-lookthroughlimit can limit the administrator + search abilities. + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + 10 users for the search base + + :Steps: 1. Set nsslapd-sizelimit and nsslapd-pagedsizelimit to 5000 + 2. Set nsslapd-idlistscanlimit: 120 + 3. Set nsslapd-lookthroughlimit: 122 + 4. Bind as test user + 5. Search through added users with a simple paged control + using page_size = 10 + 6. Bind as Directory Manager + 7. Set nsslapd-idlistscanlimit: 100 + 8. Set nsslapd-lookthroughlimit: 100 + 9. Bind as test user + 10. Search through added users with a simple paged control + using page_size = 10 + + :Assert: After the steps 1-4, it should PASS. + After the steps 7-10, it should throw + ADMINLIMIT_EXCEEDED exception + """ + + users_num = 101 + page_size = 10 + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + size_attr_bck = change_conf_attr(topology, DN_CONFIG, + 'nsslapd-sizelimit', conf_attr_values[0]) + pagedsize_attr_bck = change_conf_attr(topology, DN_CONFIG, + 'nsslapd-pagedsizelimit', conf_attr_values[0]) + idlistscan_attr_bck = change_conf_attr(topology, 'cn=config,%s' % DN_LDBM, + 'nsslapd-idlistscanlimit', conf_attr_values[1]) + lookthrough_attr_bck = change_conf_attr(topology, 'cn=config,%s' % DN_LDBM, + 'nsslapd-lookthroughlimit', conf_attr_values[2]) + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + if expected_rs == ldap.ADMINLIMIT_EXCEEDED: + log.info('Expect to fail with ADMINLIMIT_EXCEEDED') + with pytest.raises(expected_rs): + all_results = paged_search(topology, DEFAULT_SUFFIX, controls, + search_flt, searchreq_attrlist) + elif expected_rs == 'PASS': + log.info('Expect to pass') + all_results = paged_search(topology, DEFAULT_SUFFIX, controls, + search_flt, searchreq_attrlist) + log.info('%d results' % len(all_results)) + assert len(all_results) == len(users_list) + finally: + log.info('Set Directory Manager bind back (test_search_paged_limits)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + change_conf_attr(topology, DN_CONFIG, + 'nsslapd-sizelimit', size_attr_bck) + change_conf_attr(topology, DN_CONFIG, + 'nsslapd-pagedsizelimit', pagedsize_attr_bck) + change_conf_attr(topology, 'cn=config,%s' % DN_LDBM, + 'nsslapd-lookthroughlimit', lookthrough_attr_bck) + change_conf_attr(topology, 'cn=config,%s' % DN_LDBM, + 'nsslapd-idlistscanlimit', idlistscan_attr_bck) + + +@pytest.mark.parametrize('conf_attr_values,expected_rs', + ((('1000', '100', '100'), ldap.ADMINLIMIT_EXCEEDED), + (('1000', '120', '122'), 'PASS'))) +def test_search_paged_user_limits(topology, test_user, conf_attr_values, expected_rs): + """Verify that nsPagedIDListScanLimit and nsPagedLookthroughLimit + override nsslapd-idlistscanlimit and nsslapd-lookthroughlimit + while performing search with the simple paged results control. + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + 10 users for the search base + + :Steps: 1. Set nsslapd-idlistscanlimit: 1000 + 2. Set nsslapd-lookthroughlimit: 1000 + 3. Set nsPagedIDListScanLimit: 120 + 4. Set nsPagedLookthroughLimit: 122 + 5. Bind as test user + 6. Search through added users with a simple paged control + using page_size = 10 + 7. Bind as Directory Manager + 8. Set nsPagedIDListScanLimit: 100 + 9. Set nsPagedLookthroughLimit: 100 + 10. Bind as test user + 11. Search through added users with a simple paged control + using page_size = 10 + + :Assert: After the steps 1-4, it should PASS. + After the steps 8-11, it should throw + ADMINLIMIT_EXCEEDED exception + """ + + users_num = 101 + page_size = 10 + users_list = add_users(topology, users_num, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + lookthrough_attr_bck = change_conf_attr(topology, 'cn=config,%s' % DN_LDBM, + 'nsslapd-lookthroughlimit', conf_attr_values[0]) + idlistscan_attr_bck = change_conf_attr(topology, 'cn=config,%s' % DN_LDBM, + 'nsslapd-idlistscanlimit', conf_attr_values[0]) + user_idlistscan_attr_bck = change_conf_attr(topology, TEST_USER_DN, + 'nsPagedIDListScanLimit', conf_attr_values[1]) + user_lookthrough_attr_bck = change_conf_attr(topology, TEST_USER_DN, + 'nsPagedLookthroughLimit', conf_attr_values[2]) + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + if expected_rs == ldap.ADMINLIMIT_EXCEEDED: + log.info('Expect to fail with ADMINLIMIT_EXCEEDED') + with pytest.raises(expected_rs): + all_results = paged_search(topology, DEFAULT_SUFFIX, controls, + search_flt, searchreq_attrlist) + elif expected_rs == 'PASS': + log.info('Expect to pass') + all_results = paged_search(topology, DEFAULT_SUFFIX, controls, + search_flt, searchreq_attrlist) + log.info('%d results' % len(all_results)) + assert len(all_results) == len(users_list) + finally: + log.info('Set Directory Manager bind back (test_search_paged_user_limits)') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + change_conf_attr(topology, 'cn=config,%s' % DN_LDBM, + 'nsslapd-lookthroughlimit', lookthrough_attr_bck) + change_conf_attr(topology, 'cn=config,%s' % DN_LDBM, + 'nsslapd-idlistscanlimit', idlistscan_attr_bck) + change_conf_attr(topology, TEST_USER_DN, + 'nsPagedIDListScanLimit', user_idlistscan_attr_bck) + change_conf_attr(topology, TEST_USER_DN, + 'nsPagedLookthroughLimit', user_lookthrough_attr_bck) + + +def test_ger_basic(topology, test_user): + """Verify that search with a simple paged results control + and get effective rights control returns all entries + it should without errors. + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + variated number of users for the search base + + :Steps: 1. Search through added users with a simple paged control + and get effective rights control + + :Assert: All users should be found, every found entry should have + an 'attributeLevelRights' returned + """ + + users_list = add_users(topology, 20, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + page_size = 4 + + try: + log.info('Set bind to directory manager') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + spr_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + ger_ctrl = GetEffectiveRightsControl(True, "dn: " + DN_DM) + + all_results = paged_search(topology, DEFAULT_SUFFIX, [spr_ctrl, ger_ctrl], + search_flt, searchreq_attrlist) + + log.info('{} results'.format(len(all_results))) + assert len(all_results) == len(users_list) + log.info('Check for attributeLevelRights') + assert all(attrs['attributeLevelRights'][0] for dn, attrs in all_results) + finally: + log.info('Remove added users') + del_users(topology, users_list) + + +def test_multi_suffix_search(topology, test_user, new_suffixes): + """Verify that page result search returns empty cookie + if there is no returned entry. + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + two suffixes with backends, one is inserted into another, + 10 users for the search base within each suffix + + :Steps: 1. Bind as test user + 2. Search through all 20 added users with a simple paged control + using page_size = 4 + 3. Wait some time logs to be updated + 3. Check access log + + :Assert: All users should be found, the access log should contain + the pr_cookie for each page request and it should be equal 0, + except the last one should be equal -1 + """ + + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + page_size = 4 + users_num = 20 + + log.info('Clear the access log') + topology.standalone.deleteAccessLogs() + + users_list_1 = add_users(topology, users_num / 2, NEW_SUFFIX_1) + users_list_2 = add_users(topology, users_num / 2, NEW_SUFFIX_2) + + try: + log.info('Set DM bind') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + + all_results = paged_search(topology, NEW_SUFFIX_1, [req_ctrl], + search_flt, searchreq_attrlist) + + log.info('{} results'.format(len(all_results))) + assert len(all_results) == users_num + + log.info('Restart the server to flush the logs') + topology.standalone.restart(timeout=10) + + access_log_lines = topology.standalone.ds_access_log.match('.*pr_cookie=.*') + pr_cookie_list = ([line.rsplit('=', 1)[-1] for line in access_log_lines]) + pr_cookie_list = [int(pr_cookie) for pr_cookie in pr_cookie_list] + log.info('Assert that last pr_cookie == -1 and others pr_cookie == 0') + pr_cookie_zeros = list(pr_cookie == 0 for pr_cookie in pr_cookie_list[0:-1]) + assert all(pr_cookie_zeros) + assert pr_cookie_list[-1] == -1 + finally: + log.info('Remove added users') + del_users(topology, users_list_1) + del_users(topology, users_list_2) + + +@pytest.mark.parametrize('conf_attr_value', (None, '-1', '1000')) +def test_maxsimplepaged_per_conn_success(topology, test_user, conf_attr_value): + """Verify that nsslapd-maxsimplepaged-per-conn acts according design + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + 20 users for the search base + + :Steps: 1. Set nsslapd-maxsimplepaged-per-conn in cn=config + to the next values: no value, -1, some positive + 2. Search through the added users with a simple paged control + using page size = 4 + + :Assert: If no value or value = -1 - all users should be found, + default behaviour; + If the value is positive, the value is the max simple paged + results requests per connection. + """ + + users_list = add_users(topology, 20, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + page_size = 4 + if conf_attr_value: + max_per_con_bck = change_conf_attr(topology, DN_CONFIG, + 'nsslapd-maxsimplepaged-per-conn', + conf_attr_value) + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + + all_results = paged_search(topology, DEFAULT_SUFFIX, [req_ctrl], + search_flt, searchreq_attrlist) + + log.info('{} results'.format(len(all_results))) + assert len(all_results) == len(users_list) + finally: + log.info('Remove added users') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + if conf_attr_value: + change_conf_attr(topology, DN_CONFIG, + 'nsslapd-maxsimplepaged-per-conn', max_per_con_bck) + + +@pytest.mark.parametrize('conf_attr_value', ('0', '1')) +def test_maxsimplepaged_per_conn_failure(topology, test_user, conf_attr_value): + """Verify that nsslapd-maxsimplepaged-per-conn acts according design + + :Feature: Simple paged results + + :Setup: Standalone instance, test user for binding, + 20 users for the search base + + :Steps: 1. Set nsslapd-maxsimplepaged-per-conn = 0 in cn=config + 2. Search through the added users with a simple paged control + using page size = 4 + 3. Set nsslapd-maxsimplepaged-per-conn = 1 in cn=config + 4. Search through the added users with a simple paged control + using page size = 4 two times, but don't close the connections + + :Assert: During the searches UNWILLING_TO_PERFORM should be throwned + """ + + users_list = add_users(topology, 20, DEFAULT_SUFFIX) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + page_size = 4 + max_per_con_bck = change_conf_attr(topology, DN_CONFIG, + 'nsslapd-maxsimplepaged-per-conn', + conf_attr_value) + + try: + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + log.info('Create simple paged results control instance') + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + + with pytest.raises(ldap.UNWILLING_TO_PERFORM): + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=[req_ctrl]) + rtype, rdata, rmsgid, rctrls = topology.standalone.result3(msgid) + + # If nsslapd-maxsimplepaged-per-conn = 1, + # it should pass this point, but failed on the next search + assert conf_attr_value == '1' + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=[req_ctrl]) + rtype, rdata, rmsgid, rctrls = topology.standalone.result3(msgid) + finally: + log.info('Remove added users') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + change_conf_attr(topology, DN_CONFIG, + 'nsslapd-maxsimplepaged-per-conn', max_per_con_bck) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/paged_results/sss_control.py b/dirsrvtests/tests/suites/paged_results/sss_control.py new file mode 100644 index 0000000..58cd6c5 --- /dev/null +++ b/dirsrvtests/tests/suites/paged_results/sss_control.py @@ -0,0 +1,127 @@ +# -*- coding: utf-8 -*- +""" +ldap.controls.sss - classes for Server Side Sorting +(see RFC 2891) +See http://www.python-ldap.org/ for project details. +$Id: sss.py,v 1.2 2015/10/24 15:52:23 stroeder Exp $ +""" + +__all__ = [ + 'SSSRequestControl', + 'SSSResponseControl', +] + + +import ldap +from ldap.ldapobject import LDAPObject +from ldap.controls import (RequestControl, ResponseControl, + KNOWN_RESPONSE_CONTROLS, DecodeControlTuples) + +from pyasn1.type import univ, namedtype, tag, namedval, constraint +from pyasn1.codec.ber import encoder, decoder + + +# SortKeyList ::= SEQUENCE OF SEQUENCE { +# attributeType AttributeDescription, +# orderingRule [0] MatchingRuleId OPTIONAL, +# reverseOrder [1] BOOLEAN DEFAULT FALSE } + + +class SortKeyType(univ.Sequence): + componentType = namedtype.NamedTypes( + namedtype.NamedType('attributeType', univ.OctetString()), + namedtype.OptionalNamedType('orderingRule', + univ.OctetString().subtype( + implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0) + ) + ), + namedtype.DefaultedNamedType('reverseOrder', univ.Boolean(False).subtype( + implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))) + + +class SortKeyListType(univ.SequenceOf): + componentType = SortKeyType() + + +class SSSRequestControl(RequestControl): + '''Order result server side + >>> s = SSSRequestControl('-cn') + ''' + controlType = '1.2.840.113556.1.4.473' + + def __init__( + self, + criticality=False, + ordering_rules=None, + ): + RequestControl.__init__(self,self.controlType,criticality) + self.ordering_rules = ordering_rules + if isinstance(ordering_rules, basestring): + ordering_rules = [ordering_rules] + for rule in ordering_rules: + rule = rule.split(':') + assert len(rule) < 3, 'syntax for ordering rule: [-][:ordering-rule]' + + def asn1(self): + p = SortKeyListType() + for i, rule in enumerate(self.ordering_rules): + q = SortKeyType() + reverse_order = rule.startswith('-') + if reverse_order: + rule = rule[1:] + if ':' in rule: + attribute_type, ordering_rule = rule.split(':') + else: + attribute_type, ordering_rule = rule, None + q.setComponentByName('attributeType', attribute_type) + if ordering_rule: + q.setComponentByName('orderingRule', ordering_rule) + if reverse_order: + q.setComponentByName('reverseOrder', 1) + p.setComponentByPosition(i, q) + return p + + def encodeControlValue(self): + return encoder.encode(self.asn1()) + + +class SortResultType(univ.Sequence): + componentType = namedtype.NamedTypes( + namedtype.NamedType('sortResult', univ.Enumerated().subtype( + namedValues=namedval.NamedValues( + ('success', 0), + ('operationsError', 1), + ('timeLimitExceeded', 3), + ('strongAuthRequired', 8), + ('adminLimitExceeded', 11), + ('noSuchAttribute', 16), + ('inappropriateMatching', 18), + ('insufficientAccessRights', 50), + ('busy', 51), + ('unwillingToPerform', 53), + ('other', 80)), + subtypeSpec=univ.Enumerated.subtypeSpec + constraint.SingleValueConstraint( + 0, 1, 3, 8, 11, 16, 18, 50, 51, 53, 80))), + namedtype.OptionalNamedType('attributeType', + univ.OctetString().subtype( + implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0) + ) + )) + + +class SSSResponseControl(ResponseControl): + controlType = '1.2.840.113556.1.4.474' + + def __init__(self,criticality=False): + ResponseControl.__init__(self,self.controlType,criticality) + + def decodeControlValue(self, encoded): + p, rest = decoder.decode(encoded, asn1Spec=SortResultType()) + assert not rest, 'all data could not be decoded' + self.result = int(p.getComponentByName('sortResult')) + self.result_code = p.getComponentByName('sortResult').prettyOut(self.result) + self.attribute_type_error = p.getComponentByName('attributeType') + + +KNOWN_RESPONSE_CONTROLS[SSSRequestControl.controlType] = SSSRequestControl +KNOWN_RESPONSE_CONTROLS[SSSResponseControl.controlType] = SSSResponseControl diff --git a/dirsrvtests/tests/suites/pam_passthru_plugin/__init__.py b/dirsrvtests/tests/suites/pam_passthru_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/pam_passthru_plugin/pam_test.py b/dirsrvtests/tests/suites/pam_passthru_plugin/pam_test.py new file mode 100644 index 0000000..9ff4261 --- /dev/null +++ b/dirsrvtests/tests/suites/pam_passthru_plugin/pam_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_pam_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_pam_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/passthru_plugin/__init__.py b/dirsrvtests/tests/suites/passthru_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/passthru_plugin/passthru_test.py b/dirsrvtests/tests/suites/passthru_plugin/passthru_test.py new file mode 100644 index 0000000..956d414 --- /dev/null +++ b/dirsrvtests/tests/suites/passthru_plugin/passthru_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_passthru_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_passthru_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/password/__init__.py b/dirsrvtests/tests/suites/password/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/password/password_test.py b/dirsrvtests/tests/suites/password/password_test.py new file mode 100644 index 0000000..3781492 --- /dev/null +++ b/dirsrvtests/tests/suites/password/password_test.py @@ -0,0 +1,131 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_password_init(topology): + ''' + Do init, if necessary + ''' + + return + + +def test_password_delete_specific_password(topology): + ''' + Delete a specific userpassword, and make sure it is actually deleted from the entry + ''' + + log.info('Running test_password_delete_specific_password...') + + USER_DN = 'uid=test_entry,' + DEFAULT_SUFFIX + + # + # Add a test user with a password + # + try: + topology.standalone.add_s(Entry((USER_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '1', + 'cn': 'user 1', + 'uid': 'user1', + 'userpassword': PASSWORD}))) + except ldap.LDAPError as e: + log.fatal('test_password_delete_specific_password: Failed to add test user ' + + USER_DN + ': error ' + e.message['desc']) + assert False + + # + # Delete the exact password + # + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_DELETE, 'userpassword', PASSWORD)]) + except ldap.LDAPError as e: + log.fatal('test_password_delete_specific_password: Failed to delete userpassword: error ' + + e.message['desc']) + assert False + + # + # Check the password is actually deleted + # + try: + entry = topology.standalone.search_s(USER_DN, ldap.SCOPE_BASE, 'objectclass=top') + if entry[0].hasAttr('userpassword'): + log.fatal('test_password_delete_specific_password: Entry incorrectly still have the userpassword attribute') + assert False + except ldap.LDAPError as e: + log.fatal('test_password_delete_specific_password: Failed to search for user(%s), error: %s' % + (USER_DN, e.message('desc'))) + assert False + + # + # Cleanup + # + try: + topology.standalone.delete_s(USER_DN) + except ldap.LDAPError as e: + log.fatal('test_password_delete_specific_password: Failed to delete user(%s), error: %s' % + (USER_DN, e.message('desc'))) + assert False + + log.info('test_password_delete_specific_password: PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/password/pwdAdmin_test.py b/dirsrvtests/tests/suites/password/pwdAdmin_test.py new file mode 100644 index 0000000..dc8fdab --- /dev/null +++ b/dirsrvtests/tests/suites/password/pwdAdmin_test.py @@ -0,0 +1,434 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None +CONFIG_DN = 'cn=config' +ADMIN_NAME = 'passwd_admin' +ADMIN_DN = 'cn=%s,%s' % (ADMIN_NAME, SUFFIX) +ADMIN2_NAME = 'passwd_admin2' +ADMIN2_DN = 'cn=%s,%s' % (ADMIN2_NAME, SUFFIX) +ADMIN_PWD = 'adminPassword_1' +ADMIN_GROUP_DN = 'cn=password admin group,%s' % (SUFFIX) +ENTRY_NAME = 'Joe Schmo' +ENTRY_DN = 'cn=%s,%s' % (ENTRY_NAME, SUFFIX) +INVALID_PWDS = ('2_Short', 'No_Number', 'N0Special', '{SSHA}bBy8UdtPZwu8uZna9QOYG3Pr41RpIRVDl8wddw==') + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_pwdAdmin_init(topology): + ''' + Create our future Password Admin entry, set the password policy, and test + that its working + ''' + + log.info('test_pwdAdmin_init: Creating Password Administator entries...') + + # Add Password Admin 1 + try: + topology.standalone.add_s(Entry((ADMIN_DN, {'objectclass': "top extensibleObject".split(), + 'cn': ADMIN_NAME, + 'userpassword': ADMIN_PWD}))) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin_init: Failed to add test user' + ADMIN_DN + ': error ' + e.message['desc']) + assert False + + # Add Password Admin 2 + try: + topology.standalone.add_s(Entry((ADMIN2_DN, {'objectclass': "top extensibleObject".split(), + 'cn': ADMIN2_NAME, + 'userpassword': ADMIN_PWD}))) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin_init: Failed to add test user ' + ADMIN2_DN + ': error ' + e.message['desc']) + assert False + + # Add Password Admin Group + try: + topology.standalone.add_s(Entry((ADMIN_GROUP_DN, {'objectclass': "top groupOfUNiqueNames".split(), + 'cn': 'password admin group', + 'uniquemember': ADMIN_DN, + 'uniquemember': ADMIN2_DN}))) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin_init: Failed to add group' + ADMIN_GROUP_DN + ': error ' + e.message['desc']) + assert False + + # Configure password policy + log.info('test_pwdAdmin_init: Configuring password policy...') + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-pwpolicy-local', 'on'), + (ldap.MOD_REPLACE, 'passwordCheckSyntax', 'on'), + (ldap.MOD_REPLACE, 'passwordMinCategories', '1'), + (ldap.MOD_REPLACE, 'passwordMinTokenLength', '1'), + (ldap.MOD_REPLACE, 'passwordExp', 'on'), + (ldap.MOD_REPLACE, 'passwordMinDigits', '1'), + (ldap.MOD_REPLACE, 'passwordMinSpecials', '1')]) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin_init: Failed configure password policy: ' + + e.message['desc']) + assert False + + # + # Add an aci to allow everyone all access (just makes things easier) + # + log.info('Add aci to allow password admin to add/update entries...') + + ACI_TARGET = "(target = \"ldap:///%s\")" % SUFFIX + ACI_TARGETATTR = "(targetattr = *)" + ACI_ALLOW = "(version 3.0; acl \"Password Admin Access\"; allow (all) " + ACI_SUBJECT = "(userdn = \"ldap:///anyone\");)" + ACI_BODY = ACI_TARGET + ACI_TARGETATTR + ACI_ALLOW + ACI_SUBJECT + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + try: + topology.standalone.modify_s(SUFFIX, mod) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin_init: Failed to add aci for password admin: ' + + e.message['desc']) + assert False + + # + # Bind as the future Password Admin + # + log.info('test_pwdAdmin_init: Bind as the Password Administator (before activating)...') + try: + topology.standalone.simple_bind_s(ADMIN_DN, ADMIN_PWD) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin_init: Failed to bind as the Password Admin: ' + + e.message['desc']) + assert False + + # + # Setup our test entry, and test password policy is working + # + entry = Entry(ENTRY_DN) + entry.setValues('objectclass', 'top', 'person') + entry.setValues('sn', ENTRY_NAME) + entry.setValues('cn', ENTRY_NAME) + + # + # Start by attempting to add an entry with an invalid password + # + log.info('test_pwdAdmin_init: Attempt to add entries with invalid passwords, these adds should fail...') + for passwd in INVALID_PWDS: + failed_as_expected = False + entry.setValues('userpassword', passwd) + log.info('test_pwdAdmin_init: Create a regular user entry %s with password (%s)...' % + (ENTRY_DN, passwd)) + try: + topology.standalone.add_s(entry) + except ldap.LDAPError as e: + # We failed as expected + failed_as_expected = True + log.info('test_pwdAdmin_init: Add failed as expected: password (%s) result (%s)' + % (passwd, e.message['desc'])) + + if not failed_as_expected: + log.fatal('test_pwdAdmin_init: We were incorrectly able to add an entry ' + + 'with an invalid password (%s)' % (passwd)) + assert False + + +def test_pwdAdmin(topology): + ''' + Test that password administrators/root DN can + bypass password syntax/policy. + + We need to test how passwords are modified in + existing entries, and when adding new entries. + + Create the Password Admin entry, but do not set + it as an admin yet. Use the entry to verify invalid + passwords are caught. Then activate the password + admin and make sure it can bypass password policy. + ''' + + # + # Now activate a password administator, bind as root dn to do the config + # update, then rebind as the password admin + # + log.info('test_pwdAdmin: Activate the Password Administator...') + + # + # Setup our test entry, and test password policy is working + # + entry = Entry(ENTRY_DN) + entry.setValues('objectclass', 'top', 'person') + entry.setValues('sn', ENTRY_NAME) + entry.setValues('cn', ENTRY_NAME) + + # Bind as Root DN + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Root DN failed to authenticate: ' + + e.message['desc']) + assert False + + # Set the password admin + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'passwordAdminDN', ADMIN_DN)]) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Failed to add password admin to config: ' + + e.message['desc']) + assert False + + # Bind as Password Admin + try: + topology.standalone.simple_bind_s(ADMIN_DN, ADMIN_PWD) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Failed to bind as the Password Admin: ' + + e.message['desc']) + assert False + + # + # Start adding entries with invalid passwords, delete the entry after each pass. + # + for passwd in INVALID_PWDS: + entry.setValues('userpassword', passwd) + log.info('test_pwdAdmin: Create a regular user entry %s with password (%s)...' % + (ENTRY_DN, passwd)) + try: + topology.standalone.add_s(entry) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Failed to add entry with password (%s) result (%s)' + % (passwd, e.message['desc'])) + assert False + + log.info('test_pwdAdmin: Successfully added entry (%s)' % ENTRY_DN) + + # Delete entry for the next pass + try: + topology.standalone.delete_s(ENTRY_DN) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Failed to delete entry: %s' % + (e.message['desc'])) + assert False + + # + # Add the entry for the next round of testing (modify password) + # + entry.setValues('userpassword', ADMIN_PWD) + try: + topology.standalone.add_s(entry) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Failed to add entry with valid password (%s) result (%s)' % + (passwd, e.message['desc'])) + assert False + + # + # Deactivate the password admin and make sure invalid password updates fail + # + log.info('test_pwdAdmin: Deactivate Password Administator and ' + + 'try invalid password updates...') + + # Bind as root DN + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Root DN failed to authenticate: ' + + e.message['desc']) + assert False + + # Remove password admin + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_DELETE, 'passwordAdminDN', None)]) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Failed to remove password admin from config: ' + + e.message['desc']) + assert False + + # Bind as Password Admin (who is no longer an admin) + try: + topology.standalone.simple_bind_s(ADMIN_DN, ADMIN_PWD) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Failed to bind as the Password Admin: ' + + e.message['desc']) + assert False + + # + # Make invalid password updates that should fail + # + for passwd in INVALID_PWDS: + failed_as_expected = False + entry.setValues('userpassword', passwd) + try: + topology.standalone.modify_s(ENTRY_DN, [(ldap.MOD_REPLACE, 'userpassword', passwd)]) + except ldap.LDAPError as e: + # We failed as expected + failed_as_expected = True + log.info('test_pwdAdmin: Password update failed as expected: password (%s) result (%s)' + % (passwd, e.message['desc'])) + + if not failed_as_expected: + log.fatal('test_pwdAdmin: We were incorrectly able to add an invalid password (%s)' + % (passwd)) + assert False + + # + # Now activate a password administator + # + log.info('test_pwdAdmin: Activate Password Administator and try updates again...') + + # Bind as root DN to make the update + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Root DN failed to authenticate: ' + e.message['desc']) + assert False + + # Update config - set the password admin + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'passwordAdminDN', ADMIN_DN)]) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Failed to add password admin to config: ' + + e.message['desc']) + assert False + + # Bind as Password Admin + try: + topology.standalone.simple_bind_s(ADMIN_DN, ADMIN_PWD) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Failed to bind as the Password Admin: ' + + e.message['desc']) + assert False + + # + # Make the same password updates, but this time they should succeed + # + for passwd in INVALID_PWDS: + try: + topology.standalone.modify_s(ENTRY_DN, [(ldap.MOD_REPLACE, 'userpassword', passwd)]) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Password update failed unexpectedly: password (%s) result (%s)' + % (passwd, e.message['desc'])) + assert False + log.info('test_pwdAdmin: Password update succeeded (%s)' % passwd) + + # + # Test Password Admin Group + # + log.info('test_pwdAdmin: Testing password admin group...') + + # Bind as root DN to make the update + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Root DN failed to authenticate: ' + e.message['desc']) + assert False + + # Update config - set the password admin group + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'passwordAdminDN', ADMIN_GROUP_DN)]) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Failed to add password admin to config: ' + + e.message['desc']) + assert False + + # Bind as admin2 + try: + topology.standalone.simple_bind_s(ADMIN2_DN, ADMIN_PWD) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Failed to bind as the Password Admin2: ' + + e.message['desc']) + assert False + + # Make some invalid password updates, but they should succeed + for passwd in INVALID_PWDS: + try: + topology.standalone.modify_s(ENTRY_DN, [(ldap.MOD_REPLACE, 'userpassword', passwd)]) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Password update failed unexpectedly: password (%s) result (%s)' + % (passwd, e.message['desc'])) + assert False + log.info('test_pwdAdmin: Password update succeeded (%s)' % passwd) + + # Cleanup - bind as Root DN for the other tests + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_pwdAdmin: Root DN failed to authenticate: ' + e.message['desc']) + assert False + + +def test_pwdAdmin_config_validation(topology): + ''' + Test config validation: + + - Test adding multiple passwordAdminDN attributes + - Test adding invalid values(non-DN's) + ''' + # Add mulitple attributes - one already eists so just try and add as second one + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_ADD, 'passwordAdminDN', ENTRY_DN)]) + log.fatal('test_pwdAdmin_config_validation: Incorrectly was able to add two config attributes') + assert False + except ldap.LDAPError as e: + log.info('test_pwdAdmin_config_validation: Failed as expected: ' + + e.message['desc']) + + # Attempt to set invalid DN + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_ADD, 'passwordAdminDN', 'ZZZZZ')]) + log.fatal('test_pwdAdmin_config_validation: Incorrectly was able to add invalid DN') + assert False + except ldap.LDAPError as e: + log.info('test_pwdAdmin_config_validation: Failed as expected: ' + + e.message['desc']) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/password/pwdPolicy_attribute_test.py b/dirsrvtests/tests/suites/password/pwdPolicy_attribute_test.py new file mode 100644 index 0000000..023f508 --- /dev/null +++ b/dirsrvtests/tests/suites/password/pwdPolicy_attribute_test.py @@ -0,0 +1,338 @@ +import os +import time +import subprocess +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +DEBUGGING = False +OU_PEOPLE = 'ou=people,{}'.format(DEFAULT_SUFFIX) +TEST_USER_NAME = 'simplepaged_test' +TEST_USER_DN = 'uid={},{}'.format(TEST_USER_NAME, OU_PEOPLE) +TEST_USER_PWD = 'simplepaged_test' +PW_POLICY_CONT_USER = 'cn="cn=nsPwPolicyEntry,uid=simplepaged_test,'\ + 'ou=people,dc=example,dc=com",'\ + 'cn=nsPwPolicyContainer,ou=people,dc=example,dc=com' +PW_POLICY_CONT_PEOPLE = 'cn="cn=nsPwPolicyEntry,'\ + 'ou=people,dc=example,dc=com",'\ + 'cn=nsPwPolicyContainer,ou=people,dc=example,dc=com' + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) + +log = logging.getLogger(__name__) + + +class TopologyStandalone(object): + """The DS Topology Class""" + def __init__(self, standalone): + """Init""" + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + """Create DS Deployment""" + + # Creating standalone instance ... + if DEBUGGING: + standalone = DirSrv(verbose=True) + else: + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + """If we are debugging just stop the instances, otherwise remove + them + """ + if DEBUGGING: + standalone.stop() + else: + standalone.delete() + + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +@pytest.fixture(scope="module") +def test_user(topology, request): + """User for binding operation""" + + log.info('Adding user {}'.format(TEST_USER_DN)) + try: + topology.standalone.add_s(Entry((TEST_USER_DN, { + 'objectclass': 'top person'.split(), + 'objectclass': 'organizationalPerson', + 'objectclass': 'inetorgperson', + 'cn': TEST_USER_NAME, + 'sn': TEST_USER_NAME, + 'userpassword': TEST_USER_PWD, + 'mail': '%s@redhat.com' % TEST_USER_NAME, + 'uid': TEST_USER_NAME + }))) + except ldap.LDAPError as e: + log.error('Failed to add user (%s): error (%s)' % (TEST_USER_DN, + e.message['desc'])) + raise e + + def fin(): + log.info('Deleting user {}'.format(TEST_USER_DN)) + topology.standalone.delete_s(TEST_USER_DN) + request.addfinalizer(fin) + + +@pytest.fixture(scope="module") +def password_policy(topology, test_user): + """Set up password policy for subtree and user""" + + log.info('Enable fine-grained policy') + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, + 'nsslapd-pwpolicy-local', + 'on')]) + except ldap.LDAPError as e: + log.error('Failed to set fine-grained policy: error {}'.format( + e.message['desc'])) + raise e + + log.info('Create password policy for subtree {}'.format(OU_PEOPLE)) + try: + subprocess.call(['ns-newpwpolicy.pl', '-D', DN_DM, '-w', PASSWORD, + '-p', str(PORT_STANDALONE), '-h', HOST_STANDALONE, + '-S', OU_PEOPLE, '-Z', SERVERID_STANDALONE]) + except subprocess.CalledProcessError as e: + log.error('Failed to create pw policy policy for {}: error {}'.format( + OU_PEOPLE, e.message['desc'])) + raise e + + log.info('Add pwdpolicysubentry attribute to {}'.format(OU_PEOPLE)) + try: + topology.standalone.modify_s(OU_PEOPLE, [(ldap.MOD_REPLACE, + 'pwdpolicysubentry', + PW_POLICY_CONT_PEOPLE)]) + except ldap.LDAPError as e: + log.error('Failed to pwdpolicysubentry pw policy '\ + 'policy for {}: error {}'.format(OU_PEOPLE, + e.message['desc'])) + raise e + + log.info('Create password policy for subtree {}'.format(TEST_USER_DN)) + try: + subprocess.call(['ns-newpwpolicy.pl', '-D', DN_DM, '-w', PASSWORD, + '-p', str(PORT_STANDALONE), '-h', HOST_STANDALONE, + '-U', TEST_USER_DN, '-Z', SERVERID_STANDALONE]) + except subprocess.CalledProcessError as e: + log.error('Failed to create pw policy policy for {}: error {}'.format( + TEST_USER_DN, e.message['desc'])) + raise e + + log.info('Add pwdpolicysubentry attribute to {}'.format(TEST_USER_DN)) + try: + topology.standalone.modify_s(TEST_USER_DN, [(ldap.MOD_REPLACE, + 'pwdpolicysubentry', + PW_POLICY_CONT_USER)]) + except ldap.LDAPError as e: + log.error('Failed to pwdpolicysubentry pw policy '\ + 'policy for {}: error {}'.format(TEST_USER_DN, + e.message['desc'])) + raise e + + +@pytest.mark.parametrize('subtree_pwchange,user_pwchange,exception', + [('on', 'off', ldap.UNWILLING_TO_PERFORM), + ('off', 'off', ldap.UNWILLING_TO_PERFORM), + ('off', 'on', None), ('on', 'on', None)]) +def test_change_pwd(topology, test_user, password_policy, + subtree_pwchange, user_pwchange, exception): + """Verify that 'passwordChange' attr works as expected + User should have a priority over a subtree. + + :Feature: Password policy + + :Setup: Standalone instance, test user, + password policy entries for a user and a subtree + + :Steps: 1. Set passwordChange on the user and the subtree + to various combinations + 2. Bind as test user + 3. Try to change password + + :Assert: Subtree/User passwordChange - result + off/on, on/on - success + on/off, off/off - UNWILLING_TO_PERFORM + """ + + log.info('Set passwordChange to "{}" - {}'.format(subtree_pwchange, + PW_POLICY_CONT_PEOPLE)) + try: + topology.standalone.modify_s(PW_POLICY_CONT_PEOPLE, [(ldap.MOD_REPLACE, + 'passwordChange', + subtree_pwchange)]) + except ldap.LDAPError as e: + log.error('Failed to set passwordChange '\ + 'policy for {}: error {}'.format(PW_POLICY_CONT_PEOPLE, + e.message['desc'])) + raise e + + + log.info('Set passwordChange to "{}" - {}'.format(user_pwchange, + PW_POLICY_CONT_USER)) + try: + topology.standalone.modify_s(PW_POLICY_CONT_USER, [(ldap.MOD_REPLACE, + 'passwordChange', + user_pwchange)]) + except ldap.LDAPError as e: + log.error('Failed to set passwordChange '\ + 'policy for {}: error {}'.format(PW_POLICY_CONT_USER, + e.message['desc'])) + raise e + time.sleep(1) + + try: + log.info('Bind as user and modify userPassword') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + if exception: + with pytest.raises(exception): + topology.standalone.modify_s(TEST_USER_DN, [(ldap.MOD_REPLACE, + 'userPassword', + 'new_pass')]) + else: + topology.standalone.modify_s(TEST_USER_DN, [(ldap.MOD_REPLACE, + 'userPassword', + 'new_pass')]) + except ldap.LDAPError as e: + log.error('Failed to change userpassword for {}: error {}'.format( + TEST_USER_DN, e.message['info'])) + raise e + finally: + log.info('Bind as DM') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(TEST_USER_DN, [(ldap.MOD_REPLACE, + 'userPassword', + TEST_USER_PWD)]) + + +def test_pwd_min_age(topology, test_user, password_policy): + """If we set passwordMinAge to some value, for example to 10, then it + should not allow the user to change the password within 10 seconds after + his previous change. + + :Feature: Password policy + + :Setup: Standalone instance, test user, + password policy entries for a user and a subtree + + :Steps: 1. Set passwordMinAge to 10 on the user pwpolicy entry + 2. Set passwordMinAge to 10 on the subtree pwpolicy entry + 3. Set passwordMinAge to 10 on the cn=config entry + 4. Bind as test user + 5. Try to change password two times in a row + 6. Wait 12 seconds + 7. Try to change password + + :Assert: User should be not allowed to change the password + right after previous change - CONSTRAINT_VIOLATION + User should be not allowed to change the password + after 12 seconds passed + """ + + num_seconds = '10' + + log.info('Set passwordminage to "{}" - {}'.format(num_seconds, PW_POLICY_CONT_PEOPLE)) + try: + topology.standalone.modify_s(PW_POLICY_CONT_PEOPLE, [(ldap.MOD_REPLACE, + 'passwordminage', + num_seconds)]) + except ldap.LDAPError as e: + log.error('Failed to set passwordminage '\ + 'policy for {}: error {}'.format(PW_POLICY_CONT_PEOPLE, + e.message['desc'])) + raise e + + log.info('Set passwordminage to "{}" - {}'.format(num_seconds, PW_POLICY_CONT_USER)) + try: + topology.standalone.modify_s(PW_POLICY_CONT_USER, [(ldap.MOD_REPLACE, + 'passwordminage', + num_seconds)]) + except ldap.LDAPError as e: + log.error('Failed to set passwordminage '\ + 'policy for {}: error {}'.format(PW_POLICY_CONT_USER, + e.message['desc'])) + raise e + + log.info('Set passwordminage to "{}" - {}'.format(num_seconds, DN_CONFIG)) + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, + 'passwordminage', + num_seconds)]) + except ldap.LDAPError as e: + log.error('Failed to set passwordminage '\ + 'policy for {}: error {}'.format(DN_CONFIG, + e.message['desc'])) + raise e + time.sleep(1) + + try: + log.info('Bind as user and modify userPassword') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + topology.standalone.modify_s(TEST_USER_DN, [(ldap.MOD_REPLACE, + 'userPassword', + 'new_pass')]) + except ldap.LDAPError as e: + log.error('Failed to change userpassword for {}: error {}'.format( + TEST_USER_DN, e.message['info'])) + raise e + time.sleep(1) + + log.info('Bind as user and modify userPassword straight away after previous change') + topology.standalone.simple_bind_s(TEST_USER_DN, 'new_pass') + with pytest.raises(ldap.CONSTRAINT_VIOLATION): + topology.standalone.modify_s(TEST_USER_DN, [(ldap.MOD_REPLACE, + 'userPassword', + 'new_new_pass')]) + + log.info('Wait {} second'.format(int(num_seconds) + 2)) + time.sleep(int(num_seconds) + 2) + + try: + log.info('Bind as user and modify userPassword') + topology.standalone.simple_bind_s(TEST_USER_DN, 'new_pass') + topology.standalone.modify_s(TEST_USER_DN, [(ldap.MOD_REPLACE, + 'userPassword', + TEST_USER_PWD)]) + except ldap.LDAPError as e: + log.error('Failed to change userpassword for {}: error {}'.format( + TEST_USER_DN, e.message['info'])) + raise e + finally: + log.info('Bind as DM') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(TEST_USER_DN, [(ldap.MOD_REPLACE, + 'userPassword', + TEST_USER_PWD)]) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/password/pwdPolicy_syntax_test.py b/dirsrvtests/tests/suites/password/pwdPolicy_syntax_test.py new file mode 100644 index 0000000..aad4e40 --- /dev/null +++ b/dirsrvtests/tests/suites/password/pwdPolicy_syntax_test.py @@ -0,0 +1,224 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +DEBUGGING = False + +USER_DN = 'uid=user,ou=People,%s' % DEFAULT_SUFFIX + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) + + +log = logging.getLogger(__name__) + + +class TopologyStandalone(object): + """The DS Topology Class""" + def __init__(self, standalone): + """Init""" + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + """Create DS Deployment""" + + # Creating standalone instance ... + if DEBUGGING: + standalone = DirSrv(verbose=True) + else: + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + """If we are debugging just stop the instances, otherwise remove + them + """ + if DEBUGGING: + standalone.stop() + else: + standalone.delete() + + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def _create_user(inst): + """Create the test user.""" + inst.add_s(Entry(( + USER_DN, { + 'objectClass': 'top account simplesecurityobject'.split(), + 'uid': 'user', + 'userpassword': PASSWORD + }))) + + +def setPolicy(inst, attr, value): + """Bind as ROot DN, set polcy, and then bind as user""" + try: + inst.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal("Failed to bind as Directory Manager: " + str(e)) + assert False + + value = str(value) + """ + if value == '0': + # Remove the policy attribute + try: + inst.modify_s("cn=config", + [(ldap.MOD_DELETE, attr, None)]) + except ldap.LDAPError as e: + log.fatal("Failed to rmeove password policy %s: %s" % + (attr, str(e))) + assert False + else: + """ + # Set the policy value + inst.config.set(attr, value) + + try: + inst.simple_bind_s(USER_DN, PASSWORD) + except ldap.LDAPError as e: + log.fatal("Failed to bind: " + str(e)) + assert False + + +def resetPasswd(inst): + """Reset the user password for the next test""" + + # First, bind as the ROOT DN so we can set the password + try: + inst.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal("Failed to bind as Directory Manager: " + str(e)) + assert False + + # Now set the password + try: + inst.modify_s(USER_DN, + [(ldap.MOD_REPLACE, 'userpassword', PASSWORD)]) + except ldap.LDAPError as e: + log.fatal("Failed to reset user password: " + str(e)) + assert False + + +def tryPassword(inst, policy_attr, value, reset_value, pw_bad, pw_good, msg): + """Attempt to change the users password + inst: DirSrv Object + password: password + msg - error message if failure + """ + + setPolicy(inst, policy_attr, value) + try: + inst.modify_s(USER_DN, + [(ldap.MOD_REPLACE, 'userpassword', pw_bad)]) + log.fatal('Invalid password was unexpectedly accepted (%s)' % + (policy_attr)) + assert False + except ldap.CONSTRAINT_VIOLATION: + log.info('Invalid password correctly rejected by %s: %s' % + (policy_attr, msg)) + pass + except ldap.LDAPError as e: + log.fatal("Failed to change password: " + str(e)) + assert False + + # Change password that is allowed + try: + inst.modify_s(USER_DN, + [(ldap.MOD_REPLACE, 'userpassword', pw_good)]) + except ldap.LDAPError as e: + log.fatal("Failed to change password: " + str(e)) + assert False + + # Reset for the next test + resetPasswd(inst) + setPolicy(inst, policy_attr, reset_value) + + +def test_pwdPolicy_syntax(topology): + ''' + Password policy test: Ensure that on a password change, the policy syntax + is enforced correctly. + ''' + + # Create a user + _create_user(topology.standalone) + + # Set the password policy globally + topology.standalone.config.set('passwordCheckSyntax', 'on') + topology.standalone.config.set('nsslapd-pwpolicy-local', 'off') + topology.standalone.config.set('passwordMinCategories', '1') + + # + # Test each syntax catagory + # + + # Min Length + tryPassword(topology.standalone, 'passwordMinLength', 10, 2, 'passwd', + 'password123', 'length too short') + # Min Digit + tryPassword(topology.standalone, 'passwordMinDigits', 2, 0, 'passwd', + 'password123', 'does not contain minimum number of digits') + # Min Alphas + tryPassword(topology.standalone, 'passwordMinAlphas', 2, 0, 'p123456789', + 'password123', 'does not contain minimum number of alphas') + # Max Repeats + tryPassword(topology.standalone, 'passwordMaxRepeats', 2, 0, 'passsword', + 'pasword123', 'too many repeating characters') + # Min Specials + tryPassword(topology.standalone, 'passwordMinSpecials', 2, 0, 'passwd', + 'password_#$', + 'does not contain minimum number of special characters') + # Min Lowers + tryPassword(topology.standalone, 'passwordMinLowers', 2, 0, 'PASSWORD123', + 'password123', + 'does not contain minimum number of lowercase characters') + # Min Uppers + tryPassword(topology.standalone, 'passwordMinUppers', 2, 0, 'password', + 'PASSWORD', + 'does not contain minimum number of lowercase characters') + # Min 8-bits - "ldap" package only accepts ascii strings at the moment + + log.info('pwdPolicy tests PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/password/pwdPolicy_warning_test.py b/dirsrvtests/tests/suites/password/pwdPolicy_warning_test.py new file mode 100644 index 0000000..d064783 --- /dev/null +++ b/dirsrvtests/tests/suites/password/pwdPolicy_warning_test.py @@ -0,0 +1,559 @@ +import os +import sys +import time +import ldap +import logging +import pytest +import subprocess +from lib389 import DirSrv, Entry, tools, tasks +from ldap.controls.ppolicy import PasswordPolicyControl +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +DEBUGGING = False +CONFIG_ATTR = 'passwordSendExpiringTime' +USER_DN = 'uid=tuser,{:s}'.format(DEFAULT_SUFFIX) +USER_PASSWD = 'secret123' + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) + +log = logging.getLogger(__name__) + + +class TopologyStandalone(object): + """The DS Topology Class""" + def __init__(self, standalone): + """Init""" + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + """Create DS Deployment""" + + # Creating standalone instance ... + if DEBUGGING: + standalone = DirSrv(verbose=True) + else: + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + """If we are debugging just stop the instances, otherwise remove + them + """ + + if DEBUGGING: + standalone.stop() + else: + standalone.delete() + + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +@pytest.fixture +def global_policy(topology, request): + """Sets the required global + password policy attributes under + cn=config entry + """ + + attrs = {'passwordExp': '', + 'passwordMaxAge': '', + 'passwordWarning': '', + CONFIG_ATTR: ''} + try: + log.info('Get the default values') + entry = topology.standalone.getEntry(DN_CONFIG, ldap.SCOPE_BASE, + '(objectClass=*)', attrs.keys()) + + for key in attrs.keys(): + attrs[key] = entry.getValue(key) + + log.info('Set the new values') + topology.standalone.modify_s(DN_CONFIG, [ + (ldap.MOD_REPLACE, 'passwordExp', 'on'), + (ldap.MOD_REPLACE, 'passwordMaxAge', '172800'), + (ldap.MOD_REPLACE, 'passwordWarning', '86400'), + (ldap.MOD_REPLACE, CONFIG_ATTR, 'on')]) + + except ldap.LDAPError as ex: + log.error("Failed to set global password policy, error:{:s}"\ + .format(ex.message['desc'])) + raise ex + + def fin(): + """Resets the defaults""" + + try: + log.info('Reset the defaults') + for key in attrs.keys(): + topology.standalone.modify_s(DN_CONFIG, [ + (ldap.MOD_REPLACE, key, attrs[key])]) + except ldap.LDAPError as ex: + log.error("Failed to set defaults, error:{:s}".format(ex.message['desc'])) + raise ex + request.addfinalizer(fin) + + # A short sleep is required after the modifying password policy or cn=config + time.sleep(0.5) + + +@pytest.fixture +def global_policy_default(topology, request): + """Sets the required global password policy + attributes for testing the default behavior + of password expiry warning time + """ + + attrs = {'passwordExp': '', + 'passwordMaxAge': '', + 'passwordWarning': '', + CONFIG_ATTR : ''} + try: + log.info('Get the default values') + entry = topology.standalone.getEntry(DN_CONFIG, ldap.SCOPE_BASE, + '(objectClass=*)', attrs.keys()) + for key in attrs.keys(): + attrs[key] = entry.getValue(key) + + log.info('Set the new values') + topology.standalone.modify_s(DN_CONFIG, [ + (ldap.MOD_REPLACE, 'passwordExp', 'on'), + (ldap.MOD_REPLACE, 'passwordMaxAge', '86400'), + (ldap.MOD_REPLACE, 'passwordWarning', '86400'), + (ldap.MOD_REPLACE, CONFIG_ATTR, 'off')]) + except ldap.LDAPError as ex: + log.error("Failed to set global password policy, error:{:s}"\ + .format(ex.message['desc'])) + raise ex + + def fin(): + """Resets the defaults""" + + log.info('Reset the defaults') + try: + for key in attrs.keys(): + topology.standalone.modify_s(DN_CONFIG, [ + (ldap.MOD_REPLACE, key, attrs[key]) + ]) + except ldap.LDAPError as ex: + log.error("Failed to reset defaults, error:{:s}"\ + .format(ex.message['desc'])) + raise ex + request.addfinalizer(fin) + + # A short sleep is required after modifying password policy or cn=config + time.sleep(0.5) + + +@pytest.fixture +def add_user(topology, request): + """Adds a user for binding""" + + user_data = {'objectClass': 'top person inetOrgPerson'.split(), + 'uid': 'tuser', + 'cn': 'test user', + 'sn': 'user', + 'userPassword': USER_PASSWD} + + log.info('Add the user') + try: + topology.standalone.add_s(Entry((USER_DN, user_data))) + except ldap.LDAPError as ex: + log.error("Failed to add user, error:{:s}".format(ex.message['desc'])) + raise ex + + def fin(): + """Removes the user entry""" + + log.info('Remove the user entry') + try: + topology.standalone.delete_s(USER_DN) + except ldap.LDAPError as ex: + log.error("Failed to remove user, error:{:s}"\ + .format(ex.message['desc'])) + raise ex + request.addfinalizer(fin) + + +@pytest.fixture +def local_policy(topology, add_user): + """Sets fine grained policy for user entry""" + + log.info("Setting fine grained policy for user ({:s})".format(USER_DN)) + try: + subprocess.call(['/usr/sbin/ns-newpwpolicy.pl', '-D', DN_DM, + '-w', PASSWORD, '-h', HOST_STANDALONE, + '-p', str(PORT_STANDALONE), '-U', USER_DN, + '-Z', SERVERID_STANDALONE]) + except subprocess.CalledProcessError as ex: + log.error("Failed to set fine grained policy, error:{:s}"\ + .format(str(ex))) + raise ex + + # A short sleep is required after modifying password policy + time.sleep(0.5) + + +def get_password_warning(topology): + """Gets the password expiry warning time for the user""" + + res_type = res_data = res_msgid = res_ctrls = None + result_id = '' + + log.info('Bind with the user and request the password expiry warning time') + try: + result_id = topology.standalone.simple_bind(USER_DN, USER_PASSWD, + serverctrls = [PasswordPolicyControl()]) + res_type, res_data, res_msgid, res_ctrls =\ + topology.standalone.result3(result_id) + + # This exception will be thrown when the user's password has expired + except ldap.INVALID_CREDENTIALS as ex: + raise ex + except ldap.LDAPError as ex: + log.error("Failed to get password expiry warning time, error:{:s}"\ + .format(ex.message['desc'])) + raise ex + + # Return the control + return res_ctrls + + +def set_conf_attr(topology, attr, val): + """Sets the value of a given attribute under cn=config""" + + log.info("Setting {:s} to {:s}".format(attr, val)) + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, attr, val)]) + except ldap.LDAPError as ex: + log.error("Failed to set {:s} to {:s} error:{:s}"\ + .format(attr, val, ex.message['desc'])) + raise ex + + # A short sleep is required after modifying cn=config + time.sleep(0.5) + + +def get_conf_attr(topology, attr): + """Gets the value of a given + attribute under cn=config entry + """ + + try: + entry = topology.standalone.getEntry(DN_CONFIG, ldap.SCOPE_BASE, + '(objectClass=*)', [attr]) + val = entry.getValue(attr) + except ldap.LDAPError as ex: + log.error("Failed to get the value of {:s}, error:{:s}"\ + .format(attr, ex.message['desc'])) + raise ex + + # Return the value if no exeception is raised + return val + + +@pytest.mark.parametrize("value", (' ' , 'junk123', 'on', 'off')) +def test_different_values(topology, value): + """Try to set passwordSendExpiringTime attribute + to various values both valid and invalid + + :Feature: Password Expiry Warning Time + + :Setup: Standalone DS instance + + :Steps: 1. Try to set valid and invalid values + for passwordSendExpiringTime attribute + under cn=config entry + 2. Run the search command to check the + value of passwordSendExpiringTime attribute + + :Assert: 1. Invalid values should be rejected with + an OPERATIONS_ERROR + 2. Valid values should be accepted and saved + """ + + log.info('Get the default value') + defval = get_conf_attr(topology, CONFIG_ATTR) + + if value not in ('on', 'off'): + log.info('An invalid value is being tested') + with pytest.raises(ldap.OPERATIONS_ERROR): + set_conf_attr(topology, CONFIG_ATTR, value) + + log.info('Now check the value is unchanged') + assert get_conf_attr(topology, CONFIG_ATTR) == defval + + log.info("Invalid value {:s} was rejected correctly".format(value)) + else: + log.info('A valid value is being tested') + set_conf_attr(topology, CONFIG_ATTR, value) + + log.info('Now check that the value has been changed') + assert get_conf_attr(topology, CONFIG_ATTR) == value + + log.info("{:s} is now set to {:s}".format(CONFIG_ATTR, value)) + + log.info('Set passwordSendExpiringTime back to the default value') + set_conf_attr(topology, CONFIG_ATTR, defval) + + +def test_expiry_time(topology, global_policy, add_user): + """Test whether the password expiry warning + time for a user is returned appropriately + + :Feature: Pasword Expiry Warning Time + + :Setup: Standalone DS instance with, + 1. Global password policy configured as below: + passwordExp: on + passwordMaxAge: 172800 + passwordWarning: 86400 + passwordSendExpiringTime: on + 2. User entry for binding + + :Steps: 1. Bind as the user + 2. Request the control for the user + + :Assert: The password expiry warning time for the user should be + returned + """ + + res_ctrls = None + try: + log.info('Get the password expiry warning time') + log.info("Binding with ({:s}) and requesting the password expiry warning time"\ + .format(USER_DN)) + res_ctrls = get_password_warning(topology) + + log.info('Check whether the time is returned') + assert res_ctrls + + log.info("user's password will expire in {:d} seconds"\ + .format(res_ctrls[0].timeBeforeExpiration)) + finally: + log.info("Rebinding as DM") + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + +@pytest.mark.parametrize("attr,val",[(CONFIG_ATTR, 'off'), + ('passwordWarning', '3600')]) +def test_password_warning(topology, global_policy, add_user, attr, val): + """Test password expiry warning time by + setting passwordSendExpiringTime to off + and setting passwordWarning to a short value + + :Feature: Password Expiry Warning Time + + :Setup: Standalone DS instance with, + 1. Global password policy configures as below: + passwordExp: on + passwordMaxAge: 172800 + passwordWarning: 86400 + passwordSendExpiringTime: on + 2. User entry for binding + + :Steps: 1. Set passwordSendExpiringTime attribute to off + 2. Bind as the user + 3. Request the control for the user + + :Assert: Password expiry warning time should not be returned + + :Steps: 1. Set passwordWarning to a small value + (for eg: 3600 seconds) + 2. Bind with the user and request the password expiry warning + time + + :Assert: Password expiry warning time should be returned + """ + + try: + log.info('Set configuration parameter') + set_conf_attr(topology, attr, val) + + log.info("Binding with ({:s}) and requesting password expiry warning time"\ + .format(USER_DN)) + res_ctrls = get_password_warning(topology) + + log.info('Check the state of the control') + if not res_ctrls: + log.info("Password Expiry warning time is not returned as {:s} is set to {:s}"\ + .format(attr, val)) + else: + log.info("({:s}) password will expire in {:d} seconds"\ + .format(USER_DN, res_ctrls[0].timeBeforeExpiration)) + finally: + log.info("Rebinding as DM") + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + +def test_with_different_password_states(topology, global_policy, add_user): + """Test the control with different password states + + :Feature: Password Expiry Warning Time + + :Setup: Standalone DS instance with, + 1. Global password policy configured as below: + passwordExp: on + passwordMaxAge: 172800 + passwordWarning: 86400 + passwordSendExpiringTime: on + 2. User entry for binding to the server + + :Steps: 1. Expire user's password by setting the system + date past the valid period for the password + 2. Try to bind to the server with the user entry + 3. Set the system date to the current day + 4. Try to bind with the user entry and request + the control + + :Assert: 1. In the first try, the bind should fail with an + INVALID_CREDENTIALS error + 2. In the second try, the bind should be successful + and the password expiry warning time should be + returned + """ + + res_ctrls = None + try: + log.info("Expiring user's password by moving the"\ + " system date past the valid period") + subprocess.check_call(['/usr/bin/date', '-s', 'next month']) + + log.info('Wait for the server to pick up new date') + time.sleep(5) + + log.info("Attempting to bind with user {:s} and retrive the password"\ + " expiry warning time".format(USER_DN)) + with pytest.raises(ldap.INVALID_CREDENTIALS) as ex: + res_ctrls = get_password_warning(topology) + + log.info("Bind Failed, error: {:s}".format(str(ex))) + + log.info("Resetting the system date") + subprocess.check_call(['/usr/bin/date', '-s', 'last month']) + + log.info('Wait for the server to pick up new date') + time.sleep(5) + + log.info("Rebinding with {:s} and retrieving the password"\ + " expiry warning time".format(USER_DN)) + res_ctrls = get_password_warning(topology) + + log.info('Check that the control is returned') + assert res_ctrls + + log.info("user's password will expire in {:d} seconds"\ + .format(res_ctrls[0].timeBeforeExpiration)) + finally: + log.info("Rebinding as DM") + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + +def test_default_behavior(topology, global_policy_default, add_user): + """Test the default behavior of password + expiry warning time + + :Feature: Password Expiry Warning Time + + :Setup: Standalone DS instance with, + 1. Global password policy configured as follows, + passwordExp: on + passwordMaxAge: 86400 + passwordWarning: 86400 + passwordSendExpiringTime: off + 2. User entry for binding to the server + + :Steps: 1. Bind as the user + 2. Request the control for the user + + :Assert: Password expiry warning time should be returned by the + server by the server since passwordMaxAge and + passwordWarning are set to the same value + """ + + res_ctrls = None + try: + log.info("Binding with {:s} and requesting the password expiry warning time"\ + .format(USER_DN)) + res_ctrls = get_password_warning(topology) + + log.info('Check that control is returned even' + 'if passwordSendExpiringTime is set to off') + assert res_ctrls + + log.info("user's password will expire in {:d} seconds"\ + .format(res_ctrls[0].timeBeforeExpiration)) + finally: + log.info("Rebinding as DM") + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + +def test_with_local_policy(topology, global_policy, local_policy): + """Test the attribute with fine grained policy + set for the user + + :Feature: Password Expiry Warning Time + + :Setup: Standalone DS instance with, + 1. Global password policy configured as below, + passwordExp: on + passwordMaxAge: 172800 + passwordWarning: 86400 + passwordSendExpiringTime: on + 2. User entry for binding to the server + 3. Configure fine grained password policy for the user + as below: + ns-newpwpolicy.pl -D 'cn=Directory Manager' -w secret123 + -h localhost -p 389 -U 'uid=tuser,dc=example,dc=com' + + :Steps: 1. Bind as the user + 2. Request the control for the user + + :Assert: Password expiry warning time should not be returned for the + user + """ + + res_ctrls = None + try: + log.info("Attempting to get password expiry warning time for"\ + " user {:s}".format(USER_DN)) + res_ctrls = get_password_warning(topology) + + log.info('Check that the control is not returned') + assert not res_ctrls + + log.info("Password expiry warning time is not returned") + finally: + log.info("Rebinding as DM") + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/password/pwd_algo_test.py b/dirsrvtests/tests/suites/password/pwd_algo_test.py new file mode 100644 index 0000000..aa8cbf5 --- /dev/null +++ b/dirsrvtests/tests/suites/password/pwd_algo_test.py @@ -0,0 +1,143 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +DEBUGGING = True +USER_DN = 'uid=user,ou=People,%s' % DEFAULT_SUFFIX + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) + + +log = logging.getLogger(__name__) + + +class TopologyStandalone(object): + """The DS Topology Class""" + def __init__(self, standalone): + """Init""" + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + """Create DS Deployment""" + + # Creating standalone instance ... + if DEBUGGING: + standalone = DirSrv(verbose=True) + else: + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + """If we are debugging just stop the instances, otherwise remove + them + """ + if DEBUGGING: + standalone.stop() + else: + standalone.delete() + + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + +def _test_bind(inst, password): + result = True + userconn = ldap.initialize("ldap://%s:%s" % (HOST_STANDALONE, PORT_STANDALONE)) + try: + userconn.simple_bind_s(USER_DN, password) + userconn.unbind_s() + except ldap.INVALID_CREDENTIALS: + result = False + return result + +def _test_algo(inst, algo_name): + inst.config.set('passwordStorageScheme', algo_name) + + if DEBUGGING: + print('Testing %s', algo_name) + + # Create the user with a password + inst.add_s(Entry(( + USER_DN, { + 'objectClass': 'top account simplesecurityobject'.split(), + 'uid': 'user', + 'userpassword': 'Secret123' + }))) + + # Make sure when we read the userPassword field, it is the correct ALGO + pw_field = inst.search_s(USER_DN, ldap.SCOPE_BASE, '(objectClass=*)', ['userPassword'] )[0] + + if DEBUGGING: + print(pw_field.getValue('userPassword')) + + if algo_name != 'CLEAR': + assert(algo_name.lower() in pw_field.getValue('userPassword').lower()) + # Now make sure a bind works + assert(_test_bind(inst, 'Secret123')) + # Bind with a wrong shorter password, should fail + assert(not _test_bind(inst, 'Wrong')) + # Bind with a wrong longer password, should fail + assert(not _test_bind(inst, 'This is even more wrong')) + # Bind with a wrong exact length password. + assert(not _test_bind(inst, 'Alsowrong')) + # Bind with a subset password, should fail + assert(not _test_bind(inst, 'Secret')) + if algo_name != 'CRYPT': + # Bind with a subset password that is 1 char shorter, to detect off by 1 in clear + assert(not _test_bind(inst, 'Secret12')) + # Bind with a superset password, should fail + assert(not _test_bind(inst, 'Secret123456')) + # Delete the user + inst.delete_s(USER_DN) + # done! + +def test_pwd_algo_test(topology): + """ + Assert that all of our password algorithms correctly PASS and FAIL varying + password conditions. + + """ + if DEBUGGING: + # Add debugging steps(if any)... + pass + + for algo in ('CLEAR', 'CRYPT', 'MD5', 'SHA', 'SHA256', 'SHA384', 'SHA512', 'SMD5', 'SSHA', 'SSHA256', 'SSHA384', 'SSHA512'): + _test_algo(topology.standalone, algo) + + log.info('Test PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/suites/password/pwp_history_test.py b/dirsrvtests/tests/suites/password/pwp_history_test.py new file mode 100644 index 0000000..d4d3e60 --- /dev/null +++ b/dirsrvtests/tests/suites/password/pwp_history_test.py @@ -0,0 +1,270 @@ +import os +import ldap +import logging +import pytest +import time +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + + +class TopologyStandalone(object): + """ Topology class """ + def __init__(self, standalone): + """ init """ + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + """ + Creating standalone instance ... + """ + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + """ Clean up instance """ + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def test_pwp_history_test(topology): + """ + Test password policy history feature: + - Test password history is enforced + - Test password history works after an Admin resets the password + - Test that the correct number of passwords are stored in history + """ + + USER_DN = 'uid=testuser,' + DEFAULT_SUFFIX + + # + # Configure password history policy and add a test user + # + try: + topology.standalone.modify_s("cn=config", + [(ldap.MOD_REPLACE, + 'passwordHistory', 'on'), + (ldap.MOD_REPLACE, + 'passwordInHistory', '3'), + (ldap.MOD_REPLACE, + 'passwordChange', 'on'), + (ldap.MOD_REPLACE, + 'passwordStorageScheme', 'CLEAR')]) + log.info('Configured password policy.') + except ldap.LDAPError as e: + log.fatal('Failed to configure password policy: ' + str(e)) + assert False + time.sleep(1) + + try: + topology.standalone.add_s(Entry((USER_DN, { + 'objectclass': ['top', 'extensibleObject'], + 'sn': 'user', + 'cn': 'test user', + 'uid': 'testuser', + 'userpassword': 'password'}))) + except ldap.LDAPError as e: + log.fatal('Failed to add test user' + USER_DN + ': error ' + str(e)) + assert False + + # + # Test that password history is enforced. + # + try: + topology.standalone.simple_bind_s(USER_DN, 'password') + except ldap.LDAPError as e: + log.fatal('Failed to bind as user: ' + str(e)) + assert False + + # Attempt to change password to the same password + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'userpassword', 'password')]) + log.info('Incorrectly able to to set password to existing password.') + assert False + except ldap.CONSTRAINT_VIOLATION: + log.info('Password change correctly rejected') + except ldap.LDAPError as e: + log.fatal('Failed to attempt to change password: ' + str(e)) + assert False + + # + # Keep changing password until we fill the password history (3) + # + + # password1 + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'userpassword', 'password1')]) + except ldap.LDAPError as e: + log.fatal('Failed to change password: ' + str(e)) + assert False + try: + topology.standalone.simple_bind_s(USER_DN, 'password1') + except ldap.LDAPError as e: + log.fatal('Failed to bind as user using "password1": ' + str(e)) + assert False + time.sleep(1) + + # password2 + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'userpassword', 'password2')]) + except ldap.LDAPError as e: + log.fatal('Failed to change password: ' + str(e)) + assert False + try: + topology.standalone.simple_bind_s(USER_DN, 'password2') + except ldap.LDAPError as e: + log.fatal('Failed to bind as user using "password2": ' + str(e)) + assert False + time.sleep(1) + + # password3 + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'userpassword', 'password3')]) + except ldap.LDAPError as e: + log.fatal('Failed to change password: ' + str(e)) + assert False + try: + topology.standalone.simple_bind_s(USER_DN, 'password3') + except ldap.LDAPError as e: + log.fatal('Failed to bind as user using "password3": ' + str(e)) + assert False + time.sleep(1) + + # password4 + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'userpassword', 'password4')]) + except ldap.LDAPError as e: + log.fatal('Failed to change password: ' + str(e)) + assert False + try: + topology.standalone.simple_bind_s(USER_DN, 'password4') + except ldap.LDAPError as e: + log.fatal('Failed to bind as user using "password4": ' + str(e)) + assert False + time.sleep(1) + + # + # Check that we only have 3 passwords stored in history\ + # + try: + entry = topology.standalone.search_s(USER_DN, ldap.SCOPE_BASE, + 'objectclass=*', + ['passwordHistory']) + pwds = entry[0].getValues('passwordHistory') + if len(pwds) != 3: + log.fatal('Incorrect number of passwords stored in histry: %d' % + len(pwds)) + assert False + else: + log.info('Correct number of passwords found in history.') + except ldap.LDAPError as e: + log.fatal('Failed to get user entry: ' + str(e)) + assert False + + # + # Attempt to change the password to previous passwords + # + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'userpassword', 'password1')]) + log.info('Incorrectly able to to set password to previous password1.') + assert False + except ldap.CONSTRAINT_VIOLATION: + log.info('Password change correctly rejected') + except ldap.LDAPError as e: + log.fatal('Failed to attempt to change password: ' + str(e)) + assert False + + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'userpassword', 'password2')]) + log.info('Incorrectly able to to set password to previous password2.') + assert False + except ldap.CONSTRAINT_VIOLATION: + log.info('Password change correctly rejected') + except ldap.LDAPError as e: + log.fatal('Failed to attempt to change password: ' + str(e)) + assert False + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'userpassword', 'password3')]) + log.info('Incorrectly able to to set password to previous password3.') + assert False + except ldap.CONSTRAINT_VIOLATION: + log.info('Password change correctly rejected') + except ldap.LDAPError as e: + log.fatal('Failed to attempt to change password: ' + str(e)) + assert False + + # + # Reset password by Directory Manager(admin reset) + # + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('Failed to bind as rootDN: ' + str(e)) + assert False + + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'userpassword', + 'password-reset')]) + except ldap.LDAPError as e: + log.fatal('Failed to attempt to reset password: ' + str(e)) + assert False + + # Try and change the password to the previous password before the reset + try: + topology.standalone.simple_bind_s(USER_DN, 'password-reset') + except ldap.LDAPError as e: + log.fatal('Failed to bind as user: ' + str(e)) + assert False + + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'userpassword', 'password4')]) + log.info('Incorrectly able to to set password to previous password4.') + assert False + except ldap.CONSTRAINT_VIOLATION: + log.info('Password change correctly rejected') + except ldap.LDAPError as e: + log.fatal('Failed to attempt to change password: ' + str(e)) + assert False + + log.info('Test suite PASSED.') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/posix_winsync_plugin/__init__.py b/dirsrvtests/tests/suites/posix_winsync_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/posix_winsync_plugin/posix_winsync_test.py b/dirsrvtests/tests/suites/posix_winsync_plugin/posix_winsync_test.py new file mode 100644 index 0000000..1c1a993 --- /dev/null +++ b/dirsrvtests/tests/suites/posix_winsync_plugin/posix_winsync_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_posix_winsync_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_posix_winsync_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/psearch/__init__.py b/dirsrvtests/tests/suites/psearch/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/psearch/psearch_test.py b/dirsrvtests/tests/suites/psearch/psearch_test.py new file mode 100644 index 0000000..f78e19e --- /dev/null +++ b/dirsrvtests/tests/suites/psearch/psearch_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_psearch_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_psearch_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/referint_plugin/__init__.py b/dirsrvtests/tests/suites/referint_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/referint_plugin/referint_test.py b/dirsrvtests/tests/suites/referint_plugin/referint_test.py new file mode 100644 index 0000000..ded1622 --- /dev/null +++ b/dirsrvtests/tests/suites/referint_plugin/referint_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_referint_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_referint_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/replication/__init__.py b/dirsrvtests/tests/suites/replication/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/replication/cleanallruv_test.py b/dirsrvtests/tests/suites/replication/cleanallruv_test.py new file mode 100644 index 0000000..afed323 --- /dev/null +++ b/dirsrvtests/tests/suites/replication/cleanallruv_test.py @@ -0,0 +1,1215 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +import threading +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389.repltools import ReplTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class AddUsers(threading.Thread): + def __init__(self, inst, num_users): + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + self.num_users = num_users + + def openConnection(self, inst): + # Open a new connection to our LDAP server + server = DirSrv(verbose=False) + args_instance[SER_HOST] = inst.host + args_instance[SER_PORT] = inst.port + args_instance[SER_SERVERID_PROP] = inst.serverid + args_standalone = args_instance.copy() + server.allocate(args_standalone) + server.open() + return server + + def run(self): + # Start adding users + conn = self.openConnection(self.inst) + idx = 0 + + while idx < self.num_users: + USER_DN = 'uid=' + self.inst.serverid + '_' + str(idx) + ',' + DEFAULT_SUFFIX + try: + conn.add_s(Entry((USER_DN, {'objectclass': 'top extensibleObject'.split(), + 'uid': 'user' + str(idx)}))) + except ldap.UNWILLING_TO_PERFORM: + # One of the masters was probably put into read only mode - just break out + break + except ldap.ALREADY_EXISTS: + pass + except ldap.LDAPError as e: + log.error('AddUsers: failed to add (' + USER_DN + ') error: ' + e.message['desc']) + assert False + idx += 1 + + conn.close() + + +def remove_master4_agmts(msg, topology): + """Remove all the repl agmts to master4. + """ + log.info('%s: remove all the agreements to master 4...' % msg) + try: + topology.master1.agreement.delete(DEFAULT_SUFFIX, + topology.master4.host, + topology.master4.port) + except ldap.LDAPError as e: + log.fatal('%s: Failed to delete agmt(m1 -> m4), error: %s' % + (msg, str(e))) + assert False + try: + topology.master2.agreement.delete(DEFAULT_SUFFIX, + topology.master4.host, + topology.master4.port) + except ldap.LDAPError as e: + log.fatal('%s: Failed to delete agmt(m2 -> m4), error: %s' % + (msg, str(e))) + assert False + try: + topology.master3.agreement.delete(DEFAULT_SUFFIX, + topology.master4.host, + topology.master4.port) + except ldap.LDAPError as e: + log.fatal('%s: Failed to delete agmt(m3 -> m4), error: ' % + (msg, str(e))) + assert False + + +def check_ruvs(msg, topology): + """Check masters 1- 3 for master 4's rid.""" + clean = False + count = 0 + while not clean and count < 10: + clean = True + + # Check master 1 + try: + entry = topology.master1.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + REPLICA_RUV_FILTER) + if not entry: + log.error('%s: Failed to find db tombstone entry from master' % + msg) + repl_fail(replica_inst) + elements = entry[0].getValues('nsds50ruv') + for ruv in elements: + if 'replica 4' in ruv: + # Not cleaned + log.error('%s: Master 1 not cleaned!' % msg) + clean = False + if clean: + log.info('%s: Master 1 is cleaned.' % msg) + except ldap.LDAPError as e: + log.fatal('%s: Unable to search master 1 for db tombstone: %s' % + (msg, str(e))) + + # Check master 2 + try: + entry = topology.master2.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + REPLICA_RUV_FILTER) + if not entry: + log.error('%s: Failed to find tombstone entry from master' % + msg) + repl_fail(replica_inst) + elements = entry[0].getValues('nsds50ruv') + for ruv in elements: + if 'replica 4' in ruv: + # Not cleaned + log.error('%s: Master 2 not cleaned!' % msg) + clean = False + if clean: + log.info('%s: Master 2 is cleaned.', msg) + except ldap.LDAPError as e: + log.fatal('Unable to search master 2 for db tombstone: ' + + e.message['desc']) + + # Check master 3 + try: + entry = topology.master3.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + REPLICA_RUV_FILTER) + if not entry: + log.error('%s: Failed to find db tombstone entry from master' % + msg) + repl_fail(replica_inst) + elements = entry[0].getValues('nsds50ruv') + for ruv in elements: + if 'replica 4' in ruv: + # Not cleaned + log.error('%s: Master 3 not cleaned!' % msg) + clean = False + if clean: + log.info('%s: Master 3 is cleaned.' % msg) + except ldap.LDAPError as e: + log.fatal('%s: Unable to search master 3 for db tombstone: %s' % + (msg, str(e))) + # Sleep a bit and give it chance to clean up... + time.sleep(5) + count += 1 + + return clean + + +def task_done(topology, task_dn, timeout=60): + """Check if the task is complete""" + attrlist = ['nsTaskLog', 'nsTaskStatus', 'nsTaskExitCode', + 'nsTaskCurrentItem', 'nsTaskTotalItems'] + done = False + count = 0 + + while not done and count < timeout: + try: + entry = topology.master1.getEntry(task_dn, attrlist=attrlist) + if not entry or entry.nsTaskExitCode: + done = True + break + except ldap.NO_SUCH_OBJECT: + done = True + break + except ldap.LDAPError: + break + time.sleep(1) + count += 1 + + return done + + +class TopologyReplication(object): + def __init__(self, master1, master2, master3, master4, m1_m2_agmt, m1_m3_agmt, m1_m4_agmt): + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + master3.open() + self.master3 = master3 + master4.open() + self.master4 = master4 + + # Store the agreement dn's for future initializations + self.m1_m2_agmt = m1_m2_agmt + self.m1_m3_agmt = m1_m3_agmt + self.m1_m4_agmt = m1_m4_agmt + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating master 1... + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + master1.log = log + + # Creating master 2... + master2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # Creating master 3... + master3 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_3 + args_instance[SER_PORT] = PORT_MASTER_3 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_3 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master3.allocate(args_master) + instance_master3 = master3.exists() + if instance_master3: + master3.delete() + master3.create() + master3.open() + master3.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_3) + + # Creating master 4... + master4 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_4 + args_instance[SER_PORT] = PORT_MASTER_4 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_4 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master4.allocate(args_master) + instance_master4 = master4.exists() + if instance_master4: + master4.delete() + master4.create() + master4.open() + master4.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_4) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: 'meTo_%s:%s' % (master2.host, master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 1 to master 3 + properties = {RA_NAME: 'meTo_%s:%s' % (master3.host, master3.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m3_agmt = master1.agreement.create(suffix=SUFFIX, host=master3.host, port=master3.port, properties=properties) + if not m1_m3_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m3_agmt) + + # Creating agreement from master 1 to master 4 + properties = {RA_NAME: 'meTo_%s:%s' % (master4.host, master4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m4_agmt = master1.agreement.create(suffix=SUFFIX, host=master4.host, port=master4.port, properties=properties) + if not m1_m4_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m4_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: 'meTo_%s:%s' % (master1.host, master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Creating agreement from master 2 to master 3 + properties = {RA_NAME: 'meTo_%s:%s' % (master3.host, master3.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m3_agmt = master2.agreement.create(suffix=SUFFIX, host=master3.host, port=master3.port, properties=properties) + if not m2_m3_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m3_agmt) + + # Creating agreement from master 2 to master 4 + properties = {RA_NAME: 'meTo_%s:%s' % (master4.host, master4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m4_agmt = master2.agreement.create(suffix=SUFFIX, host=master4.host, port=master4.port, properties=properties) + if not m2_m4_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m4_agmt) + + # Creating agreement from master 3 to master 1 + properties = {RA_NAME: 'meTo_%s:%s' % (master1.host, master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_m1_agmt = master3.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m3_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m3_m1_agmt) + + # Creating agreement from master 3 to master 2 + properties = {RA_NAME: 'meTo_%s:%s' % (master2.host, master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_m2_agmt = master3.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m3_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m3_m2_agmt) + + # Creating agreement from master 3 to master 4 + properties = {RA_NAME: 'meTo_%s:%s' % (master4.host, master4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_m4_agmt = master3.agreement.create(suffix=SUFFIX, host=master4.host, port=master4.port, properties=properties) + if not m3_m4_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m3_m4_agmt) + + # Creating agreement from master 4 to master 1 + properties = {RA_NAME: 'meTo_%s:%s' % (master1.host, master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_m1_agmt = master4.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m4_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m4_m1_agmt) + + # Creating agreement from master 4 to master 2 + properties = {RA_NAME: 'meTo_%s:%s' % (master2.host, master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_m2_agmt = master4.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m4_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m4_m2_agmt) + + # Creating agreement from master 4 to master 3 + properties = {RA_NAME: 'meTo_%s:%s' % (master3.host, master3.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_m3_agmt = master4.agreement.create(suffix=SUFFIX, host=master3.host, port=master3.port, properties=properties) + if not m4_m3_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m4_m3_agmt) + + # Allow the replicas to get situated with the new agreements + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + master1.agreement.init(SUFFIX, HOST_MASTER_3, PORT_MASTER_3) + master1.waitForReplInit(m1_m3_agmt) + master1.agreement.init(SUFFIX, HOST_MASTER_4, PORT_MASTER_4) + master1.waitForReplInit(m1_m4_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Clear out the tmp dir + master1.clearTmpDir(__file__) + def fin(): + master1.delete() + master2.delete() + master3.delete() + master4.delete() + request.addfinalizer(fin) + + return TopologyReplication(master1, master2, master3, master4, m1_m2_agmt, m1_m3_agmt, m1_m4_agmt) + + +def restore_master4(topology): + ''' + In our tests will always be removing master 4, so we need a common + way to restore it for another test + ''' + + log.info('Restoring master 4...') + + # Enable replication on master 4 + topology.master4.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_4) + + # + # Create agreements from master 4 -> m1, m2 ,m3 + # + # Creating agreement from master 4 to master 1 + properties = {RA_NAME: 'meTo_%s:%s' % (topology.master1.host, topology.master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_m1_agmt = topology.master4.agreement.create(suffix=SUFFIX, host=topology.master1.host, + port=topology.master1.port, properties=properties) + if not m4_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m4_m1_agmt) + + # Creating agreement from master 4 to master 2 + properties = {RA_NAME: 'meTo_%s:%s' % (topology.master2.host, topology.master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_m2_agmt = topology.master4.agreement.create(suffix=SUFFIX, host=topology.master2.host, + port=topology.master2.port, properties=properties) + if not m4_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m4_m2_agmt) + + # Creating agreement from master 4 to master 3 + properties = {RA_NAME: 'meTo_%s:%s' % (topology.master3.host, topology.master3.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m4_m3_agmt = topology.master4.agreement.create(suffix=SUFFIX, host=topology.master3.host, + port=topology.master3.port, properties=properties) + if not m4_m3_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m4_m3_agmt) + + # + # Create agreements from m1, m2, m3 to master 4 + # + # Creating agreement from master 1 to master 4 + properties = {RA_NAME: 'meTo_%s:%s' % (topology.master4.host, topology.master4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m4_agmt = topology.master1.agreement.create(suffix=SUFFIX, host=topology.master4.host, + port=topology.master4.port, properties=properties) + if not m1_m4_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m4_agmt) + + # Creating agreement from master 2 to master 4 + properties = {RA_NAME: 'meTo_%s:%s' % (topology.master4.host, topology.master4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m4_agmt = topology.master2.agreement.create(suffix=SUFFIX, host=topology.master4.host, + port=topology.master4.port, properties=properties) + if not m2_m4_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m4_agmt) + + # Creating agreement from master 3 to master 4 + properties = {RA_NAME: 'meTo_%s:%s' % (topology.master4.host, topology.master4.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_m4_agmt = topology.master3.agreement.create(suffix=SUFFIX, host=topology.master4.host, + port=topology.master4.port, properties=properties) + if not m3_m4_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m3_m4_agmt) + + # + # Stop the servers - this allows the rid(for master4) to be used again + # + topology.master1.stop(timeout=30) + topology.master2.stop(timeout=30) + topology.master3.stop(timeout=30) + topology.master4.stop(timeout=30) + + # + # Initialize the agreements + # + # m1 -> m2 + topology.master1.start(timeout=30) + topology.master2.start(timeout=30) + time.sleep(5) + topology.master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + topology.master1.waitForReplInit(topology.m1_m2_agmt) + + # m1 -> m3 + topology.master3.start(timeout=30) + time.sleep(5) + topology.master1.agreement.init(SUFFIX, HOST_MASTER_3, PORT_MASTER_3) + topology.master1.waitForReplInit(topology.m1_m3_agmt) + + # m1 -> m4 + time.sleep(5) + topology.master4.start(timeout=30) + topology.master1.agreement.init(SUFFIX, HOST_MASTER_4, PORT_MASTER_4) + topology.master1.waitForReplInit(topology.m1_m4_agmt) + time.sleep(5) + + # + # Test Replication is working + # + # Check replication is working with previous working master(m1 -> m2) + if topology.master1.testReplication(DEFAULT_SUFFIX, topology.master2): + log.info('Replication is working m1 -> m2.') + else: + log.fatal('restore_master4: Replication is not working from m1 -> m2.') + assert False + time.sleep(1) + + # Check replication is working from master 1 to master 4... + if topology.master1.testReplication(DEFAULT_SUFFIX, topology.master4): + log.info('Replication is working m1 -> m4.') + else: + log.fatal('restore_master4: Replication is not working from m1 -> m4.') + assert False + time.sleep(1) + + # Check replication is working from master 4 to master1... + if topology.master4.testReplication(DEFAULT_SUFFIX, topology.master1): + log.info('Replication is working m4 -> m1.') + else: + log.fatal('restore_master4: Replication is not working from m4 -> 1.') + assert False + time.sleep(5) + + log.info('Master 4 has been successfully restored.') + + +def test_cleanallruv_init(topology): + ''' + Make updates on each master to make sure we have the all master RUVs on + each master. + ''' + + log.info('Initializing cleanAllRUV test suite...') + + # Master 1 + if not topology.master1.testReplication(DEFAULT_SUFFIX, topology.master2): + log.fatal('test_cleanallruv_init: Replication is not working between master 1 and master 2.') + assert False + + if not topology.master1.testReplication(DEFAULT_SUFFIX, topology.master3): + log.fatal('test_cleanallruv_init: Replication is not working between master 1 and master 3.') + assert False + + if not topology.master1.testReplication(DEFAULT_SUFFIX, topology.master4): + log.fatal('test_cleanallruv_init: Replication is not working between master 1 and master 4.') + assert False + + # Master 2 + if not topology.master2.testReplication(DEFAULT_SUFFIX, topology.master1): + log.fatal('test_cleanallruv_init: Replication is not working between master 2 and master 1.') + assert False + + if not topology.master2.testReplication(DEFAULT_SUFFIX, topology.master3): + log.fatal('test_cleanallruv_init: Replication is not working between master 2 and master 3.') + assert False + + if not topology.master2.testReplication(DEFAULT_SUFFIX, topology.master4): + log.fatal('test_cleanallruv_init: Replication is not working between master 2 and master 4.') + assert False + + # Master 3 + if not topology.master3.testReplication(DEFAULT_SUFFIX, topology.master1): + log.fatal('test_cleanallruv_init: Replication is not working between master 2 and master 1.') + assert False + + if not topology.master3.testReplication(DEFAULT_SUFFIX, topology.master2): + log.fatal('test_cleanallruv_init: Replication is not working between master 2 and master 2.') + assert False + + if not topology.master3.testReplication(DEFAULT_SUFFIX, topology.master4): + log.fatal('test_cleanallruv_init: Replication is not working between master 2 and master 4.') + assert False + + # Master 4 + if not topology.master4.testReplication(DEFAULT_SUFFIX, topology.master1): + log.fatal('test_cleanallruv_init: Replication is not working between master 2 and master 1.') + assert False + + if not topology.master4.testReplication(DEFAULT_SUFFIX, topology.master2): + log.fatal('test_cleanallruv_init: Replication is not working between master 2 and master 2.') + assert False + + if not topology.master4.testReplication(DEFAULT_SUFFIX, topology.master3): + log.fatal('test_cleanallruv_init: Replication is not working between master 2 and master 3.') + assert False + + log.info('Initialized cleanAllRUV test suite.') + + +def test_cleanallruv_clean(topology): + ''' + Disable a master, remove agreements to that master, and clean the RUVs on + the remaining replicas + ''' + + log.info('Running test_cleanallruv_clean...') + + # Disable master 4 + log.info('test_cleanallruv_clean: disable master 4...') + try: + topology.master4.replica.disableReplication(DEFAULT_SUFFIX) + except: + log.fatal('error!') + assert False + + # Remove the agreements from the other masters that point to master 4 + remove_master4_agmts("test_cleanallruv_clean", topology) + + # Run the task + log.info('test_cleanallruv_clean: run the cleanAllRUV task...') + try: + topology.master1.tasks.cleanAllRUV(suffix=DEFAULT_SUFFIX, replicaid='4', + args={TASK_WAIT: True}) + except ValueError as e: + log.fatal('test_cleanallruv_clean: Problem running cleanAllRuv task: ' + + e.message('desc')) + assert False + + # Check the other master's RUV for 'replica 4' + log.info('test_cleanallruv_clean: check all the masters have been cleaned...') + clean = check_ruvs("test_cleanallruv_clean", topology) + + if not clean: + log.fatal('test_cleanallruv_clean: Failed to clean replicas') + assert False + + log.info('test_cleanallruv_clean PASSED, restoring master 4...') + + # + # Cleanup - restore master 4 + # + restore_master4(topology) + + +def test_cleanallruv_clean_restart(topology): + ''' + Test that if a master istopped during the clean process, that it + resumes and finishes when its started. + ''' + + log.info('Running test_cleanallruv_clean_restart...') + + # Disable master 4 + log.info('test_cleanallruv_clean_restart: disable master 4...') + try: + topology.master4.replica.disableReplication(DEFAULT_SUFFIX) + except: + log.fatal('error!') + assert False + + # Remove the agreements from the other masters that point to master 4 + log.info('test_cleanallruv_clean: remove all the agreements to master 4...') + remove_master4_agmts("test_cleanallruv_clean restart", topology) + + # Stop master 3 to keep the task running, so we can stop master 1... + topology.master3.stop(timeout=30) + + # Run the task + log.info('test_cleanallruv_clean_restart: run the cleanAllRUV task...') + try: + (task_dn, rc) = topology.master1.tasks.cleanAllRUV( + suffix=DEFAULT_SUFFIX, replicaid='4', args={TASK_WAIT: False}) + except ValueError as e: + log.fatal('test_cleanallruv_clean_restart: Problem running cleanAllRuv task: ' + + e.message('desc')) + assert False + + # Sleep a bit, then stop master 1 + time.sleep(5) + topology.master1.stop(timeout=30) + + # Now start master 3 & 1, and make sure we didn't crash + topology.master3.start(timeout=30) + if topology.master3.detectDisorderlyShutdown(): + log.fatal('test_cleanallruv_clean_restart: Master 3 previously crashed!') + assert False + + topology.master1.start(timeout=30) + if topology.master1.detectDisorderlyShutdown(): + log.fatal('test_cleanallruv_clean_restart: Master 1 previously crashed!') + assert False + + # Wait a little for agmts/cleanallruv to wake up + if not task_done(topology, task_dn): + log.fatal('test_cleanallruv_clean_restart: cleanAllRUV task did not finish') + assert False + + # Check the other master's RUV for 'replica 4' + log.info('test_cleanallruv_clean_restart: check all the masters have been cleaned...') + clean = check_ruvs("test_cleanallruv_clean_restart", topology) + if not clean: + log.fatal('Failed to clean replicas') + assert False + + log.info('test_cleanallruv_clean_restart PASSED, restoring master 4...') + + # + # Cleanup - restore master 4 + # + restore_master4(topology) + + +def test_cleanallruv_clean_force(topology): + ''' + Disable a master, remove agreements to that master, and clean the RUVs on + the remaining replicas + ''' + + log.info('Running test_cleanallruv_clean_force...') + + # Stop master 3, while we update master 4, so that 3 is behind the other masters + topology.master3.stop(timeout=10) + + # Add a bunch of updates to master 4 + m4_add_users = AddUsers(topology.master4, 1500) + m4_add_users.start() + m4_add_users.join() + + # Disable master 4 + log.info('test_cleanallruv_clean_force: disable master 4...') + try: + topology.master4.replica.disableReplication(DEFAULT_SUFFIX) + except: + log.fatal('error!') + assert False + + # Start master 3, it should be out of sync with the other replicas... + topology.master3.start(timeout=30) + + # Remove the agreements from the other masters that point to master 4 + remove_master4_agmts("test_cleanallruv_clean_force", topology) + + # Run the task, use "force" because master 3 is not in sync with the other replicas + # in regards to the replica 4 RUV + log.info('test_cleanallruv_clean_force: run the cleanAllRUV task...') + try: + topology.master1.tasks.cleanAllRUV(suffix=DEFAULT_SUFFIX, replicaid='4', + force=True, args={TASK_WAIT: True}) + except ValueError as e: + log.fatal('test_cleanallruv_clean_force: Problem running cleanAllRuv task: ' + + e.message('desc')) + assert False + + # Check the other master's RUV for 'replica 4' + log.info('test_cleanallruv_clean_force: check all the masters have been cleaned...') + clean = check_ruvs("test_cleanallruv_clean_force", topology) + if not clean: + log.fatal('test_cleanallruv_clean_force: Failed to clean replicas') + assert False + + log.info('test_cleanallruv_clean_force PASSED, restoring master 4...') + + # + # Cleanup - restore master 4 + # + restore_master4(topology) + + +def test_cleanallruv_abort(topology): + ''' + Test the abort task. + + DIsable master 4 + Stop master 2 so that it can not be cleaned + Run the clean task + Wait a bit + Abort the task + Verify task is aborted + ''' + + log.info('Running test_cleanallruv_abort...') + + # Disable master 4 + log.info('test_cleanallruv_abort: disable replication on master 4...') + try: + topology.master4.replica.disableReplication(DEFAULT_SUFFIX) + except: + log.fatal('test_cleanallruv_abort: failed to disable replication') + assert False + + # Remove the agreements from the other masters that point to master 4 + remove_master4_agmts("test_cleanallruv_abort", topology) + + # Stop master 2 + log.info('test_cleanallruv_abort: stop master 2 to freeze the cleanAllRUV task...') + topology.master2.stop(timeout=30) + + # Run the task + log.info('test_cleanallruv_abort: add the cleanAllRUV task...') + try: + (clean_task_dn, rc) = topology.master1.tasks.cleanAllRUV(suffix=DEFAULT_SUFFIX, + replicaid='4', args={TASK_WAIT: False}) + except ValueError as e: + log.fatal('test_cleanallruv_abort: Problem running cleanAllRuv task: ' + + e.message('desc')) + assert False + + # Wait a bit + time.sleep(5) + + # Abort the task + log.info('test_cleanallruv_abort: abort the cleanAllRUV task...') + try: + topology.master1.tasks.abortCleanAllRUV(suffix=DEFAULT_SUFFIX, replicaid='4', + args={TASK_WAIT: True}) + except ValueError as e: + log.fatal('test_cleanallruv_abort: Problem running abortCleanAllRuv task: ' + + e.message('desc')) + assert False + + # Check master 1 does not have the clean task running + log.info('test_cleanallruv_abort: check master 1 no longer has a cleanAllRUV task...') + if not task_done(topology, clean_task_dn): + log.fatal('test_cleanallruv_abort: CleanAllRUV task was not aborted') + assert False + + # Start master 2 + log.info('test_cleanallruv_abort: start master 2 to begin the restore process...') + topology.master2.start(timeout=30) + + # + # Now run the clean task task again to we can properly restore master 4 + # + log.info('test_cleanallruv_abort: run cleanAllRUV task so we can properly restore master 4...') + try: + topology.master1.tasks.cleanAllRUV(suffix=DEFAULT_SUFFIX, + replicaid='4', args={TASK_WAIT: True}) + except ValueError as e: + log.fatal('test_cleanallruv_abort: Problem running cleanAllRuv task: ' + e.message('desc')) + assert False + + log.info('test_cleanallruv_abort PASSED, restoring master 4...') + + # + # Cleanup - Restore master 4 + # + restore_master4(topology) + + +def test_cleanallruv_abort_restart(topology): + ''' + Test the abort task can handle a restart, and then resume + ''' + + log.info('Running test_cleanallruv_abort_restart...') + + # Disable master 4 + log.info('test_cleanallruv_abort_restart: disable replication on master 4...') + try: + topology.master4.replica.disableReplication(DEFAULT_SUFFIX) + except: + log.fatal('error!') + assert False + + # Remove the agreements from the other masters that point to master 4 + log.info('test_cleanallruv_abort_restart: remove all the agreements to master 4...)') + remove_master4_agmts("test_cleanallruv_abort_restart", topology) + + # Stop master 3 + log.info('test_cleanallruv_abort_restart: stop master 3 to freeze the cleanAllRUV task...') + topology.master3.stop() + + # Run the task + log.info('test_cleanallruv_abort_restart: add the cleanAllRUV task...') + try: + (clean_task_dn, rc) = topology.master1.tasks.cleanAllRUV(suffix=DEFAULT_SUFFIX, + replicaid='4', args={TASK_WAIT: False}) + except ValueError as e: + log.fatal('test_cleanallruv_abort_restart: Problem running cleanAllRuv task: ' + + e.message('desc')) + assert False + + # Wait a bit + time.sleep(5) + + # Abort the task + log.info('test_cleanallruv_abort_restart: abort the cleanAllRUV task...') + try: + topology.master1.tasks.abortCleanAllRUV(suffix=DEFAULT_SUFFIX, replicaid='4', + certify=True, args={TASK_WAIT: False}) + except ValueError as e: + log.fatal('test_cleanallruv_abort_restart: Problem running test_cleanallruv_abort_restart task: ' + + e.message('desc')) + assert False + + # Allow task to run for a bit: + time.sleep(5) + + # Check master 1 does not have the clean task running + log.info('test_cleanallruv_abort: check master 1 no longer has a cleanAllRUV task...') + + if not task_done(topology, clean_task_dn): + log.fatal('test_cleanallruv_abort_restart: CleanAllRUV task was not aborted') + assert False + + # Now restart master 1, and make sure the abort process completes + topology.master1.restart() + if topology.master1.detectDisorderlyShutdown(): + log.fatal('test_cleanallruv_abort_restart: Master 1 previously crashed!') + assert False + + # Start master 3 + topology.master3.start() + + # Check master 1 tried to run abort task. We expect the abort task to be aborted. + if not topology.master1.searchErrorsLog('Aborting abort task'): + log.fatal('test_cleanallruv_abort_restart: Abort task did not restart') + assert False + + # + # Now run the clean task task again to we can properly restore master 4 + # + log.info('test_cleanallruv_abort_restart: run cleanAllRUV task so we can properly restore master 4...') + try: + topology.master1.tasks.cleanAllRUV(suffix=DEFAULT_SUFFIX, + replicaid='4', args={TASK_WAIT: True}) + except ValueError as e: + log.fatal('test_cleanallruv_abort_restart: Problem running cleanAllRuv task: ' + + e.message('desc')) + assert False + + log.info('test_cleanallruv_abort_restart PASSED, restoring master 4...') + + # + # Cleanup - Restore master 4 + # + restore_master4(topology) + + +def test_cleanallruv_abort_certify(topology): + ''' + Test the abort task. + + Disable master 4 + Stop master 2 so that it can not be cleaned + Run the clean task + Wait a bit + Abort the task + Verify task is aborted + ''' + + log.info('Running test_cleanallruv_abort_certify...') + + # Disable master 4 + log.info('test_cleanallruv_abort_certify: disable replication on master 4...') + try: + topology.master4.replica.disableReplication(DEFAULT_SUFFIX) + except: + log.fatal('error!') + assert False + + # Remove the agreements from the other masters that point to master 4 + remove_master4_agmts("test_cleanallruv_abort_certify", topology) + + # Stop master 2 + log.info('test_cleanallruv_abort_certify: stop master 2 to freeze the cleanAllRUV task...') + topology.master2.stop() + + # Run the task + log.info('test_cleanallruv_abort_certify: add the cleanAllRUV task...') + try: + (clean_task_dn, rc) = topology.master1.tasks.cleanAllRUV(suffix=DEFAULT_SUFFIX, + replicaid='4', args={TASK_WAIT: False}) + except ValueError as e: + log.fatal('test_cleanallruv_abort_certify: Problem running cleanAllRuv task: ' + + e.message('desc')) + assert False + + # Allow the clean task to get started... + time.sleep(5) + + # Abort the task + log.info('test_cleanallruv_abort_certify: abort the cleanAllRUV task...') + try: + (abort_task_dn, rc) = topology.master1.tasks.abortCleanAllRUV(suffix=DEFAULT_SUFFIX, + replicaid='4', certify=True, args={TASK_WAIT: False}) + except ValueError as e: + log.fatal('test_cleanallruv_abort_certify: Problem running abortCleanAllRuv task: ' + + e.message('desc')) + assert False + + # Wait a while and make sure the abort task is still running + log.info('test_cleanallruv_abort_certify: sleep for 5 seconds') + time.sleep(5) + + if task_done(topology, abort_task_dn, 60): + log.fatal('test_cleanallruv_abort_certify: abort task incorrectly finished') + assert False + + # Now start master 2 so it can be aborted + log.info('test_cleanallruv_abort_certify: start master 2 to allow the abort task to finish...') + topology.master2.start() + + # Wait for the abort task to stop + if not task_done(topology, abort_task_dn, 60): + log.fatal('test_cleanallruv_abort_certify: The abort CleanAllRUV task was not aborted') + assert False + + # Check master 1 does not have the clean task running + log.info('test_cleanallruv_abort_certify: check master 1 no longer has a cleanAllRUV task...') + if not task_done(topology, clean_task_dn): + log.fatal('test_cleanallruv_abort_certify: CleanAllRUV task was not aborted') + assert False + + # Start master 2 + log.info('test_cleanallruv_abort_certify: start master 2 to begin the restore process...') + topology.master2.start() + + # + # Now run the clean task task again to we can properly restore master 4 + # + log.info('test_cleanallruv_abort_certify: run cleanAllRUV task so we can properly restore master 4...') + try: + topology.master1.tasks.cleanAllRUV(suffix=DEFAULT_SUFFIX, + replicaid='4', args={TASK_WAIT: True}) + except ValueError as e: + log.fatal('test_cleanallruv_abort_certify: Problem running cleanAllRuv task: ' + + e.message('desc')) + assert False + + log.info('test_cleanallruv_abort_certify PASSED, restoring master 4...') + + # + # Cleanup - Restore master 4 + # + restore_master4(topology) + + +def test_cleanallruv_stress_clean(topology): + ''' + Put each server(m1 - m4) under stress, and perform the entire clean process + ''' + log.info('Running test_cleanallruv_stress_clean...') + log.info('test_cleanallruv_stress_clean: put all the masters under load...') + + # Put all the masters under load + m1_add_users = AddUsers(topology.master1, 2000) + m1_add_users.start() + m2_add_users = AddUsers(topology.master2, 2000) + m2_add_users.start() + m3_add_users = AddUsers(topology.master3, 2000) + m3_add_users.start() + m4_add_users = AddUsers(topology.master4, 2000) + m4_add_users.start() + + # Allow sometime to get replication flowing in all directions + log.info('test_cleanallruv_stress_clean: allow some time for replication to get flowing...') + time.sleep(5) + + # Put master 4 into read only mode + log.info('test_cleanallruv_stress_clean: put master 4 into read-only mode...') + try: + topology.master4.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-readonly', 'on')]) + except ldap.LDAPError as e: + log.fatal('test_cleanallruv_stress_clean: Failed to put master 4 into read-only mode: error ' + + e.message['desc']) + assert False + + # We need to wait for master 4 to push its changes out + log.info('test_cleanallruv_stress_clean: allow some time for master 4 to push changes out (60 seconds)...') + time.sleep(60) + + # Disable master 4 + log.info('test_cleanallruv_stress_clean: disable replication on master 4...') + try: + topology.master4.replica.disableReplication(DEFAULT_SUFFIX) + except: + log.fatal('test_cleanallruv_stress_clean: failed to diable replication') + assert False + + # Remove the agreements from the other masters that point to master 4 + remove_master4_agmts("test_cleanallruv_stress_clean", topology) + + # Run the task + log.info('test_cleanallruv_stress_clean: Run the cleanAllRUV task...') + try: + topology.master1.tasks.cleanAllRUV(suffix=DEFAULT_SUFFIX, replicaid='4', + args={TASK_WAIT: True}) + except ValueError as e: + log.fatal('test_cleanallruv_stress_clean: Problem running cleanAllRuv task: ' + + e.message('desc')) + assert False + + # Wait for the update to finish + log.info('test_cleanallruv_stress_clean: wait for all the updates to finish...') + m1_add_users.join() + m2_add_users.join() + m3_add_users.join() + m4_add_users.join() + + # Check the other master's RUV for 'replica 4' + log.info('test_cleanallruv_stress_clean: check if all the replicas have been cleaned...') + clean = check_ruvs("test_cleanallruv_stress_clean", topology) + if not clean: + log.fatal('test_cleanallruv_stress_clean: Failed to clean replicas') + assert False + + log.info('test_cleanallruv_stress_clean: PASSED, restoring master 4...') + + # + # Cleanup - restore master 4 + # + + # Sleep for a bit to replication complete + log.info("Sleep for 120 seconds to allow replication to complete...") + time.sleep(120) + + # Turn off readonly mode + try: + topology.master4.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-readonly', 'off')]) + except ldap.LDAPError as e: + log.fatal('test_cleanallruv_stress_clean: Failed to put master 4 into read-only mode: error ' + + e.message['desc']) + assert False + + restore_master4(topology) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/replication/wait_for_async_feature_test.py b/dirsrvtests/tests/suites/replication/wait_for_async_feature_test.py new file mode 100644 index 0000000..02c27b9 --- /dev/null +++ b/dirsrvtests/tests/suites/replication/wait_for_async_feature_test.py @@ -0,0 +1,287 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +from collections import Counter + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +WAITFOR_ASYNC_ATTR = "nsDS5ReplicaWaitForAsyncResults" + + +class TopologyReplication(object): + def __init__(self, master1, master2, m1_m2_agmt, m2_m1_agmt): + master1.open() + master2.open() + self.masters = ((master1, m1_m2_agmt), + (master2, m2_m1_agmt)) + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating master 1... + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + master2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: 'meTo_%s:%s' %(master2.host, master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: 'meTo_%s:%s' %(master1.host, master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + master2.agreement.init(SUFFIX, HOST_MASTER_1, PORT_MASTER_1) + master2.waitForReplInit(m2_m1_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + log.info("Set Replication Debugging loglevel for the errorlog") + master1.setLogLevel(LOG_REPLICA) + master2.setLogLevel(LOG_REPLICA) + + logging_attr = 'nsslapd-logging-hr-timestamps-enabled' + master1.modify_s("cn=config", [(ldap.MOD_REPLACE, logging_attr, "off")]) + master2.modify_s("cn=config", [(ldap.MOD_REPLACE, logging_attr, "off")]) + + # Delete each instance in the end + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + master1.clearTmpDir(__file__) + + return TopologyReplication(master1, master2, m1_m2_agmt, m2_m1_agmt) + + +@pytest.fixture(params=[(None, (4, 10)), + ('2000', (0, 1)), + ('0', (4, 10)), + ('-5', (4, 10))]) +def waitfor_async_attr(topology, request): + """Sets attribute on all replicas""" + + attr_value = request.param[0] + expected_result = request.param[1] + + # Run through all masters + for master in topology.masters: + agmt = master[1] + try: + if attr_value: + log.info("Set %s: %s on %s" % ( + WAITFOR_ASYNC_ATTR, attr_value, master[0].serverid)) + mod = [(ldap.MOD_REPLACE, WAITFOR_ASYNC_ATTR, attr_value)] + else: + log.info("Delete %s from %s" % ( + WAITFOR_ASYNC_ATTR, master[0].serverid)) + mod = [(ldap.MOD_DELETE, WAITFOR_ASYNC_ATTR, None)] + master[0].modify_s(agmt, mod) + except ldap.LDAPError as e: + log.error('Failed to set or delete %s attribute: (%s)' % ( + WAITFOR_ASYNC_ATTR, e.message['desc'])) + + return (attr_value, expected_result) + + +@pytest.fixture +def entries(topology, request): + """Adds entries to the master1""" + + master1 = topology.masters[0][0] + + TEST_OU = "test" + test_dn = SUFFIX + test_list = [] + + log.info("Add 100 nested entries under replicated suffix on %s" % master1.serverid) + for i in xrange(100): + test_dn = 'ou=%s%s,%s' % (TEST_OU, i, test_dn) + test_list.insert(0, test_dn) + try: + master1.add_s(Entry((test_dn, + {'objectclass': 'top', + 'objectclass': 'organizationalUnit', + 'ou': TEST_OU}))) + except ldap.LDAPError as e: + log.error('Failed to add entry (%s): error (%s)' % (test_dn, + e.message['desc'])) + assert False + + log.info("Delete created entries") + for test_dn in test_list: + try: + master1.delete_s(test_dn) + except ldap.LDAPError, e: + log.error('Failed to delete entry (%s): error (%s)' % (test_dn, + e.message['desc'])) + assert False + + def fin(): + log.info("Clear the errors log in the end of the test case") + with open(master1.errlog, 'w') as errlog: + errlog.writelines("") + request.addfinalizer(fin) + + +def test_not_int_value(topology): + """Tests not integer value""" + + master1 = topology.masters[0][0] + agmt = topology.masters[0][1] + + log.info("Try to set %s: wv1" % WAITFOR_ASYNC_ATTR) + try: + mod = [(ldap.MOD_REPLACE, WAITFOR_ASYNC_ATTR, "wv1")] + master1.modify_s(agmt, mod) + except ldap.LDAPError as e: + assert e.message['desc'] == 'Invalid syntax' + + +def test_multi_value(topology): + """Tests multi value""" + + master1 = topology.masters[0][0] + agmt = topology.masters[0][1] + log.info("agmt: %s" % agmt) + + log.info("Try to set %s: 100 and 101 in the same time (multi value test)" % ( + WAITFOR_ASYNC_ATTR)) + try: + mod = [(ldap.MOD_ADD, WAITFOR_ASYNC_ATTR, "100")] + master1.modify_s(agmt, mod) + mod = [(ldap.MOD_ADD, WAITFOR_ASYNC_ATTR, "101")] + master1.modify_s(agmt, mod) + except ldap.LDAPError as e: + assert e.message['desc'] == 'Object class violation' + + +def test_value_check(topology, waitfor_async_attr): + """Checks that value has been set correctly""" + + attr_value = waitfor_async_attr[0] + + for master in topology.masters: + agmt = master[1] + + log.info("Check attr %s on %s" % (WAITFOR_ASYNC_ATTR, master[0].serverid)) + try: + if attr_value: + entry = master[0].search_s(agmt, ldap.SCOPE_BASE, "%s=%s" % ( + WAITFOR_ASYNC_ATTR, attr_value)) + assert entry + else: + entry = master[0].search_s(agmt, ldap.SCOPE_BASE, "%s=*" % WAITFOR_ASYNC_ATTR) + assert not entry + except ldap.LDAPError as e: + log.fatal('Search failed, error: ' + e.message['desc']) + assert False + + +def test_behavior_with_value(topology, waitfor_async_attr, entries): + """Tests replication behavior with valid + nsDS5ReplicaWaitForAsyncResults attribute values + """ + + master1 = topology.masters[0][0] + sync_dict = Counter() + min_ap = waitfor_async_attr[1][0] + max_ap = waitfor_async_attr[1][1] + + time.sleep(20) + + log.info("Gather all sync attempts within Counter dict, group by timestamp") + with open(master1.errlog, 'r') as errlog: + errlog_filtered = filter(lambda x: "waitfor_async_results" in x, errlog) + for line in errlog_filtered: + # Watch only over unsuccessful sync attempts + if line.split()[3] != line.split()[4]: + timestamp = line.split(']')[0] + sync_dict[timestamp] += 1 + + log.info("Take the most common timestamp and assert it has appeared " \ + "in the range from %s to %s times" % (min_ap, max_ap)) + most_common_val = sync_dict.most_common(1)[0][1] + assert min_ap <= most_common_val <= max_ap + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/replsync_plugin/__init__.py b/dirsrvtests/tests/suites/replsync_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/replsync_plugin/repl_sync_test.py b/dirsrvtests/tests/suites/replsync_plugin/repl_sync_test.py new file mode 100644 index 0000000..fc3a559 --- /dev/null +++ b/dirsrvtests/tests/suites/replsync_plugin/repl_sync_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_repl_sync_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_repl_sync_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/resource_limits/__init__.py b/dirsrvtests/tests/suites/resource_limits/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/resource_limits/res_limits_test.py b/dirsrvtests/tests/suites/resource_limits/res_limits_test.py new file mode 100644 index 0000000..e904bbf --- /dev/null +++ b/dirsrvtests/tests/suites/resource_limits/res_limits_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_res_limits_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_res_limits_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/retrocl_plugin/__init__.py b/dirsrvtests/tests/suites/retrocl_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/retrocl_plugin/retrocl_test.py b/dirsrvtests/tests/suites/retrocl_plugin/retrocl_test.py new file mode 100644 index 0000000..d1419fa --- /dev/null +++ b/dirsrvtests/tests/suites/retrocl_plugin/retrocl_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_retrocl_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_retrocl_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/reverpwd_plugin/__init__.py b/dirsrvtests/tests/suites/reverpwd_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/reverpwd_plugin/reverpwd_test.py b/dirsrvtests/tests/suites/reverpwd_plugin/reverpwd_test.py new file mode 100644 index 0000000..b5b978b --- /dev/null +++ b/dirsrvtests/tests/suites/reverpwd_plugin/reverpwd_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_reverpwd_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_reverpwd_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/roles_plugin/__init__.py b/dirsrvtests/tests/suites/roles_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/roles_plugin/roles_test.py b/dirsrvtests/tests/suites/roles_plugin/roles_test.py new file mode 100644 index 0000000..2a5ea23 --- /dev/null +++ b/dirsrvtests/tests/suites/roles_plugin/roles_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_roles_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_roles_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/rootdn_plugin/__init__.py b/dirsrvtests/tests/suites/rootdn_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/rootdn_plugin/rootdn_plugin_test.py b/dirsrvtests/tests/suites/rootdn_plugin/rootdn_plugin_test.py new file mode 100644 index 0000000..a904644 --- /dev/null +++ b/dirsrvtests/tests/suites/rootdn_plugin/rootdn_plugin_test.py @@ -0,0 +1,785 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +import socket +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +PLUGIN_DN = 'cn=' + PLUGIN_ROOTDN_ACCESS + ',cn=plugins,cn=config' +USER1_DN = 'uid=user1,' + DEFAULT_SUFFIX + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_rootdn_init(topology): + ''' + Initialize our setup to test the ROot DN Access Control Plugin + + Test the following access control type: + + - Allowed IP address * + - Denied IP address * + - Specific time window + - Days allowed access + - Allowed host * + - Denied host * + + * means mulitple valued + ''' + + log.info('Initializing root DN test suite...') + + # + # Set an aci so we can modify the plugin after we deny the Root DN + # + ACI = ('(target ="ldap:///cn=config")(targetattr = "*")(version 3.0' + + ';acl "all access";allow (all)(userdn="ldap:///anyone");)') + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_ADD, 'aci', ACI)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_init: Failed to add aci to config: error ' + + e.message['desc']) + assert False + + # + # Create a user to modify the config + # + try: + topology.standalone.add_s(Entry((USER1_DN, {'objectclass': "top extensibleObject".split(), + 'uid': 'user1', + 'userpassword': PASSWORD}))) + except ldap.LDAPError as e: + log.fatal('test_rootdn_init: Failed to add test user ' + USER1_DN + ': error ' + + e.message['desc']) + assert False + + # + # Enable dynamic plugins + # + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-dynamic-plugins', 'on')]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_init: Failed to set dynamic plugins: error ' + e.message['desc']) + assert False + + # + # Enable the plugin (aftewr enabling dynamic plugins) + # + topology.standalone.plugins.enable(PLUGIN_ROOTDN_ACCESS) + + log.info('test_rootdn_init: Initialized root DN test suite.') + + +def test_rootdn_access_specific_time(topology): + ''' + Test binding inside and outside of a specific time + ''' + + log.info('Running test_rootdn_access_specific_time...') + + # Get the current time, and bump it ahead twohours + current_hour = time.strftime("%H") + if int(current_hour) > 12: + open_time = '0200' + close_time = '0400' + else: + open_time = '1600' + close_time = '1800' + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, 'rootdn-open-time', open_time), + (ldap.MOD_ADD, 'rootdn-close-time', close_time)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_specific_time: Failed to set (blocking) open/close times: error ' + + e.message['desc']) + assert False + + # + # Bind as Root DN - should fail + # + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + succeeded = True + except ldap.LDAPError as e: + succeeded = False + + if succeeded: + log.fatal('test_rootdn_access_specific_time: Root DN was incorrectly able to bind') + assert False + + # + # Set config to allow the entire day + # + try: + topology.standalone.simple_bind_s(USER1_DN, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_specific_time: test_rootdn: failed to bind as user1') + assert False + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '0000'), + (ldap.MOD_REPLACE, 'rootdn-close-time', '2359')]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_specific_time: Failed to set (open) open/close times: error ' + + e.message['desc']) + assert False + + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_specific_time: Root DN bind failed unexpectedly failed: error ' + + e.message['desc']) + assert False + + # + # Cleanup - undo the changes we made so the next test has a clean slate + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-open-time', None), + (ldap.MOD_DELETE, 'rootdn-close-time', None)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_specific_time: Failed to delete open and close time: error ' + + e.message['desc']) + assert False + + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_specific_time: Root DN bind failed unexpectedly failed: error ' + + e.message['desc']) + assert False + + log.info('test_rootdn_access_specific_time: PASSED') + + +def test_rootdn_access_day_of_week(topology): + ''' + Test the days of week feature + ''' + + log.info('Running test_rootdn_access_day_of_week...') + + days = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat') + day = int(time.strftime("%w", time.gmtime())) + + if day == 6: + # Handle the roll over from Saturday into Sunday + deny_days = days[1] + ', ' + days[2] + allow_days = days[6] + ',' + days[0] + elif day > 3: + deny_days = days[0] + ', ' + days[1] + allow_days = days[day] + ',' + days[day - 1] + else: + deny_days = days[4] + ',' + days[5] + allow_days = days[day] + ',' + days[day + 1] + + log.info('Today: ' + days[day]) + log.info('Allowed days: ' + allow_days) + log.info('Deny days: ' + deny_days) + + # + # Set the deny days + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-days-allowed', + deny_days)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_day_of_week: Failed to set the deny days: error ' + + e.message['desc']) + assert False + + # + # Bind as Root DN - should fail + # + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + succeeded = True + except ldap.LDAPError as e: + succeeded = False + + if succeeded: + log.fatal('test_rootdn_access_day_of_week: Root DN was incorrectly able to bind') + assert False + + # + # Set the allow days + # + try: + topology.standalone.simple_bind_s(USER1_DN, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_day_of_week: : failed to bind as user1') + assert False + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-days-allowed', + allow_days)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_day_of_week: Failed to set the deny days: error ' + + e.message['desc']) + assert False + + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_day_of_week: Root DN bind failed unexpectedly failed: error ' + + e.message['desc']) + assert False + + # + # Cleanup - undo the changes we made so the next test has a clean slate + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-days-allowed', None)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_day_of_week: Failed to set rootDN plugin config: error ' + + e.message['desc']) + assert False + + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_day_of_week: Root DN bind failed unexpectedly failed: error ' + + e.message['desc']) + assert False + + log.info('test_rootdn_access_day_of_week: PASSED') + + +def test_rootdn_access_denied_ip(topology): + ''' + Test denied IP feature - we can just test denying 127.0.01 + ''' + + log.info('Running test_rootdn_access_denied_ip...') + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, + 'rootdn-deny-ip', + '127.0.0.1'), + (ldap.MOD_ADD, + 'rootdn-deny-ip', + '::1')]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_denied_ip: Failed to set rootDN plugin config: error ' + + e.message['desc']) + assert False + + # + # Bind as Root DN - should fail + # + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + succeeded = True + except ldap.LDAPError as e: + succeeded = False + + if succeeded: + log.fatal('test_rootdn_access_denied_ip: Root DN was incorrectly able to bind') + assert False + + # + # Change the denied IP so root DN succeeds + # + try: + topology.standalone.simple_bind_s(USER1_DN, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_denied_ip: : failed to bind as user1') + assert False + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-deny-ip', '255.255.255.255')]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_denied_ip: Failed to set rootDN plugin config: error ' + + e.message['desc']) + assert False + + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_denied_ip: Root DN bind failed unexpectedly failed: error ' + + e.message['desc']) + assert False + + # + # Cleanup - undo the changes we made so the next test has a clean slate + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-deny-ip', None)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_denied_ip: Failed to set rootDN plugin config: error ' + + e.message['desc']) + assert False + + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_denied_ip: Root DN bind failed unexpectedly failed: error ' + + e.message['desc']) + assert False + + log.info('test_rootdn_access_denied_ip: PASSED') + + +def test_rootdn_access_denied_host(topology): + ''' + Test denied Host feature - we can just test denying localhost + ''' + + log.info('Running test_rootdn_access_denied_host...') + hostname = socket.gethostname() + localhost = DirSrvTools.getLocalhost() + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, + 'rootdn-deny-host', + hostname)]) + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, + 'rootdn-deny-host', + localhost)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_denied_host: Failed to set deny host: error ' + + e.message['desc']) + assert False + + # + # Bind as Root DN - should fail + # + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + succeeded = True + except ldap.LDAPError as e: + succeeded = False + + if succeeded: + log.fatal('test_rootdn_access_denied_host: Root DN was incorrectly able to bind') + assert False + + # + # Change the denied host so root DN succeeds + # + try: + topology.standalone.simple_bind_s(USER1_DN, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_denied_host: : failed to bind as user1') + assert False + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-deny-host', 'i.dont.exist.com')]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_denied_host: Failed to set rootDN plugin config: error ' + + e.message['desc']) + assert False + + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_denied_host: Root DN bind failed unexpectedly failed: error ' + + e.message['desc']) + assert False + + # + # Cleanup - undo the changes we made so the next test has a clean slate + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-deny-host', None)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_denied_host: Failed to set rootDN plugin config: error ' + + e.message['desc']) + assert False + + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_denied_host: Root DN bind failed unexpectedly failed: error ' + + e.message['desc']) + assert False + + log.info('test_rootdn_access_denied_host: PASSED') + + +def test_rootdn_access_allowed_ip(topology): + ''' + Test allowed ip feature + ''' + + log.info('Running test_rootdn_access_allowed_ip...') + + # + # Set allowed host to an unknown host - blocks the Root DN + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-allow-ip', '255.255.255.255')]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_allowed_ip: Failed to set allowed host: error ' + + e.message['desc']) + assert False + + # + # Bind as Root DN - should fail + # + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + succeeded = True + except ldap.LDAPError as e: + succeeded = False + + if succeeded: + log.fatal('test_rootdn_access_allowed_ip: Root DN was incorrectly able to bind') + assert False + + # + # Allow localhost + # + try: + topology.standalone.simple_bind_s(USER1_DN, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_allowed_ip: : failed to bind as user1') + assert False + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-allow-ip', '127.0.0.1'), + (ldap.MOD_ADD, 'rootdn-allow-ip', '::1')]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_allowed_ip: Failed to set allowed host: error ' + + e.message['desc']) + assert False + + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_allowed_ip: Root DN bind failed unexpectedly failed: error ' + + e.message['desc']) + assert False + + # + # Cleanup - undo everything we did so the next test has a clean slate + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-allow-ip', None)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_allowed_ip: Failed to delete(rootdn-allow-ip): error ' + + e.message['desc']) + assert False + + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_allowed_ip: Root DN bind failed unexpectedly failed: error ' + + e.message['desc']) + assert False + + log.info('test_rootdn_access_allowed_ip: PASSED') + + +def test_rootdn_access_allowed_host(topology): + ''' + Test allowed ip feature + ''' + + log.info('Running test_rootdn_access_allowed_host...') + + # + # Set allowed host to an unknown host - blocks the Root DN + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-allow-host', 'i.dont.exist.com')]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_allowed_host: Failed to set allowed host: error ' + + e.message['desc']) + assert False + + # + # Bind as Root DN - should fail + # + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + succeeded = True + except ldap.LDAPError as e: + succeeded = False + + if succeeded: + log.fatal('test_rootdn_access_allowed_host: Root DN was incorrectly able to bind') + assert False + + # + # Allow localhost + # + try: + topology.standalone.simple_bind_s(USER1_DN, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_allowed_host: : failed to bind as user1') + assert False + + hostname = socket.gethostname() + localhost = DirSrvTools.getLocalhost() + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, + 'rootdn-allow-host', + localhost)]) + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, + 'rootdn-allow-host', + hostname)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_allowed_host: Failed to set allowed host: error ' + + e.message['desc']) + assert False + + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_allowed_host: Root DN bind failed unexpectedly failed: error ' + + e.message['desc']) + assert False + + # + # Cleanup - undo everything we did so the next test has a clean slate + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_DELETE, 'rootdn-allow-host', None)]) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_allowed_host: Failed to delete(rootdn-allow-host): error ' + + e.message['desc']) + assert False + + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('test_rootdn_access_allowed_host: Root DN bind failed unexpectedly failed: error ' + + e.message['desc']) + assert False + + log.info('test_rootdn_access_allowed_host: PASSED') + + +def test_rootdn_config_validate(topology): + ''' + Test configuration validation + + test single valued attributes: rootdn-open-time, + rootdn-close-time, + rootdn-days-allowed + + ''' + + log.info('Running test_rootdn_config_validate...') + + # + # Test rootdn-open-time + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '0000')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to just add "rootdn-open-time" ') + assert False + except ldap.LDAPError: + pass + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, 'rootdn-open-time', '0000'), + (ldap.MOD_ADD, 'rootdn-open-time', '0001')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add multiple "rootdn-open-time"') + assert False + except ldap.LDAPError: + pass + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '-1'), + (ldap.MOD_REPLACE, 'rootdn-close-time', '0000')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-open-time: -1"') + assert False + except ldap.LDAPError: + pass + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '2400'), + (ldap.MOD_REPLACE, 'rootdn-close-time', '0000')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-open-time: 2400"') + assert False + except ldap.LDAPError: + pass + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', 'aaaaa'), + (ldap.MOD_REPLACE, 'rootdn-close-time', '0000')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-open-time: aaaaa"') + assert False + except ldap.LDAPError: + pass + + # + # Test rootdn-close-time + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-close-time', '0000')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add just "rootdn-close-time"') + assert False + except ldap.LDAPError: + pass + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, 'rootdn-close-time', '0000'), + (ldap.MOD_ADD, 'rootdn-close-time', '0001')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add multiple "rootdn-open-time"') + assert False + except ldap.LDAPError: + pass + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '0000'), + (ldap.MOD_REPLACE, 'rootdn-close-time', '-1')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-close-time: -1"') + assert False + except ldap.LDAPError: + pass + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '0000'), + (ldap.MOD_REPLACE, 'rootdn-close-time', '2400')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-close-time: 2400"') + assert False + except ldap.LDAPError: + pass + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-open-time', '0000'), + (ldap.MOD_REPLACE, 'rootdn-close-time', 'aaaaa')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-close-time: aaaaa"') + assert False + except ldap.LDAPError: + pass + + # + # Test days allowed + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_ADD, 'rootdn-days-allowed', 'Mon'), + (ldap.MOD_ADD, 'rootdn-days-allowed', 'Tue')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add two "rootdn-days-allowed"') + assert False + except ldap.LDAPError: + pass + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-days-allowed', 'Mon1')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-days-allowed: Mon1"') + assert False + except ldap.LDAPError: + pass + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-days-allowed', 'Tue, Mon1')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-days-allowed: Tue, Mon1"') + assert False + except ldap.LDAPError: + pass + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-days-allowed', 'm111m')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-days-allowed: 111"') + assert False + except ldap.LDAPError: + pass + + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-days-allowed', 'Gur')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-days-allowed: Gur"') + assert False + except ldap.LDAPError: + pass + + # + # Test allow ips + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-allow-ip', '12.12.Z.12')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-allow-ip: 12.12.Z.12"') + assert False + except ldap.LDAPError: + pass + + # + # Test deny ips + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-deny-ip', '12.12.Z.12')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-deny-ip: 12.12.Z.12"') + assert False + except ldap.LDAPError: + pass + + # + # Test allow hosts + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-allow-host', 'host._.com')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-allow-host: host._.com"') + assert False + except ldap.LDAPError: + pass + + # + # Test deny hosts + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'rootdn-deny-host', 'host.####.com')]) + log.fatal('test_rootdn_config_validate: Incorrectly allowed to add invalid "rootdn-deny-host: host.####.com"') + assert False + except ldap.LDAPError: + pass + + log.info('test_rootdn_config_validate: PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/sasl/__init__.py b/dirsrvtests/tests/suites/sasl/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/sasl/sasl_test.py b/dirsrvtests/tests/suites/sasl/sasl_test.py new file mode 100644 index 0000000..589e960 --- /dev/null +++ b/dirsrvtests/tests/suites/sasl/sasl_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_sasl_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_sasl_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/schema/__init__.py b/dirsrvtests/tests/suites/schema/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/schema/test_schema.py b/dirsrvtests/tests/suites/schema/test_schema.py new file mode 100644 index 0000000..2d4140d --- /dev/null +++ b/dirsrvtests/tests/suites/schema/test_schema.py @@ -0,0 +1,213 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Dec 18, 2013 + +@author: rmeggins +''' +import os +import sys +import time +import ldap +import six +from ldap.cidict import cidict +from ldap.schema import SubSchema +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation_prefix = None + +attrclass = ldap.schema.models.AttributeType +occlass = ldap.schema.models.ObjectClass +syntax_len_supported = False + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to create a DirSrv instance for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + schemainst = DirSrv(verbose=False) + + # Args for the master instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + schemainst.allocate(args_instance) + + # Remove all the instance + if schemainst.exists(): + schemainst.delete() + + # Create the instance + schemainst.create() + schemainst.open() + + def fin(): + schemainst.delete() + request.addfinalizer(fin) + + return TopologyStandalone(schemainst) + + +def ochasattr(subschema, oc, mustormay, attr, key): + """See if the oc and any of its parents and ancestors have the + given attr""" + rc = False + if not key in oc.__dict__: + dd = cidict() + for ii in oc.__dict__[mustormay]: + dd[ii] = ii + oc.__dict__[key] = dd + if attr in oc.__dict__[key]: + rc = True + else: + # look in parents + for noroid in oc.sup: + ocpar = subschema.get_obj(occlass, noroid) + assert(ocpar) + rc = ochasattr(subschema, ocpar, mustormay, attr, key) + if rc: + break + return rc + + +def ochasattrs(subschema, oc, mustormay, attrs): + key = mustormay + "dict" + ret = [] + for attr in attrs: + if not ochasattr(subschema, oc, mustormay, attr, key): + ret.append(attr) + return ret + + +def mycmp(v1, v2): + v1ary, v2ary = [v1], [v2] + if isinstance(v1, list) or isinstance(v1, tuple): + v1ary, v2ary = list(set([x.lower() for x in v1])), list(set([x.lower() for x in v2])) + if not len(v1ary) == len(v2ary): + return False + for v1, v2 in zip(v1ary, v2ary): + if isinstance(v1, six.string_types): + if not len(v1) == len(v2): + return False + if not v1 == v2: + return False + return True + + +def ocgetdiffs(ldschema, oc1, oc2): + fields = ['obsolete', 'names', 'desc', 'must', 'may', 'kind', 'sup'] + ret = '' + for field in fields: + v1, v2 = oc1.__dict__[field], oc2.__dict__[field] + if field == 'may' or field == 'must': + missing = ochasattrs(ldschema, oc1, field, oc2.__dict__[field]) + if missing: + ret = ret + '\t%s is missing %s\n' % (field, missing) + missing = ochasattrs(ldschema, oc2, field, oc1.__dict__[field]) + if missing: + ret = ret + '\t%s is missing %s\n' % (field, missing) + elif not mycmp(v1, v2): + ret = ret + '\t%s differs: [%s] vs. [%s]\n' % (field, oc1.__dict__[field], oc2.__dict__[field]) + return ret + + +def atgetparfield(subschema, at, field): + v = None + for nameoroid in at.sup: + atpar = subschema.get_obj(attrclass, nameoroid) + assert(atpar) + v = atpar.__dict__.get(field, atgetparfield(subschema, atpar, field)) + if v is not None: + break + return v + + +def atgetdiffs(ldschema, at1, at2): + fields = ['names', 'desc', 'obsolete', 'sup', 'equality', 'ordering', 'substr', 'syntax', + 'single_value', 'collective', 'no_user_mod', 'usage'] + if syntax_len_supported: + fields.append('syntax_len') + ret = '' + for field in fields: + v1 = at1.__dict__.get(field) or atgetparfield(ldschema, at1, field) + v2 = at2.__dict__.get(field) or atgetparfield(ldschema, at2, field) + if not mycmp(v1, v2): + ret = ret + '\t%s differs: [%s] vs. [%s]\n' % (field, at1.__dict__[field], at2.__dict__[field]) + return ret + + +def test_schema_comparewithfiles(topology): + '''Compare the schema from ldap cn=schema with the schema files''' + + log.info('Running test_schema_comparewithfiles...') + + retval = True + schemainst = topology.standalone + ldschema = schemainst.schema.get_subschema() + assert ldschema + for fn in schemainst.schema.list_files(): + fschema = schemainst.schema.file_to_subschema(fn) + if not fschema: + log.warn("Unable to parse %s as a schema file - skipping" % fn) + continue + assert fschema + for oid in fschema.listall(occlass): + se = fschema.get_obj(occlass, oid) + assert se + ldse = ldschema.get_obj(occlass, oid) + if not ldse: + log.error("objectclass in %s but not in %s: %s" % (fn, DN_SCHEMA, se)) + retval = False + continue + ret = ocgetdiffs(ldschema, ldse, se) + if ret: + log.error("name %s oid %s\n%s" % (se.names[0], oid, ret)) + retval = False + for oid in fschema.listall(attrclass): + se = fschema.get_obj(attrclass, oid) + assert se + ldse = ldschema.get_obj(attrclass, oid) + if not ldse: + log.error("attributetype in %s but not in %s: %s" % (fn, DN_SCHEMA, se)) + retval = False + continue + ret = atgetdiffs(ldschema, ldse, se) + if ret: + log.error("name %s oid %s\n%s" % (se.names[0], oid, ret)) + retval = False + assert retval + + log.info('test_schema_comparewithfiles: PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/schema_reload_plugin/__init__.py b/dirsrvtests/tests/suites/schema_reload_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/schema_reload_plugin/schema_reload_test.py b/dirsrvtests/tests/suites/schema_reload_plugin/schema_reload_test.py new file mode 100644 index 0000000..878c7f9 --- /dev/null +++ b/dirsrvtests/tests/suites/schema_reload_plugin/schema_reload_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_schema_reload_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_schema_reload_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/snmp/__init__.py b/dirsrvtests/tests/suites/snmp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/snmp/snmp_test.py b/dirsrvtests/tests/suites/snmp/snmp_test.py new file mode 100644 index 0000000..a30b626 --- /dev/null +++ b/dirsrvtests/tests/suites/snmp/snmp_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_snmp_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_snmp_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/ssl/__init__.py b/dirsrvtests/tests/suites/ssl/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/ssl/ssl_test.py b/dirsrvtests/tests/suites/ssl/ssl_test.py new file mode 100644 index 0000000..42738de --- /dev/null +++ b/dirsrvtests/tests/suites/ssl/ssl_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ssl_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_ssl_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/syntax_plugin/__init__.py b/dirsrvtests/tests/suites/syntax_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/syntax_plugin/syntax_test.py b/dirsrvtests/tests/suites/syntax_plugin/syntax_test.py new file mode 100644 index 0000000..91d2e55 --- /dev/null +++ b/dirsrvtests/tests/suites/syntax_plugin/syntax_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_syntax_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_syntax_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/usn_plugin/__init__.py b/dirsrvtests/tests/suites/usn_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/usn_plugin/usn_test.py b/dirsrvtests/tests/suites/usn_plugin/usn_test.py new file mode 100644 index 0000000..2e81672 --- /dev/null +++ b/dirsrvtests/tests/suites/usn_plugin/usn_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_usn_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_usn_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/views_plugin/__init__.py b/dirsrvtests/tests/suites/views_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/views_plugin/views_test.py b/dirsrvtests/tests/suites/views_plugin/views_test.py new file mode 100644 index 0000000..3168a0f --- /dev/null +++ b/dirsrvtests/tests/suites/views_plugin/views_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_views_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_views_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/vlv/__init__.py b/dirsrvtests/tests/suites/vlv/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/vlv/vlv_test.py b/dirsrvtests/tests/suites/vlv/vlv_test.py new file mode 100644 index 0000000..57945d7 --- /dev/null +++ b/dirsrvtests/tests/suites/vlv/vlv_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_vlv_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_vlv_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/suites/whoami_plugin/__init__.py b/dirsrvtests/tests/suites/whoami_plugin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/suites/whoami_plugin/whoami_test.py b/dirsrvtests/tests/suites/whoami_plugin/whoami_test.py new file mode 100644 index 0000000..e528cc8 --- /dev/null +++ b/dirsrvtests/tests/suites/whoami_plugin/whoami_test.py @@ -0,0 +1,81 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_whoami_init(topology): + ''' + Write any test suite initialization here(if needed) + ''' + + return + + +def test_whoami_(topology): + ''' + Write a single test here... + ''' + + return + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/__init__.py b/dirsrvtests/tests/tickets/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dirsrvtests/tests/tickets/finalizer.py b/dirsrvtests/tests/tickets/finalizer.py new file mode 100644 index 0000000..bfbeadd --- /dev/null +++ b/dirsrvtests/tests/tickets/finalizer.py @@ -0,0 +1,64 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Nov 5, 2013 + +@author: tbordaz +''' +import os +import sys +import time +import ldap +import logging +import socket +import time +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import DN_DM +from lib389.properties import * + +log = logging.getLogger(__name__) + +global installation_prefix +installation_prefix=os.getenv('PREFIX') + +def test_finalizer(): + global installation_prefix + + # for each defined instance, remove it + for args_instance in ALL_INSTANCES: + if installation_prefix: + # overwrite the environment setting + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + instance = DirSrv(verbose=True) + instance.allocate(args_instance) + if instance.exists(): + instance.delete() + + # remove any existing backup for this instance + instance.clearBackupFS() + +def run_isolated(): + ''' + run_isolated is used to run these test cases independently of a test scheduler (xunit, py.test..) + To run isolated without py.test, you need to + - set the installation prefix + - run this program + ''' + global installation_prefix + installation_prefix = None + + test_finalizer() + +if __name__ == '__main__': + run_isolated() + diff --git a/dirsrvtests/tests/tickets/issue48989_test.py b/dirsrvtests/tests/tickets/issue48989_test.py new file mode 100644 index 0000000..b4e7a95 --- /dev/null +++ b/dirsrvtests/tests/tickets/issue48989_test.py @@ -0,0 +1,57 @@ +import os +import time +import ldap +import logging +import pytest +from lib389.topologies import topology_st +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +DEBUGGING = False + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + + +def test_bytessent_overflow(topology_st): + """ + Issue 48989 - Add 10k entries and run search until the value of bytessent is + bigger than 2^32 or resets to 0 + """ + + # Create users + topology_st.standalone.ldclt.create_users('ou=People,%s' % + DEFAULT_SUFFIX, min=0, max=10000) + bytessent = int(topology_st.standalone.search_s( + 'cn=monitor', ldap.SCOPE_BASE, attrlist=['bytessent'])[0].getValue('bytessent')) + bytessent_old = bytessent + + while bytessent < 4300000000: + # Do searches + topology_st.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + filterstr='(objectClass=*)') + + # Read bytessent value from cn=monitor + bytessent = int(topology_st.standalone.search_s( + 'cn=monitor', ldap.SCOPE_BASE, attrlist=['bytessent'])[0].getValue('bytessent')) + + if bytessent > bytessent_old: + bytessent_old = bytessent + else: + # If it overflows - test failed + assert(bytessent > 4294967295) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + + diff --git a/dirsrvtests/tests/tickets/ticket1347760_test.py b/dirsrvtests/tests/tickets/ticket1347760_test.py new file mode 100644 index 0000000..a142ada --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket1347760_test.py @@ -0,0 +1,473 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import time +import ldap +import logging +import pytest +from subprocess import Popen +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +CONFIG_DN = 'cn=config' +BOU = 'BOU' +BINDOU = 'ou=%s,%s' % (BOU, DEFAULT_SUFFIX) +BUID = 'buser123' +TUID = 'tuser0' +BINDDN = 'uid=%s,%s' % (BUID, BINDOU) +BINDPW = BUID +TESTDN = 'uid=%s,ou=people,%s' % (TUID, DEFAULT_SUFFIX) +TESTPW = TUID +BOGUSDN = 'uid=bogus,%s' % DEFAULT_SUFFIX +BOGUSDN2 = 'uid=bogus,ou=people,%s' % DEFAULT_SUFFIX +BOGUSSUFFIX = 'uid=bogus,ou=people,dc=bogus' +GROUPOU = 'ou=groups,%s' % DEFAULT_SUFFIX +BOGUSOU = 'ou=OU,%s' % DEFAULT_SUFFIX + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def pattern_accesslog(file, log_pattern): + for i in range(5): + try: + pattern_accesslog.last_pos += 1 + except AttributeError: + pattern_accesslog.last_pos = 0 + + found = None + file.seek(pattern_accesslog.last_pos) + + # Use a while true iteration because 'for line in file: hit a + # python bug that break file.tell() + while True: + line = file.readline() + found = log_pattern.search(line) + if ((line == '') or (found)): + break + + pattern_accesslog.last_pos = file.tell() + if found: + return line + else: + time.sleep(1) + return None + + +def check_op_result(server, op, dn, superior, exists, rc): + targetdn = dn + if op == 'search': + if exists: + opstr = 'Searching existing entry' + else: + opstr = 'Searching non-existing entry' + elif op == 'add': + if exists: + opstr = 'Adding existing entry' + else: + opstr = 'Adding non-existing entry' + elif op == 'modify': + if exists: + opstr = 'Modifying existing entry' + else: + opstr = 'Modifying non-existing entry' + elif op == 'modrdn': + if superior != None: + targetdn = superior + if exists: + opstr = 'Moving to existing superior' + else: + opstr = 'Moving to non-existing superior' + else: + if exists: + opstr = 'Renaming existing entry' + else: + opstr = 'Renaming non-existing entry' + elif op == 'delete': + if exists: + opstr = 'Deleting existing entry' + else: + opstr = 'Deleting non-existing entry' + + if ldap.SUCCESS == rc: + expstr = 'be ok' + else: + expstr = 'fail with %s' % rc.__name__ + + log.info('%s %s, which should %s.' % (opstr, targetdn, expstr)) + time.sleep(1) + hit = 0 + try: + if op == 'search': + centry = server.search_s(dn, ldap.SCOPE_BASE, 'objectclass=*') + elif op == 'add': + server.add_s(Entry((dn, {'objectclass': 'top extensibleObject'.split(), + 'cn': 'test entry'}))) + elif op == 'modify': + server.modify_s(dn, [(ldap.MOD_REPLACE, 'description', 'test')]) + elif op == 'modrdn': + if superior != None: + server.rename_s(dn, 'uid=new', newsuperior=superior, delold=1) + else: + server.rename_s(dn, 'uid=new', delold=1) + elif op == 'delete': + server.delete_s(dn) + else: + log.fatal('Unknown operation %s' % op) + assert False + except ldap.LDAPError as e: + hit = 1 + log.info("Exception (expected): %s" % type(e).__name__) + log.info('Desc ' + e.message['desc']) + assert isinstance(e, rc) + if e.message.has_key('matched'): + log.info('Matched is returned: ' + e.message['matched']) + if rc != ldap.NO_SUCH_OBJECT: + assert False + + if ldap.SUCCESS == rc: + if op == 'search': + log.info('Search should return none') + assert len(centry) == 0 + else: + if 0 == hit: + log.info('Expected to fail with %s, but passed' % rc.__name__) + assert False + + log.info('PASSED\n') + + +def test_ticket1347760(topology): + """ + Prevent revealing the entry info to whom has no access rights. + """ + log.info('Testing Bug 1347760 - Information disclosure via repeated use of LDAP ADD operation, etc.') + + log.info('Disabling accesslog logbuffering') + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-accesslog-logbuffering', 'off')]) + + log.info('Bind as {%s,%s}' % (DN_DM, PASSWORD)) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + log.info('Adding ou=%s a bind user belongs to.' % BOU) + topology.standalone.add_s(Entry((BINDOU, { + 'objectclass': 'top organizationalunit'.split(), + 'ou': BOU}))) + + log.info('Adding a bind user.') + topology.standalone.add_s(Entry((BINDDN, + {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': 'bind user', + 'sn': 'user', + 'userPassword': BINDPW}))) + + log.info('Adding a test user.') + topology.standalone.add_s(Entry((TESTDN, + {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': 'test user', + 'sn': 'user', + 'userPassword': TESTPW}))) + + log.info('Deleting aci in %s.' % DEFAULT_SUFFIX) + topology.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_DELETE, 'aci', None)]) + + log.info('Bind case 1. the bind user has no rights to read the entry itself, bind should be successful.') + log.info('Bind as {%s,%s} who has no access rights.' % (BINDDN, BINDPW)) + try: + topology.standalone.simple_bind_s(BINDDN, BINDPW) + except ldap.LDAPError as e: + log.info('Desc ' + e.message['desc']) + assert False + + file_path = os.path.join(topology.standalone.prefix, 'var/log/dirsrv/slapd-%s/access' % topology.standalone.serverid) + file_obj = open(file_path, "r") + log.info('Access log path: %s' % file_path) + + log.info('Bind case 2-1. the bind user does not exist, bind should fail with error %s' % ldap.INVALID_CREDENTIALS.__name__) + log.info('Bind as {%s,%s} who does not exist.' % (BOGUSDN, 'bogus')) + try: + topology.standalone.simple_bind_s(BOGUSDN, 'bogus') + except ldap.LDAPError as e: + log.info("Exception (expected): %s" % type(e).__name__) + log.info('Desc ' + e.message['desc']) + assert isinstance(e, ldap.INVALID_CREDENTIALS) + regex = re.compile('No such entry') + cause = pattern_accesslog(file_obj, regex) + if cause == None: + log.fatal('Cause not found - %s' % cause) + assert False + else: + log.info('Cause found - %s' % cause) + time.sleep(1) + + log.info('Bind case 2-2. the bind user\'s suffix does not exist, bind should fail with error %s' % ldap.INVALID_CREDENTIALS.__name__) + log.info('Bind as {%s,%s} who does not exist.' % (BOGUSSUFFIX, 'bogus')) + try: + topology.standalone.simple_bind_s(BOGUSSUFFIX, 'bogus') + except ldap.LDAPError as e: + log.info("Exception (expected): %s" % type(e).__name__) + log.info('Desc ' + e.message['desc']) + assert isinstance(e, ldap.INVALID_CREDENTIALS) + regex = re.compile('No such suffix') + cause = pattern_accesslog(file_obj, regex) + if cause == None: + log.fatal('Cause not found - %s' % cause) + assert False + else: + log.info('Cause found - %s' % cause) + time.sleep(1) + + log.info('Bind case 2-3. the bind user\'s password is wrong, bind should fail with error %s' % ldap.INVALID_CREDENTIALS.__name__) + log.info('Bind as {%s,%s} who does not exist.' % (BINDDN, 'bogus')) + try: + topology.standalone.simple_bind_s(BINDDN, 'bogus') + except ldap.LDAPError as e: + log.info("Exception (expected): %s" % type(e).__name__) + log.info('Desc ' + e.message['desc']) + assert isinstance(e, ldap.INVALID_CREDENTIALS) + regex = re.compile('Invalid credentials') + cause = pattern_accesslog(file_obj, regex) + if cause == None: + log.fatal('Cause not found - %s' % cause) + assert False + else: + log.info('Cause found - %s' % cause) + time.sleep(1) + + log.info('Adding aci for %s to %s.' % (BINDDN, BINDOU)) + acival = '(targetattr="*")(version 3.0; acl "%s"; allow(all) userdn = "ldap:///%s";)' % (BUID, BINDDN) + log.info('aci: %s' % acival) + log.info('Bind as {%s,%s}' % (DN_DM, PASSWORD)) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(BINDOU, [(ldap.MOD_ADD, 'aci', acival)]) + time.sleep(1) + + log.info('Bind case 3. the bind user has the right to read the entry itself, bind should be successful.') + log.info('Bind as {%s,%s} which should be ok.\n' % (BINDDN, BINDPW)) + topology.standalone.simple_bind_s(BINDDN, BINDPW) + + log.info('The following operations are against the subtree the bind user %s has no rights.' % BINDDN) + # Search + exists = True + rc = ldap.SUCCESS + log.info('Search case 1. the bind user has no rights to read the search entry, it should return no search results with %s' % rc) + check_op_result(topology.standalone, 'search', TESTDN, None, exists, rc) + + exists = False + rc = ldap.SUCCESS + log.info('Search case 2-1. the search entry does not exist, the search should return no search results with %s' % rc.__name__) + check_op_result(topology.standalone, 'search', BOGUSDN, None, exists, rc) + + exists = False + rc = ldap.SUCCESS + log.info('Search case 2-2. the search entry does not exist, the search should return no search results with %s' % rc.__name__) + check_op_result(topology.standalone, 'search', BOGUSDN2, None, exists, rc) + + # Add + exists = True + rc = ldap.INSUFFICIENT_ACCESS + log.info('Add case 1. the bind user has no rights AND the adding entry exists, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'add', TESTDN, None, exists, rc) + + exists = False + rc = ldap.INSUFFICIENT_ACCESS + log.info('Add case 2-1. the bind user has no rights AND the adding entry does not exist, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'add', BOGUSDN, None, exists, rc) + + exists = False + rc = ldap.INSUFFICIENT_ACCESS + log.info('Add case 2-2. the bind user has no rights AND the adding entry does not exist, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'add', BOGUSDN2, None, exists, rc) + + # Modify + exists = True + rc = ldap.INSUFFICIENT_ACCESS + log.info('Modify case 1. the bind user has no rights AND the modifying entry exists, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'modify', TESTDN, None, exists, rc) + + exists = False + rc = ldap.INSUFFICIENT_ACCESS + log.info('Modify case 2-1. the bind user has no rights AND the modifying entry does not exist, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'modify', BOGUSDN, None, exists, rc) + + exists = False + rc = ldap.INSUFFICIENT_ACCESS + log.info('Modify case 2-2. the bind user has no rights AND the modifying entry does not exist, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'modify', BOGUSDN2, None, exists, rc) + + # Modrdn + exists = True + rc = ldap.INSUFFICIENT_ACCESS + log.info('Modrdn case 1. the bind user has no rights AND the renaming entry exists, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'modrdn', TESTDN, None, exists, rc) + + exists = False + rc = ldap.INSUFFICIENT_ACCESS + log.info('Modrdn case 2-1. the bind user has no rights AND the renaming entry does not exist, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'modrdn', BOGUSDN, None, exists, rc) + + exists = False + rc = ldap.INSUFFICIENT_ACCESS + log.info('Modrdn case 2-2. the bind user has no rights AND the renaming entry does not exist, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'modrdn', BOGUSDN2, None, exists, rc) + + exists = True + rc = ldap.INSUFFICIENT_ACCESS + log.info('Modrdn case 3. the bind user has no rights AND the node moving an entry to exists, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'modrdn', TESTDN, GROUPOU, exists, rc) + + exists = False + rc = ldap.INSUFFICIENT_ACCESS + log.info('Modrdn case 4-1. the bind user has no rights AND the node moving an entry to does not, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'modrdn', TESTDN, BOGUSOU, exists, rc) + + exists = False + rc = ldap.INSUFFICIENT_ACCESS + log.info('Modrdn case 4-2. the bind user has no rights AND the node moving an entry to does not, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'modrdn', TESTDN, BOGUSOU, exists, rc) + + # Delete + exists = True + rc = ldap.INSUFFICIENT_ACCESS + log.info('Delete case 1. the bind user has no rights AND the deleting entry exists, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'delete', TESTDN, None, exists, rc) + + exists = False + rc = ldap.INSUFFICIENT_ACCESS + log.info('Delete case 2-1. the bind user has no rights AND the deleting entry does not exist, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'delete', BOGUSDN, None, exists, rc) + + exists = False + rc = ldap.INSUFFICIENT_ACCESS + log.info('Delete case 2-2. the bind user has no rights AND the deleting entry does not exist, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'delete', BOGUSDN2, None, exists, rc) + + log.info('EXTRA: Check no regressions') + log.info('Adding aci for %s to %s.' % (BINDDN, DEFAULT_SUFFIX)) + acival = '(targetattr="*")(version 3.0; acl "%s-all"; allow(all) userdn = "ldap:///%s";)' % (BUID, BINDDN) + log.info('Bind as {%s,%s}' % (DN_DM, PASSWORD)) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_ADD, 'aci', acival)]) + time.sleep(1) + + log.info('Bind as {%s,%s}.' % (BINDDN, BINDPW)) + try: + topology.standalone.simple_bind_s(BINDDN, BINDPW) + except ldap.LDAPError as e: + log.info('Desc ' + e.message['desc']) + assert False + time.sleep(1) + + exists = False + rc = ldap.NO_SUCH_OBJECT + log.info('Search case. the search entry does not exist, the search should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'search', BOGUSDN2, None, exists, rc) + file_obj.close() + + exists = True + rc = ldap.ALREADY_EXISTS + log.info('Add case. the adding entry already exists, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'add', TESTDN, None, exists, rc) + + exists = False + rc = ldap.NO_SUCH_OBJECT + log.info('Modify case. the modifying entry does not exist, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'modify', BOGUSDN, None, exists, rc) + + exists = False + rc = ldap.NO_SUCH_OBJECT + log.info('Modrdn case 1. the renaming entry does not exist, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'modrdn', BOGUSDN, None, exists, rc) + + exists = False + rc = ldap.NO_SUCH_OBJECT + log.info('Modrdn case 2. the node moving an entry to does not, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'modrdn', TESTDN, BOGUSOU, exists, rc) + + exists = False + rc = ldap.NO_SUCH_OBJECT + log.info('Delete case. the deleting entry does not exist, it should fail with %s' % rc.__name__) + check_op_result(topology.standalone, 'delete', BOGUSDN, None, exists, rc) + + log.info('Inactivate %s' % BINDDN) + nsinactivate = '%s/sbin/ns-inactivate.pl' % topology.standalone.prefix + p = Popen([nsinactivate, '-Z', 'standalone', '-D', DN_DM, '-w', PASSWORD, '-I', BINDDN]) + assert(p.wait() == 0) + + log.info('Bind as {%s,%s} which should fail with %s.' % (BINDDN, BUID, ldap.UNWILLING_TO_PERFORM.__name__)) + try: + topology.standalone.simple_bind_s(BINDDN, BUID) + except ldap.LDAPError as e: + log.info("Exception (expected): %s" % type(e).__name__) + log.info('Desc ' + e.message['desc']) + assert isinstance(e, ldap.UNWILLING_TO_PERFORM) + + log.info('Bind as {%s,%s} which should fail with %s.' % (BINDDN, 'bogus', ldap.INVALID_CREDENTIALS.__name__)) + try: + topology.standalone.simple_bind_s(BINDDN, 'bogus') + except ldap.LDAPError as e: + log.info("Exception (expected): %s" % type(e).__name__) + log.info('Desc ' + e.message['desc']) + assert isinstance(e, ldap.INVALID_CREDENTIALS) + + log.info('SUCCESS') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket142_test.py b/dirsrvtests/tests/tickets/ticket142_test.py new file mode 100644 index 0000000..3c9cfce --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket142_test.py @@ -0,0 +1,307 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +import shutil +from lib389 import DirSrv, Entry, tools +from lib389 import DirSrvTools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +CONFIG_DN = 'cn=config' +OU_PEOPLE = 'ou=People,' + DEFAULT_SUFFIX +PWP_CONTAINER = 'nsPwPolicyContainer' +PWP_CONTAINER_DN = 'cn=' + PWP_CONTAINER + ',' + OU_PEOPLE +PWP_ENTRY_DN = 'cn=nsPwPolicyEntry,' + OU_PEOPLE +PWP_TEMPLATE_ENTRY_DN = 'cn=nsPwTemplateEntry,' + OU_PEOPLE +ATTR_INHERIT_GLOBAL = 'nsslapd-pwpolicy-inherit-global' + +BN = 'uid=buser,' + DEFAULT_SUFFIX + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def _header(topology, label): + topology.standalone.log.info("###############################################") + topology.standalone.log.info("####### %s" % label) + topology.standalone.log.info("###############################################") + + +def check_attr_val(topology, dn, attr, expected): + try: + centry = topology.standalone.search_s(dn, ldap.SCOPE_BASE, 'cn=*') + if centry: + val = centry[0].getValue(attr) + if val == expected: + log.info('Default value of %s is %s' % (attr, expected)) + else: + log.info('Default value of %s is not %s, but %s' % (attr, expected, val)) + assert False + else: + log.fatal('Failed to get %s' % dn) + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search ' + dn + ': ' + e.message['desc']) + assert False + + +def test_142_init(topology): + """ + Set global password policy. + Then, set fine-grained subtree level password policy to ou=People with no password syntax. + Note: do not touch nsslapd-pwpolicy-inherit-global -- off by default + Also, adding an ordinary bind user. + """ + _header(topology, 'Testing Ticket 142 - Default password syntax settings do not work with fine-grained policies') + + log.info("Setting global password policy with password syntax.") + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-pwpolicy-local', 'on')]) + + log.info("Setting fine-grained password policy.") + topology.standalone.add_s(Entry((PWP_CONTAINER_DN, { + 'objectclass': "top nsContainer".split()}))) + topology.standalone.add_s(Entry(('cn="%s",%s' % (PWP_ENTRY_DN, PWP_CONTAINER_DN), { + 'objectclass': "top ldapsubentry passwordpolicy".split()}))) + topology.standalone.add_s(Entry(('cn="%s",%s' % (PWP_TEMPLATE_ENTRY_DN, PWP_CONTAINER_DN), { + 'objectclass': "top ldapsubentry costemplate".split(), + 'pwdpolicysubentry': 'cn="%s",%s' % (PWP_ENTRY_DN, PWP_CONTAINER_DN)}))) + topology.standalone.add_s(Entry(('cn=nsPwPolicy_CoS,%s' % OU_PEOPLE, { + 'objectclass': "top ldapsubentry cosSuperDefinition cosPointerDefinition".split(), + 'cosTemplateDn': 'cn="%s",%s' % (PWP_TEMPLATE_ENTRY_DN, PWP_CONTAINER_DN), + 'cosAttribute': 'pwdpolicysubentry default operational-default'}))) + + log.info(" with the default settings.") + topology.standalone.modify_s('cn="%s",%s' % (PWP_ENTRY_DN, PWP_CONTAINER_DN), + [(ldap.MOD_REPLACE, 'passwordMustChange', 'off'), + (ldap.MOD_REPLACE, 'passwordExp', 'off'), + (ldap.MOD_REPLACE, 'passwordMinAge', '0'), + (ldap.MOD_REPLACE, 'passwordChange', 'off'), + (ldap.MOD_REPLACE, 'passwordStorageScheme', 'ssha')]) + + check_attr_val(topology, CONFIG_DN, ATTR_INHERIT_GLOBAL, 'off') + check_attr_val(topology, CONFIG_DN, 'passwordCheckSyntax', 'off') + + log.info('Adding a bind user.') + topology.standalone.add_s(Entry((BN, + {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': 'bind user', + 'sn': 'bind user', + 'userPassword': PASSWORD}))) + + log.info('Adding an aci for the bind user.') + topology.standalone.modify_s(OU_PEOPLE, + [(ldap.MOD_ADD, + 'aci', + '(targetattr="*")(version 3.0; acl "pwp test"; allow (all) userdn="ldap:///%s";)' % BN)]) + + +def test_142_run_0(topology): + """ + Make sure an entry added to ou=people has no password syntax restrictions. + """ + _header(topology, 'Case 0 - Make sure an entry added to ou=people has no password syntax restrictions.') + + topology.standalone.simple_bind_s(BN, PASSWORD) + try: + topology.standalone.add_s(Entry(('cn=test0,%s' % OU_PEOPLE, + {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': 'test0', + 'sn': 'test0', + 'userPassword': 'short'}))) + except ldap.LDAPError as e: + log.fatal('Failed to add cn=test0 with userPassword: short: ' + e.message['desc']) + assert False + + log.info('PASSED') + + +def test_142_run_1(topology): + """ + Set 'nsslapd-pwpolicy-inherit-global: on' + But passwordCheckSyntax is still off. + Make sure an entry added to ou=people has the global password syntax restrictions. + """ + _header(topology, 'Case 1 - Make sure an entry added to ou=people has no password syntax restrictions.') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, ATTR_INHERIT_GLOBAL, 'on')]) + check_attr_val(topology, CONFIG_DN, ATTR_INHERIT_GLOBAL, 'on') + check_attr_val(topology, CONFIG_DN, 'passwordCheckSyntax', 'off') + topology.standalone.simple_bind_s(BN, PASSWORD) + try: + topology.standalone.add_s(Entry(('cn=test1,%s' % OU_PEOPLE, + {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': 'test1', + 'sn': 'test1', + 'userPassword': 'short'}))) + except ldap.LDAPError as e: + log.fatal('Failed to add cn=test1 with userPassword: short: ' + e.message['desc']) + assert False + + log.info('PASSED') + + +def test_142_run_2(topology): + """ + Set 'passwordCheckSyntax: on' + Set 'passwordMinLength: 9' for testing + Make sure an entry added to ou=people has the global password syntax restrictions. + """ + _header(topology, 'Case 2 - Make sure an entry added to ou=people has the global password syntax restrictions.') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(CONFIG_DN, + [(ldap.MOD_REPLACE, 'passwordCheckSyntax', 'on'), + (ldap.MOD_REPLACE, 'passwordMinLength', '9')]) + check_attr_val(topology, CONFIG_DN, ATTR_INHERIT_GLOBAL, 'on') + check_attr_val(topology, CONFIG_DN, 'passwordCheckSyntax', 'on') + topology.standalone.simple_bind_s(BN, PASSWORD) + failed_as_expected = False + try: + topology.standalone.add_s(Entry(('cn=test2,%s' % OU_PEOPLE, + {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': 'test2', + 'sn': 'test2', + 'userPassword': 'Abcd2345'}))) + except ldap.LDAPError as e: + log.info('Adding cn=test2 with "userPassword: Abcd2345" was expectedly rejected: ' + e.message['desc']) + failed_as_expected = True + + if not failed_as_expected: + log.fatal('Adding cn=test2 with "userPassword: Abcd2345" was unexpectedly successful despite of short password.') + assert False + + try: + topology.standalone.add_s(Entry(('cn=test2,%s' % OU_PEOPLE, + {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': 'test2', + 'sn': 'test2', + 'userPassword': 'Abcd23456'}))) + except ldap.LDAPError as e: + log.fatal('Adding cn=test2 with "userPassword: Abcd23456" failed: ' + e.message['desc']) + assert False + + log.info('PASSED') + + +def test_142_run_3(topology): + """ + Set 'passwordCheckSyntax: on' + Set 'nsslapd-pwpolicy-inherit-global: off' + Make sure an entry added to ou=people has no syntax restrictions. + """ + _header(topology, 'Case 3 - Make sure an entry added to ou=people has no password syntax restrictions.') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(CONFIG_DN, + [(ldap.MOD_REPLACE, ATTR_INHERIT_GLOBAL, 'off')]) + check_attr_val(topology, CONFIG_DN, ATTR_INHERIT_GLOBAL, 'off') + check_attr_val(topology, CONFIG_DN, 'passwordCheckSyntax', 'on') + topology.standalone.simple_bind_s(BN, PASSWORD) + try: + topology.standalone.add_s(Entry(('cn=test3,%s' % OU_PEOPLE, + {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': 'test3', + 'sn': 'test3', + 'userPassword': 'Abcd3456'}))) + except ldap.LDAPError as e: + log.fatal('Adding cn=test3 with "userPassword: Abcd3456" failed: ' + e.message['desc']) + assert False + + log.info('PASSED') + + +def test_142_run_4(topology): + """ + Set 'passwordCheckSyntax: on' + Set 'nsslapd-pwpolicy-inherit-global: on' + Set password syntax to fine-grained password policy to check it overrides the global settings. + """ + _header(topology, 'Case 4 - Make sure an entry added to ou=people follows the fine-grained password syntax restrictions.') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(CONFIG_DN, + [(ldap.MOD_REPLACE, ATTR_INHERIT_GLOBAL, 'on')]) + check_attr_val(topology, CONFIG_DN, ATTR_INHERIT_GLOBAL, 'on') + check_attr_val(topology, CONFIG_DN, 'passwordCheckSyntax', 'on') + topology.standalone.modify_s('cn="%s",%s' % (PWP_ENTRY_DN, PWP_CONTAINER_DN), + [(ldap.MOD_REPLACE, 'passwordMinLength', '5'), + (ldap.MOD_REPLACE, 'passwordMinCategories', '2')]) + try: + topology.standalone.add_s(Entry(('cn=test4,%s' % OU_PEOPLE, + {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': 'test4', + 'sn': 'test4', + 'userPassword': 'Abcd4'}))) + except ldap.LDAPError as e: + log.fatal('Adding cn=test4 with "userPassword: Abcd4" failed: ' + e.message['desc']) + assert False + + log.info('PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket365_test.py b/dirsrvtests/tests/tickets/ticket365_test.py new file mode 100644 index 0000000..8025375 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket365_test.py @@ -0,0 +1,176 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# + +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket365(topology): + ''' + Write your testcase here... + + nsslapd-auditlog-logging-hide-unhashed-pw + + and test + + nsslapd-unhashed-pw-switch ticket 561 + + on, off, nolog? + ''' + + USER_DN = 'uid=test_entry,' + DEFAULT_SUFFIX + + # + # Add the test entry + # + try: + topology.standalone.add_s(Entry((USER_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'test_entry', + 'userpassword': 'password' + }))) + except ldap.LDAPError as e: + log.error('Failed to add test user: error ' + e.message['desc']) + assert False + + # + # Enable the audit log + # + try: + topology.standalone.modify_s(DN_CONFIG, + [(ldap.MOD_REPLACE, + 'nsslapd-auditlog-logging-enabled', + 'on')]) + except ldap.LDAPError as e: + log.fatal('Failed to enable audit log, error: ' + e.message['desc']) + assert False + ''' + try: + ent = topology.standalone.getEntry(DN_CONFIG, attrlist=[ + 'nsslapd-instancedir', + 'nsslapd-errorlog', + 'nsslapd-accesslog', + 'nsslapd-certdir', + 'nsslapd-schemadir']) + ''' + # + # Allow the unhashed password to be written to audit log + # + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, + 'nsslapd-auditlog-logging-hide-unhashed-pw', 'off')]) + except ldap.LDAPError as e: + log.fatal('Failed to enable writing unhashed password to audit log, ' + + 'error: ' + e.message['desc']) + assert False + + # + # Set new password, and check the audit log + # + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'userpassword', + 'mypassword')]) + except ldap.LDAPError as e: + log.fatal('Failed to enable writing unhashed password to audit log, ' + + 'error: ' + e.message['desc']) + assert False + + # Check audit log + time.sleep(1) + if not topology.standalone.searchAuditLog('unhashed#user#password: mypassword'): + log.fatal('failed to find unhashed password in auditlog') + assert False + + # + # Hide unhashed password in audit log + # + try: + topology.standalone.modify_s(DN_CONFIG, + [(ldap.MOD_REPLACE, + 'nsslapd-auditlog-logging-hide-unhashed-pw', + 'on')]) + except ldap.LDAPError as e: + log.fatal('Failed to deny writing unhashed password to audit log, ' + + 'error: ' + e.message['desc']) + assert False + log.info('Test complete') + + # + # Modify password, and check the audit log + # + try: + topology.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, + 'userpassword', + 'hidepassword')]) + except ldap.LDAPError as e: + log.fatal('Failed to enable writing unhashed password to audit log, ' + + 'error: ' + e.message['desc']) + assert False + + # Check audit log + time.sleep(1) + if topology.standalone.searchAuditLog('unhashed#user#password: hidepassword'): + log.fatal('Found unhashed password in auditlog') + assert False + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket47313_test.py b/dirsrvtests/tests/tickets/ticket47313_test.py new file mode 100644 index 0000000..ad6550e --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47313_test.py @@ -0,0 +1,158 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import time +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +ENTRY_NAME = 'test_entry' + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket47313_run(topology): + """ + It adds 2 test entries + Search with filters including subtype and ! + It deletes the added entries + """ + + # bind as directory manager + topology.standalone.log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + # enable filter error logging + #mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '32')] + #topology.standalone.modify_s(DN_CONFIG, mod) + + topology.standalone.log.info("\n\n######################### ADD ######################\n") + + # Prepare the entry with cn;fr & cn;en + entry_name_fr = '%s fr' % (ENTRY_NAME) + entry_name_en = '%s en' % (ENTRY_NAME) + entry_name_both = '%s both' % (ENTRY_NAME) + entry_dn_both = 'cn=%s, %s' % (entry_name_both, SUFFIX) + entry_both = Entry(entry_dn_both) + entry_both.setValues('objectclass', 'top', 'person') + entry_both.setValues('sn', entry_name_both) + entry_both.setValues('cn', entry_name_both) + entry_both.setValues('cn;fr', entry_name_fr) + entry_both.setValues('cn;en', entry_name_en) + + # Prepare the entry with one member + entry_name_en_only = '%s en only' % (ENTRY_NAME) + entry_dn_en_only = 'cn=%s, %s' % (entry_name_en_only, SUFFIX) + entry_en_only = Entry(entry_dn_en_only) + entry_en_only.setValues('objectclass', 'top', 'person') + entry_en_only.setValues('sn', entry_name_en_only) + entry_en_only.setValues('cn', entry_name_en_only) + entry_en_only.setValues('cn;en', entry_name_en) + + topology.standalone.log.info("Try to add Add %s: %r" % (entry_dn_both, entry_both)) + topology.standalone.add_s(entry_both) + + topology.standalone.log.info("Try to add Add %s: %r" % (entry_dn_en_only, entry_en_only)) + topology.standalone.add_s(entry_en_only) + + topology.standalone.log.info("\n\n######################### SEARCH ######################\n") + + # filter: (&(cn=test_entry en only)(!(cn=test_entry fr))) + myfilter = '(&(sn=%s)(!(cn=%s)))' % (entry_name_en_only, entry_name_fr) + topology.standalone.log.info("Try to search with filter %s" % myfilter) + ents = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, myfilter) + assert len(ents) == 1 + assert ents[0].sn == entry_name_en_only + topology.standalone.log.info("Found %s" % ents[0].dn) + + # filter: (&(cn=test_entry en only)(!(cn;fr=test_entry fr))) + myfilter = '(&(sn=%s)(!(cn;fr=%s)))' % (entry_name_en_only, entry_name_fr) + topology.standalone.log.info("Try to search with filter %s" % myfilter) + ents = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, myfilter) + assert len(ents) == 1 + assert ents[0].sn == entry_name_en_only + topology.standalone.log.info("Found %s" % ents[0].dn) + + # filter: (&(cn=test_entry en only)(!(cn;en=test_entry en))) + myfilter = '(&(sn=%s)(!(cn;en=%s)))' % (entry_name_en_only, entry_name_en) + topology.standalone.log.info("Try to search with filter %s" % myfilter) + ents = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, myfilter) + assert len(ents) == 0 + topology.standalone.log.info("Found none") + + topology.standalone.log.info("\n\n######################### DELETE ######################\n") + + topology.standalone.log.info("Try to delete %s " % entry_dn_both) + topology.standalone.delete_s(entry_dn_both) + + topology.standalone.log.info("Try to delete %s " % entry_dn_en_only) + topology.standalone.delete_s(entry_dn_en_only) + + log.info('Testcase PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket47384_test.py b/dirsrvtests/tests/tickets/ticket47384_test.py new file mode 100644 index 0000000..3a0f515 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47384_test.py @@ -0,0 +1,166 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +import shutil +from lib389 import DirSrv, Entry, tools, tasks +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + if os.geteuid() == 0: + os.system('setenforce 1') + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket47384(topology): + ''' + Test pluginpath validation: relative and absolute paths + + With the inclusion of ticket 47601 - we do allow plugin paths + outside the default location + ''' + + if os.geteuid() != 0: + log.warn('This script must be run as root') + return + + os.system('setenforce 0') + + PLUGIN_DN = 'cn=%s,cn=plugins,cn=config' % PLUGIN_WHOAMI + tmp_dir = '/tmp' + plugin_dir = get_plugin_dir(topology.standalone.prefix) + + # Copy the library to our tmp directory + try: + shutil.copy('%s/libwhoami-plugin.so' % plugin_dir, tmp_dir) + except IOError as e: + log.fatal('Failed to copy libwhoami-plugin.so to the tmp directory, error: ' + + e.strerror) + assert False + try: + shutil.copy('%s/libwhoami-plugin.la' % plugin_dir, tmp_dir) + except IOError as e: + log.warn('Failed to copy ' + plugin_dir + + '/libwhoami-plugin.la to the tmp directory, error: ' + + e.strerror) + + # + # Test adding valid plugin paths + # + # Try using the absolute path to the current library + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, + 'nsslapd-pluginPath', '%s/libwhoami-plugin' % plugin_dir)]) + except ldap.LDAPError as e: + log.error('Failed to set valid plugin path (%s): error (%s)' % + ('%s/libwhoami-plugin' % plugin_dir, e.message['desc'])) + assert False + + # Try using new remote location + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, + 'nsslapd-pluginPath', '%s/libwhoami-plugin' % tmp_dir)]) + except ldap.LDAPError as e: + log.error('Failed to set valid plugin path (%s): error (%s)' % + ('%s/libwhoami-plugin' % tmp_dir, e.message['desc'])) + assert False + + # Set plugin path back to the default + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, + 'nsslapd-pluginPath', 'libwhoami-plugin')]) + except ldap.LDAPError as e: + log.error('Failed to set valid relative plugin path (%s): error (%s)' % + ('libwhoami-plugin' % tmp_dir, e.message['desc'])) + assert False + + # + # Test invalid path (no library present) + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, + 'nsslapd-pluginPath', '/bin/libwhoami-plugin')]) + # No exception?! This is an error + log.error('Invalid plugin path was incorrectly accepted by the server!') + assert False + except ldap.UNWILLING_TO_PERFORM: + # Correct, operation should be rejected + pass + except ldap.LDAPError as e: + log.error('Failed to set invalid plugin path (%s): error (%s)' % + ('/bin/libwhoami-plugin', e.message['desc'])) + + # + # Test invalid relative path (no library present) + # + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, + 'nsslapd-pluginPath', '../libwhoami-plugin')]) + # No exception?! This is an error + log.error('Invalid plugin path was incorrectly accepted by the server!') + assert False + except ldap.UNWILLING_TO_PERFORM: + # Correct, operation should be rejected + pass + except ldap.LDAPError as e: + log.error('Failed to set invalid plugin path (%s): error (%s)' % + ('../libwhoami-plugin', e.message['desc'])) + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket47431_test.py b/dirsrvtests/tests/tickets/ticket47431_test.py new file mode 100644 index 0000000..00d3f98 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47431_test.py @@ -0,0 +1,245 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import time +import ldap +import logging +import pytest +from lib389 import DirSrv +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +DN_7BITPLUGIN = "cn=7-bit check,%s" % DN_PLUGIN +ATTRS = ["uid", "mail", "userpassword", ",", SUFFIX, None] + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket47431_0(topology): + ''' + Enable 7 bit plugin + ''' + log.info("Ticket 47431 - 0: Enable 7bit plugin...") + topology.standalone.plugins.enable(name=PLUGIN_7_BIT_CHECK) + + +def test_ticket47431_1(topology): + ''' + nsslapd-pluginarg0: uid + nsslapd-pluginarg1: mail + nsslapd-pluginarg2: userpassword <== repeat 27 times + nsslapd-pluginarg3: , + nsslapd-pluginarg4: dc=example,dc=com + + The duplicated values are removed by str2entry_dupcheck as follows: + [..] - str2entry_dupcheck: 27 duplicate values for attribute type nsslapd-pluginarg2 + detected in entry cn=7-bit check,cn=plugins,cn=config. Extra values ignored. + ''' + + log.info("Ticket 47431 - 1: Check 26 duplicate values are treated as one...") + expected = "str2entry_dupcheck: .* duplicate values for attribute type nsslapd-pluginarg2 detected in entry cn=7-bit check,cn=plugins,cn=config." + + log.debug('modify_s %s' % DN_7BITPLUGIN) + try: + topology.standalone.modify_s(DN_7BITPLUGIN, + [(ldap.MOD_REPLACE, 'nsslapd-pluginarg0', "uid"), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg1', "mail"), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg2', "userpassword"), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg3', ","), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg4', SUFFIX)]) + except ValueError: + log.error('modify failed: Some problem occured with a value that was provided') + assert False + + arg2 = "nsslapd-pluginarg2: userpassword" + topology.standalone.stop(timeout=10) + dse_ldif = topology.standalone.confdir + '/dse.ldif' + os.system('mv %s %s.47431' % (dse_ldif, dse_ldif)) + os.system('sed -e "s/\\(%s\\)/\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1\\n\\1/" %s.47431 > %s' % (arg2, dse_ldif, dse_ldif)) + topology.standalone.start(timeout=10) + + cmdline = 'egrep -i "%s" %s' % (expected, topology.standalone.errlog) + p = os.popen(cmdline, "r") + line = p.readline() + if line == "": + log.error('Expected error "%s" not logged in %s' % (expected, topology.standalone.errlog)) + assert False + else: + log.debug('line: %s' % line) + log.info('Expected error "%s" logged in %s' % (expected, topology.standalone.errlog)) + + + log.info("Ticket 47431 - 1: done") + + +def test_ticket47431_2(topology): + ''' + nsslapd-pluginarg0: uid + nsslapd-pluginarg0: mail + nsslapd-pluginarg1: userpassword + nsslapd-pluginarg2: , + nsslapd-pluginarg3: dc=example,dc=com + ==> + nsslapd-pluginarg0: uid + nsslapd-pluginarg1: mail + nsslapd-pluginarg2: userpassword + nsslapd-pluginarg3: , + nsslapd-pluginarg4: dc=example,dc=com + Should be logged in error log: + [..] NS7bitAttr_Init - 0: uid + [..] NS7bitAttr_Init - 1: userpassword + [..] NS7bitAttr_Init - 2: mail + [..] NS7bitAttr_Init - 3: , + [..] NS7bitAttr_Init - 4: dc=example,dc=com + ''' + + log.info("Ticket 47431 - 2: Check two values belonging to one arg is fixed...") + + try: + topology.standalone.modify_s(DN_7BITPLUGIN, + [(ldap.MOD_REPLACE, 'nsslapd-pluginarg0', "uid"), + (ldap.MOD_ADD, 'nsslapd-pluginarg0', "mail"), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg1', "userpassword"), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg2', ","), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg3', SUFFIX), + (ldap.MOD_DELETE, 'nsslapd-pluginarg4', None)]) + except ValueError: + log.error('modify failed: Some problem occured with a value that was provided') + assert False + + # PLUGIN LOG LEVEL + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '65536')]) + + topology.standalone.restart(timeout=10) + + cmdline = 'egrep -i %s %s' % ("NS7bitAttr_Init", topology.standalone.errlog) + p = os.popen(cmdline, "r") + i = 0 + while ATTRS[i]: + line = p.readline() + log.debug('line - %s' % line) + log.debug('ATTRS[%d] %s' % (i, ATTRS[i])) + if line == "": + break + elif line.find(ATTRS[i]) >= 0: + log.debug('%s was logged' % ATTRS[i]) + else: + log.error('%s was not logged.' % ATTRS[i]) + assert False + i = i + 1 + + log.info("Ticket 47431 - 2: done") + + +def test_ticket47431_3(topology): + ''' + nsslapd-pluginarg1: uid + nsslapd-pluginarg3: mail + nsslapd-pluginarg5: userpassword + nsslapd-pluginarg7: , + nsslapd-pluginarg9: dc=example,dc=com + ==> + nsslapd-pluginarg0: uid + nsslapd-pluginarg1: mail + nsslapd-pluginarg2: userpassword + nsslapd-pluginarg3: , + nsslapd-pluginarg4: dc=example,dc=com + Should be logged in error log: + [..] NS7bitAttr_Init - 0: uid + [..] NS7bitAttr_Init - 1: userpassword + [..] NS7bitAttr_Init - 2: mail + [..] NS7bitAttr_Init - 3: , + [..] NS7bitAttr_Init - 4: dc=example,dc=com + ''' + + log.info("Ticket 47431 - 3: Check missing args are fixed...") + + try: + topology.standalone.modify_s(DN_7BITPLUGIN, + [(ldap.MOD_DELETE, 'nsslapd-pluginarg0', None), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg1', "uid"), + (ldap.MOD_DELETE, 'nsslapd-pluginarg2', None), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg3', "mail"), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg5', "userpassword"), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg7', ","), + (ldap.MOD_REPLACE, 'nsslapd-pluginarg9', SUFFIX)]) + except ValueError: + log.error('modify failed: Some problem occured with a value that was provided') + assert False + + # PLUGIN LOG LEVEL + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '65536')]) + + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47431' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + topology.standalone.start(timeout=10) + + cmdline = 'egrep -i %s %s' % ("NS7bitAttr_Init", topology.standalone.errlog) + p = os.popen(cmdline, "r") + i = 0 + while ATTRS[i]: + line = p.readline() + if line == "": + break + elif line.find(ATTRS[i]) >= 0: + log.debug('%s was logged' % ATTRS[i]) + else: + log.error('%s was not logged.' % ATTRS[i]) + assert False + i = i + 1 + + log.info("Ticket 47431 - 3: done") + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket47462_test.py b/dirsrvtests/tests/tickets/ticket47462_test.py new file mode 100644 index 0000000..50b867e --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47462_test.py @@ -0,0 +1,433 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +# +# important part. We can deploy Master1 and Master2 on different versions +# +installation1_prefix = None +installation2_prefix = None + +DES_PLUGIN = 'cn=DES,cn=Password Storage Schemes,cn=plugins,cn=config' +AES_PLUGIN = 'cn=AES,cn=Password Storage Schemes,cn=plugins,cn=config' +MMR_PLUGIN = 'cn=Multimaster Replication Plugin,cn=plugins,cn=config' +AGMT_DN = '' +USER_DN = 'cn=test_user,' + DEFAULT_SUFFIX +USER1_DN = 'cn=test_user1,' + DEFAULT_SUFFIX +TEST_REPL_DN = 'cn=test repl,' + DEFAULT_SUFFIX +DES2AES_TASK_DN = 'cn=convert,cn=des2aes,cn=tasks,cn=config' + + +class TopologyMaster1Master2(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to create a replicated topology for the 'module'. + The replicated topology is MASTER1 <-> Master2. + ''' + global installation1_prefix + global installation2_prefix + + # allocate master1 on a given deployement + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Args for the master1 instance + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_master = args_instance.copy() + master1.allocate(args_master) + + # allocate master1 on a given deployement + master2 = DirSrv(verbose=False) + if installation2_prefix: + args_instance[SER_DEPLOYED_DIR] = installation2_prefix + + # Args for the consumer instance + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_master = args_instance.copy() + master2.allocate(args_master) + + # Get the status of the instance and restart it if it exists + instance_master1 = master1.exists() + instance_master2 = master2.exists() + + # Remove all the instances + if instance_master1: + master1.delete() + if instance_master2: + master2.delete() + + # Create the instances + master1.create() + master1.open() + master2.create() + master2.open() + + # + # Now prepare the Master-Consumer topology + # + # First Enable replication + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # Initialize the supplier->consumer + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + AGMT_DN = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + master1.agreement + if not AGMT_DN: + log.fatal("Fail to create a replica agreement") + sys.exit(1) + + log.debug("%s created" % AGMT_DN) + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + master2.agreement.create(suffix=DEFAULT_SUFFIX, host=master1.host, port=master1.port, properties=properties) + + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(AGMT_DN) + + # Check replication is working fine + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # clear the tmp directory + master1.clearTmpDir(__file__) + + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + return TopologyMaster1Master2(master1, master2) + + +def test_ticket47462(topology): + """ + Test that AES properly replaces DES during an update/restart, and that + replication also works correctly. + """ + + # + # First set config as if it's an older version. Set DES to use + # libdes-plugin, MMR to depend on DES, delete the existing AES plugin, + # and set a DES password for the replication agreement. + # + # Add an extra attribute to the DES plugin args + # + try: + topology.master1.modify_s(DES_PLUGIN, + [(ldap.MOD_REPLACE, 'nsslapd-pluginEnabled', 'on')]) + except ldap.LDAPError as e: + log.fatal('Failed to enable DES plugin, error: ' + + e.message['desc']) + assert False + + try: + topology.master1.modify_s(DES_PLUGIN, + [(ldap.MOD_ADD, 'nsslapd-pluginarg2', 'description')]) + except ldap.LDAPError as e: + log.fatal('Failed to reset DES plugin, error: ' + + e.message['desc']) + assert False + + try: + topology.master1.modify_s(MMR_PLUGIN, + [(ldap.MOD_DELETE, + 'nsslapd-plugin-depends-on-named', + 'AES')]) + + except ldap.NO_SUCH_ATTRIBUTE: + pass + except ldap.LDAPError as e: + log.fatal('Failed to reset MMR plugin, error: ' + + e.message['desc']) + assert False + + # + # Delete the AES plugin + # + try: + topology.master1.delete_s(AES_PLUGIN) + except ldap.NO_SUCH_OBJECT: + pass + except ldap.LDAPError as e: + log.fatal('Failed to delete AES plugin, error: ' + + e.message['desc']) + assert False + + # restart the server so we must use DES plugin + topology.master1.restart(timeout=10) + + # + # Get the agmt dn, and set the password + # + try: + entry = topology.master1.search_s('cn=config', ldap.SCOPE_SUBTREE, + 'objectclass=nsDS5ReplicationAgreement') + if entry: + agmt_dn = entry[0].dn + log.info('Found agmt dn (%s)' % agmt_dn) + else: + log.fatal('No replication agreements!') + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search for replica credentials: ' + + e.message['desc']) + assert False + + try: + properties = {RA_BINDPW: "password"} + topology.master1.agreement.setProperties(None, agmt_dn, None, + properties) + log.info('Successfully modified replication agreement') + except ValueError: + log.error('Failed to update replica agreement: ' + AGMT_DN) + assert False + + # + # Check replication works with the new DES password + # + try: + topology.master1.add_s(Entry((USER1_DN, + {'objectclass': "top person".split(), + 'sn': 'sn', + 'description': 'DES value to convert', + 'cn': 'test_user'}))) + loop = 0 + ent = None + while loop <= 10: + try: + ent = topology.master2.getEntry(USER1_DN, ldap.SCOPE_BASE, + "(objectclass=*)") + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + if not ent: + log.fatal('Replication test failed fo user1!') + assert False + else: + log.info('Replication test passed') + except ldap.LDAPError as e: + log.fatal('Failed to add test user: ' + e.message['desc']) + assert False + + # + # Add a backend (that has no entries) + # + try: + topology.master1.backend.create("o=empty", {BACKEND_NAME: "empty"}) + except ldap.LDAPError as e: + log.fatal('Failed to create extra/empty backend: ' + e.message['desc']) + assert False + + # + # Run the upgrade... + # + topology.master1.upgrade('online') + topology.master1.restart() + topology.master2.restart() + + # + # Check that the restart converted existing DES credentials + # + try: + entry = topology.master1.search_s('cn=config', ldap.SCOPE_SUBTREE, + 'nsDS5ReplicaCredentials=*') + if entry: + val = entry[0].getValue('nsDS5ReplicaCredentials') + if val.startswith('{AES-'): + log.info('The DES credentials have been converted to AES') + else: + log.fatal('Failed to convert credentials from DES to AES!') + assert False + else: + log.fatal('Failed to find entries with nsDS5ReplicaCredentials') + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search for replica credentials: ' + + e.message['desc']) + assert False + + # + # Check that the AES plugin exists, and has all the attributes listed in + # DES plugin. The attributes might not be in the expected order so check + # all the attributes. + # + try: + entry = topology.master1.search_s(AES_PLUGIN, ldap.SCOPE_BASE, + 'objectclass=*') + if not entry[0].hasValue('nsslapd-pluginarg0', 'description') and \ + not entry[0].hasValue('nsslapd-pluginarg1', 'description') and \ + not entry[0].hasValue('nsslapd-pluginarg2', 'description'): + log.fatal('The AES plugin did not have the DES attribute copied ' + + 'over correctly') + assert False + else: + log.info('The AES plugin was correctly setup') + except ldap.LDAPError as e: + log.fatal('Failed to find AES plugin: ' + e.message['desc']) + assert False + + # + # Check that the MMR plugin was updated + # + try: + entry = topology.master1.search_s(MMR_PLUGIN, ldap.SCOPE_BASE, + 'objectclass=*') + if not entry[0].hasValue('nsslapd-plugin-depends-on-named', 'AES'): + log.fatal('The MMR Plugin was not correctly updated') + assert False + else: + log.info('The MMR plugin was correctly updated') + except ldap.LDAPError as e: + log.fatal('Failed to find AES plugin: ' + e.message['desc']) + assert False + + # + # Check that the DES plugin was correctly updated + # + try: + entry = topology.master1.search_s(DES_PLUGIN, ldap.SCOPE_BASE, + 'objectclass=*') + if not entry[0].hasValue('nsslapd-pluginPath', 'libpbe-plugin'): + log.fatal('The DES Plugin was not correctly updated') + assert False + else: + log.info('The DES plugin was correctly updated') + except ldap.LDAPError as e: + log.fatal('Failed to find AES plugin: ' + e.message['desc']) + assert False + + # + # Check replication one last time + # + try: + topology.master1.add_s(Entry((USER_DN, + {'objectclass': "top person".split(), + 'sn': 'sn', + 'cn': 'test_user'}))) + loop = 0 + ent = None + while loop <= 10: + try: + ent = topology.master2.getEntry(USER_DN, ldap.SCOPE_BASE, + "(objectclass=*)") + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + if not ent: + log.fatal('Replication test failed!') + assert False + else: + log.info('Replication test passed') + except ldap.LDAPError as e: + log.fatal('Failed to add test user: ' + e.message['desc']) + assert False + + # Check the entry + log.info('Entry before running task...') + try: + entry = topology.master1.search_s(USER1_DN, + ldap.SCOPE_BASE, + 'objectclass=*') + if entry: + print(str(entry)) + else: + log.fatal('Failed to find entries') + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search for entries: ' + + e.message['desc']) + assert False + + # + # Test the DES2AES Task on USER1_DN + # + try: + topology.master1.add_s(Entry((DES2AES_TASK_DN, + {'objectclass': ['top', + 'extensibleObject'], + 'suffix': DEFAULT_SUFFIX, + 'cn': 'convert'}))) + except ldap.LDAPError as e: + log.fatal('Failed to add task entry: ' + e.message['desc']) + assert False + + # Wait for task + task_entry = Entry(DES2AES_TASK_DN) + (done, exitCode) = topology.master1.tasks.checkTask(task_entry, True) + if exitCode: + log.fatal("Error: des2aes task exited with %d" % (exitCode)) + assert False + + # Check the entry + try: + entry = topology.master1.search_s(USER1_DN, + ldap.SCOPE_BASE, + 'objectclass=*') + if entry: + val = entry[0].getValue('description') + print(str(entry[0])) + if val.startswith('{AES-'): + log.info('Task: DES credentials have been converted to AES') + else: + log.fatal('Task: Failed to convert credentials from DES to ' + + 'AES! (%s)' % (val)) + assert False + else: + log.fatal('Failed to find entries') + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search for entries: ' + + e.message['desc']) + assert False + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47490_test.py b/dirsrvtests/tests/tickets/ticket47490_test.py new file mode 100644 index 0000000..799e5f6 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47490_test.py @@ -0,0 +1,663 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Nov 7, 2013 + +@author: tbordaz +''' +import os +import sys +import ldap +import time +import logging +import pytest +import re +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation_prefix = None + +TEST_REPL_DN = "cn=test_repl, %s" % SUFFIX +ENTRY_DN = "cn=test_entry, %s" % SUFFIX +MUST_OLD = "(postalAddress $ preferredLocale)" +MUST_NEW = "(postalAddress $ preferredLocale $ telexNumber)" +MAY_OLD = "(postalCode $ street)" +MAY_NEW = "(postalCode $ street $ postOfficeBox)" + + +class TopologyMasterConsumer(object): + def __init__(self, master, consumer): + master.open() + self.master = master + + consumer.open() + self.consumer = consumer + + +def _header(topology, label): + topology.master.log.info("\n\n###############################################") + topology.master.log.info("#######") + topology.master.log.info("####### %s" % label) + topology.master.log.info("#######") + topology.master.log.info("###################################################") + + +def pattern_errorlog(file, log_pattern): + try: + pattern_errorlog.last_pos += 1 + except AttributeError: + pattern_errorlog.last_pos = 0 + + found = None + log.debug("_pattern_errorlog: start at offset %d" % pattern_errorlog.last_pos) + file.seek(pattern_errorlog.last_pos) + + # Use a while true iteration because 'for line in file: hit a + # python bug that break file.tell() + while True: + line = file.readline() + log.debug("_pattern_errorlog: [%d] %s" % (file.tell(), line)) + found = log_pattern.search(line) + if ((line == '') or (found)): + break + + log.debug("_pattern_errorlog: end at offset %d" % file.tell()) + pattern_errorlog.last_pos = file.tell() + return found + + +def _oc_definition(oid_ext, name, must=None, may=None): + oid = "1.2.3.4.5.6.7.8.9.10.%d" % oid_ext + desc = 'To test ticket 47490' + sup = 'person' + if not must: + must = MUST_OLD + if not may: + may = MAY_OLD + + new_oc = "( %s NAME '%s' DESC '%s' SUP %s AUXILIARY MUST %s MAY %s )" % (oid, name, desc, sup, must, may) + return new_oc + + +def add_OC(instance, oid_ext, name): + new_oc = _oc_definition(oid_ext, name) + instance.schema.add_schema('objectClasses', new_oc) + + +def mod_OC(instance, oid_ext, name, old_must=None, old_may=None, new_must=None, new_may=None): + old_oc = _oc_definition(oid_ext, name, old_must, old_may) + new_oc = _oc_definition(oid_ext, name, new_must, new_may) + instance.schema.del_schema('objectClasses', old_oc) + instance.schema.add_schema('objectClasses', new_oc) + + +def support_schema_learning(topology): + """ + with https://fedorahosted.org/389/ticket/47721, the supplier and consumer can learn + schema definitions when a replication occurs. + Before that ticket: replication of the schema fails requiring administrative operation + In the test the schemaCSN (master consumer) differs + + After that ticket: replication of the schema succeeds (after an initial phase of learning) + In the test the schema CSN (master consumer) are in sync + + This function returns True if 47721 is fixed in the current release + False else + """ + ent = topology.consumer.getEntry(DN_CONFIG, ldap.SCOPE_BASE, "(cn=config)", ['nsslapd-versionstring']) + if ent.hasAttr('nsslapd-versionstring'): + val = ent.getValue('nsslapd-versionstring') + version = val.split('/')[1].split('.') # something like ['1', '3', '1', '23', 'final_fix'] + major = int(version[0]) + minor = int(version[1]) + if major > 1: + return True + if minor > 3: + # version is 1.4 or after + return True + if minor == 3: + if version[2].isdigit(): + if int(version[2]) >= 3: + return True + return False + + +def trigger_update(topology): + """ + It triggers an update on the supplier. This will start a replication + session and a schema push + """ + try: + trigger_update.value += 1 + except AttributeError: + trigger_update.value = 1 + replace = [(ldap.MOD_REPLACE, 'telephonenumber', str(trigger_update.value))] + topology.master.modify_s(ENTRY_DN, replace) + + # wait 10 seconds that the update is replicated + loop = 0 + while loop <= 10: + try: + ent = topology.consumer.getEntry(ENTRY_DN, ldap.SCOPE_BASE, "(objectclass=*)", ['telephonenumber']) + val = ent.telephonenumber or "0" + if int(val) == trigger_update.value: + return + # the expected value is not yet replicated. try again + time.sleep(1) + loop += 1 + log.debug("trigger_update: receive %s (expected %d)" % (val, trigger_update.value)) + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + + +def trigger_schema_push(topology): + ''' + Trigger update to create a replication session. + In case of 47721 is fixed and the replica needs to learn the missing definition, then + the first replication session learn the definition and the second replication session + push the schema (and the schemaCSN. + This is why there is two updates and replica agreement is stopped/start (to create a second session) + ''' + agreements = topology.master.agreement.list(suffix=SUFFIX, consumer_host=topology.consumer.host, consumer_port=topology.consumer.port) + assert(len(agreements) == 1) + ra = agreements[0] + trigger_update(topology) + topology.master.agreement.pause(ra.dn) + topology.master.agreement.resume(ra.dn) + trigger_update(topology) + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to create a replicated topology for the 'module'. + The replicated topology is MASTER -> Consumer. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + master = DirSrv(verbose=False) + consumer = DirSrv(verbose=False) + + # Args for the master instance + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_master = args_instance.copy() + master.allocate(args_master) + + # Args for the consumer instance + args_instance[SER_HOST] = HOST_CONSUMER_1 + args_instance[SER_PORT] = PORT_CONSUMER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_CONSUMER_1 + args_consumer = args_instance.copy() + consumer.allocate(args_consumer) + + # Get the status of the instance + instance_master = master.exists() + instance_consumer = consumer.exists() + + # Remove all the instances + if instance_master: + master.delete() + if instance_consumer: + consumer.delete() + + # Create the instances + master.create() + master.open() + consumer.create() + consumer.open() + + # + # Now prepare the Master-Consumer topology + # + # First Enable replication + master.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + consumer.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_CONSUMER) + + # Initialize the supplier->consumer + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + repl_agreement = master.agreement.create(suffix=SUFFIX, host=consumer.host, port=consumer.port, properties=properties) + + if not repl_agreement: + log.fatal("Fail to create a replica agreement") + sys.exit(1) + + log.debug("%s created" % repl_agreement) + master.agreement.init(SUFFIX, HOST_CONSUMER_1, PORT_CONSUMER_1) + master.waitForReplInit(repl_agreement) + + # Check replication is working fine + if master.testReplication(DEFAULT_SUFFIX, consumer): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + master.delete() + consumer.delete() + request.addfinalizer(fin) + # + # Here we have two instances master and consumer + # with replication working. + return TopologyMasterConsumer(master, consumer) + + +def test_ticket47490_init(topology): + """ + Initialize the test environment + """ + log.debug("test_ticket47490_init topology %r (master %r, consumer %r" % (topology, topology.master, topology.consumer)) + # the test case will check if a warning message is logged in the + # error log of the supplier + topology.master.errorlog_file = open(topology.master.errlog, "r") + + # This entry will be used to trigger attempt of schema push + topology.master.add_s(Entry((ENTRY_DN, { + 'objectclass': "top person".split(), + 'sn': 'test_entry', + 'cn': 'test_entry'}))) + + +def test_ticket47490_one(topology): + """ + Summary: Extra OC Schema is pushed - no error + + If supplier schema is a superset (one extra OC) of consumer schema, then + schema is pushed and there is no message in the error log + State at startup: + - supplier default schema + - consumer default schema + Final state + - supplier +masterNewOCA + - consumer +masterNewOCA + + """ + _header(topology, "Extra OC Schema is pushed - no error") + + log.debug("test_ticket47490_one topology %r (master %r, consumer %r" % (topology, topology.master, topology.consumer)) + # update the schema of the supplier so that it is a superset of + # consumer. Schema should be pushed + add_OC(topology.master, 2, 'masterNewOCA') + + trigger_schema_push(topology) + master_schema_csn = topology.master.schema.get_schema_csn() + consumer_schema_csn = topology.consumer.schema.get_schema_csn() + + # Check the schemaCSN was updated on the consumer + log.debug("test_ticket47490_one master_schema_csn=%s", master_schema_csn) + log.debug("ctest_ticket47490_one onsumer_schema_csn=%s", consumer_schema_csn) + assert master_schema_csn == consumer_schema_csn + + # Check the error log of the supplier does not contain an error + regex = re.compile("must not be overwritten \(set replication log for additional info\)") + res = pattern_errorlog(topology.master.errorlog_file, regex) + if res is not None: + assert False + + +def test_ticket47490_two(topology): + """ + Summary: Extra OC Schema is pushed - (ticket 47721 allows to learn missing def) + + If consumer schema is a superset (one extra OC) of supplier schema, then + schema is pushed and there is a message in the error log + State at startup + - supplier +masterNewOCA + - consumer +masterNewOCA + Final state + - supplier +masterNewOCA +masterNewOCB + - consumer +masterNewOCA +consumerNewOCA + + """ + + _header(topology, "Extra OC Schema is pushed - (ticket 47721 allows to learn missing def)") + + # add this OC on consumer. Supplier will no push the schema + add_OC(topology.consumer, 1, 'consumerNewOCA') + + # add a new OC on the supplier so that its nsSchemaCSN is larger than the consumer (wait 2s) + time.sleep(2) + add_OC(topology.master, 3, 'masterNewOCB') + + # now push the scheam + trigger_schema_push(topology) + master_schema_csn = topology.master.schema.get_schema_csn() + consumer_schema_csn = topology.consumer.schema.get_schema_csn() + + # Check the schemaCSN was NOT updated on the consumer + # with 47721, supplier learns the missing definition + log.debug("test_ticket47490_two master_schema_csn=%s", master_schema_csn) + log.debug("test_ticket47490_two consumer_schema_csn=%s", consumer_schema_csn) + if support_schema_learning(topology): + assert master_schema_csn == consumer_schema_csn + else: + assert master_schema_csn != consumer_schema_csn + + # Check the error log of the supplier does not contain an error + # This message may happen during the learning phase + regex = re.compile("must not be overwritten \(set replication log for additional info\)") + res = pattern_errorlog(topology.master.errorlog_file, regex) + + +def test_ticket47490_three(topology): + """ + Summary: Extra OC Schema is pushed - no error + + If supplier schema is again a superset (one extra OC), then + schema is pushed and there is no message in the error log + State at startup + - supplier +masterNewOCA +masterNewOCB + - consumer +masterNewOCA +consumerNewOCA + Final state + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA + + """ + _header(topology, "Extra OC Schema is pushed - no error") + + # Do an upate to trigger the schema push attempt + # add this OC on consumer. Supplier will no push the schema + add_OC(topology.master, 1, 'consumerNewOCA') + + # now push the scheam + trigger_schema_push(topology) + master_schema_csn = topology.master.schema.get_schema_csn() + consumer_schema_csn = topology.consumer.schema.get_schema_csn() + + # Check the schemaCSN was NOT updated on the consumer + log.debug("test_ticket47490_three master_schema_csn=%s", master_schema_csn) + log.debug("test_ticket47490_three consumer_schema_csn=%s", consumer_schema_csn) + assert master_schema_csn == consumer_schema_csn + + # Check the error log of the supplier does not contain an error + regex = re.compile("must not be overwritten \(set replication log for additional info\)") + res = pattern_errorlog(topology.master.errorlog_file, regex) + if res is not None: + assert False + + +def test_ticket47490_four(topology): + """ + Summary: Same OC - extra MUST: Schema is pushed - no error + + If supplier schema is again a superset (OC with more MUST), then + schema is pushed and there is no message in the error log + State at startup + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA + Final state + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA + +must=telexnumber + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA + +must=telexnumber + + """ + _header(topology, "Same OC - extra MUST: Schema is pushed - no error") + + mod_OC(topology.master, 2, 'masterNewOCA', old_must=MUST_OLD, new_must=MUST_NEW, old_may=MAY_OLD, new_may=MAY_OLD) + + trigger_schema_push(topology) + master_schema_csn = topology.master.schema.get_schema_csn() + consumer_schema_csn = topology.consumer.schema.get_schema_csn() + + # Check the schemaCSN was updated on the consumer + log.debug("test_ticket47490_four master_schema_csn=%s", master_schema_csn) + log.debug("ctest_ticket47490_four onsumer_schema_csn=%s", consumer_schema_csn) + assert master_schema_csn == consumer_schema_csn + + # Check the error log of the supplier does not contain an error + regex = re.compile("must not be overwritten \(set replication log for additional info\)") + res = pattern_errorlog(topology.master.errorlog_file, regex) + if res is not None: + assert False + + +def test_ticket47490_five(topology): + """ + Summary: Same OC - extra MUST: Schema is pushed - (fix for 47721) + + If consumer schema is a superset (OC with more MUST), then + schema is pushed (fix for 47721) and there is a message in the error log + State at startup + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA + +must=telexnumber + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA + +must=telexnumber + Final state + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA + +must=telexnumber +must=telexnumber + + Note: replication log is enabled to get more details + """ + _header(topology, "Same OC - extra MUST: Schema is pushed - (fix for 47721)") + + # get more detail why it fails + topology.master.enableReplLogging() + + # add telenumber to 'consumerNewOCA' on the consumer + mod_OC(topology.consumer, 1, 'consumerNewOCA', old_must=MUST_OLD, new_must=MUST_NEW, old_may=MAY_OLD, new_may=MAY_OLD) + # add a new OC on the supplier so that its nsSchemaCSN is larger than the consumer (wait 2s) + time.sleep(2) + add_OC(topology.master, 4, 'masterNewOCC') + + trigger_schema_push(topology) + master_schema_csn = topology.master.schema.get_schema_csn() + consumer_schema_csn = topology.consumer.schema.get_schema_csn() + + # Check the schemaCSN was NOT updated on the consumer + # with 47721, supplier learns the missing definition + log.debug("test_ticket47490_five master_schema_csn=%s", master_schema_csn) + log.debug("ctest_ticket47490_five onsumer_schema_csn=%s", consumer_schema_csn) + if support_schema_learning(topology): + assert master_schema_csn == consumer_schema_csn + else: + assert master_schema_csn != consumer_schema_csn + + # Check the error log of the supplier does not contain an error + # This message may happen during the learning phase + regex = re.compile("must not be overwritten \(set replication log for additional info\)") + res = pattern_errorlog(topology.master.errorlog_file, regex) + + +def test_ticket47490_six(topology): + """ + Summary: Same OC - extra MUST: Schema is pushed - no error + + If supplier schema is again a superset (OC with more MUST), then + schema is pushed and there is no message in the error log + State at startup + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA + +must=telexnumber +must=telexnumber + Final state + + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + + Note: replication log is enabled to get more details + """ + _header(topology, "Same OC - extra MUST: Schema is pushed - no error") + + # add telenumber to 'consumerNewOCA' on the consumer + mod_OC(topology.master, 1, 'consumerNewOCA', old_must=MUST_OLD, new_must=MUST_NEW, old_may=MAY_OLD, new_may=MAY_OLD) + + trigger_schema_push(topology) + master_schema_csn = topology.master.schema.get_schema_csn() + consumer_schema_csn = topology.consumer.schema.get_schema_csn() + + # Check the schemaCSN was NOT updated on the consumer + log.debug("test_ticket47490_six master_schema_csn=%s", master_schema_csn) + log.debug("ctest_ticket47490_six onsumer_schema_csn=%s", consumer_schema_csn) + assert master_schema_csn == consumer_schema_csn + + # Check the error log of the supplier does not contain an error + # This message may happen during the learning phase + regex = re.compile("must not be overwritten \(set replication log for additional info\)") + res = pattern_errorlog(topology.master.errorlog_file, regex) + if res is not None: + assert False + + +def test_ticket47490_seven(topology): + """ + Summary: Same OC - extra MAY: Schema is pushed - no error + + If supplier schema is again a superset (OC with more MAY), then + schema is pushed and there is no message in the error log + State at startup + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + Final stat + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + +may=postOfficeBox + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + +may=postOfficeBox + """ + _header(topology, "Same OC - extra MAY: Schema is pushed - no error") + + mod_OC(topology.master, 2, 'masterNewOCA', old_must=MUST_NEW, new_must=MUST_NEW, old_may=MAY_OLD, new_may=MAY_NEW) + + trigger_schema_push(topology) + master_schema_csn = topology.master.schema.get_schema_csn() + consumer_schema_csn = topology.consumer.schema.get_schema_csn() + + # Check the schemaCSN was updated on the consumer + log.debug("test_ticket47490_seven master_schema_csn=%s", master_schema_csn) + log.debug("ctest_ticket47490_seven consumer_schema_csn=%s", consumer_schema_csn) + assert master_schema_csn == consumer_schema_csn + + # Check the error log of the supplier does not contain an error + regex = re.compile("must not be overwritten \(set replication log for additional info\)") + res = pattern_errorlog(topology.master.errorlog_file, regex) + if res is not None: + assert False + + +def test_ticket47490_eight(topology): + """ + Summary: Same OC - extra MAY: Schema is pushed (fix for 47721) + + If consumer schema is a superset (OC with more MAY), then + schema is pushed (fix for 47721) and there is message in the error log + State at startup + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + +may=postOfficeBox + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + +may=postOfficeBox + Final state + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + +may=postOfficeBox +may=postOfficeBox + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + +may=postOfficeBox +may=postOfficeBox + """ + _header(topology, "Same OC - extra MAY: Schema is pushed (fix for 47721)") + + mod_OC(topology.consumer, 1, 'consumerNewOCA', old_must=MUST_NEW, new_must=MUST_NEW, old_may=MAY_OLD, new_may=MAY_NEW) + + # modify OC on the supplier so that its nsSchemaCSN is larger than the consumer (wait 2s) + time.sleep(2) + mod_OC(topology.master, 4, 'masterNewOCC', old_must=MUST_OLD, new_must=MUST_OLD, old_may=MAY_OLD, new_may=MAY_NEW) + + trigger_schema_push(topology) + master_schema_csn = topology.master.schema.get_schema_csn() + consumer_schema_csn = topology.consumer.schema.get_schema_csn() + + # Check the schemaCSN was not updated on the consumer + # with 47721, supplier learns the missing definition + log.debug("test_ticket47490_eight master_schema_csn=%s", master_schema_csn) + log.debug("ctest_ticket47490_eight onsumer_schema_csn=%s", consumer_schema_csn) + if support_schema_learning(topology): + assert master_schema_csn == consumer_schema_csn + else: + assert master_schema_csn != consumer_schema_csn + + # Check the error log of the supplier does not contain an error + # This message may happen during the learning phase + regex = re.compile("must not be overwritten \(set replication log for additional info\)") + res = pattern_errorlog(topology.master.errorlog_file, regex) + + +def test_ticket47490_nine(topology): + """ + Summary: Same OC - extra MAY: Schema is pushed - no error + + If consumer schema is a superset (OC with more MAY), then + schema is not pushed and there is message in the error log + State at startup + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + +may=postOfficeBox +may=postOfficeBox + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + +may=postOfficeBox +may=postOfficeBox + + Final state + + - supplier +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + +may=postOfficeBox +may=postOfficeBox +may=postOfficeBox + - consumer +masterNewOCA +masterNewOCB +consumerNewOCA +masterNewOCC + +must=telexnumber +must=telexnumber + +may=postOfficeBox +may=postOfficeBox +may=postOfficeBox + """ + _header(topology, "Same OC - extra MAY: Schema is pushed - no error") + + mod_OC(topology.master, 1, 'consumerNewOCA', old_must=MUST_NEW, new_must=MUST_NEW, old_may=MAY_OLD, new_may=MAY_NEW) + + trigger_schema_push(topology) + master_schema_csn = topology.master.schema.get_schema_csn() + consumer_schema_csn = topology.consumer.schema.get_schema_csn() + + # Check the schemaCSN was updated on the consumer + log.debug("test_ticket47490_nine master_schema_csn=%s", master_schema_csn) + log.debug("ctest_ticket47490_nine onsumer_schema_csn=%s", consumer_schema_csn) + assert master_schema_csn == consumer_schema_csn + + # Check the error log of the supplier does not contain an error + regex = re.compile("must not be overwritten \(set replication log for additional info\)") + res = pattern_errorlog(topology.master.errorlog_file, regex) + if res is not None: + assert False + + log.info('Testcase PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket47536_test.py b/dirsrvtests/tests/tickets/ticket47536_test.py new file mode 100644 index 0000000..cf20746 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47536_test.py @@ -0,0 +1,523 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import shlex +import subprocess +import ldap +import logging +import pytest +import base64 +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +CONFIG_DN = 'cn=config' +ENCRYPTION_DN = 'cn=encryption,%s' % CONFIG_DN +RSA = 'RSA' +RSA_DN = 'cn=%s,%s' % (RSA, ENCRYPTION_DN) +ISSUER = 'cn=CAcert' +CACERT = 'CAcertificate' +M1SERVERCERT = 'Server-Cert1' +M2SERVERCERT = 'Server-Cert2' +M1LDAPSPORT = '41636' +M2LDAPSPORT = '42636' + + +class TopologyReplication(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + # Creating master 1... + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + master2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # Delete each instance in the end + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: r'meTo_%s:%s' % (master2.host, master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + global m1_m2_agmt + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: r'meTo_%s:%s' % (master1.host, master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + global m2_m1_agmt + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(2) + + global M1SUBJECT + M1SUBJECT = 'CN=%s,OU=389 Directory Server' % (master1.host) + global M2SUBJECT + M2SUBJECT = 'CN=%s,OU=390 Directory Server' % (master2.host) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + return TopologyReplication(master1, master2) + + +@pytest.fixture(scope="module") + + +def add_entry(server, name, rdntmpl, start, num): + log.info("\n######################### Adding %d entries to %s ######################\n" % (num, name)) + + for i in range(num): + ii = start + i + dn = '%s%d,%s' % (rdntmpl, ii, DEFAULT_SUFFIX) + server.add_s(Entry((dn, {'objectclass': 'top person extensibleObject'.split(), + 'uid': '%s%d' % (rdntmpl, ii), + 'cn': '%s user%d' % (name, ii), + 'sn': 'user%d' % (ii)}))) + + +def enable_ssl(server, ldapsport, mycert): + log.info("\n######################### Enabling SSL LDAPSPORT %s ######################\n" % ldapsport) + server.simple_bind_s(DN_DM, PASSWORD) + server.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3', 'off'), + (ldap.MOD_REPLACE, 'nsTLS1', 'on'), + (ldap.MOD_REPLACE, 'nsSSLClientAuth', 'allowed'), + (ldap.MOD_REPLACE, 'nsSSL3Ciphers', '+all')]) + + server.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-security', 'on'), + (ldap.MOD_REPLACE, 'nsslapd-ssl-check-hostname', 'off'), + (ldap.MOD_REPLACE, 'nsslapd-secureport', ldapsport)]) + + server.add_s(Entry((RSA_DN, {'objectclass': "top nsEncryptionModule".split(), + 'cn': RSA, + 'nsSSLPersonalitySSL': mycert, + 'nsSSLToken': 'internal (software)', + 'nsSSLActivation': 'on'}))) + + +def check_pems(confdir, mycacert, myservercert, myserverkey, notexist): + log.info("\n######################### Check PEM files (%s, %s, %s)%s in %s ######################\n" + % (mycacert, myservercert, myserverkey, notexist, confdir)) + global cacert + cacert = '%s/%s.pem' % (confdir, mycacert) + if os.path.isfile(cacert): + if notexist == "": + log.info('%s is successfully generated.' % cacert) + else: + log.info('%s is incorrecly generated.' % cacert) + assert False + else: + if notexist == "": + log.fatal('%s is not generated.' % cacert) + assert False + else: + log.info('%s is correctly not generated.' % cacert) + servercert = '%s/%s.pem' % (confdir, myservercert) + if os.path.isfile(servercert): + if notexist == "": + log.info('%s is successfully generated.' % servercert) + else: + log.info('%s is incorrecly generated.' % servercert) + assert False + else: + if notexist == "": + log.fatal('%s was not generated.' % servercert) + assert False + else: + log.info('%s is correctly not generated.' % servercert) + serverkey = '%s/%s.pem' % (confdir, myserverkey) + if os.path.isfile(serverkey): + if notexist == "": + log.info('%s is successfully generated.' % serverkey) + else: + log.info('%s is incorrectly generated.' % serverkey) + assert False + else: + if notexist == "": + log.fatal('%s was not generated.' % serverkey) + assert False + else: + log.info('%s is correctly not generated.' % serverkey) + + +def doAndPrintIt(cmdline): + proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + log.info(" OUT:") + while True: + l = proc.stdout.readline() + if l == "": + break + log.info(" %s" % l) + log.info(" ERR:") + while True: + l = proc.stderr.readline() + if l == "" or l == "\n": + break + log.info(" <%s>" % l) + assert False + + +def create_keys_certs(topology): + log.info("\n######################### Creating SSL Keys and Certs ######################\n") + + global m1confdir + m1confdir = topology.master1.confdir + global m2confdir + m2confdir = topology.master2.confdir + + log.info("##### shutdown master1") + topology.master1.stop(timeout=10) + + log.info("##### Creating a password file") + pwdfile = '%s/pwdfile.txt' % (m1confdir) + os.system('rm -f %s' % pwdfile) + opasswd = os.popen("(ps -ef ; w ) | sha1sum | awk '{print $1}'", "r") + passwd = opasswd.readline() + pwdfd = open(pwdfile, "w") + pwdfd.write(passwd) + pwdfd.close() + + log.info("##### create the pin file") + m1pinfile = '%s/pin.txt' % (m1confdir) + m2pinfile = '%s/pin.txt' % (m2confdir) + os.system('rm -f %s' % m1pinfile) + os.system('rm -f %s' % m2pinfile) + pintxt = 'Internal (Software) Token:%s' % passwd + pinfd = open(m1pinfile, "w") + pinfd.write(pintxt) + pinfd.close() + os.system('chmod 400 %s' % m1pinfile) + + log.info("##### Creating a noise file") + noisefile = '%s/noise.txt' % (m1confdir) + noise = os.popen("(w ; ps -ef ; date ) | sha1sum | awk '{print $1}'", "r") + noisewdfd = open(noisefile, "w") + noisewdfd.write(noise.readline()) + noisewdfd.close() + time.sleep(1) + + cmdline = ['certutil', '-N', '-d', m1confdir, '-f', pwdfile] + log.info("##### Create key3.db and cert8.db database (master1): %s" % cmdline) + doAndPrintIt(cmdline) + + cmdline = ['certutil', '-G', '-d', m1confdir, '-z', noisefile, '-f', pwdfile] + log.info("##### Creating encryption key for CA (master1): %s" % cmdline) + #os.system('certutil -G -d %s -z %s -f %s' % (m1confdir, noisefile, pwdfile)) + doAndPrintIt(cmdline) + + time.sleep(2) + + log.info("##### Creating self-signed CA certificate (master1) -- nickname %s" % CACERT) + os.system('( echo y ; echo ; echo y ) | certutil -S -n "%s" -s "%s" -x -t "CT,," -m 1000 -v 120 -d %s -z %s -f %s -2' % (CACERT, ISSUER, m1confdir, noisefile, pwdfile)) + + global M1SUBJECT + cmdline = ['certutil', '-S', '-n', M1SERVERCERT, '-s', M1SUBJECT, '-c', CACERT, '-t', ',,', '-m', '1001', '-v', '120', '-d', m1confdir, '-z', noisefile, '-f', pwdfile] + log.info("##### Creating Server certificate -- nickname %s: %s" % (M1SERVERCERT, cmdline)) + doAndPrintIt(cmdline) + + time.sleep(2) + + global M2SUBJECT + cmdline = ['certutil', '-S', '-n', M2SERVERCERT, '-s', M2SUBJECT, '-c', CACERT, '-t', ',,', '-m', '1002', '-v', '120', '-d', m1confdir, '-z', noisefile, '-f', pwdfile] + log.info("##### Creating Server certificate -- nickname %s: %s" % (M2SERVERCERT, cmdline)) + doAndPrintIt(cmdline) + + time.sleep(2) + + log.info("##### start master1") + topology.master1.start(timeout=10) + + log.info("##### enable SSL in master1 with all ciphers") + enable_ssl(topology.master1, M1LDAPSPORT, M1SERVERCERT) + + cmdline = ['certutil', '-L', '-d', m1confdir] + log.info("##### Check the cert db: %s" % cmdline) + doAndPrintIt(cmdline) + + log.info("##### restart master1") + topology.master1.restart(timeout=10) + + log.info("##### Check PEM files of master1 (before setting nsslapd-extract-pemfiles") + check_pems(m1confdir, CACERT, M1SERVERCERT, M1SERVERCERT + '-Key', " not") + + log.info("##### Set on to nsslapd-extract-pemfiles") + topology.master1.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-extract-pemfiles', 'on')]) + + log.info("##### restart master1") + topology.master1.restart(timeout=10) + + log.info("##### Check PEM files of master1 (after setting nsslapd-extract-pemfiles") + check_pems(m1confdir, CACERT, M1SERVERCERT, M1SERVERCERT + '-Key', "") + + global mytmp + mytmp = '/tmp' + m2pk12file = '%s/%s.pk12' % (mytmp, M2SERVERCERT) + cmd = 'pk12util -o %s -n "%s" -d %s -w %s -k %s' % (m2pk12file, M2SERVERCERT, m1confdir, pwdfile, pwdfile) + log.info("##### Extract PK12 file for master2: %s" % cmd) + os.system(cmd) + + log.info("##### Check PK12 files") + if os.path.isfile(m2pk12file): + log.info('%s is successfully extracted.' % m2pk12file) + else: + log.fatal('%s was not extracted.' % m2pk12file) + assert False + + log.info("##### stop master2") + topology.master2.stop(timeout=10) + + log.info("##### Initialize Cert DB for master2") + cmdline = ['certutil', '-N', '-d', m2confdir, '-f', pwdfile] + log.info("##### Create key3.db and cert8.db database (master2): %s" % cmdline) + doAndPrintIt(cmdline) + + log.info("##### Import certs to master2") + log.info('Importing %s' % CACERT) + global cacert + os.system('certutil -A -n "%s" -t "CT,," -f %s -d %s -a -i %s' % (CACERT, pwdfile, m2confdir, cacert)) + cmd = 'pk12util -i %s -n "%s" -d %s -w %s -k %s' % (m2pk12file, M2SERVERCERT, m2confdir, pwdfile, pwdfile) + log.info('##### Importing %s to master2: %s' % (M2SERVERCERT, cmd)) + os.system(cmd) + log.info('copy %s to %s' % (m1pinfile, m2pinfile)) + os.system('cp %s %s' % (m1pinfile, m2pinfile)) + os.system('chmod 400 %s' % m2pinfile) + + log.info("##### start master2") + topology.master2.start(timeout=10) + + log.info("##### enable SSL in master2 with all ciphers") + enable_ssl(topology.master2, M2LDAPSPORT, M2SERVERCERT) + + log.info("##### restart master2") + topology.master2.restart(timeout=10) + + log.info("##### Check PEM files of master2 (before setting nsslapd-extract-pemfiles") + check_pems(m2confdir, CACERT, M2SERVERCERT, M2SERVERCERT + '-Key', " not") + + log.info("##### Set on to nsslapd-extract-pemfiles") + topology.master2.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-extract-pemfiles', 'on')]) + + log.info("##### restart master2") + topology.master2.restart(timeout=10) + + log.info("##### Check PEM files of master2 (after setting nsslapd-extract-pemfiles") + check_pems(m2confdir, CACERT, M2SERVERCERT, M2SERVERCERT + '-Key', "") + + log.info("##### restart master1") + topology.master1.restart(timeout=10) + + + log.info("\n######################### Creating SSL Keys and Certs Done ######################\n") + + +def config_tls_agreements(topology): + log.info("######################### Configure SSL/TLS agreements ######################") + log.info("######################## master1 -- startTLS -> master2 #####################") + log.info("##################### master1 <- tls_clientAuth -- master2 ##################") + + log.info("##### Update the agreement of master1") + global m1_m2_agmt + topology.master1.modify_s(m1_m2_agmt, [(ldap.MOD_REPLACE, 'nsDS5ReplicaTransportInfo', 'TLS')]) + + log.info("##### Add the cert to the repl manager on master1") + global mytmp + global m2confdir + m2servercert = '%s/%s.pem' % (m2confdir, M2SERVERCERT) + m2sc = open(m2servercert, "r") + m2servercertstr = '' + for l in m2sc.readlines(): + if ((l == "") or l.startswith('This file is auto-generated') or + l.startswith('Do not edit') or l.startswith('Issuer:') or + l.startswith('Subject:') or l.startswith('-----')): + continue + m2servercertstr = "%s%s" % (m2servercertstr, l.rstrip()) + m2sc.close() + + log.info('##### master2 Server Cert in base64 format: %s' % m2servercertstr) + + replmgr = defaultProperties[REPLICATION_BIND_DN] + rentry = topology.master1.search_s(replmgr, ldap.SCOPE_BASE, 'objectclass=*') + log.info('##### Replication manager on master1: %s' % replmgr) + oc = 'ObjectClass' + log.info(' %s:' % oc) + if rentry: + for val in rentry[0].getValues(oc): + log.info(' : %s' % val) + topology.master1.modify_s(replmgr, [(ldap.MOD_ADD, oc, 'extensibleObject')]) + + global M2SUBJECT + topology.master1.modify_s(replmgr, [(ldap.MOD_ADD, 'userCertificate;binary', base64.b64decode(m2servercertstr)), + (ldap.MOD_ADD, 'description', M2SUBJECT)]) + + log.info("##### Modify the certmap.conf on master1") + m1certmap = '%s/certmap.conf' % (m1confdir) + os.system('chmod 660 %s' % m1certmap) + m1cm = open(m1certmap, "w") + m1cm.write('certmap Example %s\n' % ISSUER) + m1cm.write('Example:DNComps cn\n') + m1cm.write('Example:FilterComps\n') + m1cm.write('Example:verifycert on\n') + m1cm.write('Example:CmapLdapAttr description') + m1cm.close() + os.system('chmod 440 %s' % m1certmap) + + log.info("##### Update the agreement of master2") + global m2_m1_agmt + topology.master2.modify_s(m2_m1_agmt, [(ldap.MOD_REPLACE, 'nsDS5ReplicaTransportInfo', 'TLS'), + (ldap.MOD_REPLACE, 'nsDS5ReplicaBindMethod', 'SSLCLIENTAUTH')]) + + topology.master1.stop(10) + topology.master2.stop(10) + topology.master1.start(10) + topology.master2.start(10) + + log.info("\n######################### Configure SSL/TLS agreements Done ######################\n") + + +def relocate_pem_files(topology): + log.info("######################### Relocate PEM files on master1 ######################") + mycacert = 'MyCA' + topology.master1.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'CACertExtractFile', mycacert)]) + myservercert = 'MyServerCert1' + myserverkey = 'MyServerKey1' + topology.master1.modify_s(RSA_DN, [(ldap.MOD_REPLACE, 'ServerCertExtractFile', myservercert), + (ldap.MOD_REPLACE, 'ServerKeyExtractFile', myserverkey)]) + log.info("##### restart master1") + topology.master1.restart(timeout=10) + check_pems(m1confdir, mycacert, myservercert, myserverkey, "") + + +def test_ticket47536(topology): + """ + Set up 2way MMR: + master_1 ----- startTLS -----> master_2 + master_1 <-- TLS_clientAuth -- master_2 + + Check CA cert, Server-Cert and Key are retrieved as PEM from cert db + when the server is started. First, the file names are not specified + and the default names derived from the cert nicknames. Next, the + file names are specified in the encryption config entries. + + Each time add 5 entries to master 1 and 2 and check they are replicated. + """ + log.info("Ticket 47536 - Allow usage of OpenLDAP libraries that don't use NSS for crypto") + + create_keys_certs(topology) + config_tls_agreements(topology) + + add_entry(topology.master1, 'master1', 'uid=m1user', 0, 5) + add_entry(topology.master2, 'master2', 'uid=m2user', 0, 5) + + time.sleep(1) + + log.info('##### Searching for entries on master1...') + entries = topology.master1.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*)') + assert 10 == len(entries) + + log.info('##### Searching for entries on master2...') + entries = topology.master2.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*)') + assert 10 == len(entries) + + relocate_pem_files(topology) + + add_entry(topology.master1, 'master1', 'uid=m1user', 10, 5) + add_entry(topology.master2, 'master2', 'uid=m2user', 10, 5) + + time.sleep(10) + + log.info('##### Searching for entries on master1...') + entries = topology.master1.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*)') + assert 20 == len(entries) + + log.info('##### Searching for entries on master2...') + entries = topology.master2.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*)') + assert 20 == len(entries) + + db2ldifpl = '%s/sbin/db2ldif.pl' % topology.master1.prefix + cmdline = [db2ldifpl, '-n', 'userRoot', '-Z', SERVERID_MASTER_1, '-D', DN_DM, '-w', PASSWORD] + log.info("##### db2ldif.pl -- %s" % (cmdline)) + doAndPrintIt(cmdline) + + log.info("Ticket 47536 - PASSED") + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47553_test.py b/dirsrvtests/tests/tickets/ticket47553_test.py new file mode 100644 index 0000000..84d462d --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47553_test.py @@ -0,0 +1,166 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +CONTAINER_1_OU = 'test_ou_1' +CONTAINER_2_OU = 'test_ou_2' +CONTAINER_1 = 'ou=%s,dc=example,dc=com' % CONTAINER_1_OU +CONTAINER_2 = 'ou=%s,dc=example,dc=com' % CONTAINER_2_OU +USER_CN = 'test_user' +USER_PWD = 'Secret123' +USER = 'cn=%s,%s' % (USER_CN, CONTAINER_1) + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +@pytest.fixture(scope="module") +def env_setup(topology): + """Adds two containers, one user and two ACI rules""" + + try: + log.info("Add a container: %s" % CONTAINER_1) + topology.standalone.add_s(Entry((CONTAINER_1, + {'objectclass': 'top', + 'objectclass': 'organizationalunit', + 'ou': CONTAINER_1_OU, + }))) + + log.info("Add a container: %s" % CONTAINER_2) + topology.standalone.add_s(Entry((CONTAINER_2, + {'objectclass': 'top', + 'objectclass': 'organizationalunit', + 'ou': CONTAINER_2_OU, + }))) + + log.info("Add a user: %s" % USER) + topology.standalone.add_s(Entry((USER, + {'objectclass': 'top person'.split(), + 'cn': USER_CN, + 'sn': USER_CN, + 'userpassword': USER_PWD + }))) + except ldap.LDAPError as e: + log.error('Failed to add object to database: %s' % e.message['desc']) + assert False + + ACI_TARGET = '(targetattr="*")' + ACI_ALLOW = '(version 3.0; acl "All rights for %s"; allow (all) ' % USER + ACI_SUBJECT = 'userdn="ldap:///%s";)' % USER + ACI_BODY = ACI_TARGET + ACI_ALLOW + ACI_SUBJECT + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + + try: + log.info("Add an ACI 'allow (all)' by %s to the %s" % (USER, + CONTAINER_1)) + topology.standalone.modify_s(CONTAINER_1, mod) + + log.info("Add an ACI 'allow (all)' by %s to the %s" % (USER, + CONTAINER_2)) + topology.standalone.modify_s(CONTAINER_2, mod) + except ldap.LDAPError as e: + log.fatal('Failed to add ACI: error (%s)' % (e.message['desc'])) + assert False + + +def test_ticket47553(topology, env_setup): + """Tests, that MODRDN operation is allowed, + if user has ACI right '(all)' under superior entries, + but doesn't have '(modrdn)' + """ + + log.info("Bind as %s" % USER) + try: + topology.standalone.simple_bind_s(USER, USER_PWD) + except ldap.LDAPError as e: + log.error('Bind failed for %s, error %s' % (USER, e.message['desc'])) + assert False + + log.info("User MODRDN operation from %s to %s" % (CONTAINER_1, + CONTAINER_2)) + try: + topology.standalone.rename_s(USER, "cn=%s" % USER_CN, + newsuperior=CONTAINER_2, delold=1) + except ldap.LDAPError as e: + log.error('MODRDN failed for %s, error %s' % (USER, e.message['desc'])) + assert False + + try: + log.info("Check there is no user in %s" % CONTAINER_1) + entries = topology.standalone.search_s(CONTAINER_1, + ldap.SCOPE_ONELEVEL, + 'cn=%s' % USER_CN) + assert not entries + + log.info("Check there is our user in %s" % CONTAINER_2) + entries = topology.standalone.search_s(CONTAINER_2, + ldap.SCOPE_ONELEVEL, + 'cn=%s' % USER_CN) + assert entries + except ldap.LDAPError as e: + log.fatal('Search failed, error: ' + e.message['desc']) + assert False + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + # -v for additional verbose + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s -v %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47560_test.py b/dirsrvtests/tests/tickets/ticket47560_test.py new file mode 100644 index 0000000..4354b38 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47560_test.py @@ -0,0 +1,238 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47560(topology): + """ + This test case does the following: + SETUP + - Create entry cn=group,SUFFIX + - Create entry cn=member,SUFFIX + - Update 'cn=member,SUFFIX' to add "memberOf: cn=group,SUFFIX" + - Enable Memberof Plugins + + # Here the cn=member entry has a 'memberOf' but + # cn=group entry does not contain 'cn=member' in its member + + TEST CASE + - start the fixupmemberof task + - read the cn=member entry + - check 'memberOf is now empty + + TEARDOWN + - Delete entry cn=group,SUFFIX + - Delete entry cn=member,SUFFIX + - Disable Memberof Plugins + """ + + def _enable_disable_mbo(value): + """ + Enable or disable mbo plugin depending on 'value' ('on'/'off') + """ + # enable/disable the mbo plugin + if value == 'on': + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + else: + topology.standalone.plugins.disable(name=PLUGIN_MEMBER_OF) + + log.debug("-------------> _enable_disable_mbo(%s)" % value) + + topology.standalone.stop(timeout=120) + time.sleep(1) + topology.standalone.start(timeout=120) + time.sleep(3) + + # need to reopen a connection toward the instance + topology.standalone.open() + + def _test_ticket47560_setup(): + """ + - Create entry cn=group,SUFFIX + - Create entry cn=member,SUFFIX + - Update 'cn=member,SUFFIX' to add "memberOf: cn=group,SUFFIX" + - Enable Memberof Plugins + """ + log.debug("-------- > _test_ticket47560_setup\n") + + # + # By default the memberof plugin is disabled create + # - create a group entry + # - create a member entry + # - set the member entry as memberof the group entry + # + entry = Entry(group_DN) + entry.setValues('objectclass', 'top', 'groupOfNames', 'inetUser') + entry.setValues('cn', 'group') + try: + topology.standalone.add_s(entry) + except ldap.ALREADY_EXISTS: + log.debug("Entry %s already exists" % (group_DN)) + + entry = Entry(member_DN) + entry.setValues('objectclass', 'top', 'person', 'organizationalPerson', 'inetorgperson', 'inetUser') + entry.setValues('uid', 'member') + entry.setValues('cn', 'member') + entry.setValues('sn', 'member') + try: + topology.standalone.add_s(entry) + except ldap.ALREADY_EXISTS: + log.debug("Entry %s already exists" % (member_DN)) + + replace = [(ldap.MOD_REPLACE, 'memberof', group_DN)] + topology.standalone.modify_s(member_DN, replace) + + # + # enable the memberof plugin and restart the instance + # + _enable_disable_mbo('on') + + # + # check memberof attribute is still present + # + filt = 'uid=member' + ents = topology.standalone.search_s(member_DN, ldap.SCOPE_BASE, filt) + assert len(ents) == 1 + ent = ents[0] + #print ent + value = ent.getValue('memberof') + #print "memberof: %s" % (value) + assert value == group_DN + + def _test_ticket47560_teardown(): + """ + - Delete entry cn=group,SUFFIX + - Delete entry cn=member,SUFFIX + - Disable Memberof Plugins + """ + log.debug("-------- > _test_ticket47560_teardown\n") + # remove the entries group_DN and member_DN + try: + topology.standalone.delete_s(group_DN) + except: + log.warning("Entry %s fail to delete" % (group_DN)) + try: + topology.standalone.delete_s(member_DN) + except: + log.warning("Entry %s fail to delete" % (member_DN)) + # + # disable the memberof plugin and restart the instance + # + _enable_disable_mbo('off') + + group_DN = "cn=group,%s" % (SUFFIX) + member_DN = "uid=member,%s" % (SUFFIX) + + # + # Initialize the test case + # + _test_ticket47560_setup() + + # + # start the test + # - start the fixup task + # - check the entry is fixed (no longer memberof the group) + # + log.debug("-------- > Start ticket tests\n") + + filt = 'uid=member' + ents = topology.standalone.search_s(member_DN, ldap.SCOPE_BASE, filt) + assert len(ents) == 1 + ent = ents[0] + log.debug("Unfixed entry %r\n" % ent) + + # run the fixup task + topology.standalone.tasks.fixupMemberOf(suffix=SUFFIX, args={TASK_WAIT: True}) + + ents = topology.standalone.search_s(member_DN, ldap.SCOPE_BASE, filt) + assert len(ents) == 1 + ent = ents[0] + log.debug("Fixed entry %r\n" % ent) + + if ent.getValue('memberof') == group_DN: + log.warning("Error the fixupMemberOf did not fix %s" % (member_DN)) + result_successful = False + else: + result_successful = True + + # + # cleanup up the test case + # + _test_ticket47560_teardown() + + assert result_successful is True + + log.info('Testcase PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket47573_test.py b/dirsrvtests/tests/tickets/ticket47573_test.py new file mode 100644 index 0000000..19ded31 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47573_test.py @@ -0,0 +1,328 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Nov 7, 2013 + +@author: tbordaz +''' +import os +import sys +import time +import ldap +import logging +import pytest +import re +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation_prefix = None + +TEST_REPL_DN = "cn=test_repl, %s" % SUFFIX +ENTRY_DN = "cn=test_entry, %s" % SUFFIX + +MUST_OLD = "(postalAddress $ preferredLocale $ telexNumber)" +MAY_OLD = "(postalCode $ street)" + +MUST_NEW = "(postalAddress $ preferredLocale)" +MAY_NEW = "(telexNumber $ postalCode $ street)" + + +class TopologyMasterConsumer(object): + def __init__(self, master, consumer): + master.open() + self.master = master + + consumer.open() + self.consumer = consumer + + +def pattern_errorlog(file, log_pattern): + try: + pattern_errorlog.last_pos += 1 + except AttributeError: + pattern_errorlog.last_pos = 0 + + found = None + log.debug("_pattern_errorlog: start at offset %d" % pattern_errorlog.last_pos) + file.seek(pattern_errorlog.last_pos) + + # Use a while true iteration because 'for line in file: hit a + # python bug that break file.tell() + while True: + line = file.readline() + log.debug("_pattern_errorlog: [%d] %s" % (file.tell(), line)) + found = log_pattern.search(line) + if ((line == '') or (found)): + break + + log.debug("_pattern_errorlog: end at offset %d" % file.tell()) + pattern_errorlog.last_pos = file.tell() + return found + + +def _oc_definition(oid_ext, name, must=None, may=None): + oid = "1.2.3.4.5.6.7.8.9.10.%d" % oid_ext + desc = 'To test ticket 47573' + sup = 'person' + if not must: + must = MUST_OLD + if not may: + may = MAY_OLD + + new_oc = "( %s NAME '%s' DESC '%s' SUP %s AUXILIARY MUST %s MAY %s )" % (oid, name, desc, sup, must, may) + return new_oc + + +def add_OC(instance, oid_ext, name): + new_oc = _oc_definition(oid_ext, name) + instance.schema.add_schema('objectClasses', new_oc) + + +def mod_OC(instance, oid_ext, name, old_must=None, old_may=None, new_must=None, new_may=None): + old_oc = _oc_definition(oid_ext, name, old_must, old_may) + new_oc = _oc_definition(oid_ext, name, new_must, new_may) + instance.schema.del_schema('objectClasses', old_oc) + instance.schema.add_schema('objectClasses', new_oc) + + +def trigger_schema_push(topology): + """ + It triggers an update on the supplier. This will start a replication + session and a schema push + """ + try: + trigger_schema_push.value += 1 + except AttributeError: + trigger_schema_push.value = 1 + replace = [(ldap.MOD_REPLACE, 'telephonenumber', str(trigger_schema_push.value))] + topology.master.modify_s(ENTRY_DN, replace) + + # wait 10 seconds that the update is replicated + loop = 0 + while loop <= 10: + try: + ent = topology.consumer.getEntry(ENTRY_DN, ldap.SCOPE_BASE, "(objectclass=*)", ['telephonenumber']) + val = ent.telephonenumber or "0" + if int(val) == trigger_schema_push.value: + return + # the expected value is not yet replicated. try again + time.sleep(1) + loop += 1 + log.debug("trigger_schema_push: receive %s (expected %d)" % (val, trigger_schema_push.value)) + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to create a replicated topology for the 'module'. + The replicated topology is MASTER -> Consumer. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + master = DirSrv(verbose=False) + consumer = DirSrv(verbose=False) + + # Args for the master instance + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_master = args_instance.copy() + master.allocate(args_master) + + # Args for the consumer instance + args_instance[SER_HOST] = HOST_CONSUMER_1 + args_instance[SER_PORT] = PORT_CONSUMER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_CONSUMER_1 + args_consumer = args_instance.copy() + consumer.allocate(args_consumer) + + # Get the status of the instance + instance_master = master.exists() + instance_consumer = consumer.exists() + + # Remove all the instances + if instance_master: + master.delete() + if instance_consumer: + consumer.delete() + + # Create the instances + master.create() + master.open() + consumer.create() + consumer.open() + + # + # Now prepare the Master-Consumer topology + # + # First Enable replication + master.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + consumer.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_CONSUMER) + + # Initialize the supplier->consumer + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + repl_agreement = master.agreement.create(suffix=SUFFIX, host=consumer.host, port=consumer.port, properties=properties) + + if not repl_agreement: + log.fatal("Fail to create a replica agreement") + sys.exit(1) + + log.debug("%s created" % repl_agreement) + master.agreement.init(SUFFIX, HOST_CONSUMER_1, PORT_CONSUMER_1) + master.waitForReplInit(repl_agreement) + + # Check replication is working fine + if master.testReplication(DEFAULT_SUFFIX, consumer): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + master.delete() + consumer.delete() + request.addfinalizer(fin) + + # Here we have two instances master and consumer + # with replication working. + return TopologyMasterConsumer(master, consumer) + + +def test_ticket47573_init(topology): + """ + Initialize the test environment + """ + log.debug("test_ticket47573_init topology %r (master %r, consumer %r" % + (topology, topology.master, topology.consumer)) + # the test case will check if a warning message is logged in the + # error log of the supplier + topology.master.errorlog_file = open(topology.master.errlog, "r") + + # This entry will be used to trigger attempt of schema push + topology.master.add_s(Entry((ENTRY_DN, { + 'objectclass': "top person".split(), + 'sn': 'test_entry', + 'cn': 'test_entry'}))) + + +def test_ticket47573_one(topology): + """ + Summary: Add a custom OC with MUST and MAY + MUST = postalAddress $ preferredLocale + MAY = telexNumber $ postalCode $ street + + Final state + - supplier +OCwithMayAttr + - consumer +OCwithMayAttr + + """ + log.debug("test_ticket47573_one topology %r (master %r, consumer %r" % (topology, topology.master, topology.consumer)) + # update the schema of the supplier so that it is a superset of + # consumer. Schema should be pushed + new_oc = _oc_definition(2, 'OCwithMayAttr', + must = MUST_OLD, + may = MAY_OLD) + topology.master.schema.add_schema('objectClasses', new_oc) + + trigger_schema_push(topology) + master_schema_csn = topology.master.schema.get_schema_csn() + consumer_schema_csn = topology.consumer.schema.get_schema_csn() + + # Check the schemaCSN was updated on the consumer + log.debug("test_ticket47573_one master_schema_csn=%s", master_schema_csn) + log.debug("ctest_ticket47573_one onsumer_schema_csn=%s", consumer_schema_csn) + assert master_schema_csn == consumer_schema_csn + + # Check the error log of the supplier does not contain an error + regex = re.compile("must not be overwritten \(set replication log for additional info\)") + res = pattern_errorlog(topology.master.errorlog_file, regex) + assert res is None + + +def test_ticket47573_two(topology): + """ + Summary: Change OCwithMayAttr to move a MAY attribute to a MUST attribute + + + Final state + - supplier OCwithMayAttr updated + - consumer OCwithMayAttr updated + + """ + + # Update the objectclass so that a MAY attribute is moved to MUST attribute + mod_OC(topology.master, 2, 'OCwithMayAttr', old_must=MUST_OLD, new_must=MUST_NEW, old_may=MAY_OLD, new_may=MAY_NEW) + + # now push the scheam + trigger_schema_push(topology) + master_schema_csn = topology.master.schema.get_schema_csn() + consumer_schema_csn = topology.consumer.schema.get_schema_csn() + + # Check the schemaCSN was NOT updated on the consumer + log.debug("test_ticket47573_two master_schema_csn=%s", master_schema_csn) + log.debug("test_ticket47573_two consumer_schema_csn=%s", consumer_schema_csn) + assert master_schema_csn == consumer_schema_csn + + # Check the error log of the supplier does not contain an error + regex = re.compile("must not be overwritten \(set replication log for additional info\)") + res = pattern_errorlog(topology.master.errorlog_file, regex) + assert res is None + + +def test_ticket47573_three(topology): + ''' + Create a entry with OCwithMayAttr OC + ''' + # Check replication is working fine + dn = "cn=ticket47573, %s" % SUFFIX + topology.master.add_s(Entry((dn, + {'objectclass': "top person OCwithMayAttr".split(), + 'sn': 'test_repl', + 'cn': 'test_repl', + 'postalAddress': 'here', + 'preferredLocale': 'en', + 'telexNumber': '12$us$21', + 'postalCode': '54321'}))) + loop = 0 + ent = None + while loop <= 10: + try: + ent = topology.consumer.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)") + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + if ent is None: + assert False + + log.info('Testcase PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket47619_test.py b/dirsrvtests/tests/tickets/ticket47619_test.py new file mode 100644 index 0000000..87977f9 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47619_test.py @@ -0,0 +1,194 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Nov 7, 2013 + +@author: tbordaz +''' +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation_prefix = None + +TEST_REPL_DN = "cn=test_repl, %s" % SUFFIX +ENTRY_DN = "cn=test_entry, %s" % SUFFIX + +OTHER_NAME = 'other_entry' +MAX_OTHERS = 100 + +ATTRIBUTES = ['street', 'countryName', 'description', 'postalAddress', 'postalCode', 'title', 'l', 'roomNumber'] + + +class TopologyMasterConsumer(object): + def __init__(self, master, consumer): + master.open() + self.master = master + + consumer.open() + self.consumer = consumer + + def __repr__(self): + return "Master[%s] -> Consumer[%s" % (self.master, self.consumer) + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to create a replicated topology for the 'module'. + The replicated topology is MASTER -> Consumer. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + master = DirSrv(verbose=False) + consumer = DirSrv(verbose=False) + + # Args for the master instance + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_master = args_instance.copy() + master.allocate(args_master) + + # Args for the consumer instance + args_instance[SER_HOST] = HOST_CONSUMER_1 + args_instance[SER_PORT] = PORT_CONSUMER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_CONSUMER_1 + args_consumer = args_instance.copy() + consumer.allocate(args_consumer) + + # Get the status of the instance + instance_master = master.exists() + instance_consumer = consumer.exists() + + # Remove all the instances + if instance_master: + master.delete() + if instance_consumer: + consumer.delete() + + # Create the instances + master.create() + master.open() + consumer.create() + consumer.open() + + # + # Now prepare the Master-Consumer topology + # + # First Enable replication + master.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + consumer.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_CONSUMER) + + # Initialize the supplier->consumer + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + repl_agreement = master.agreement.create(suffix=SUFFIX, host=consumer.host, port=consumer.port, properties=properties) + + if not repl_agreement: + log.fatal("Fail to create a replica agreement") + sys.exit(1) + + log.debug("%s created" % repl_agreement) + master.agreement.init(SUFFIX, HOST_CONSUMER_1, PORT_CONSUMER_1) + master.waitForReplInit(repl_agreement) + + # Check replication is working fine + if master.testReplication(DEFAULT_SUFFIX, consumer): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + master.delete() + consumer.delete() + request.addfinalizer(fin) + + # Here we have two instances master and consumer + # with replication working. + return TopologyMasterConsumer(master, consumer) + + +def test_ticket47619_init(topology): + """ + Initialize the test environment + """ + topology.master.plugins.enable(name=PLUGIN_RETRO_CHANGELOG) + #topology.master.plugins.enable(name=PLUGIN_MEMBER_OF) + #topology.master.plugins.enable(name=PLUGIN_REFER_INTEGRITY) + topology.master.stop(timeout=10) + topology.master.start(timeout=10) + + topology.master.log.info("test_ticket47619_init topology %r" % (topology)) + # the test case will check if a warning message is logged in the + # error log of the supplier + topology.master.errorlog_file = open(topology.master.errlog, "r") + + # add dummy entries + for cpt in range(MAX_OTHERS): + name = "%s%d" % (OTHER_NAME, cpt) + topology.master.add_s(Entry(("cn=%s,%s" % (name, SUFFIX), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + + topology.master.log.info("test_ticket47619_init: %d entries ADDed %s[0..%d]" % (MAX_OTHERS, OTHER_NAME, MAX_OTHERS-1)) + + # Check the number of entries in the retro changelog + time.sleep(2) + ents = topology.master.search_s(RETROCL_SUFFIX, ldap.SCOPE_ONELEVEL, "(objectclass=*)") + assert len(ents) == MAX_OTHERS + + +def test_ticket47619_create_index(topology): + args = {INDEX_TYPE: 'eq'} + for attr in ATTRIBUTES: + topology.master.index.create(suffix=RETROCL_SUFFIX, attr=attr, args=args) + topology.master.restart(timeout=10) + + +def test_ticket47619_reindex(topology): + ''' + Reindex all the attributes in ATTRIBUTES + ''' + args = {TASK_WAIT: True} + for attr in ATTRIBUTES: + rc = topology.master.tasks.reindex(suffix=RETROCL_SUFFIX, attrname=attr, args=args) + assert rc == 0 + + +def test_ticket47619_check_indexed_search(topology): + for attr in ATTRIBUTES: + ents = topology.master.search_s(RETROCL_SUFFIX, ldap.SCOPE_SUBTREE, "(%s=hello)" % attr) + assert len(ents) == 0 + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket47640_test.py b/dirsrvtests/tests/tickets/ticket47640_test.py new file mode 100644 index 0000000..526ac22 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47640_test.py @@ -0,0 +1,121 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket47640(topology): + ''' + Linked Attrs Plugins - verify that if the plugin fails to update the link entry + that the entire operation is aborted + ''' + + # Enable Dynamic plugins, and the linked Attrs plugin + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-dynamic-plugins', 'on')]) + except ldap.LDAPError as e: + ldap.fatal('Failed to enable dynamic plugin!' + e.message['desc']) + assert False + + try: + topology.standalone.plugins.enable(name=PLUGIN_LINKED_ATTRS) + except ValueError as e: + ldap.fatal('Failed to enable linked attributes plugin!' + e.message['desc']) + assert False + + # Add the plugin config entry + try: + topology.standalone.add_s(Entry(('cn=manager link,cn=Linked Attributes,cn=plugins,cn=config', { + 'objectclass': 'top extensibleObject'.split(), + 'cn': 'Manager Link', + 'linkType': 'seeAlso', + 'managedType': 'seeAlso' + }))) + except ldap.LDAPError as e: + log.fatal('Failed to add linked attr config entry: error ' + e.message['desc']) + assert False + + # Add an entry who has a link to an entry that does not exist + OP_REJECTED = False + try: + topology.standalone.add_s(Entry(('uid=manager,' + DEFAULT_SUFFIX, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'manager', + 'seeAlso': 'uid=user,dc=example,dc=com' + }))) + except ldap.UNWILLING_TO_PERFORM: + # Success + log.info('Add operation correctly rejected.') + OP_REJECTED = True + except ldap.LDAPError as e: + log.fatal('Add operation incorrectly rejected: error %s - ' + + 'expected "unwilling to perform"' % e.message['desc']) + assert False + if not OP_REJECTED: + log.fatal('Add operation incorrectly allowed') + assert False + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + + diff --git a/dirsrvtests/tests/tickets/ticket47653MMR_test.py b/dirsrvtests/tests/tickets/ticket47653MMR_test.py new file mode 100644 index 0000000..107edac --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47653MMR_test.py @@ -0,0 +1,449 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Nov 7, 2013 + +@author: tbordaz +''' +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +# +# important part. We can deploy Master1 and Master2 on different versions +# +installation1_prefix = None +installation2_prefix = None + +TEST_REPL_DN = "cn=test_repl, %s" % SUFFIX +OC_NAME = 'OCticket47653' +MUST = "(postalAddress $ postalCode)" +MAY = "(member $ street)" + +OTHER_NAME = 'other_entry' +MAX_OTHERS = 10 + +BIND_NAME = 'bind_entry' +BIND_DN = 'cn=%s, %s' % (BIND_NAME, SUFFIX) +BIND_PW = 'password' + +ENTRY_NAME = 'test_entry' +ENTRY_DN = 'cn=%s, %s' % (ENTRY_NAME, SUFFIX) +ENTRY_OC = "top person %s" % OC_NAME + + +def _oc_definition(oid_ext, name, must=None, may=None): + oid = "1.2.3.4.5.6.7.8.9.10.%d" % oid_ext + desc = 'To test ticket 47490' + sup = 'person' + if not must: + must = MUST + if not may: + may = MAY + + new_oc = "( %s NAME '%s' DESC '%s' SUP %s AUXILIARY MUST %s MAY %s )" % (oid, name, desc, sup, must, may) + return new_oc + + +class TopologyMaster1Master2(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to create a replicated topology for the 'module'. + The replicated topology is MASTER1 <-> Master2. + ''' + global installation1_prefix + global installation2_prefix + + # allocate master1 on a given deployement + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Args for the master1 instance + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_master = args_instance.copy() + master1.allocate(args_master) + + # allocate master1 on a given deployement + master2 = DirSrv(verbose=False) + if installation2_prefix: + args_instance[SER_DEPLOYED_DIR] = installation2_prefix + + # Args for the consumer instance + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_master = args_instance.copy() + master2.allocate(args_master) + + # Get the status of the instance and restart it if it exists + instance_master1 = master1.exists() + instance_master2 = master2.exists() + + # Remove all the instances + if instance_master1: + master1.delete() + if instance_master2: + master2.delete() + + # Create the instances + master1.create() + master1.open() + master2.create() + master2.open() + + # + # Now prepare the Master-Consumer topology + # + # First Enable replication + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # Initialize the supplier->consumer + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + repl_agreement = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + + if not repl_agreement: + log.fatal("Fail to create a replica agreement") + sys.exit(1) + + log.debug("%s created" % repl_agreement) + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(repl_agreement) + + # Check replication is working fine + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + # Here we have two instances master and consumer + # with replication working. + return TopologyMaster1Master2(master1, master2) + + +def test_ticket47653_init(topology): + """ + It adds + - Objectclass with MAY 'member' + - an entry ('bind_entry') with which we bind to test the 'SELFDN' operation + It deletes the anonymous aci + + """ + + topology.master1.log.info("Add %s that allows 'member' attribute" % OC_NAME) + new_oc = _oc_definition(2, OC_NAME, must=MUST, may=MAY) + topology.master1.schema.add_schema('objectClasses', new_oc) + + # entry used to bind with + topology.master1.log.info("Add %s" % BIND_DN) + topology.master1.add_s(Entry((BIND_DN, { + 'objectclass': "top person".split(), + 'sn': BIND_NAME, + 'cn': BIND_NAME, + 'userpassword': BIND_PW}))) + + # enable acl error logging + mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', str(128 + 8192))] # ACL + REPL + topology.master1.modify_s(DN_CONFIG, mod) + topology.master2.modify_s(DN_CONFIG, mod) + + # remove all aci's and start with a clean slate + mod = [(ldap.MOD_DELETE, 'aci', None)] + topology.master1.modify_s(SUFFIX, mod) + topology.master2.modify_s(SUFFIX, mod) + + # add dummy entries + for cpt in range(MAX_OTHERS): + name = "%s%d" % (OTHER_NAME, cpt) + topology.master1.add_s(Entry(("cn=%s,%s" % (name, SUFFIX), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + + +def test_ticket47653_add(topology): + ''' + This test ADD an entry on MASTER1 where 47653 is fixed. Then it checks that entry is replicated + on MASTER2 (even if on MASTER2 47653 is NOT fixed). Then update on MASTER2 and check the update on MASTER1 + + It checks that, bound as bind_entry, + - we can not ADD an entry without the proper SELFDN aci. + - with the proper ACI we can not ADD with 'member' attribute + - with the proper ACI and 'member' it succeeds to ADD + ''' + topology.master1.log.info("\n\n######################### ADD ######################\n") + + # bind as bind_entry + topology.master1.log.info("Bind as %s" % BIND_DN) + topology.master1.simple_bind_s(BIND_DN, BIND_PW) + + # Prepare the entry with multivalued members + entry_with_members = Entry(ENTRY_DN) + entry_with_members.setValues('objectclass', 'top', 'person', 'OCticket47653') + entry_with_members.setValues('sn', ENTRY_NAME) + entry_with_members.setValues('cn', ENTRY_NAME) + entry_with_members.setValues('postalAddress', 'here') + entry_with_members.setValues('postalCode', '1234') + members = [] + for cpt in range(MAX_OTHERS): + name = "%s%d" % (OTHER_NAME, cpt) + members.append("cn=%s,%s" % (name, SUFFIX)) + members.append(BIND_DN) + entry_with_members.setValues('member', members) + + # Prepare the entry with only one member value + entry_with_member = Entry(ENTRY_DN) + entry_with_member.setValues('objectclass', 'top', 'person', 'OCticket47653') + entry_with_member.setValues('sn', ENTRY_NAME) + entry_with_member.setValues('cn', ENTRY_NAME) + entry_with_member.setValues('postalAddress', 'here') + entry_with_member.setValues('postalCode', '1234') + member = [] + member.append(BIND_DN) + entry_with_member.setValues('member', member) + + # entry to add WITH member being BIND_DN but WITHOUT the ACI -> ldap.INSUFFICIENT_ACCESS + try: + topology.master1.log.info("Try to add Add %s (aci is missing): %r" % (ENTRY_DN, entry_with_member)) + + topology.master1.add_s(entry_with_member) + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + # Ok Now add the proper ACI + topology.master1.log.info("Bind as %s and add the ADD SELFDN aci" % DN_DM) + topology.master1.simple_bind_s(DN_DM, PASSWORD) + + ACI_TARGET = "(target = \"ldap:///cn=*,%s\")" % SUFFIX + ACI_TARGETFILTER = "(targetfilter =\"(objectClass=%s)\")" % OC_NAME + ACI_ALLOW = "(version 3.0; acl \"SelfDN add\"; allow (add)" + ACI_SUBJECT = " userattr = \"member#selfDN\";)" + ACI_BODY = ACI_TARGET + ACI_TARGETFILTER + ACI_ALLOW + ACI_SUBJECT + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + topology.master1.modify_s(SUFFIX, mod) + time.sleep(1) + + # bind as bind_entry + topology.master1.log.info("Bind as %s" % BIND_DN) + topology.master1.simple_bind_s(BIND_DN, BIND_PW) + + # entry to add WITHOUT member and WITH the ACI -> ldap.INSUFFICIENT_ACCESS + try: + topology.master1.log.info("Try to add Add %s (member is missing)" % ENTRY_DN) + topology.master1.add_s(Entry((ENTRY_DN, { + 'objectclass': ENTRY_OC.split(), + 'sn': ENTRY_NAME, + 'cn': ENTRY_NAME, + 'postalAddress': 'here', + 'postalCode': '1234'}))) + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + # entry to add WITH memberS and WITH the ACI -> ldap.INSUFFICIENT_ACCESS + # member should contain only one value + try: + topology.master1.log.info("Try to add Add %s (with several member values)" % ENTRY_DN) + topology.master1.add_s(entry_with_members) + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + topology.master1.log.info("Try to add Add %s should be successful" % ENTRY_DN) + try: + topology.master1.add_s(entry_with_member) + except ldap.LDAPError as e: + topology.master1.log.info("Failed to add entry, error: " + e.message['desc']) + assert False + + # + # Now check the entry as been replicated + # + topology.master2.simple_bind_s(DN_DM, PASSWORD) + topology.master1.log.info("Try to retrieve %s from Master2" % ENTRY_DN) + loop = 0 + while loop <= 10: + try: + ent = topology.master2.getEntry(ENTRY_DN, ldap.SCOPE_BASE, "(objectclass=*)") + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + assert loop <= 10 + + # Now update the entry on Master2 (as DM because 47653 is possibly not fixed on M2) + topology.master1.log.info("Update %s on M2" % ENTRY_DN) + mod = [(ldap.MOD_REPLACE, 'description', 'test_add')] + topology.master2.modify_s(ENTRY_DN, mod) + + topology.master1.simple_bind_s(DN_DM, PASSWORD) + loop = 0 + while loop <= 10: + try: + ent = topology.master1.getEntry(ENTRY_DN, ldap.SCOPE_BASE, "(objectclass=*)") + if ent.hasAttr('description') and (ent.getValue('description') == 'test_add'): + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + + assert ent.getValue('description') == 'test_add' + + +def test_ticket47653_modify(topology): + ''' + This test MOD an entry on MASTER1 where 47653 is fixed. Then it checks that update is replicated + on MASTER2 (even if on MASTER2 47653 is NOT fixed). Then update on MASTER2 (bound as BIND_DN). + This update may fail whether or not 47653 is fixed on MASTER2 + + It checks that, bound as bind_entry, + - we can not modify an entry without the proper SELFDN aci. + - adding the ACI, we can modify the entry + ''' + # bind as bind_entry + topology.master1.log.info("Bind as %s" % BIND_DN) + topology.master1.simple_bind_s(BIND_DN, BIND_PW) + + topology.master1.log.info("\n\n######################### MODIFY ######################\n") + + # entry to modify WITH member being BIND_DN but WITHOUT the ACI -> ldap.INSUFFICIENT_ACCESS + try: + topology.master1.log.info("Try to modify %s (aci is missing)" % ENTRY_DN) + mod = [(ldap.MOD_REPLACE, 'postalCode', '9876')] + topology.master1.modify_s(ENTRY_DN, mod) + except Exception as e: + topology.master1.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + # Ok Now add the proper ACI + topology.master1.log.info("Bind as %s and add the WRITE SELFDN aci" % DN_DM) + topology.master1.simple_bind_s(DN_DM, PASSWORD) + + ACI_TARGET = "(target = \"ldap:///cn=*,%s\")" % SUFFIX + ACI_TARGETATTR = "(targetattr = *)" + ACI_TARGETFILTER = "(targetfilter =\"(objectClass=%s)\")" % OC_NAME + ACI_ALLOW = "(version 3.0; acl \"SelfDN write\"; allow (write)" + ACI_SUBJECT = " userattr = \"member#selfDN\";)" + ACI_BODY = ACI_TARGET + ACI_TARGETATTR + ACI_TARGETFILTER + ACI_ALLOW + ACI_SUBJECT + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + topology.master1.modify_s(SUFFIX, mod) + time.sleep(1) + + # bind as bind_entry + topology.master1.log.info("M1: Bind as %s" % BIND_DN) + topology.master1.simple_bind_s(BIND_DN, BIND_PW) + + # modify the entry and checks the value + topology.master1.log.info("M1: Try to modify %s. It should succeeds" % ENTRY_DN) + mod = [(ldap.MOD_REPLACE, 'postalCode', '1928')] + topology.master1.modify_s(ENTRY_DN, mod) + + topology.master1.log.info("M1: Bind as %s" % DN_DM) + topology.master1.simple_bind_s(DN_DM, PASSWORD) + + topology.master1.log.info("M1: Check the update of %s" % ENTRY_DN) + ents = topology.master1.search_s(ENTRY_DN, ldap.SCOPE_BASE, 'objectclass=*') + assert len(ents) == 1 + assert ents[0].postalCode == '1928' + + # Now check the update has been replicated on M2 + topology.master1.log.info("M2: Bind as %s" % DN_DM) + topology.master2.simple_bind_s(DN_DM, PASSWORD) + topology.master1.log.info("M2: Try to retrieve %s" % ENTRY_DN) + loop = 0 + while loop <= 10: + try: + ent = topology.master2.getEntry(ENTRY_DN, ldap.SCOPE_BASE, "(objectclass=*)") + if ent.hasAttr('postalCode') and (ent.getValue('postalCode') == '1928'): + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + assert loop <= 10 + assert ent.getValue('postalCode') == '1928' + + # Now update the entry on Master2 bound as BIND_DN (update may fail if 47653 is not fixed on M2) + topology.master1.log.info("M2: Update %s (bound as %s)" % (ENTRY_DN, BIND_DN)) + topology.master2.simple_bind_s(BIND_DN, PASSWORD) + fail = False + try: + mod = [(ldap.MOD_REPLACE, 'postalCode', '1929')] + topology.master2.modify_s(ENTRY_DN, mod) + fail = False + except ldap.INSUFFICIENT_ACCESS: + topology.master1.log.info("M2: Exception (INSUFFICIENT_ACCESS): that is fine the bug is possibly not fixed on M2") + fail = True + except Exception as e: + topology.master1.log.info("M2: Exception (not expected): %s" % type(e).__name__) + assert 0 + + if not fail: + # Check the update has been replicaed on M1 + topology.master1.log.info("M1: Bind as %s" % DN_DM) + topology.master1.simple_bind_s(DN_DM, PASSWORD) + topology.master1.log.info("M1: Check %s.postalCode=1929)" % (ENTRY_DN)) + loop = 0 + while loop <= 10: + try: + ent = topology.master1.getEntry(ENTRY_DN, ldap.SCOPE_BASE, "(objectclass=*)") + if ent.hasAttr('postalCode') and (ent.getValue('postalCode') == '1929'): + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + assert ent.getValue('postalCode') == '1929' + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47653_test.py b/dirsrvtests/tests/tickets/ticket47653_test.py new file mode 100644 index 0000000..86d008f --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47653_test.py @@ -0,0 +1,356 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +OC_NAME = 'OCticket47653' +MUST = "(postalAddress $ postalCode)" +MAY = "(member $ street)" + +OTHER_NAME = 'other_entry' +MAX_OTHERS = 10 + +BIND_NAME = 'bind_entry' +BIND_DN = 'cn=%s, %s' % (BIND_NAME, SUFFIX) +BIND_PW = 'password' + +ENTRY_NAME = 'test_entry' +ENTRY_DN = 'cn=%s, %s' % (ENTRY_NAME, SUFFIX) +ENTRY_OC = "top person %s" % OC_NAME + + +def _oc_definition(oid_ext, name, must=None, may=None): + oid = "1.2.3.4.5.6.7.8.9.10.%d" % oid_ext + desc = 'To test ticket 47490' + sup = 'person' + if not must: + must = MUST + if not may: + may = MAY + + new_oc = "( %s NAME '%s' DESC '%s' SUP %s AUXILIARY MUST %s MAY %s )" % (oid, name, desc, sup, must, may) + return new_oc + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47653_init(topology): + """ + It adds + - Objectclass with MAY 'member' + - an entry ('bind_entry') with which we bind to test the 'SELFDN' operation + It deletes the anonymous aci + + """ + + topology.standalone.log.info("Add %s that allows 'member' attribute" % OC_NAME) + new_oc = _oc_definition(2, OC_NAME, must=MUST, may=MAY) + topology.standalone.schema.add_schema('objectClasses', new_oc) + + # entry used to bind with + topology.standalone.log.info("Add %s" % BIND_DN) + topology.standalone.add_s(Entry((BIND_DN, { + 'objectclass': "top person".split(), + 'sn': BIND_NAME, + 'cn': BIND_NAME, + 'userpassword': BIND_PW}))) + + # enable acl error logging + mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '128')] + topology.standalone.modify_s(DN_CONFIG, mod) + + # Remove aci's to start with a clean slate + mod = [(ldap.MOD_DELETE, 'aci', None)] + topology.standalone.modify_s(SUFFIX, mod) + + # add dummy entries + for cpt in range(MAX_OTHERS): + name = "%s%d" % (OTHER_NAME, cpt) + topology.standalone.add_s(Entry(("cn=%s,%s" % (name, SUFFIX), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + + +def test_ticket47653_add(topology): + ''' + It checks that, bound as bind_entry, + - we can not ADD an entry without the proper SELFDN aci. + - with the proper ACI we can not ADD with 'member' attribute + - with the proper ACI and 'member' it succeeds to ADD + ''' + topology.standalone.log.info("\n\n######################### ADD ######################\n") + + # bind as bind_entry + topology.standalone.log.info("Bind as %s" % BIND_DN) + topology.standalone.simple_bind_s(BIND_DN, BIND_PW) + + # Prepare the entry with multivalued members + entry_with_members = Entry(ENTRY_DN) + entry_with_members.setValues('objectclass', 'top', 'person', 'OCticket47653') + entry_with_members.setValues('sn', ENTRY_NAME) + entry_with_members.setValues('cn', ENTRY_NAME) + entry_with_members.setValues('postalAddress', 'here') + entry_with_members.setValues('postalCode', '1234') + members = [] + for cpt in range(MAX_OTHERS): + name = "%s%d" % (OTHER_NAME, cpt) + members.append("cn=%s,%s" % (name, SUFFIX)) + members.append(BIND_DN) + entry_with_members.setValues('member', members) + + # Prepare the entry with one member + entry_with_member = Entry(ENTRY_DN) + entry_with_member.setValues('objectclass', 'top', 'person', 'OCticket47653') + entry_with_member.setValues('sn', ENTRY_NAME) + entry_with_member.setValues('cn', ENTRY_NAME) + entry_with_member.setValues('postalAddress', 'here') + entry_with_member.setValues('postalCode', '1234') + member = [] + member.append(BIND_DN) + entry_with_member.setValues('member', member) + + # entry to add WITH member being BIND_DN but WITHOUT the ACI -> ldap.INSUFFICIENT_ACCESS + try: + topology.standalone.log.info("Try to add Add %s (aci is missing): %r" % (ENTRY_DN, entry_with_member)) + + topology.standalone.add_s(entry_with_member) + except Exception as e: + topology.standalone.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + # Ok Now add the proper ACI + topology.standalone.log.info("Bind as %s and add the ADD SELFDN aci" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + ACI_TARGET = "(target = \"ldap:///cn=*,%s\")" % SUFFIX + ACI_TARGETFILTER = "(targetfilter =\"(objectClass=%s)\")" % OC_NAME + ACI_ALLOW = "(version 3.0; acl \"SelfDN add\"; allow (add)" + ACI_SUBJECT = " userattr = \"member#selfDN\";)" + ACI_BODY = ACI_TARGET + ACI_TARGETFILTER + ACI_ALLOW + ACI_SUBJECT + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + topology.standalone.modify_s(SUFFIX, mod) + + # bind as bind_entry + topology.standalone.log.info("Bind as %s" % BIND_DN) + topology.standalone.simple_bind_s(BIND_DN, BIND_PW) + + # entry to add WITHOUT member and WITH the ACI -> ldap.INSUFFICIENT_ACCESS + try: + topology.standalone.log.info("Try to add Add %s (member is missing)" % ENTRY_DN) + topology.standalone.add_s(Entry((ENTRY_DN, { + 'objectclass': ENTRY_OC.split(), + 'sn': ENTRY_NAME, + 'cn': ENTRY_NAME, + 'postalAddress': 'here', + 'postalCode': '1234'}))) + except Exception as e: + topology.standalone.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + # entry to add WITH memberS and WITH the ACI -> ldap.INSUFFICIENT_ACCESS + # member should contain only one value + try: + topology.standalone.log.info("Try to add Add %s (with several member values)" % ENTRY_DN) + topology.standalone.add_s(entry_with_members) + except Exception as e: + topology.standalone.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + topology.standalone.log.info("Try to add Add %s should be successful" % ENTRY_DN) + topology.standalone.add_s(entry_with_member) + + +def test_ticket47653_search(topology): + ''' + It checks that, bound as bind_entry, + - we can not search an entry without the proper SELFDN aci. + - adding the ACI, we can search the entry + ''' + topology.standalone.log.info("\n\n######################### SEARCH ######################\n") + # bind as bind_entry + topology.standalone.log.info("Bind as %s" % BIND_DN) + topology.standalone.simple_bind_s(BIND_DN, BIND_PW) + + # entry to search WITH member being BIND_DN but WITHOUT the ACI -> no entry returned + topology.standalone.log.info("Try to search %s (aci is missing)" % ENTRY_DN) + ents = topology.standalone.search_s(ENTRY_DN, ldap.SCOPE_BASE, 'objectclass=*') + assert len(ents) == 0 + + # Ok Now add the proper ACI + topology.standalone.log.info("Bind as %s and add the READ/SEARCH SELFDN aci" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + ACI_TARGET = "(target = \"ldap:///cn=*,%s\")" % SUFFIX + ACI_TARGETATTR = "(targetattr = *)" + ACI_TARGETFILTER = "(targetfilter =\"(objectClass=%s)\")" % OC_NAME + ACI_ALLOW = "(version 3.0; acl \"SelfDN search-read\"; allow (read, search, compare)" + ACI_SUBJECT = " userattr = \"member#selfDN\";)" + ACI_BODY = ACI_TARGET + ACI_TARGETATTR + ACI_TARGETFILTER + ACI_ALLOW + ACI_SUBJECT + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + topology.standalone.modify_s(SUFFIX, mod) + + # bind as bind_entry + topology.standalone.log.info("Bind as %s" % BIND_DN) + topology.standalone.simple_bind_s(BIND_DN, BIND_PW) + + # entry to search with the proper aci + topology.standalone.log.info("Try to search %s should be successful" % ENTRY_DN) + ents = topology.standalone.search_s(ENTRY_DN, ldap.SCOPE_BASE, 'objectclass=*') + assert len(ents) == 1 + + +def test_ticket47653_modify(topology): + ''' + It checks that, bound as bind_entry, + - we can not modify an entry without the proper SELFDN aci. + - adding the ACI, we can modify the entry + ''' + # bind as bind_entry + topology.standalone.log.info("Bind as %s" % BIND_DN) + topology.standalone.simple_bind_s(BIND_DN, BIND_PW) + + topology.standalone.log.info("\n\n######################### MODIFY ######################\n") + + # entry to modify WITH member being BIND_DN but WITHOUT the ACI -> ldap.INSUFFICIENT_ACCESS + try: + topology.standalone.log.info("Try to modify %s (aci is missing)" % ENTRY_DN) + mod = [(ldap.MOD_REPLACE, 'postalCode', '9876')] + topology.standalone.modify_s(ENTRY_DN, mod) + except Exception as e: + topology.standalone.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + + # Ok Now add the proper ACI + topology.standalone.log.info("Bind as %s and add the WRITE SELFDN aci" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + ACI_TARGET = "(target = \"ldap:///cn=*,%s\")" % SUFFIX + ACI_TARGETATTR = "(targetattr = *)" + ACI_TARGETFILTER = "(targetfilter =\"(objectClass=%s)\")" % OC_NAME + ACI_ALLOW = "(version 3.0; acl \"SelfDN write\"; allow (write)" + ACI_SUBJECT = " userattr = \"member#selfDN\";)" + ACI_BODY = ACI_TARGET + ACI_TARGETATTR + ACI_TARGETFILTER + ACI_ALLOW + ACI_SUBJECT + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + topology.standalone.modify_s(SUFFIX, mod) + + # bind as bind_entry + topology.standalone.log.info("Bind as %s" % BIND_DN) + topology.standalone.simple_bind_s(BIND_DN, BIND_PW) + + # modify the entry and checks the value + topology.standalone.log.info("Try to modify %s. It should succeeds" % ENTRY_DN) + mod = [(ldap.MOD_REPLACE, 'postalCode', '1928')] + topology.standalone.modify_s(ENTRY_DN, mod) + + ents = topology.standalone.search_s(ENTRY_DN, ldap.SCOPE_BASE, 'objectclass=*') + assert len(ents) == 1 + assert ents[0].postalCode == '1928' + + +def test_ticket47653_delete(topology): + ''' + It checks that, bound as bind_entry, + - we can not delete an entry without the proper SELFDN aci. + - adding the ACI, we can delete the entry + ''' + topology.standalone.log.info("\n\n######################### DELETE ######################\n") + + # bind as bind_entry + topology.standalone.log.info("Bind as %s" % BIND_DN) + topology.standalone.simple_bind_s(BIND_DN, BIND_PW) + + # entry to delete WITH member being BIND_DN but WITHOUT the ACI -> ldap.INSUFFICIENT_ACCESS + try: + topology.standalone.log.info("Try to delete %s (aci is missing)" % ENTRY_DN) + topology.standalone.delete_s(ENTRY_DN) + except Exception as e: + topology.standalone.log.info("Exception (expected): %s" % type(e).__name__) + assert isinstance(e, ldap.INSUFFICIENT_ACCESS) + + # Ok Now add the proper ACI + topology.standalone.log.info("Bind as %s and add the READ/SEARCH SELFDN aci" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + ACI_TARGET = "(target = \"ldap:///cn=*,%s\")" % SUFFIX + ACI_TARGETFILTER = "(targetfilter =\"(objectClass=%s)\")" % OC_NAME + ACI_ALLOW = "(version 3.0; acl \"SelfDN delete\"; allow (delete)" + ACI_SUBJECT = " userattr = \"member#selfDN\";)" + ACI_BODY = ACI_TARGET + ACI_TARGETFILTER + ACI_ALLOW + ACI_SUBJECT + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + topology.standalone.modify_s(SUFFIX, mod) + + # bind as bind_entry + topology.standalone.log.info("Bind as %s" % BIND_DN) + topology.standalone.simple_bind_s(BIND_DN, BIND_PW) + + # entry to search with the proper aci + topology.standalone.log.info("Try to delete %s should be successful" % ENTRY_DN) + topology.standalone.delete_s(ENTRY_DN) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47669_test.py b/dirsrvtests/tests/tickets/ticket47669_test.py new file mode 100644 index 0000000..af05a82 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47669_test.py @@ -0,0 +1,244 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from ldap.controls import SimplePagedResultsControl +from ldap.controls.simple import GetEffectiveRightsControl + +log = logging.getLogger(__name__) + +installation_prefix = None + +CHANGELOG = 'cn=changelog5,cn=config' +RETROCHANGELOG = 'cn=Retro Changelog Plugin,cn=plugins,cn=config' + +MAXAGE = 'nsslapd-changelogmaxage' +TRIMINTERVAL = 'nsslapd-changelogtrim-interval' +COMPACTDBINTERVAL = 'nsslapd-changelogcompactdb-interval' + +FILTER = '(cn=*)' + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47669_init(topology): + """ + Add cn=changelog5,cn=config + Enable cn=Retro Changelog Plugin,cn=plugins,cn=config + """ + log.info('Testing Ticket 47669 - Test duration syntax in the changelogs') + + # bind as directory manager + topology.standalone.log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + try: + changelogdir = "%s/changelog" % topology.standalone.dbdir + topology.standalone.add_s(Entry((CHANGELOG, + {'objectclass': 'top extensibleObject'.split(), + 'nsslapd-changelogdir': changelogdir}))) + except ldap.LDAPError as e: + log.error('Failed to add ' + CHANGELOG + ': error ' + e.message['desc']) + assert False + + try: + topology.standalone.modify_s(RETROCHANGELOG, [(ldap.MOD_REPLACE, 'nsslapd-pluginEnabled', 'on')]) + except ldap.LDAPError as e: + log.error('Failed to enable ' + RETROCHANGELOG + ': error ' + e.message['desc']) + assert False + + # restart the server + topology.standalone.restart(timeout=10) + + +def add_and_check(topology, plugin, attr, val, isvalid): + """ + Helper function to add/replace attr: val and check the added value + """ + if isvalid: + log.info('Test %s: %s -- valid' % (attr, val)) + try: + topology.standalone.modify_s(plugin, [(ldap.MOD_REPLACE, attr, val)]) + except ldap.LDAPError as e: + log.error('Failed to add ' + attr + ': ' + val + ' to ' + plugin + ': error ' + e.message['desc']) + assert False + else: + log.info('Test %s: %s -- invalid' % (attr, val)) + if plugin == CHANGELOG: + try: + topology.standalone.modify_s(plugin, [(ldap.MOD_REPLACE, attr, val)]) + except ldap.LDAPError as e: + log.error('Expectedly failed to add ' + attr + ': ' + val + + ' to ' + plugin + ': error ' + e.message['desc']) + else: + try: + topology.standalone.modify_s(plugin, [(ldap.MOD_REPLACE, attr, val)]) + except ldap.LDAPError as e: + log.error('Failed to add ' + attr + ': ' + val + ' to ' + plugin + ': error ' + e.message['desc']) + + try: + entries = topology.standalone.search_s(plugin, ldap.SCOPE_BASE, FILTER, [attr]) + if isvalid: + if not entries[0].hasValue(attr, val): + log.fatal('%s does not have expected (%s: %s)' % (plugin, attr, val)) + assert False + else: + if plugin == CHANGELOG: + if entries[0].hasValue(attr, val): + log.fatal('%s has unexpected (%s: %s)' % (plugin, attr, val)) + assert False + else: + if not entries[0].hasValue(attr, val): + log.fatal('%s does not have expected (%s: %s)' % (plugin, attr, val)) + assert False + except ldap.LDAPError as e: + log.fatal('Unable to search for entry %s: error %s' % (plugin, e.message['desc'])) + assert False + + +def test_ticket47669_changelog_maxage(topology): + """ + Test nsslapd-changelogmaxage in cn=changelog5,cn=config + """ + log.info('1. Test nsslapd-changelogmaxage in cn=changelog5,cn=config') + + # bind as directory manager + topology.standalone.log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + add_and_check(topology, CHANGELOG, MAXAGE, '12345', True) + add_and_check(topology, CHANGELOG, MAXAGE, '10s', True) + add_and_check(topology, CHANGELOG, MAXAGE, '30M', True) + add_and_check(topology, CHANGELOG, MAXAGE, '12h', True) + add_and_check(topology, CHANGELOG, MAXAGE, '2D', True) + add_and_check(topology, CHANGELOG, MAXAGE, '4w', True) + add_and_check(topology, CHANGELOG, MAXAGE, '-123', False) + add_and_check(topology, CHANGELOG, MAXAGE, 'xyz', False) + + +def test_ticket47669_changelog_triminterval(topology): + """ + Test nsslapd-changelogtrim-interval in cn=changelog5,cn=config + """ + log.info('2. Test nsslapd-changelogtrim-interval in cn=changelog5,cn=config') + + # bind as directory manager + topology.standalone.log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + add_and_check(topology, CHANGELOG, TRIMINTERVAL, '12345', True) + add_and_check(topology, CHANGELOG, TRIMINTERVAL, '10s', True) + add_and_check(topology, CHANGELOG, TRIMINTERVAL, '30M', True) + add_and_check(topology, CHANGELOG, TRIMINTERVAL, '12h', True) + add_and_check(topology, CHANGELOG, TRIMINTERVAL, '2D', True) + add_and_check(topology, CHANGELOG, TRIMINTERVAL, '4w', True) + add_and_check(topology, CHANGELOG, TRIMINTERVAL, '-123', False) + add_and_check(topology, CHANGELOG, TRIMINTERVAL, 'xyz', False) + + +def test_ticket47669_changelog_compactdbinterval(topology): + """ + Test nsslapd-changelogcompactdb-interval in cn=changelog5,cn=config + """ + log.info('3. Test nsslapd-changelogcompactdb-interval in cn=changelog5,cn=config') + + # bind as directory manager + topology.standalone.log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + add_and_check(topology, CHANGELOG, COMPACTDBINTERVAL, '12345', True) + add_and_check(topology, CHANGELOG, COMPACTDBINTERVAL, '10s', True) + add_and_check(topology, CHANGELOG, COMPACTDBINTERVAL, '30M', True) + add_and_check(topology, CHANGELOG, COMPACTDBINTERVAL, '12h', True) + add_and_check(topology, CHANGELOG, COMPACTDBINTERVAL, '2D', True) + add_and_check(topology, CHANGELOG, COMPACTDBINTERVAL, '4w', True) + add_and_check(topology, CHANGELOG, COMPACTDBINTERVAL, '-123', False) + add_and_check(topology, CHANGELOG, COMPACTDBINTERVAL, 'xyz', False) + + +def test_ticket47669_retrochangelog_maxage(topology): + """ + Test nsslapd-changelogmaxage in cn=Retro Changelog Plugin,cn=plugins,cn=config + """ + log.info('4. Test nsslapd-changelogmaxage in cn=Retro Changelog Plugin,cn=plugins,cn=config') + + # bind as directory manager + topology.standalone.log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + add_and_check(topology, RETROCHANGELOG, MAXAGE, '12345', True) + add_and_check(topology, RETROCHANGELOG, MAXAGE, '10s', True) + add_and_check(topology, RETROCHANGELOG, MAXAGE, '30M', True) + add_and_check(topology, RETROCHANGELOG, MAXAGE, '12h', True) + add_and_check(topology, RETROCHANGELOG, MAXAGE, '2D', True) + add_and_check(topology, RETROCHANGELOG, MAXAGE, '4w', True) + add_and_check(topology, RETROCHANGELOG, MAXAGE, '-123', False) + add_and_check(topology, RETROCHANGELOG, MAXAGE, 'xyz', False) + + topology.standalone.log.info("ticket47669 was successfully verified.") + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47676_test.py b/dirsrvtests/tests/tickets/ticket47676_test.py new file mode 100644 index 0000000..cdf4096 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47676_test.py @@ -0,0 +1,381 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Nov 7, 2013 + +@author: tbordaz +''' +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +# +# important part. We can deploy Master1 and Master2 on different versions +# +installation1_prefix = None +installation2_prefix = None + +SCHEMA_DN = "cn=schema" +TEST_REPL_DN = "cn=test_repl, %s" % SUFFIX +OC_NAME = 'OCticket47676' +OC_OID_EXT = 2 +MUST = "(postalAddress $ postalCode)" +MAY = "(member $ street)" + +OC2_NAME = 'OC2ticket47676' +OC2_OID_EXT = 3 +MUST_2 = "(postalAddress $ postalCode)" +MAY_2 = "(member $ street)" + +REPL_SCHEMA_POLICY_CONSUMER = "cn=consumerUpdatePolicy,cn=replSchema,cn=config" +REPL_SCHEMA_POLICY_SUPPLIER = "cn=supplierUpdatePolicy,cn=replSchema,cn=config" + +OTHER_NAME = 'other_entry' +MAX_OTHERS = 10 + +BIND_NAME = 'bind_entry' +BIND_DN = 'cn=%s, %s' % (BIND_NAME, SUFFIX) +BIND_PW = 'password' + +ENTRY_NAME = 'test_entry' +ENTRY_DN = 'cn=%s, %s' % (ENTRY_NAME, SUFFIX) +ENTRY_OC = "top person %s" % OC_NAME + +BASE_OID = "1.2.3.4.5.6.7.8.9.10" + + +def _oc_definition(oid_ext, name, must=None, may=None): + oid = "%s.%d" % (BASE_OID, oid_ext) + desc = 'To test ticket 47490' + sup = 'person' + if not must: + must = MUST + if not may: + may = MAY + + new_oc = "( %s NAME '%s' DESC '%s' SUP %s AUXILIARY MUST %s MAY %s )" % (oid, name, desc, sup, must, may) + return new_oc + + +class TopologyMaster1Master2(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to create a replicated topology for the 'module'. + The replicated topology is MASTER1 <-> Master2. + ''' + global installation1_prefix + global installation2_prefix + + # allocate master1 on a given deployement + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Args for the master1 instance + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_master = args_instance.copy() + master1.allocate(args_master) + + # allocate master1 on a given deployement + master2 = DirSrv(verbose=False) + if installation2_prefix: + args_instance[SER_DEPLOYED_DIR] = installation2_prefix + + # Args for the consumer instance + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_master = args_instance.copy() + master2.allocate(args_master) + + # Get the status of the instance and restart it if it exists + instance_master1 = master1.exists() + instance_master2 = master2.exists() + + # Remove all the instances + if instance_master1: + master1.delete() + if instance_master2: + master2.delete() + + # Create the instances + master1.create() + master1.open() + master2.create() + master2.open() + + # + # Now prepare the Master-Consumer topology + # + # First Enable replication + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # Initialize the supplier->consumer + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + repl_agreement = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + + if not repl_agreement: + log.fatal("Fail to create a replica agreement") + sys.exit(1) + + log.debug("%s created" % repl_agreement) + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(repl_agreement) + + # Check replication is working fine + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + # Here we have two instances master and consumer + # with replication working. + return TopologyMaster1Master2(master1, master2) + + +def test_ticket47676_init(topology): + """ + It adds + - Objectclass with MAY 'member' + - an entry ('bind_entry') with which we bind to test the 'SELFDN' operation + It deletes the anonymous aci + + """ + + topology.master1.log.info("Add %s that allows 'member' attribute" % OC_NAME) + new_oc = _oc_definition(OC_OID_EXT, OC_NAME, must = MUST, may = MAY) + topology.master1.schema.add_schema('objectClasses', new_oc) + + # entry used to bind with + topology.master1.log.info("Add %s" % BIND_DN) + topology.master1.add_s(Entry((BIND_DN, { + 'objectclass': "top person".split(), + 'sn': BIND_NAME, + 'cn': BIND_NAME, + 'userpassword': BIND_PW}))) + + # enable acl error logging + mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', str(128 + 8192))] # ACL + REPL + topology.master1.modify_s(DN_CONFIG, mod) + topology.master2.modify_s(DN_CONFIG, mod) + + # add dummy entries + for cpt in range(MAX_OTHERS): + name = "%s%d" % (OTHER_NAME, cpt) + topology.master1.add_s(Entry(("cn=%s,%s" % (name, SUFFIX), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + + +def test_ticket47676_skip_oc_at(topology): + ''' + This test ADD an entry on MASTER1 where 47676 is fixed. Then it checks that entry is replicated + on MASTER2 (even if on MASTER2 47676 is NOT fixed). Then update on MASTER2. + If the schema has successfully been pushed, updating Master2 should succeed + ''' + topology.master1.log.info("\n\n######################### ADD ######################\n") + + # bind as 'cn=Directory manager' + topology.master1.log.info("Bind as %s and add the add the entry with specific oc" % DN_DM) + topology.master1.simple_bind_s(DN_DM, PASSWORD) + + # Prepare the entry with multivalued members + entry = Entry(ENTRY_DN) + entry.setValues('objectclass', 'top', 'person', 'OCticket47676') + entry.setValues('sn', ENTRY_NAME) + entry.setValues('cn', ENTRY_NAME) + entry.setValues('postalAddress', 'here') + entry.setValues('postalCode', '1234') + members = [] + for cpt in range(MAX_OTHERS): + name = "%s%d" % (OTHER_NAME, cpt) + members.append("cn=%s,%s" % (name, SUFFIX)) + members.append(BIND_DN) + entry.setValues('member', members) + + topology.master1.log.info("Try to add Add %s should be successful" % ENTRY_DN) + topology.master1.add_s(entry) + + # + # Now check the entry as been replicated + # + topology.master2.simple_bind_s(DN_DM, PASSWORD) + topology.master1.log.info("Try to retrieve %s from Master2" % ENTRY_DN) + loop = 0 + while loop <= 10: + try: + ent = topology.master2.getEntry(ENTRY_DN, ldap.SCOPE_BASE, "(objectclass=*)") + break + except ldap.NO_SUCH_OBJECT: + time.sleep(2) + loop += 1 + assert loop <= 10 + + # Now update the entry on Master2 (as DM because 47676 is possibly not fixed on M2) + topology.master1.log.info("Update %s on M2" % ENTRY_DN) + mod = [(ldap.MOD_REPLACE, 'description', 'test_add')] + topology.master2.modify_s(ENTRY_DN, mod) + + topology.master1.simple_bind_s(DN_DM, PASSWORD) + loop = 0 + while loop <= 10: + ent = topology.master1.getEntry(ENTRY_DN, ldap.SCOPE_BASE, "(objectclass=*)") + if ent.hasAttr('description') and (ent.getValue('description') == 'test_add'): + break + time.sleep(1) + loop += 1 + + assert ent.getValue('description') == 'test_add' + + +def test_ticket47676_reject_action(topology): + + topology.master1.log.info("\n\n######################### REJECT ACTION ######################\n") + + topology.master1.simple_bind_s(DN_DM, PASSWORD) + topology.master2.simple_bind_s(DN_DM, PASSWORD) + + # make master1 to refuse to push the schema if OC_NAME is present in consumer schema + mod = [(ldap.MOD_ADD, 'schemaUpdateObjectclassReject', '%s' % (OC_NAME))] # ACL + REPL + topology.master1.modify_s(REPL_SCHEMA_POLICY_SUPPLIER, mod) + + # Restart is required to take into account that policy + topology.master1.stop(timeout=10) + topology.master1.start(timeout=10) + + # Add a new OC on M1 so that schema CSN will change and M1 will try to push the schema + topology.master1.log.info("Add %s on M1" % OC2_NAME) + new_oc = _oc_definition(OC2_OID_EXT, OC2_NAME, must=MUST, may=MAY) + topology.master1.schema.add_schema('objectClasses', new_oc) + + # Safety checking that the schema has been updated on M1 + topology.master1.log.info("Check %s is in M1" % OC2_NAME) + ent = topology.master1.getEntry(SCHEMA_DN, ldap.SCOPE_BASE, "(objectclass=*)", ["objectclasses"]) + assert ent.hasAttr('objectclasses') + found = False + for objectclass in ent.getValues('objectclasses'): + if str(objectclass).find(OC2_NAME) >= 0: + found = True + break + assert found + + # Do an update of M1 so that M1 will try to push the schema + topology.master1.log.info("Update %s on M1" % ENTRY_DN) + mod = [(ldap.MOD_REPLACE, 'description', 'test_reject')] + topology.master1.modify_s(ENTRY_DN, mod) + + # Check the replication occured and so also M1 attempted to push the schema + topology.master1.log.info("Check updated %s on M2" % ENTRY_DN) + loop = 0 + while loop <= 10: + ent = topology.master2.getEntry(ENTRY_DN, ldap.SCOPE_BASE, "(objectclass=*)", ['description']) + if ent.hasAttr('description') and ent.getValue('description') == 'test_reject': + # update was replicated + break + time.sleep(2) + loop += 1 + assert loop <= 10 + + # Check that the schema has not been pushed + topology.master1.log.info("Check %s is not in M2" % OC2_NAME) + ent = topology.master2.getEntry(SCHEMA_DN, ldap.SCOPE_BASE, "(objectclass=*)", ["objectclasses"]) + assert ent.hasAttr('objectclasses') + found = False + for objectclass in ent.getValues('objectclasses'): + if str(objectclass).find(OC2_NAME) >= 0: + found = True + break + assert not found + + topology.master1.log.info("\n\n######################### NO MORE REJECT ACTION ######################\n") + + # make master1 to do no specific action on OC_NAME + mod = [(ldap.MOD_DELETE, 'schemaUpdateObjectclassReject', '%s' % (OC_NAME))] # ACL + REPL + topology.master1.modify_s(REPL_SCHEMA_POLICY_SUPPLIER, mod) + + # Restart is required to take into account that policy + topology.master1.stop(timeout=10) + topology.master1.start(timeout=10) + + # Do an update of M1 so that M1 will try to push the schema + topology.master1.log.info("Update %s on M1" % ENTRY_DN) + mod = [(ldap.MOD_REPLACE, 'description', 'test_no_more_reject')] + topology.master1.modify_s(ENTRY_DN, mod) + + # Check the replication occured and so also M1 attempted to push the schema + topology.master1.log.info("Check updated %s on M2" % ENTRY_DN) + loop = 0 + while loop <= 10: + ent = topology.master2.getEntry(ENTRY_DN, ldap.SCOPE_BASE, "(objectclass=*)", ['description']) + if ent.hasAttr('description') and ent.getValue('description') == 'test_no_more_reject': + # update was replicated + break + time.sleep(2) + loop += 1 + assert loop <= 10 + + # Check that the schema has been pushed + topology.master1.log.info("Check %s is in M2" % OC2_NAME) + ent = topology.master2.getEntry(SCHEMA_DN, ldap.SCOPE_BASE, "(objectclass=*)", ["objectclasses"]) + assert ent.hasAttr('objectclasses') + found = False + for objectclass in ent.getValues('objectclasses'): + if str(objectclass).find(OC2_NAME) >= 0: + found = True + break + assert found + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47714_test.py b/dirsrvtests/tests/tickets/ticket47714_test.py new file mode 100644 index 0000000..2a7cd0f --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47714_test.py @@ -0,0 +1,242 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +import shutil +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +ACCT_POLICY_CONFIG_DN = ('cn=config,cn=%s,cn=plugins,cn=config' % + PLUGIN_ACCT_POLICY) +ACCT_POLICY_DN = 'cn=Account Inactivation Policy,%s' % SUFFIX +INACTIVITY_LIMIT = '9' +SEARCHFILTER = '(objectclass=*)' + +TEST_USER = 'ticket47714user' +TEST_USER_DN = 'uid=%s,%s' % (TEST_USER, SUFFIX) +TEST_USER_PW = '%s' % TEST_USER + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def _header(topology, label): + topology.standalone.log.info("\n\n###############################################") + topology.standalone.log.info("#######") + topology.standalone.log.info("####### %s" % label) + topology.standalone.log.info("#######") + topology.standalone.log.info("###############################################") + + +def test_ticket47714_init(topology): + """ + 1. Add account policy entry to the DB + 2. Add a test user to the DB + """ + _header(topology, 'Testing Ticket 47714 - [RFE] Update lastLoginTime also in Account Policy plugin if account lockout is based on passwordExpirationTime.') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + log.info("\n######################### Adding Account Policy entry: %s ######################\n" % ACCT_POLICY_DN) + topology.standalone.add_s(Entry((ACCT_POLICY_DN, {'objectclass': "top ldapsubentry extensibleObject accountpolicy".split(), + 'accountInactivityLimit': INACTIVITY_LIMIT}))) + + log.info("\n######################### Adding Test User entry: %s ######################\n" % TEST_USER_DN) + topology.standalone.add_s(Entry((TEST_USER_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': TEST_USER, + 'sn': TEST_USER, + 'givenname': TEST_USER, + 'userPassword': TEST_USER_PW, + 'acctPolicySubentry': ACCT_POLICY_DN}))) + + +def test_ticket47714_run_0(topology): + """ + Check this change has no inpact to the existing functionality. + 1. Set account policy config without the new attr alwaysRecordLoginAttr + 2. Bind as a test user + 3. Bind as the test user again and check the lastLoginTime is updated + 4. Waint longer than the accountInactivityLimit time and bind as the test user, + which should fail with CONSTANT_VIOLATION. + """ + _header(topology, 'Account Policy - No new attr alwaysRecordLoginAttr in config') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + # Modify Account Policy config entry + topology.standalone.modify_s(ACCT_POLICY_CONFIG_DN, [(ldap.MOD_REPLACE, 'alwaysrecordlogin', 'yes'), + (ldap.MOD_REPLACE, 'stateattrname', 'lastLoginTime'), + (ldap.MOD_REPLACE, 'altstateattrname', 'createTimestamp'), + (ldap.MOD_REPLACE, 'specattrname', 'acctPolicySubentry'), + (ldap.MOD_REPLACE, 'limitattrname', 'accountInactivityLimit')]) + + # Enable the plugins + topology.standalone.plugins.enable(name=PLUGIN_ACCT_POLICY) + + topology.standalone.restart(timeout=120) + + log.info("\n######################### Bind as %s ######################\n" % TEST_USER_DN) + try: + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PW) + except ldap.CONSTRAINT_VIOLATION as e: + log.error('CONSTRAINT VIOLATION ' + e.message['desc']) + + time.sleep(2) + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + entry = topology.standalone.search_s(TEST_USER_DN, ldap.SCOPE_BASE, SEARCHFILTER, ['lastLoginTime']) + + lastLoginTime0 = entry[0].lastLoginTime + + log.info("\n######################### Bind as %s again ######################\n" % TEST_USER_DN) + try: + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PW) + except ldap.CONSTRAINT_VIOLATION as e: + log.error('CONSTRAINT VIOLATION ' + e.message['desc']) + + time.sleep(2) + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + entry = topology.standalone.search_s(TEST_USER_DN, ldap.SCOPE_BASE, SEARCHFILTER, ['lastLoginTime']) + + lastLoginTime1 = entry[0].lastLoginTime + + log.info("First lastLoginTime: %s, Second lastLoginTime: %s" % (lastLoginTime0, lastLoginTime1)) + assert lastLoginTime0 < lastLoginTime1 + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + entry = topology.standalone.search_s(ACCT_POLICY_DN, ldap.SCOPE_BASE, SEARCHFILTER) + log.info("\n######################### %s ######################\n" % ACCT_POLICY_CONFIG_DN) + log.info("accountInactivityLimit: %s" % entry[0].accountInactivityLimit) + log.info("\n######################### %s DONE ######################\n" % ACCT_POLICY_CONFIG_DN) + + log.info("\n######################### Bind as %s again to fail ######################\n" % TEST_USER_DN) + try: + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PW) + except ldap.CONSTRAINT_VIOLATION as e: + log.info('CONSTRAINT VIOLATION ' + e.message['desc']) + log.info("%s was successfully inactivated." % TEST_USER_DN) + pass + + +def test_ticket47714_run_1(topology): + """ + Verify a new config attr alwaysRecordLoginAttr + 1. Set account policy config with the new attr alwaysRecordLoginAttr: lastLoginTime + Note: bogus attr is set to stateattrname. + altstateattrname type value is used for checking whether the account is idle or not. + 2. Bind as a test user + 3. Bind as the test user again and check the alwaysRecordLoginAttr: lastLoginTime is updated + """ + _header(topology, 'Account Policy - With new attr alwaysRecordLoginAttr in config') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(TEST_USER_DN, [(ldap.MOD_DELETE, 'lastLoginTime', None)]) + + # Modify Account Policy config entry + topology.standalone.modify_s(ACCT_POLICY_CONFIG_DN, [(ldap.MOD_REPLACE, 'alwaysrecordlogin', 'yes'), + (ldap.MOD_REPLACE, 'stateattrname', 'bogus'), + (ldap.MOD_REPLACE, 'altstateattrname', 'modifyTimestamp'), + (ldap.MOD_REPLACE, 'alwaysRecordLoginAttr', 'lastLoginTime'), + (ldap.MOD_REPLACE, 'specattrname', 'acctPolicySubentry'), + (ldap.MOD_REPLACE, 'limitattrname', 'accountInactivityLimit')]) + + # Enable the plugins + topology.standalone.plugins.enable(name=PLUGIN_ACCT_POLICY) + + topology.standalone.restart(timeout=120) + + log.info("\n######################### Bind as %s ######################\n" % TEST_USER_DN) + try: + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PW) + except ldap.CONSTRAINT_VIOLATION as e: + log.error('CONSTRAINT VIOLATION ' + e.message['desc']) + + time.sleep(1) + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + entry = topology.standalone.search_s(TEST_USER_DN, ldap.SCOPE_BASE, SEARCHFILTER, ['lastLoginTime']) + lastLoginTime0 = entry[0].lastLoginTime + + log.info("\n######################### Bind as %s again ######################\n" % TEST_USER_DN) + try: + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PW) + except ldap.CONSTRAINT_VIOLATION as e: + log.error('CONSTRAINT VIOLATION ' + e.message['desc']) + + time.sleep(1) + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + entry = topology.standalone.search_s(TEST_USER_DN, ldap.SCOPE_BASE, SEARCHFILTER, ['lastLoginTime']) + lastLoginTime1 = entry[0].lastLoginTime + + log.info("First lastLoginTime: %s, Second lastLoginTime: %s" % (lastLoginTime0, lastLoginTime1)) + assert lastLoginTime0 < lastLoginTime1 + + topology.standalone.log.info("ticket47714 was successfully verified.") + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47721_test.py b/dirsrvtests/tests/tickets/ticket47721_test.py new file mode 100644 index 0000000..033fe70 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47721_test.py @@ -0,0 +1,440 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Nov 7, 2013 + +@author: tbordaz +''' +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389._constants import REPLICAROLE_MASTER + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +# +# important part. We can deploy Master1 and Master2 on different versions +# +installation1_prefix = None +installation2_prefix = None + +SCHEMA_DN = "cn=schema" +TEST_REPL_DN = "cn=test_repl, %s" % SUFFIX +OC_NAME = 'OCticket47721' +OC_OID_EXT = 2 +MUST = "(postalAddress $ postalCode)" +MAY = "(member $ street)" + +OC2_NAME = 'OC2ticket47721' +OC2_OID_EXT = 3 +MUST_2 = "(postalAddress $ postalCode)" +MAY_2 = "(member $ street)" + +REPL_SCHEMA_POLICY_CONSUMER = "cn=consumerUpdatePolicy,cn=replSchema,cn=config" +REPL_SCHEMA_POLICY_SUPPLIER = "cn=supplierUpdatePolicy,cn=replSchema,cn=config" + +OTHER_NAME = 'other_entry' +MAX_OTHERS = 10 + +BIND_NAME = 'bind_entry' +BIND_DN = 'cn=%s, %s' % (BIND_NAME, SUFFIX) +BIND_PW = 'password' + +ENTRY_NAME = 'test_entry' +ENTRY_DN = 'cn=%s, %s' % (ENTRY_NAME, SUFFIX) +ENTRY_OC = "top person %s" % OC_NAME + +BASE_OID = "1.2.3.4.5.6.7.8.9.10" + +SLEEP_INTERVAL = 60 + +def _add_custom_at_definition(name='ATticket47721'): + new_at = "( %s-oid NAME '%s' DESC 'test AT ticket 47721' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN ( 'Test 47721' 'user defined' ) )" % (name, name) + return new_at + + +def _chg_std_at_defintion(): + new_at = "( 2.16.840.1.113730.3.1.569 NAME 'cosPriority' DESC 'Netscape defined attribute type' SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 X-ORIGIN 'Netscape Directory Server' )" + return new_at + + +def _add_custom_oc_defintion(name='OCticket47721'): + new_oc = "( %s-oid NAME '%s' DESC 'An group of related automount objects' SUP top STRUCTURAL MUST ou X-ORIGIN 'draft-howard-rfc2307bis' )" % (name, name) + return new_oc + + +def _chg_std_oc_defintion(): + new_oc = "( 5.3.6.1.1.1.2.0 NAME 'trustAccount' DESC 'Sets trust accounts information' SUP top AUXILIARY MUST trustModel MAY ( accessTo $ ou ) X-ORIGIN 'nss_ldap/pam_ldap' )" + return new_oc + + +class TopologyMaster1Master2(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to create a replicated topology for the 'module'. + The replicated topology is MASTER1 <-> Master2. + ''' + global installation1_prefix + global installation2_prefix + + # allocate master1 on a given deployement + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Args for the master1 instance + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_master = args_instance.copy() + master1.allocate(args_master) + + # allocate master1 on a given deployement + master2 = DirSrv(verbose=False) + if installation2_prefix: + args_instance[SER_DEPLOYED_DIR] = installation2_prefix + + # Args for the consumer instance + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_master = args_instance.copy() + master2.allocate(args_master) + + # Get the status of the instance and restart it if it exists + instance_master1 = master1.exists() + instance_master2 = master2.exists() + + # Remove all the instances + if instance_master1: + master1.delete() + if instance_master2: + master2.delete() + + # Create the instances + master1.create() + master1.open() + master2.create() + master2.open() + + # + # Now prepare the Master-Consumer topology + # + # First Enable replication + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # Initialize the supplier->consumer + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + repl_agreement = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + + if not repl_agreement: + log.fatal("Fail to create a replica agreement") + sys.exit(1) + + log.debug("%s created" % repl_agreement) + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(repl_agreement) + + # Check replication is working fine + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + # + # Here we have two instances master and consumer + # with replication working. Either coming from a backup recovery + # or from a fresh (re)init + # Time to return the topology + return TopologyMaster1Master2(master1, master2) + + +def test_ticket47721_init(topology): + """ + It adds + - Objectclass with MAY 'member' + - an entry ('bind_entry') with which we bind to test the 'SELFDN' operation + It deletes the anonymous aci + + """ + + # entry used to bind with + topology.master1.log.info("Add %s" % BIND_DN) + topology.master1.add_s(Entry((BIND_DN, { + 'objectclass': "top person".split(), + 'sn': BIND_NAME, + 'cn': BIND_NAME, + 'userpassword': BIND_PW}))) + + # enable repl error logging + mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', str(8192))] # REPL logging + topology.master1.modify_s(DN_CONFIG, mod) + topology.master2.modify_s(DN_CONFIG, mod) + + # add dummy entries + for cpt in range(MAX_OTHERS): + name = "%s%d" % (OTHER_NAME, cpt) + topology.master1.add_s(Entry(("cn=%s,%s" % (name, SUFFIX), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + + +def test_ticket47721_0(topology): + dn = "cn=%s0,%s" % (OTHER_NAME, SUFFIX) + loop = 0 + ent = None + while loop <= 10: + try: + ent = topology.master2.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)") + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + if ent is None: + assert False + + +def test_ticket47721_1(topology): + log.info('Running test 1...') + #topology.master1.log.info("Attach debugger\n\n") + #time.sleep(30) + + new = _add_custom_at_definition() + topology.master1.log.info("Add (M2) %s " % new) + topology.master2.schema.add_schema('attributetypes', new) + + new = _chg_std_at_defintion() + topology.master1.log.info("Chg (M2) %s " % new) + topology.master2.schema.add_schema('attributetypes', new) + + new = _add_custom_oc_defintion() + topology.master1.log.info("Add (M2) %s " % new) + topology.master2.schema.add_schema('objectClasses', new) + + new = _chg_std_oc_defintion() + topology.master1.log.info("Chg (M2) %s " % new) + topology.master2.schema.add_schema('objectClasses', new) + + mod = [(ldap.MOD_REPLACE, 'description', 'Hello world 1')] + dn = "cn=%s0,%s" % (OTHER_NAME, SUFFIX) + topology.master2.modify_s(dn, mod) + + loop = 0 + while loop <= 10: + try: + ent = topology.master1.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)") + if ent.hasAttr('description') and (ent.getValue('description') == 'Hello world 1'): + break + except ldap.NO_SUCH_OBJECT: + loop += 1 + time.sleep(1) + assert loop <= 10 + + time.sleep(2) + schema_csn_master1 = topology.master1.schema.get_schema_csn() + schema_csn_master2 = topology.master2.schema.get_schema_csn() + log.debug('Master 1 schemaCSN: %s' % schema_csn_master1) + log.debug('Master 2 schemaCSN: %s' % schema_csn_master2) + + +def test_ticket47721_2(topology): + log.info('Running test 2...') + + mod = [(ldap.MOD_REPLACE, 'description', 'Hello world 2')] + dn = "cn=%s0,%s" % (OTHER_NAME, SUFFIX) + topology.master1.modify_s(dn, mod) + + loop = 0 + while loop <= 10: + try: + ent = topology.master2.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)") + if ent.hasAttr('description') and (ent.getValue('description') == 'Hello world 2'): + break + except ldap.NO_SUCH_OBJECT: + loop += 1 + time.sleep(1) + assert loop <= 10 + + time.sleep(2) + schema_csn_master1 = topology.master1.schema.get_schema_csn() + schema_csn_master2 = topology.master2.schema.get_schema_csn() + log.debug('Master 1 schemaCSN: %s' % schema_csn_master1) + log.debug('Master 2 schemaCSN: %s' % schema_csn_master2) + if schema_csn_master1 != schema_csn_master2: + # We need to give the server a little more time, then check it again + log.info('Schema CSNs are not in sync yet: m1 (%s) vs m2 (%s), wait a little...' + % (schema_csn_master1, schema_csn_master2)) + time.sleep(SLEEP_INTERVAL) + schema_csn_master1 = topology.master1.schema.get_schema_csn() + schema_csn_master2 = topology.master2.schema.get_schema_csn() + + assert schema_csn_master1 is not None + assert schema_csn_master1 == schema_csn_master2 + + +def test_ticket47721_3(topology): + ''' + Check that the supplier can update its schema from consumer schema + Update M2 schema, then trigger a replication M1->M2 + ''' + log.info('Running test 3...') + + # stop RA M2->M1, so that M1 can only learn being a supplier + ents = topology.master2.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + topology.master2.agreement.pause(ents[0].dn) + + new = _add_custom_at_definition('ATtest3') + topology.master1.log.info("Update schema (M2) %s " % new) + topology.master2.schema.add_schema('attributetypes', new) + + new = _add_custom_oc_defintion('OCtest3') + topology.master1.log.info("Update schema (M2) %s " % new) + topology.master2.schema.add_schema('objectClasses', new) + + mod = [(ldap.MOD_REPLACE, 'description', 'Hello world 3')] + dn = "cn=%s0,%s" % (OTHER_NAME, SUFFIX) + topology.master1.modify_s(dn, mod) + + loop = 0 + while loop <= 10: + try: + ent = topology.master2.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)") + if ent.hasAttr('description') and (ent.getValue('description') == 'Hello world 3'): + break + except ldap.NO_SUCH_OBJECT: + loop += 1 + time.sleep(1) + assert loop <= 10 + + time.sleep(2) + schema_csn_master1 = topology.master1.schema.get_schema_csn() + schema_csn_master2 = topology.master2.schema.get_schema_csn() + log.debug('Master 1 schemaCSN: %s' % schema_csn_master1) + log.debug('Master 2 schemaCSN: %s' % schema_csn_master2) + if schema_csn_master1 == schema_csn_master2: + # We need to give the server a little more time, then check it again + log.info('Schema CSNs are not in sync yet: m1 (%s) vs m2 (%s), wait a little...' + % (schema_csn_master1, schema_csn_master2)) + time.sleep(SLEEP_INTERVAL) + schema_csn_master1 = topology.master1.schema.get_schema_csn() + schema_csn_master2 = topology.master2.schema.get_schema_csn() + + assert schema_csn_master1 is not None + # schema csn on M2 is larger that on M1. M1 only took the new definitions + assert schema_csn_master1 != schema_csn_master2 + + +def test_ticket47721_4(topology): + ''' + Here M2->M1 agreement is disabled. + with test_ticket47721_3, M1 schema and M2 should be identical BUT + the nsschemacsn is M2>M1. But as the RA M2->M1 is disabled, M1 keeps its schemacsn. + Update schema on M2 (nsschemaCSN update), update M2. Check they have the same schemacsn + ''' + log.info('Running test 4...') + + new = _add_custom_at_definition('ATtest4') + topology.master1.log.info("Update schema (M1) %s " % new) + topology.master1.schema.add_schema('attributetypes', new) + + new = _add_custom_oc_defintion('OCtest4') + topology.master1.log.info("Update schema (M1) %s " % new) + topology.master1.schema.add_schema('objectClasses', new) + + topology.master1.log.info("trigger replication M1->M2: to update the schema") + mod = [(ldap.MOD_REPLACE, 'description', 'Hello world 4')] + dn = "cn=%s0,%s" % (OTHER_NAME, SUFFIX) + topology.master1.modify_s(dn, mod) + + loop = 0 + while loop <= 10: + try: + ent = topology.master2.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)") + if ent.hasAttr('description') and (ent.getValue('description') == 'Hello world 4'): + break + except ldap.NO_SUCH_OBJECT: + loop += 1 + time.sleep(1) + assert loop <= 10 + + topology.master1.log.info("trigger replication M1->M2: to push the schema") + mod = [(ldap.MOD_REPLACE, 'description', 'Hello world 5')] + dn = "cn=%s0,%s" % (OTHER_NAME, SUFFIX) + topology.master1.modify_s(dn, mod) + + loop = 0 + while loop <= 10: + try: + ent = topology.master2.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)") + if ent.hasAttr('description') and (ent.getValue('description') == 'Hello world 5'): + break + except ldap.NO_SUCH_OBJECT: + loop += 1 + time.sleep(1) + assert loop <= 10 + + time.sleep(2) + schema_csn_master1 = topology.master1.schema.get_schema_csn() + schema_csn_master2 = topology.master2.schema.get_schema_csn() + log.debug('Master 1 schemaCSN: %s' % schema_csn_master1) + log.debug('Master 2 schemaCSN: %s' % schema_csn_master2) + if schema_csn_master1 != schema_csn_master2: + # We need to give the server a little more time, then check it again + log.info('Schema CSNs are incorrectly in sync, wait a little...') + time.sleep(SLEEP_INTERVAL) + schema_csn_master1 = topology.master1.schema.get_schema_csn() + schema_csn_master2 = topology.master2.schema.get_schema_csn() + + assert schema_csn_master1 is not None + assert schema_csn_master1 == schema_csn_master2 + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47781_test.py b/dirsrvtests/tests/tickets/ticket47781_test.py new file mode 100644 index 0000000..9001ab4 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47781_test.py @@ -0,0 +1,171 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +installation_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47781(topology): + """ + Testing for a deadlock after doing an online import of an LDIF with + replication data. The replication agreement should be invalid. + """ + + log.info('Testing Ticket 47781 - Testing for deadlock after importing LDIF with replication data') + + # + # Setup Replication + # + log.info('Setting up replication...') + topology.standalone.replica.enableReplication(suffix=DEFAULT_SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_1) + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + # The agreement should point to a server that does NOT exist (invalid port) + repl_agreement = topology.standalone.agreement.create(suffix=DEFAULT_SUFFIX, + host=topology.standalone.host, + port=5555, + properties=properties) + + # + # add two entries + # + log.info('Adding two entries...') + try: + topology.standalone.add_s(Entry(('cn=entry1,dc=example,dc=com', { + 'objectclass': 'top person'.split(), + 'sn': 'user', + 'cn': 'entry1'}))) + except ldap.LDAPError as e: + log.error('Failed to add entry 1: ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry(('cn=entry2,dc=example,dc=com', { + 'objectclass': 'top person'.split(), + 'sn': 'user', + 'cn': 'entry2'}))) + except ldap.LDAPError as e: + log.error('Failed to add entry 2: ' + e.message['desc']) + assert False + + # + # export the replication ldif + # + log.info('Exporting replication ldif...') + args = {EXPORT_REPL_INFO: True} + exportTask = Tasks(topology.standalone) + try: + exportTask.exportLDIF(DEFAULT_SUFFIX, None, "/tmp/export.ldif", args) + except ValueError: + assert False + + # + # Restart the server + # + log.info('Restarting server...') + topology.standalone.stop(timeout=5) + topology.standalone.start(timeout=5) + + # + # Import the ldif + # + log.info('Import replication LDIF file...') + importTask = Tasks(topology.standalone) + args = {TASK_WAIT: True} + try: + importTask.importLDIF(DEFAULT_SUFFIX, None, "/tmp/export.ldif", args) + os.remove("/tmp/export.ldif") + except ValueError: + os.remove("/tmp/export.ldif") + assert False + + # + # Search for tombstones - we should not hang/timeout + # + log.info('Search for tombstone entries(should find one and not hang)...') + topology.standalone.set_option(ldap.OPT_NETWORK_TIMEOUT, 5) + topology.standalone.set_option(ldap.OPT_TIMEOUT, 5) + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, 'objectclass=nsTombstone') + if not entries: + log.fatal('Search failed to find any entries.') + assert PR_False + except ldap.LDAPError as e: + log.fatal('Search failed: ' + e.message['desc']) + assert PR_False + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47787_test.py b/dirsrvtests/tests/tickets/ticket47787_test.py new file mode 100644 index 0000000..443e223 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47787_test.py @@ -0,0 +1,537 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on April 14, 2014 + +@author: tbordaz +''' +import os +import sys +import time +import ldap +import logging +import pytest +import re +from lib389 import DirSrv, Entry, tools, NoSuchEntryError +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389._constants import REPLICAROLE_MASTER + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +# +# important part. We can deploy Master1 and Master2 on different versions +# +installation1_prefix = None +installation2_prefix = None + +# set this flag to False so that it will assert on failure _status_entry_both_server +DEBUG_FLAG = False + +TEST_REPL_DN = "cn=test_repl, %s" % SUFFIX + +STAGING_CN = "staged user" +PRODUCTION_CN = "accounts" +EXCEPT_CN = "excepts" + +STAGING_DN = "cn=%s,%s" % (STAGING_CN, SUFFIX) +PRODUCTION_DN = "cn=%s,%s" % (PRODUCTION_CN, SUFFIX) +PROD_EXCEPT_DN = "cn=%s,%s" % (EXCEPT_CN, PRODUCTION_DN) + +STAGING_PATTERN = "cn=%s*,%s" % (STAGING_CN[:2], SUFFIX) +PRODUCTION_PATTERN = "cn=%s*,%s" % (PRODUCTION_CN[:2], SUFFIX) +BAD_STAGING_PATTERN = "cn=bad*,%s" % (SUFFIX) +BAD_PRODUCTION_PATTERN = "cn=bad*,%s" % (SUFFIX) + +BIND_CN = "bind_entry" +BIND_DN = "cn=%s,%s" % (BIND_CN, SUFFIX) +BIND_PW = "password" + +NEW_ACCOUNT = "new_account" +MAX_ACCOUNTS = 20 + +CONFIG_MODDN_ACI_ATTR = "nsslapd-moddn-aci" + + +class TopologyMaster1Master2(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to create a replicated topology for the 'module'. + The replicated topology is MASTER1 <-> Master2. + ''' + global installation1_prefix + global installation2_prefix + + # allocate master1 on a given deployement + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Args for the master1 instance + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_master = args_instance.copy() + master1.allocate(args_master) + + # allocate master1 on a given deployement + master2 = DirSrv(verbose=False) + if installation2_prefix: + args_instance[SER_DEPLOYED_DIR] = installation2_prefix + + # Args for the consumer instance + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_master = args_instance.copy() + master2.allocate(args_master) + + # Get the status of the instance and restart it if it exists + instance_master1 = master1.exists() + instance_master2 = master2.exists() + + # Remove all the instances + if instance_master1: + master1.delete() + if instance_master2: + master2.delete() + + # Create the instances + master1.create() + master1.open() + master2.create() + master2.open() + + # + # Now prepare the Master-Consumer topology + # + # First Enable replication + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # Initialize the supplier->consumer + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + repl_agreement = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + + if not repl_agreement: + log.fatal("Fail to create a replica agreement") + sys.exit(1) + + log.debug("%s created" % repl_agreement) + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(repl_agreement) + + # Check replication is working fine + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + # Here we have two instances master and consumer + # with replication working. + return TopologyMaster1Master2(master1, master2) + + +def _bind_manager(server): + server.log.info("Bind as %s " % DN_DM) + server.simple_bind_s(DN_DM, PASSWORD) + + +def _bind_normal(server): + server.log.info("Bind as %s " % BIND_DN) + server.simple_bind_s(BIND_DN, BIND_PW) + + +def _header(topology, label): + topology.master1.log.info("\n\n###############################################") + topology.master1.log.info("#######") + topology.master1.log.info("####### %s" % label) + topology.master1.log.info("#######") + topology.master1.log.info("###############################################") + + +def _status_entry_both_server(topology, name=None, desc=None, debug=True): + if not name: + return + topology.master1.log.info("\n\n######################### Tombstone on M1 ######################\n") + attr = 'description' + found = False + attempt = 0 + while not found and attempt < 10: + ent_m1 = _find_tombstone(topology.master1, SUFFIX, 'sn', name) + if attr in ent_m1.getAttrs(): + found = True + else: + time.sleep(1) + attempt = attempt + 1 + assert ent_m1 + + topology.master1.log.info("\n\n######################### Tombstone on M2 ######################\n") + ent_m2 = _find_tombstone(topology.master2, SUFFIX, 'sn', name) + assert ent_m2 + + topology.master1.log.info("\n\n######################### Description ######################\n%s\n" % desc) + topology.master1.log.info("M1 only\n") + for attr in ent_m1.getAttrs(): + + if not debug: + assert attr in ent_m2.getAttrs() + + if not attr in ent_m2.getAttrs(): + topology.master1.log.info(" %s" % attr) + for val in ent_m1.getValues(attr): + topology.master1.log.info(" %s" % val) + + topology.master1.log.info("M2 only\n") + for attr in ent_m2.getAttrs(): + + if not debug: + assert attr in ent_m1.getAttrs() + + if not attr in ent_m1.getAttrs(): + topology.master1.log.info(" %s" % attr) + for val in ent_m2.getValues(attr): + topology.master1.log.info(" %s" % val) + + topology.master1.log.info("M1 differs M2\n") + + if not debug: + assert ent_m1.dn == ent_m2.dn + + if ent_m1.dn != ent_m2.dn: + topology.master1.log.info(" M1[dn] = %s\n M2[dn] = %s" % (ent_m1.dn, ent_m2.dn)) + + for attr1 in ent_m1.getAttrs(): + if attr1 in ent_m2.getAttrs(): + for val1 in ent_m1.getValues(attr1): + found = False + for val2 in ent_m2.getValues(attr1): + if val1 == val2: + found = True + break + + if not debug: + assert found + + if not found: + topology.master1.log.info(" M1[%s] = %s" % (attr1, val1)) + + for attr2 in ent_m2.getAttrs(): + if attr2 in ent_m1.getAttrs(): + for val2 in ent_m2.getValues(attr2): + found = False + for val1 in ent_m1.getValues(attr2): + if val2 == val1: + found = True + break + + if not debug: + assert found + + if not found: + topology.master1.log.info(" M2[%s] = %s" % (attr2, val2)) + + +def _pause_RAs(topology): + topology.master1.log.info("\n\n######################### Pause RA M1<->M2 ######################\n") + ents = topology.master1.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + topology.master1.agreement.pause(ents[0].dn) + + ents = topology.master2.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + topology.master2.agreement.pause(ents[0].dn) + + +def _resume_RAs(topology): + topology.master1.log.info("\n\n######################### resume RA M1<->M2 ######################\n") + ents = topology.master1.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + topology.master1.agreement.resume(ents[0].dn) + + ents = topology.master2.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + topology.master2.agreement.resume(ents[0].dn) + + +def _find_tombstone(instance, base, attr, value): + # + # we can not use a filter with a (&(objeclass=nsTombstone)(sn=name)) because + # tombstone are not index in 'sn' so 'sn=name' will return NULL + # and even if tombstone are indexed for objectclass the '&' will set + # the candidate list to NULL + # + filt = '(objectclass=%s)' % REPLICA_OC_TOMBSTONE + ents = instance.search_s(base, ldap.SCOPE_SUBTREE, filt) + #found = False + for ent in ents: + if ent.hasAttr(attr): + for val in ent.getValues(attr): + if val == value: + instance.log.debug("tombstone found: %r" % ent) + return ent + return None + + +def _delete_entry(instance, entry_dn, name): + instance.log.info("\n\n######################### DELETE %s (M1) ######################\n" % name) + + # delete the entry + instance.delete_s(entry_dn) + assert _find_tombstone(instance, SUFFIX, 'sn', name) is not None + + +def _mod_entry(instance, entry_dn, attr, value): + instance.log.info("\n\n######################### MOD %s (M2) ######################\n" % entry_dn) + mod = [(ldap.MOD_REPLACE, attr, value)] + instance.modify_s(entry_dn, mod) + + +def _modrdn_entry(instance=None, entry_dn=None, new_rdn=None, del_old=0, new_superior=None): + assert instance is not None + assert entry_dn is not None + + if not new_rdn: + pattern = 'cn=(.*),(.*)' + rdnre = re.compile(pattern) + match = rdnre.match(entry_dn) + old_value = match.group(1) + new_rdn_val = "%s_modrdn" % old_value + new_rdn = "cn=%s" % new_rdn_val + + instance.log.info("\n\n######################### MODRDN %s (M2) ######################\n" % new_rdn) + if new_superior: + instance.rename_s(entry_dn, new_rdn, newsuperior=new_superior, delold=del_old) + else: + instance.rename_s(entry_dn, new_rdn, delold=del_old) + + +def _check_entry_exists(instance, entry_dn): + loop = 0 + ent = None + while loop <= 10: + try: + ent = instance.getEntry(entry_dn, ldap.SCOPE_BASE, "(objectclass=*)") + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + if ent is None: + assert False + + +def _check_mod_received(instance, base, filt, attr, value): + instance.log.info("\n\n######################### Check MOD replicated on %s ######################\n" % instance.serverid) + loop = 0 + while loop <= 10: + ent = instance.getEntry(base, ldap.SCOPE_SUBTREE, filt) + if ent.hasAttr(attr) and ent.getValue(attr) == value: + break + time.sleep(1) + loop += 1 + assert loop <= 10 + + +def _check_replication(topology, entry_dn): + # prepare the filter to retrieve the entry + filt = entry_dn.split(',')[0] + + topology.master1.log.info("\n######################### Check replicat M1->M2 ######################\n") + loop = 0 + while loop <= 10: + attr = 'description' + value = 'test_value_%d' % loop + mod = [(ldap.MOD_REPLACE, attr, value)] + topology.master1.modify_s(entry_dn, mod) + _check_mod_received(topology.master2, SUFFIX, filt, attr, value) + loop += 1 + + topology.master1.log.info("\n######################### Check replicat M2->M1 ######################\n") + loop = 0 + while loop <= 10: + attr = 'description' + value = 'test_value_%d' % loop + mod = [(ldap.MOD_REPLACE, attr, value)] + topology.master2.modify_s(entry_dn, mod) + _check_mod_received(topology.master1, SUFFIX, filt, attr, value) + loop += 1 + + +def test_ticket47787_init(topology): + """ + Creates + - a staging DIT + - a production DIT + - add accounts in staging DIT + + """ + + topology.master1.log.info("\n\n######################### INITIALIZATION ######################\n") + + # entry used to bind with + topology.master1.log.info("Add %s" % BIND_DN) + topology.master1.add_s(Entry((BIND_DN, { + 'objectclass': "top person".split(), + 'sn': BIND_CN, + 'cn': BIND_CN, + 'userpassword': BIND_PW}))) + + # DIT for staging + topology.master1.log.info("Add %s" % STAGING_DN) + topology.master1.add_s(Entry((STAGING_DN, { + 'objectclass': "top organizationalRole".split(), + 'cn': STAGING_CN, + 'description': "staging DIT"}))) + + # DIT for production + topology.master1.log.info("Add %s" % PRODUCTION_DN) + topology.master1.add_s(Entry((PRODUCTION_DN, { + 'objectclass': "top organizationalRole".split(), + 'cn': PRODUCTION_CN, + 'description': "production DIT"}))) + + # enable replication error logging + mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '8192')] + topology.master1.modify_s(DN_CONFIG, mod) + topology.master2.modify_s(DN_CONFIG, mod) + + # add dummy entries in the staging DIT + for cpt in range(MAX_ACCOUNTS): + name = "%s%d" % (NEW_ACCOUNT, cpt) + topology.master1.add_s(Entry(("cn=%s,%s" % (name, STAGING_DN), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + + +def test_ticket47787_2(topology): + ''' + Disable replication so that updates are not replicated + Delete an entry on M1. Modrdn it on M2 (chg rdn + delold=0 + same superior). + update a test entry on M2 + Reenable the RA. + checks that entry was deleted on M2 (with the modified RDN) + checks that test entry was replicated on M1 (replication M2->M1 not broken by modrdn) + ''' + + _header(topology, "test_ticket47787_2") + _bind_manager(topology.master1) + _bind_manager(topology.master2) + + #entry to test the replication is still working + name = "%s%d" % (NEW_ACCOUNT, MAX_ACCOUNTS - 1) + test_rdn = "cn=%s" % (name) + testentry_dn = "%s,%s" % (test_rdn, STAGING_DN) + + name = "%s%d" % (NEW_ACCOUNT, MAX_ACCOUNTS - 2) + test2_rdn = "cn=%s" % (name) + testentry2_dn = "%s,%s" % (test2_rdn, STAGING_DN) + + # value of updates to test the replication both ways + attr = 'description' + value = 'test_ticket47787_2' + + # entry for the modrdn + name = "%s%d" % (NEW_ACCOUNT, 1) + rdn = "cn=%s" % (name) + entry_dn = "%s,%s" % (rdn, STAGING_DN) + + # created on M1, wait the entry exists on M2 + _check_entry_exists(topology.master2, entry_dn) + _check_entry_exists(topology.master2, testentry_dn) + + _pause_RAs(topology) + + # Delete 'entry_dn' on M1. + # dummy update is only have a first CSN before the DEL + # else the DEL will be in min_csn RUV and make diagnostic a bit more complex + _mod_entry(topology.master1, testentry2_dn, attr, 'dummy') + _delete_entry(topology.master1, entry_dn, name) + _mod_entry(topology.master1, testentry2_dn, attr, value) + + time.sleep(1) # important to have MOD.csn != DEL.csn + + # MOD 'entry_dn' on M1. + # dummy update is only have a first CSN before the MOD entry_dn + # else the DEL will be in min_csn RUV and make diagnostic a bit more complex + _mod_entry(topology.master2, testentry_dn, attr, 'dummy') + _mod_entry(topology.master2, entry_dn, attr, value) + _mod_entry(topology.master2, testentry_dn, attr, value) + + _resume_RAs(topology) + + topology.master1.log.info("\n\n######################### Check DEL replicated on M2 ######################\n") + loop = 0 + while loop <= 10: + ent = _find_tombstone(topology.master2, SUFFIX, 'sn', name) + if ent: + break + time.sleep(1) + loop += 1 + assert loop <= 10 + assert ent + + # the following checks are not necessary + # as this bug is only for failing replicated MOD (entry_dn) on M1 + #_check_mod_received(topology.master1, SUFFIX, "(%s)" % (test_rdn), attr, value) + #_check_mod_received(topology.master2, SUFFIX, "(%s)" % (test2_rdn), attr, value) + # + #_check_replication(topology, testentry_dn) + + _status_entry_both_server(topology, name=name, desc="DEL M1 - MOD M2", debug=DEBUG_FLAG) + + topology.master1.log.info("\n\n######################### Check MOD replicated on M1 ######################\n") + loop = 0 + while loop <= 10: + ent = _find_tombstone(topology.master1, SUFFIX, 'sn', name) + if ent: + break + time.sleep(1) + loop += 1 + assert loop <= 10 + assert ent + assert ent.hasAttr(attr) + assert ent.getValue(attr) == value + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47808_test.py b/dirsrvtests/tests/tickets/ticket47808_test.py new file mode 100644 index 0000000..09a9ffa --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47808_test.py @@ -0,0 +1,148 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +ATTRIBUTE_UNIQUENESS_PLUGIN = 'cn=attribute uniqueness,cn=plugins,cn=config' +ENTRY_NAME = 'test_entry' + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47808_run(topology): + """ + It enables attribute uniqueness plugin with sn as a unique attribute + Add an entry 1 with sn = ENTRY_NAME + Add an entry 2 with sn = ENTRY_NAME + If the second add does not crash the server and the following search found none, + the bug is fixed. + """ + + # bind as directory manager + topology.standalone.log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + topology.standalone.log.info("\n\n######################### SETUP ATTR UNIQ PLUGIN ######################\n") + + # enable attribute uniqueness plugin + mod = [(ldap.MOD_REPLACE, 'nsslapd-pluginEnabled', 'on'), (ldap.MOD_REPLACE, 'nsslapd-pluginarg0', 'sn'), (ldap.MOD_REPLACE, 'nsslapd-pluginarg1', SUFFIX)] + topology.standalone.modify_s(ATTRIBUTE_UNIQUENESS_PLUGIN, mod) + + topology.standalone.log.info("\n\n######################### ADD USER 1 ######################\n") + + # Prepare entry 1 + entry_name = '%s 1' % (ENTRY_NAME) + entry_dn_1 = 'cn=%s, %s' % (entry_name, SUFFIX) + entry_1 = Entry(entry_dn_1) + entry_1.setValues('objectclass', 'top', 'person') + entry_1.setValues('sn', ENTRY_NAME) + entry_1.setValues('cn', entry_name) + topology.standalone.log.info("Try to add Add %s: %r" % (entry_1, entry_1)) + topology.standalone.add_s(entry_1) + + topology.standalone.log.info("\n\n######################### Restart Server ######################\n") + topology.standalone.stop(timeout=10) + topology.standalone.start(timeout=10) + + topology.standalone.log.info("\n\n######################### ADD USER 2 ######################\n") + + # Prepare entry 2 having the same sn, which crashes the server + entry_name = '%s 2' % (ENTRY_NAME) + entry_dn_2 = 'cn=%s, %s' % (entry_name, SUFFIX) + entry_2 = Entry(entry_dn_2) + entry_2.setValues('objectclass', 'top', 'person') + entry_2.setValues('sn', ENTRY_NAME) + entry_2.setValues('cn', entry_name) + topology.standalone.log.info("Try to add Add %s: %r" % (entry_2, entry_2)) + try: + topology.standalone.add_s(entry_2) + except: + topology.standalone.log.warn("Adding %s failed" % entry_dn_2) + pass + + topology.standalone.log.info("\n\n######################### IS SERVER UP? ######################\n") + ents = topology.standalone.search_s(entry_dn_1, ldap.SCOPE_BASE, '(objectclass=*)') + assert len(ents) == 1 + topology.standalone.log.info("Yes, it's up.") + + topology.standalone.log.info("\n\n######################### CHECK USER 2 NOT ADDED ######################\n") + topology.standalone.log.info("Try to search %s" % entry_dn_2) + try: + ents = topology.standalone.search_s(entry_dn_2, ldap.SCOPE_BASE, '(objectclass=*)') + except ldap.NO_SUCH_OBJECT: + topology.standalone.log.info("Found none") + + topology.standalone.log.info("\n\n######################### DELETE USER 1 ######################\n") + + topology.standalone.log.info("Try to delete %s " % entry_dn_1) + topology.standalone.delete_s(entry_dn_1) + log.info('Testcase PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47815_test.py b/dirsrvtests/tests/tickets/ticket47815_test.py new file mode 100644 index 0000000..5f15dc8 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47815_test.py @@ -0,0 +1,163 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47815(topology): + """ + Test betxn plugins reject an invalid option, and make sure that the rejected entry + is not in the entry cache. + + Enable memberOf, automember, and retrocl plugins + Add the automember config entry + Add the automember group + Add a user that will be rejected by a betxn plugin - result error 53 + Attempt the same add again, and it should result in another error 53 (not error 68) + """ + result = 0 + result2 = 0 + + log.info('Testing Ticket 47815 - Add entries that should be rejected by the betxn plugins, and are not left in the entry cache') + + # Enabled the plugins + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.enable(name=PLUGIN_AUTOMEMBER) + topology.standalone.plugins.enable(name=PLUGIN_RETRO_CHANGELOG) + + # configure automember config entry + log.info('Adding automember config') + try: + topology.standalone.add_s(Entry(('cn=group cfg,cn=Auto Membership Plugin,cn=plugins,cn=config', { + 'objectclass': 'top autoMemberDefinition'.split(), + 'autoMemberScope': 'dc=example,dc=com', + 'autoMemberFilter': 'cn=user', + 'autoMemberDefaultGroup': 'cn=group,dc=example,dc=com', + 'autoMemberGroupingAttr': 'member:dn', + 'cn': 'group cfg'}))) + except: + log.error('Failed to add automember config') + exit(1) + + topology.standalone.stop(timeout=120) + time.sleep(1) + topology.standalone.start(timeout=120) + time.sleep(3) + + # need to reopen a connection toward the instance + topology.standalone.open() + + # add automember group + log.info('Adding automember group') + try: + topology.standalone.add_s(Entry(('cn=group,dc=example,dc=com', { + 'objectclass': 'top groupOfNames'.split(), + 'cn': 'group'}))) + except: + log.error('Failed to add automember group') + exit(1) + + # add user that should result in an error 53 + log.info('Adding invalid entry') + + try: + topology.standalone.add_s(Entry(('cn=user,dc=example,dc=com', { + 'objectclass': 'top person'.split(), + 'sn': 'user', + 'cn': 'user'}))) + except ldap.UNWILLING_TO_PERFORM: + log.debug('Adding invalid entry failed as expected') + result = 53 + except ldap.LDAPError as e: + log.error('Unexpected result ' + e.message['desc']) + assert False + if result == 0: + log.error('Add operation unexpectedly succeeded') + assert False + + # Attempt to add user again, should result in error 53 again + try: + topology.standalone.add_s(Entry(('cn=user,dc=example,dc=com', { + 'objectclass': 'top person'.split(), + 'sn': 'user', + 'cn': 'user'}))) + except ldap.UNWILLING_TO_PERFORM: + log.debug('2nd add of invalid entry failed as expected') + result2 = 53 + except ldap.LDAPError as e: + log.error('Unexpected result ' + e.message['desc']) + assert False + if result2 == 0: + log.error('2nd Add operation unexpectedly succeeded') + assert False + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47819_test.py b/dirsrvtests/tests/tickets/ticket47819_test.py new file mode 100644 index 0000000..2168fe5 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47819_test.py @@ -0,0 +1,287 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +installation_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47819(topology): + """ + Testing precise tombstone purging: + [1] Make sure "nsTombstoneCSN" is added to new tombstones + [2] Make sure an import of a replication ldif adds "nsTombstoneCSN" + to old tombstones + [4] Test fixup task + [3] Make sure tombstone purging works + """ + + log.info('Testing Ticket 47819 - Test precise tombstone purging') + + # + # Setup Replication + # + log.info('Setting up replication...') + topology.standalone.replica.enableReplication(suffix=DEFAULT_SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_1) + + # + # Part 1 create a tombstone entry and make sure nsTombstoneCSN is added + # + log.info('Part 1: Add and then delete an entry to create a tombstone...') + + try: + topology.standalone.add_s(Entry(('cn=entry1,dc=example,dc=com', { + 'objectclass': 'top person'.split(), + 'sn': 'user', + 'cn': 'entry1'}))) + except ldap.LDAPError as e: + log.error('Failed to add entry: ' + e.message['desc']) + assert False + + try: + topology.standalone.delete_s('cn=entry1,dc=example,dc=com') + except ldap.LDAPError as e: + log.error('Failed to delete entry: ' + e.message['desc']) + assert False + + log.info('Search for tombstone entries...') + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, + '(&(nsTombstoneCSN=*)(objectclass=nsTombstone))') + if not entries: + log.fatal('Search failed to the new tombstone(nsTombstoneCSN is probably missing).') + assert False + except ldap.LDAPError as e: + log.fatal('Search failed: ' + e.message['desc']) + assert False + + log.info('Part 1 - passed') + + # + # Part 2 - import ldif with tombstones missing 'nsTombstoneCSN' + # + # First, export the replication ldif, edit the file(remove nstombstonecsn), + # and reimport it. + # + log.info('Part 2: Exporting replication ldif...') + + # Get the the full path and name for our LDIF we will be exporting + ldif_file = "/tmp/export.ldif" + + args = {EXPORT_REPL_INFO: True, + TASK_WAIT: True} + exportTask = Tasks(topology.standalone) + try: + exportTask.exportLDIF(DEFAULT_SUFFIX, None, ldif_file, args) + except ValueError: + assert False + time.sleep(1) + + # open the ldif file, get the lines, then rewrite the file + ldif = open(ldif_file, "r") + lines = ldif.readlines() + ldif.close() + time.sleep(1) + + ldif = open(ldif_file, "w") + for line in lines: + if not line.lower().startswith('nstombstonecsn'): + ldif.write(line) + ldif.close() + time.sleep(1) + + # import the new ldif file + log.info('Import replication LDIF file...') + importTask = Tasks(topology.standalone) + args = {TASK_WAIT: True} + try: + importTask.importLDIF(DEFAULT_SUFFIX, None, ldif_file, args) + os.remove(ldif_file) + except ValueError: + os.remove(ldif_file) + assert False + time.sleep(1) + + # Search for the tombstone again + log.info('Search for tombstone entries...') + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, + '(&(nsTombstoneCSN=*)(objectclass=nsTombstone))') + if not entries: + log.fatal('Search failed to fine the new tombstone(nsTombstoneCSN is probably missing).') + assert False + except ldap.LDAPError as e: + log.fatal('Search failed: ' + e.message['desc']) + assert False + + log.info('Part 2 - passed') + + # + # Part 3 - test fixup task + # + log.info('Part 3: test the fixup task') + + # Run fixup task using the strip option. This removes nsTombstoneCSN + # so we can test if the fixup task works. + args = {TASK_WAIT: True, + TASK_TOMB_STRIP: True} + fixupTombTask = Tasks(topology.standalone) + try: + fixupTombTask.fixupTombstones(DEFAULT_BENAME, args) + except: + assert False + time.sleep(1) + + # Search for tombstones with nsTombstoneCSN - better not find any + log.info('Search for tombstone entries...') + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, + '(&(nsTombstoneCSN=*)(objectclass=nsTombstone))') + if entries: + log.fatal('Search found tombstones with nsTombstoneCSN') + assert False + except ldap.LDAPError as e: + log.fatal('Search failed: ' + e.message['desc']) + assert False + + + # Now run the fixup task + args = {TASK_WAIT: True} + fixupTombTask = Tasks(topology.standalone) + try: + fixupTombTask.fixupTombstones(DEFAULT_BENAME, args) + except: + assert False + time.sleep(1) + + # Search for tombstones with nsTombstoneCSN - better find some + log.info('Search for tombstone entries...') + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, + '(&(nsTombstoneCSN=*)(objectclass=nsTombstone))') + if not entries: + log.fatal('Search did not find any fixed-up tombstones') + assert False + except ldap.LDAPError as e: + log.fatal('Search failed: ' + e.message['desc']) + assert False + + log.info('Part 3 - passed') + + # + # Part 4 - Test tombstone purging + # + log.info('Part 4: test tombstone purging...') + + args = {REPLICA_PRECISE_PURGING: 'on', + REPLICA_PURGE_DELAY: '5', + REPLICA_PURGE_INTERVAL: '5'} + try: + topology.standalone.replica.setProperties(DEFAULT_SUFFIX, None, None, args) + except: + log.fatal('Failed to configure replica') + assert False + + # Wait for the interval to pass + log.info('Wait for tombstone purge interval to pass...') + time.sleep(10) + + # Add an entry to trigger replication + log.info('Perform an update to help trigger tombstone purging...') + try: + topology.standalone.add_s(Entry(('cn=test_entry,dc=example,dc=com', { + 'objectclass': 'top person'.split(), + 'sn': 'user', + 'cn': 'entry1'}))) + except ldap.LDAPError as e: + log.error('Failed to add entry: ' + e.message['desc']) + assert False + + # Wait for the interval to pass again + log.info('Wait for tombstone purge interval to pass again...') + time.sleep(10) + + # search for tombstones, there should be none + log.info('Search for tombstone entries...') + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, + '(&(nsTombstoneCSN=*)(objectclass=nsTombstone))') + if entries: + log.fatal('Search unexpectedly found tombstones') + assert False + except ldap.LDAPError as e: + log.fatal('Search failed: ' + e.message['desc']) + assert False + + log.info('Part 4 - passed') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47823_test.py b/dirsrvtests/tests/tickets/ticket47823_test.py new file mode 100644 index 0000000..bcbf0cc --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47823_test.py @@ -0,0 +1,981 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +import re +import shutil +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + + +log = logging.getLogger(__name__) + +installation_prefix = None + +PROVISIONING_CN = "provisioning" +PROVISIONING_DN = "cn=%s,%s" % (PROVISIONING_CN, SUFFIX) + +ACTIVE_CN = "accounts" +STAGE_CN = "staged users" +DELETE_CN = "deleted users" +ACTIVE_DN = "cn=%s,%s" % (ACTIVE_CN, SUFFIX) +STAGE_DN = "cn=%s,%s" % (STAGE_CN, PROVISIONING_DN) +DELETE_DN = "cn=%s,%s" % (DELETE_CN, PROVISIONING_DN) + +STAGE_USER_CN = "stage guy" +STAGE_USER_DN = "cn=%s,%s" % (STAGE_USER_CN, STAGE_DN) + +ACTIVE_USER_CN = "active guy" +ACTIVE_USER_DN = "cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN) + +ACTIVE_USER_1_CN = "test_1" +ACTIVE_USER_1_DN = "cn=%s,%s" % (ACTIVE_USER_1_CN, ACTIVE_DN) +ACTIVE_USER_2_CN = "test_2" +ACTIVE_USER_2_DN = "cn=%s,%s" % (ACTIVE_USER_2_CN, ACTIVE_DN) + +STAGE_USER_1_CN = ACTIVE_USER_1_CN +STAGE_USER_1_DN = "cn=%s,%s" % (STAGE_USER_1_CN, STAGE_DN) +STAGE_USER_2_CN = ACTIVE_USER_2_CN +STAGE_USER_2_DN = "cn=%s,%s" % (STAGE_USER_2_CN, STAGE_DN) + +ALL_CONFIG_ATTRS = ['nsslapd-pluginarg0', 'nsslapd-pluginarg1', 'nsslapd-pluginarg2', + 'uniqueness-attribute-name', 'uniqueness-subtrees', 'uniqueness-across-all-subtrees'] + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + standalone = DirSrv(verbose=False) + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def _header(topology, label): + topology.standalone.log.info("\n\n###############################################") + topology.standalone.log.info("#######") + topology.standalone.log.info("####### %s" % label) + topology.standalone.log.info("#######") + topology.standalone.log.info("###############################################") + + +def _uniqueness_config_entry(topology, name=None): + if not name: + return None + + ent = topology.standalone.getEntry("cn=%s,%s" % (PLUGIN_ATTR_UNIQUENESS, DN_PLUGIN), ldap.SCOPE_BASE, + "(objectclass=nsSlapdPlugin)", + ['objectClass', 'cn', 'nsslapd-pluginPath', 'nsslapd-pluginInitfunc', + 'nsslapd-pluginType', 'nsslapd-pluginEnabled', 'nsslapd-plugin-depends-on-type', + 'nsslapd-pluginId', 'nsslapd-pluginVersion', 'nsslapd-pluginVendor', + 'nsslapd-pluginDescription']) + ent.dn = "cn=%s uniqueness,%s" % (name, DN_PLUGIN) + return ent + + +def _build_config(topology, attr_name='cn', subtree_1=None, subtree_2=None, type_config='old', across_subtrees=False): + assert topology + assert attr_name + assert subtree_1 + + if type_config == 'old': + # enable the 'cn' uniqueness on Active + config = _uniqueness_config_entry(topology, attr_name) + config.setValue('nsslapd-pluginarg0', attr_name) + config.setValue('nsslapd-pluginarg1', subtree_1) + if subtree_2: + config.setValue('nsslapd-pluginarg2', subtree_2) + else: + # prepare the config entry + config = _uniqueness_config_entry(topology, attr_name) + config.setValue('uniqueness-attribute-name', attr_name) + config.setValue('uniqueness-subtrees', subtree_1) + if subtree_2: + config.setValue('uniqueness-subtrees', subtree_2) + if across_subtrees: + config.setValue('uniqueness-across-all-subtrees', 'on') + return config + + +def _active_container_invalid_cfg_add(topology): + ''' + Check uniqueness is not enforced with ADD (invalid config) + ''' + topology.standalone.add_s(Entry((ACTIVE_USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_1_CN, + 'cn': ACTIVE_USER_1_CN}))) + + topology.standalone.add_s(Entry((ACTIVE_USER_2_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_2_CN, + 'cn': [ACTIVE_USER_1_CN, ACTIVE_USER_2_CN]}))) + + topology.standalone.delete_s(ACTIVE_USER_1_DN) + topology.standalone.delete_s(ACTIVE_USER_2_DN) + + +def _active_container_add(topology, type_config='old'): + ''' + Check uniqueness in a single container (Active) + Add an entry with a given 'cn', then check we can not add an entry with the same 'cn' value + + ''' + config = _build_config(topology, attr_name='cn', subtree_1=ACTIVE_DN, subtree_2=None, type_config=type_config, across_subtrees=False) + + # remove the 'cn' uniqueness entry + try: + topology.standalone.delete_s(config.dn) + + except ldap.NO_SUCH_OBJECT: + pass + topology.standalone.restart(timeout=120) + + topology.standalone.log.info('Uniqueness not enforced: create the entries') + + topology.standalone.add_s(Entry((ACTIVE_USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_1_CN, + 'cn': ACTIVE_USER_1_CN}))) + + topology.standalone.add_s(Entry((ACTIVE_USER_2_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_2_CN, + 'cn': [ACTIVE_USER_1_CN, ACTIVE_USER_2_CN]}))) + + topology.standalone.delete_s(ACTIVE_USER_1_DN) + topology.standalone.delete_s(ACTIVE_USER_2_DN) + + + topology.standalone.log.info('Uniqueness enforced: checks second entry is rejected') + + # enable the 'cn' uniqueness on Active + topology.standalone.add_s(config) + topology.standalone.restart(timeout=120) + topology.standalone.add_s(Entry((ACTIVE_USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_1_CN, + 'cn': ACTIVE_USER_1_CN}))) + + try: + topology.standalone.add_s(Entry((ACTIVE_USER_2_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_2_CN, + 'cn': [ACTIVE_USER_1_CN, ACTIVE_USER_2_CN]}))) + except ldap.CONSTRAINT_VIOLATION: + # yes it is expected + pass + + # cleanup the stuff now + topology.standalone.delete_s(config.dn) + topology.standalone.delete_s(ACTIVE_USER_1_DN) + + +def _active_container_mod(topology, type_config='old'): + ''' + Check uniqueness in a single container (active) + Add and entry with a given 'cn', then check we can not modify an entry with the same 'cn' value + + ''' + + config = _build_config(topology, attr_name='cn', subtree_1=ACTIVE_DN, subtree_2=None, type_config=type_config, across_subtrees=False) + + # enable the 'cn' uniqueness on Active + topology.standalone.add_s(config) + topology.standalone.restart(timeout=120) + + topology.standalone.log.info('Uniqueness enforced: checks MOD ADD entry is rejected') + topology.standalone.add_s(Entry((ACTIVE_USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_1_CN, + 'cn': ACTIVE_USER_1_CN}))) + + topology.standalone.add_s(Entry((ACTIVE_USER_2_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_2_CN, + 'cn': ACTIVE_USER_2_CN}))) + + try: + topology.standalone.modify_s(ACTIVE_USER_2_DN, [(ldap.MOD_ADD, 'cn', ACTIVE_USER_1_CN)]) + except ldap.CONSTRAINT_VIOLATION: + # yes it is expected + pass + + topology.standalone.log.info('Uniqueness enforced: checks MOD REPLACE entry is rejected') + try: + topology.standalone.modify_s(ACTIVE_USER_2_DN, [(ldap.MOD_REPLACE, 'cn', [ACTIVE_USER_1_CN, ACTIVE_USER_2_CN])]) + except ldap.CONSTRAINT_VIOLATION: + # yes it is expected + pass + + # cleanup the stuff now + topology.standalone.delete_s(config.dn) + topology.standalone.delete_s(ACTIVE_USER_1_DN) + topology.standalone.delete_s(ACTIVE_USER_2_DN) + + +def _active_container_modrdn(topology, type_config='old'): + ''' + Check uniqueness in a single container + Add and entry with a given 'cn', then check we can not modrdn an entry with the same 'cn' value + + ''' + config = _build_config(topology, attr_name='cn', subtree_1=ACTIVE_DN, subtree_2=None, type_config=type_config, across_subtrees=False) + + # enable the 'cn' uniqueness on Active + topology.standalone.add_s(config) + topology.standalone.restart(timeout=120) + + topology.standalone.log.info('Uniqueness enforced: checks MODRDN entry is rejected') + + topology.standalone.add_s(Entry((ACTIVE_USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_1_CN, + 'cn': [ACTIVE_USER_1_CN, 'dummy']}))) + + topology.standalone.add_s(Entry((ACTIVE_USER_2_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_2_CN, + 'cn': ACTIVE_USER_2_CN}))) + + try: + topology.standalone.rename_s(ACTIVE_USER_2_DN, 'cn=dummy', delold=0) + except ldap.CONSTRAINT_VIOLATION: + # yes it is expected + pass + + # cleanup the stuff now + topology.standalone.delete_s(config.dn) + topology.standalone.delete_s(ACTIVE_USER_1_DN) + topology.standalone.delete_s(ACTIVE_USER_2_DN) + + +def _active_stage_containers_add(topology, type_config='old', across_subtrees=False): + ''' + Check uniqueness in several containers + Add an entry on a container with a given 'cn' + with across_subtrees=False check we CAN add an entry with the same 'cn' value on the other container + with across_subtrees=True check we CAN NOT add an entry with the same 'cn' value on the other container + + ''' + config = _build_config(topology, attr_name='cn', subtree_1=ACTIVE_DN, subtree_2=STAGE_DN, type_config=type_config, across_subtrees=False) + + topology.standalone.add_s(config) + topology.standalone.restart(timeout=120) + topology.standalone.add_s(Entry((ACTIVE_USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_1_CN, + 'cn': ACTIVE_USER_1_CN}))) + try: + + # adding an entry on a separated contains with the same 'cn' + topology.standalone.add_s(Entry((STAGE_USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': STAGE_USER_1_CN, + 'cn': ACTIVE_USER_1_CN}))) + except ldap.CONSTRAINT_VIOLATION: + assert across_subtrees + + # cleanup the stuff now + topology.standalone.delete_s(config.dn) + topology.standalone.delete_s(ACTIVE_USER_1_DN) + topology.standalone.delete_s(STAGE_USER_1_DN) + + +def _active_stage_containers_mod(topology, type_config='old', across_subtrees=False): + ''' + Check uniqueness in a several containers + Add an entry on a container with a given 'cn', then check we CAN mod an entry with the same 'cn' value on the other container + + ''' + config = _build_config(topology, attr_name='cn', subtree_1=ACTIVE_DN, subtree_2=STAGE_DN, type_config=type_config, across_subtrees=False) + + topology.standalone.add_s(config) + topology.standalone.restart(timeout=120) + # adding an entry on active with a different 'cn' + topology.standalone.add_s(Entry((ACTIVE_USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_1_CN, + 'cn': ACTIVE_USER_2_CN}))) + + # adding an entry on a stage with a different 'cn' + topology.standalone.add_s(Entry((STAGE_USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': STAGE_USER_1_CN, + 'cn': STAGE_USER_1_CN}))) + + try: + + # modify add same value + topology.standalone.modify_s(STAGE_USER_1_DN, [(ldap.MOD_ADD, 'cn', [ACTIVE_USER_2_CN])]) + except ldap.CONSTRAINT_VIOLATION: + assert across_subtrees + + topology.standalone.delete_s(STAGE_USER_1_DN) + topology.standalone.add_s(Entry((STAGE_USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': STAGE_USER_1_CN, + 'cn': STAGE_USER_2_CN}))) + try: + # modify replace same value + topology.standalone.modify_s(STAGE_USER_1_DN, [(ldap.MOD_REPLACE, 'cn', [STAGE_USER_2_CN, ACTIVE_USER_1_CN])]) + except ldap.CONSTRAINT_VIOLATION: + assert across_subtrees + + # cleanup the stuff now + topology.standalone.delete_s(config.dn) + topology.standalone.delete_s(ACTIVE_USER_1_DN) + topology.standalone.delete_s(STAGE_USER_1_DN) + + +def _active_stage_containers_modrdn(topology, type_config='old', across_subtrees=False): + ''' + Check uniqueness in a several containers + Add and entry with a given 'cn', then check we CAN modrdn an entry with the same 'cn' value on the other container + + ''' + + config = _build_config(topology, attr_name='cn', subtree_1=ACTIVE_DN, subtree_2=STAGE_DN, type_config=type_config, across_subtrees=False) + + # enable the 'cn' uniqueness on Active and Stage + topology.standalone.add_s(config) + topology.standalone.restart(timeout=120) + topology.standalone.add_s(Entry((ACTIVE_USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': ACTIVE_USER_1_CN, + 'cn': [ACTIVE_USER_1_CN, 'dummy']}))) + + topology.standalone.add_s(Entry((STAGE_USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': STAGE_USER_1_CN, + 'cn': STAGE_USER_1_CN}))) + + try: + + topology.standalone.rename_s(STAGE_USER_1_DN, 'cn=dummy', delold=0) + + # check stage entry has 'cn=dummy' + stage_ent = topology.standalone.getEntry("cn=dummy,%s" % (STAGE_DN), ldap.SCOPE_BASE, "objectclass=*", ['cn']) + assert stage_ent.hasAttr('cn') + found = False + for value in stage_ent.getValues('cn'): + if value == 'dummy': + found = True + assert found + + # check active entry has 'cn=dummy' + active_ent = topology.standalone.getEntry(ACTIVE_USER_1_DN, ldap.SCOPE_BASE, "objectclass=*", ['cn']) + assert active_ent.hasAttr('cn') + found = False + for value in stage_ent.getValues('cn'): + if value == 'dummy': + found = True + assert found + + topology.standalone.delete_s("cn=dummy,%s" % (STAGE_DN)) + except ldap.CONSTRAINT_VIOLATION: + assert across_subtrees + topology.standalone.delete_s(STAGE_USER_1_DN) + + # cleanup the stuff now + topology.standalone.delete_s(config.dn) + topology.standalone.delete_s(ACTIVE_USER_1_DN) + + +def _config_file(topology, action='save'): + dse_ldif = topology.standalone.confdir + '/dse.ldif' + sav_file = topology.standalone.confdir + '/dse.ldif.ticket47823' + if action == 'save': + shutil.copy(dse_ldif, sav_file) + else: + shutil.copy(sav_file, dse_ldif) + time.sleep(1) + + +def _pattern_errorlog(file, log_pattern): + try: + _pattern_errorlog.last_pos += 1 + except AttributeError: + _pattern_errorlog.last_pos = 0 + + found = None + log.debug("_pattern_errorlog: start at offset %d" % _pattern_errorlog.last_pos) + file.seek(_pattern_errorlog.last_pos) + + # Use a while true iteration because 'for line in file: hit a + # python bug that break file.tell() + while True: + line = file.readline() + log.debug("_pattern_errorlog: [%d] %s" % (file.tell(), line)) + found = log_pattern.search(line) + if ((line == '') or (found)): + break + + log.debug("_pattern_errorlog: end at offset %d" % file.tell()) + _pattern_errorlog.last_pos = file.tell() + return found + + +def test_ticket47823_init(topology): + """ + + """ + + # Enabled the plugins + topology.standalone.plugins.enable(name=PLUGIN_ATTR_UNIQUENESS) + topology.standalone.restart(timeout=120) + + topology.standalone.add_s(Entry((PROVISIONING_DN, {'objectclass': "top nscontainer".split(), + 'cn': PROVISIONING_CN}))) + topology.standalone.add_s(Entry((ACTIVE_DN, {'objectclass': "top nscontainer".split(), + 'cn': ACTIVE_CN}))) + topology.standalone.add_s(Entry((STAGE_DN, {'objectclass': "top nscontainer".split(), + 'cn': STAGE_CN}))) + topology.standalone.add_s(Entry((DELETE_DN, {'objectclass': "top nscontainer".split(), + 'cn': DELETE_CN}))) + topology.standalone.errorlog_file = open(topology.standalone.errlog, "r") + + topology.standalone.stop(timeout=120) + time.sleep(1) + topology.standalone.start(timeout=120) + time.sleep(3) + + +def test_ticket47823_one_container_add(topology): + ''' + Check uniqueness in a single container + Add and entry with a given 'cn', then check we can not add an entry with the same 'cn' value + + ''' + _header(topology, "With former config (args), check attribute uniqueness with 'cn' (ADD) ") + + _active_container_add(topology, type_config='old') + + _header(topology, "With new config (args), check attribute uniqueness with 'cn' (ADD) ") + + _active_container_add(topology, type_config='new') + + +def test_ticket47823_one_container_mod(topology): + ''' + Check uniqueness in a single container + Add and entry with a given 'cn', then check we can not modify an entry with the same 'cn' value + + ''' + _header(topology, "With former config (args), check attribute uniqueness with 'cn' (MOD)") + + _active_container_mod(topology, type_config='old') + + _header(topology, "With new config (args), check attribute uniqueness with 'cn' (MOD)") + + _active_container_mod(topology, type_config='new') + + +def test_ticket47823_one_container_modrdn(topology): + ''' + Check uniqueness in a single container + Add and entry with a given 'cn', then check we can not modrdn an entry with the same 'cn' value + + ''' + _header(topology, "With former config (args), check attribute uniqueness with 'cn' (MODRDN)") + + _active_container_modrdn(topology, type_config='old') + + _header(topology, "With former config (args), check attribute uniqueness with 'cn' (MODRDN)") + + _active_container_modrdn(topology, type_config='new') + + +def test_ticket47823_multi_containers_add(topology): + ''' + Check uniqueness in a several containers + Add and entry with a given 'cn', then check we can not add an entry with the same 'cn' value + + ''' + _header(topology, "With former config (args), check attribute uniqueness with 'cn' (ADD) ") + + _active_stage_containers_add(topology, type_config='old', across_subtrees=False) + + _header(topology, "With new config (args), check attribute uniqueness with 'cn' (ADD) ") + + _active_stage_containers_add(topology, type_config='new', across_subtrees=False) + + +def test_ticket47823_multi_containers_mod(topology): + ''' + Check uniqueness in a several containers + Add an entry on a container with a given 'cn', then check we CAN mod an entry with the same 'cn' value on the other container + + ''' + _header(topology, "With former config (args), check attribute uniqueness with 'cn' (MOD) on separated container") + + topology.standalone.log.info('Uniqueness not enforced: if same \'cn\' modified (add/replace) on separated containers') + _active_stage_containers_mod(topology, type_config='old', across_subtrees=False) + + _header(topology, "With new config (args), check attribute uniqueness with 'cn' (MOD) on separated container") + + topology.standalone.log.info('Uniqueness not enforced: if same \'cn\' modified (add/replace) on separated containers') + _active_stage_containers_mod(topology, type_config='new', across_subtrees=False) + + +def test_ticket47823_multi_containers_modrdn(topology): + ''' + Check uniqueness in a several containers + Add and entry with a given 'cn', then check we CAN modrdn an entry with the same 'cn' value on the other container + + ''' + _header(topology, "With former config (args), check attribute uniqueness with 'cn' (MODRDN) on separated containers") + + topology.standalone.log.info('Uniqueness not enforced: checks MODRDN entry is accepted on separated containers') + _active_stage_containers_modrdn(topology, type_config='old', across_subtrees=False) + + topology.standalone.log.info('Uniqueness not enforced: checks MODRDN entry is accepted on separated containers') + _active_stage_containers_modrdn(topology, type_config='old') + + +def test_ticket47823_across_multi_containers_add(topology): + ''' + Check uniqueness across several containers, uniquely with the new configuration + Add and entry with a given 'cn', then check we can not add an entry with the same 'cn' value + + ''' + _header(topology, "With new config (args), check attribute uniqueness with 'cn' (ADD) across several containers") + + _active_stage_containers_add(topology, type_config='old', across_subtrees=True) + + +def test_ticket47823_across_multi_containers_mod(topology): + ''' + Check uniqueness across several containers, uniquely with the new configuration + Add and entry with a given 'cn', then check we can not modifiy an entry with the same 'cn' value + + ''' + _header(topology, "With new config (args), check attribute uniqueness with 'cn' (MOD) across several containers") + + _active_stage_containers_mod(topology, type_config='old', across_subtrees=True) + + +def test_ticket47823_across_multi_containers_modrdn(topology): + ''' + Check uniqueness across several containers, uniquely with the new configuration + Add and entry with a given 'cn', then check we can not modrdn an entry with the same 'cn' value + + ''' + _header(topology, "With new config (args), check attribute uniqueness with 'cn' (MODRDN) across several containers") + + _active_stage_containers_modrdn(topology, type_config='old', across_subtrees=True) + + +def test_ticket47823_invalid_config_1(topology): + ''' + Check that an invalid config is detected. No uniqueness enforced + Using old config: arg0 is missing + ''' + _header(topology, "Invalid config (old): arg0 is missing") + + _config_file(topology, action='save') + + # create an invalid config without arg0 + config = _build_config(topology, attr_name='cn', subtree_1=ACTIVE_DN, subtree_2=None, type_config='old', across_subtrees=False) + + del config.data['nsslapd-pluginarg0'] + # replace 'cn' uniqueness entry + try: + topology.standalone.delete_s(config.dn) + + except ldap.NO_SUCH_OBJECT: + pass + topology.standalone.add_s(config) + + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + + # Check the server did not restart + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '65536')]) + try: + topology.standalone.restart(timeout=5) + ent = topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + if ent: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert not ent + except ldap.SERVER_DOWN: + pass + + # Check the expected error message + regex = re.compile("Config fail: unable to parse old style") + res = _pattern_errorlog(topology.standalone.errorlog_file, regex) + if not res: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert res + + # Check we can restart the server + _config_file(topology, action='restore') + topology.standalone.start(timeout=5) + try: + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + except ldap.NO_SUCH_OBJECT: + pass + + +def test_ticket47823_invalid_config_2(topology): + ''' + Check that an invalid config is detected. No uniqueness enforced + Using old config: arg1 is missing + ''' + _header(topology, "Invalid config (old): arg1 is missing") + + _config_file(topology, action='save') + + # create an invalid config without arg0 + config = _build_config(topology, attr_name='cn', subtree_1=ACTIVE_DN, subtree_2=None, type_config='old', across_subtrees=False) + + del config.data['nsslapd-pluginarg1'] + # replace 'cn' uniqueness entry + try: + topology.standalone.delete_s(config.dn) + + except ldap.NO_SUCH_OBJECT: + pass + topology.standalone.add_s(config) + + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + + # Check the server did not restart + try: + topology.standalone.restart(timeout=5) + ent = topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + if ent: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert not ent + except ldap.SERVER_DOWN: + pass + + # Check the expected error message + regex = re.compile("Config info: No valid subtree is defined") + res = _pattern_errorlog(topology.standalone.errorlog_file, regex) + if not res: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert res + + # Check we can restart the server + _config_file(topology, action='restore') + topology.standalone.start(timeout=5) + try: + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + except ldap.NO_SUCH_OBJECT: + pass + + +def test_ticket47823_invalid_config_3(topology): + ''' + Check that an invalid config is detected. No uniqueness enforced + Using old config: arg0 is missing + ''' + _header(topology, "Invalid config (old): arg0 is missing but new config attrname exists") + + _config_file(topology, action='save') + + # create an invalid config without arg0 + config = _build_config(topology, attr_name='cn', subtree_1=ACTIVE_DN, subtree_2=None, type_config='old', across_subtrees=False) + + del config.data['nsslapd-pluginarg0'] + config.data['uniqueness-attribute-name'] = 'cn' + # replace 'cn' uniqueness entry + try: + topology.standalone.delete_s(config.dn) + + except ldap.NO_SUCH_OBJECT: + pass + topology.standalone.add_s(config) + + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + + # Check the server did not restart + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '65536')]) + try: + topology.standalone.restart(timeout=5) + ent = topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + if ent: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert not ent + except ldap.SERVER_DOWN: + pass + + # Check the expected error message + regex = re.compile("Config fail: unable to parse old style") + res = _pattern_errorlog(topology.standalone.errorlog_file, regex) + if not res: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert res + + # Check we can restart the server + _config_file(topology, action='restore') + topology.standalone.start(timeout=5) + try: + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + except ldap.NO_SUCH_OBJECT: + pass + + +def test_ticket47823_invalid_config_4(topology): + ''' + Check that an invalid config is detected. No uniqueness enforced + Using old config: arg1 is missing + ''' + _header(topology, "Invalid config (old): arg1 is missing but new config exist") + + _config_file(topology, action='save') + + # create an invalid config without arg0 + config = _build_config(topology, attr_name='cn', subtree_1=ACTIVE_DN, subtree_2=None, type_config='old', across_subtrees=False) + + del config.data['nsslapd-pluginarg1'] + config.data['uniqueness-subtrees'] = ACTIVE_DN + # replace 'cn' uniqueness entry + try: + topology.standalone.delete_s(config.dn) + + except ldap.NO_SUCH_OBJECT: + pass + topology.standalone.add_s(config) + + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + + # Check the server did not restart + try: + topology.standalone.restart(timeout=5) + ent = topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + if ent: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert not ent + except ldap.SERVER_DOWN: + pass + + # Check the expected error message + regex = re.compile("Config info: No valid subtree is defined") + res = _pattern_errorlog(topology.standalone.errorlog_file, regex) + if not res: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert res + + # Check we can restart the server + _config_file(topology, action='restore') + topology.standalone.start(timeout=5) + try: + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + except ldap.NO_SUCH_OBJECT: + pass + + +def test_ticket47823_invalid_config_5(topology): + ''' + Check that an invalid config is detected. No uniqueness enforced + Using new config: uniqueness-attribute-name is missing + ''' + _header(topology, "Invalid config (new): uniqueness-attribute-name is missing") + + _config_file(topology, action='save') + + # create an invalid config without arg0 + config = _build_config(topology, attr_name='cn', subtree_1=ACTIVE_DN, subtree_2=None, type_config='new', across_subtrees=False) + + del config.data['uniqueness-attribute-name'] + # replace 'cn' uniqueness entry + try: + topology.standalone.delete_s(config.dn) + + except ldap.NO_SUCH_OBJECT: + pass + topology.standalone.add_s(config) + + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + + # Check the server did not restart + try: + topology.standalone.restart(timeout=5) + ent = topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + if ent: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert not ent + except ldap.SERVER_DOWN: + pass + + # Check the expected error message + regex = re.compile("Config info: attribute name not defined") + res = _pattern_errorlog(topology.standalone.errorlog_file, regex) + if not res: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert res + + # Check we can restart the server + _config_file(topology, action='restore') + topology.standalone.start(timeout=5) + try: + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + except ldap.NO_SUCH_OBJECT: + pass + + +def test_ticket47823_invalid_config_6(topology): + ''' + Check that an invalid config is detected. No uniqueness enforced + Using new config: uniqueness-subtrees is missing + ''' + _header(topology, "Invalid config (new): uniqueness-subtrees is missing") + + _config_file(topology, action='save') + + # create an invalid config without arg0 + config = _build_config(topology, attr_name='cn', subtree_1=ACTIVE_DN, subtree_2=None, type_config='new', across_subtrees=False) + + del config.data['uniqueness-subtrees'] + # replace 'cn' uniqueness entry + try: + topology.standalone.delete_s(config.dn) + + except ldap.NO_SUCH_OBJECT: + pass + topology.standalone.add_s(config) + + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + + # Check the server did not restart + try: + topology.standalone.restart(timeout=5) + ent = topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + if ent: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert not ent + except ldap.SERVER_DOWN: + pass + + # Check the expected error message + regex = re.compile("Config info: objectclass for subtree entries is not defined") + res = _pattern_errorlog(topology.standalone.errorlog_file, regex) + if not res: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert res + + # Check we can restart the server + _config_file(topology, action='restore') + topology.standalone.start(timeout=5) + try: + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + except ldap.NO_SUCH_OBJECT: + pass + + +def test_ticket47823_invalid_config_7(topology): + ''' + Check that an invalid config is detected. No uniqueness enforced + Using new config: uniqueness-subtrees is missing + ''' + _header(topology, "Invalid config (new): uniqueness-subtrees are invalid") + + _config_file(topology, action='save') + + # create an invalid config without arg0 + config = _build_config(topology, attr_name='cn', subtree_1="this_is dummy DN", subtree_2="an other=dummy DN", type_config='new', across_subtrees=False) + + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '65536')]) + # replace 'cn' uniqueness entry + try: + topology.standalone.delete_s(config.dn) + + except ldap.NO_SUCH_OBJECT: + pass + topology.standalone.add_s(config) + + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + + # Check the server did not restart + try: + topology.standalone.restart(timeout=5) + ent = topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + if ent: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert not ent + except ldap.SERVER_DOWN: + pass + + # Check the expected error message + regex = re.compile("Config info: No valid subtree is defined") + res = _pattern_errorlog(topology.standalone.errorlog_file, regex) + if not res: + # be sure to restore a valid config before assert + _config_file(topology, action='restore') + assert res + + # Check we can restart the server + _config_file(topology, action='restore') + topology.standalone.start(timeout=5) + try: + topology.standalone.getEntry(config.dn, ldap.SCOPE_BASE, "(objectclass=nsSlapdPlugin)", ALL_CONFIG_ATTRS) + except ldap.NO_SUCH_OBJECT: + pass + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47828_test.py b/dirsrvtests/tests/tickets/ticket47828_test.py new file mode 100644 index 0000000..92e3178 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47828_test.py @@ -0,0 +1,655 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import socket +import pytest +import shutil +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +ACCT_POLICY_CONFIG_DN = 'cn=config,cn=%s,cn=plugins,cn=config' % PLUGIN_ACCT_POLICY +ACCT_POLICY_DN = 'cn=Account Inactivation Policy,%s' % SUFFIX +INACTIVITY_LIMIT = '9' +SEARCHFILTER = '(objectclass=*)' + +DUMMY_CONTAINER = 'cn=dummy container,%s' % SUFFIX +PROVISIONING = 'cn=provisioning,%s' % SUFFIX +ACTIVE_USER1_CN = 'active user1' +ACTIVE_USER1_DN = 'cn=%s,%s' % (ACTIVE_USER1_CN, SUFFIX) +STAGED_USER1_CN = 'staged user1' +STAGED_USER1_DN = 'cn=%s,%s' % (STAGED_USER1_CN, PROVISIONING) +DUMMY_USER1_CN = 'dummy user1' +DUMMY_USER1_DN = 'cn=%s,%s' % (DUMMY_USER1_CN, DUMMY_CONTAINER) + +ALLOCATED_ATTR = 'employeeNumber' + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + At the beginning, It may exists a standalone instance. + It may also exists a backup for the standalone instance. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def _header(topology, label): + topology.standalone.log.info("\n\n###############################################") + topology.standalone.log.info("#######") + topology.standalone.log.info("####### %s" % label) + topology.standalone.log.info("#######") + topology.standalone.log.info("###############################################") + + +def test_ticket47828_init(topology): + """ + Enable DNA + """ + topology.standalone.plugins.enable(name=PLUGIN_DNA) + + topology.standalone.add_s(Entry((PROVISIONING,{'objectclass': "top nscontainer".split(), + 'cn': 'provisioning'}))) + topology.standalone.add_s(Entry((DUMMY_CONTAINER,{'objectclass': "top nscontainer".split(), + 'cn': 'dummy container'}))) + + dn_config = "cn=excluded scope, cn=%s, %s" % (PLUGIN_DNA, DN_PLUGIN) + topology.standalone.add_s(Entry((dn_config, {'objectclass': "top extensibleObject".split(), + 'cn': 'excluded scope', + 'dnaType': ALLOCATED_ATTR, + 'dnaNextValue': str(1000), + 'dnaMaxValue': str(2000), + 'dnaMagicRegen': str(-1), + 'dnaFilter': '(&(objectClass=person)(objectClass=organizationalPerson)(objectClass=inetOrgPerson))', + 'dnaScope': SUFFIX}))) + topology.standalone.restart(timeout=10) + + +def test_ticket47828_run_0(topology): + """ + NO exclude scope: Add an active entry and check its ALLOCATED_ATTR is set + """ + _header(topology, 'NO exclude scope: Add an active entry and check its ALLOCATED_ATTR is set') + + topology.standalone.add_s(Entry((ACTIVE_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': ACTIVE_USER1_CN, + 'sn': ACTIVE_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(ACTIVE_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) != str(-1) + topology.standalone.log.debug('%s.%s=%s' % (ACTIVE_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(ACTIVE_USER1_DN) + + +def test_ticket47828_run_1(topology): + """ + NO exclude scope: Add an active entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'NO exclude scope: Add an active entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((ACTIVE_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': ACTIVE_USER1_CN, + 'sn': ACTIVE_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(ACTIVE_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (ACTIVE_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(ACTIVE_USER1_DN) + + +def test_ticket47828_run_2(topology): + """ + NO exclude scope: Add a staged entry and check its ALLOCATED_ATTR is set + """ + _header(topology, 'NO exclude scope: Add a staged entry and check its ALLOCATED_ATTR is set') + + topology.standalone.add_s(Entry((STAGED_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': STAGED_USER1_CN, + 'sn': STAGED_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(STAGED_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) != str(-1) + topology.standalone.log.debug('%s.%s=%s' % (STAGED_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(STAGED_USER1_DN) + + +def test_ticket47828_run_3(topology): + """ + NO exclude scope: Add a staged entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'NO exclude scope: Add a staged entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((STAGED_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': STAGED_USER1_CN, + 'sn': STAGED_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(STAGED_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (STAGED_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(STAGED_USER1_DN) + + +def test_ticket47828_run_4(topology): + ''' + Exclude the provisioning container + ''' + _header(topology, 'Exclude the provisioning container') + + dn_config = "cn=excluded scope, cn=%s, %s" % (PLUGIN_DNA, DN_PLUGIN) + mod = [(ldap.MOD_REPLACE, 'dnaExcludeScope', PROVISIONING)] + topology.standalone.modify_s(dn_config, mod) + + +def test_ticket47828_run_5(topology): + """ + Provisioning excluded scope: Add an active entry and check its ALLOCATED_ATTR is set + """ + _header(topology, 'Provisioning excluded scope: Add an active entry and check its ALLOCATED_ATTR is set') + + topology.standalone.add_s(Entry((ACTIVE_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': ACTIVE_USER1_CN, + 'sn': ACTIVE_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(ACTIVE_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) != str(-1) + topology.standalone.log.debug('%s.%s=%s' % (ACTIVE_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(ACTIVE_USER1_DN) + + +def test_ticket47828_run_6(topology): + """ + Provisioning excluded scope: Add an active entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'Provisioning excluded scope: Add an active entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((ACTIVE_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': ACTIVE_USER1_CN, + 'sn': ACTIVE_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(ACTIVE_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (ACTIVE_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(ACTIVE_USER1_DN) + + +def test_ticket47828_run_7(topology): + """ + Provisioning excluded scope: Add a staged entry and check its ALLOCATED_ATTR is not set + """ + _header(topology, 'Provisioning excluded scope: Add a staged entry and check its ALLOCATED_ATTR is not set') + + topology.standalone.add_s(Entry((STAGED_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': STAGED_USER1_CN, + 'sn': STAGED_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(STAGED_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(-1) + topology.standalone.log.debug('%s.%s=%s' % (STAGED_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(STAGED_USER1_DN) + + +def test_ticket47828_run_8(topology): + """ + Provisioning excluded scope: Add a staged entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'Provisioning excluded scope: Add a staged entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((STAGED_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': STAGED_USER1_CN, + 'sn': STAGED_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(STAGED_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (STAGED_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(STAGED_USER1_DN) + + +def test_ticket47828_run_9(topology): + """ + Provisioning excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is set + """ + _header(topology, 'Provisioning excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is set') + + topology.standalone.add_s(Entry((DUMMY_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': DUMMY_USER1_CN, + 'sn': DUMMY_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(DUMMY_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) != str(-1) + topology.standalone.log.debug('%s.%s=%s' % (DUMMY_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(DUMMY_USER1_DN) + + +def test_ticket47828_run_10(topology): + """ + Provisioning excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'Provisioning excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((DUMMY_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': DUMMY_USER1_CN, + 'sn': DUMMY_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(DUMMY_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (DUMMY_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(DUMMY_USER1_DN) + + +def test_ticket47828_run_11(topology): + ''' + Exclude (in addition) the dummy container + ''' + _header(topology, 'Exclude (in addition) the dummy container') + + dn_config = "cn=excluded scope, cn=%s, %s" % (PLUGIN_DNA, DN_PLUGIN) + mod = [(ldap.MOD_ADD, 'dnaExcludeScope', DUMMY_CONTAINER)] + topology.standalone.modify_s(dn_config, mod) + + +def test_ticket47828_run_12(topology): + """ + Provisioning/Dummy excluded scope: Add an active entry and check its ALLOCATED_ATTR is set + """ + _header(topology, 'Provisioning/Dummy excluded scope: Add an active entry and check its ALLOCATED_ATTR is set') + + topology.standalone.add_s(Entry((ACTIVE_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': ACTIVE_USER1_CN, + 'sn': ACTIVE_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(ACTIVE_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) != str(-1) + topology.standalone.log.debug('%s.%s=%s' % (ACTIVE_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(ACTIVE_USER1_DN) + + +def test_ticket47828_run_13(topology): + """ + Provisioning/Dummy excluded scope: Add an active entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'Provisioning/Dummy excluded scope: Add an active entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((ACTIVE_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': ACTIVE_USER1_CN, + 'sn': ACTIVE_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(ACTIVE_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (ACTIVE_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(ACTIVE_USER1_DN) + + +def test_ticket47828_run_14(topology): + """ + Provisioning/Dummy excluded scope: Add a staged entry and check its ALLOCATED_ATTR is not set + """ + _header(topology, 'Provisioning/Dummy excluded scope: Add a staged entry and check its ALLOCATED_ATTR is not set') + + topology.standalone.add_s(Entry((STAGED_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': STAGED_USER1_CN, + 'sn': STAGED_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(STAGED_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(-1) + topology.standalone.log.debug('%s.%s=%s' % (STAGED_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(STAGED_USER1_DN) + + +def test_ticket47828_run_15(topology): + """ + Provisioning/Dummy excluded scope: Add a staged entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'Provisioning/Dummy excluded scope: Add a staged entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((STAGED_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': STAGED_USER1_CN, + 'sn': STAGED_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(STAGED_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (STAGED_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(STAGED_USER1_DN) + + +def test_ticket47828_run_16(topology): + """ + Provisioning/Dummy excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is not set + """ + _header(topology, 'Provisioning/Dummy excluded scope: Add an dummy entry and check its ALLOCATED_ATTR not is set') + + topology.standalone.add_s(Entry((DUMMY_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': DUMMY_USER1_CN, + 'sn': DUMMY_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(DUMMY_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(-1) + topology.standalone.log.debug('%s.%s=%s' % (DUMMY_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(DUMMY_USER1_DN) + + +def test_ticket47828_run_17(topology): + """ + Provisioning/Dummy excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'Provisioning/Dummy excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((DUMMY_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': DUMMY_USER1_CN, + 'sn': DUMMY_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(DUMMY_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (DUMMY_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(DUMMY_USER1_DN) + + +def test_ticket47828_run_18(topology): + ''' + Exclude PROVISIONING and a wrong container + ''' + _header(topology, 'Exclude PROVISIONING and a wrong container') + + dn_config = "cn=excluded scope, cn=%s, %s" % (PLUGIN_DNA, DN_PLUGIN) + mod = [(ldap.MOD_REPLACE, 'dnaExcludeScope', PROVISIONING)] + topology.standalone.modify_s(dn_config, mod) + try: + mod = [(ldap.MOD_ADD, 'dnaExcludeScope', "invalidDN,%s" % SUFFIX)] + topology.standalone.modify_s(dn_config, mod) + raise ValueError("invalid dnaExcludeScope value (not a DN)") + except ldap.INVALID_SYNTAX: + pass + + +def test_ticket47828_run_19(topology): + """ + Provisioning+wrong container excluded scope: Add an active entry and check its ALLOCATED_ATTR is set + """ + _header(topology, 'Provisioning+wrong container excluded scope: Add an active entry and check its ALLOCATED_ATTR is set') + + topology.standalone.add_s(Entry((ACTIVE_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': ACTIVE_USER1_CN, + 'sn': ACTIVE_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(ACTIVE_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) != str(-1) + topology.standalone.log.debug('%s.%s=%s' % (ACTIVE_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(ACTIVE_USER1_DN) + + +def test_ticket47828_run_20(topology): + """ + Provisioning+wrong container excluded scope: Add an active entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'Provisioning+wrong container excluded scope: Add an active entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((ACTIVE_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': ACTIVE_USER1_CN, + 'sn': ACTIVE_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(ACTIVE_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (ACTIVE_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(ACTIVE_USER1_DN) + + +def test_ticket47828_run_21(topology): + """ + Provisioning+wrong container excluded scope: Add a staged entry and check its ALLOCATED_ATTR is not set + """ + _header(topology, 'Provisioning+wrong container excluded scope: Add a staged entry and check its ALLOCATED_ATTR is not set') + + topology.standalone.add_s(Entry((STAGED_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': STAGED_USER1_CN, + 'sn': STAGED_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(STAGED_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(-1) + topology.standalone.log.debug('%s.%s=%s' % (STAGED_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(STAGED_USER1_DN) + + +def test_ticket47828_run_22(topology): + """ + Provisioning+wrong container excluded scope: Add a staged entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'Provisioning+wrong container excluded scope: Add a staged entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((STAGED_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': STAGED_USER1_CN, + 'sn': STAGED_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(STAGED_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (STAGED_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(STAGED_USER1_DN) + + +def test_ticket47828_run_23(topology): + """ + Provisioning+wrong container excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is set + """ + _header(topology, 'Provisioning+wrong container excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is set') + + topology.standalone.add_s(Entry((DUMMY_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': DUMMY_USER1_CN, + 'sn': DUMMY_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(DUMMY_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) != str(-1) + topology.standalone.log.debug('%s.%s=%s' % (DUMMY_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(DUMMY_USER1_DN) + + +def test_ticket47828_run_24(topology): + """ + Provisioning+wrong container excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'Provisioning+wrong container excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((DUMMY_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': DUMMY_USER1_CN, + 'sn': DUMMY_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(DUMMY_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (DUMMY_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(DUMMY_USER1_DN) + + +def test_ticket47828_run_25(topology): + ''' + Exclude a wrong container + ''' + _header(topology, 'Exclude a wrong container') + + dn_config = "cn=excluded scope, cn=%s, %s" % (PLUGIN_DNA, DN_PLUGIN) + + try: + mod = [(ldap.MOD_REPLACE, 'dnaExcludeScope', "invalidDN,%s" % SUFFIX)] + topology.standalone.modify_s(dn_config, mod) + raise ValueError("invalid dnaExcludeScope value (not a DN)") + except ldap.INVALID_SYNTAX: + pass + + +def test_ticket47828_run_26(topology): + """ + Wrong container excluded scope: Add an active entry and check its ALLOCATED_ATTR is set + """ + _header(topology, 'Wrong container excluded scope: Add an active entry and check its ALLOCATED_ATTR is set') + + topology.standalone.add_s(Entry((ACTIVE_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': ACTIVE_USER1_CN, + 'sn': ACTIVE_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(ACTIVE_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) != str(-1) + topology.standalone.log.debug('%s.%s=%s' % (ACTIVE_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(ACTIVE_USER1_DN) + + +def test_ticket47828_run_27(topology): + """ + Wrong container excluded scope: Add an active entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'Wrong container excluded scope: Add an active entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((ACTIVE_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': ACTIVE_USER1_CN, + 'sn': ACTIVE_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(ACTIVE_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (ACTIVE_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(ACTIVE_USER1_DN) + + +def test_ticket47828_run_28(topology): + """ + Wrong container excluded scope: Add a staged entry and check its ALLOCATED_ATTR is not set + """ + _header(topology, 'Wrong container excluded scope: Add a staged entry and check its ALLOCATED_ATTR is not set') + + topology.standalone.add_s(Entry((STAGED_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': STAGED_USER1_CN, + 'sn': STAGED_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(STAGED_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(-1) + topology.standalone.log.debug('%s.%s=%s' % (STAGED_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(STAGED_USER1_DN) + + +def test_ticket47828_run_29(topology): + """ + Wrong container excluded scope: Add a staged entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'Wrong container excluded scope: Add a staged entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((STAGED_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': STAGED_USER1_CN, + 'sn': STAGED_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(STAGED_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (STAGED_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(STAGED_USER1_DN) + + +def test_ticket47828_run_30(topology): + """ + Wrong container excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is set + """ + _header(topology, 'Wrong container excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is set') + + topology.standalone.add_s(Entry((DUMMY_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': DUMMY_USER1_CN, + 'sn': DUMMY_USER1_CN, + ALLOCATED_ATTR: str(-1)}))) + ent = topology.standalone.getEntry(DUMMY_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) != str(-1) + topology.standalone.log.debug('%s.%s=%s' % (DUMMY_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(DUMMY_USER1_DN) + + +def test_ticket47828_run_31(topology): + """ + Wrong container excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is unchanged (!= magic) + """ + _header(topology, 'Wrong container excluded scope: Add an dummy entry and check its ALLOCATED_ATTR is unchanged (!= magic)') + + topology.standalone.add_s(Entry((DUMMY_USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': DUMMY_USER1_CN, + 'sn': DUMMY_USER1_CN, + ALLOCATED_ATTR: str(20)}))) + ent = topology.standalone.getEntry(DUMMY_USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + assert ent.hasAttr(ALLOCATED_ATTR) + assert ent.getValue(ALLOCATED_ATTR) == str(20) + topology.standalone.log.debug('%s.%s=%s' % (DUMMY_USER1_CN, ALLOCATED_ATTR, ent.getValue(ALLOCATED_ATTR))) + topology.standalone.delete_s(DUMMY_USER1_DN) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket47829_test.py b/dirsrvtests/tests/tickets/ticket47829_test.py new file mode 100644 index 0000000..a426ada --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47829_test.py @@ -0,0 +1,615 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + + +SCOPE_IN_CN = 'in' +SCOPE_OUT_CN = 'out' +SCOPE_IN_DN = 'cn=%s,%s' % (SCOPE_IN_CN, SUFFIX) +SCOPE_OUT_DN = 'cn=%s,%s' % (SCOPE_OUT_CN, SUFFIX) + +PROVISIONING_CN = "provisioning" +PROVISIONING_DN = "cn=%s,%s" % (PROVISIONING_CN, SCOPE_IN_DN) + +ACTIVE_CN = "accounts" +STAGE_CN = "staged users" +DELETE_CN = "deleted users" +ACTIVE_DN = "cn=%s,%s" % (ACTIVE_CN, SCOPE_IN_DN) +STAGE_DN = "cn=%s,%s" % (STAGE_CN, PROVISIONING_DN) +DELETE_DN = "cn=%s,%s" % (DELETE_CN, PROVISIONING_DN) + +STAGE_USER_CN = "stage guy" +STAGE_USER_DN = "cn=%s,%s" % (STAGE_USER_CN, STAGE_DN) + +ACTIVE_USER_CN = "active guy" +ACTIVE_USER_DN = "cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN) + +OUT_USER_CN = "out guy" +OUT_USER_DN = "cn=%s,%s" % (OUT_USER_CN, SCOPE_OUT_DN) + +STAGE_GROUP_CN = "stage group" +STAGE_GROUP_DN = "cn=%s,%s" % (STAGE_GROUP_CN, STAGE_DN) + +ACTIVE_GROUP_CN = "active group" +ACTIVE_GROUP_DN = "cn=%s,%s" % (ACTIVE_GROUP_CN, ACTIVE_DN) + +OUT_GROUP_CN = "out group" +OUT_GROUP_DN = "cn=%s,%s" % (OUT_GROUP_CN, SCOPE_OUT_DN) + +INDIRECT_ACTIVE_GROUP_CN = "indirect active group" +INDIRECT_ACTIVE_GROUP_DN = "cn=%s,%s" % (INDIRECT_ACTIVE_GROUP_CN, ACTIVE_DN) + +log = logging.getLogger(__name__) + +installation_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def _header(topology, label): + topology.standalone.log.info("\n\n###############################################") + topology.standalone.log.info("#######") + topology.standalone.log.info("####### %s" % label) + topology.standalone.log.info("#######") + topology.standalone.log.info("###############################################") + + +def _add_user(topology, type='active'): + if type == 'active': + topology.standalone.add_s(Entry((ACTIVE_USER_DN, { + 'objectclass': "top person inetuser".split(), + 'sn': ACTIVE_USER_CN, + 'cn': ACTIVE_USER_CN}))) + elif type == 'stage': + topology.standalone.add_s(Entry((STAGE_USER_DN, { + 'objectclass': "top person inetuser".split(), + 'sn': STAGE_USER_CN, + 'cn': STAGE_USER_CN}))) + else: + topology.standalone.add_s(Entry((OUT_USER_DN, { + 'objectclass': "top person inetuser".split(), + 'sn': OUT_USER_CN, + 'cn': OUT_USER_CN}))) + + +def _find_memberof(topology, user_dn=None, group_dn=None, find_result=True): + assert(topology) + assert(user_dn) + assert(group_dn) + ent = topology.standalone.getEntry(user_dn, ldap.SCOPE_BASE, "(objectclass=*)", ['memberof']) + found = False + if ent.hasAttr('memberof'): + + for val in ent.getValues('memberof'): + topology.standalone.log.info("!!!!!!! %s: memberof->%s" % (user_dn, val)) + if val == group_dn: + found = True + break + + if find_result: + assert(found) + else: + assert(not found) + + +def _find_member(topology, user_dn=None, group_dn=None, find_result=True): + assert(topology) + assert(user_dn) + assert(group_dn) + ent = topology.standalone.getEntry(group_dn, ldap.SCOPE_BASE, "(objectclass=*)", ['member']) + found = False + if ent.hasAttr('member'): + + for val in ent.getValues('member'): + topology.standalone.log.info("!!!!!!! %s: member ->%s" % (group_dn, val)) + if val == user_dn: + found = True + break + + if find_result: + assert(found) + else: + assert(not found) + + +def _modrdn_entry(topology=None, entry_dn=None, new_rdn=None, del_old=0, new_superior=None): + assert topology is not None + assert entry_dn is not None + assert new_rdn is not None + + topology.standalone.log.info("\n\n######################### MODRDN %s ######################\n" % new_rdn) + try: + if new_superior: + topology.standalone.rename_s(entry_dn, new_rdn, newsuperior=new_superior, delold=del_old) + else: + topology.standalone.rename_s(entry_dn, new_rdn, delold=del_old) + except ldap.NO_SUCH_ATTRIBUTE: + topology.standalone.log.info("accepted failure due to 47833: modrdn reports error.. but succeeds") + attempt = 0 + if new_superior: + dn = "%s,%s" % (new_rdn, new_superior) + base = new_superior + else: + base = ','.join(entry_dn.split(",")[1:]) + dn = "%s, %s" % (new_rdn, base) + myfilter = entry_dn.split(',')[0] + + while attempt < 10: + try: + ent = topology.standalone.getEntry(dn, ldap.SCOPE_BASE, myfilter) + break + except ldap.NO_SUCH_OBJECT: + topology.standalone.log.info("Accept failure due to 47833: unable to find (base) a modrdn entry") + attempt += 1 + time.sleep(1) + if attempt == 10: + ent = topology.standalone.getEntry(base, ldap.SCOPE_SUBTREE, myfilter) + ent = topology.standalone.getEntry(dn, ldap.SCOPE_BASE, myfilter) + + +def _check_memberof(topology=None, action=None, user_dn=None, group_dn=None, find_result=None): + assert(topology) + assert(user_dn) + assert(group_dn) + if action == ldap.MOD_ADD: + txt = 'add' + elif action == ldap.MOD_DELETE: + txt = 'delete' + else: + txt = 'replace' + topology.standalone.log.info('\n%s entry %s' % (txt, user_dn)) + topology.standalone.log.info('to group %s' % group_dn) + + topology.standalone.modify_s(group_dn, [(action, 'member', user_dn)]) + time.sleep(1) + _find_memberof(topology, user_dn=user_dn, group_dn=group_dn, find_result=find_result) + + +def test_ticket47829_init(topology): + topology.standalone.add_s(Entry((SCOPE_IN_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': SCOPE_IN_DN}))) + topology.standalone.add_s(Entry((SCOPE_OUT_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': SCOPE_OUT_DN}))) + topology.standalone.add_s(Entry((PROVISIONING_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': PROVISIONING_CN}))) + topology.standalone.add_s(Entry((ACTIVE_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': ACTIVE_CN}))) + topology.standalone.add_s(Entry((STAGE_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': STAGE_DN}))) + topology.standalone.add_s(Entry((DELETE_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': DELETE_CN}))) + + # add groups + topology.standalone.add_s(Entry((ACTIVE_GROUP_DN, { + 'objectclass': "top groupOfNames inetuser".split(), + 'cn': ACTIVE_GROUP_CN}))) + topology.standalone.add_s(Entry((STAGE_GROUP_DN, { + 'objectclass': "top groupOfNames inetuser".split(), + 'cn': STAGE_GROUP_CN}))) + topology.standalone.add_s(Entry((OUT_GROUP_DN, { + 'objectclass': "top groupOfNames inetuser".split(), + 'cn': OUT_GROUP_CN}))) + topology.standalone.add_s(Entry((INDIRECT_ACTIVE_GROUP_DN, { + 'objectclass': "top groupOfNames".split(), + 'cn': INDIRECT_ACTIVE_GROUP_CN}))) + + # add users + _add_user(topology, 'active') + _add_user(topology, 'stage') + _add_user(topology, 'out') + + # enable memberof of with scope IN except provisioning + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + dn = "cn=%s,%s" % (PLUGIN_MEMBER_OF, DN_PLUGIN) + topology.standalone.modify_s(dn, [(ldap.MOD_REPLACE, 'memberOfEntryScope', SCOPE_IN_DN)]) + topology.standalone.modify_s(dn, [(ldap.MOD_REPLACE, 'memberOfEntryScopeExcludeSubtree', PROVISIONING_DN)]) + + # enable RI with scope IN except provisioning + topology.standalone.plugins.enable(name=PLUGIN_REFER_INTEGRITY) + dn = "cn=%s,%s" % (PLUGIN_REFER_INTEGRITY, DN_PLUGIN) + topology.standalone.modify_s(dn, [(ldap.MOD_REPLACE, 'nsslapd-pluginentryscope', SCOPE_IN_DN)]) + topology.standalone.modify_s(dn, [(ldap.MOD_REPLACE, 'nsslapd-plugincontainerscope', SCOPE_IN_DN)]) + topology.standalone.modify_s(dn, [(ldap.MOD_REPLACE, 'nsslapd-pluginExcludeEntryScope', PROVISIONING_DN)]) + + topology.standalone.restart(timeout=10) + + +def test_ticket47829_mod_active_user_1(topology): + _header(topology, 'MOD: add an active user to an active group') + + # add active user to active group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_member(topology, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # remove active user to active group + _check_memberof(topology, action=ldap.MOD_DELETE, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_active_user_2(topology): + _header(topology, 'MOD: add an Active user to a Stage group') + + # add active user to stage group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=ACTIVE_USER_DN, group_dn=STAGE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=ACTIVE_USER_DN, group_dn=STAGE_GROUP_DN, find_result=True) + + # remove active user to stage group + _check_memberof(topology, action=ldap.MOD_DELETE, user_dn=ACTIVE_USER_DN, group_dn=STAGE_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_active_user_3(topology): + _header(topology, 'MOD: add an Active user to a out of scope group') + + # add active user to out of scope group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=ACTIVE_USER_DN, group_dn=OUT_GROUP_DN, find_result=False) + _find_member(topology, user_dn=ACTIVE_USER_DN, group_dn=OUT_GROUP_DN, find_result=True) + + # remove active user to out of scope group + _check_memberof(topology, action=ldap.MOD_DELETE, user_dn=ACTIVE_USER_DN, group_dn=OUT_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_stage_user_1(topology): + _header(topology, 'MOD: add an Stage user to a Active group') + + # add stage user to active group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=STAGE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=STAGE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # remove stage user to active group + _check_memberof(topology, action=ldap.MOD_DELETE, user_dn=STAGE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_stage_user_2(topology): + _header(topology, 'MOD: add an Stage user to a Stage group') + + # add stage user to stage group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=STAGE_USER_DN, group_dn=STAGE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=STAGE_USER_DN, group_dn=STAGE_GROUP_DN, find_result=True) + + # remove stage user to stage group + _check_memberof(topology, action=ldap.MOD_DELETE, user_dn=STAGE_USER_DN, group_dn=STAGE_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_stage_user_3(topology): + _header(topology, 'MOD: add an Stage user to a out of scope group') + + # add stage user to an out of scope group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=STAGE_USER_DN, group_dn=OUT_GROUP_DN, find_result=False) + _find_member(topology, user_dn=STAGE_USER_DN, group_dn=OUT_GROUP_DN, find_result=True) + + # remove stage user to out of scope group + _check_memberof(topology, action=ldap.MOD_DELETE, user_dn=STAGE_USER_DN, group_dn=OUT_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_out_user_1(topology): + _header(topology, 'MOD: add an out of scope user to an active group') + + # add out of scope user to active group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=OUT_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=OUT_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # remove out of scope user to active group + _check_memberof(topology, action=ldap.MOD_DELETE, user_dn=OUT_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_out_user_2(topology): + _header(topology, 'MOD: add an out of scope user to a Stage group') + + # add out of scope user to stage group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=OUT_USER_DN, group_dn=STAGE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=OUT_USER_DN, group_dn=STAGE_GROUP_DN, find_result=True) + + # remove out of scope user to stage group + _check_memberof(topology, action=ldap.MOD_DELETE, user_dn=OUT_USER_DN, group_dn=STAGE_GROUP_DN, find_result=False) + +def test_ticket47829_mod_out_user_3(topology): + _header(topology, 'MOD: add an out of scope user to an out of scope group') + + # add out of scope user to stage group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=OUT_USER_DN, group_dn=OUT_GROUP_DN, find_result=False) + _find_member(topology, user_dn=OUT_USER_DN, group_dn=OUT_GROUP_DN, find_result=True) + + # remove out of scope user to stage group + _check_memberof(topology, action=ldap.MOD_DELETE, user_dn=OUT_USER_DN, group_dn=OUT_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_active_user_modrdn_active_user_1(topology): + _header(topology, 'add an Active user to a Active group. Then move Active user to Active') + + # add Active user to active group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_member(topology, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move the Active entry to active, expect 'member' and 'memberof' + _modrdn_entry(topology, entry_dn=ACTIVE_USER_DN, new_rdn="cn=x%s" % ACTIVE_USER_CN, new_superior=ACTIVE_DN) + _find_memberof(topology, user_dn="cn=x%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_member(topology, user_dn="cn=x%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move the Active entry to active, expect 'member' and no 'memberof' + _modrdn_entry(topology, entry_dn="cn=x%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), new_rdn="cn=%s" % ACTIVE_USER_CN, new_superior=ACTIVE_DN) + _find_memberof(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=True) + + # remove active user to active group + _check_memberof(topology, action=ldap.MOD_DELETE, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_active_user_modrdn_stage_user_1(topology): + _header(topology, 'add an Active user to a Active group. Then move Active user to Stage') + + # add Active user to active group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_member(topology, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move the Active entry to stage, expect no 'member' and 'memberof' + _modrdn_entry(topology, entry_dn=ACTIVE_USER_DN, new_rdn="cn=%s" % ACTIVE_USER_CN, new_superior=STAGE_DN) + _find_memberof(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, STAGE_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, STAGE_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + + # move the Active entry to Stage, expect 'member' and no 'memberof' + _modrdn_entry(topology, entry_dn="cn=%s,%s" % (ACTIVE_USER_CN, STAGE_DN), new_rdn="cn=%s" % ACTIVE_USER_CN, new_superior=ACTIVE_DN) + _find_memberof(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_active_user_modrdn_out_user_1(topology): + _header(topology, 'add an Active user to a Active group. Then move Active user to out of scope') + + # add Active user to active group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_member(topology, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move the Active entry to out of scope, expect no 'member' and no 'memberof' + _modrdn_entry(topology, entry_dn=ACTIVE_USER_DN, new_rdn="cn=%s" % ACTIVE_USER_CN, new_superior=OUT_GROUP_DN) + _find_memberof(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, OUT_GROUP_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, OUT_GROUP_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + + # move the Active entry to out of scope, expect no 'member' and no 'memberof' + _modrdn_entry(topology, entry_dn="cn=%s,%s" % (ACTIVE_USER_CN, OUT_GROUP_DN), new_rdn="cn=%s" % ACTIVE_USER_CN, new_superior=ACTIVE_DN) + _find_memberof(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_modrdn_1(topology): + _header(topology, 'add an Stage user to a Active group. Then move Stage user to Active') + + # add Stage user to active group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=STAGE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=STAGE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move the Stage entry to active, expect 'member' and 'memberof' + _modrdn_entry(topology, entry_dn=STAGE_USER_DN, new_rdn="cn=%s" % STAGE_USER_CN, new_superior=ACTIVE_DN) + _find_memberof(topology, user_dn="cn=%s,%s" % (STAGE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_member(topology, user_dn="cn=%s,%s" % (STAGE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move the Active entry to Stage, expect no 'member' and no 'memberof' + _modrdn_entry(topology, entry_dn="cn=%s,%s" % (STAGE_USER_CN, ACTIVE_DN), new_rdn="cn=%s" % STAGE_USER_CN, new_superior=STAGE_DN) + _find_memberof(topology, user_dn="cn=%s,%s" % (STAGE_USER_CN, STAGE_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn="cn=%s,%s" % (STAGE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_stage_user_modrdn_active_user_1(topology): + _header(topology, 'add an Stage user to a Active group. Then move Stage user to Active') + + stage_user_dn = STAGE_USER_DN + stage_user_rdn = "cn=%s" % STAGE_USER_CN + active_user_dn = "cn=%s,%s" % (STAGE_USER_CN, ACTIVE_DN) + + # add Stage user to active group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move the Stage entry to Actve, expect 'member' and 'memberof' + _modrdn_entry(topology, entry_dn=stage_user_dn, new_rdn=stage_user_rdn, new_superior=ACTIVE_DN) + _find_memberof(topology, user_dn=active_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_member(topology, user_dn=active_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move the Active entry to Stage, expect no 'member' and no 'memberof' + _modrdn_entry(topology, entry_dn=active_user_dn, new_rdn=stage_user_rdn, new_superior=STAGE_DN) + _find_memberof(topology, user_dn=stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=False) + + +def test_ticket47829_mod_stage_user_modrdn_stage_user_1(topology): + _header(topology, 'add an Stage user to a Active group. Then move Stage user to Stage') + + _header(topology, 'Return because it requires a fix for 47833') + return + + old_stage_user_dn = STAGE_USER_DN + old_stage_user_rdn = "cn=%s" % STAGE_USER_CN + new_stage_user_rdn = "cn=x%s" % STAGE_USER_CN + new_stage_user_dn = "%s,%s" % (new_stage_user_rdn, STAGE_DN) + + # add Stage user to active group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=old_stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=old_stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move the Stage entry to Stage, expect no 'member' and 'memberof' + _modrdn_entry(topology, entry_dn=old_stage_user_dn, new_rdn=new_stage_user_rdn, new_superior=STAGE_DN) + _find_memberof(topology, user_dn=new_stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=new_stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=False) + + # move the Stage entry to Stage, expect no 'member' and no 'memberof' + _modrdn_entry(topology, entry_dn=new_stage_user_dn, new_rdn=old_stage_user_rdn, new_superior=STAGE_DN) + _find_memberof(topology, user_dn=old_stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=old_stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=False) + + +def test_ticket47829_indirect_active_group_1(topology): + _header(topology, 'add an Active group (G1) to an active group (G0). Then add active user to G1') + + topology.standalone.modify_s(INDIRECT_ACTIVE_GROUP_DN, [(ldap.MOD_ADD, 'member', ACTIVE_GROUP_DN)]) + + # add an active user to G1. Checks that user is memberof G1 + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_memberof(topology, user_dn=ACTIVE_USER_DN, group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=True) + + # remove G1 from G0 + topology.standalone.modify_s(INDIRECT_ACTIVE_GROUP_DN, [(ldap.MOD_DELETE, 'member', ACTIVE_GROUP_DN)]) + _find_memberof(topology, user_dn=ACTIVE_USER_DN, group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + _find_memberof(topology, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # remove active user from G1 + _check_memberof(topology, action=ldap.MOD_DELETE, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=False) + + +def test_ticket47829_indirect_active_group_2(topology): + _header(topology, 'add an Active group (G1) to an active group (G0). Then add active user to G1. Then move active user to stage') + + topology.standalone.modify_s(INDIRECT_ACTIVE_GROUP_DN, [(ldap.MOD_ADD, 'member', ACTIVE_GROUP_DN)]) + + # add an active user to G1. Checks that user is memberof G1 + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_memberof(topology, user_dn=ACTIVE_USER_DN, group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=True) + + # remove G1 from G0 + topology.standalone.modify_s(INDIRECT_ACTIVE_GROUP_DN, [(ldap.MOD_DELETE, 'member', ACTIVE_GROUP_DN)]) + _find_memberof(topology, user_dn=ACTIVE_USER_DN, group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + _find_memberof(topology, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move active user to stage + _modrdn_entry(topology, entry_dn=ACTIVE_USER_DN, new_rdn="cn=%s" % ACTIVE_USER_CN, new_superior=STAGE_DN) + + # stage user is no long member of active group and indirect active group + _find_memberof(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, STAGE_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_memberof(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, STAGE_DN), group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + + # active group and indirect active group do no longer have stage user as member + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, STAGE_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, STAGE_DN), group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + + # return back the entry to active. It remains not member + _modrdn_entry(topology, entry_dn="cn=%s,%s" % (ACTIVE_USER_CN, STAGE_DN), new_rdn="cn=%s" % ACTIVE_USER_CN, new_superior=ACTIVE_DN) + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + + +def test_ticket47829_indirect_active_group_3(topology): + _header(topology, 'add an Active group (G1) to an active group (G0). Then add active user to G1. Then move active user to out of the scope') + + topology.standalone.modify_s(INDIRECT_ACTIVE_GROUP_DN, [(ldap.MOD_ADD, 'member', ACTIVE_GROUP_DN)]) + + # add an active user to G1. Checks that user is memberof G1 + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_memberof(topology, user_dn=ACTIVE_USER_DN, group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=True) + + # remove G1 from G0 + topology.standalone.modify_s(INDIRECT_ACTIVE_GROUP_DN, [(ldap.MOD_DELETE, 'member', ACTIVE_GROUP_DN)]) + _find_memberof(topology, user_dn=ACTIVE_USER_DN, group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + _find_memberof(topology, user_dn=ACTIVE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move active user to out of the scope + _modrdn_entry(topology, entry_dn=ACTIVE_USER_DN, new_rdn="cn=%s" % ACTIVE_USER_CN, new_superior=SCOPE_OUT_DN) + + # stage user is no long member of active group and indirect active group + _find_memberof(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, SCOPE_OUT_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_memberof(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, SCOPE_OUT_DN), group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + + # active group and indirect active group do no longer have stage user as member + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, SCOPE_OUT_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, SCOPE_OUT_DN), group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + + # return back the entry to active. It remains not member + _modrdn_entry(topology, entry_dn="cn=%s,%s" % (ACTIVE_USER_CN, SCOPE_OUT_DN), new_rdn="cn=%s" % ACTIVE_USER_CN, new_superior=ACTIVE_DN) + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn="cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN), group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + + +def test_ticket47829_indirect_active_group_4(topology): + _header(topology, 'add an Active group (G1) to an active group (G0). Then add stage user to G1. Then move user to active. Then move it back') + + topology.standalone.modify_s(INDIRECT_ACTIVE_GROUP_DN, [(ldap.MOD_ADD, 'member', ACTIVE_GROUP_DN)]) + + # add stage user to active group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=STAGE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=STAGE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_member(topology, user_dn=STAGE_USER_DN, group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + _find_memberof(topology, user_dn=STAGE_USER_DN, group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + _find_memberof(topology, user_dn=STAGE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=False) + + # move stage user to active + _modrdn_entry(topology, entry_dn=STAGE_USER_DN, new_rdn="cn=%s" % STAGE_USER_CN, new_superior=ACTIVE_DN) + renamed_stage_dn = "cn=%s,%s" % (STAGE_USER_CN, ACTIVE_DN) + _find_member(topology, user_dn=renamed_stage_dn, group_dn=ACTIVE_GROUP_DN, find_result=True) + _find_member(topology, user_dn=renamed_stage_dn, group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + _find_memberof(topology, user_dn=renamed_stage_dn, group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=True) + _find_memberof(topology, user_dn=renamed_stage_dn, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move back active to stage + _modrdn_entry(topology, entry_dn=renamed_stage_dn, new_rdn="cn=%s" % STAGE_USER_CN, new_superior=STAGE_DN) + _find_member(topology, user_dn=STAGE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member(topology, user_dn=STAGE_USER_DN, group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + _find_memberof(topology, user_dn=STAGE_USER_DN, group_dn=INDIRECT_ACTIVE_GROUP_DN, find_result=False) + _find_memberof(topology, user_dn=STAGE_USER_DN, group_dn=ACTIVE_GROUP_DN, find_result=False) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47833_test.py b/dirsrvtests/tests/tickets/ticket47833_test.py new file mode 100644 index 0000000..7140f01 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47833_test.py @@ -0,0 +1,263 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +SCOPE_IN_CN = 'in' +SCOPE_OUT_CN = 'out' +SCOPE_IN_DN = 'cn=%s,%s' % (SCOPE_IN_CN, SUFFIX) +SCOPE_OUT_DN = 'cn=%s,%s' % (SCOPE_OUT_CN, SUFFIX) + +PROVISIONING_CN = "provisioning" +PROVISIONING_DN = "cn=%s,%s" % (PROVISIONING_CN, SCOPE_IN_DN) + +ACTIVE_CN = "accounts" +STAGE_CN = "staged users" +DELETE_CN = "deleted users" +ACTIVE_DN = "cn=%s,%s" % (ACTIVE_CN, SCOPE_IN_DN) +STAGE_DN = "cn=%s,%s" % (STAGE_CN, PROVISIONING_DN) +DELETE_DN = "cn=%s,%s" % (DELETE_CN, PROVISIONING_DN) + +STAGE_USER_CN = "stage guy" +STAGE_USER_DN = "cn=%s,%s" % (STAGE_USER_CN, STAGE_DN) + +ACTIVE_USER_CN = "active guy" +ACTIVE_USER_DN = "cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN) + +OUT_USER_CN = "out guy" +OUT_USER_DN = "cn=%s,%s" % (OUT_USER_CN, SCOPE_OUT_DN) + +STAGE_GROUP_CN = "stage group" +STAGE_GROUP_DN = "cn=%s,%s" % (STAGE_GROUP_CN, STAGE_DN) + +ACTIVE_GROUP_CN = "active group" +ACTIVE_GROUP_DN = "cn=%s,%s" % (ACTIVE_GROUP_CN, ACTIVE_DN) + +OUT_GROUP_CN = "out group" +OUT_GROUP_DN = "cn=%s,%s" % (OUT_GROUP_CN, SCOPE_OUT_DN) + + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def _header(topology, label): + topology.standalone.log.info("\n\n###############################################") + topology.standalone.log.info("#######") + topology.standalone.log.info("####### %s" % label) + topology.standalone.log.info("#######") + topology.standalone.log.info("###############################################") + +def _add_user(topology, type='active'): + if type == 'active': + topology.standalone.add_s(Entry((ACTIVE_USER_DN, { + 'objectclass': "top person inetuser".split(), + 'sn': ACTIVE_USER_CN, + 'cn': ACTIVE_USER_CN}))) + elif type == 'stage': + topology.standalone.add_s(Entry((STAGE_USER_DN, { + 'objectclass': "top person inetuser".split(), + 'sn': STAGE_USER_CN, + 'cn': STAGE_USER_CN}))) + else: + topology.standalone.add_s(Entry((OUT_USER_DN, { + 'objectclass': "top person inetuser".split(), + 'sn': OUT_USER_CN, + 'cn': OUT_USER_CN}))) + +def _find_memberof(topology, user_dn=None, group_dn=None, find_result=True): + assert(topology) + assert(user_dn) + assert(group_dn) + ent = topology.standalone.getEntry(user_dn, ldap.SCOPE_BASE, "(objectclass=*)", ['memberof']) + found = False + if ent.hasAttr('memberof'): + + for val in ent.getValues('memberof'): + topology.standalone.log.info("!!!!!!! %s: memberof->%s" % (user_dn, val)) + if val == group_dn: + found = True + break + + if find_result: + assert(found) + else: + assert(not found) + +def _find_member(topology, user_dn=None, group_dn=None, find_result=True): + assert(topology) + assert(user_dn) + assert(group_dn) + ent = topology.standalone.getEntry(group_dn, ldap.SCOPE_BASE, "(objectclass=*)", ['member']) + found = False + if ent.hasAttr('member'): + + for val in ent.getValues('member'): + topology.standalone.log.info("!!!!!!! %s: member ->%s" % (group_dn, val)) + if val == user_dn: + found = True + break + + if find_result: + assert(found) + else: + assert(not found) + +def _modrdn_entry(topology=None, entry_dn=None, new_rdn=None, del_old=0, new_superior=None): + assert topology != None + assert entry_dn != None + assert new_rdn != None + + + topology.standalone.log.info("\n\n######################### MODRDN %s ######################\n" % new_rdn) + if new_superior: + topology.standalone.rename_s(entry_dn, new_rdn, newsuperior=new_superior, delold=del_old) + else: + topology.standalone.rename_s(entry_dn, new_rdn, delold=del_old) + +def _check_memberof(topology=None, action=None, user_dn=None, group_dn=None, find_result=None): + assert(topology) + assert(user_dn) + assert(group_dn) + if action == ldap.MOD_ADD: + txt = 'add' + elif action == ldap.MOD_DELETE: + txt = 'delete' + else: + txt = 'replace' + topology.standalone.log.info('\n%s entry %s' % (txt, user_dn)) + topology.standalone.log.info('to group %s' % group_dn) + + topology.standalone.modify_s(group_dn, [(action, 'member', user_dn)]) + time.sleep(1) + _find_memberof(topology, user_dn=user_dn, group_dn=group_dn, find_result=find_result) + + + + +def test_ticket47829_init(topology): + topology.standalone.add_s(Entry((SCOPE_IN_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': SCOPE_IN_DN}))) + topology.standalone.add_s(Entry((SCOPE_OUT_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': SCOPE_OUT_DN}))) + topology.standalone.add_s(Entry((PROVISIONING_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': PROVISIONING_CN}))) + topology.standalone.add_s(Entry((ACTIVE_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': ACTIVE_CN}))) + topology.standalone.add_s(Entry((STAGE_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': STAGE_DN}))) + topology.standalone.add_s(Entry((DELETE_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': DELETE_CN}))) + + # add groups + topology.standalone.add_s(Entry((ACTIVE_GROUP_DN, { + 'objectclass': "top groupOfNames".split(), + 'cn': ACTIVE_GROUP_CN}))) + topology.standalone.add_s(Entry((STAGE_GROUP_DN, { + 'objectclass': "top groupOfNames".split(), + 'cn': STAGE_GROUP_CN}))) + topology.standalone.add_s(Entry((OUT_GROUP_DN, { + 'objectclass': "top groupOfNames".split(), + 'cn': OUT_GROUP_CN}))) + + # add users + _add_user(topology, 'active') + _add_user(topology, 'stage') + _add_user(topology, 'out') + + + + # enable memberof of with scope account + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + dn = "cn=%s,%s" % (PLUGIN_MEMBER_OF, DN_PLUGIN) + topology.standalone.modify_s(dn, [(ldap.MOD_REPLACE, 'memberOfEntryScope', ACTIVE_DN)]) + + + + topology.standalone.restart(timeout=10) + + + + +def test_ticket47829_mod_stage_user_modrdn_stage_user_1(topology): + _header(topology, 'add an Stage user to a Active group. Then move Stage user to Stage') + + old_stage_user_dn = STAGE_USER_DN + old_stage_user_rdn = "cn=%s" % STAGE_USER_CN + new_stage_user_rdn = "cn=x%s" % STAGE_USER_CN + new_stage_user_dn = "%s,%s" % (new_stage_user_rdn, STAGE_DN) + + # add Stage user to active group + _check_memberof(topology, action=ldap.MOD_ADD, user_dn=old_stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member (topology, user_dn=old_stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=True) + + # move the Stage entry to Stage, expect no 'member' and 'memberof' + _modrdn_entry (topology, entry_dn=old_stage_user_dn, new_rdn=new_stage_user_rdn, new_superior=STAGE_DN) + _find_memberof(topology, user_dn=new_stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=False) + _find_member (topology, user_dn=new_stage_user_dn, group_dn=ACTIVE_GROUP_DN, find_result=False) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47838_test.py b/dirsrvtests/tests/tickets/ticket47838_test.py new file mode 100644 index 0000000..a9d4307 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47838_test.py @@ -0,0 +1,854 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +import shutil +from lib389 import DirSrv, Entry, tools +from lib389 import DirSrvTools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +CONFIG_DN = 'cn=config' +ENCRYPTION_DN = 'cn=encryption,%s' % CONFIG_DN +MY_SECURE_PORT = '36363' +RSA = 'RSA' +RSA_DN = 'cn=%s,%s' % (RSA, ENCRYPTION_DN) +SERVERCERT = 'Server-Cert' +plus_all_ecount = 0 +plus_all_dcount = 0 +plus_all_ecount_noweak = 0 +plus_all_dcount_noweak = 0 + +# Cipher counts tend to change with each new verson of NSS +nss_version = '' +NSS320 = '3.20.0' +NSS321 = '3.21.0' # RHEL6 +NSS323 = '3.23.0' # F22 +NSS325 = '3.25.0' # F23/F24 + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def _header(topology, label): + topology.standalone.log.info("\n\n###############################################") + topology.standalone.log.info("#######") + topology.standalone.log.info("####### %s" % label) + topology.standalone.log.info("#######") + topology.standalone.log.info("###############################################") + + +def test_47838_init(topology): + """ + Generate self signed cert and import it to the DS cert db. + Enable SSL + """ + _header(topology, 'Testing Ticket 47838 - harden the list of ciphers available by default') + + onss_version = os.popen("rpm -q nss | awk -F'-' '{print $2}'", "r") + global nss_version + nss_version = onss_version.readline() + + conf_dir = topology.standalone.confdir + + log.info("\n######################### Checking existing certs ######################\n") + os.system('certutil -L -d %s -n "CA certificate"' % conf_dir) + os.system('certutil -L -d %s -n "%s"' % (conf_dir, SERVERCERT)) + + log.info("\n######################### Create a password file ######################\n") + pwdfile = '%s/pwdfile.txt' % (conf_dir) + opasswd = os.popen("(ps -ef ; w ) | sha1sum | awk '{print $1}'", "r") + passwd = opasswd.readline() + pwdfd = open(pwdfile, "w") + pwdfd.write(passwd) + pwdfd.close() + + log.info("\n######################### Create a noise file ######################\n") + noisefile = '%s/noise.txt' % (conf_dir) + noise = os.popen("(w ; ps -ef ; date ) | sha1sum | awk '{print $1}'", "r") + noisewdfd = open(noisefile, "w") + noisewdfd.write(noise.readline()) + noisewdfd.close() + time.sleep(1) + + log.info("\n######################### Create key3.db and cert8.db database ######################\n") + os.system("ls %s" % pwdfile) + os.system("cat %s" % pwdfile) + os.system('certutil -N -d %s -f %s' % (conf_dir, pwdfile)) + + log.info("\n######################### Creating encryption key for CA ######################\n") + os.system('certutil -G -d %s -z %s -f %s' % (conf_dir, noisefile, pwdfile)) + + log.info("\n######################### Creating self-signed CA certificate ######################\n") + os.system('( echo y ; echo ; echo y ) | certutil -S -n "CA certificate" -s "cn=CAcert" -x -t "CT,," -m 1000 -v 120 -d %s -z %s -f %s -2' % + (conf_dir, noisefile, pwdfile)) + + log.info("\n######################### Exporting the CA certificate to cacert.asc ######################\n") + cafile = '%s/cacert.asc' % conf_dir + catxt = os.popen('certutil -L -d %s -n "CA certificate" -a' % conf_dir) + cafd = open(cafile, "w") + while True: + line = catxt.readline() + if (line == ''): + break + cafd.write(line) + cafd.close() + + log.info("\n######################### Generate the server certificate ######################\n") + ohostname = os.popen('hostname --fqdn', "r") + myhostname = ohostname.readline() + os.system('certutil -S -n "%s" -s "cn=%s,ou=389 Directory Server" -c "CA certificate" -t "u,u,u" -m 1001 -v 120 -d %s -z %s -f %s' % (SERVERCERT, myhostname.rstrip(), conf_dir, noisefile, pwdfile)) + + log.info("\n######################### create the pin file ######################\n") + pinfile = '%s/pin.txt' % (conf_dir) + pintxt = 'Internal (Software) Token:%s' % passwd + pinfd = open(pinfile, "w") + pinfd.write(pintxt) + pinfd.close() + time.sleep(1) + + log.info("\n######################### enable SSL in the directory server with all ciphers ######################\n") + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3', 'off'), + (ldap.MOD_REPLACE, 'nsTLS1', 'on'), + (ldap.MOD_REPLACE, 'nsSSLClientAuth', 'allowed'), + (ldap.MOD_REPLACE, 'allowWeakCipher', 'on'), + (ldap.MOD_REPLACE, 'nsSSL3Ciphers', '+all')]) + + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-security', 'on'), + (ldap.MOD_REPLACE, 'nsslapd-ssl-check-hostname', 'off'), + (ldap.MOD_REPLACE, 'nsslapd-secureport', MY_SECURE_PORT)]) + + topology.standalone.add_s(Entry((RSA_DN, {'objectclass': "top nsEncryptionModule".split(), + 'cn': RSA, + 'nsSSLPersonalitySSL': SERVERCERT, + 'nsSSLToken': 'internal (software)', + 'nsSSLActivation': 'on'}))) + + +def comp_nsSSLEnableCipherCount(topology, ecount): + """ + Check nsSSLEnabledCipher count with ecount + """ + log.info("Checking nsSSLEnabledCiphers...") + msgid = topology.standalone.search_ext(ENCRYPTION_DN, ldap.SCOPE_BASE, 'cn=*', ['nsSSLEnabledCiphers']) + enabledciphercnt = 0 + rtype, rdata, rmsgid = topology.standalone.result2(msgid) + topology.standalone.log.info("%d results" % len(rdata)) + + topology.standalone.log.info("Results:") + for dn, attrs in rdata: + topology.standalone.log.info("dn: %s" % dn) + if 'nsSSLEnabledCiphers' in attrs: + enabledciphercnt = len(attrs['nsSSLEnabledCiphers']) + topology.standalone.log.info("enabledCipherCount: %d" % enabledciphercnt) + assert ecount == enabledciphercnt + + +def test_47838_run_0(topology): + """ + Check nsSSL3Ciphers: +all + All ciphers are enabled except null. + Note: allowWeakCipher: on + """ + _header(topology, 'Test Case 1 - Check the ciphers availability for "+all"; allowWeakCipher: on') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '64')]) + time.sleep(5) + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.restart(timeout=120) + enabled = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | wc -l' % topology.standalone.errlog) + disabled = os.popen('egrep "SSL alert:" %s | egrep \": disabled\" | wc -l' % topology.standalone.errlog) + ecount = int(enabled.readline().rstrip()) + dcount = int(disabled.readline().rstrip()) + + log.info("Enabled ciphers: %d" % ecount) + log.info("Disabled ciphers: %d" % dcount) + if nss_version >= NSS320: + assert ecount >= 53 + assert dcount <= 17 + else: + assert ecount >= 60 + assert dcount <= 7 + + global plus_all_ecount + global plus_all_dcount + plus_all_ecount = ecount + plus_all_dcount = dcount + weak = os.popen('egrep "SSL alert:" %s | egrep "WEAK CIPHER" | wc -l' % topology.standalone.errlog) + wcount = int(weak.readline().rstrip()) + log.info("Weak ciphers: %d" % wcount) + assert wcount <= 29 + + comp_nsSSLEnableCipherCount(topology, ecount) + + +def test_47838_run_1(topology): + """ + Check nsSSL3Ciphers: +all + All ciphers are enabled except null. + Note: default allowWeakCipher (i.e., off) for +all + """ + _header(topology, 'Test Case 2 - Check the ciphers availability for "+all" with default allowWeakCiphers') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '64')]) + time.sleep(1) + # Make sure allowWeakCipher is not set. + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_DELETE, 'allowWeakCipher', None)]) + + log.info("\n######################### Restarting the server ######################\n") + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_0' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + enabled = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | wc -l' % topology.standalone.errlog) + disabled = os.popen('egrep "SSL alert:" %s | egrep \": disabled\" | wc -l' % topology.standalone.errlog) + ecount = int(enabled.readline().rstrip()) + dcount = int(disabled.readline().rstrip()) + + global plus_all_ecount_noweak + global plus_all_dcount_noweak + plus_all_ecount_noweak = ecount + plus_all_dcount_noweak = dcount + + log.info("Enabled ciphers: %d" % ecount) + log.info("Disabled ciphers: %d" % dcount) + assert ecount >= 31 + assert dcount <= 36 + weak = os.popen('egrep "SSL alert:" %s | egrep "WEAK CIPHER" | wc -l' % topology.standalone.errlog) + wcount = int(weak.readline().rstrip()) + log.info("Weak ciphers: %d" % wcount) + assert wcount <= 29 + + comp_nsSSLEnableCipherCount(topology, ecount) + + +def test_47838_run_2(topology): + """ + Check nsSSL3Ciphers: +rsa_aes_128_sha,+rsa_aes_256_sha + rsa_aes_128_sha, tls_rsa_aes_128_sha, rsa_aes_256_sha, tls_rsa_aes_256_sha are enabled. + default allowWeakCipher + """ + _header(topology, 'Test Case 3 - Check the ciphers availability for "+rsa_aes_128_sha,+rsa_aes_256_sha" with default allowWeakCipher') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', '+rsa_aes_128_sha,+rsa_aes_256_sha')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_1' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + enabled = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | wc -l' % topology.standalone.errlog) + disabled = os.popen('egrep "SSL alert:" %s | egrep \": disabled\" | wc -l' % topology.standalone.errlog) + ecount = int(enabled.readline().rstrip()) + dcount = int(disabled.readline().rstrip()) + + log.info("Enabled ciphers: %d" % ecount) + log.info("Disabled ciphers: %d" % dcount) + global plus_all_ecount + global plus_all_dcount + assert ecount == 2 + assert dcount == (plus_all_ecount + plus_all_dcount - ecount) + + comp_nsSSLEnableCipherCount(topology, ecount) + + +def test_47838_run_3(topology): + """ + Check nsSSL3Ciphers: -all + All ciphers are disabled. + default allowWeakCipher + """ + _header(topology, 'Test Case 4 - Check the ciphers availability for "-all"') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', '-all')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_2' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + enabled = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | wc -l' % topology.standalone.errlog) + ecount = int(enabled.readline().rstrip()) + + log.info("Enabled ciphers: %d" % ecount) + global plus_all_ecount + assert ecount == 0 + + disabledmsg = os.popen('egrep "Disabling SSL" %s' % topology.standalone.errlog) + log.info("Disabling SSL message?: %s" % disabledmsg.readline()) + assert disabledmsg != '' + + comp_nsSSLEnableCipherCount(topology, ecount) + + +def test_47838_run_4(topology): + """ + Check no nsSSL3Ciphers + Default ciphers are enabled. + default allowWeakCipher + """ + _header(topology, 'Test Case 5 - Check no nsSSL3Ciphers (default setting) with default allowWeakCipher') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_DELETE, 'nsSSL3Ciphers', '-all')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_3' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + enabled = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | wc -l' % topology.standalone.errlog) + disabled = os.popen('egrep "SSL alert:" %s | egrep \": disabled\" | wc -l' % topology.standalone.errlog) + ecount = int(enabled.readline().rstrip()) + dcount = int(disabled.readline().rstrip()) + + log.info("Enabled ciphers: %d" % ecount) + log.info("Disabled ciphers: %d" % dcount) + global plus_all_ecount + global plus_all_dcount + if nss_version >= NSS323: + assert ecount == 29 + else: + assert ecount == 20 + assert dcount == (plus_all_ecount + plus_all_dcount - ecount) + weak = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | egrep "WEAK CIPHER" | wc -l' % topology.standalone.errlog) + wcount = int(weak.readline().rstrip()) + log.info("Weak ciphers in the default setting: %d" % wcount) + assert wcount == 0 + + comp_nsSSLEnableCipherCount(topology, ecount) + + +def test_47838_run_5(topology): + """ + Check nsSSL3Ciphers: default + Default ciphers are enabled. + default allowWeakCipher + """ + _header(topology, 'Test Case 6 - Check default nsSSL3Ciphers (default setting) with default allowWeakCipher') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', 'default')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_4' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + enabled = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | wc -l' % topology.standalone.errlog) + disabled = os.popen('egrep "SSL alert:" %s | egrep \": disabled\" | wc -l' % topology.standalone.errlog) + ecount = int(enabled.readline().rstrip()) + dcount = int(disabled.readline().rstrip()) + + log.info("Enabled ciphers: %d" % ecount) + log.info("Disabled ciphers: %d" % dcount) + global plus_all_ecount + global plus_all_dcount + if nss_version >= NSS323: + assert ecount == 29 + else: + assert ecount == 23 + assert dcount == (plus_all_ecount + plus_all_dcount - ecount) + weak = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | egrep "WEAK CIPHER" | wc -l' % topology.standalone.errlog) + wcount = int(weak.readline().rstrip()) + log.info("Weak ciphers in the default setting: %d" % wcount) + assert wcount == 0 + + comp_nsSSLEnableCipherCount(topology, ecount) + + +def test_47838_run_6(topology): + """ + Check nsSSL3Ciphers: +all,-rsa_rc4_128_md5 + All ciphers are disabled. + default allowWeakCipher + """ + _header(topology, 'Test Case 7 - Check nsSSL3Ciphers: +all,-tls_dhe_rsa_aes_128_gcm_sha with default allowWeakCipher') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', '+all,-tls_dhe_rsa_aes_128_gcm_sha')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_5' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + enabled = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | wc -l' % topology.standalone.errlog) + disabled = os.popen('egrep "SSL alert:" %s | egrep \": disabled\" | wc -l' % topology.standalone.errlog) + ecount = int(enabled.readline().rstrip()) + dcount = int(disabled.readline().rstrip()) + + log.info("Enabled ciphers: %d" % ecount) + log.info("Disabled ciphers: %d" % dcount) + global plus_all_ecount_noweak + global plus_all_dcount_noweak + log.info("ALL Ecount: %d" % plus_all_ecount_noweak) + log.info("ALL Dcount: %d" % plus_all_dcount_noweak) + assert ecount == (plus_all_ecount_noweak - 1) + assert dcount == (plus_all_dcount_noweak + 1) + + comp_nsSSLEnableCipherCount(topology, ecount) + + +def test_47838_run_7(topology): + """ + Check nsSSL3Ciphers: -all,+rsa_rc4_128_md5 + All ciphers are disabled. + default allowWeakCipher + """ + _header(topology, 'Test Case 8 - Check nsSSL3Ciphers: -all,+rsa_rc4_128_md5 with default allowWeakCipher') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', '-all,+rsa_rc4_128_md5')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_6' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + enabled = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | wc -l' % topology.standalone.errlog) + disabled = os.popen('egrep "SSL alert:" %s | egrep \": disabled\" | wc -l' % topology.standalone.errlog) + ecount = int(enabled.readline().rstrip()) + dcount = int(disabled.readline().rstrip()) + + log.info("Enabled ciphers: %d" % ecount) + log.info("Disabled ciphers: %d" % dcount) + global plus_all_ecount + global plus_all_dcount + assert ecount == 1 + assert dcount == (plus_all_ecount + plus_all_dcount - ecount) + + comp_nsSSLEnableCipherCount(topology, ecount) + + +def test_47838_run_8(topology): + """ + Check nsSSL3Ciphers: default + allowWeakCipher: off + Strong Default ciphers are enabled. + """ + _header(topology, 'Test Case 9 - Check default nsSSL3Ciphers (default setting + allowWeakCipher: off)') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', 'default'), + (ldap.MOD_REPLACE, 'allowWeakCipher', 'off')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_7' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + enabled = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | wc -l' % topology.standalone.errlog) + disabled = os.popen('egrep "SSL alert:" %s | egrep \": disabled\" | wc -l' % topology.standalone.errlog) + ecount = int(enabled.readline().rstrip()) + dcount = int(disabled.readline().rstrip()) + + log.info("Enabled ciphers: %d" % ecount) + log.info("Disabled ciphers: %d" % dcount) + global plus_all_ecount + global plus_all_dcount + if nss_version >= NSS323: + assert ecount == 29 + else: + assert ecount == 23 + assert dcount == (plus_all_ecount + plus_all_dcount - ecount) + weak = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | egrep "WEAK CIPHER" | wc -l' % topology.standalone.errlog) + wcount = int(weak.readline().rstrip()) + log.info("Weak ciphers in the default setting: %d" % wcount) + assert wcount == 0 + + comp_nsSSLEnableCipherCount(topology, ecount) + + +def test_47838_run_9(topology): + """ + Check no nsSSL3Ciphers + Default ciphers are enabled. + allowWeakCipher: on + nsslapd-errorlog-level: 0 + """ + _header(topology, 'Test Case 10 - Check no nsSSL3Ciphers (default setting) with no errorlog-level & allowWeakCipher on') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', None), + (ldap.MOD_REPLACE, 'allowWeakCipher', 'on')]) + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', None)]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_8' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + enabled = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | wc -l' % topology.standalone.errlog) + disabled = os.popen('egrep "SSL alert:" %s | egrep \": disabled\" | wc -l' % topology.standalone.errlog) + ecount = int(enabled.readline().rstrip()) + dcount = int(disabled.readline().rstrip()) + + log.info("Enabled ciphers: %d" % ecount) + log.info("Disabled ciphers: %d" % dcount) + if nss_version >= NSS323: + assert ecount == 36 + else: + assert ecount == 30 + assert dcount == 0 + weak = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | egrep "WEAK CIPHER" | wc -l' % topology.standalone.errlog) + wcount = int(weak.readline().rstrip()) + log.info("Weak ciphers in the default setting: %d" % wcount) + if nss_version >= NSS320: + assert wcount == 7 + else: + assert wcount == 11 + + comp_nsSSLEnableCipherCount(topology, ecount) + + +def test_47838_run_10(topology): + """ + Check nsSSL3Ciphers: -TLS_RSA_WITH_NULL_MD5,+TLS_RSA_WITH_RC4_128_MD5, + +TLS_RSA_EXPORT_WITH_RC4_40_MD5,+TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5, + +TLS_DHE_RSA_WITH_DES_CBC_SHA,+SSL_RSA_FIPS_WITH_DES_CBC_SHA, + +TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,+SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA, + +TLS_RSA_EXPORT1024_WITH_RC4_56_SHA,+TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA, + -SSL_CK_RC4_128_WITH_MD5,-SSL_CK_RC4_128_EXPORT40_WITH_MD5, + -SSL_CK_RC2_128_CBC_WITH_MD5,-SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5, + -SSL_CK_DES_64_CBC_WITH_MD5,-SSL_CK_DES_192_EDE3_CBC_WITH_MD5 + allowWeakCipher: on + nsslapd-errorlog-level: 0 + """ + _header(topology, 'Test Case 11 - Check nsSSL3Ciphers: long list using the NSS Cipher Suite name with allowWeakCipher on') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', + '-TLS_RSA_WITH_NULL_MD5,+TLS_RSA_WITH_RC4_128_MD5,+TLS_RSA_EXPORT_WITH_RC4_40_MD5,+TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5,+TLS_DHE_RSA_WITH_DES_CBC_SHA,+SSL_RSA_FIPS_WITH_DES_CBC_SHA,+TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,+SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA,+TLS_RSA_EXPORT1024_WITH_RC4_56_SHA,+TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA,-SSL_CK_RC4_128_WITH_MD5,-SSL_CK_RC4_128_EXPORT40_WITH_MD5,-SSL_CK_RC2_128_CBC_WITH_MD5,-SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5,-SSL_CK_DES_64_CBC_WITH_MD5,-SSL_CK_DES_192_EDE3_CBC_WITH_MD5')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_9' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + enabled = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | wc -l' % topology.standalone.errlog) + disabled = os.popen('egrep "SSL alert:" %s | egrep \": disabled\" | wc -l' % topology.standalone.errlog) + ecount = int(enabled.readline().rstrip()) + dcount = int(disabled.readline().rstrip()) + + log.info("Enabled ciphers: %d" % ecount) + log.info("Disabled ciphers: %d" % dcount) + global plus_all_ecount + global plus_all_dcount + assert ecount == 9 + assert dcount == 0 + weak = os.popen('egrep "SSL alert:" %s | egrep \": enabled\" | egrep "WEAK CIPHER" | wc -l' % topology.standalone.errlog) + wcount = int(weak.readline().rstrip()) + log.info("Weak ciphers in the default setting: %d" % wcount) + + topology.standalone.log.info("ticket47838 was successfully verified.") + + comp_nsSSLEnableCipherCount(topology, ecount) + + +def test_47838_run_11(topology): + """ + Check nsSSL3Ciphers: +fortezza + SSL_GetImplementedCiphers does not return this as a secuire cipher suite + """ + _header(topology, 'Test Case 12 - Check nsSSL3Ciphers: +fortezza, which is not supported') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', '+fortezza')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_10' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + errmsg = os.popen('egrep "SSL alert:" %s | egrep "is not available in NSS"' % topology.standalone.errlog) + if errmsg != "": + log.info("Expected error message:") + log.info("%s" % errmsg.readline()) + else: + log.info("Expected error message was not found") + assert False + + comp_nsSSLEnableCipherCount(topology, 0) + + +def test_47928_run_0(topology): + """ + No SSL version config parameters. + Check SSL3 (TLS1.0) is off. + """ + _header(topology, 'Test Case 13 - No SSL version config parameters') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + # add them once and remove them + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3', 'off'), + (ldap.MOD_REPLACE, 'nsTLS1', 'on'), + (ldap.MOD_REPLACE, 'sslVersionMin', 'TLS1.1'), + (ldap.MOD_REPLACE, 'sslVersionMax', 'TLS1.2')]) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_DELETE, 'nsSSL3', None), + (ldap.MOD_DELETE, 'nsTLS1', None), + (ldap.MOD_DELETE, 'sslVersionMin', None), + (ldap.MOD_DELETE, 'sslVersionMax', None)]) + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '64')]) + time.sleep(5) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_11' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + errmsg = os.popen('egrep "SSL alert:" %s | egrep "Default SSL Version settings; Configuring the version range as min: TLS1.1"' % topology.standalone.errlog) + if errmsg != "": + log.info("Expected message:") + log.info("%s" % errmsg.readline()) + else: + log.info("Expected message was not found") + assert False + + +def test_47928_run_1(topology): + """ + No nsSSL3, nsTLS1; sslVersionMin > sslVersionMax + Check sslVersionMax is ignored. + """ + _header(topology, 'Test Case 14 - No nsSSL3, nsTLS1; sslVersionMin > sslVersionMax') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'sslVersionMin', 'TLS1.2'), + (ldap.MOD_REPLACE, 'sslVersionMax', 'TLS1.1')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_12' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + topology.standalone.start(timeout=120) + + errmsg = os.popen('egrep "SSL alert:" %s | egrep "The min value of NSS version range"' % topology.standalone.errlog) + if errmsg != "": + log.info("Expected message:") + log.info("%s" % errmsg.readline()) + else: + log.info("Expected message was not found") + assert False + + errmsg = os.popen('egrep "SSL Initialization" %s | egrep "Configured SSL version range: min: TLS1.2, max: TLS1"' % topology.standalone.errlog) + if errmsg != "": + log.info("Expected message:") + log.info("%s" % errmsg.readline()) + else: + log.info("Expected message was not found") + assert False + + +def test_47928_run_2(topology): + """ + nsSSL3: on; sslVersionMin: TLS1.1; sslVersionMax: TLS1.2 + Conflict between nsSSL3 and range; nsSSL3 is disabled + """ + _header(topology, 'Test Case 15 - nsSSL3: on; sslVersionMin: TLS1.1; sslVersionMax: TLS1.2') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'sslVersionMin', 'TLS1.1'), + (ldap.MOD_REPLACE, 'sslVersionMax', 'TLS1.2'), + (ldap.MOD_REPLACE, 'nsSSL3', 'on')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_13' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + errmsg = os.popen('egrep "SSL alert:" %s | egrep "Found unsecure configuration: nsSSL3: on"' % topology.standalone.errlog) + if errmsg != "": + log.info("Expected message:") + log.info("%s" % errmsg.readline()) + else: + log.info("Expected message was not found") + assert False + + errmsg = os.popen('egrep "SSL alert:" %s | egrep "Respect the supported range."' % topology.standalone.errlog) + if errmsg != "": + log.info("Expected message:") + log.info("%s" % errmsg.readline()) + else: + log.info("Expected message was not found") + assert False + + errmsg = os.popen('egrep "SSL Initialization" %s | egrep "Configured SSL version range: min: TLS1.1, max: TLS1"' % topology.standalone.errlog) + if errmsg != "": + log.info("Expected message:") + log.info("%s" % errmsg.readline()) + else: + log.info("Expected message was not found") + assert False + + +def test_47928_run_3(topology): + """ + nsSSL3: on; nsTLS1: off; sslVersionMin: TLS1.1; sslVersionMax: TLS1.2 + Conflict between nsSSL3/nsTLS1 and range; nsSSL3 is disabled; nsTLS1 is enabled. + """ + _header(topology, 'Test Case 16 - nsSSL3: on; nsTLS1: off; sslVersionMin: TLS1.1; sslVersionMax: TLS1.2') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'sslVersionMin', 'TLS1.1'), + (ldap.MOD_REPLACE, 'sslVersionMax', 'TLS1.2'), + (ldap.MOD_REPLACE, 'nsSSL3', 'on'), + (ldap.MOD_REPLACE, 'nsTLS1', 'off')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_14' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + errmsg = os.popen('egrep "SSL alert:" %s | egrep "Found unsecure configuration: nsSSL3: on"' % topology.standalone.errlog) + if errmsg != "": + log.info("Expected message:") + log.info("%s" % errmsg.readline()) + else: + log.info("Expected message was not found") + assert False + + errmsg = os.popen('egrep "SSL alert:" %s | egrep "Respect the configured range."' % topology.standalone.errlog) + if errmsg != "": + log.info("Expected message:") + log.info("%s" % errmsg.readline()) + else: + log.info("Expected message was not found") + assert False + + errmsg = os.popen('egrep "SSL Initialization" %s | egrep "Configured SSL version range: min: TLS1.1, max: TLS1"' % topology.standalone.errlog) + if errmsg != "": + log.info("Expected message:") + log.info("%s" % errmsg.readline()) + else: + log.info("Expected message was not found") + assert False + + +def test_47838_run_last(topology): + """ + Check nsSSL3Ciphers: all <== invalid value + All ciphers are disabled. + """ + _header(topology, 'Test Case 17 - Check nsSSL3Ciphers: all, which is invalid') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', None)]) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', 'all')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.47838_15' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + errmsg = os.popen('egrep "SSL alert:" %s | egrep "invalid ciphers"' % topology.standalone.errlog) + if errmsg != "": + log.info("Expected error message:") + log.info("%s" % errmsg.readline()) + else: + log.info("Expected error message was not found") + assert False + + comp_nsSSLEnableCipherCount(topology, 0) + + topology.standalone.log.info("ticket47838, 47880, 47908, 47928 were successfully verified.") + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47869MMR_test.py b/dirsrvtests/tests/tickets/ticket47869MMR_test.py new file mode 100644 index 0000000..95627d2 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47869MMR_test.py @@ -0,0 +1,323 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +# +# important part. We can deploy Master1 and Master2 on different versions +# +installation1_prefix = None +installation2_prefix = None + +TEST_REPL_DN = "cn=test_repl, %s" % SUFFIX +ENTRY_NAME = 'test_entry' +MAX_ENTRIES = 10 + +BIND_NAME = 'bind_entry' +BIND_DN = 'cn=%s, %s' % (BIND_NAME, SUFFIX) +BIND_PW = 'password' + + +class TopologyMaster1Master2(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to create a replicated topology for the 'module'. + The replicated topology is MASTER1 <-> Master2. + ''' + global installation1_prefix + global installation2_prefix + + # allocate master1 on a given deployement + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Args for the master1 instance + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_master = args_instance.copy() + master1.allocate(args_master) + + # allocate master1 on a given deployement + master2 = DirSrv(verbose=False) + if installation2_prefix: + args_instance[SER_DEPLOYED_DIR] = installation2_prefix + + # Args for the consumer instance + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_master = args_instance.copy() + master2.allocate(args_master) + + # Get the status of the instance + instance_master1 = master1.exists() + instance_master2 = master2.exists() + + # Remove all the instances + if instance_master1: + master1.delete() + if instance_master2: + master2.delete() + + # Create the instances + master1.create() + master1.open() + master2.create() + master2.open() + + # + # Now prepare the Master-Consumer topology + # + # First Enable replication + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # Initialize the supplier->consumer + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + repl_agreement = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + + if not repl_agreement: + log.fatal("Fail to create a replica agreement") + sys.exit(1) + + log.debug("%s created" % repl_agreement) + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(repl_agreement) + + # Check replication is working fine + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + # Here we have two instances master and consumer + return TopologyMaster1Master2(master1, master2) + + +def test_ticket47869_init(topology): + """ + It adds an entry ('bind_entry') and 10 test entries + It sets the anonymous aci + + """ + # enable acl error logging + mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', str(8192))] # REPL + topology.master1.modify_s(DN_CONFIG, mod) + topology.master2.modify_s(DN_CONFIG, mod) + + # entry used to bind with + topology.master1.log.info("Add %s" % BIND_DN) + topology.master1.add_s(Entry((BIND_DN, { + 'objectclass': "top person".split(), + 'sn': BIND_NAME, + 'cn': BIND_NAME, + 'userpassword': BIND_PW}))) + loop = 0 + ent = None + while loop <= 10: + try: + ent = topology.master2.getEntry(BIND_DN, ldap.SCOPE_BASE, "(objectclass=*)") + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + if ent is None: + assert False + + # keep anonymous ACI for use 'read-search' aci in SEARCH test + ACI_ANONYMOUS = "(targetattr!=\"userPassword\")(version 3.0; acl \"Enable anonymous access\"; allow (read, search, compare) userdn=\"ldap:///anyone\";)" + mod = [(ldap.MOD_REPLACE, 'aci', ACI_ANONYMOUS)] + topology.master1.modify_s(SUFFIX, mod) + topology.master2.modify_s(SUFFIX, mod) + + # add entries + for cpt in range(MAX_ENTRIES): + name = "%s%d" % (ENTRY_NAME, cpt) + mydn = "cn=%s,%s" % (name, SUFFIX) + topology.master1.add_s(Entry((mydn, + {'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + loop = 0 + ent = None + while loop <= 10: + try: + ent = topology.master2.getEntry(mydn, ldap.SCOPE_BASE, "(objectclass=*)") + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + if ent is None: + assert False + + +def test_ticket47869_check(topology): + ''' + On Master 1 and 2: + Bind as Directory Manager. + Search all specifying nscpEntryWsi in the attribute list. + Check nscpEntryWsi is returned. + On Master 1 and 2: + Bind as Bind Entry. + Search all specifying nscpEntryWsi in the attribute list. + Check nscpEntryWsi is not returned. + On Master 1 and 2: + Bind as anonymous. + Search all specifying nscpEntryWsi in the attribute list. + Check nscpEntryWsi is not returned. + ''' + topology.master1.log.info("\n\n######################### CHECK nscpentrywsi ######################\n") + + topology.master1.log.info("##### Master1: Bind as %s #####" % DN_DM) + topology.master1.simple_bind_s(DN_DM, PASSWORD) + + topology.master1.log.info("Master1: Calling search_ext...") + msgid = topology.master1.search_ext(SUFFIX, ldap.SCOPE_SUBTREE, 'objectclass=*', ['nscpentrywsi']) + nscpentrywsicnt = 0 + rtype, rdata, rmsgid = topology.master1.result2(msgid) + topology.master1.log.info("%d results" % len(rdata)) + + topology.master1.log.info("Results:") + for dn, attrs in rdata: + topology.master1.log.info("dn: %s" % dn) + if 'nscpentrywsi' in attrs: + nscpentrywsicnt += 1 + + topology.master1.log.info("Master1: count of nscpentrywsi: %d" % nscpentrywsicnt) + + topology.master2.log.info("##### Master2: Bind as %s #####" % DN_DM) + topology.master2.simple_bind_s(DN_DM, PASSWORD) + + topology.master2.log.info("Master2: Calling search_ext...") + msgid = topology.master2.search_ext(SUFFIX, ldap.SCOPE_SUBTREE, 'objectclass=*', ['nscpentrywsi']) + nscpentrywsicnt = 0 + rtype, rdata, rmsgid = topology.master2.result2(msgid) + topology.master2.log.info("%d results" % len(rdata)) + + topology.master2.log.info("Results:") + for dn, attrs in rdata: + topology.master2.log.info("dn: %s" % dn) + if 'nscpentrywsi' in attrs: + nscpentrywsicnt += 1 + + topology.master2.log.info("Master2: count of nscpentrywsi: %d" % nscpentrywsicnt) + + # bind as bind_entry + topology.master1.log.info("##### Master1: Bind as %s #####" % BIND_DN) + topology.master1.simple_bind_s(BIND_DN, BIND_PW) + + topology.master1.log.info("Master1: Calling search_ext...") + msgid = topology.master1.search_ext(SUFFIX, ldap.SCOPE_SUBTREE, 'objectclass=*', ['nscpentrywsi']) + nscpentrywsicnt = 0 + rtype, rdata, rmsgid = topology.master1.result2(msgid) + topology.master1.log.info("%d results" % len(rdata)) + + for dn, attrs in rdata: + if 'nscpentrywsi' in attrs: + nscpentrywsicnt += 1 + assert nscpentrywsicnt == 0 + topology.master1.log.info("Master1: count of nscpentrywsi: %d" % nscpentrywsicnt) + + # bind as bind_entry + topology.master2.log.info("##### Master2: Bind as %s #####" % BIND_DN) + topology.master2.simple_bind_s(BIND_DN, BIND_PW) + + topology.master2.log.info("Master2: Calling search_ext...") + msgid = topology.master2.search_ext(SUFFIX, ldap.SCOPE_SUBTREE, 'objectclass=*', ['nscpentrywsi']) + nscpentrywsicnt = 0 + rtype, rdata, rmsgid = topology.master2.result2(msgid) + topology.master2.log.info("%d results" % len(rdata)) + + for dn, attrs in rdata: + if 'nscpentrywsi' in attrs: + nscpentrywsicnt += 1 + assert nscpentrywsicnt == 0 + topology.master2.log.info("Master2: count of nscpentrywsi: %d" % nscpentrywsicnt) + + # bind as anonymous + topology.master1.log.info("##### Master1: Bind as anonymous #####") + topology.master1.simple_bind_s("", "") + + topology.master1.log.info("Master1: Calling search_ext...") + msgid = topology.master1.search_ext(SUFFIX, ldap.SCOPE_SUBTREE, 'objectclass=*', ['nscpentrywsi']) + nscpentrywsicnt = 0 + rtype, rdata, rmsgid = topology.master1.result2(msgid) + topology.master1.log.info("%d results" % len(rdata)) + + for dn, attrs in rdata: + if 'nscpentrywsi' in attrs: + nscpentrywsicnt += 1 + assert nscpentrywsicnt == 0 + topology.master1.log.info("Master1: count of nscpentrywsi: %d" % nscpentrywsicnt) + + # bind as bind_entry + topology.master2.log.info("##### Master2: Bind as anonymous #####") + topology.master2.simple_bind_s("", "") + + topology.master2.log.info("Master2: Calling search_ext...") + msgid = topology.master2.search_ext(SUFFIX, ldap.SCOPE_SUBTREE, 'objectclass=*', ['nscpentrywsi']) + nscpentrywsicnt = 0 + rtype, rdata, rmsgid = topology.master2.result2(msgid) + topology.master2.log.info("%d results" % len(rdata)) + + for dn, attrs in rdata: + if 'nscpentrywsi' in attrs: + nscpentrywsicnt += 1 + assert nscpentrywsicnt == 0 + topology.master2.log.info("Master2: count of nscpentrywsi: %d" % nscpentrywsicnt) + + topology.master1.log.info("##### ticket47869 was successfully verified. #####") + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47871_test.py b/dirsrvtests/tests/tickets/ticket47871_test.py new file mode 100644 index 0000000..bb6810c --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47871_test.py @@ -0,0 +1,205 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Nov 7, 2013 + +@author: tbordaz +''' +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation_prefix = None + +TEST_REPL_DN = "cn=test_repl, %s" % SUFFIX +ENTRY_DN = "cn=test_entry, %s" % SUFFIX + +OTHER_NAME = 'other_entry' +MAX_OTHERS = 10 + +ATTRIBUTES = ['street', 'countryName', 'description', 'postalAddress', 'postalCode', 'title', 'l', 'roomNumber'] + + +class TopologyMasterConsumer(object): + def __init__(self, master, consumer): + master.open() + self.master = master + + consumer.open() + self.consumer = consumer + + def __repr__(self): + return "Master[%s] -> Consumer[%s" % (self.master, self.consumer) + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to create a replicated topology for the 'module'. + The replicated topology is MASTER -> Consumer. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + master = DirSrv(verbose=False) + consumer = DirSrv(verbose=False) + + # Args for the master instance + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_master = args_instance.copy() + master.allocate(args_master) + + # Args for the consumer instance + args_instance[SER_HOST] = HOST_CONSUMER_1 + args_instance[SER_PORT] = PORT_CONSUMER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_CONSUMER_1 + args_consumer = args_instance.copy() + consumer.allocate(args_consumer) + + # Get the status of the instance and restart it if it exists + instance_master = master.exists() + instance_consumer = consumer.exists() + + # Remove all the instances + if instance_master: + master.delete() + if instance_consumer: + consumer.delete() + + # Create the instances + master.create() + master.open() + consumer.create() + consumer.open() + + # + # Now prepare the Master-Consumer topology + # + # First Enable replication + master.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + consumer.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_CONSUMER) + + # Initialize the supplier->consumer + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + repl_agreement = master.agreement.create(suffix=SUFFIX, host=consumer.host, port=consumer.port, properties=properties) + + if not repl_agreement: + log.fatal("Fail to create a replica agreement") + sys.exit(1) + + log.debug("%s created" % repl_agreement) + master.agreement.init(SUFFIX, HOST_CONSUMER_1, PORT_CONSUMER_1) + master.waitForReplInit(repl_agreement) + + # Check replication is working fine + if master.testReplication(DEFAULT_SUFFIX, consumer): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + master.delete() + consumer.delete() + request.addfinalizer(fin) + # + # Here we have two instances master and consumer + # with replication working. Either coming from a backup recovery + # or from a fresh (re)init + # Time to return the topology + return TopologyMasterConsumer(master, consumer) + + +def test_ticket47871_init(topology): + """ + Initialize the test environment + """ + topology.master.plugins.enable(name=PLUGIN_RETRO_CHANGELOG) + mod = [(ldap.MOD_REPLACE, 'nsslapd-changelogmaxage', "10s"), # 10 second triming + (ldap.MOD_REPLACE, 'nsslapd-changelog-trim-interval', "5s")] + topology.master.modify_s("cn=%s,%s" % (PLUGIN_RETRO_CHANGELOG, DN_PLUGIN), mod) + #topology.master.plugins.enable(name=PLUGIN_MEMBER_OF) + #topology.master.plugins.enable(name=PLUGIN_REFER_INTEGRITY) + topology.master.stop(timeout=10) + topology.master.start(timeout=10) + + topology.master.log.info("test_ticket47871_init topology %r" % (topology)) + # the test case will check if a warning message is logged in the + # error log of the supplier + topology.master.errorlog_file = open(topology.master.errlog, "r") + + +def test_ticket47871_1(topology): + ''' + ADD entries and check they are all in the retrocl + ''' + # add dummy entries + for cpt in range(MAX_OTHERS): + name = "%s%d" % (OTHER_NAME, cpt) + topology.master.add_s(Entry(("cn=%s,%s" % (name, SUFFIX), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + + topology.master.log.info("test_ticket47871_init: %d entries ADDed %s[0..%d]" % (MAX_OTHERS, OTHER_NAME, MAX_OTHERS - 1)) + + # Check the number of entries in the retro changelog + time.sleep(1) + ents = topology.master.search_s(RETROCL_SUFFIX, ldap.SCOPE_ONELEVEL, "(objectclass=*)") + assert len(ents) == MAX_OTHERS + topology.master.log.info("Added entries are") + for ent in ents: + topology.master.log.info("%s" % ent.dn) + + +def test_ticket47871_2(topology): + ''' + Wait until there is just a last entries + ''' + MAX_TRIES = 10 + TRY_NO = 1 + while TRY_NO <= MAX_TRIES: + time.sleep(6) # at least 1 trimming occurred + ents = topology.master.search_s(RETROCL_SUFFIX, ldap.SCOPE_ONELEVEL, "(objectclass=*)") + assert len(ents) <= MAX_OTHERS + topology.master.log.info("\nTry no %d it remains %d entries" % (TRY_NO, len(ents))) + for ent in ents: + topology.master.log.info("%s" % ent.dn) + if len(ents) > 1: + TRY_NO += 1 + else: + break + assert TRY_NO <= MAX_TRIES + assert len(ents) <= 1 + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47900_test.py b/dirsrvtests/tests/tickets/ticket47900_test.py new file mode 100644 index 0000000..4de368b --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47900_test.py @@ -0,0 +1,328 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +CONFIG_DN = 'cn=config' +ADMIN_NAME = 'passwd_admin' +ADMIN_DN = 'cn=%s,%s' % (ADMIN_NAME, SUFFIX) +ADMIN_PWD = 'adminPassword_1' +ENTRY_NAME = 'Joe Schmo' +ENTRY_DN = 'cn=%s,%s' % (ENTRY_NAME, SUFFIX) +INVALID_PWDS = ('2_Short', 'No_Number', 'N0Special', '{SSHA}bBy8UdtPZwu8uZna9QOYG3Pr41RpIRVDl8wddw==') + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47900(topology): + """ + Test that password administrators/root DN can + bypass password syntax/policy. + + We need to test how passwords are modified in + existing entries, and when adding new entries. + + Create the Password Admin entry, but do not set + it as an admin yet. Use the entry to verify invalid + passwords are caught. Then activate the password + admin and make sure it can bypass password policy. + """ + + # Prepare the Password Administator + entry = Entry(ADMIN_DN) + entry.setValues('objectclass', 'top', 'person') + entry.setValues('sn', ADMIN_NAME) + entry.setValues('cn', ADMIN_NAME) + entry.setValues('userpassword', ADMIN_PWD) + + topology.standalone.log.info("Creating Password Administator entry %s..." % ADMIN_DN) + try: + topology.standalone.add_s(entry) + except ldap.LDAPError as e: + topology.standalone.log.error('Unexpected result ' + e.message['desc']) + assert False + topology.standalone.log.error("Failed to add Password Administator %s, error: %s " + % (ADMIN_DN, e.message['desc'])) + assert False + + topology.standalone.log.info("Configuring password policy...") + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-pwpolicy-local' , 'on'), + (ldap.MOD_REPLACE, 'passwordCheckSyntax', 'on'), + (ldap.MOD_REPLACE, 'passwordMinCategories' , '1'), + (ldap.MOD_REPLACE, 'passwordMinTokenLength' , '1'), + (ldap.MOD_REPLACE, 'passwordExp' , 'on'), + (ldap.MOD_REPLACE, 'passwordMinDigits' , '1'), + (ldap.MOD_REPLACE, 'passwordMinSpecials' , '1')]) + except ldap.LDAPError as e: + topology.standalone.log.error('Failed configure password policy: ' + e.message['desc']) + assert False + + # + # Add an aci to allow everyone all access (just makes things easier) + # + topology.standalone.log.info("Add aci to allow password admin to add/update entries...") + + ACI_TARGET = "(target = \"ldap:///%s\")" % SUFFIX + ACI_TARGETATTR = "(targetattr = *)" + ACI_ALLOW = "(version 3.0; acl \"Password Admin Access\"; allow (all) " + ACI_SUBJECT = "(userdn = \"ldap:///anyone\");)" + ACI_BODY = ACI_TARGET + ACI_TARGETATTR + ACI_ALLOW + ACI_SUBJECT + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + try: + topology.standalone.modify_s(SUFFIX, mod) + except ldap.LDAPError as e: + topology.standalone.log.error('Failed to add aci for password admin: ' + e.message['desc']) + assert False + + # + # Bind as the Password Admin + # + topology.standalone.log.info("Bind as the Password Administator (before activating)...") + try: + topology.standalone.simple_bind_s(ADMIN_DN, ADMIN_PWD) + except ldap.LDAPError as e: + topology.standalone.log.error('Failed to bind as the Password Admin: ' + e.message['desc']) + assert False + + # + # Setup our test entry, and test password policy is working + # + entry = Entry(ENTRY_DN) + entry.setValues('objectclass', 'top', 'person') + entry.setValues('sn', ENTRY_NAME) + entry.setValues('cn', ENTRY_NAME) + + # + # Start by attempting to add an entry with an invalid password + # + topology.standalone.log.info("Attempt to add entries with invalid passwords, these adds should fail...") + for passwd in INVALID_PWDS: + failed_as_expected = False + entry.setValues('userpassword', passwd) + topology.standalone.log.info("Create a regular user entry %s with password (%s)..." % (ENTRY_DN, passwd)) + try: + topology.standalone.add_s(entry) + except ldap.LDAPError as e: + # We failed as expected + failed_as_expected = True + topology.standalone.log.info('Add failed as expected: password (%s) result (%s)' + % (passwd, e.message['desc'])) + + if not failed_as_expected: + topology.standalone.log.error("We were incorrectly able to add an entry " + + "with an invalid password (%s)" % (passwd)) + assert False + + # + # Now activate a password administator, bind as root dn to do the config + # update, then rebind as the password admin + # + topology.standalone.log.info("Activate the Password Administator...") + + # Bind as Root DN + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + topology.standalone.log.error('Root DN failed to authenticate: ' + e.message['desc']) + assert False + + # Update config + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'passwordAdminDN', ADMIN_DN)]) + except ldap.LDAPError as e: + topology.standalone.log.error('Failed to add password admin to config: ' + e.message['desc']) + assert False + + # Bind as Password Admin + try: + topology.standalone.simple_bind_s(ADMIN_DN, ADMIN_PWD) + except ldap.LDAPError as e: + topology.standalone.log.error('Failed to bind as the Password Admin: ' + e.message['desc']) + assert False + + # + # Start adding entries with invalid passwords, delete the entry after each pass. + # + for passwd in INVALID_PWDS: + entry.setValues('userpassword', passwd) + topology.standalone.log.info("Create a regular user entry %s with password (%s)..." % (ENTRY_DN, passwd)) + try: + topology.standalone.add_s(entry) + except ldap.LDAPError as e: + topology.standalone.log.error('Failed to add entry with password (%s) result (%s)' + % (passwd, e.message['desc'])) + assert False + + topology.standalone.log.info('Succesfully added entry (%s)' % ENTRY_DN) + + # Delete entry for the next pass + try: + topology.standalone.delete_s(ENTRY_DN) + except ldap.LDAPError as e: + topology.standalone.log.error('Failed to delete entry: %s' % (e.message['desc'])) + assert False + + # + # Add the entry for the next round of testing (modify password) + # + entry.setValues('userpassword', ADMIN_PWD) + try: + topology.standalone.add_s(entry) + except ldap.LDAPError as e: + topology.standalone.log.error('Failed to add entry with valid password (%s) result (%s)' + % (passwd, e.message['desc'])) + assert False + + # + # Deactivate the password admin and make sure invalid password updates fail + # + topology.standalone.log.info("Deactivate Password Administator and try invalid password updates...") + + # Bind as root DN + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + topology.standalone.log.error('Root DN failed to authenticate: ' + e.message['desc']) + assert False + + # Update config + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_DELETE, 'passwordAdminDN', None)]) + except ldap.LDAPError as e: + topology.standalone.log.error('Failed to remove password admin from config: ' + e.message['desc']) + assert False + + # Bind as Password Admin + try: + topology.standalone.simple_bind_s(ADMIN_DN, ADMIN_PWD) + except ldap.LDAPError as e: + topology.standalone.log.error('Failed to bind as the Password Admin: ' + e.message['desc']) + assert False + + # + # Make invalid password updates that should fail + # + for passwd in INVALID_PWDS: + failed_as_expected = False + entry.setValues('userpassword', passwd) + try: + topology.standalone.modify_s(ENTRY_DN, [(ldap.MOD_REPLACE, 'userpassword', passwd)]) + except ldap.LDAPError as e: + # We failed as expected + failed_as_expected = True + topology.standalone.log.info('Password update failed as expected: password (%s) result (%s)' + % (passwd, e.message['desc'])) + + if not failed_as_expected: + topology.standalone.log.error("We were incorrectly able to add an invalid password (%s)" + % (passwd)) + assert False + + # + # Now activate a password administator + # + topology.standalone.log.info("Activate Password Administator and try updates again...") + + # Bind as root DN + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + topology.standalone.log.error('Root DN failed to authenticate: ' + e.message['desc']) + assert False + + # Update config + try: + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'passwordAdminDN', ADMIN_DN)]) + except ldap.LDAPError as e: + topology.standalone.log.error('Failed to add password admin to config: ' + e.message['desc']) + assert False + + # Bind as Password Admin + try: + topology.standalone.simple_bind_s(ADMIN_DN, ADMIN_PWD) + except ldap.LDAPError as e: + topology.standalone.log.error('Failed to bind as the Password Admin: ' + e.message['desc']) + assert False + + # + # Make the same password updates, but this time they should succeed + # + for passwd in INVALID_PWDS: + entry.setValues('userpassword', passwd) + try: + topology.standalone.modify_s(ENTRY_DN, [(ldap.MOD_REPLACE, 'userpassword', passwd)]) + except ldap.LDAPError as e: + topology.standalone.log.error('Password update failed unexpectedly: password (%s) result (%s)' + % (passwd, e.message['desc'])) + assert False + topology.standalone.log.info('Password update succeeded (%s)' % passwd) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47910_test.py b/dirsrvtests/tests/tickets/ticket47910_test.py new file mode 100644 index 0000000..bb8ffc6 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47910_test.py @@ -0,0 +1,205 @@ +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +import re +import subprocess +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from datetime import datetime, timedelta + + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +@pytest.fixture(scope="module") +def log_dir(topology): + ''' + Do a search operation + and disable access log buffering + to generate the access log + ''' + + log.info("Diable access log buffering") + topology.standalone.setAccessLogBuffering(False) + + log.info("Do a ldapsearch operation") + topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, "(objectclass=*)") + + log.info("sleep for sometime so that access log file get generated") + time.sleep( 1 ) + + return topology.standalone.accesslog + + +def format_time(local_datetime): + formatted_time = (local_datetime.strftime("[%d/%b/%Y:%H:%M:%S]")) + return formatted_time + + +def execute_logconv(start_time_stamp, end_time_stamp, access_log): + ''' + This function will take start time and end time + as input parameter and + assign these values to -S and -E options of logconv + and, it will execute logconv and return result value + ''' + + log.info("Executing logconv.pl with -S current time and -E end time") + cmd = ['logconv.pl', '-S', start_time_stamp, '-E', end_time_stamp, access_log] + log.info(" ".join(cmd)) + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = proc.communicate() + log.info("standard output" + stdout) + log.info("standard errors" + stderr) + return proc.returncode + + +def test_ticket47910_logconv_start_end_positive(topology, log_dir): + ''' + Execute logconv.pl with -S and -E(endtime) with random time stamp + This is execute successfully + ''' + # + # Execute logconv.pl -S -E with random timestamp + # + log.info('Running test_ticket47910 - Execute logconv.pl -S -E with random values') + + log.info("taking current time with offset of 2 mins and formatting it to feed -S") + start_time_stamp = (datetime.now() - timedelta(minutes=2)) + formatted_start_time_stamp = format_time(start_time_stamp) + + log.info("taking current time with offset of 2 mins and formatting it to feed -E") + end_time_stamp = (datetime.now() + timedelta(minutes=2)) + formatted_end_time_stamp = format_time(end_time_stamp) + + log.info("Executing logconv.pl with -S and -E") + result = execute_logconv(formatted_start_time_stamp, formatted_end_time_stamp, log_dir) + assert result == 0 + + +def test_ticket47910_logconv_start_end_negative(topology, log_dir): + ''' + Execute logconv.pl with -S and -E(endtime) with random time stamp + This is a negative test case, where endtime will be lesser than the + starttime + This should give error message + ''' + + # + # Execute logconv.pl -S and -E with random timestamp + # + log.info('Running test_ticket47910 - Execute logconv.pl -S -E with starttime>endtime') + + log.info("taking current time with offset of 2 mins and formatting it to feed -S") + start_time_stamp = (datetime.now() + timedelta(minutes=2)) + formatted_start_time_stamp = format_time(start_time_stamp) + + log.info("taking current time with offset of 2 mins and formatting it to feed -E") + end_time_stamp = (datetime.now() - timedelta(minutes=2)) + formatted_end_time_stamp = format_time(end_time_stamp) + + log.info("Executing logconv.pl with -S and -E") + result = execute_logconv(formatted_start_time_stamp, formatted_end_time_stamp, log_dir) + assert result == 1 + + +def test_ticket47910_logconv_start_end_invalid(topology, log_dir): + ''' + Execute logconv.pl with -S and -E(endtime) with invalid time stamp + This is a negative test case, where it should give error message + ''' + # + # Execute logconv.pl -S and -E with invalid timestamp + # + log.info('Running test_ticket47910 - Execute logconv.pl -S -E with invalid timestamp') + log.info("Set start time and end time to invalid values") + start_time_stamp = "invalid" + end_time_stamp = "invalid" + + log.info("Executing logconv.pl with -S and -E") + result = execute_logconv(start_time_stamp, end_time_stamp, log_dir) + assert result == 1 + + +def test_ticket47910_logconv_noaccesslogs(topology, log_dir): + + ''' + Execute logconv.pl -S(starttime) without specify + access logs location + ''' + + # + # Execute logconv.pl -S with random timestamp and no access log location + # + log.info('Running test_ticket47910 - Execute logconv.pl without access logs') + + log.info("taking current time with offset of 2 mins and formatting it to feed -S") + time_stamp = (datetime.now() - timedelta(minutes=2)) + formatted_time_stamp = format_time(time_stamp) + log.info("Executing logconv.pl with -S current time") + cmd = ['logconv.pl', '-S', formatted_time_stamp] + log.info(" ".join(cmd)) + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = proc.communicate() + log.info("standard output" + stdout) + log.info("standard errors" + stderr) + + assert proc.returncode == 1 + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + pytest.main("-s ticket47910_test.py") diff --git a/dirsrvtests/tests/tickets/ticket47920_test.py b/dirsrvtests/tests/tickets/ticket47920_test.py new file mode 100644 index 0000000..f031e1d --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47920_test.py @@ -0,0 +1,176 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from ldap.controls.readentry import PreReadControl,PostReadControl + + +SCOPE_IN_CN = 'in' +SCOPE_OUT_CN = 'out' +SCOPE_IN_DN = 'cn=%s,%s' % (SCOPE_IN_CN, SUFFIX) +SCOPE_OUT_DN = 'cn=%s,%s' % (SCOPE_OUT_CN, SUFFIX) + +PROVISIONING_CN = "provisioning" +PROVISIONING_DN = "cn=%s,%s" % (PROVISIONING_CN, SCOPE_IN_DN) + +ACTIVE_CN = "accounts" +STAGE_CN = "staged users" +DELETE_CN = "deleted users" +ACTIVE_DN = "cn=%s,%s" % (ACTIVE_CN, SCOPE_IN_DN) +STAGE_DN = "cn=%s,%s" % (STAGE_CN, PROVISIONING_DN) +DELETE_DN = "cn=%s,%s" % (DELETE_CN, PROVISIONING_DN) + +STAGE_USER_CN = "stage guy" +STAGE_USER_DN = "cn=%s,%s" % (STAGE_USER_CN, STAGE_DN) + +ACTIVE_USER_CN = "active guy" +ACTIVE_USER_DN = "cn=%s,%s" % (ACTIVE_USER_CN, ACTIVE_DN) + +OUT_USER_CN = "out guy" +OUT_USER_DN = "cn=%s,%s" % (OUT_USER_CN, SCOPE_OUT_DN) + +STAGE_GROUP_CN = "stage group" +STAGE_GROUP_DN = "cn=%s,%s" % (STAGE_GROUP_CN, STAGE_DN) + +ACTIVE_GROUP_CN = "active group" +ACTIVE_GROUP_DN = "cn=%s,%s" % (ACTIVE_GROUP_CN, ACTIVE_DN) + +OUT_GROUP_CN = "out group" +OUT_GROUP_DN = "cn=%s,%s" % (OUT_GROUP_CN, SCOPE_OUT_DN) + +INDIRECT_ACTIVE_GROUP_CN = "indirect active group" +INDIRECT_ACTIVE_GROUP_DN = "cn=%s,%s" % (INDIRECT_ACTIVE_GROUP_CN, ACTIVE_DN) + +INITIAL_DESC = "inital description" +FINAL_DESC = "final description" + +log = logging.getLogger(__name__) + +installation_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def _header(topology, label): + topology.standalone.log.info("\n\n###############################################") + topology.standalone.log.info("#######") + topology.standalone.log.info("####### %s" % label) + topology.standalone.log.info("#######") + topology.standalone.log.info("###############################################") + + +def _add_user(topology, type='active'): + if type == 'active': + topology.standalone.add_s(Entry((ACTIVE_USER_DN, { + 'objectclass': "top person inetuser".split(), + 'sn': ACTIVE_USER_CN, + 'cn': ACTIVE_USER_CN, + 'description': INITIAL_DESC}))) + elif type == 'stage': + topology.standalone.add_s(Entry((STAGE_USER_DN, { + 'objectclass': "top person inetuser".split(), + 'sn': STAGE_USER_CN, + 'cn': STAGE_USER_CN}))) + else: + topology.standalone.add_s(Entry((OUT_USER_DN, { + 'objectclass': "top person inetuser".split(), + 'sn': OUT_USER_CN, + 'cn': OUT_USER_CN}))) + + +def test_ticket47920_init(topology): + topology.standalone.add_s(Entry((SCOPE_IN_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': SCOPE_IN_DN}))) + topology.standalone.add_s(Entry((ACTIVE_DN, { + 'objectclass': "top nscontainer".split(), + 'cn': ACTIVE_CN}))) + + # add users + _add_user(topology, 'active') + + +def test_ticket47920_mod_readentry_ctrl(topology): + _header(topology, 'MOD: with a readentry control') + + topology.standalone.log.info("Check the initial value of the entry") + ent = topology.standalone.getEntry(ACTIVE_USER_DN, ldap.SCOPE_BASE, "(objectclass=*)", ['description']) + assert ent.hasAttr('description') + assert ent.getValue('description') == INITIAL_DESC + + pr = PostReadControl(criticality=True, attrList=['cn', 'description']) + _, _, _, resp_ctrls = topology.standalone.modify_ext_s(ACTIVE_USER_DN, [(ldap.MOD_REPLACE, 'description', [FINAL_DESC])], serverctrls=[pr]) + + assert resp_ctrls[0].dn == ACTIVE_USER_DN + assert 'description' in resp_ctrls[0].entry + assert 'cn' in resp_ctrls[0].entry + print(resp_ctrls[0].entry['description']) + + ent = topology.standalone.getEntry(ACTIVE_USER_DN, ldap.SCOPE_BASE, "(objectclass=*)", ['description']) + assert ent.hasAttr('description') + assert ent.getValue('description') == FINAL_DESC + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47921_test.py b/dirsrvtests/tests/tickets/ticket47921_test.py new file mode 100644 index 0000000..537a59b --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47921_test.py @@ -0,0 +1,152 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket47921(topology): + ''' + Test that indirect cos reflects the current value of the indirect entry + ''' + + INDIRECT_COS_DN = 'cn=cos definition,' + DEFAULT_SUFFIX + MANAGER_DN = 'uid=my manager,ou=people,' + DEFAULT_SUFFIX + USER_DN = 'uid=user,ou=people,' + DEFAULT_SUFFIX + + # Add COS definition + try: + topology.standalone.add_s(Entry((INDIRECT_COS_DN, + {'objectclass': 'top cosSuperDefinition cosIndirectDefinition ldapSubEntry'.split(), + 'cosIndirectSpecifier': 'manager', + 'cosAttribute': 'roomnumber' + }))) + except ldap.LDAPError as e: + log.fatal('Failed to add cos defintion, error: ' + e.message['desc']) + assert False + + # Add manager entry + try: + topology.standalone.add_s(Entry((MANAGER_DN, + {'objectclass': 'top extensibleObject'.split(), + 'uid': 'my manager', + 'roomnumber': '1' + }))) + except ldap.LDAPError as e: + log.fatal('Failed to add manager entry, error: ' + e.message['desc']) + assert False + + # Add user entry + try: + topology.standalone.add_s(Entry((USER_DN, + {'objectclass': 'top person organizationalPerson inetorgperson'.split(), + 'sn': 'last', + 'cn': 'full', + 'givenname': 'mark', + 'uid': 'user', + 'manager': MANAGER_DN + }))) + except ldap.LDAPError as e: + log.fatal('Failed to add manager entry, error: ' + e.message['desc']) + assert False + + # Test COS is working + try: + entry = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, + "uid=user", + ['roomnumber']) + if entry: + if entry[0].getValue('roomnumber') != '1': + log.fatal('COS is not working.') + assert False + else: + log.fatal('Failed to find user entry') + assert False + except ldap.LDAPError as e: + log.error('Failed to search for user entry: ' + e.message['desc']) + assert False + + # Modify manager entry + try: + topology.standalone.modify_s(MANAGER_DN, [(ldap.MOD_REPLACE, 'roomnumber', '2')]) + except ldap.LDAPError as e: + log.error('Failed to modify manager entry: ' + e.message['desc']) + assert False + + # Confirm COS is returning the new value + try: + entry = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, + "uid=user", + ['roomnumber']) + if entry: + if entry[0].getValue('roomnumber') != '2': + log.fatal('COS is not working after manager update.') + assert False + else: + log.fatal('Failed to find user entry') + assert False + except ldap.LDAPError as e: + log.error('Failed to search for user entry: ' + e.message['desc']) + assert False + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47927_test.py b/dirsrvtests/tests/tickets/ticket47927_test.py new file mode 100644 index 0000000..c425ace --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47927_test.py @@ -0,0 +1,296 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +EXCLUDED_CONTAINER_CN = "excluded_container" +EXCLUDED_CONTAINER_DN = "cn=%s,%s" % (EXCLUDED_CONTAINER_CN, SUFFIX) + +EXCLUDED_BIS_CONTAINER_CN = "excluded_bis_container" +EXCLUDED_BIS_CONTAINER_DN = "cn=%s,%s" % (EXCLUDED_BIS_CONTAINER_CN, SUFFIX) + +ENFORCED_CONTAINER_CN = "enforced_container" +ENFORCED_CONTAINER_DN = "cn=%s,%s" % (ENFORCED_CONTAINER_CN, SUFFIX) + +USER_1_CN = "test_1" +USER_1_DN = "cn=%s,%s" % (USER_1_CN, ENFORCED_CONTAINER_DN) +USER_2_CN = "test_2" +USER_2_DN = "cn=%s,%s" % (USER_2_CN, ENFORCED_CONTAINER_DN) +USER_3_CN = "test_3" +USER_3_DN = "cn=%s,%s" % (USER_3_CN, EXCLUDED_CONTAINER_DN) +USER_4_CN = "test_4" +USER_4_DN = "cn=%s,%s" % (USER_4_CN, EXCLUDED_BIS_CONTAINER_DN) + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket47927_init(topology): + topology.standalone.plugins.enable(name=PLUGIN_ATTR_UNIQUENESS) + try: + topology.standalone.modify_s('cn=' + PLUGIN_ATTR_UNIQUENESS + ',cn=plugins,cn=config', + [(ldap.MOD_REPLACE, 'uniqueness-attribute-name', 'telephonenumber'), + (ldap.MOD_REPLACE, 'uniqueness-subtrees', DEFAULT_SUFFIX), + ]) + except ldap.LDAPError as e: + log.fatal('test_ticket47927: Failed to configure plugin for "telephonenumber": error ' + e.message['desc']) + assert False + topology.standalone.restart(timeout=120) + + topology.standalone.add_s(Entry((EXCLUDED_CONTAINER_DN, {'objectclass': "top nscontainer".split(), + 'cn': EXCLUDED_CONTAINER_CN}))) + topology.standalone.add_s(Entry((EXCLUDED_BIS_CONTAINER_DN, {'objectclass': "top nscontainer".split(), + 'cn': EXCLUDED_BIS_CONTAINER_CN}))) + topology.standalone.add_s(Entry((ENFORCED_CONTAINER_DN, {'objectclass': "top nscontainer".split(), + 'cn': ENFORCED_CONTAINER_CN}))) + + # adding an entry on a stage with a different 'cn' + topology.standalone.add_s(Entry((USER_1_DN, { + 'objectclass': "top person".split(), + 'sn': USER_1_CN, + 'cn': USER_1_CN}))) + # adding an entry on a stage with a different 'cn' + topology.standalone.add_s(Entry((USER_2_DN, { + 'objectclass': "top person".split(), + 'sn': USER_2_CN, + 'cn': USER_2_CN}))) + topology.standalone.add_s(Entry((USER_3_DN, { + 'objectclass': "top person".split(), + 'sn': USER_3_CN, + 'cn': USER_3_CN}))) + topology.standalone.add_s(Entry((USER_4_DN, { + 'objectclass': "top person".split(), + 'sn': USER_4_CN, + 'cn': USER_4_CN}))) + + +def test_ticket47927_one(topology): + ''' + Check that uniqueness is enforce on all SUFFIX + ''' + UNIQUE_VALUE='1234' + try: + topology.standalone.modify_s(USER_1_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + except ldap.LDAPError as e: + log.fatal('test_ticket47927_one: Failed to set the telephonenumber for %s: %s' % (USER_1_DN, e.message['desc'])) + assert False + + # we expect to fail because user1 is in the scope of the plugin + try: + topology.standalone.modify_s(USER_2_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + log.fatal('test_ticket47927_one: unexpected success to set the telephonenumber for %s' % (USER_2_DN)) + assert False + except ldap.LDAPError as e: + log.fatal('test_ticket47927_one: Failed (expected) to set the telephonenumber for %s: %s' % (USER_2_DN, e.message['desc'])) + pass + + + # we expect to fail because user1 is in the scope of the plugin + try: + topology.standalone.modify_s(USER_3_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + log.fatal('test_ticket47927_one: unexpected success to set the telephonenumber for %s' % (USER_3_DN)) + assert False + except ldap.LDAPError as e: + log.fatal('test_ticket47927_one: Failed (expected) to set the telephonenumber for %s: %s' % (USER_3_DN, e.message['desc'])) + pass + + +def test_ticket47927_two(topology): + ''' + Exclude the EXCLUDED_CONTAINER_DN from the uniqueness plugin + ''' + try: + topology.standalone.modify_s('cn=' + PLUGIN_ATTR_UNIQUENESS + ',cn=plugins,cn=config', + [(ldap.MOD_REPLACE, 'uniqueness-exclude-subtrees', EXCLUDED_CONTAINER_DN)]) + except ldap.LDAPError as e: + log.fatal('test_ticket47927_two: Failed to configure plugin for to exclude %s: error %s' % (EXCLUDED_CONTAINER_DN, e.message['desc'])) + assert False + topology.standalone.restart(timeout=120) + + +def test_ticket47927_three(topology): + ''' + Check that uniqueness is enforced on full SUFFIX except EXCLUDED_CONTAINER_DN + First case: it exists an entry (with the same attribute value) in the scope + of the plugin and we set the value in an entry that is in an excluded scope + ''' + UNIQUE_VALUE='9876' + try: + topology.standalone.modify_s(USER_1_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + except ldap.LDAPError as e: + log.fatal('test_ticket47927_three: Failed to set the telephonenumber ' + e.message['desc']) + assert False + + # we should not be allowed to set this value (because user1 is in the scope) + try: + topology.standalone.modify_s(USER_2_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + log.fatal('test_ticket47927_three: unexpected success to set the telephonenumber for %s' % (USER_2_DN)) + assert False + except ldap.LDAPError as e: + log.fatal('test_ticket47927_three: Failed (expected) to set the telephonenumber for %s: %s' % (USER_2_DN , e.message['desc'])) + + + # USER_3_DN is in EXCLUDED_CONTAINER_DN so update should be successful + try: + topology.standalone.modify_s(USER_3_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + log.fatal('test_ticket47927_three: success to set the telephonenumber for %s' % (USER_3_DN)) + except ldap.LDAPError as e: + log.fatal('test_ticket47927_three: Failed (unexpected) to set the telephonenumber for %s: %s' % (USER_3_DN, e.message['desc'])) + assert False + + +def test_ticket47927_four(topology): + ''' + Check that uniqueness is enforced on full SUFFIX except EXCLUDED_CONTAINER_DN + Second case: it exists an entry (with the same attribute value) in an excluded scope + of the plugin and we set the value in an entry is in the scope + ''' + UNIQUE_VALUE='1111' + # USER_3_DN is in EXCLUDED_CONTAINER_DN so update should be successful + try: + topology.standalone.modify_s(USER_3_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + log.fatal('test_ticket47927_four: success to set the telephonenumber for %s' % USER_3_DN) + except ldap.LDAPError as e: + log.fatal('test_ticket47927_four: Failed (unexpected) to set the telephonenumber for %s: %s' % (USER_3_DN, e.message['desc'])) + assert False + + + # we should be allowed to set this value (because user3 is excluded from scope) + try: + topology.standalone.modify_s(USER_1_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + except ldap.LDAPError as e: + log.fatal('test_ticket47927_four: Failed to set the telephonenumber for %s: %s' % (USER_1_DN, e.message['desc'])) + assert False + + # we should not be allowed to set this value (because user1 is in the scope) + try: + topology.standalone.modify_s(USER_2_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + log.fatal('test_ticket47927_four: unexpected success to set the telephonenumber %s' % USER_2_DN) + assert False + except ldap.LDAPError as e: + log.fatal('test_ticket47927_four: Failed (expected) to set the telephonenumber for %s: %s' % (USER_2_DN, e.message['desc'])) + pass + + +def test_ticket47927_five(topology): + ''' + Exclude the EXCLUDED_BIS_CONTAINER_DN from the uniqueness plugin + ''' + try: + topology.standalone.modify_s('cn=' + PLUGIN_ATTR_UNIQUENESS + ',cn=plugins,cn=config', + [(ldap.MOD_ADD, 'uniqueness-exclude-subtrees', EXCLUDED_BIS_CONTAINER_DN)]) + except ldap.LDAPError as e: + log.fatal('test_ticket47927_five: Failed to configure plugin for to exclude %s: error %s' % (EXCLUDED_BIS_CONTAINER_DN, e.message['desc'])) + assert False + topology.standalone.restart(timeout=120) + topology.standalone.getEntry('cn=' + PLUGIN_ATTR_UNIQUENESS + ',cn=plugins,cn=config', ldap.SCOPE_BASE) + + +def test_ticket47927_six(topology): + ''' + Check that uniqueness is enforced on full SUFFIX except EXCLUDED_CONTAINER_DN + and EXCLUDED_BIS_CONTAINER_DN + First case: it exists an entry (with the same attribute value) in the scope + of the plugin and we set the value in an entry that is in an excluded scope + ''' + UNIQUE_VALUE = '222' + try: + topology.standalone.modify_s(USER_1_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + except ldap.LDAPError as e: + log.fatal('test_ticket47927_six: Failed to set the telephonenumber ' + e.message['desc']) + assert False + + # we should not be allowed to set this value (because user1 is in the scope) + try: + topology.standalone.modify_s(USER_2_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + log.fatal('test_ticket47927_six: unexpected success to set the telephonenumber for %s' % (USER_2_DN)) + assert False + except ldap.LDAPError as e: + log.fatal('test_ticket47927_six: Failed (expected) to set the telephonenumber for %s: %s' % (USER_2_DN , e.message['desc'])) + + + # USER_3_DN is in EXCLUDED_CONTAINER_DN so update should be successful + try: + topology.standalone.modify_s(USER_3_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + log.fatal('test_ticket47927_six: success to set the telephonenumber for %s' % (USER_3_DN)) + except ldap.LDAPError as e: + log.fatal('test_ticket47927_six: Failed (unexpected) to set the telephonenumber for %s: %s' % (USER_3_DN, e.message['desc'])) + assert False + # USER_4_DN is in EXCLUDED_CONTAINER_DN so update should be successful + try: + topology.standalone.modify_s(USER_4_DN, + [(ldap.MOD_REPLACE, 'telephonenumber', UNIQUE_VALUE)]) + log.fatal('test_ticket47927_six: success to set the telephonenumber for %s' % (USER_4_DN)) + except ldap.LDAPError as e: + log.fatal('test_ticket47927_six: Failed (unexpected) to set the telephonenumber for %s: %s' % (USER_4_DN, e.message['desc'])) + assert False + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47931_test.py b/dirsrvtests/tests/tickets/ticket47931_test.py new file mode 100644 index 0000000..9aa54fc --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47931_test.py @@ -0,0 +1,207 @@ +import os +import sys +import time +import ldap +import logging +import pytest +import threading +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None +SECOND_SUFFIX = "dc=deadlock" +SECOND_BACKEND = "deadlock" +RETROCL_PLUGIN_DN = ('cn=' + PLUGIN_RETRO_CHANGELOG + ',cn=plugins,cn=config') +MEMBEROF_PLUGIN_DN = ('cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config') +GROUP_DN = ("cn=group," + DEFAULT_SUFFIX) +MEMBER_DN_COMP = "uid=member" +TIME_OUT = 5 + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +class modifySecondBackendThread(threading.Thread): + def __init__(self, inst, timeout): + threading.Thread.__init__(self) + self.daemon = True + self.inst = inst + self.timeout = timeout + + def run(self): + conn = self.inst.openConnection() + conn.set_option(ldap.OPT_TIMEOUT, self.timeout) + log.info('Modify second suffix...') + for x in range(0, 5000): + try: + conn.modify_s(SECOND_SUFFIX, + [(ldap.MOD_REPLACE, + 'description', + 'new description')]) + except ldap.LDAPError as e: + log.fatal('Failed to modify second suffix - error: %s' % + (e.message['desc'])) + assert False + + conn.close() + log.info('Finished modifying second suffix') + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def test_ticket47931(topology): + """Test Retro Changelog and MemberOf deadlock fix. + Verification steps: + - Enable retro cl and memberOf. + - Create two backends: A & B. + - Configure retrocl scoping for backend A. + - Configure memberOf plugin for uniquemember + - Create group in backend A. + - In parallel, add members to the group on A, and make modifications + to entries in backend B. + - Make sure the server does not hang during the updates to both + backends. + + """ + + # Enable dynamic plugins to make plugin configuration easier + try: + topology.standalone.modify_s(DN_CONFIG, + [(ldap.MOD_REPLACE, + 'nsslapd-dynamic-plugins', + 'on')]) + except ldap.LDAPError as e: + ldap.error('Failed to enable dynamic plugins! ' + e.message['desc']) + assert False + + # Enable the plugins + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.enable(name=PLUGIN_RETRO_CHANGELOG) + + # Create second backend + topology.standalone.backend.create(SECOND_SUFFIX, {BACKEND_NAME: SECOND_BACKEND}) + topology.standalone.mappingtree.create(SECOND_SUFFIX, bename=SECOND_BACKEND) + + # Create the root node of the second backend + try: + topology.standalone.add_s(Entry((SECOND_SUFFIX, + {'objectclass': 'top domain'.split(), + 'dc': 'deadlock'}))) + except ldap.LDAPError as e: + log.fatal('Failed to create suffix entry: error ' + e.message['desc']) + assert False + + # Configure retrocl scope + try: + topology.standalone.modify_s(RETROCL_PLUGIN_DN, + [(ldap.MOD_REPLACE, + 'nsslapd-include-suffix', + DEFAULT_SUFFIX)]) + except ldap.LDAPError as e: + ldap.error('Failed to configure retrocl plugin: ' + e.message['desc']) + assert False + + # Configure memberOf group attribute + try: + topology.standalone.modify_s(MEMBEROF_PLUGIN_DN, + [(ldap.MOD_REPLACE, + 'memberofgroupattr', + 'uniquemember')]) + except ldap.LDAPError as e: + log.fatal('Failed to configure memberOf plugin: error ' + e.message['desc']) + assert False + + # Create group + try: + topology.standalone.add_s(Entry((GROUP_DN, + {'objectclass': 'top extensibleObject'.split(), + 'cn': 'group'}))) + except ldap.LDAPError as e: + log.fatal('Failed to add grouo: error ' + e.message['desc']) + assert False + + # Create 1500 entries (future members of the group) + for idx in range(1, 1500): + try: + USER_DN = ("uid=member%d,%s" % (idx, DEFAULT_SUFFIX)) + topology.standalone.add_s(Entry((USER_DN, + {'objectclass': 'top extensibleObject'.split(), + 'uid': 'member%d' % (x)}))) + except ldap.LDAPError as e: + log.fatal('Failed to add user (%s): error %s' % (USER_DN, e.message['desc'])) + assert False + + # Modify second backend (separate thread) + mod_backend_thrd = modifySecondBackendThread(topology.standalone, TIME_OUT) + mod_backend_thrd.start() + + # Add members to the group - set timeout + log.info('Adding members to the group...') + topology.standalone.set_option(ldap.OPT_TIMEOUT, TIME_OUT) + for idx in range(1, 1500): + try: + MEMBER_VAL = ("uid=member%d,%s" % (idx, DEFAULT_SUFFIX)) + topology.standalone.modify_s(GROUP_DN, + [(ldap.MOD_ADD, + 'uniquemember', + MEMBER_VAL)]) + except ldap.TIMEOUT: + log.fatal('Deadlock! Bug verification failed.') + assert False + except ldap.LDAPError as e: + log.fatal('Failed to update group(not a deadlock) member (%s) - error: %s' % + (MEMBER_VAL, e.message['desc'])) + assert False + log.info('Finished adding members to the group.') + + # Wait for the thread to finish + mod_backend_thrd.join() + + # No timeout, test passed! + log.info('Test complete\n') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) \ No newline at end of file diff --git a/dirsrvtests/tests/tickets/ticket47937_test.py b/dirsrvtests/tests/tickets/ticket47937_test.py new file mode 100644 index 0000000..6eb4f8b --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47937_test.py @@ -0,0 +1,171 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47937(topology): + """ + Test that DNA plugin only accepts valid attributes for "dnaType" + """ + + log.info("Creating \"ou=people\"...") + try: + topology.standalone.add_s(Entry(('ou=people,' + SUFFIX, { + 'objectclass': 'top organizationalunit'.split(), + 'ou': 'people' + }))) + + except ldap.ALREADY_EXISTS: + pass + except ldap.LDAPError as e: + log.error('Failed to add ou=people org unit: error ' + e.message['desc']) + assert False + + log.info("Creating \"ou=ranges\"...") + try: + topology.standalone.add_s(Entry(('ou=ranges,' + SUFFIX, { + 'objectclass': 'top organizationalunit'.split(), + 'ou': 'ranges' + }))) + + except ldap.LDAPError as e: + log.error('Failed to add ou=ranges org unit: error ' + e.message['desc']) + assert False + + log.info("Creating \"cn=entry\"...") + try: + topology.standalone.add_s(Entry(('cn=entry,ou=people,' + SUFFIX, { + 'objectclass': 'top groupofuniquenames'.split(), + 'cn': 'entry' + }))) + + except ldap.LDAPError as e: + log.error('Failed to add test entry: error ' + e.message['desc']) + assert False + + log.info("Creating DNA shared config entry...") + try: + topology.standalone.add_s(Entry(('dnaHostname=localhost.localdomain+dnaPortNum=389,ou=ranges,%s' % SUFFIX, { + 'objectclass': 'top dnaSharedConfig'.split(), + 'dnaHostname': 'localhost.localdomain', + 'dnaPortNum': '389', + 'dnaSecurePortNum': '636', + 'dnaRemainingValues': '9501' + }))) + + except ldap.LDAPError as e: + log.error('Failed to add shared config entry: error ' + e.message['desc']) + assert False + + log.info("Add dna plugin config entry...") + try: + topology.standalone.add_s(Entry(('cn=dna config,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config', { + 'objectclass': 'top dnaPluginConfig'.split(), + 'dnaType': 'description', + 'dnaMaxValue': '10000', + 'dnaMagicRegen': '0', + 'dnaFilter': '(objectclass=top)', + 'dnaScope': 'ou=people,%s' % SUFFIX, + 'dnaNextValue': '500', + 'dnaSharedCfgDN': 'ou=ranges,%s' % SUFFIX + }))) + + except ldap.LDAPError as e: + log.error('Failed to add DNA config entry: error ' + e.message['desc']) + assert False + + log.info("Enable the DNA plugin...") + try: + topology.standalone.plugins.enable(name=PLUGIN_DNA) + except e: + log.error("Failed to enable DNA Plugin: error " + e.message['desc']) + assert False + + log.info("Restarting the server...") + topology.standalone.stop(timeout=120) + time.sleep(1) + topology.standalone.start(timeout=120) + time.sleep(3) + + log.info("Apply an invalid attribute to the DNA config(dnaType: foo)...") + + try: + topology.standalone.modify_s('cn=dna config,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config', + [(ldap.MOD_REPLACE, 'dnaType', 'foo')]) + except ldap.LDAPError as e: + log.info('Operation failed as expected (error: %s)' % e.message['desc']) + else: + log.error('Operation incorectly succeeded! Test Failed!') + assert False + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47950_test.py b/dirsrvtests/tests/tickets/ticket47950_test.py new file mode 100644 index 0000000..cb3076d --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47950_test.py @@ -0,0 +1,206 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +USER1_DN = "uid=user1,%s" % DEFAULT_SUFFIX +USER2_DN = "uid=user2,%s" % DEFAULT_SUFFIX + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47950(topology): + """ + Testing nsslapd-plugin-binddn-tracking does not cause issues around + access control and reconfiguring replication/repl agmt. + """ + + log.info('Testing Ticket 47950 - Testing nsslapd-plugin-binddn-tracking') + + # + # Turn on bind dn tracking + # + try: + topology.standalone.modify_s("cn=config", [(ldap.MOD_REPLACE, 'nsslapd-plugin-binddn-tracking', 'on')]) + log.info('nsslapd-plugin-binddn-tracking enabled.') + except ldap.LDAPError as e: + log.error('Failed to enable bind dn tracking: ' + e.message['desc']) + assert False + + # + # Add two users + # + try: + topology.standalone.add_s(Entry((USER1_DN, { + 'objectclass': "top person inetuser".split(), + 'userpassword': "password", + 'sn': "1", + 'cn': "user 1"}))) + log.info('Added test user %s' % USER1_DN) + except ldap.LDAPError as e: + log.error('Failed to add %s: %s' % (USER1_DN, e.message['desc'])) + assert False + + try: + topology.standalone.add_s(Entry((USER2_DN, { + 'objectclass': "top person inetuser".split(), + 'sn': "2", + 'cn': "user 2"}))) + log.info('Added test user %s' % USER2_DN) + except ldap.LDAPError as e: + log.error('Failed to add user1: ' + e.message['desc']) + assert False + + # + # Add an aci + # + try: + acival = '(targetattr ="cn")(version 3.0;acl "Test bind dn tracking"' + \ + ';allow (all) (userdn = "ldap:///%s");)' % USER1_DN + + topology.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_ADD, 'aci', acival)]) + log.info('Added aci') + except ldap.LDAPError as e: + log.error('Failed to add aci: ' + e.message['desc']) + assert False + + # + # Make modification as user + # + try: + topology.standalone.simple_bind_s(USER1_DN, "password") + log.info('Bind as user %s successful' % USER1_DN) + except ldap.LDAPError as e: + log.error('Failed to bind as user1: ' + e.message['desc']) + assert False + + try: + topology.standalone.modify_s(USER2_DN, [(ldap.MOD_REPLACE, 'cn', 'new value')]) + log.info('%s successfully modified user %s' % (USER1_DN, USER2_DN)) + except ldap.LDAPError as e: + log.error('Failed to update user2: ' + e.message['desc']) + assert False + + # + # Setup replica and create a repl agmt + # + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + log.info('Bind as %s successful' % DN_DM) + except ldap.LDAPError as e: + log.error('Failed to bind as rootDN: ' + e.message['desc']) + assert False + + try: + topology.standalone.replica.enableReplication(suffix=DEFAULT_SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_1) + log.info('Successfully enabled replication.') + except ValueError: + log.error('Failed to enable replication') + assert False + + properties = {RA_NAME: r'test plugin internal bind dn', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + + try: + repl_agreement = topology.standalone.agreement.create(suffix=DEFAULT_SUFFIX, host="127.0.0.1", + port="7777", properties=properties) + log.info('Successfully created replication agreement') + except InvalidArgumentError as e: + log.error('Failed to create replication agreement: ' + e.message['desc']) + assert False + + # + # modify replica + # + try: + properties = {REPLICA_ID: "7"} + topology.standalone.replica.setProperties(DEFAULT_SUFFIX, None, None, properties) + log.info('Successfully modified replica') + except ldap.LDAPError as e: + log.error('Failed to update replica config: ' + e.message['desc']) + assert False + + # + # modify repl agmt + # + try: + properties = {RA_CONSUMER_PORT: "8888"} + topology.standalone.agreement.setProperties(None, repl_agreement, None, properties) + log.info('Successfully modified replication agreement') + except ValueError: + log.error('Failed to update replica agreement: ' + repl_agreement) + assert False + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47953_test.py b/dirsrvtests/tests/tickets/ticket47953_test.py new file mode 100644 index 0000000..1bcc007 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47953_test.py @@ -0,0 +1,122 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +import shutil +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +installation_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + #request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47953(topology): + """ + Test that we can delete an aci that has an invalid syntax. + Sart by importing an ldif with a "bad" aci, then simply try + to remove that value without error. + """ + + log.info('Testing Ticket 47953 - Test we can delete aci that has invalid syntax') + + # + # Import an invalid ldif + # + ldif_file = (topology.standalone.getDir(__file__, DATA_DIR) + + "ticket47953/ticket47953.ldif") + try: + ldif_dir = topology.standalone.get_ldif_dir() + shutil.copy(ldif_file, ldif_dir) + ldif_file = ldif_dir + '/ticket47953.ldif' + except: + log.fatal('Failed to copy ldif to instance ldif dir') + assert False + importTask = Tasks(topology.standalone) + args = {TASK_WAIT: True} + try: + importTask.importLDIF(DEFAULT_SUFFIX, None, ldif_file, args) + except ValueError: + assert False + + time.sleep(2) + + # + # Delete the invalid aci + # + acival = '(targetattr ="fffff")(version 3.0;acl "Directory Administrators Group"' + \ + ';allow (all) (groupdn = "ldap:///cn=Directory Administrators, dc=example,dc=com");)' + + log.info('Attempting to remove invalid aci...') + try: + topology.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_DELETE, 'aci', acival)]) + log.info('Removed invalid aci.') + except ldap.LDAPError as e: + log.error('Failed to remove invalid aci: ' + e.message['desc']) + assert False + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47963_test.py b/dirsrvtests/tests/tickets/ticket47963_test.py new file mode 100644 index 0000000..6ca74fd --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47963_test.py @@ -0,0 +1,188 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket47963(topology): + ''' + Test that the memberOf plugin works correctly after setting: + + memberofskipnested: on + + ''' + PLUGIN_DN = 'cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config' + USER_DN = 'uid=test_user,' + DEFAULT_SUFFIX + GROUP_DN1 = 'cn=group1,' + DEFAULT_SUFFIX + GROUP_DN2 = 'cn=group2,' + DEFAULT_SUFFIX + GROUP_DN3 = 'cn=group3,' + DEFAULT_SUFFIX + + # + # Enable the plugin and configure the skiop nest attribute, then restart the server + # + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + try: + topology.standalone.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'memberofskipnested', 'on')]) + except ldap.LDAPError as e: + log.error('test_automember: Failed to modify config entry: error ' + e.message['desc']) + assert False + + topology.standalone.restart(timeout=10) + + # + # Add our groups, users, memberships, etc + # + try: + topology.standalone.add_s(Entry((USER_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'test_user' + }))) + except ldap.LDAPError as e: + log.error('Failed to add teset user: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((GROUP_DN1, { + 'objectclass': 'top groupOfNames groupOfUniqueNames extensibleObject'.split(), + 'cn': 'group1', + 'member': USER_DN + }))) + except ldap.LDAPError as e: + log.error('Failed to add group1: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((GROUP_DN2, { + 'objectclass': 'top groupOfNames groupOfUniqueNames extensibleObject'.split(), + 'cn': 'group2', + 'member': USER_DN + }))) + except ldap.LDAPError as e: + log.error('Failed to add group2: error ' + e.message['desc']) + assert False + + # Add group with no member(yet) + try: + topology.standalone.add_s(Entry((GROUP_DN3, { + 'objectclass': 'top groupOfNames groupOfUniqueNames extensibleObject'.split(), + 'cn': 'group' + }))) + except ldap.LDAPError as e: + log.error('Failed to add group3: error ' + e.message['desc']) + assert False + time.sleep(1) + + # + # Test we have the correct memberOf values in the user entry + # + try: + member_filter = ('(&(memberOf=' + GROUP_DN1 + ')(memberOf=' + GROUP_DN2 + '))') + entries = topology.standalone.search_s(USER_DN, ldap.SCOPE_BASE, member_filter) + if not entries: + log.fatal('User is missing expected memberOf attrs') + assert False + except ldap.LDAPError as e: + log.fatal('Search for user1 failed: ' + e.message['desc']) + assert False + + # Add the user to the group + try: + topology.standalone.modify_s(GROUP_DN3, [(ldap.MOD_ADD, 'member', USER_DN)]) + except ldap.LDAPError as e: + log.error('Failed to member to group: error ' + e.message['desc']) + assert False + time.sleep(1) + + # Check that the test user is a "memberOf" all three groups + try: + member_filter = ('(&(memberOf=' + GROUP_DN1 + ')(memberOf=' + GROUP_DN2 + + ')(memberOf=' + GROUP_DN3 + '))') + entries = topology.standalone.search_s(USER_DN, ldap.SCOPE_BASE, member_filter) + if not entries: + log.fatal('User is missing expected memberOf attrs') + assert False + except ldap.LDAPError as e: + log.fatal('Search for user1 failed: ' + e.message['desc']) + assert False + + # + # Delete group2, and check memberOf values in the user entry + # + try: + topology.standalone.delete_s(GROUP_DN2) + except ldap.LDAPError as e: + log.error('Failed to delete test group2: ' + e.message['desc']) + assert False + time.sleep(1) + + try: + member_filter = ('(&(memberOf=' + GROUP_DN1 + ')(memberOf=' + GROUP_DN3 + '))') + entries = topology.standalone.search_s(USER_DN, ldap.SCOPE_BASE, member_filter) + if not entries: + log.fatal('User incorrect memberOf attrs') + assert False + except ldap.LDAPError as e: + log.fatal('Search for user1 failed: ' + e.message['desc']) + assert False + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47966_test.py b/dirsrvtests/tests/tickets/ticket47966_test.py new file mode 100644 index 0000000..75550a6 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47966_test.py @@ -0,0 +1,214 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) +installation1_prefix = None +m1_m2_agmt = "" + + +class TopologyReplication(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating master 1... + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=DEFAULT_SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + master2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=DEFAULT_SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + global m1_m2_agmt + m1_m2_agmt = master1.agreement.create(suffix=DEFAULT_SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=DEFAULT_SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(DEFAULT_SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + return TopologyReplication(master1, master2) + + +def test_ticket47966(topology): + ''' + Testing bulk import when the backend with VLV was recreated. + If the test passes without the server crash, 47966 is verified. + ''' + log.info('Testing Ticket 47966 - [VLV] slapd crashes during Dogtag clone reinstallation') + M1 = topology.master1 + M2 = topology.master2 + + log.info('0. Create a VLV index on Master 2.') + # get the backend entry + be = M2.replica.conn.backend.list(suffix=DEFAULT_SUFFIX) + if not be: + log.fatal("ticket47966: enable to retrieve the backend for %s" % DEFAULT_SUFFIX) + raise ValueError("no backend for suffix %s" % DEFAULT_SUFFIX) + bent = be[0] + beName = bent.getValue('cn') + beDn = "cn=%s,cn=ldbm database,cn=plugins,cn=config" % beName + + # generate vlvSearch entry + vlvSrchDn = "cn=vlvSrch,%s" % beDn + log.info('0-1. vlvSearch dn: %s' % vlvSrchDn) + vlvSrchEntry = Entry(vlvSrchDn) + vlvSrchEntry.setValues('objectclass', 'top', 'vlvSearch') + vlvSrchEntry.setValues('cn', 'vlvSrch') + vlvSrchEntry.setValues('vlvBase', DEFAULT_SUFFIX) + vlvSrchEntry.setValues('vlvFilter', '(|(objectclass=*)(objectclass=ldapsubentry))') + vlvSrchEntry.setValues('vlvScope', '2') + M2.add_s(vlvSrchEntry) + + # generate vlvIndex entry + vlvIndexDn = "cn=vlvIdx,%s" % vlvSrchDn + log.info('0-2. vlvIndex dn: %s' % vlvIndexDn) + vlvIndexEntry = Entry(vlvIndexDn) + vlvIndexEntry.setValues('objectclass', 'top', 'vlvIndex') + vlvIndexEntry.setValues('cn', 'vlvIdx') + vlvIndexEntry.setValues('vlvSort', 'cn ou sn') + M2.add_s(vlvIndexEntry) + + log.info('1. Initialize Master 2 from Master 1.') + M1.agreement.init(DEFAULT_SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + M1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if M1.testReplication(DEFAULT_SUFFIX, M2): + log.info('1-1. Replication is working.') + else: + log.fatal('1-1. Replication is not working.') + assert False + + log.info('2. Delete the backend instance on Master 2.') + M2.delete_s(vlvIndexDn) + M2.delete_s(vlvSrchDn) + # delete the agreement, replica, and mapping tree, too. + M2.replica.disableReplication(DEFAULT_SUFFIX) + mappingTree = 'cn="%s",cn=mapping tree,cn=config' % DEFAULT_SUFFIX + M2.mappingtree.delete(DEFAULT_SUFFIX, beName, mappingTree) + M2.backend.delete(DEFAULT_SUFFIX, beDn, beName) + + log.info('3. Recreate the backend and the VLV index on Master 2.') + M2.mappingtree.create(DEFAULT_SUFFIX, beName) + M2.backend.create(DEFAULT_SUFFIX, {BACKEND_NAME: beName}) + log.info('3-1. Recreating %s and %s on Master 2.' % (vlvSrchDn, vlvIndexDn)) + M2.add_s(vlvSrchEntry) + M2.add_s(vlvIndexEntry) + M2.replica.enableReplication(suffix=DEFAULT_SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + # agreement m2_m1_agmt is not needed... :p + + log.info('4. Initialize Master 2 from Master 1 again.') + M1.agreement.init(DEFAULT_SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + M1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if M1.testReplication(DEFAULT_SUFFIX, M2): + log.info('4-1. Replication is working.') + else: + log.fatal('4-1. Replication is not working.') + assert False + + log.info('5. Check Master 2 is up.') + entries = M2.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(cn=*)') + assert len(entries) > 0 + log.info('5-1. %s entries are returned from M2.' % len(entries)) + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47970_test.py b/dirsrvtests/tests/tickets/ticket47970_test.py new file mode 100644 index 0000000..a957d49 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47970_test.py @@ -0,0 +1,141 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import ldap.sasl +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +USER1_DN = "uid=user1,%s" % DEFAULT_SUFFIX +USER2_DN = "uid=user2,%s" % DEFAULT_SUFFIX + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47970(topology): + """ + Testing that a failed SASL bind does not trigger account lockout - + which would attempt to update the passwordRetryCount on the root dse entry + """ + + log.info('Testing Ticket 47970 - Testing that a failed SASL bind does not trigger account lockout') + + # + # Enable account lockout + # + try: + topology.standalone.modify_s("cn=config", [(ldap.MOD_REPLACE, 'passwordLockout', 'on')]) + log.info('account lockout enabled.') + except ldap.LDAPError as e: + log.error('Failed to enable account lockout: ' + e.message['desc']) + assert False + + try: + topology.standalone.modify_s("cn=config", [(ldap.MOD_REPLACE, 'passwordMaxFailure', '5')]) + log.info('passwordMaxFailure set.') + except ldap.LDAPError as e: + log.error('Failed to to set passwordMaxFailure: ' + e.message['desc']) + assert False + + # + # Perform SASL bind that should fail + # + failed_as_expected = False + try: + user_name = "mark" + pw = "secret" + auth_tokens = ldap.sasl.digest_md5(user_name, pw) + topology.standalone.sasl_interactive_bind_s("", auth_tokens) + except ldap.INVALID_CREDENTIALS as e: + log.info("SASL Bind failed as expected") + failed_as_expected = True + + if not failed_as_expected: + log.error("SASL bind unexpectedly succeeded!") + assert False + + # + # Check that passwordRetryCount was not set on the root dse entry + # + try: + entry = topology.standalone.search_s("", ldap.SCOPE_BASE, + "passwordRetryCount=*", + ['passwordRetryCount']) + except ldap.LDAPError as e: + log.error('Failed to search Root DSE entry: ' + e.message['desc']) + assert False + + if entry: + log.error('Root DSE was incorrectly updated') + assert False + + # We passed + log.info('Root DSE was correctly not updated') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47973_test.py b/dirsrvtests/tests/tickets/ticket47973_test.py new file mode 100644 index 0000000..799c72a --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47973_test.py @@ -0,0 +1,165 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import time +import ldap +import ldap.sasl +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +USER_DN = 'uid=user1,%s' % (DEFAULT_SUFFIX) +SCHEMA_RELOAD_COUNT = 10 + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def task_complete(conn, task_dn): + finished = False + + try: + task_entry = conn.search_s(task_dn, ldap.SCOPE_BASE, 'objectclass=*') + if not task_entry: + log.fatal('wait_for_task: Search failed to find task: ' + task_dn) + assert False + if task_entry[0].hasAttr('nstaskexitcode'): + # task is done + finished = True + except ldap.LDAPError as e: + log.fatal('wait_for_task: Search failed: ' + e.message['desc']) + assert False + + return finished + + +def test_ticket47973(topology): + """ + During the schema reload task there is a small window where the new schema is not loaded + into the asi hashtables - this results in searches not returning entries. + """ + + log.info('Testing Ticket 47973 - Test the searches still work as expected during schema reload tasks') + + # + # Add a user + # + try: + topology.standalone.add_s(Entry((USER_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.error('Failed to add user1: error ' + e.message['desc']) + assert False + + # + # Run a series of schema_reload tasks while searching for our user. Since + # this is a race condition, run it several times. + # + task_count = 0 + while task_count < SCHEMA_RELOAD_COUNT: + # + # Add a schema reload task + # + + TASK_DN = 'cn=task-' + str(task_count) + ',cn=schema reload task, cn=tasks, cn=config' + try: + topology.standalone.add_s(Entry((TASK_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'cn': 'task-' + str(task_count) + }))) + except ldap.LDAPError as e: + log.error('Failed to add task entry: error ' + e.message['desc']) + assert False + + # + # While we wait for the task to complete keep searching for our user + # + search_count = 0 + while search_count < 100: + # + # Now check the user is still being returned + # + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + '(uid=user1)') + if not entries or not entries[0]: + log.fatal('User was not returned from search!') + assert False + except ldap.LDAPError as e: + log.fatal('Unable to search for entry %s: error %s' % (USER_DN, e.message['desc'])) + assert False + + # + # Check if task is complete + # + if task_complete(topology.standalone, TASK_DN): + break + + search_count += 1 + + task_count += 1 + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47976_test.py b/dirsrvtests/tests/tickets/ticket47976_test.py new file mode 100644 index 0000000..df4891d --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47976_test.py @@ -0,0 +1,203 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +PEOPLE_OU='people' +PEOPLE_DN = "ou=%s,%s" % (PEOPLE_OU, SUFFIX) +GROUPS_OU='groups' +GROUPS_DN = "ou=%s,%s" % (GROUPS_OU, SUFFIX) +DEFINITIONS_CN='definitions' +DEFINITIONS_DN = "cn=%s,%s" % (DEFINITIONS_CN, SUFFIX) +TEMPLATES_CN='templates' +TEMPLATES_DN = "cn=%s,%s" % (TEMPLATES_CN, SUFFIX) +MANAGED_GROUP_TEMPLATES_CN='managed group templates' +MANAGED_GROUP_TEMPLATES_DN='cn=%s,%s' % (MANAGED_GROUP_TEMPLATES_CN, TEMPLATES_DN) +MANAGED_GROUP_MEP_TMPL_CN='UPG' +MANAGED_GROUP_MEP_TMPL_DN='cn=%s,%s' % (MANAGED_GROUP_MEP_TMPL_CN, MANAGED_GROUP_TEMPLATES_DN) +MANAGED_GROUP_DEF_CN='managed group definition' +MANAGED_GROUP_DEF_DN='cn=%s,%s' % (MANAGED_GROUP_DEF_CN, DEFINITIONS_DN) + +MAX_ACCOUNTS=2 + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket47976_init(topology): + """Create mep definitions and templates""" + + try: + topology.standalone.add_s(Entry((PEOPLE_DN, { + 'objectclass': "top extensibleObject".split(), + 'ou': 'people'}))) + except ldap.ALREADY_EXISTS: + pass + try: + topology.standalone.add_s(Entry((GROUPS_DN, { + 'objectclass': "top extensibleObject".split(), + 'ou': GROUPS_OU}))) + except ldap.ALREADY_EXISTS: + pass + topology.standalone.add_s(Entry((DEFINITIONS_DN, { + 'objectclass': "top nsContainer".split(), + 'cn': DEFINITIONS_CN}))) + topology.standalone.add_s(Entry((TEMPLATES_DN, { + 'objectclass': "top nsContainer".split(), + 'cn': TEMPLATES_CN}))) + topology.standalone.add_s(Entry((MANAGED_GROUP_DEF_DN, { + 'objectclass': "top extensibleObject".split(), + 'cn': MANAGED_GROUP_DEF_CN, + 'originScope': PEOPLE_DN, + 'originFilter': '(objectclass=posixAccount)', + 'managedBase': GROUPS_DN, + 'managedTemplate': MANAGED_GROUP_MEP_TMPL_DN}))) + + topology.standalone.add_s(Entry((MANAGED_GROUP_TEMPLATES_DN, { + 'objectclass': "top nsContainer".split(), + 'cn': MANAGED_GROUP_TEMPLATES_CN}))) + + topology.standalone.add_s(Entry((MANAGED_GROUP_MEP_TMPL_DN, { + 'objectclass': "top mepTemplateEntry".split(), + 'cn': MANAGED_GROUP_MEP_TMPL_CN, + 'mepRDNAttr': 'cn', + 'mepStaticAttr': ['objectclass: posixGroup', + 'objectclass: extensibleObject'], + 'mepMappedAttr': ['cn: $cn|uid: $cn', + 'gidNumber: $uidNumber']}))) + + + topology.standalone.plugins.enable(name=PLUGIN_MANAGED_ENTRY) + topology.standalone.restart(timeout=10) + + +def test_ticket47976_1(topology): + mod = [(ldap.MOD_REPLACE, 'nsslapd-pluginConfigArea', DEFINITIONS_DN)] + topology.standalone.modify_s('cn=%s,cn=plugins,cn=config' % PLUGIN_MANAGED_ENTRY, mod) + topology.standalone.stop(timeout=10) + topology.standalone.start(timeout=10) + for cpt in range(MAX_ACCOUNTS): + name = "user%d" % (cpt) + topology.standalone.add_s(Entry(("uid=%s,%s" %(name, PEOPLE_DN), { + 'objectclass': 'top posixAccount extensibleObject'.split(), + 'uid': name, + 'cn': name, + 'uidNumber': '1', + 'gidNumber': '1', + 'homeDirectory': '/home/%s' % name + }))) + + +def test_ticket47976_2(topology): + """It reimports the database with a very large page size + so all the entries (user and its private group). + """ + + log.info('Test complete') + mod = [(ldap.MOD_REPLACE, 'nsslapd-db-page-size', str(128*1024))] + topology.standalone.modify_s(DN_LDBM, mod) + + # Get the the full path and name for our LDIF we will be exporting + log.info('Export LDIF file...') + ldif_dir = topology.standalone.get_ldif_dir() + ldif_file = ldif_dir + "/export.ldif" + args = {EXPORT_REPL_INFO: False, + TASK_WAIT: True} + exportTask = Tasks(topology.standalone) + try: + exportTask.exportLDIF(DEFAULT_SUFFIX, None, ldif_file, args) + except ValueError: + assert False + # import the new ldif file + log.info('Import LDIF file...') + importTask = Tasks(topology.standalone) + args = {TASK_WAIT: True} + try: + importTask.importLDIF(DEFAULT_SUFFIX, None, ldif_file, args) + os.remove(ldif_file) + except ValueError: + os.remove(ldif_file) + assert False + + +def test_ticket47976_3(topology): + """A single delete of a user should hit 47976, because mep post op will + delete its related group. + """ + + log.info('Testing if the delete will hang or not') + #log.info("\n\nAttach\n\n debugger") + #time.sleep(60) + topology.standalone.set_option(ldap.OPT_TIMEOUT, 5) + try: + for cpt in range(MAX_ACCOUNTS): + name = "user%d" % (cpt) + topology.standalone.delete_s("uid=%s,%s" %(name, PEOPLE_DN)) + except ldap.TIMEOUT as e: + log.fatal('Timeout... likely it hangs (47976)') + assert False + + # check the entry has been deleted + for cpt in range(MAX_ACCOUNTS): + try: + name = "user%d" % (cpt) + topology.standalone.getEntry("uid=%s,%s" %(name, PEOPLE_DN), ldap.SCOPE_BASE, 'objectclass=*') + assert False + except ldap.NO_SUCH_OBJECT: + log.info('%s was correctly deleted' % name) + pass + + assert cpt == (MAX_ACCOUNTS -1) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47980_test.py b/dirsrvtests/tests/tickets/ticket47980_test.py new file mode 100644 index 0000000..09cbe2f --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47980_test.py @@ -0,0 +1,645 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import ldap.sasl +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +BRANCH1 = 'ou=level1,' + DEFAULT_SUFFIX +BRANCH2 = 'ou=level2,ou=level1,' + DEFAULT_SUFFIX +BRANCH3 = 'ou=level3,ou=level2,ou=level1,' + DEFAULT_SUFFIX +BRANCH4 = 'ou=people,' + DEFAULT_SUFFIX +BRANCH5 = 'ou=lower,ou=people,' + DEFAULT_SUFFIX +BRANCH6 = 'ou=lower,ou=lower,ou=people,' + DEFAULT_SUFFIX +USER1_DN = 'uid=user1,%s' % (BRANCH1) +USER2_DN = 'uid=user2,%s' % (BRANCH2) +USER3_DN = 'uid=user3,%s' % (BRANCH3) +USER4_DN = 'uid=user4,%s' % (BRANCH4) +USER5_DN = 'uid=user5,%s' % (BRANCH5) +USER6_DN = 'uid=user6,%s' % (BRANCH6) + +BRANCH1_CONTAINER = 'cn=nsPwPolicyContainer,ou=level1,dc=example,dc=com' +BRANCH1_PWP = 'cn=cn\3DnsPwPolicyEntry\2Cou\3Dlevel1\2Cdc\3Dexample\2Cdc\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=level1,dc=example,dc=com' +BRANCH1_COS_TMPL = 'cn=cn\3DnsPwTemplateEntry\2Cou\3Dlevel1\2Cdc\3Dexample\2Cdc\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=level1,dc=example,dc=com' +BRANCH1_COS_DEF = 'cn=nsPwPolicy_CoS,ou=level1,dc=example,dc=com' + +BRANCH2_CONTAINER = 'cn=nsPwPolicyContainer,ou=level2,ou=level1,dc=example,dc=com' +BRANCH2_PWP = 'cn=cn\3DnsPwPolicyEntry\2Cou\3Dlevel2\2Cou\3Dlevel1\2Cdc\3Dexample\2Cdc\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=level2,ou=level1,dc=example,dc=com' +BRANCH2_COS_TMPL = 'cn=cn\3DnsPwTemplateEntry\2Cou\3Dlevel2\2Cou\3Dlevel1\2Cdc\3Dexample\2Cdc\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=level2,ou=level1,dc=example,dc=com' +BRANCH2_COS_DEF = 'cn=nsPwPolicy_CoS,ou=level2,ou=level1,dc=example,dc=com' + +BRANCH3_CONTAINER = 'cn=nsPwPolicyContainer,ou=level3,ou=level2,ou=level1,dc=example,dc=com' +BRANCH3_PWP = 'cn=cn\3DnsPwPolicyEntry\2Cou\3Dlevel3\2Cou\3Dlevel2\2Cou\3Dlevel1\2Cdc\3Dexample\2Cdc\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=level3,ou=level2,ou=level1,dc=example,dc=com' +BRANCH3_COS_TMPL = 'cn=cn\3DnsPwTemplateEntry\2Cou\3Dlevel3\2Cou\3Dlevel2\2Cou\3Dlevel1\2Cdc\3Dexample\2Cdc\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=level3,ou=level2,ou=level1,dc=example,dc=com' +BRANCH3_COS_DEF = 'cn=nsPwPolicy_CoS,ou=level3,ou=level2,ou=level1,dc=example,dc=com' + +BRANCH4_CONTAINER = 'cn=nsPwPolicyContainer,ou=people,dc=example,dc=com' +BRANCH4_PWP = 'cn=cn\3DnsPwPolicyEntry\2Cou\3DPeople\2Cdc\3Dexample\2Cdc\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=People,dc=example,dc=com' +BRANCH4_COS_TMPL = 'cn=cn\3DnsPwTemplateEntry\2Cou\3DPeople\2Cdc\3Dexample\2Cdc\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=People,dc=example,dc=com' +BRANCH4_COS_DEF = 'cn=nsPwPolicy_CoS,ou=people,dc=example,dc=com' + +BRANCH5_CONTAINER = 'cn=nsPwPolicyContainer,ou=lower,ou=people,dc=example,dc=com' +BRANCH5_PWP = 'cn=cn\3DnsPwPolicyEntry\2Cou\3Dlower\2Cou\3DPeople\2Cdc\3Dexample\2Cdc\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=lower,ou=People,dc=example,dc=com' +BRANCH5_COS_TMPL = 'cn=cn\3DnsPwTemplateEntry\2Cou\3Dlower\2Cou\3DPeople\2Cdc\3Dexample\2Cdc\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=lower,ou=People,dc=example,dc=com' +BRANCH5_COS_DEF = 'cn=nsPwPolicy_CoS,ou=lower,ou=People,dc=example,dc=com' + +BRANCH6_CONTAINER = 'cn=nsPwPolicyContainer,ou=lower,ou=lower,ou=People,dc=example,dc=com' +BRANCH6_PWP = 'cn=cn\3DnsPwPolicyEntry\2Cou\3Dlower\2Cou\3Dlower\2Cou\3DPeople\2Cdc\3Dexample\2Cdc\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=lower,ou=lower,ou=People,dc=example,dc=com' +BRANCH6_COS_TMPL = 'cn=cn\3DnsPwTemplateEntry\2Cou\3Dlower\2Cou\3Dlower\2Cou\3DPeople\2Cdc\3Dexample\2Cdc\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=lower,ou=lower,ou=People,dc=example,dc=com' +BRANCH6_COS_DEF = 'cn=nsPwPolicy_CoS,ou=lower,ou=lower,ou=People,dc=example,dc=com' + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket47980(topology): + """ + Multiple COS pointer definitions that use the same attribute are not correctly ordered. + The cos plugin was incorrectly sorting the attribute indexes based on subtree, which lead + to the wrong cos attribute value being applied to the entry. + """ + + log.info('Testing Ticket 47980 - Testing multiple nested COS pointer definitions are processed correctly') + + # Add our nested branches + try: + topology.standalone.add_s(Entry((BRANCH1, { + 'objectclass': 'top extensibleObject'.split(), + 'ou': 'level1' + }))) + except ldap.LDAPError as e: + log.error('Failed to add level1: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((BRANCH2, { + 'objectclass': 'top extensibleObject'.split(), + 'ou': 'level2' + }))) + except ldap.LDAPError as e: + log.error('Failed to add level2: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((BRANCH3, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'level3' + }))) + except ldap.LDAPError as e: + log.error('Failed to add level3: error ' + e.message['desc']) + assert False + + # People branch, might already exist + try: + topology.standalone.add_s(Entry((BRANCH4, { + 'objectclass': 'top extensibleObject'.split(), + 'ou': 'level4' + }))) + except ldap.ALREADY_EXISTS: + pass + except ldap.LDAPError as e: + log.error('Failed to add level4: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((BRANCH5, { + 'objectclass': 'top extensibleObject'.split(), + 'ou': 'level5' + }))) + except ldap.LDAPError as e: + log.error('Failed to add level5: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((BRANCH6, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'level6' + }))) + except ldap.LDAPError as e: + log.error('Failed to add level6: error ' + e.message['desc']) + assert False + + # Add users to each branch + try: + topology.standalone.add_s(Entry((USER1_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.error('Failed to add user1: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((USER2_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user2' + }))) + except ldap.LDAPError as e: + log.error('Failed to add user2: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((USER3_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user3' + }))) + except ldap.LDAPError as e: + log.error('Failed to add user3: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((USER4_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user4' + }))) + except ldap.LDAPError as e: + log.error('Failed to add user4: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((USER5_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user5' + }))) + except ldap.LDAPError as e: + log.error('Failed to add user5: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((USER6_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user6' + }))) + except ldap.LDAPError as e: + log.error('Failed to add user6: error ' + e.message['desc']) + assert False + + # Enable password policy + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-pwpolicy-local', 'on')]) + except ldap.LDAPError as e: + log.error('Failed to set pwpolicy-local: error ' + e.message['desc']) + assert False + + # + # Add subtree policy to branch 1 + # + # Add the container + try: + topology.standalone.add_s(Entry((BRANCH1_CONTAINER, { + 'objectclass': 'top nsContainer'.split(), + 'cn': 'nsPwPolicyContainer' + }))) + except ldap.LDAPError as e: + log.error('Failed to add subtree container for level1: error ' + e.message['desc']) + assert False + + # Add the password policy subentry + try: + topology.standalone.add_s(Entry((BRANCH1_PWP, { + 'objectclass': 'top ldapsubentry passwordpolicy'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=level1,dc=example,dc=com', + 'passwordMustChange': 'off', + 'passwordExp': 'off', + 'passwordHistory': 'off', + 'passwordMinAge': '0', + 'passwordChange': 'off', + 'passwordStorageScheme': 'ssha' + }))) + except ldap.LDAPError as e: + log.error('Failed to add passwordpolicy for level1: error ' + e.message['desc']) + assert False + + # Add the COS template + try: + topology.standalone.add_s(Entry((BRANCH1_COS_TMPL, { + 'objectclass': 'top ldapsubentry costemplate extensibleObject'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=level1,dc=example,dc=com', + 'cosPriority': '1', + 'cn': 'cn=nsPwTemplateEntry,ou=level1,dc=example,dc=com', + 'pwdpolicysubentry': BRANCH1_PWP + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS template for level1: error ' + e.message['desc']) + assert False + + # Add the COS definition + try: + topology.standalone.add_s(Entry((BRANCH1_COS_DEF, { + 'objectclass': 'top ldapsubentry cosSuperDefinition cosPointerDefinition'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=level1,dc=example,dc=com', + 'costemplatedn': BRANCH1_COS_TMPL, + 'cosAttribute': 'pwdpolicysubentry default operational-default' + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS def for level1: error ' + e.message['desc']) + assert False + + # + # Add subtree policy to branch 2 + # + # Add the container + try: + topology.standalone.add_s(Entry((BRANCH2_CONTAINER, { + 'objectclass': 'top nsContainer'.split(), + 'cn': 'nsPwPolicyContainer' + }))) + except ldap.LDAPError as e: + log.error('Failed to add subtree container for level2: error ' + e.message['desc']) + assert False + + # Add the password policy subentry + try: + topology.standalone.add_s(Entry((BRANCH2_PWP, { + 'objectclass': 'top ldapsubentry passwordpolicy'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=level2,dc=example,dc=com', + 'passwordMustChange': 'off', + 'passwordExp': 'off', + 'passwordHistory': 'off', + 'passwordMinAge': '0', + 'passwordChange': 'off', + 'passwordStorageScheme': 'ssha' + }))) + except ldap.LDAPError as e: + log.error('Failed to add passwordpolicy for level2: error ' + e.message['desc']) + assert False + + # Add the COS template + try: + topology.standalone.add_s(Entry((BRANCH2_COS_TMPL, { + 'objectclass': 'top ldapsubentry costemplate extensibleObject'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=level2,dc=example,dc=com', + 'cosPriority': '1', + 'cn': 'cn=nsPwTemplateEntry,ou=level2,dc=example,dc=com', + 'pwdpolicysubentry': BRANCH2_PWP + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS template for level2: error ' + e.message['desc']) + assert False + + # Add the COS definition + try: + topology.standalone.add_s(Entry((BRANCH2_COS_DEF, { + 'objectclass': 'top ldapsubentry cosSuperDefinition cosPointerDefinition'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=level2,dc=example,dc=com', + 'costemplatedn': BRANCH2_COS_TMPL, + 'cosAttribute': 'pwdpolicysubentry default operational-default' + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS def for level2: error ' + e.message['desc']) + assert False + + # + # Add subtree policy to branch 3 + # + # Add the container + try: + topology.standalone.add_s(Entry((BRANCH3_CONTAINER, { + 'objectclass': 'top nsContainer'.split(), + 'cn': 'nsPwPolicyContainer' + }))) + except ldap.LDAPError as e: + log.error('Failed to add subtree container for level3: error ' + e.message['desc']) + assert False + + # Add the password policy subentry + try: + topology.standalone.add_s(Entry((BRANCH3_PWP, { + 'objectclass': 'top ldapsubentry passwordpolicy'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=level3,dc=example,dc=com', + 'passwordMustChange': 'off', + 'passwordExp': 'off', + 'passwordHistory': 'off', + 'passwordMinAge': '0', + 'passwordChange': 'off', + 'passwordStorageScheme': 'ssha' + }))) + except ldap.LDAPError as e: + log.error('Failed to add passwordpolicy for level3: error ' + e.message['desc']) + assert False + + # Add the COS template + try: + topology.standalone.add_s(Entry((BRANCH3_COS_TMPL, { + 'objectclass': 'top ldapsubentry costemplate extensibleObject'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=level3,dc=example,dc=com', + 'cosPriority': '1', + 'cn': 'cn=nsPwTemplateEntry,ou=level3,dc=example,dc=com', + 'pwdpolicysubentry': BRANCH3_PWP + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS template for level3: error ' + e.message['desc']) + assert False + + # Add the COS definition + try: + topology.standalone.add_s(Entry((BRANCH3_COS_DEF, { + 'objectclass': 'top ldapsubentry cosSuperDefinition cosPointerDefinition'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=level3,dc=example,dc=com', + 'costemplatedn': BRANCH3_COS_TMPL, + 'cosAttribute': 'pwdpolicysubentry default operational-default' + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS def for level3: error ' + e.message['desc']) + assert False + + # + # Add subtree policy to branch 4 + # + # Add the container + try: + topology.standalone.add_s(Entry((BRANCH4_CONTAINER, { + 'objectclass': 'top nsContainer'.split(), + 'cn': 'nsPwPolicyContainer' + }))) + except ldap.LDAPError as e: + log.error('Failed to add subtree container for level3: error ' + e.message['desc']) + assert False + + # Add the password policy subentry + try: + topology.standalone.add_s(Entry((BRANCH4_PWP, { + 'objectclass': 'top ldapsubentry passwordpolicy'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=people,dc=example,dc=com', + 'passwordMustChange': 'off', + 'passwordExp': 'off', + 'passwordHistory': 'off', + 'passwordMinAge': '0', + 'passwordChange': 'off', + 'passwordStorageScheme': 'ssha' + }))) + except ldap.LDAPError as e: + log.error('Failed to add passwordpolicy for branch4: error ' + e.message['desc']) + assert False + + # Add the COS template + try: + topology.standalone.add_s(Entry((BRANCH4_COS_TMPL, { + 'objectclass': 'top ldapsubentry costemplate extensibleObject'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=people,dc=example,dc=com', + 'cosPriority': '1', + 'cn': 'cn=nsPwTemplateEntry,ou=people,dc=example,dc=com', + 'pwdpolicysubentry': BRANCH4_PWP + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS template for level3: error ' + e.message['desc']) + assert False + + # Add the COS definition + try: + topology.standalone.add_s(Entry((BRANCH4_COS_DEF, { + 'objectclass': 'top ldapsubentry cosSuperDefinition cosPointerDefinition'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=people,dc=example,dc=com', + 'costemplatedn': BRANCH4_COS_TMPL, + 'cosAttribute': 'pwdpolicysubentry default operational-default' + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS def for branch4: error ' + e.message['desc']) + assert False + + # + # Add subtree policy to branch 5 + # + # Add the container + try: + topology.standalone.add_s(Entry((BRANCH5_CONTAINER, { + 'objectclass': 'top nsContainer'.split(), + 'cn': 'nsPwPolicyContainer' + }))) + except ldap.LDAPError as e: + log.error('Failed to add subtree container for branch5: error ' + e.message['desc']) + assert False + + # Add the password policy subentry + try: + topology.standalone.add_s(Entry((BRANCH5_PWP, { + 'objectclass': 'top ldapsubentry passwordpolicy'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=lower,ou=people,dc=example,dc=com', + 'passwordMustChange': 'off', + 'passwordExp': 'off', + 'passwordHistory': 'off', + 'passwordMinAge': '0', + 'passwordChange': 'off', + 'passwordStorageScheme': 'ssha' + }))) + except ldap.LDAPError as e: + log.error('Failed to add passwordpolicy for branch5: error ' + e.message['desc']) + assert False + + # Add the COS template + try: + topology.standalone.add_s(Entry((BRANCH5_COS_TMPL, { + 'objectclass': 'top ldapsubentry costemplate extensibleObject'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=lower,ou=people,dc=example,dc=com', + 'cosPriority': '1', + 'cn': 'cn=nsPwTemplateEntry,ou=lower,ou=people,dc=example,dc=com', + 'pwdpolicysubentry': BRANCH5_PWP + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS template for branch5: error ' + e.message['desc']) + assert False + + # Add the COS definition + try: + topology.standalone.add_s(Entry((BRANCH5_COS_DEF, { + 'objectclass': 'top ldapsubentry cosSuperDefinition cosPointerDefinition'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=lower,ou=people,dc=example,dc=com', + 'costemplatedn': BRANCH5_COS_TMPL, + 'cosAttribute': 'pwdpolicysubentry default operational-default' + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS def for level3: error ' + e.message['desc']) + assert False + + # + # Add subtree policy to branch 6 + # + # Add the container + try: + topology.standalone.add_s(Entry((BRANCH6_CONTAINER, { + 'objectclass': 'top nsContainer'.split(), + 'cn': 'nsPwPolicyContainer' + }))) + except ldap.LDAPError as e: + log.error('Failed to add subtree container for branch6: error ' + e.message['desc']) + assert False + + # Add the password policy subentry + try: + topology.standalone.add_s(Entry((BRANCH6_PWP, { + 'objectclass': 'top ldapsubentry passwordpolicy'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=level3,dc=example,dc=com', + 'passwordMustChange': 'off', + 'passwordExp': 'off', + 'passwordHistory': 'off', + 'passwordMinAge': '0', + 'passwordChange': 'off', + 'passwordStorageScheme': 'ssha' + }))) + except ldap.LDAPError as e: + log.error('Failed to add passwordpolicy for branch6: error ' + e.message['desc']) + assert False + + # Add the COS template + try: + topology.standalone.add_s(Entry((BRANCH6_COS_TMPL, { + 'objectclass': 'top ldapsubentry costemplate extensibleObject'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=lower,ou=lower,ou=people,dc=example,dc=com', + 'cosPriority': '1', + 'cn': 'cn=nsPwTemplateEntry,ou=lower,ou=lower,ou=people,dc=example,dc=com', + 'pwdpolicysubentry': BRANCH6_PWP + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS template for branch6: error ' + e.message['desc']) + assert False + + # Add the COS definition + try: + topology.standalone.add_s(Entry((BRANCH6_COS_DEF, { + 'objectclass': 'top ldapsubentry cosSuperDefinition cosPointerDefinition'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=lower,ou=lower,ou=people,dc=example,dc=com', + 'costemplatedn': BRANCH6_COS_TMPL, + 'cosAttribute': 'pwdpolicysubentry default operational-default' + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS def for branch6: error ' + e.message['desc']) + assert False + + time.sleep(2) + + # + # Now check that each user has its expected passwordPolicy subentry + # + try: + entries = topology.standalone.search_s(USER1_DN, ldap.SCOPE_BASE, '(objectclass=top)', ['pwdpolicysubentry']) + if not entries[0].hasValue('pwdpolicysubentry', BRANCH1_PWP): + log.fatal('User %s does not have expected pwdpolicysubentry!') + assert False + except ldap.LDAPError as e: + log.fatal('Unable to search for entry %s: error %s' % (USER1_DN, e.message['desc'])) + assert False + + try: + entries = topology.standalone.search_s(USER2_DN, ldap.SCOPE_BASE, '(objectclass=top)', ['pwdpolicysubentry']) + if not entries[0].hasValue('pwdpolicysubentry', BRANCH2_PWP): + log.fatal('User %s does not have expected pwdpolicysubentry!' % USER2_DN) + assert False + except ldap.LDAPError as e: + log.fatal('Unable to search for entry %s: error %s' % (USER2_DN, e.message['desc'])) + assert False + + try: + entries = topology.standalone.search_s(USER3_DN, ldap.SCOPE_BASE, '(objectclass=top)', ['pwdpolicysubentry']) + if not entries[0].hasValue('pwdpolicysubentry', BRANCH3_PWP): + log.fatal('User %s does not have expected pwdpolicysubentry!' % USER3_DN) + assert False + except ldap.LDAPError as e: + log.fatal('Unable to search for entry %s: error %s' % (USER3_DN, e.message['desc'])) + assert False + + try: + entries = topology.standalone.search_s(USER4_DN, ldap.SCOPE_BASE, '(objectclass=top)', ['pwdpolicysubentry']) + if not entries[0].hasValue('pwdpolicysubentry', BRANCH4_PWP): + log.fatal('User %s does not have expected pwdpolicysubentry!' % USER4_DN) + assert False + except ldap.LDAPError as e: + log.fatal('Unable to search for entry %s: error %s' % (USER4_DN, e.message['desc'])) + assert False + + try: + entries = topology.standalone.search_s(USER5_DN, ldap.SCOPE_BASE, '(objectclass=top)', ['pwdpolicysubentry']) + if not entries[0].hasValue('pwdpolicysubentry', BRANCH5_PWP): + log.fatal('User %s does not have expected pwdpolicysubentry!' % USER5_DN) + assert False + except ldap.LDAPError as e: + log.fatal('Unable to search for entry %s: error %s' % (USER5_DN, e.message['desc'])) + assert False + + try: + entries = topology.standalone.search_s(USER6_DN, ldap.SCOPE_BASE, '(objectclass=top)', ['pwdpolicysubentry']) + if not entries[0].hasValue('pwdpolicysubentry', BRANCH6_PWP): + log.fatal('User %s does not have expected pwdpolicysubentry!' % USER6_DN) + assert False + except ldap.LDAPError as e: + log.fatal('Unable to search for entry %s: error %s' % (USER6_DN, e.message['desc'])) + assert False + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47981_test.py b/dirsrvtests/tests/tickets/ticket47981_test.py new file mode 100644 index 0000000..fbd19d5 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47981_test.py @@ -0,0 +1,278 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import ldap.sasl +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +BRANCH = 'ou=people,' + DEFAULT_SUFFIX +USER_DN = 'uid=user1,%s' % (BRANCH) +BRANCH_CONTAINER = 'cn=nsPwPolicyContainer,ou=people,dc=example,dc=com' +BRANCH_COS_DEF = 'cn=nsPwPolicy_CoS,ou=people,dc=example,dc=com' +BRANCH_PWP = 'cn=cn\\3DnsPwPolicyEntry\\2Cou\\3DPeople\\2Cdc\\3Dexample\\2Cdc\\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=People,dc=example,dc=com' +BRANCH_COS_TMPL = 'cn=cn\\3DnsPwTemplateEntry\\2Cou\\3DPeople\\2Cdc\\3Dexample\\2Cdc\\3Dcom,' + \ + 'cn=nsPwPolicyContainer,ou=People,dc=example,dc=com' +SECOND_SUFFIX = 'o=netscaperoot' +BE_NAME = 'netscaperoot' + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def addSubtreePwPolicy(inst): + # + # Add subtree policy to the people branch + # + try: + inst.add_s(Entry((BRANCH_CONTAINER, { + 'objectclass': 'top nsContainer'.split(), + 'cn': 'nsPwPolicyContainer' + }))) + except ldap.LDAPError as e: + log.error('Failed to add subtree container for ou=people: error ' + e.message['desc']) + assert False + + # Add the password policy subentry + try: + inst.add_s(Entry((BRANCH_PWP, { + 'objectclass': 'top ldapsubentry passwordpolicy'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=people,dc=example,dc=com', + 'passwordMustChange': 'off', + 'passwordExp': 'off', + 'passwordHistory': 'off', + 'passwordMinAge': '0', + 'passwordChange': 'off', + 'passwordStorageScheme': 'ssha' + }))) + except ldap.LDAPError as e: + log.error('Failed to add passwordpolicy: error ' + e.message['desc']) + assert False + + # Add the COS template + try: + inst.add_s(Entry((BRANCH_COS_TMPL, { + 'objectclass': 'top ldapsubentry costemplate extensibleObject'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=people,dc=example,dc=com', + 'cosPriority': '1', + 'cn': 'cn=nsPwTemplateEntry,ou=people,dc=example,dc=com', + 'pwdpolicysubentry': BRANCH_PWP + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS template: error ' + e.message['desc']) + assert False + + # Add the COS definition + try: + inst.add_s(Entry((BRANCH_COS_DEF, { + 'objectclass': 'top ldapsubentry cosSuperDefinition cosPointerDefinition'.split(), + 'cn': 'cn=nsPwPolicyEntry,ou=people,dc=example,dc=com', + 'costemplatedn': BRANCH_COS_TMPL, + 'cosAttribute': 'pwdpolicysubentry default operational-default' + }))) + except ldap.LDAPError as e: + log.error('Failed to add COS def: error ' + e.message['desc']) + assert False + time.sleep(0.5) + + +def delSubtreePwPolicy(inst): + try: + inst.delete_s(BRANCH_COS_DEF) + except ldap.LDAPError as e: + log.error('Failed to delete COS def: error ' + e.message['desc']) + assert False + + try: + inst.delete_s(BRANCH_COS_TMPL) + except ldap.LDAPError as e: + log.error('Failed to delete COS template: error ' + e.message['desc']) + assert False + + try: + inst.delete_s(BRANCH_PWP) + except ldap.LDAPError as e: + log.error('Failed to delete COS password policy: error ' + e.message['desc']) + assert False + + try: + inst.delete_s(BRANCH_CONTAINER) + except ldap.LDAPError as e: + log.error('Failed to delete COS container: error ' + e.message['desc']) + assert False + time.sleep(0.5) + + +def test_ticket47981(topology): + """ + If there are multiple suffixes, and the last suffix checked does not contain any COS entries, + while other suffixes do, then the vattr cache is not invalidated as it should be. Then any + cached entries will still contain the old COS attributes/values. + """ + + log.info('Testing Ticket 47981 - Test that COS def changes are correctly reflected in affected users') + + # + # Create a second backend that does not have any COS entries + # + log.info('Adding second suffix that will not contain any COS entries...\n') + + topology.standalone.backend.create(SECOND_SUFFIX, {BACKEND_NAME: BE_NAME}) + topology.standalone.mappingtree.create(SECOND_SUFFIX, bename=BE_NAME) + try: + topology.standalone.add_s(Entry((SECOND_SUFFIX, { + 'objectclass': 'top organization'.split(), + 'o': BE_NAME}))) + except ldap.ALREADY_EXISTS: + pass + except ldap.LDAPError as e: + log.error('Failed to create suffix entry: error ' + e.message['desc']) + assert False + + # + # Add People branch, it might already exist + # + log.info('Add our test entries to the default suffix, and proceed with the test...') + + try: + topology.standalone.add_s(Entry((BRANCH, { + 'objectclass': 'top extensibleObject'.split(), + 'ou': 'level4' + }))) + except ldap.ALREADY_EXISTS: + pass + except ldap.LDAPError as e: + log.error('Failed to add ou=people: error ' + e.message['desc']) + assert False + + # + # Add a user to the branch + # + try: + topology.standalone.add_s(Entry((USER_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1' + }))) + except ldap.LDAPError as e: + log.error('Failed to add user1: error ' + e.message['desc']) + assert False + + # + # Enable password policy and add the subtree policy + # + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-pwpolicy-local', 'on')]) + except ldap.LDAPError as e: + log.error('Failed to set pwpolicy-local: error ' + e.message['desc']) + assert False + + addSubtreePwPolicy(topology.standalone) + + # + # Now check the user has its expected passwordPolicy subentry + # + try: + entries = topology.standalone.search_s(USER_DN, + ldap.SCOPE_BASE, + '(objectclass=top)', + ['pwdpolicysubentry', 'dn']) + if not entries[0].hasAttr('pwdpolicysubentry'): + log.fatal('User does not have expected pwdpolicysubentry!') + assert False + except ldap.LDAPError as e: + log.fatal('Unable to search for entry %s: error %s' % (USER_DN, e.message['desc'])) + assert False + + # + # Delete the password policy and make sure it is removed from the same user + # + delSubtreePwPolicy(topology.standalone) + try: + entries = topology.standalone.search_s(USER_DN, ldap.SCOPE_BASE, '(objectclass=top)', ['pwdpolicysubentry']) + if entries[0].hasAttr('pwdpolicysubentry'): + log.fatal('User unexpectedly does have the pwdpolicysubentry!') + assert False + except ldap.LDAPError as e: + log.fatal('Unable to search for entry %s: error %s' % (USER_DN, e.message['desc'])) + assert False + + # + # Add the subtree policvy back and see if the user now has it + # + addSubtreePwPolicy(topology.standalone) + try: + entries = topology.standalone.search_s(USER_DN, ldap.SCOPE_BASE, '(objectclass=top)', ['pwdpolicysubentry']) + if not entries[0].hasAttr('pwdpolicysubentry'): + log.fatal('User does not have expected pwdpolicysubentry!') + assert False + except ldap.LDAPError as e: + log.fatal('Unable to search for entry %s: error %s' % (USER_DN, e.message['desc'])) + assert False + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket47988_test.py b/dirsrvtests/tests/tickets/ticket47988_test.py new file mode 100644 index 0000000..c9835c3 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket47988_test.py @@ -0,0 +1,481 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +''' +Created on Nov 7, 2013 + +@author: tbordaz +''' +import os +import sys +import time +import ldap +import logging +import pytest +import tarfile +import stat +import shutil +from random import randint +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +# +# important part. We can deploy Master1 and Master2 on different versions +# +installation1_prefix = None +installation2_prefix = None + +TEST_REPL_DN = "cn=test_repl, %s" % SUFFIX +OC_NAME = 'OCticket47988' +MUST = "(postalAddress $ postalCode)" +MAY = "(member $ street)" + +OTHER_NAME = 'other_entry' +MAX_OTHERS = 10 + +BIND_NAME = 'bind_entry' +BIND_DN = 'cn=%s, %s' % (BIND_NAME, SUFFIX) +BIND_PW = 'password' + +ENTRY_NAME = 'test_entry' +ENTRY_DN = 'cn=%s, %s' % (ENTRY_NAME, SUFFIX) +ENTRY_OC = "top person %s" % OC_NAME + +def _oc_definition(oid_ext, name, must=None, may=None): + oid = "1.2.3.4.5.6.7.8.9.10.%d" % oid_ext + desc = 'To test ticket 47490' + sup = 'person' + if not must: + must = MUST + if not may: + may = MAY + + new_oc = "( %s NAME '%s' DESC '%s' SUP %s AUXILIARY MUST %s MAY %s )" % (oid, name, desc, sup, must, may) + return new_oc +class TopologyMaster1Master2(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to create a replicated topology for the 'module'. + The replicated topology is MASTER1 <-> Master2. + ''' + global installation1_prefix + global installation2_prefix + + #os.environ['USE_VALGRIND'] = '1' + + # allocate master1 on a given deployement + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Args for the master1 instance + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_master = args_instance.copy() + master1.allocate(args_master) + + # allocate master1 on a given deployement + master2 = DirSrv(verbose=False) + if installation2_prefix: + args_instance[SER_DEPLOYED_DIR] = installation2_prefix + + # Args for the consumer instance + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_master = args_instance.copy() + master2.allocate(args_master) + + # Get the status of the instance and restart it if it exists + instance_master1 = master1.exists() + instance_master2 = master2.exists() + + # Remove all the instances + if instance_master1: + master1.delete() + if instance_master2: + master2.delete() + + # Create the instances + master1.create() + master1.open() + master2.create() + master2.open() + + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + # + # Now prepare the Master-Consumer topology + # + # First Enable replication + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # Initialize the supplier->consumer + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + repl_agreement = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + + if not repl_agreement: + log.fatal("Fail to create a replica agreement") + sys.exit(1) + + log.debug("%s created" % repl_agreement) + + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(repl_agreement) + + # Check replication is working fine + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Here we have two instances master and consumer + return TopologyMaster1Master2(master1, master2) + + +def _header(topology, label): + topology.master1.log.info("\n\n###############################################") + topology.master1.log.info("#######") + topology.master1.log.info("####### %s" % label) + topology.master1.log.info("#######") + topology.master1.log.info("###################################################") + + +def _install_schema(server, tarFile): + server.stop(timeout=10) + + tmpSchema = '/tmp/schema_47988' + if not os.path.isdir(tmpSchema): + os.mkdir(tmpSchema) + + for the_file in os.listdir(tmpSchema): + file_path = os.path.join(tmpSchema, the_file) + if os.path.isfile(file_path): + os.unlink(file_path) + + os.chdir(tmpSchema) + tar = tarfile.open(tarFile, 'r:gz') + for member in tar.getmembers(): + tar.extract(member.name) + + tar.close() + + st = os.stat(server.schemadir) + os.chmod(server.schemadir, st.st_mode | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRUSR) + for the_file in os.listdir(tmpSchema): + schemaFile = os.path.join(server.schemadir, the_file) + if os.path.isfile(schemaFile): + if the_file.startswith('99user.ldif'): + # only replace 99user.ldif, the other standard definition are kept + os.chmod(schemaFile, stat.S_IWUSR | stat.S_IRUSR) + server.log.info("replace %s" % schemaFile) + shutil.copy(the_file, schemaFile) + + else: + server.log.info("add %s" % schemaFile) + shutil.copy(the_file, schemaFile) + os.chmod(schemaFile, stat.S_IRUSR | stat.S_IRGRP) + os.chmod(server.schemadir, st.st_mode | stat.S_IRUSR | stat.S_IRGRP) + + +def test_ticket47988_init(topology): + """ + It adds + - Objectclass with MAY 'member' + - an entry ('bind_entry') with which we bind to test the 'SELFDN' operation + It deletes the anonymous aci + + """ + + _header(topology, 'test_ticket47988_init') + + # enable acl error logging + mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', str(8192))] # REPL + topology.master1.modify_s(DN_CONFIG, mod) + topology.master2.modify_s(DN_CONFIG, mod) + + mod = [(ldap.MOD_REPLACE, 'nsslapd-accesslog-level', str(260))] # Internal op + topology.master1.modify_s(DN_CONFIG, mod) + topology.master2.modify_s(DN_CONFIG, mod) + + # add dummy entries + for cpt in range(MAX_OTHERS): + name = "%s%d" % (OTHER_NAME, cpt) + topology.master1.add_s(Entry(("cn=%s,%s" % (name, SUFFIX), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + + # check that entry 0 is replicated before + loop = 0 + entryDN = "cn=%s0,%s" % (OTHER_NAME, SUFFIX) + while loop <= 10: + try: + ent = topology.master2.getEntry(entryDN, ldap.SCOPE_BASE, "(objectclass=*)", ['telephonenumber']) + break + except ldap.NO_SUCH_OBJECT: + time.sleep(1) + loop += 1 + assert (loop <= 10) + + topology.master1.stop(timeout=10) + topology.master2.stop(timeout=10) + + #install the specific schema M1: ipa3.3, M2: ipa4.1 + schema_file = os.path.join(topology.master1.getDir(__file__, DATA_DIR), "ticket47988/schema_ipa3.3.tar.gz") + _install_schema(topology.master1, schema_file) + schema_file = os.path.join(topology.master1.getDir(__file__, DATA_DIR), "ticket47988/schema_ipa4.1.tar.gz") + _install_schema(topology.master2, schema_file) + + topology.master1.start(timeout=10) + topology.master2.start(timeout=10) + + +def _do_update_schema(server, range=3999): + ''' + Update the schema of the M2 (IPA4.1). to generate a nsSchemaCSN + ''' + postfix = str(randint(range, range + 1000)) + OID = '2.16.840.1.113730.3.8.12.%s' % postfix + NAME = 'thierry%s' % postfix + value = '( %s NAME \'%s\' DESC \'Override for Group Attributes\' STRUCTURAL MUST ( cn ) MAY sn X-ORIGIN ( \'IPA v4.1.2\' \'user defined\' ) )' % (OID, NAME) + mod = [(ldap.MOD_ADD, 'objectclasses', value)] + server.modify_s('cn=schema', mod) + + +def _do_update_entry(supplier=None, consumer=None, attempts=10): + ''' + This is doing an update on M2 (IPA4.1) and checks the update has been + propagated to M1 (IPA3.3) + ''' + assert(supplier) + assert(consumer) + entryDN = "cn=%s0,%s" % (OTHER_NAME, SUFFIX) + value = str(randint(100, 200)) + mod = [(ldap.MOD_REPLACE, 'telephonenumber', value)] + supplier.modify_s(entryDN, mod) + + loop = 0 + while loop <= attempts: + ent = consumer.getEntry(entryDN, ldap.SCOPE_BASE, "(objectclass=*)", ['telephonenumber']) + read_val = ent.telephonenumber or "0" + if read_val == value: + break + # the expected value is not yet replicated. try again + time.sleep(5) + loop += 1 + supplier.log.debug("test_do_update: receive %s (expected %s)" % (read_val, value)) + assert (loop <= attempts) + + +def _pause_M2_to_M1(topology): + topology.master1.log.info("\n\n######################### Pause RA M2->M1 ######################\n") + ents = topology.master2.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + topology.master2.agreement.pause(ents[0].dn) + + +def _resume_M1_to_M2(topology): + topology.master1.log.info("\n\n######################### resume RA M1->M2 ######################\n") + ents = topology.master1.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + topology.master1.agreement.resume(ents[0].dn) + + +def _pause_M1_to_M2(topology): + topology.master1.log.info("\n\n######################### Pause RA M1->M2 ######################\n") + ents = topology.master1.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + topology.master1.agreement.pause(ents[0].dn) + + +def _resume_M2_to_M1(topology): + topology.master1.log.info("\n\n######################### resume RA M2->M1 ######################\n") + ents = topology.master2.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + topology.master2.agreement.resume(ents[0].dn) + + +def test_ticket47988_1(topology): + ''' + Check that replication is working and pause replication M2->M1 + ''' + _header(topology, 'test_ticket47988_1') + + topology.master1.log.debug("\n\nCheck that replication is working and pause replication M2->M1\n") + _do_update_entry(supplier=topology.master2, consumer=topology.master1, attempts=5) + _pause_M2_to_M1(topology) + + +def test_ticket47988_2(topology): + ''' + Update M1 schema and trigger update M1->M2 + So M1 should learn new/extended definitions that are in M2 schema + ''' + _header(topology, 'test_ticket47988_2') + + topology.master1.log.debug("\n\nUpdate M1 schema and an entry on M1\n") + master1_schema_csn = topology.master1.schema.get_schema_csn() + master2_schema_csn = topology.master2.schema.get_schema_csn() + topology.master1.log.debug("\nBefore updating the schema on M1\n") + topology.master1.log.debug("Master1 nsschemaCSN: %s" % master1_schema_csn) + topology.master1.log.debug("Master2 nsschemaCSN: %s" % master2_schema_csn) + + # Here M1 should no, should check M2 schema and learn + _do_update_schema(topology.master1) + master1_schema_csn = topology.master1.schema.get_schema_csn() + master2_schema_csn = topology.master2.schema.get_schema_csn() + topology.master1.log.debug("\nAfter updating the schema on M1\n") + topology.master1.log.debug("Master1 nsschemaCSN: %s" % master1_schema_csn) + topology.master1.log.debug("Master2 nsschemaCSN: %s" % master2_schema_csn) + assert (master1_schema_csn) + + # to avoid linger effect where a replication session is reused without checking the schema + _pause_M1_to_M2(topology) + _resume_M1_to_M2(topology) + + #topo.master1.log.debug("\n\nSleep.... attach the debugger dse_modify") + #time.sleep(60) + _do_update_entry(supplier=topology.master1, consumer=topology.master2, attempts=15) + master1_schema_csn = topology.master1.schema.get_schema_csn() + master2_schema_csn = topology.master2.schema.get_schema_csn() + topology.master1.log.debug("\nAfter a full replication session\n") + topology.master1.log.debug("Master1 nsschemaCSN: %s" % master1_schema_csn) + topology.master1.log.debug("Master2 nsschemaCSN: %s" % master2_schema_csn) + assert (master1_schema_csn) + assert (master2_schema_csn) + + +def test_ticket47988_3(topology): + ''' + Resume replication M2->M1 and check replication is still working + ''' + _header(topology, 'test_ticket47988_3') + + _resume_M2_to_M1(topology) + _do_update_entry(supplier=topology.master1, consumer=topology.master2, attempts=5) + _do_update_entry(supplier=topology.master2, consumer=topology.master1, attempts=5) + + +def test_ticket47988_4(topology): + ''' + Check schemaCSN is identical on both server + And save the nsschemaCSN to later check they do not change unexpectedly + ''' + _header(topology, 'test_ticket47988_4') + + master1_schema_csn = topology.master1.schema.get_schema_csn() + master2_schema_csn = topology.master2.schema.get_schema_csn() + topology.master1.log.debug("\n\nMaster1 nsschemaCSN: %s" % master1_schema_csn) + topology.master1.log.debug("\n\nMaster2 nsschemaCSN: %s" % master2_schema_csn) + assert (master1_schema_csn) + assert (master2_schema_csn) + assert (master1_schema_csn == master2_schema_csn) + + topology.master1.saved_schema_csn = master1_schema_csn + topology.master2.saved_schema_csn = master2_schema_csn + + +def test_ticket47988_5(topology): + ''' + Check schemaCSN do not change unexpectedly + ''' + _header(topology, 'test_ticket47988_5') + + _do_update_entry(supplier=topology.master1, consumer=topology.master2, attempts=5) + _do_update_entry(supplier=topology.master2, consumer=topology.master1, attempts=5) + master1_schema_csn = topology.master1.schema.get_schema_csn() + master2_schema_csn = topology.master2.schema.get_schema_csn() + topology.master1.log.debug("\n\nMaster1 nsschemaCSN: %s" % master1_schema_csn) + topology.master1.log.debug("\n\nMaster2 nsschemaCSN: %s" % master2_schema_csn) + assert (master1_schema_csn) + assert (master2_schema_csn) + assert (master1_schema_csn == master2_schema_csn) + + assert (topology.master1.saved_schema_csn == master1_schema_csn) + assert (topology.master2.saved_schema_csn == master2_schema_csn) + + +def test_ticket47988_6(topology): + ''' + Update M1 schema and trigger update M2->M1 + So M2 should learn new/extended definitions that are in M1 schema + ''' + + _header(topology, 'test_ticket47988_6') + + topology.master1.log.debug("\n\nUpdate M1 schema and an entry on M1\n") + master1_schema_csn = topology.master1.schema.get_schema_csn() + master2_schema_csn = topology.master2.schema.get_schema_csn() + topology.master1.log.debug("\nBefore updating the schema on M1\n") + topology.master1.log.debug("Master1 nsschemaCSN: %s" % master1_schema_csn) + topology.master1.log.debug("Master2 nsschemaCSN: %s" % master2_schema_csn) + + # Here M1 should no, should check M2 schema and learn + _do_update_schema(topology.master1, range=5999) + master1_schema_csn = topology.master1.schema.get_schema_csn() + master2_schema_csn = topology.master2.schema.get_schema_csn() + topology.master1.log.debug("\nAfter updating the schema on M1\n") + topology.master1.log.debug("Master1 nsschemaCSN: %s" % master1_schema_csn) + topology.master1.log.debug("Master2 nsschemaCSN: %s" % master2_schema_csn) + assert (master1_schema_csn) + + # to avoid linger effect where a replication session is reused without checking the schema + _pause_M1_to_M2(topology) + _resume_M1_to_M2(topology) + + #topo.master1.log.debug("\n\nSleep.... attach the debugger dse_modify") + #time.sleep(60) + _do_update_entry(supplier=topology.master2, consumer=topology.master1, attempts=15) + master1_schema_csn = topology.master1.schema.get_schema_csn() + master2_schema_csn = topology.master2.schema.get_schema_csn() + topology.master1.log.debug("\nAfter a full replication session\n") + topology.master1.log.debug("Master1 nsschemaCSN: %s" % master1_schema_csn) + topology.master1.log.debug("Master2 nsschemaCSN: %s" % master2_schema_csn) + assert (master1_schema_csn) + assert (master2_schema_csn) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48005_test.py b/dirsrvtests/tests/tickets/ticket48005_test.py new file mode 100644 index 0000000..5cb9507 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48005_test.py @@ -0,0 +1,398 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import time +import ldap +import logging +import pytest +import re +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + #request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket48005_setup(topology): + ''' + allow dump core + generate a test ldif file using dbgen.pl + import the ldif + ''' + log.info("Ticket 48005 setup...") + if hasattr(topology.standalone, 'prefix'): + prefix = topology.standalone.prefix + else: + prefix = None + sysconfig_dirsrv = prefix + ENV_SYSCONFIG_DIR + "/dirsrv" + cmdline = 'egrep "ulimit -c unlimited" %s' % sysconfig_dirsrv + p = os.popen(cmdline, "r") + ulimitc = p.readline() + if ulimitc == "": + log.info('No ulimit -c in %s' % sysconfig_dirsrv) + log.info('Adding it') + cmdline = 'echo "ulimit -c unlimited" >> %s' % sysconfig_dirsrv + + sysconfig_dirsrv_systemd = sysconfig_dirsrv + ".systemd" + cmdline = 'egrep LimitCORE=infinity %s' % sysconfig_dirsrv_systemd + p = os.popen(cmdline, "r") + lcore = p.readline() + if lcore == "": + log.info('No LimitCORE in %s' % sysconfig_dirsrv_systemd) + log.info('Adding it') + cmdline = 'echo LimitCORE=infinity >> %s' % sysconfig_dirsrv_systemd + + topology.standalone.restart(timeout=10) + + ldif_file = topology.standalone.get_ldif_dir() + "/ticket48005.ldif" + os.system('ls %s' % ldif_file) + os.system('rm -f %s' % ldif_file) + if hasattr(topology.standalone, 'prefix'): + prefix = topology.standalone.prefix + else: + prefix = "" + dbgen_prog = prefix + '/bin/dbgen.pl' + log.info('dbgen_prog: %s' % dbgen_prog) + os.system('%s -s %s -o %s -u -n 10000' % (dbgen_prog, SUFFIX, ldif_file)) + cmdline = 'egrep dn: %s | wc -l' % ldif_file + p = os.popen(cmdline, "r") + dnnumstr = p.readline() + num = int(dnnumstr) + log.info("We have %d entries.\n", num) + + importTask = Tasks(topology.standalone) + args = {TASK_WAIT: True} + importTask.importLDIF(SUFFIX, None, ldif_file, args) + log.info('Importing %s complete.' % ldif_file) + + +def test_ticket48005_memberof(topology): + ''' + Enable memberof and referint plugin + Run fixmemberof task without waiting + Shutdown the server + Check if a core file was generated or not + If no core was found, this test case was successful. + ''' + log.info("Ticket 48005 memberof test...") + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.enable(name=PLUGIN_REFER_INTEGRITY) + + topology.standalone.restart(timeout=10) + + try: + # run the fixup task + topology.standalone.tasks.fixupMemberOf(suffix=SUFFIX, args={TASK_WAIT: False}) + except ValueError: + log.error('Some problem occured with a value that was provided') + assert False + + topology.standalone.stop(timeout=10) + + mytmp = '/tmp' + logdir = re.sub('errors', '', topology.standalone.errlog) + cmdline = 'ls ' + logdir + 'core*' + p = os.popen(cmdline, "r") + lcore = p.readline() + if lcore != "": + s.system('mv %score* %s/core.ticket48005_memberof' % (logdir, mytmp)) + log.error('FixMemberof: Moved core file(s) to %s; Test failed' % mytmp) + assert False + log.info('No core files are found') + + topology.standalone.start(timeout=10) + + topology.standalone.plugins.disable(name=PLUGIN_REFER_INTEGRITY) + topology.standalone.plugins.disable(name=PLUGIN_MEMBER_OF) + + topology.standalone.restart(timeout=10) + + log.info("Ticket 48005 memberof test complete") + + +def test_ticket48005_automember(topology): + ''' + Enable automember and referint plugin + 1. Run automember rebuild membership task without waiting + Shutdown the server + Check if a core file was generated or not + If no core was found, this test case was successful. + 2. Run automember export updates task without waiting + Shutdown the server + Check if a core file was generated or not + If no core was found, this test case was successful. + 3. Run automember map updates task without waiting + Shutdown the server + Check if a core file was generated or not + If no core was found, this test case was successful. + ''' + log.info("Ticket 48005 automember test...") + topology.standalone.plugins.enable(name=PLUGIN_AUTOMEMBER) + topology.standalone.plugins.enable(name=PLUGIN_REFER_INTEGRITY) + + # configure automember config entry + log.info('Adding automember config') + try: + topology.standalone.add_s(Entry(('cn=group cfg,cn=Auto Membership Plugin,cn=plugins,cn=config', { + 'objectclass': 'top autoMemberDefinition'.split(), + 'autoMemberScope': 'dc=example,dc=com', + 'autoMemberFilter': 'objectclass=inetorgperson', + 'autoMemberDefaultGroup': 'cn=group0,dc=example,dc=com', + 'autoMemberGroupingAttr': 'uniquemember:dn', + 'cn': 'group cfg'}))) + except ValueError: + log.error('Failed to add automember config') + assert False + + topology.standalone.restart(timeout=10) + + try: + # run the automember rebuild task + topology.standalone.tasks.automemberRebuild(suffix=SUFFIX, args={TASK_WAIT: False}) + except ValueError: + log.error('Automember rebuild task failed.') + assert False + + topology.standalone.stop(timeout=10) + + mytmp = '/tmp' + logdir = re.sub('errors', '', topology.standalone.errlog) + cmdline = 'ls ' + logdir + 'core*' + p = os.popen(cmdline, "r") + lcore = p.readline() + if lcore != "": + s.system('mv %score* %s/core.ticket48005_automember_rebuild' % (logdir, mytmp)) + log.error('Automember_rebuld: Moved core file(s) to %s; Test failed' % mytmp) + assert False + log.info('No core files are found') + + topology.standalone.start(timeout=10) + + ldif_out_file = mytmp + "/ticket48005_automember_exported.ldif" + try: + # run the automember export task + topology.standalone.tasks.automemberExport(suffix=SUFFIX, ldif_out=ldif_out_file, args={TASK_WAIT: False}) + except ValueError: + log.error('Automember Export task failed.') + assert False + + topology.standalone.stop(timeout=10) + + logdir = re.sub('errors', '', topology.standalone.errlog) + cmdline = 'ls ' + logdir + 'core*' + p = os.popen(cmdline, "r") + lcore = p.readline() + if lcore != "": + s.system('mv %score* %s/core.ticket48005_automember_export' % (logdir, mytmp)) + log.error('Automember_export: Moved core file(s) to %s; Test failed' % mytmp) + assert False + log.info('No core files are found') + + topology.standalone.start(timeout=10) + + ldif_in_file = topology.standalone.get_ldif_dir() + "/ticket48005.ldif" + ldif_out_file = mytmp + "/ticket48005_automember_map.ldif" + try: + # run the automember map task + topology.standalone.tasks.automemberMap(ldif_in=ldif_in_file, ldif_out=ldif_out_file, args={TASK_WAIT: False}) + except ValueError: + log.error('Automember Map task failed.') + assert False + + topology.standalone.stop(timeout=10) + + logdir = re.sub('errors', '', topology.standalone.errlog) + cmdline = 'ls ' + logdir + 'core*' + p = os.popen(cmdline, "r") + lcore = p.readline() + if lcore != "": + s.system('mv %score* %s/core.ticket48005_automember_map' % (logdir, mytmp)) + log.error('Automember_map: Moved core file(s) to %s; Test failed' % mytmp) + assert False + log.info('No core files are found') + + topology.standalone.start(timeout=10) + + topology.standalone.plugins.disable(name=PLUGIN_REFER_INTEGRITY) + topology.standalone.plugins.enable(name=PLUGIN_AUTOMEMBER) + + topology.standalone.restart(timeout=10) + + log.info("Ticket 48005 automember test complete") + + +def test_ticket48005_syntaxvalidate(topology): + ''' + Run syntax validate task without waiting + Shutdown the server + Check if a core file was generated or not + If no core was found, this test case was successful. + ''' + log.info("Ticket 48005 syntax validate test...") + + try: + # run the fixup task + topology.standalone.tasks.syntaxValidate(suffix=SUFFIX, args={TASK_WAIT: False}) + except ValueError: + log.error('Some problem occured with a value that was provided') + assert False + + topology.standalone.stop(timeout=10) + + mytmp = '/tmp' + logdir = re.sub('errors', '', topology.standalone.errlog) + cmdline = 'ls ' + logdir + 'core*' + p = os.popen(cmdline, "r") + lcore = p.readline() + if lcore != "": + s.system('mv %score* %s/core.ticket48005_syntaxvalidate' % (logdir, mytmp)) + log.error('SyntaxValidate: Moved core file(s) to %s; Test failed' % mytmp) + assert False + log.info('No core files are found') + + topology.standalone.start(timeout=10) + + log.info("Ticket 48005 syntax validate test complete") + + +def test_ticket48005_usn(topology): + ''' + Enable entryusn + Delete all user entries. + Run USN tombstone cleanup task + Shutdown the server + Check if a core file was generated or not + If no core was found, this test case was successful. + ''' + log.info("Ticket 48005 usn test...") + topology.standalone.plugins.enable(name=PLUGIN_USN) + + topology.standalone.restart(timeout=10) + + try: + entries = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, "(objectclass=inetorgperson)") + if len(entries) == 0: + log.info("No user entries.") + else: + for i in range(len(entries)): + # log.info('Deleting %s' % entries[i].dn) + try: + topology.standalone.delete_s(entries[i].dn) + except ValueError: + log.error('delete_s %s failed.' % entries[i].dn) + assert False + except ValueError: + log.error('search_s failed.') + assert False + + try: + # run the usn tombstone cleanup + topology.standalone.tasks.usnTombstoneCleanup(suffix=SUFFIX, bename="userRoot", args={TASK_WAIT: False}) + except ValueError: + log.error('Some problem occured with a value that was provided') + assert False + + topology.standalone.stop(timeout=10) + + mytmp = '/tmp' + logdir = re.sub('errors', '', topology.standalone.errlog) + cmdline = 'ls ' + logdir + 'core*' + p = os.popen(cmdline, "r") + lcore = p.readline() + if lcore != "": + s.system('mv %score* %s/core.ticket48005_usn' % (logdir, mytmp)) + log.error('usnTombstoneCleanup: Moved core file(s) to %s; Test failed' % mytmp) + assert False + log.info('No core files are found') + + topology.standalone.start(timeout=10) + + topology.standalone.plugins.disable(name=PLUGIN_USN) + + topology.standalone.restart(timeout=10) + + log.info("Ticket 48005 usn test complete") + + +def test_ticket48005_schemareload(topology): + ''' + Run schema reload task without waiting + Shutdown the server + Check if a core file was generated or not + If no core was found, this test case was successful. + ''' + log.info("Ticket 48005 schema reload test...") + + try: + # run the schema reload task + topology.standalone.tasks.schemaReload(args={TASK_WAIT: False}) + except ValueError: + log.error('Schema Reload task failed.') + assert False + + topology.standalone.stop(timeout=10) + + logdir = re.sub('errors', '', topology.standalone.errlog) + cmdline = 'ls ' + logdir + 'core*' + p = os.popen(cmdline, "r") + lcore = p.readline() + if lcore != "": + mytmp = '/tmp' + s.system('mv %score* %s/core.ticket48005_schema_reload' % (logdir, mytmp)) + log.error('Schema reload: Moved core file(s) to %s; Test failed' % mytmp) + assert False + log.info('No core files are found') + + topology.standalone.start(timeout=10) + + log.info("Ticket 48005 schema reload test complete") + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48013_test.py b/dirsrvtests/tests/tickets/ticket48013_test.py new file mode 100644 index 0000000..12bfa32 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48013_test.py @@ -0,0 +1,128 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import time +import ldap +import logging +import pytest +import ldapurl +from ldap.ldapobject import SimpleLDAPObject +from ldap.syncrepl import SyncreplConsumer +from lib389 import DirSrv +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +class SyncObject(SimpleLDAPObject, SyncreplConsumer): + def __init__(self, uri): + # Init the ldap connection + SimpleLDAPObject.__init__(self, uri) + + def sync_search(self, test_cookie): + self.syncrepl_search('dc=example,dc=com', ldap.SCOPE_SUBTREE, + filterstr='(objectclass=*)', mode='refreshOnly', + cookie=test_cookie) + + def poll(self): + self.syncrepl_poll(all=1) + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket48013(topology): + ''' + Content Synchonization: Test that invalid cookies are caught + ''' + + cookies = ('#', '##', 'a#a#a', 'a#a#1') + + # Enable dynamic plugins + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-dynamic-plugins', 'on')]) + except ldap.LDAPError as e: + ldap.error('Failed to enable dynamic plugin!' + e.message['desc']) + assert False + + # Enable retro changelog + topology.standalone.plugins.enable(name=PLUGIN_RETRO_CHANGELOG) + + # Enbale content sync plugin + topology.standalone.plugins.enable(name=PLUGIN_REPL_SYNC) + + # Set everything up + ldap_url = ldapurl.LDAPUrl('ldap://%s:%s' % (HOST_STANDALONE, + PORT_STANDALONE)) + ldap_connection = SyncObject(ldap_url.initializeUrl()) + + # Authenticate + try: + ldap_connection.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + print('Login to LDAP server failed: %s' % e.message['desc']) + assert False + + # Test invalid cookies + for invalid_cookie in cookies: + log.info('Testing cookie: %s' % invalid_cookie) + try: + ldap_connection.sync_search(invalid_cookie) + ldap_connection.poll() + log.fatal('Invalid cookie accepted!') + assert False + except Exception as e: + log.info('Invalid cookie correctly rejected: %s' % e.message['info']) + pass + + # Success + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48026_test.py b/dirsrvtests/tests/tickets/ticket48026_test.py new file mode 100644 index 0000000..730e94b --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48026_test.py @@ -0,0 +1,155 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +USER1_DN = 'uid=user1,' + DEFAULT_SUFFIX +USER2_DN = 'uid=user2,' + DEFAULT_SUFFIX + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket48026(topology): + ''' + Test that multiple attribute uniqueness works correctly. + ''' + # Configure the plugin + inst = topology.standalone + inst.plugins.enable(name=PLUGIN_ATTR_UNIQUENESS) + + try: + # This plugin enable / disable doesn't seem to create the nsslapd-pluginId correctly? + inst.modify_s('cn=' + PLUGIN_ATTR_UNIQUENESS + ',cn=plugins,cn=config', + [(ldap.MOD_REPLACE, 'uniqueness-attribute-name', 'mail'), + (ldap.MOD_ADD, 'uniqueness-attribute-name', + 'mailAlternateAddress'), + ]) + except ldap.LDAPError as e: + log.fatal('test_ticket48026: Failed to configure plugin for "mail": error ' + e.message['desc']) + assert False + + inst.restart(timeout=30) + + # Add an entry + try: + inst.add_s(Entry((USER1_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '1', + 'cn': 'user 1', + 'uid': 'user1', + 'mail': 'user1@example.com', + 'mailAlternateAddress' : 'user1@alt.example.com', + 'userpassword': 'password'}))) + except ldap.LDAPError as e: + log.fatal('test_ticket48026: Failed to add test user' + USER1_DN + ': error ' + e.message['desc']) + assert False + + try: + inst.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mail': 'user1@example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.error('test_ticket48026: Adding of 1st entry(mail v mail) incorrectly succeeded') + assert False + + try: + inst.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mailAlternateAddress': 'user1@alt.example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.error('test_ticket48026: Adding of 2nd entry(mailAlternateAddress v mailAlternateAddress) incorrectly succeeded') + assert False + + try: + inst.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mail': 'user1@alt.example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.error('test_ticket48026: Adding of 3rd entry(mail v mailAlternateAddress) incorrectly succeeded') + assert False + + try: + inst.add_s(Entry((USER2_DN, {'objectclass': "top extensibleObject".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'mailAlternateAddress': 'user1@example.com', + 'userpassword': 'password'}))) + except ldap.CONSTRAINT_VIOLATION: + pass + else: + log.error('test_ticket48026: Adding of 4th entry(mailAlternateAddress v mail) incorrectly succeeded') + assert False + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48109_test.py b/dirsrvtests/tests/tickets/ticket48109_test.py new file mode 100644 index 0000000..1d7a334 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48109_test.py @@ -0,0 +1,387 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +UID_INDEX = 'cn=uid,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config' + + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def test_ticket48109(topology): + ''' + Set SubStr lengths to cn=uid,cn=index,... + objectClass: extensibleObject + nsIndexType: sub + nsSubStrBegin: 2 + nsSubStrEnd: 2 + ''' + log.info('Test case 0') + # add substr setting to UID_INDEX + try: + topology.standalone.modify_s(UID_INDEX, + [(ldap.MOD_ADD, 'objectClass', 'extensibleObject'), + (ldap.MOD_ADD, 'nsIndexType', 'sub'), + (ldap.MOD_ADD, 'nsSubStrBegin', '2'), + (ldap.MOD_ADD, 'nsSubStrEnd', '2')]) + except ldap.LDAPError as e: + log.error('Failed to add substr lengths: error ' + e.message['desc']) + assert False + + # restart the server to apply the indexing + topology.standalone.restart(timeout=10) + + # add a test user + UID = 'auser0' + USER_DN = 'uid=%s,%s' % (UID, SUFFIX) + try: + topology.standalone.add_s(Entry((USER_DN, { + 'objectclass': 'top person organizationalPerson inetOrgPerson'.split(), + 'cn': 'a user0', + 'sn': 'user0', + 'givenname': 'a', + 'mail': UID}))) + except ldap.LDAPError as e: + log.error('Failed to add ' + USER_DN + ': error ' + e.message['desc']) + assert False + + entries = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, '(uid=a*)') + assert len(entries) == 1 + + # restart the server to check the access log + topology.standalone.restart(timeout=10) + + cmdline = 'egrep %s %s | egrep "uid=a\*"' % (SUFFIX, topology.standalone.accesslog) + p = os.popen(cmdline, "r") + l0 = p.readline() + if l0 == "": + log.error('Search with "(uid=a*)" is not logged in ' + topology.standalone.accesslog) + assert False + else: + #regex = re.compile('\(conn=[0-9]* op=[0-9]*\) SRCH .*') + regex = re.compile(r'.*\s+(conn=\d+ op=\d+)\s+SRCH .*') + match = regex.match(l0) + log.info('match: %s' % match.group(1)) + cmdline = 'egrep "%s" %s | egrep "RESULT"' % (match.group(1), topology.standalone.accesslog) + p = os.popen(cmdline, "r") + l1 = p.readline() + if l1 == "": + log.error('Search result of "(uid=a*)" is not logged in ' + topology.standalone.accesslog) + assert False + else: + log.info('l1: %s' % l1) + regex = re.compile(r'.*nentries=(\d+)\s+.*') + match = regex.match(l1) + log.info('match: nentires=%s' % match.group(1)) + if match.group(1) == "0": + log.error('Entry uid=a* not found.') + assert False + else: + log.info('Entry uid=a* found.') + regex = re.compile(r'.*(notes=[AU]).*') + match = regex.match(l1) + if match: + log.error('%s - substr index was not used' % match.group(1)) + assert False + else: + log.info('Test case 0 - OK - substr index used') + + # clean up substr setting to UID_INDEX + try: + topology.standalone.modify_s(UID_INDEX, + [(ldap.MOD_DELETE, 'objectClass', 'extensibleObject'), + (ldap.MOD_DELETE, 'nsIndexType', 'sub'), + (ldap.MOD_DELETE, 'nsSubStrBegin', '2'), + (ldap.MOD_DELETE, 'nsSubStrEnd', '2')]) + except ldap.LDAPError as e: + log.error('Failed to delete substr lengths: error ' + e.message['desc']) + assert False + + ''' + Set SubStr lengths to cn=uid,cn=index,... + nsIndexType: sub + nsMatchingRule: nsSubStrBegin=2 + nsMatchingRule: nsSubStrEnd=2 + ''' + log.info('Test case 1') + # add substr setting to UID_INDEX + try: + topology.standalone.modify_s(UID_INDEX, + [(ldap.MOD_ADD, 'nsIndexType', 'sub'), + (ldap.MOD_ADD, 'nsMatchingRule', 'nssubstrbegin=2'), + (ldap.MOD_ADD, 'nsMatchingRule', 'nssubstrend=2')]) + except ldap.LDAPError as e: + log.error('Failed to add substr lengths: error ' + e.message['desc']) + assert False + + # restart the server to apply the indexing + topology.standalone.restart(timeout=10) + + # add a test user + UID = 'buser1' + USER_DN = 'uid=%s,%s' % (UID, SUFFIX) + try: + topology.standalone.add_s(Entry((USER_DN, { + 'objectclass': 'top person organizationalPerson inetOrgPerson'.split(), + 'cn': 'b user1', + 'sn': 'user1', + 'givenname': 'b', + 'mail': UID}))) + except ldap.LDAPError as e: + log.error('Failed to add ' + USER_DN + ': error ' + e.message['desc']) + assert False + + entries = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, '(uid=b*)') + assert len(entries) == 1 + + # restart the server to check the access log + topology.standalone.restart(timeout=10) + + cmdline = 'egrep %s %s | egrep "uid=b\*"' % (SUFFIX, topology.standalone.accesslog) + p = os.popen(cmdline, "r") + l0 = p.readline() + if l0 == "": + log.error('Search with "(uid=b*)" is not logged in ' + topology.standalone.accesslog) + assert False + else: + #regex = re.compile('\(conn=[0-9]* op=[0-9]*\) SRCH .*') + regex = re.compile(r'.*\s+(conn=\d+ op=\d+)\s+SRCH .*') + match = regex.match(l0) + log.info('match: %s' % match.group(1)) + cmdline = 'egrep "%s" %s | egrep "RESULT"' % (match.group(1), topology.standalone.accesslog) + p = os.popen(cmdline, "r") + l1 = p.readline() + if l1 == "": + log.error('Search result of "(uid=*b)" is not logged in ' + topology.standalone.accesslog) + assert False + else: + log.info('l1: %s' % l1) + regex = re.compile(r'.*nentries=(\d+)\s+.*') + match = regex.match(l1) + log.info('match: nentires=%s' % match.group(1)) + if match.group(1) == "0": + log.error('Entry uid=*b not found.') + assert False + else: + log.info('Entry uid=*b found.') + regex = re.compile(r'.*(notes=[AU]).*') + match = regex.match(l1) + if match: + log.error('%s - substr index was not used' % match.group(1)) + assert False + else: + log.info('Test case 1 - OK - substr index used') + + # clean up substr setting to UID_INDEX + try: + topology.standalone.modify_s(UID_INDEX, + [(ldap.MOD_DELETE, 'nsIndexType', 'sub'), + (ldap.MOD_DELETE, 'nsMatchingRule', 'nssubstrbegin=2'), + (ldap.MOD_DELETE, 'nsMatchingRule', 'nssubstrend=2')]) + except ldap.LDAPError as e: + log.error('Failed to delete substr lengths: error ' + e.message['desc']) + assert False + + ''' + Set SubStr conflict formats/lengths to cn=uid,cn=index,... + objectClass: extensibleObject + nsIndexType: sub + nsMatchingRule: nsSubStrBegin=3 + nsMatchingRule: nsSubStrEnd=3 + nsSubStrBegin: 2 + nsSubStrEnd: 2 + nsSubStr{Begin,End} are honored. + ''' + log.info('Test case 2') + + # add substr setting to UID_INDEX + try: + topology.standalone.modify_s(UID_INDEX, + [(ldap.MOD_ADD, 'nsIndexType', 'sub'), + (ldap.MOD_ADD, 'nsMatchingRule', 'nssubstrbegin=3'), + (ldap.MOD_ADD, 'nsMatchingRule', 'nssubstrend=3'), + (ldap.MOD_ADD, 'objectClass', 'extensibleObject'), + (ldap.MOD_ADD, 'nsSubStrBegin', '2'), + (ldap.MOD_ADD, 'nsSubStrEnd', '2')]) + except ldap.LDAPError as e: + log.error('Failed to add substr lengths: error ' + e.message['desc']) + assert False + + # restart the server to apply the indexing + topology.standalone.restart(timeout=10) + + # add a test user + UID = 'cuser2' + USER_DN = 'uid=%s,%s' % (UID, SUFFIX) + try: + topology.standalone.add_s(Entry((USER_DN, { + 'objectclass': 'top person organizationalPerson inetOrgPerson'.split(), + 'cn': 'c user2', + 'sn': 'user2', + 'givenname': 'c', + 'mail': UID}))) + except ldap.LDAPError as e: + log.error('Failed to add ' + USER_DN + ': error ' + e.message['desc']) + assert False + + entries = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, '(uid=c*)') + assert len(entries) == 1 + + entries = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*2)') + assert len(entries) == 1 + + # restart the server to check the access log + topology.standalone.restart(timeout=10) + + cmdline = 'egrep %s %s | egrep "uid=c\*"' % (SUFFIX, topology.standalone.accesslog) + p = os.popen(cmdline, "r") + l0 = p.readline() + if l0 == "": + log.error('Search with "(uid=c*)" is not logged in ' + topology.standalone.accesslog) + assert False + else: + #regex = re.compile('\(conn=[0-9]* op=[0-9]*\) SRCH .*') + regex = re.compile(r'.*\s+(conn=\d+ op=\d+)\s+SRCH .*') + match = regex.match(l0) + log.info('match: %s' % match.group(1)) + cmdline = 'egrep "%s" %s | egrep "RESULT"' % (match.group(1), topology.standalone.accesslog) + p = os.popen(cmdline, "r") + l1 = p.readline() + if l1 == "": + log.error('Search result of "(uid=c*)" is not logged in ' + topology.standalone.accesslog) + assert False + else: + log.info('l1: %s' % l1) + regex = re.compile(r'.*nentries=(\d+)\s+.*') + match = regex.match(l1) + log.info('match: nentires=%s' % match.group(1)) + if match.group(1) == "0": + log.error('Entry uid=c* not found.') + assert False + else: + log.info('Entry uid=c* found.') + regex = re.compile(r'.*(notes=[AU]).*') + match = regex.match(l1) + if match: + log.error('%s - substr index was not used' % match.group(1)) + assert False + else: + log.info('Test case 2-1 - OK - correct substr index used') + + cmdline = 'egrep %s %s | egrep "uid=\*2"' % (SUFFIX, topology.standalone.accesslog) + p = os.popen(cmdline, "r") + l0 = p.readline() + if l0 == "": + log.error('Search with "(uid=*2)" is not logged in ' + topology.standalone.accesslog) + assert False + else: + #regex = re.compile('\(conn=[0-9]* op=[0-9]*\) SRCH .*') + regex = re.compile(r'.*\s+(conn=\d+ op=\d+)\s+SRCH .*') + match = regex.match(l0) + log.info('match: %s' % match.group(1)) + cmdline = 'egrep "%s" %s | egrep "RESULT"' % (match.group(1), topology.standalone.accesslog) + p = os.popen(cmdline, "r") + l1 = p.readline() + if l1 == "": + log.error('Search result of "(uid=*2)" is not logged in ' + topology.standalone.accesslog) + assert False + else: + log.info('l1: %s' % l1) + regex = re.compile(r'.*nentries=(\d+)\s+.*') + match = regex.match(l1) + log.info('match: nentires=%s' % match.group(1)) + if match.group(1) == "0": + log.error('Entry uid=*2 not found.') + assert False + else: + log.info('Entry uid=*2 found.') + regex = re.compile(r'.*(notes=[AU]).*') + match = regex.match(l1) + if match: + log.error('%s - substr index was not used' % match.group(1)) + assert False + else: + log.info('Test case 2-2 - OK - correct substr index used') + + # clean up substr setting to UID_INDEX + try: + topology.standalone.modify_s(UID_INDEX, + [(ldap.MOD_DELETE, 'nsIndexType', 'sub'), + (ldap.MOD_DELETE, 'nsMatchingRule', 'nssubstrbegin=3'), + (ldap.MOD_DELETE, 'nsMatchingRule', 'nssubstrend=3'), + (ldap.MOD_DELETE, 'objectClass', 'extensibleObject'), + (ldap.MOD_DELETE, 'nsSubStrBegin', '2'), + (ldap.MOD_DELETE, 'nsSubStrEnd', '2')]) + except ldap.LDAPError as e: + log.error('Failed to delete substr lengths: error ' + e.message['desc']) + assert False + log.info('Testcase PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48170_test.py b/dirsrvtests/tests/tickets/ticket48170_test.py new file mode 100644 index 0000000..3ffa964 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48170_test.py @@ -0,0 +1,85 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket48170(topology): + ''' + Attempt to add a nsIndexType wikth an invalid value: "eq,pres" + ''' + + INDEX_DN = 'cn=cn,cn=index,cn=userroot,cn=ldbm database,cn=plugins,cn=config' + REJECTED = False + try: + topology.standalone.modify_s(INDEX_DN, [(ldap.MOD_ADD, 'nsINdexType', 'eq,pres')]) + except ldap.UNWILLING_TO_PERFORM: + log.info('Index update correctly rejected') + REJECTED = True + + if not REJECTED: + log.fatal('Invalid nsIndexType value was incorrectly accepted.') + assert False + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48194_test.py b/dirsrvtests/tests/tickets/ticket48194_test.py new file mode 100644 index 0000000..92f4371 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48194_test.py @@ -0,0 +1,495 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import subprocess +import time +import ldap +import logging +import pytest +import shutil +from lib389 import DirSrv, Entry, tools +from lib389 import DirSrvTools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +CONFIG_DN = 'cn=config' +ENCRYPTION_DN = 'cn=encryption,%s' % CONFIG_DN +RSA = 'RSA' +RSA_DN = 'cn=%s,%s' % (RSA, ENCRYPTION_DN) +LDAPSPORT = str(DEFAULT_SECURE_PORT) +SERVERCERT = 'Server-Cert' +plus_all_ecount = 0 +plus_all_dcount = 0 +plus_all_ecount_noweak = 0 +plus_all_dcount_noweak = 0 + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def _header(topology, label): + topology.standalone.log.info("\n\n###############################################") + topology.standalone.log.info("####### %s" % label) + topology.standalone.log.info("###############################################") + + +def test_init(topology): + """ + Generate self signed cert and import it to the DS cert db. + Enable SSL + """ + _header(topology, 'Testing Ticket 48194 - harden the list of ciphers available by default') + + conf_dir = topology.standalone.confdir + + log.info("\n######################### Checking existing certs ######################\n") + os.system('certutil -L -d %s -n "CA certificate"' % conf_dir) + os.system('certutil -L -d %s -n "%s"' % (conf_dir, SERVERCERT)) + + log.info("\n######################### Create a password file ######################\n") + pwdfile = '%s/pwdfile.txt' % (conf_dir) + opasswd = os.popen("(ps -ef ; w ) | sha1sum | awk '{print $1}'", "r") + passwd = opasswd.readline() + pwdfd = open(pwdfile, "w") + pwdfd.write(passwd) + pwdfd.close() + + log.info("\n######################### Create a noise file ######################\n") + noisefile = '%s/noise.txt' % (conf_dir) + noise = os.popen("(w ; ps -ef ; date ) | sha1sum | awk '{print $1}'", "r") + noisewdfd = open(noisefile, "w") + noisewdfd.write(noise.readline()) + noisewdfd.close() + time.sleep(1) + + log.info("\n######################### Create key3.db and cert8.db database ######################\n") + os.system("ls %s" % pwdfile) + os.system("cat %s" % pwdfile) + os.system('certutil -N -d %s -f %s' % (conf_dir, pwdfile)) + + log.info("\n######################### Creating encryption key for CA ######################\n") + os.system('certutil -G -d %s -z %s -f %s' % (conf_dir, noisefile, pwdfile)) + + log.info("\n######################### Creating self-signed CA certificate ######################\n") + os.system('( echo y ; echo ; echo y ) | certutil -S -n "CA certificate" -s "cn=CAcert" -x -t "CT,," -m 1000 -v 120 -d %s -z %s -f %s -2' % + (conf_dir, noisefile, pwdfile)) + + log.info("\n######################### Exporting the CA certificate to cacert.asc ######################\n") + cafile = '%s/cacert.asc' % conf_dir + catxt = os.popen('certutil -L -d %s -n "CA certificate" -a' % conf_dir) + cafd = open(cafile, "w") + while True: + line = catxt.readline() + if (line == ''): + break + cafd.write(line) + cafd.close() + + log.info("\n######################### Generate the server certificate ######################\n") + ohostname = os.popen('hostname --fqdn', "r") + myhostname = ohostname.readline() + os.system('certutil -S -n "%s" -s "cn=%s,ou=389 Directory Server" -c "CA certificate" -t "u,u,u" -m 1001 -v 120 -d %s -z %s -f %s' % + (SERVERCERT, myhostname.rstrip(), conf_dir, noisefile, pwdfile)) + + log.info("\n######################### create the pin file ######################\n") + pinfile = '%s/pin.txt' % (conf_dir) + pintxt = 'Internal (Software) Token:%s' % passwd + pinfd = open(pinfile, "w") + pinfd.write(pintxt) + pinfd.close() + time.sleep(1) + + log.info("\n######################### enable SSL in the directory server with all ciphers ######################\n") + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3', 'off'), + (ldap.MOD_REPLACE, 'nsTLS1', 'on'), + (ldap.MOD_REPLACE, 'nsSSLClientAuth', 'allowed'), + (ldap.MOD_REPLACE, 'allowWeakCipher', 'on'), + (ldap.MOD_REPLACE, 'nsSSL3Ciphers', '+all')]) + + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-security', 'on'), + (ldap.MOD_REPLACE, 'nsslapd-ssl-check-hostname', 'off'), + (ldap.MOD_REPLACE, 'nsslapd-secureport', LDAPSPORT)]) + + topology.standalone.add_s(Entry((RSA_DN, {'objectclass': "top nsEncryptionModule".split(), + 'cn': RSA, + 'nsSSLPersonalitySSL': SERVERCERT, + 'nsSSLToken': 'internal (software)', + 'nsSSLActivation': 'on'}))) + + +def connectWithOpenssl(topology, cipher, expect): + """ + Connect with the given cipher + Condition: + If expect is True, the handshake should be successful. + If expect is False, the handshake should be refused with + access log: "Cannot communicate securely with peer: + no common encryption algorithm(s)." + """ + log.info("Testing %s -- expect to handshake %s", cipher,"successfully" if expect else "failed") + + myurl = 'localhost:%s' % LDAPSPORT + cmdline = ['/usr/bin/openssl', 's_client', '-connect', myurl, '-cipher', cipher] + + strcmdline = '/usr/bin/openssl s_client -connect localhost:%s -cipher %s' % (LDAPSPORT, cipher) + log.info("Running cmdline: %s", strcmdline) + + try: + proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT) + except ValueError: + log.info("%s failed: %s", cmdline, ValueError) + proc.kill() + + while True: + l = proc.stdout.readline() + if l == "": + break + if 'Cipher is' in l: + log.info("Found: %s", l) + if expect: + if '(NONE)' in l: + assert False + else: + proc.stdin.close() + assert True + else: + if '(NONE)' in l: + assert True + else: + proc.stdin.close() + assert False + + +def test_run_0(topology): + """ + Check nsSSL3Ciphers: +all + All ciphers are enabled except null. + Note: allowWeakCipher: on + """ + _header(topology, 'Test Case 1 - Check the ciphers availability for "+all"; allowWeakCipher: on') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '64')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.restart(timeout=120) + + connectWithOpenssl(topology, 'RC4-SHA', True) + connectWithOpenssl(topology, 'AES256-SHA256', True) + + +def test_run_1(topology): + """ + Check nsSSL3Ciphers: +all + All ciphers are enabled except null. + Note: default allowWeakCipher (i.e., off) for +all + """ + _header(topology, 'Test Case 2 - Check the ciphers availability for "+all" with default allowWeakCiphers') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '64')]) + # Make sure allowWeakCipher is not set. + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_DELETE, 'allowWeakCipher', None)]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.48194_0' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(2) + topology.standalone.start(timeout=120) + + connectWithOpenssl(topology, 'RC4-SHA', False) + connectWithOpenssl(topology, 'AES256-SHA256', True) + + +def test_run_2(topology): + """ + Check nsSSL3Ciphers: +rsa_aes_128_sha,+rsa_aes_256_sha + rsa_aes_128_sha, tls_rsa_aes_128_sha, rsa_aes_256_sha, tls_rsa_aes_256_sha are enabled. + default allowWeakCipher + """ + _header(topology, 'Test Case 3 - Check the ciphers availability for "+rsa_aes_128_sha,+rsa_aes_256_sha" with default allowWeakCipher') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', '+rsa_aes_128_sha,+rsa_aes_256_sha')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.48194_1' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(2) + topology.standalone.start(timeout=120) + + connectWithOpenssl(topology, 'RC4-SHA', False) + connectWithOpenssl(topology, 'AES256-SHA256', False) + connectWithOpenssl(topology, 'AES128-SHA', True) + connectWithOpenssl(topology, 'AES256-SHA', True) + + +def test_run_3(topology): + """ + Check nsSSL3Ciphers: -all + All ciphers are disabled. + default allowWeakCipher + """ + _header(topology, 'Test Case 4 - Check the ciphers availability for "-all"') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', '-all')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.48194_2' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + connectWithOpenssl(topology, 'RC4-SHA', False) + connectWithOpenssl(topology, 'AES256-SHA256', False) + + +def test_run_4(topology): + """ + Check no nsSSL3Ciphers + Default ciphers are enabled. + default allowWeakCipher + """ + _header(topology, 'Test Case 5 - Check no nsSSL3Ciphers (-all) with default allowWeakCipher') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_DELETE, 'nsSSL3Ciphers', '-all')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.48194_3' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(2) + topology.standalone.start(timeout=120) + + connectWithOpenssl(topology, 'RC4-SHA', False) + connectWithOpenssl(topology, 'AES256-SHA256', True) + + +def test_run_5(topology): + """ + Check nsSSL3Ciphers: default + Default ciphers are enabled. + default allowWeakCipher + """ + _header(topology, 'Test Case 6 - Check default nsSSL3Ciphers (default setting) with default allowWeakCipher') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', 'default')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.48194_4' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(2) + topology.standalone.start(timeout=120) + + connectWithOpenssl(topology, 'RC4-SHA', False) + connectWithOpenssl(topology, 'AES256-SHA256', True) + + +def test_run_6(topology): + """ + Check nsSSL3Ciphers: +all,-TLS_RSA_WITH_AES_256_CBC_SHA256 + All ciphers are disabled. + default allowWeakCipher + """ + _header(topology, 'Test Case 7 - Check nsSSL3Ciphers: +all,-TLS_RSA_WITH_AES_256_CBC_SHA256 with default allowWeakCipher') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', '+all,-TLS_RSA_WITH_AES_256_CBC_SHA256')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.48194_5' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(2) + topology.standalone.start(timeout=120) + + connectWithOpenssl(topology, 'RC4-SHA', False) + connectWithOpenssl(topology, 'AES256-SHA256', False) + connectWithOpenssl(topology, 'AES128-SHA', True) + + +def test_run_7(topology): + """ + Check nsSSL3Ciphers: -all,+rsa_rc4_128_md5 + All ciphers are disabled. + default allowWeakCipher + """ + _header(topology, 'Test Case 8 - Check nsSSL3Ciphers: -all,+rsa_rc4_128_md5 with default allowWeakCipher') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', '-all,+rsa_rc4_128_md5')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.48194_6' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(2) + topology.standalone.start(timeout=120) + + connectWithOpenssl(topology, 'RC4-SHA', False) + connectWithOpenssl(topology, 'AES256-SHA256', False) + connectWithOpenssl(topology, 'RC4-MD5', True) + + +def test_run_8(topology): + """ + Check nsSSL3Ciphers: default + allowWeakCipher: off + Strong Default ciphers are enabled. + """ + _header(topology, 'Test Case 9 - Check default nsSSL3Ciphers (default setting + allowWeakCipher: off)') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', 'default'), + (ldap.MOD_REPLACE, 'allowWeakCipher', 'off')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.48194_7' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(2) + topology.standalone.start(timeout=120) + + connectWithOpenssl(topology, 'RC4-SHA', False) + connectWithOpenssl(topology, 'AES256-SHA256', True) + + +def test_run_9(topology): + """ + Check no nsSSL3Ciphers + Default ciphers are enabled. + allowWeakCipher: on + nsslapd-errorlog-level: 0 + """ + _header(topology, 'Test Case 10 - Check no nsSSL3Ciphers (default setting) with no errorlog-level & allowWeakCipher on') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', None), + (ldap.MOD_REPLACE, 'allowWeakCipher', 'on')]) + topology.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', None)]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.48194_8' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(2) + topology.standalone.start(timeout=120) + + connectWithOpenssl(topology, 'RC4-SHA', True) + connectWithOpenssl(topology, 'AES256-SHA256', True) + + +def test_run_10(topology): + """ + Check nsSSL3Ciphers: -TLS_RSA_WITH_NULL_MD5,+TLS_RSA_WITH_RC4_128_MD5, + +TLS_RSA_EXPORT_WITH_RC4_40_MD5,+TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5, + +TLS_DHE_RSA_WITH_DES_CBC_SHA,+SSL_RSA_FIPS_WITH_DES_CBC_SHA, + +TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,+SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA, + +TLS_RSA_EXPORT1024_WITH_RC4_56_SHA,+TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA, + -SSL_CK_RC4_128_WITH_MD5,-SSL_CK_RC4_128_EXPORT40_WITH_MD5, + -SSL_CK_RC2_128_CBC_WITH_MD5,-SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5, + -SSL_CK_DES_64_CBC_WITH_MD5,-SSL_CK_DES_192_EDE3_CBC_WITH_MD5 + allowWeakCipher: on + nsslapd-errorlog-level: 0 + """ + _header(topology, 'Test Case 11 - Check nsSSL3Ciphers: long list using the NSS Cipher Suite name with allowWeakCipher on') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', + '-TLS_RSA_WITH_NULL_MD5,+TLS_RSA_WITH_RC4_128_MD5,+TLS_RSA_EXPORT_WITH_RC4_40_MD5,+TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5,+TLS_DHE_RSA_WITH_DES_CBC_SHA,+SSL_RSA_FIPS_WITH_DES_CBC_SHA,+TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,+SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA,+TLS_RSA_EXPORT1024_WITH_RC4_56_SHA,+TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA,-SSL_CK_RC4_128_WITH_MD5,-SSL_CK_RC4_128_EXPORT40_WITH_MD5,-SSL_CK_RC2_128_CBC_WITH_MD5,-SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5,-SSL_CK_DES_64_CBC_WITH_MD5,-SSL_CK_DES_192_EDE3_CBC_WITH_MD5')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.48194_9' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + connectWithOpenssl(topology, 'RC4-SHA', False) + connectWithOpenssl(topology, 'RC4-MD5', True) + connectWithOpenssl(topology, 'AES256-SHA256', False) + + +def test_run_11(topology): + """ + Check nsSSL3Ciphers: +fortezza + SSL_GetImplementedCiphers does not return this as a secuire cipher suite + """ + _header(topology, 'Test Case 12 - Check nsSSL3Ciphers: +fortezza, which is not supported') + + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + topology.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', '+fortezza')]) + + log.info("\n######################### Restarting the server ######################\n") + topology.standalone.stop(timeout=10) + os.system('mv %s %s.48194_10' % (topology.standalone.errlog, topology.standalone.errlog)) + os.system('touch %s' % (topology.standalone.errlog)) + time.sleep(1) + topology.standalone.start(timeout=120) + + connectWithOpenssl(topology, 'RC4-SHA', False) + connectWithOpenssl(topology, 'AES256-SHA256', False) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48212_test.py b/dirsrvtests/tests/tickets/ticket48212_test.py new file mode 100644 index 0000000..66ce669 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48212_test.py @@ -0,0 +1,179 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +from ldap.controls import SimplePagedResultsControl + +log = logging.getLogger(__name__) + +installation1_prefix = None + +MYSUFFIX = 'dc=example,dc=com' +MYSUFFIXBE = 'userRoot' +_MYLDIF = 'example1k_posix.ldif' +UIDNUMBERDN = "cn=uidnumber,cn=index,cn=userroot,cn=ldbm database,cn=plugins,cn=config" + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + +def runDbVerify(topology): + topology.standalone.log.info("\n\n +++++ dbverify +++++\n") + sbin_dir = get_sbin_dir(prefix=topology.standalone.prefix) + dbverifyCMD = sbin_dir + "/dbverify -Z " + topology.standalone.inst + " -V" + dbverifyOUT = os.popen(dbverifyCMD, "r") + topology.standalone.log.info("Running %s" % dbverifyCMD) + running = True + error = False + while running: + l = dbverifyOUT.readline() + if l == "": + running = False + elif "libdb:" in l: + running = False + error = True + topology.standalone.log.info("%s" % l) + elif "verify failed" in l: + error = True + running = False + topology.standalone.log.info("%s" % l) + + if error: + topology.standalone.log.fatal("dbverify failed") + assert False + else: + topology.standalone.log.info("dbverify passed") + +def reindexUidNumber(topology): + topology.standalone.log.info("\n\n +++++ reindex uidnumber +++++\n") + sbin_dir = get_sbin_dir(prefix=topology.standalone.prefix) + indexCMD = sbin_dir + "/db2index.pl -Z " + topology.standalone.inst + " -D \"" + DN_DM + "\" -w \"" + PASSWORD + "\" -n " + MYSUFFIXBE + " -t uidnumber" + + indexOUT = os.popen(indexCMD, "r") + topology.standalone.log.info("Running %s" % indexCMD) + + time.sleep(30) + + tailCMD = "tail -n 3 " + topology.standalone.errlog + tailOUT = os.popen(tailCMD, "r") + assert 'Finished indexing' in tailOUT.read() + + +def test_ticket48212(topology): + """ + Import posixAccount entries. + Index uidNumber + add nsMatchingRule: integerOrderingMatch + run dbverify to see if it reports the db corruption or not + delete nsMatchingRule: integerOrderingMatch + run dbverify to see if it reports the db corruption or not + if no corruption is reported, the bug fix was verified. + """ + log.info('Testing Ticket 48212 - Dynamic nsMatchingRule changes had no effect on the attrinfo thus following reindexing, as well.') + + # bind as directory manager + topology.standalone.log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + + data_dir_path = topology.standalone.getDir(__file__, DATA_DIR) + ldif_file = data_dir_path + "ticket48212/" + _MYLDIF + try: + ldif_dir = topology.standalone.get_ldif_dir() + shutil.copy(ldif_file, ldif_dir) + ldif_file = ldif_dir + '/' + _MYLDIF + except: + log.fatal('Failed to copy ldif to instance ldif dir') + assert False + + topology.standalone.log.info("\n\n######################### Import Test data (%s) ######################\n" % ldif_file) + args = {TASK_WAIT: True} + importTask = Tasks(topology.standalone) + importTask.importLDIF(MYSUFFIX, MYSUFFIXBE, ldif_file, args) + args = {TASK_WAIT: True} + + runDbVerify(topology) + + topology.standalone.log.info("\n\n######################### Add index by uidnumber ######################\n") + try: + topology.standalone.add_s(Entry((UIDNUMBERDN, {'objectclass': "top nsIndex".split(), + 'cn': 'uidnumber', + 'nsSystemIndex': 'false', + 'nsIndexType': "pres eq".split()}))) + except ValueError: + topology.standalone.log.fatal("add_s failed: %s", ValueError) + + topology.standalone.log.info("\n\n######################### reindexing... ######################\n") + reindexUidNumber(topology) + + runDbVerify(topology) + + topology.standalone.log.info("\n\n######################### Add nsMatchingRule ######################\n") + try: + topology.standalone.modify_s(UIDNUMBERDN, [(ldap.MOD_ADD, 'nsMatchingRule', 'integerOrderingMatch')]) + except ValueError: + topology.standalone.log.fatal("modify_s failed: %s", ValueError) + + topology.standalone.log.info("\n\n######################### reindexing... ######################\n") + reindexUidNumber(topology) + + runDbVerify(topology) + + topology.standalone.log.info("\n\n######################### Delete nsMatchingRule ######################\n") + try: + topology.standalone.modify_s(UIDNUMBERDN, [(ldap.MOD_DELETE, 'nsMatchingRule', 'integerOrderingMatch')]) + except ValueError: + topology.standalone.log.fatal("modify_s failed: %s", ValueError) + + reindexUidNumber(topology) + + runDbVerify(topology) + + log.info('Testcase PASSED') + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket48214_test.py b/dirsrvtests/tests/tickets/ticket48214_test.py new file mode 100644 index 0000000..7fc4bab --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48214_test.py @@ -0,0 +1,154 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from ldap.controls import SimplePagedResultsControl + +log = logging.getLogger(__name__) + +installation_prefix = None + +MYSUFFIX = 'dc=example,dc=com' +MYSUFFIXBE = 'userRoot' + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def getMaxBerSizeFromDseLdif(topology): + topology.standalone.log.info(" +++++ Get maxbersize from dse.ldif +++++\n") + dse_ldif = topology.standalone.confdir + '/dse.ldif' + grepMaxBerCMD = "egrep nsslapd-maxbersize " + dse_ldif + topology.standalone.log.info(" Run CMD: %s\n" % grepMaxBerCMD) + grepMaxBerOUT = os.popen(grepMaxBerCMD, "r") + running = True + maxbersize = -1 + while running: + l = grepMaxBerOUT.readline() + if l == "": + topology.standalone.log.info(" Empty: %s\n" % l) + running = False + elif "nsslapd-maxbersize:" in l.lower(): + running = False + fields = l.split() + if len(fields) >= 2: + maxbersize = fields[1] + topology.standalone.log.info(" Right format - %s %s\n" % (fields[0], fields[1])) + else: + topology.standalone.log.info(" Wrong format - %s\n" % l) + else: + topology.standalone.log.info(" Else?: %s\n" % l) + return maxbersize + +def checkMaxBerSize(topology): + topology.standalone.log.info(" +++++ Check Max Ber Size +++++\n") + maxbersizestr = getMaxBerSizeFromDseLdif(topology) + maxbersize = int(maxbersizestr) + isdefault = True + defaultvalue = 2097152 + if maxbersize < 0: + topology.standalone.log.info(" No nsslapd-maxbersize found in dse.ldif\n") + elif maxbersize == 0: + topology.standalone.log.info(" nsslapd-maxbersize: %d\n" % maxbersize) + else: + isdefault = False + topology.standalone.log.info(" nsslapd-maxbersize: %d\n" % maxbersize) + + try: + entry = topology.standalone.search_s('cn=config', ldap.SCOPE_BASE, + "(cn=*)", + ['nsslapd-maxbersize']) + if entry: + searchedsize = entry[0].getValue('nsslapd-maxbersize') + topology.standalone.log.info(" ldapsearch returned nsslapd-maxbersize: %s\n" % searchedsize) + else: + topology.standalone.log.fatal('ERROR: cn=config is not found?') + assert False + except ldap.LDAPError as e: + topology.standalone.log.error('ERROR: Failed to search for user entry: ' + e.message['desc']) + assert False + + if isdefault: + topology.standalone.log.info(" Checking %d vs %d\n" % (int(searchedsize), defaultvalue)) + assert int(searchedsize) == defaultvalue + + +def test_ticket48214_run(topology): + """ + Check ldapsearch returns the correct maxbersize when it is not explicitly set. + """ + log.info('Testing Ticket 48214 - ldapsearch on nsslapd-maxbersize returns 0 instead of current value') + + # bind as directory manager + topology.standalone.log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + topology.standalone.log.info("\n\n######################### Out of Box ######################\n") + checkMaxBerSize(topology) + + topology.standalone.log.info("\n\n######################### Add nsslapd-maxbersize: 0 ######################\n") + topology.standalone.modify_s('cn=config', [(ldap.MOD_REPLACE, 'nsslapd-maxbersize', '0')]) + checkMaxBerSize(topology) + + topology.standalone.log.info("\n\n######################### Add nsslapd-maxbersize: 10000 ######################\n") + topology.standalone.modify_s('cn=config', [(ldap.MOD_REPLACE, 'nsslapd-maxbersize', '10000')]) + checkMaxBerSize(topology) + + topology.standalone.log.info("ticket48214 was successfully verified.") + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48226_test.py b/dirsrvtests/tests/tickets/ticket48226_test.py new file mode 100644 index 0000000..939121b --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48226_test.py @@ -0,0 +1,244 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyReplication(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + os.environ['USE_VALGRIND'] = '1' + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating master 1... + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + master2 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + + def fin(): + master1.delete() + master2.delete() + sbin_dir = get_sbin_dir(prefix=master2.prefix) + valgrind_disable(sbin_dir) + request.addfinalizer(fin) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + return TopologyReplication(master1, master2) + + +def test_ticket48226_set_purgedelay(topology): + args = {REPLICA_PURGE_DELAY: '5', + REPLICA_PURGE_INTERVAL: '5'} + try: + topology.master1.replica.setProperties(DEFAULT_SUFFIX, None, None, args) + except: + log.fatal('Failed to configure replica') + assert False + try: + topology.master2.replica.setProperties(DEFAULT_SUFFIX, None, None, args) + except: + log.fatal('Failed to configure replica') + assert False + topology.master1.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-auditlog-logging-enabled', 'on')]) + topology.master2.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-auditlog-logging-enabled', 'on')]) + topology.master1.restart(30) + topology.master2.restart(30) + + +def test_ticket48226_1(topology): + name = 'test_entry' + dn = "cn=%s,%s" % (name, SUFFIX) + + topology.master1.add_s(Entry((dn, {'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + + # First do an update that is replicated + mods = [(ldap.MOD_ADD, 'description', '5')] + topology.master1.modify_s(dn, mods) + + nbtry = 0 + while (nbtry <= 10): + try: + ent = topology.master2.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)", ['description']) + if ent.hasAttr('description') and ent.getValue('description') == '5': + break + except ldap.NO_SUCH_OBJECT: + pass + nbtry = nbtry + 1 + time.sleep(1) + assert nbtry <= 10 + + # Stop M2 so that it will not receive the next update + topology.master2.stop(10) + + # ADD a new value that is not replicated + mods = [(ldap.MOD_DELETE, 'description', '5')] + topology.master1.modify_s(dn, mods) + + # Stop M1 so that it will keep del '5' that is unknown from master2 + topology.master1.stop(10) + + # Get the sbin directory so we know where to replace 'ns-slapd' + sbin_dir = get_sbin_dir(prefix=topology.master2.prefix) + + # Enable valgrind + valgrind_enable(sbin_dir) + + # start M2 to do the next updates + topology.master2.start() + + # ADD 'description' by '5' + mods = [(ldap.MOD_DELETE, 'description', '5')] + topology.master2.modify_s(dn, mods) + + # DEL 'description' by '5' + mods = [(ldap.MOD_ADD, 'description', '5')] + topology.master2.modify_s(dn, mods) + + # sleep of purge delay so that the next update will purge the CSN_7 + time.sleep(6) + + # ADD 'description' by '6' that purge the state info + mods = [(ldap.MOD_ADD, 'description', '6')] + topology.master2.modify_s(dn, mods) + + # Restart master1 + #topology.master1.start(30) + + results_file = valgrind_get_results_file(topology.master2) + + # Stop master2 + topology.master2.stop(30) + + # Check for leak + if valgrind_check_file(results_file, VALGRIND_LEAK_STR, 'csnset_dup'): + log.info('Valgrind reported leak in csnset_dup!') + assert False + else: + log.info('Valgrind is happy!') + + # Check for invalid read/write + if valgrind_check_file(results_file, VALGRIND_INVALID_STR, 'csnset_dup'): + log.info('Valgrind reported invalid!') + assert False + else: + log.info('Valgrind is happy!') + + # Check for invalid read/write + if valgrind_check_file(results_file, VALGRIND_INVALID_STR, 'csnset_free'): + log.info('Valgrind reported invalid!') + assert False + else: + log.info('Valgrind is happy!') + + log.info('Testcase PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket48228_test.py b/dirsrvtests/tests/tickets/ticket48228_test.py new file mode 100644 index 0000000..d8f9334 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48228_test.py @@ -0,0 +1,313 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +# Assuming DEFAULT_SUFFIX is "dc=example,dc=com", otherwise it does not work... :( +SUBTREE_CONTAINER = 'cn=nsPwPolicyContainer,' + DEFAULT_SUFFIX +SUBTREE_PWPDN = 'cn=nsPwPolicyEntry,' + DEFAULT_SUFFIX +SUBTREE_PWP = 'cn=cn\3DnsPwPolicyEntry\2Cdc\3Dexample\2Cdc\3Dcom,' + SUBTREE_CONTAINER +SUBTREE_COS_TMPLDN = 'cn=nsPwTemplateEntry,' + DEFAULT_SUFFIX +SUBTREE_COS_TMPL = 'cn=cn\3DnsPwTemplateEntry\2Cdc\3Dexample\2Cdc\3Dcom,' + SUBTREE_CONTAINER +SUBTREE_COS_DEF = 'cn=nsPwPolicy_CoS,' + DEFAULT_SUFFIX + +USER1_DN = 'uid=user1,' + DEFAULT_SUFFIX +USER2_DN = 'uid=user2,' + DEFAULT_SUFFIX + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def set_global_pwpolicy(topology, inhistory): + log.info(" +++++ Enable global password policy +++++\n") + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + # Enable password policy + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-pwpolicy-local', 'on')]) + except ldap.LDAPError as e: + log.error('Failed to set pwpolicy-local: error ' + e.message['desc']) + assert False + + log.info(" Set global password history on\n") + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'passwordHistory', 'on')]) + except ldap.LDAPError as e: + log.error('Failed to set passwordHistory: error ' + e.message['desc']) + assert False + + log.info(" Set global passwords in history\n") + try: + count = "%d" % inhistory + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'passwordInHistory', count)]) + except ldap.LDAPError as e: + log.error('Failed to set passwordInHistory: error ' + e.message['desc']) + assert False + + +def set_subtree_pwpolicy(topology): + log.info(" +++++ Enable subtree level password policy +++++\n") + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + log.info(" Add the container") + try: + topology.standalone.add_s(Entry((SUBTREE_CONTAINER, {'objectclass': 'top nsContainer'.split(), + 'cn': 'nsPwPolicyContainer'}))) + except ldap.LDAPError as e: + log.error('Failed to add subtree container: error ' + e.message['desc']) + assert False + + log.info(" Add the password policy subentry {passwordHistory: on, passwordInHistory: 6}") + try: + topology.standalone.add_s(Entry((SUBTREE_PWP, {'objectclass': 'top ldapsubentry passwordpolicy'.split(), + 'cn': SUBTREE_PWPDN, + 'passwordMustChange': 'off', + 'passwordExp': 'off', + 'passwordHistory': 'on', + 'passwordInHistory': '6', + 'passwordMinAge': '0', + 'passwordChange': 'on', + 'passwordStorageScheme': 'clear'}))) + except ldap.LDAPError as e: + log.error('Failed to add passwordpolicy: error ' + e.message['desc']) + assert False + + log.info(" Add the COS template") + try: + topology.standalone.add_s(Entry((SUBTREE_COS_TMPL, {'objectclass': 'top ldapsubentry costemplate extensibleObject'.split(), + 'cn': SUBTREE_PWPDN, + 'cosPriority': '1', + 'cn': SUBTREE_COS_TMPLDN, + 'pwdpolicysubentry': SUBTREE_PWP}))) + except ldap.LDAPError as e: + log.error('Failed to add COS template: error ' + e.message['desc']) + assert False + + log.info(" Add the COS definition") + try: + topology.standalone.add_s(Entry((SUBTREE_COS_DEF, {'objectclass': 'top ldapsubentry cosSuperDefinition cosPointerDefinition'.split(), + 'cn': SUBTREE_PWPDN, + 'costemplatedn': SUBTREE_COS_TMPL, + 'cosAttribute': 'pwdpolicysubentry default operational-default'}))) + except ldap.LDAPError as e: + log.error('Failed to add COS def: error ' + e.message['desc']) + assert False + + +def check_passwd_inhistory(topology, user, cpw, passwd): + inhistory = 0 + log.info(" Bind as {%s,%s}" % (user, cpw)) + topology.standalone.simple_bind_s(user, cpw) + try: + topology.standalone.modify_s(user, [(ldap.MOD_REPLACE, 'userpassword', passwd)]) + except ldap.LDAPError as e: + log.info(' The password ' + passwd + ' of user' + USER1_DN + ' in history: error ' + e.message['desc']) + inhistory = 1 + time.sleep(1) + return inhistory + + +def update_passwd(topology, user, passwd, times): + cpw = passwd + for i in range(times): + log.info(" Bind as {%s,%s}" % (user, cpw)) + topology.standalone.simple_bind_s(user, cpw) + cpw = 'password%d' % i + try: + topology.standalone.modify_s(user, [(ldap.MOD_REPLACE, 'userpassword', cpw)]) + except ldap.LDAPError as e: + log.fatal('test_ticket48228: Failed to update the password ' + cpw + ' of user ' + user + ': error ' + e.message['desc']) + assert False + time.sleep(1) + + # checking the first password, which is supposed to be in history + inhistory = check_passwd_inhistory(topology, user, cpw, passwd) + assert inhistory == 1 + + +def test_ticket48228_test_global_policy(topology): + """ + Check global password policy + """ + + log.info(' Set inhistory = 6') + set_global_pwpolicy(topology, 6) + + log.info(' Bind as directory manager') + log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + log.info(' Add an entry' + USER1_DN) + try: + topology.standalone.add_s(Entry((USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'sn': '1', + 'cn': 'user 1', + 'uid': 'user1', + 'givenname': 'user', + 'mail': 'user1@example.com', + 'userpassword': 'password'}))) + except ldap.LDAPError as e: + log.fatal('test_ticket48228: Failed to add user' + USER1_DN + ': error ' + e.message['desc']) + assert False + + log.info(' Update the password of ' + USER1_DN + ' 6 times') + update_passwd(topology, USER1_DN, 'password', 6) + + log.info(' Set inhistory = 4') + set_global_pwpolicy(topology, 4) + + log.info(' checking the first password, which is supposed NOT to be in history any more') + cpw = 'password%d' % 5 + tpw = 'password' + inhistory = check_passwd_inhistory(topology, USER1_DN, cpw, tpw) + assert inhistory == 0 + + log.info(' checking the second password, which is supposed NOT to be in history any more') + cpw = tpw + tpw = 'password%d' % 0 + inhistory = check_passwd_inhistory(topology, USER1_DN, cpw, tpw) + assert inhistory == 0 + + log.info(' checking the third password, which is supposed NOT to be in history any more') + cpw = tpw + tpw = 'password%d' % 1 + inhistory = check_passwd_inhistory(topology, USER1_DN, cpw, tpw) + assert inhistory == 0 + + log.info(' checking the sixth password, which is supposed to be in history') + cpw = tpw + tpw = 'password%d' % 5 + inhistory = check_passwd_inhistory(topology, USER1_DN, cpw, tpw) + assert inhistory == 1 + + log.info("Global policy was successfully verified.") + + +def test_ticket48228_test_subtree_policy(topology): + """ + Check subtree level password policy + """ + + log.info(' Set inhistory = 6') + set_subtree_pwpolicy(topology) + + log.info(' Bind as directory manager') + log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + log.info(' Add an entry' + USER2_DN) + try: + topology.standalone.add_s(Entry((USER2_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'givenname': 'user', + 'mail': 'user2@example.com', + 'userpassword': 'password'}))) + except ldap.LDAPError as e: + log.fatal('test_ticket48228: Failed to add user' + USER2_DN + ': error ' + e.message['desc']) + assert False + + log.info(' Update the password of ' + USER2_DN + ' 6 times') + update_passwd(topology, USER2_DN, 'password', 6) + + log.info(' Set inhistory = 4') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + try: + topology.standalone.modify_s(SUBTREE_PWP, [(ldap.MOD_REPLACE, 'passwordInHistory', '4')]) + except ldap.LDAPError as e: + log.error('Failed to set pwpolicy-local: error ' + e.message['desc']) + assert False + + log.info(' checking the first password, which is supposed NOT to be in history any more') + cpw = 'password%d' % 5 + tpw = 'password' + inhistory = check_passwd_inhistory(topology, USER2_DN, cpw, tpw) + assert inhistory == 0 + + log.info(' checking the second password, which is supposed NOT to be in history any more') + cpw = tpw + tpw = 'password%d' % 1 + inhistory = check_passwd_inhistory(topology, USER2_DN, cpw, tpw) + assert inhistory == 0 + + log.info(' checking the third password, which is supposed NOT to be in history any more') + cpw = tpw + tpw = 'password%d' % 2 + inhistory = check_passwd_inhistory(topology, USER2_DN, cpw, tpw) + assert inhistory == 0 + + log.info(' checking the six password, which is supposed to be in history') + cpw = tpw + tpw = 'password%d' % 5 + inhistory = check_passwd_inhistory(topology, USER2_DN, cpw, tpw) + assert inhistory == 1 + + log.info("Subtree level policy was successfully verified.") + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48233_test.py b/dirsrvtests/tests/tickets/ticket48233_test.py new file mode 100644 index 0000000..d9b0aae --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48233_test.py @@ -0,0 +1,105 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def test_ticket48233(topology): + """Test that ACI's that use IP restrictions do not crash the server at + shutdown + """ + + # Add aci to restrict access my ip + aci_text = ('(targetattr != "userPassword")(version 3.0;acl ' + + '"Enable anonymous access - IP"; allow (read,compare,search)' + + '(userdn = "ldap:///anyone") and (ip="127.0.0.1");)') + + try: + topology.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_ADD, 'aci', aci_text)]) + except ldap.LDAPError as e: + log.error('Failed to add aci: (%s) error %s' % (aci_text, e.message['desc'])) + assert False + time.sleep(1) + + # Anonymous search to engage the aci + try: + topology.standalone.simple_bind_s("", "") + except ldap.LDAPError as e: + log.error('Failed to anonymously bind -error %s' % (e.message['desc'])) + assert False + + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, 'objectclass=*') + if not entries: + log.fatal('Failed return an entries from search') + assert False + except ldap.LDAPError as e: + log.fatal('Search failed: ' + e.message['desc']) + assert False + + # Restart the server + topology.standalone.restart(timeout=10) + + # Check for crash + if topology.standalone.detectDisorderlyShutdown(): + log.fatal('Server crashed!') + assert False + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) \ No newline at end of file diff --git a/dirsrvtests/tests/tickets/ticket48234_test.py b/dirsrvtests/tests/tickets/ticket48234_test.py new file mode 100644 index 0000000..27eff1a --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48234_test.py @@ -0,0 +1,139 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + +def add_ou_entry(server, name, myparent): + dn = 'ou=%s,%s' % (name, myparent) + server.add_s(Entry((dn, {'objectclass': ['top', 'organizationalunit'], + 'ou': name}))) + +def add_user_entry(server, name, pw, myparent): + dn = 'cn=%s,%s' % (name, myparent) + server.add_s(Entry((dn, {'objectclass': ['top', 'person'], + 'sn': name, + 'cn': name, + 'telephonenumber': '+1 222 333-4444', + 'userpassword': pw}))) + +def test_ticket48234(topology): + """ + Test aci which contains an extensible filter. + shutdown + """ + + log.info('Bind as root DN') + try: + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + topology.standalone.log.error('Root DN failed to authenticate: ' + e.message['desc']) + assert False + + ouname = 'outest' + username = 'admin' + passwd = 'Password' + deniedattr = 'telephonenumber' + log.info('Add aci which contains extensible filter.') + aci_text = ('(targetattr = "%s")' % (deniedattr) + + '(target = "ldap:///%s")' % (DEFAULT_SUFFIX) + + '(version 3.0;acl "admin-tel-matching-rule-outest";deny (all)' + + '(userdn = "ldap:///%s??sub?(&(cn=%s)(ou:dn:=%s))");)' % (DEFAULT_SUFFIX, username, ouname)) + + try: + topology.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_ADD, 'aci', aci_text)]) + except ldap.LDAPError as e: + log.error('Failed to add aci: (%s) error %s' % (aci_text, e.message['desc'])) + assert False + + log.info('Add entries ...') + for idx in range(0, 2): + ou0 = 'OU%d' % idx + log.info('adding %s under %s...' % (ou0, DEFAULT_SUFFIX)) + add_ou_entry(topology.standalone, ou0, DEFAULT_SUFFIX) + parent = 'ou=%s,%s' % (ou0, DEFAULT_SUFFIX) + log.info('adding %s under %s...' % (ouname, parent)) + add_ou_entry(topology.standalone, ouname, parent) + + for idx in range(0, 2): + parent = 'ou=%s,ou=OU%d,%s' % (ouname, idx, DEFAULT_SUFFIX) + log.info('adding %s under %s...' % (username, parent)) + add_user_entry(topology.standalone, username, passwd, parent) + + binddn = 'cn=%s,%s' % (username, parent) + log.info('Bind as user %s' % binddn) + try: + topology.standalone.simple_bind_s(binddn, passwd) + except ldap.LDAPError as e: + topology.standalone.log.error(bindn + ' failed to authenticate: ' + e.message['desc']) + assert False + + filter = '(cn=%s)' % username + try: + entries = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, filter, [deniedattr, 'dn']) + assert 2 == len(entries) + for idx in range(0, 1): + if entries[idx].hasAttr(deniedattr): + log.fatal('aci with extensible filter failed -- %s') + assert False + except ldap.LDAPError as e: + topology.standalone.log.error('Search (%s, %s) failed: ' % (DEFAULT_SUFFIX, filter) + e.message['desc']) + assert False + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48252_test.py b/dirsrvtests/tests/tickets/ticket48252_test.py new file mode 100644 index 0000000..44978fd --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48252_test.py @@ -0,0 +1,162 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +# Assuming DEFAULT_SUFFIX is "dc=example,dc=com", otherwise it does not work... :( +USER_NUM = 10 +TEST_USER = "test_user" + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket48252_setup(topology): + """ + Enable USN plug-in for enabling tombstones + Add test entries + """ + + log.info("Enable the USN plugin...") + try: + topology.standalone.plugins.enable(name=PLUGIN_USN) + except e: + log.error("Failed to enable USN Plugin: error " + e.message['desc']) + assert False + + log.info("Adding test entries...") + for id in range(USER_NUM): + name = "%s%d" % (TEST_USER, id) + topology.standalone.add_s(Entry(("cn=%s,%s" % (name, SUFFIX), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + + +def in_index_file(topology, id, index): + key = "%s%s" % (TEST_USER, id) + log.info(" dbscan - checking %s is in index file %s..." % (key, index)) + dbscanOut = topology.standalone.dbscan(DEFAULT_BENAME, index) + + if key in dbscanOut: + found = True + topology.standalone.log.info("Found key %s in dbscan output" % key) + else: + found = False + topology.standalone.log.info("Did not found key %s in dbscan output" % key) + + return found + + +def test_ticket48252_run_0(topology): + """ + Delete an entry cn=test_entry0 + Check it is not in the 'cn' index file + """ + log.info("Case 1 - Check deleted entry is not in the 'cn' index file") + del_rdn = "cn=%s0" % TEST_USER + del_entry = "%s,%s" % (del_rdn, SUFFIX) + log.info(" Deleting a test entry %s..." % del_entry) + topology.standalone.delete_s(del_entry) + + assert in_index_file(topology, 0, 'cn') == False + + log.info(" db2index - reindexing %s ..." % 'cn') + assert topology.standalone.db2index(DEFAULT_BENAME, 'cn') + + assert in_index_file(topology, 0, 'cn') == False + log.info(" entry %s is not in the cn index file after reindexed." % del_entry) + log.info('Case 1 - PASSED') + + +def test_ticket48252_run_1(topology): + """ + Delete an entry cn=test_entry1 + Check it is in the 'objectclass' index file as a tombstone entry + """ + log.info("Case 2 - Check deleted entry is in the 'objectclass' index file as a tombstone entry") + del_rdn = "cn=%s1" % TEST_USER + del_entry = "%s,%s" % (del_rdn, SUFFIX) + log.info(" Deleting a test entry %s..." % del_entry) + topology.standalone.delete_s(del_entry) + + entry = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, '(&(objectclass=nstombstone)(%s))' % del_rdn) + assert len(entry) == 1 + log.info(" entry %s is in the objectclass index file." % del_entry) + + log.info(" db2index - reindexing %s ..." % 'objectclass') + assert topology.standalone.db2index(DEFAULT_BENAME, 'objectclass') + + entry = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, '(&(objectclass=nstombstone)(%s))' % del_rdn) + assert len(entry) == 1 + log.info(" entry %s is in the objectclass index file after reindexed." % del_entry) + log.info('Case 2 - PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48265_test.py b/dirsrvtests/tests/tickets/ticket48265_test.py new file mode 100644 index 0000000..d255f33 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48265_test.py @@ -0,0 +1,110 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +USER_NUM = 20 +TEST_USER = 'test_user' + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket48265_test(topology): + """ + Complex filter issues + Ticket 47521 type complex filter: + (&(|(uid=tuser*)(cn=Test user*))(&(givenname=test*3))(mail=tuser@example.com)(&(description=*))) + Ticket 48264 type complex filter: + (&(&(|(l=EU)(l=AP)(l=NA))(|(c=SE)(c=DE)))(|(uid=*test*)(cn=*test*))(l=eu)) + """ + + log.info("Adding %d test entries..." % USER_NUM) + for id in range(USER_NUM): + name = "%s%d" % (TEST_USER, id) + mail = "%s@example.com" % name + secretary = "cn=%s,ou=secretary,%s" % (name, SUFFIX) + topology.standalone.add_s(Entry(("cn=%s,%s" % (name, SUFFIX), { + 'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'sn': name, + 'cn': name, + 'uid': name, + 'givenname': 'test', + 'mail': mail, + 'description': 'description', + 'secretary': secretary, + 'l': 'MV', + 'title': 'Engineer'}))) + + log.info("Search with Ticket 47521 type complex filter") + for id in range(USER_NUM): + name = "%s%d" % (TEST_USER, id) + mail = "%s@example.com" % name + filter47521 = '(&(|(uid=%s*)(cn=%s*))(&(givenname=test))(mail=%s)(&(description=*)))' % (TEST_USER, TEST_USER, mail) + entry = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, filter47521) + assert len(entry) == 1 + + log.info("Search with Ticket 48265 type complex filter") + for id in range(USER_NUM): + name = "%s%d" % (TEST_USER, id) + mail = "%s@example.com" % name + filter48265 = '(&(&(|(l=AA)(l=BB)(l=MV))(|(title=admin)(title=engineer)))(|(uid=%s)(mail=%s))(description=description))' % (name, mail) + entry = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, filter48265) + assert len(entry) == 1 + + log.info('Test 48265 complete\n') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48266_test.py b/dirsrvtests/tests/tickets/ticket48266_test.py new file mode 100644 index 0000000..82571e9 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48266_test.py @@ -0,0 +1,431 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +NEW_ACCOUNT = "new_account" +MAX_ACCOUNTS = 20 + + +class TopologyReplication(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating master 1... + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + master2 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Delete each instance in the end + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + master1.clearTmpDir(__file__) + + return TopologyReplication(master1, master2) + + +def pattern_accesslog(file, log_pattern): + try: + pattern_accesslog.last_pos += 1 + except AttributeError: + pattern_accesslog.last_pos = 0 + + + found = None + file.seek(pattern_accesslog.last_pos) + + # Use a while true iteration because 'for line in file: hit a + # python bug that break file.tell() + while True: + line = file.readline() + found = log_pattern.search(line) + if ((line == '') or (found)): + break + + pattern_accesslog.last_pos = file.tell() + if found: + return line + else: + return None + + +@pytest.fixture(scope="module") +def entries(topology): + # add dummy entries in the staging DIT + for cpt in range(MAX_ACCOUNTS): + name = "%s%d" % (NEW_ACCOUNT, cpt) + topology.master1.add_s(Entry(("cn=%s,%s" % (name, SUFFIX), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '8192'), + (ldap.MOD_REPLACE, 'nsslapd-accesslog-level', str(256+4))] + topology.master1.modify_s(DN_CONFIG, mod) + topology.master2.modify_s(DN_CONFIG, mod) + + +def test_ticket48266_fractional(topology, entries): + ents = topology.master1.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + + mod = [(ldap.MOD_REPLACE, 'nsDS5ReplicatedAttributeList', ['(objectclass=*) $ EXCLUDE telephonenumber']), + (ldap.MOD_REPLACE, 'nsds5ReplicaStripAttrs', ['modifiersname modifytimestamp'])] + ents = topology.master1.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + m1_m2_agmt = ents[0].dn + topology.master1.modify_s(ents[0].dn, mod) + + ents = topology.master2.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + topology.master2.modify_s(ents[0].dn, mod) + + topology.master1.restart(timeout=10) + topology.master2.restart(timeout=10) + + topology.master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + topology.master1.waitForReplInit(m1_m2_agmt) + + +def test_ticket48266_check_repl_desc(topology, entries): + name = "cn=%s1,%s" % (NEW_ACCOUNT, SUFFIX) + value = 'check repl. description' + mod = [(ldap.MOD_REPLACE, 'description', value)] + topology.master1.modify_s(name, mod) + + loop = 0 + while loop <= 10: + ent = topology.master2.getEntry(name, ldap.SCOPE_BASE, "(objectclass=*)") + if ent.hasAttr('description') and ent.getValue('description') == value: + break + time.sleep(1) + loop += 1 + assert loop <= 10 + + +# will use this CSN as a starting point on error log +# after this is one 'Skipped' then the first csn _get_first_not_replicated_csn +# should no longer be Skipped in the error log +def _get_last_not_replicated_csn(topology): + name = "cn=%s5,%s" % (NEW_ACCOUNT, SUFFIX) + + # read the first CSN that will not be replicated + mod = [(ldap.MOD_REPLACE, 'telephonenumber', str(123456))] + topology.master1.modify_s(name, mod) + msgid = topology.master1.search_ext(name, ldap.SCOPE_SUBTREE, 'objectclass=*', ['nscpentrywsi']) + rtype, rdata, rmsgid = topology.master1.result2(msgid) + attrs = None + for dn, raw_attrs in rdata: + topology.master1.log.info("dn: %s" % dn) + if 'nscpentrywsi' in raw_attrs: + attrs = raw_attrs['nscpentrywsi'] + assert attrs + for attr in attrs: + if attr.lower().startswith('telephonenumber'): + break + assert attr + + # now retrieve the CSN of the operation we are looking for + csn = None + topology.master1.stop(timeout=10) + file_path = os.path.join(topology.master1.prefix, "var/log/dirsrv/slapd-%s/access" % topology.master1.serverid) + file_obj = open(file_path, "r") + + # First the conn/op of the operation + regex = re.compile("MOD dn=\"%s\"" % name) + found_op = pattern_accesslog(file_obj, regex) + assert found_op + if found_op: + conn_op_pattern = '.* (conn=[0-9]* op=[0-9]*) .*' + conn_op_re= re.compile(conn_op_pattern) + conn_op_match = conn_op_re.match(found_op) + conn_op = conn_op_match.group(1) + + # now the related CSN + regex = re.compile("%s RESULT" % conn_op) + found_result = pattern_accesslog(file_obj, regex) + csn_pattern = '.* csn=(.*)' + csn_re = re.compile(csn_pattern) + csn_match = csn_re.match(found_result) + csn = csn_match.group(1) + + topology.master1.start(timeout=10) + return csn + + +def _get_first_not_replicated_csn(topology): + name = "cn=%s2,%s" % (NEW_ACCOUNT, SUFFIX) + + # read the first CSN that will not be replicated + mod = [(ldap.MOD_REPLACE, 'telephonenumber', str(123456))] + topology.master1.modify_s(name, mod) + msgid = topology.master1.search_ext(name, ldap.SCOPE_SUBTREE, 'objectclass=*', ['nscpentrywsi']) + rtype, rdata, rmsgid = topology.master1.result2(msgid) + attrs = None + for dn, raw_attrs in rdata: + topology.master1.log.info("dn: %s" % dn) + if 'nscpentrywsi' in raw_attrs: + attrs = raw_attrs['nscpentrywsi'] + assert attrs + for attr in attrs: + if attr.lower().startswith('telephonenumber'): + break + assert attr + + # now retrieve the CSN of the operation we are looking for + csn = None + topology.master1.stop(timeout=10) + file_path = os.path.join(topology.master1.prefix, "var/log/dirsrv/slapd-%s/access" % topology.master1.serverid) + file_obj = open(file_path, "r") + + # First the conn/op of the operation + regex = re.compile("MOD dn=\"%s\"" % name) + found_op = pattern_accesslog(file_obj, regex) + assert found_op + if found_op: + conn_op_pattern = '.* (conn=[0-9]* op=[0-9]*) .*' + conn_op_re= re.compile(conn_op_pattern) + conn_op_match = conn_op_re.match(found_op) + conn_op = conn_op_match.group(1) + + # now the related CSN + regex = re.compile("%s RESULT" % conn_op) + found_result = pattern_accesslog(file_obj, regex) + csn_pattern = '.* csn=(.*)' + csn_re = re.compile(csn_pattern) + csn_match = csn_re.match(found_result) + csn = csn_match.group(1) + + topology.master1.start(timeout=10) + return csn + + +def _count_full_session(topology): + file_path = os.path.join(topology.master1.prefix, "var/log/dirsrv/slapd-%s/errors" % topology.master1.serverid) + + # + # compute the number of 'No more updates' + # + file_obj = open(file_path, "r") + # pattern to find + pattern = ".*No more updates to send.*" + regex = re.compile(pattern) + no_more_updates = 0 + + # check initiation number of 'No more updates + while True: + line = file_obj.readline() + found = regex.search(line) + if (found): + no_more_updates = no_more_updates + 1 + if (line == ''): + break + file_obj.close() + + return no_more_updates + + +def test_ticket48266_count_csn_evaluation(topology, entries): + ents = topology.master1.agreement.list(suffix=SUFFIX) + assert len(ents) == 1 + first_csn = _get_first_not_replicated_csn(topology) + name = "cn=%s3,%s" % (NEW_ACCOUNT, SUFFIX) + NB_SESSION = 102 + + no_more_update_cnt = _count_full_session(topology) + topology.master1.agreement.pause(ents[0].dn) + # now do a set of updates that will NOT be replicated + for telNumber in range(NB_SESSION): + mod = [(ldap.MOD_REPLACE, 'telephonenumber', str(telNumber))] + topology.master1.modify_s(name, mod) + + topology.master1.agreement.resume(ents[0].dn) + + # let's wait all replication session complete + MAX_LOOP = 10 + cnt = 0 + current_no_more_update = _count_full_session(topology) + while (current_no_more_update == no_more_update_cnt): + cnt = cnt + 1 + if (cnt > MAX_LOOP): + break + time.sleep(5) + current_no_more_update = _count_full_session(topology) + + log.info('after %d MODs we have completed %d replication sessions' % (NB_SESSION, (current_no_more_update - no_more_update_cnt))) + no_more_update_cnt = current_no_more_update + + + # At this point, with the fix a dummy update was made BUT may be not sent it + # make sure it was sent so that the consumer CSN will be updated + last_csn = _get_last_not_replicated_csn(topology) + + # let's wait all replication session complete + MAX_LOOP = 10 + cnt = 0 + current_no_more_update = _count_full_session(topology) + while (current_no_more_update == no_more_update_cnt): + cnt = cnt + 1 + if (cnt > MAX_LOOP): + break + time.sleep(5) + current_no_more_update = _count_full_session(topology) + + log.info('This MODs %s triggered the send of the dummy update completed %d replication sessions' % (last_csn, (current_no_more_update - no_more_update_cnt))) + no_more_update_cnt = current_no_more_update + + # so we should no longer see the first_csn in the log + # Let's create a new csn (last_csn) and check there is no longer first_csn + topology.master1.agreement.pause(ents[0].dn) + last_csn = _get_last_not_replicated_csn(topology) + topology.master1.agreement.resume(ents[0].dn) + + # let's wait for the session to complete + MAX_LOOP = 10 + cnt = 0 + while (current_no_more_update == no_more_update_cnt): + cnt = cnt + 1 + if (cnt > MAX_LOOP): + break + time.sleep(5) + current_no_more_update = _count_full_session(topology) + + log.info('This MODs %s completed in %d replication sessions, should be sent without evaluating %s' % (last_csn, (current_no_more_update - no_more_update_cnt), first_csn)) + no_more_update_cnt = current_no_more_update + + # Now determine how many times we have skipped 'csn' + # no need to stop the server to check the error log + file_path = os.path.join(topology.master1.prefix, "var/log/dirsrv/slapd-%s/errors" % topology.master1.serverid) + file_obj = open(file_path, "r") + + # find where the last_csn operation was processed + pattern = ".*ruv_add_csn_inprogress: successfully inserted csn %s.*" % last_csn + regex = re.compile(pattern) + cnt = 0 + + while True: + line = file_obj.readline() + found = regex.search(line) + if ((line == '') or (found)): + break + if (found): + log.info('last operation was found at %d' % file_obj.tell()) + log.info(line) + log.info('Now check the we can not find the first csn %s in the log'% first_csn) + + pattern = ".*Skipping update operation.*CSN %s.*" % first_csn + regex = re.compile(pattern) + found = False + while True: + line = file_obj.readline() + found = regex.search(line) + if ((line == '') or (found)): + break + if (found): + log.info('Unexpected found %s' % line) + assert not found + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48270_test.py b/dirsrvtests/tests/tickets/ticket48270_test.py new file mode 100644 index 0000000..0eeeed4 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48270_test.py @@ -0,0 +1,153 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +NEW_ACCOUNT = "new_account" +MAX_ACCOUNTS = 20 + +MIXED_VALUE="/home/mYhOmEdIrEcToRy" +LOWER_VALUE="/home/myhomedirectory" +HOMEDIRECTORY_INDEX = 'cn=homeDirectory,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config' +HOMEDIRECTORY_CN="homedirectory" +MATCHINGRULE = 'nsMatchingRule' +UIDNUMBER_INDEX = 'cn=uidnumber,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config' +UIDNUMBER_CN="uidnumber" + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket48270_init(topology): + log.info("Initialization: add dummy entries for the tests") + for cpt in range(MAX_ACCOUNTS): + name = "%s%d" % (NEW_ACCOUNT, cpt) + topology.standalone.add_s(Entry(("uid=%s,%s" % (name, SUFFIX), { + 'objectclass': "top posixAccount".split(), + 'uid': name, + 'cn': name, + 'uidnumber': str(111), + 'gidnumber': str(222), + 'homedirectory': "/home/tbordaz_%d" % cpt}))) + + +def test_ticket48270_homeDirectory_indexed_cis(topology): + log.info("\n\nindex homeDirectory in caseIgnoreIA5Match and caseExactIA5Match") + try: + ent = topology.standalone.getEntry(HOMEDIRECTORY_INDEX, ldap.SCOPE_BASE) + except ldap.NO_SUCH_OBJECT: + topology.standalone.add_s(Entry((HOMEDIRECTORY_INDEX, { + 'objectclass': "top nsIndex".split(), + 'cn': HOMEDIRECTORY_CN, + 'nsSystemIndex': 'false', + 'nsIndexType': 'eq'}))) + #log.info("attach debugger") + #time.sleep(60) + + IGNORE_MR_NAME='caseIgnoreIA5Match' + EXACT_MR_NAME='caseExactIA5Match' + mod = [(ldap.MOD_REPLACE, MATCHINGRULE, (IGNORE_MR_NAME, EXACT_MR_NAME))] + topology.standalone.modify_s(HOMEDIRECTORY_INDEX, mod) + + #topology.standalone.stop(timeout=10) + log.info("successfully checked that filter with exact mr , a filter with lowercase eq is failing") + #assert topology.standalone.db2index(bename=DEFAULT_BENAME, suffixes=None, attrs=['homeDirectory']) + #topology.standalone.start(timeout=10) + args = {TASK_WAIT: True} + topology.standalone.tasks.reindex(suffix=SUFFIX, attrname='homeDirectory', args=args) + + log.info("Check indexing succeeded with a specified matching rule") + file_path = os.path.join(topology.standalone.prefix, "var/log/dirsrv/slapd-%s/errors" % topology.standalone.serverid) + file_obj = open(file_path, "r") + + # Check if the MR configuration failure occurs + regex = re.compile("unknown or invalid matching rule") + while True: + line = file_obj.readline() + found = regex.search(line) + if ((line == '') or (found)): + break + + if (found): + log.info("The configuration of a specific MR fails") + log.info(line) + #assert not found + + +def test_ticket48270_homeDirectory_mixed_value(topology): + # Set a homedirectory value with mixed case + name = "uid=%s1,%s" % (NEW_ACCOUNT, SUFFIX) + mod = [(ldap.MOD_REPLACE, 'homeDirectory', MIXED_VALUE)] + topology.standalone.modify_s(name, mod) + + +def test_ticket48270_extensible_search(topology): + name = "uid=%s1,%s" % (NEW_ACCOUNT, SUFFIX) + + # check with the exact stored value + log.info("Default: can retrieve an entry filter syntax with exact stored value") + ent = topology.standalone.getEntry(name, ldap.SCOPE_BASE, "(homeDirectory=%s)" % MIXED_VALUE) + log.info("Default: can retrieve an entry filter caseExactIA5Match with exact stored value") + ent = topology.standalone.getEntry(name, ldap.SCOPE_BASE, "(homeDirectory:caseExactIA5Match:=%s)" % MIXED_VALUE) + + # check with a lower case value that is different from the stored value + log.info("Default: can not retrieve an entry filter syntax match with lowered stored value") + try: + ent = topology.standalone.getEntry(name, ldap.SCOPE_BASE, "(homeDirectory=%s)" % LOWER_VALUE) + assert ent is None + except ldap.NO_SUCH_OBJECT: + pass + log.info("Default: can not retrieve an entry filter caseExactIA5Match with lowered stored value") + try: + ent = topology.standalone.getEntry(name, ldap.SCOPE_BASE, "(homeDirectory:caseExactIA5Match:=%s)" % LOWER_VALUE) + assert ent is None + except ldap.NO_SUCH_OBJECT: + pass + log.info("Default: can retrieve an entry filter caseIgnoreIA5Match with lowered stored value") + ent = topology.standalone.getEntry(name, ldap.SCOPE_BASE, "(homeDirectory:caseIgnoreIA5Match:=%s)" % LOWER_VALUE) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48294_test.py b/dirsrvtests/tests/tickets/ticket48294_test.py new file mode 100644 index 0000000..3e63759 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48294_test.py @@ -0,0 +1,268 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +import shutil +from lib389 import DirSrv, Entry, tools +from lib389 import DirSrvTools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +LINKEDATTR_PLUGIN = 'cn=Linked Attributes,cn=plugins,cn=config' +MANAGER_LINK = 'cn=Manager Link,' + LINKEDATTR_PLUGIN +OU_PEOPLE = 'ou=People,' + DEFAULT_SUFFIX +LINKTYPE = 'directReport' +MANAGEDTYPE = 'manager' + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def _header(topology, label): + topology.standalone.log.info("###############################################") + topology.standalone.log.info("####### %s" % label) + topology.standalone.log.info("###############################################") + + +def check_attr_val(topology, dn, attr, expected): + try: + centry = topology.standalone.search_s(dn, ldap.SCOPE_BASE, 'uid=*') + if centry: + val = centry[0].getValue(attr) + if val.lower() == expected.lower(): + log.info('Value of %s is %s' % (attr, expected)) + else: + log.info('Value of %s is not %s, but %s' % (attr, expected, val)) + assert False + else: + log.fatal('Failed to get %s' % dn) + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search ' + dn + ': ' + e.message['desc']) + assert False + + +def _modrdn_entry(topology=None, entry_dn=None, new_rdn=None, del_old=0, new_superior=None): + assert topology is not None + assert entry_dn is not None + assert new_rdn is not None + + topology.standalone.log.info("\n\n######################### MODRDN %s ######################\n" % new_rdn) + try: + if new_superior: + topology.standalone.rename_s(entry_dn, new_rdn, newsuperior=new_superior, delold=del_old) + else: + topology.standalone.rename_s(entry_dn, new_rdn, delold=del_old) + except ldap.NO_SUCH_ATTRIBUTE: + topology.standalone.log.info("accepted failure due to 47833: modrdn reports error.. but succeeds") + attempt = 0 + if new_superior: + dn = "%s,%s" % (new_rdn, new_superior) + base = new_superior + else: + base = ','.join(entry_dn.split(",")[1:]) + dn = "%s, %s" % (new_rdn, base) + myfilter = entry_dn.split(',')[0] + + while attempt < 10: + try: + ent = topology.standalone.getEntry(dn, ldap.SCOPE_BASE, myfilter) + break + except ldap.NO_SUCH_OBJECT: + topology.standalone.log.info("Accept failure due to 47833: unable to find (base) a modrdn entry") + attempt += 1 + time.sleep(1) + if attempt == 10: + ent = topology.standalone.getEntry(base, ldap.SCOPE_SUBTREE, myfilter) + ent = topology.standalone.getEntry(dn, ldap.SCOPE_BASE, myfilter) + + +def test_48294_init(topology): + """ + Set up Linked Attribute + """ + _header(topology, 'Testing Ticket 48294 - Linked Attributes plug-in - won\'t update links after MODRDN operation') + + log.info('Enable Dynamic plugins, and the linked Attrs plugin') + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-dynamic-plugins', 'on')]) + except ldap.LDAPError as e: + ldap.fatal('Failed to enable dynamic plugin!' + e.message['desc']) + assert False + + try: + topology.standalone.plugins.enable(name=PLUGIN_LINKED_ATTRS) + except ValueError as e: + ldap.fatal('Failed to enable linked attributes plugin!' + e.message['desc']) + assert False + + log.info('Add the plugin config entry') + try: + topology.standalone.add_s(Entry((MANAGER_LINK, { + 'objectclass': 'top extensibleObject'.split(), + 'cn': 'Manager Link', + 'linkType': LINKTYPE, + 'managedType': MANAGEDTYPE + }))) + except ldap.LDAPError as e: + log.fatal('Failed to add linked attr config entry: error ' + e.message['desc']) + assert False + + log.info('Add 2 entries: manager1 and employee1') + try: + topology.standalone.add_s(Entry(('uid=manager1,%s' % OU_PEOPLE, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'manager1'}))) + except ldap.LDAPError as e: + log.fatal('Add manager1 failed: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry(('uid=employee1,%s' % OU_PEOPLE, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'employee1'}))) + except ldap.LDAPError as e: + log.fatal('Add employee1 failed: error ' + e.message['desc']) + assert False + + log.info('Add linktype to manager1') + topology.standalone.modify_s('uid=manager1,%s' % OU_PEOPLE, + [(ldap.MOD_ADD, LINKTYPE, 'uid=employee1,%s' % OU_PEOPLE)]) + + log.info('Check managed attribute') + check_attr_val(topology, 'uid=employee1,%s' % OU_PEOPLE, MANAGEDTYPE, 'uid=manager1,%s' % OU_PEOPLE) + + log.info('PASSED') + + +def test_48294_run_0(topology): + """ + Rename employee1 to employee2 and adjust the value of directReport by replace + """ + _header(topology, 'Case 0 - Rename employee1 and adjust the link type value by replace') + + log.info('Rename employee1 to employee2') + _modrdn_entry(topology, entry_dn='uid=employee1,%s' % OU_PEOPLE, new_rdn='uid=employee2') + + log.info('Modify the value of directReport to uid=employee2') + try: + topology.standalone.modify_s('uid=manager1,%s' % OU_PEOPLE, + [(ldap.MOD_REPLACE, LINKTYPE, 'uid=employee2,%s' % OU_PEOPLE)]) + except ldap.LDAPError as e: + log.fatal('Failed to replace uid=employee1 with employee2: ' + e.message['desc']) + assert False + + log.info('Check managed attribute') + check_attr_val(topology, 'uid=employee2,%s' % OU_PEOPLE, MANAGEDTYPE, 'uid=manager1,%s' % OU_PEOPLE) + + log.info('PASSED') + + +def test_48294_run_1(topology): + """ + Rename employee2 to employee3 and adjust the value of directReport by delete and add + """ + _header(topology, 'Case 1 - Rename employee2 and adjust the link type value by delete and add') + + log.info('Rename employee2 to employee3') + _modrdn_entry(topology, entry_dn='uid=employee2,%s' % OU_PEOPLE, new_rdn='uid=employee3') + + log.info('Modify the value of directReport to uid=employee3') + try: + topology.standalone.modify_s('uid=manager1,%s' % OU_PEOPLE, + [(ldap.MOD_DELETE, LINKTYPE, 'uid=employee2,%s' % OU_PEOPLE)]) + except ldap.LDAPError as e: + log.fatal('Failed to delete employee2: ' + e.message['desc']) + assert False + + try: + topology.standalone.modify_s('uid=manager1,%s' % OU_PEOPLE, + [(ldap.MOD_ADD, LINKTYPE, 'uid=employee3,%s' % OU_PEOPLE)]) + except ldap.LDAPError as e: + log.fatal('Failed to add employee3: ' + e.message['desc']) + assert False + + log.info('Check managed attribute') + check_attr_val(topology, 'uid=employee3,%s' % OU_PEOPLE, MANAGEDTYPE, 'uid=manager1,%s' % OU_PEOPLE) + + log.info('PASSED') + + +def test_48294_run_2(topology): + """ + Rename manager1 to manager2 and make sure the managed attribute value is updated + """ + _header(topology, 'Case 2 - Rename manager1 to manager2 and make sure the managed attribute value is updated') + + log.info('Rename manager1 to manager2') + _modrdn_entry(topology, entry_dn='uid=manager1,%s' % OU_PEOPLE, new_rdn='uid=manager2') + + log.info('Check managed attribute') + check_attr_val(topology, 'uid=employee3,%s' % OU_PEOPLE, MANAGEDTYPE, 'uid=manager2,%s' % OU_PEOPLE) + + log.info('PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48295_test.py b/dirsrvtests/tests/tickets/ticket48295_test.py new file mode 100644 index 0000000..b636730 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48295_test.py @@ -0,0 +1,191 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +import shutil +from lib389 import DirSrv, Entry, tools +from lib389 import DirSrvTools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +LINKEDATTR_PLUGIN = 'cn=Linked Attributes,cn=plugins,cn=config' +MANAGER_LINK = 'cn=Manager Link,' + LINKEDATTR_PLUGIN +OU_PEOPLE = 'ou=People,' + DEFAULT_SUFFIX +LINKTYPE = 'directReport' +MANAGEDTYPE = 'manager' + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def _header(topology, label): + topology.standalone.log.info("###############################################") + topology.standalone.log.info("####### %s" % label) + topology.standalone.log.info("###############################################") + +def check_attr_val(topology, dn, attr, expected, revert): + try: + centry = topology.standalone.search_s(dn, ldap.SCOPE_BASE, 'uid=*') + if centry: + val = centry[0].getValue(attr) + if val: + if val.lower() == expected.lower(): + if revert: + log.info('Value of %s %s exists, which should not.' % (attr, expected)) + assert False + else: + log.info('Value of %s is %s' % (attr, expected)) + else: + if revert: + log.info('NEEDINFO: Value of %s is not %s, but %s' % (attr, expected, val)) + else: + log.info('Value of %s is not %s, but %s' % (attr, expected, val)) + assert False + else: + if revert: + log.info('Value of %s does not expectedly exist' % attr) + else: + log.info('Value of %s does not exist' % attr) + assert False + else: + log.fatal('Failed to get %s' % dn) + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search ' + dn + ': ' + e.message['desc']) + assert False + + +def test_48295_init(topology): + """ + Set up Linked Attribute + """ + _header(topology, 'Testing Ticket 48295 - Entry cache is not rolled back -- Linked Attributes plug-in - wrong behaviour when adding valid and broken links') + + log.info('Enable Dynamic plugins, and the linked Attrs plugin') + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-dynamic-plugins', 'on')]) + except ldap.LDAPError as e: + ldap.fatal('Failed to enable dynamic plugin!' + e.message['desc']) + assert False + + try: + topology.standalone.plugins.enable(name=PLUGIN_LINKED_ATTRS) + except ValueError as e: + ldap.fatal('Failed to enable linked attributes plugin!' + e.message['desc']) + assert False + + log.info('Add the plugin config entry') + try: + topology.standalone.add_s(Entry((MANAGER_LINK, { + 'objectclass': 'top extensibleObject'.split(), + 'cn': 'Manager Link', + 'linkType': LINKTYPE, + 'managedType': MANAGEDTYPE + }))) + except ldap.LDAPError as e: + log.fatal('Failed to add linked attr config entry: error ' + e.message['desc']) + assert False + + log.info('Add 2 entries: manager1 and employee1') + try: + topology.standalone.add_s(Entry(('uid=manager1,%s' % OU_PEOPLE, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'manager1'}))) + except ldap.LDAPError as e: + log.fatal('Add manager1 failed: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry(('uid=employee1,%s' % OU_PEOPLE, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'employee1'}))) + except ldap.LDAPError as e: + log.fatal('Add employee1 failed: error ' + e.message['desc']) + assert False + + log.info('PASSED') + + +def test_48295_run(topology): + """ + Add 2 linktypes - one exists, another does not + """ + + _header(topology, 'Add 2 linktypes to manager1 - one exists, another does not to make sure the managed entry does not have managed type.') + try: + topology.standalone.modify_s('uid=manager1,%s' % OU_PEOPLE, + [(ldap.MOD_ADD, LINKTYPE, 'uid=employee1,%s' % OU_PEOPLE), + (ldap.MOD_ADD, LINKTYPE, 'uid=doNotExist,%s' % OU_PEOPLE)]) + except ldap.UNWILLING_TO_PERFORM: + log.info('Add uid=employee1 and uid=doNotExist expectedly failed.') + pass + + log.info('Check managed attribute does not exist.') + check_attr_val(topology, 'uid=employee1,%s' % OU_PEOPLE, MANAGEDTYPE, 'uid=manager1,%s' % OU_PEOPLE, True) + + log.info('PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48312_test.py b/dirsrvtests/tests/tickets/ticket48312_test.py new file mode 100644 index 0000000..0989279 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48312_test.py @@ -0,0 +1,168 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def test_ticket48312(topology): + """ + Configure managed entries plugins(tempalte/definition), then perform a + modrdn(deleteoldrdn 1), and make sure the server does not crash. + """ + + GROUP_OU = 'ou=groups,' + DEFAULT_SUFFIX + PEOPLE_OU = 'ou=people,' + DEFAULT_SUFFIX + USER_DN = 'uid=user1,ou=people,' + DEFAULT_SUFFIX + CONFIG_DN = 'cn=config,cn=' + PLUGIN_MANAGED_ENTRY + ',cn=plugins,cn=config' + TEMPLATE_DN = 'cn=MEP Template,' + DEFAULT_SUFFIX + USER_NEWRDN = 'uid=\+user1' + + # + # First enable dynamic plugins + # + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-dynamic-plugins', 'on')]) + except ldap.LDAPError as e: + ldap.fatal('Failed to enable dynamic plugin!' + e.message['desc']) + assert False + topology.standalone.plugins.enable(name=PLUGIN_MANAGED_ENTRY) + + # + # Add our org units (they should already exist, but do it just in case) + # + try: + topology.standalone.add_s(Entry((PEOPLE_OU, { + 'objectclass': 'top extensibleObject'.split(), + 'ou': 'people'}))) + except ldap.ALREADY_EXISTS: + pass + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to add people org unit: error ' + e.message['desc']) + assert False + + try: + topology.standalone.add_s(Entry((GROUP_OU, { + 'objectclass': 'top extensibleObject'.split(), + 'ou': 'people'}))) + except ldap.ALREADY_EXISTS: + pass + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to add people org unit: error ' + e.message['desc']) + assert False + + # + # Add the template entry + # + try: + topology.standalone.add_s(Entry((TEMPLATE_DN, { + 'objectclass': 'top mepTemplateEntry extensibleObject'.split(), + 'cn': 'MEP Template', + 'mepRDNAttr': 'cn', + 'mepStaticAttr': ['objectclass: posixGroup', 'objectclass: extensibleObject'], + 'mepMappedAttr': ['cn: $uid', 'uid: $cn', 'gidNumber: $uidNumber'] + }))) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to add template entry: error ' + e.message['desc']) + assert False + + # + # Add the definition entry + # + try: + topology.standalone.add_s(Entry((CONFIG_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'cn': 'config', + 'originScope': PEOPLE_OU, + 'originFilter': 'objectclass=posixAccount', + 'managedBase': GROUP_OU, + 'managedTemplate': TEMPLATE_DN + }))) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to add config entry: error ' + e.message['desc']) + assert False + + # + # Add an entry that meets the MEP scope + # + try: + topology.standalone.add_s(Entry((USER_DN, { + 'objectclass': 'top posixAccount extensibleObject'.split(), + 'uid': 'user1', + 'cn': 'user1', + 'uidNumber': '1', + 'gidNumber': '1', + 'homeDirectory': '/home/user1', + 'description': 'uiser description' + }))) + except ldap.LDAPError as e: + log.fatal('test_mep: Failed to user1: error ' + e.message['desc']) + assert False + + # + # Perform a modrdn on USER_DN + # + try: + topology.standalone.rename_s(USER_DN, USER_NEWRDN, delold=1) + except ldap.LDAPError as e: + log.error('Failed to modrdn: error ' + e.message['desc']) + assert False + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) \ No newline at end of file diff --git a/dirsrvtests/tests/tickets/ticket48325_test.py b/dirsrvtests/tests/tickets/ticket48325_test.py new file mode 100644 index 0000000..3505d1a --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48325_test.py @@ -0,0 +1,270 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyReplication(object): + def __init__(self, master1, hub1, consumer1): + master1.open() + self.master1 = master1 + hub1.open() + self.hub1 = hub1 + consumer1.open() + self.consumer1 = consumer1 + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating master 1... + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_1) + + # Creating hub 1... + hub1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_HUB_1 + args_instance[SER_PORT] = PORT_HUB_1 + args_instance[SER_SERVERID_PROP] = SERVERID_HUB_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_hub = args_instance.copy() + hub1.allocate(args_hub) + instance_hub1 = hub1.exists() + if instance_hub1: + hub1.delete() + hub1.create() + hub1.open() + hub1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_HUB, + replicaId=REPLICAID_HUB_1) + + # Creating consumer 1... + consumer1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_CONSUMER_1 + args_instance[SER_PORT] = PORT_CONSUMER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_CONSUMER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_consumer = args_instance.copy() + consumer1.allocate(args_consumer) + instance_consumer1 = consumer1.exists() + if instance_consumer1: + consumer1.delete() + consumer1.create() + consumer1.open() + consumer1.changelog.create() + consumer1.replica.enableReplication(suffix=SUFFIX, + role=REPLICAROLE_CONSUMER, + replicaId=CONSUMER_REPLICAID) + + # + # Create all the agreements + # + # Creating agreement from master 1 to hub 1 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_h1_agmt = master1.agreement.create(suffix=SUFFIX, host=hub1.host, + port=hub1.port, + properties=properties) + if not m1_h1_agmt: + log.fatal("Fail to create a master -> hub replica agreement") + sys.exit(1) + log.debug("%s created" % m1_h1_agmt) + + # Creating agreement from hub 1 to consumer 1 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + h1_c1_agmt = hub1.agreement.create(suffix=SUFFIX, host=consumer1.host, + port=consumer1.port, + properties=properties) + if not h1_c1_agmt: + log.fatal("Fail to create a hub -> consumer replica agreement") + sys.exit(1) + log.debug("%s created" % h1_c1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_HUB_1, PORT_HUB_1) + master1.waitForReplInit(m1_h1_agmt) + hub1.agreement.init(SUFFIX, HOST_CONSUMER_1, PORT_CONSUMER_1) + hub1.waitForReplInit(h1_c1_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, consumer1): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Delete each instance in the end + def fin(): + master1.delete() + hub1.delete() + consumer1.delete() + pass + + request.addfinalizer(fin) + + # Clear out the tmp dir + master1.clearTmpDir(__file__) + + return TopologyReplication(master1, hub1, consumer1) + + +def checkFirstElement(ds, rid): + """ + Return True if the first RUV element is for the specified rid + """ + try: + entry = ds.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + REPLICA_RUV_FILTER, + ['nsds50ruv']) + assert entry + entry = entry[0] + except ldap.LDAPError as e: + log.fatal('Failed to retrieve RUV entry: %s' % str(e)) + assert False + + ruv_elements = entry.getValues('nsds50ruv') + if ('replica %s ' % rid) in ruv_elements[1]: + return True + else: + return False + + +def test_ticket48325(topology): + """ + Test that the RUV element order is correctly maintained when promoting + a hub or consumer. + """ + + # + # Promote consumer to master + # + try: + DN = topology.consumer1.replica._get_mt_entry(DEFAULT_SUFFIX) + topology.consumer1.modify_s(DN, [(ldap.MOD_REPLACE, + 'nsDS5ReplicaType', + '3'), + (ldap.MOD_REPLACE, + 'nsDS5ReplicaID', + '1234'), + (ldap.MOD_REPLACE, + 'nsDS5Flags', + '1')]) + except ldap.LDAPError as e: + log.fatal('Failed to promote consuemr to master: error %s' % str(e)) + assert False + time.sleep(1) + + # + # Check ruv has been reordered + # + if not checkFirstElement(topology.consumer1, '1234'): + log.fatal('RUV was not reordered') + assert False + + # + # Create repl agreement from the newly promoted master to master1 + # + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + new_agmt = topology.consumer1.agreement.create(suffix=SUFFIX, + host=topology.master1.host, + port=topology.master1.port, + properties=properties) + + if not new_agmt: + log.fatal("Fail to create new agmt from old consumer to the master") + assert False + + # + # Test replication is working + # + if topology.consumer1.testReplication(DEFAULT_SUFFIX, topology.master1): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # + # Promote hub to master + # + try: + DN = topology.hub1.replica._get_mt_entry(DEFAULT_SUFFIX) + topology.hub1.modify_s(DN, [(ldap.MOD_REPLACE, + 'nsDS5ReplicaType', + '3'), + (ldap.MOD_REPLACE, + 'nsDS5ReplicaID', + '5678')]) + except ldap.LDAPError as e: + log.fatal('Failed to promote consuemr to master: error %s' % str(e)) + assert False + time.sleep(1) + + # + # Check ruv has been reordered + # + if not checkFirstElement(topology.hub1, '5678'): + log.fatal('RUV was not reordered') + assert False + + # + # Test replication is working + # + if topology.hub1.testReplication(DEFAULT_SUFFIX, topology.master1): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Done + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) \ No newline at end of file diff --git a/dirsrvtests/tests/tickets/ticket48342_test.py b/dirsrvtests/tests/tickets/ticket48342_test.py new file mode 100644 index 0000000..de0dea9 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48342_test.py @@ -0,0 +1,316 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +PEOPLE_OU = 'people' +PEOPLE_DN = "ou=%s,%s" % (PEOPLE_OU, SUFFIX) +MAX_ACCOUNTS = 5 + + +class TopologyReplication(object): + def __init__(self, master1, master2, master3): + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + master3.open() + self.master3 = master3 + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating master 1... + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + master2 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # Creating master 3... + master3 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_MASTER_3 + args_instance[SER_PORT] = PORT_MASTER_3 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_3 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master3.allocate(args_master) + instance_master3 = master3.exists() + if instance_master3: + master3.delete() + master3.create() + master3.open() + master3.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_3) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 1 to master 3 +# properties = {RA_NAME: r'meTo_$host:$port', +# RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], +# RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], +# RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], +# RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} +# m1_m3_agmt = master1.agreement.create(suffix=SUFFIX, host=master3.host, port=master3.port, properties=properties) +# if not m1_m3_agmt: +# log.fatal("Fail to create a master -> master replica agreement") +# sys.exit(1) +# log.debug("%s created" % m1_m3_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Creating agreement from master 2 to master 3 + properties = {RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m3_agmt = master2.agreement.create(suffix=SUFFIX, host=master3.host, port=master3.port, properties=properties) + if not m2_m3_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m3_agmt) + + # Creating agreement from master 3 to master 1 +# properties = {RA_NAME: r'meTo_$host:$port', +# RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], +# RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], +# RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], +# RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} +# m3_m1_agmt = master3.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) +# if not m3_m1_agmt: +# log.fatal("Fail to create a master -> master replica agreement") +# sys.exit(1) +# log.debug("%s created" % m3_m1_agmt) + + # Creating agreement from master 3 to master 2 + properties = {RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m3_m2_agmt = master3.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m3_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m3_m2_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + time.sleep(5) # just to be safe + master2.agreement.init(SUFFIX, HOST_MASTER_3, PORT_MASTER_3) + master2.waitForReplInit(m2_m3_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Delete each instance in the end + def fin(): + for master in (master1, master2, master3): + master.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + master1.clearTmpDir(__file__) + + return TopologyReplication(master1, master2, master3) + + +def _dna_config(server, nextValue=500, maxValue=510): + log.info("Add dna plugin config entry...%s" % server) + + try: + server.add_s(Entry(('cn=dna config,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config', { + 'objectclass': 'top dnaPluginConfig'.split(), + 'dnaType': 'description', + 'dnaMagicRegen': '-1', + 'dnaFilter': '(objectclass=posixAccount)', + 'dnaScope': 'ou=people,%s' % SUFFIX, + 'dnaNextValue': str(nextValue), + 'dnaMaxValue' : str(nextValue+maxValue), + 'dnaSharedCfgDN': 'ou=ranges,%s' % SUFFIX + }))) + + except ldap.LDAPError as e: + log.error('Failed to add DNA config entry: error ' + e.message['desc']) + assert False + + log.info("Enable the DNA plugin...") + try: + server.plugins.enable(name=PLUGIN_DNA) + except e: + log.error("Failed to enable DNA Plugin: error " + e.message['desc']) + assert False + + log.info("Restarting the server...") + server.stop(timeout=120) + time.sleep(1) + server.start(timeout=120) + time.sleep(3) + + +def test_ticket4026(topology): + """Write your replication testcase here. + + To access each DirSrv instance use: topology.master1, topology.master2, + ..., topology.hub1, ..., topology.consumer1, ... + + Also, if you need any testcase initialization, + please, write additional fixture for that(include finalizer). + """ + + try: + topology.master1.add_s(Entry((PEOPLE_DN, { + 'objectclass': "top extensibleObject".split(), + 'ou': 'people'}))) + except ldap.ALREADY_EXISTS: + pass + + topology.master1.add_s(Entry(('ou=ranges,' + SUFFIX, { + 'objectclass': 'top organizationalunit'.split(), + 'ou': 'ranges' + }))) + for cpt in range(MAX_ACCOUNTS): + name = "user%d" % (cpt) + topology.master1.add_s(Entry(("uid=%s,%s" %(name, PEOPLE_DN), { + 'objectclass': 'top posixAccount extensibleObject'.split(), + 'uid': name, + 'cn': name, + 'uidNumber': '1', + 'gidNumber': '1', + 'homeDirectory': '/home/%s' % name + }))) + + # make master3 having more free slots that master2 + # so master1 will contact master3 + _dna_config(topology.master1, nextValue=100, maxValue=10) + _dna_config(topology.master2, nextValue=200, maxValue=10) + _dna_config(topology.master3, nextValue=300, maxValue=3000) + + # Turn on lots of error logging now. + + mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '16384')] + #mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '1')] + topology.master1.modify_s('cn=config', mod) + topology.master2.modify_s('cn=config', mod) + topology.master3.modify_s('cn=config', mod) + + # We need to wait for the event in dna.c to fire to start the servers + # see dna.c line 899 + time.sleep(60) + + # add on master1 users with description DNA + for cpt in range(10): + name = "user_with_desc1_%d" % (cpt) + topology.master1.add_s(Entry(("uid=%s,%s" %(name, PEOPLE_DN), { + 'objectclass': 'top posixAccount extensibleObject'.split(), + 'uid': name, + 'cn': name, + 'description' : '-1', + 'uidNumber': '1', + 'gidNumber': '1', + 'homeDirectory': '/home/%s' % name + }))) + # give time to negociate master1 <--> master3 + time.sleep(10) + # add on master1 users with description DNA + for cpt in range(11,20): + name = "user_with_desc1_%d" % (cpt) + topology.master1.add_s(Entry(("uid=%s,%s" %(name, PEOPLE_DN), { + 'objectclass': 'top posixAccount extensibleObject'.split(), + 'uid': name, + 'cn': name, + 'description' : '-1', + 'uidNumber': '1', + 'gidNumber': '1', + 'homeDirectory': '/home/%s' % name + }))) + log.info('Test complete') + # add on master1 users with description DNA + mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '16384')] + #mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '1')] + topology.master1.modify_s('cn=config', mod) + topology.master2.modify_s('cn=config', mod) + topology.master3.modify_s('cn=config', mod) + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48354_test.py b/dirsrvtests/tests/tickets/ticket48354_test.py new file mode 100644 index 0000000..53e1316 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48354_test.py @@ -0,0 +1,109 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +DEBUGGING = False + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) + + +log = logging.getLogger(__name__) + + +class TopologyStandalone(object): + """The DS Topology Class""" + def __init__(self, standalone): + """Init""" + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + """Create DS Deployment""" + + # Creating standalone instance ... + if DEBUGGING: + standalone = DirSrv(verbose=True) + else: + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + """If we are debugging just stop the instances, otherwise remove + them + """ + if DEBUGGING: + standalone.stop(60) + else: + standalone.delete() + + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def _attr_present(conn, name): + results = conn.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(%s=*)' % name, [name,]) + if DEBUGGING: + print(results) + if len(results) > 0: + return True + return False + +def test_ticket48354(topology): + """ + Test that we cannot view ACIs, userPassword, or certain other attributes as anonymous. + """ + + if DEBUGGING: + # Add debugging steps(if any)... + pass + + # Do an anonymous bind + conn = ldap.initialize("ldap://%s:%s" % (HOST_STANDALONE, PORT_STANDALONE)) + conn.simple_bind_s() + + # Make sure that we cannot see: + # * userPassword + assert(not _attr_present(conn, 'userPassword')) + # * aci + assert(not _attr_present(conn, 'aci')) + # * anything else? + + conn.unbind_s() + + log.info('Test PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket48362_test.py b/dirsrvtests/tests/tickets/ticket48362_test.py new file mode 100644 index 0000000..0fa8037 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48362_test.py @@ -0,0 +1,262 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +PEOPLE_OU='people' +PEOPLE_DN = "ou=%s,%s" % (PEOPLE_OU, SUFFIX) +MAX_ACCOUNTS=5 + +BINDMETHOD_ATTR = 'dnaRemoteBindMethod' +BINDMETHOD_VALUE = "SASL/GSSAPI" +PROTOCOLE_ATTR = 'dnaRemoteConnProtocol' +PROTOCOLE_VALUE = 'LDAP' + + +class TopologyReplication(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + + # Creating master 1... + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + master2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Delete each instance in the end + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + return TopologyReplication(master1, master2) + + +def _dna_config(server, nextValue=500, maxValue=510): + log.info("Add dna plugin config entry...%s" % server) + + cfg_base_dn = 'cn=dna config,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config' + + try: + server.add_s(Entry((cfg_base_dn, { + 'objectclass': 'top dnaPluginConfig'.split(), + 'dnaType': 'description', + 'dnaMagicRegen': '-1', + 'dnaFilter': '(objectclass=posixAccount)', + 'dnaScope': 'ou=people,%s' % SUFFIX, + 'dnaNextValue': str(nextValue), + 'dnaMaxValue' : str(nextValue+maxValue), + 'dnaSharedCfgDN': 'ou=ranges,%s' % SUFFIX + }))) + + except ldap.LDAPError as e: + log.error('Failed to add DNA config entry: error ' + e.message['desc']) + assert False + + log.info("Enable the DNA plugin...") + try: + server.plugins.enable(name=PLUGIN_DNA) + except e: + log.error("Failed to enable DNA Plugin: error " + e.message['desc']) + assert False + + log.info("Restarting the server...") + server.stop(timeout=120) + time.sleep(1) + server.start(timeout=120) + time.sleep(3) + + +SHARE_CFG_BASE = 'ou=ranges,' + SUFFIX + +def _wait_shared_cfg_servers(server, expected): + attempts = 0 + ents = [] + try: + ents = server.search_s(SHARE_CFG_BASE, ldap.SCOPE_ONELEVEL, "(objectclass=*)") + except ldap.NO_SUCH_OBJECT: + pass + except lib389.NoSuchEntryError: + pass + while (len(ents) != expected): + assert attempts < 10 + time.sleep(5) + try: + ents = server.search_s(SHARE_CFG_BASE, ldap.SCOPE_ONELEVEL, "(objectclass=*)") + except ldap.NO_SUCH_OBJECT: + pass + except lib389.NoSuchEntryError: + pass + +def _shared_cfg_server_update(server, method=BINDMETHOD_VALUE, transport=PROTOCOLE_VALUE): + log.info('\n======================== Update dnaPortNum=%d ============================\n'% server.port) + try: + ent = server.getEntry(SHARE_CFG_BASE, ldap.SCOPE_ONELEVEL, "(dnaPortNum=%d)" % server.port) + mod = [(ldap.MOD_REPLACE, BINDMETHOD_ATTR, method), + (ldap.MOD_REPLACE, PROTOCOLE_ATTR, transport)] + server.modify_s(ent.dn, mod) + + log.info('\n======================== Update done\n') + ent = server.getEntry(SHARE_CFG_BASE, ldap.SCOPE_ONELEVEL, "(dnaPortNum=%d)" % server.port) + except ldap.NO_SUCH_OBJECT: + log.fatal("Unknown host") + assert False + + +def test_ticket48362(topology): + """Write your replication testcase here. + + To access each DirSrv instance use: topology.master1, topology.master2, + ..., topology.hub1, ..., topology.consumer1, ... + + Also, if you need any testcase initialization, + please, write additional fixture for that(include finalizer). + """ + + try: + topology.master1.add_s(Entry((PEOPLE_DN, { + 'objectclass': "top extensibleObject".split(), + 'ou': 'people'}))) + except ldap.ALREADY_EXISTS: + pass + + topology.master1.add_s(Entry((SHARE_CFG_BASE, { + 'objectclass': 'top organizationalunit'.split(), + 'ou': 'ranges' + }))) + # master 1 will have a valid remaining range (i.e. 101) + # master 2 will not have a valid remaining range (i.e. 0) so dna servers list on master2 + # will not contain master 2. So at restart, master 2 is recreated without the method/protocol attribute + _dna_config(topology.master1, nextValue=1000, maxValue=100) + _dna_config(topology.master2, nextValue=2000, maxValue=-1) + + # check we have all the servers available + _wait_shared_cfg_servers(topology.master1, 2) + _wait_shared_cfg_servers(topology.master2, 2) + + # now force the method/transport on the servers entry + _shared_cfg_server_update(topology.master1) + _shared_cfg_server_update(topology.master2) + + + + log.info('\n======================== BEFORE RESTART ============================\n') + ent = topology.master1.getEntry(SHARE_CFG_BASE, ldap.SCOPE_ONELEVEL, "(dnaPortNum=%d)" % topology.master1.port) + log.info('\n======================== BEFORE RESTART ============================\n') + assert(ent.hasAttr(BINDMETHOD_ATTR) and ent.getValue(BINDMETHOD_ATTR) == BINDMETHOD_VALUE) + assert(ent.hasAttr(PROTOCOLE_ATTR) and ent.getValue(PROTOCOLE_ATTR) == PROTOCOLE_VALUE) + + + ent = topology.master2.getEntry(SHARE_CFG_BASE, ldap.SCOPE_ONELEVEL, "(dnaPortNum=%d)" % topology.master2.port) + log.info('\n======================== BEFORE RESTART ============================\n') + assert(ent.hasAttr(BINDMETHOD_ATTR) and ent.getValue(BINDMETHOD_ATTR) == BINDMETHOD_VALUE) + assert(ent.hasAttr(PROTOCOLE_ATTR) and ent.getValue(PROTOCOLE_ATTR) == PROTOCOLE_VALUE) + topology.master1.restart(10) + topology.master2.restart(10) + + # to allow DNA plugin to recreate the local host entry + time.sleep(40) + + log.info('\n=================== AFTER RESTART =================================\n') + ent = topology.master1.getEntry(SHARE_CFG_BASE, ldap.SCOPE_ONELEVEL, "(dnaPortNum=%d)" % topology.master1.port) + log.info('\n=================== AFTER RESTART =================================\n') + assert(ent.hasAttr(BINDMETHOD_ATTR) and ent.getValue(BINDMETHOD_ATTR) == BINDMETHOD_VALUE) + assert(ent.hasAttr(PROTOCOLE_ATTR) and ent.getValue(PROTOCOLE_ATTR) == PROTOCOLE_VALUE) + + ent = topology.master2.getEntry(SHARE_CFG_BASE, ldap.SCOPE_ONELEVEL, "(dnaPortNum=%d)" % topology.master2.port) + log.info('\n=================== AFTER RESTART =================================\n') + assert(ent.hasAttr(BINDMETHOD_ATTR) and ent.getValue(BINDMETHOD_ATTR) == BINDMETHOD_VALUE) + assert(ent.hasAttr(PROTOCOLE_ATTR) and ent.getValue(PROTOCOLE_ATTR) == PROTOCOLE_VALUE) + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48366_test.py b/dirsrvtests/tests/tickets/ticket48366_test.py new file mode 100644 index 0000000..c785d30 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48366_test.py @@ -0,0 +1,195 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from ldap.controls.simple import ProxyAuthzControl + +log = logging.getLogger(__name__) + +installation_prefix = None + +PROXY_USER_DN = 'cn=proxy,ou=people,%s' % SUFFIX +TEST_USER_DN = 'cn=test,ou=people,%s' % SUFFIX +USER_PW = 'password' + + +# subtrees used in test +SUBTREE_GREEN = "ou=green,%s" % SUFFIX +SUBTREE_RED = "ou=red,%s" % SUFFIX +SUBTREES = (SUBTREE_GREEN, SUBTREE_RED) + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket48366_init(topology): + """ + It creates identical entries in 3 subtrees + It creates aci which allow access to a set of attrs + in two of these subtrees for bound users + It creates a user to be used for test + + """ + + + topology.standalone.log.info("Add subtree: %s" % SUBTREE_GREEN) + topology.standalone.add_s(Entry((SUBTREE_GREEN, { + 'objectclass': "top organizationalunit".split(), + 'ou': "green_one"}))) + topology.standalone.log.info("Add subtree: %s" % SUBTREE_RED) + topology.standalone.add_s(Entry((SUBTREE_RED, { + 'objectclass': "top organizationalunit".split(), + 'ou': "red"}))) + + # add proxy user and test user + topology.standalone.log.info("Add %s" % TEST_USER_DN) + topology.standalone.add_s(Entry((TEST_USER_DN, { + 'objectclass': "top person".split(), + 'sn': 'test', + 'cn': 'test', + 'userpassword': USER_PW}))) + topology.standalone.log.info("Add %s" % PROXY_USER_DN) + topology.standalone.add_s(Entry((PROXY_USER_DN, { + 'objectclass': "top person".split(), + 'sn': 'proxy', + 'cn': 'proxy', + 'userpassword': USER_PW}))) + + # enable acl error logging + # mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '128')] + # topology.standalone.modify_s(DN_CONFIG, mod) + + # get rid of default ACIs + mod = [(ldap.MOD_DELETE, 'aci', None)] + topology.standalone.modify_s(SUFFIX, mod) + + # Ok Now add the proper ACIs + ACI_TARGET = "(target = \"ldap:///%s\")" % SUBTREE_GREEN + ACI_TARGETATTR = "(targetattr = \"objectclass || cn || sn || uid || givenname \")" + ACI_ALLOW = "(version 3.0; acl \"Allow search-read to green subtree\"; allow (read, search, compare)" + ACI_SUBJECT = " userdn = \"ldap:///%s\";)" % TEST_USER_DN + ACI_BODY = ACI_TARGET + ACI_TARGETATTR + ACI_ALLOW + ACI_SUBJECT + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + topology.standalone.modify_s(SUFFIX, mod) + + ACI_ALLOW = "(version 3.0; acl \"Allow use pf proxy auth to green subtree\"; allow (proxy)" + ACI_SUBJECT = " userdn = \"ldap:///%s\";)" % PROXY_USER_DN + ACI_BODY = ACI_TARGET + ACI_TARGETATTR + ACI_ALLOW + ACI_SUBJECT + mod = [(ldap.MOD_ADD, 'aci', ACI_BODY)] + topology.standalone.modify_s(SUFFIX, mod) + + log.info("Adding %d test entries...") + for id in range(2): + name = "%s%d" % ('test', id) + mail = "%s@example.com" % name + for subtree in SUBTREES: + topology.standalone.add_s(Entry(("cn=%s,%s" % (name, subtree), { + 'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'sn': name, + 'cn': name, + 'uid': name, + 'givenname': 'test', + 'mail': mail, + 'description': 'description', + 'employeenumber': "%d" % id, + 'telephonenumber': "%d%d%d" % (id,id,id), + 'mobile': "%d%d%d" % (id,id,id), + 'l': 'MV', + 'title': 'Engineer'}))) + + + +def test_ticket48366_search_user(topology): + + proxy_ctrl = ProxyAuthzControl(criticality=True, authzId="dn: "+TEST_USER_DN) + # searching as test user should return one entry from the green subtree + topology.standalone.simple_bind_s(TEST_USER_DN, PASSWORD) + ents = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, 'uid=test1') + assert (len(ents) == 1) + + # searching as proxy user should return no entry + topology.standalone.simple_bind_s(PROXY_USER_DN, PASSWORD) + ents = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, 'uid=test1') + assert (len(ents) == 0) + + # serching as proxy user, authorizing as test user should return 1 entry + ents = topology.standalone.search_ext_s(SUFFIX, ldap.SCOPE_SUBTREE, 'uid=test1', serverctrls=[proxy_ctrl]) + assert (len(ents) == 1) + +def test_ticket48366_search_dm(topology): + + # searching as directory manager should return one entries from both subtrees + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + ents = topology.standalone.search_s(SUFFIX, ldap.SCOPE_SUBTREE, 'uid=test1') + assert (len(ents) == 2) + + # searching as directory manager proxying test user should return one entry + proxy_ctrl = ProxyAuthzControl(criticality=True, authzId="dn: "+TEST_USER_DN) + ents = topology.standalone.search_ext_s(SUFFIX, ldap.SCOPE_SUBTREE, 'uid=test1', serverctrls=[proxy_ctrl]) + assert (len(ents) == 1) + + # searching as directory manager proxying proxy user should return no entry + proxy_ctrl = ProxyAuthzControl(criticality=True, authzId="dn: "+PROXY_USER_DN) + ents = topology.standalone.search_ext_s(SUFFIX, ldap.SCOPE_SUBTREE, 'uid=test1', serverctrls=[proxy_ctrl]) + assert (len(ents) == 0) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48370_test.py b/dirsrvtests/tests/tickets/ticket48370_test.py new file mode 100644 index 0000000..f5b1f47 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48370_test.py @@ -0,0 +1,236 @@ +import os +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def test_ticket48370(topology): + """ + Deleting attirbute values and readding a value does not properly update + the pres index. The values are not actually deleted from the index + """ + + DN = 'uid=user0099,' + DEFAULT_SUFFIX + + # + # Add an entry + # + topology.standalone.add_s(Entry((DN, { + 'objectclass': ['top', 'person', + 'organizationalPerson', + 'inetorgperson', + 'posixAccount'], + 'givenname': 'test', + 'sn': 'user', + 'loginshell': '/bin/bash', + 'uidNumber': '10099', + 'gidNumber': '10099', + 'gecos': 'Test User', + 'mail': ['user0099@dev.null', + 'alias@dev.null', + 'user0099@redhat.com'], + 'cn': 'Test User', + 'homeDirectory': '/home/user0099', + 'uid': 'admin2', + 'userpassword': 'password'}))) + + # + # Perform modify (delete & add mail attributes) + # + try: + topology.standalone.modify_s(DN, [(ldap.MOD_DELETE, + 'mail', + 'user0099@dev.null'), + (ldap.MOD_DELETE, + 'mail', + 'alias@dev.null'), + (ldap.MOD_ADD, + 'mail', 'user0099@dev.null')]) + except ldap.LDAPError as e: + log.fatal('Failedto modify user: ' + str(e)) + assert False + + # + # Search using deleted attribute value- no entries should be returned + # + try: + entry = topology.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + 'mail=alias@dev.null') + if entry: + log.fatal('Entry incorrectly returned') + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search for user: ' + str(e)) + assert False + + # + # Search using existing attribute value - the entry should be returned + # + try: + entry = topology.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + 'mail=user0099@dev.null') + if entry is None: + log.fatal('Entry not found, but it should have been') + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search for user: ' + str(e)) + assert False + + # + # Delete the last values + # + try: + topology.standalone.modify_s(DN, [(ldap.MOD_DELETE, + 'mail', + 'user0099@dev.null'), + (ldap.MOD_DELETE, + 'mail', + 'user0099@redhat.com') + ]) + except ldap.LDAPError as e: + log.fatal('Failed to modify user: ' + str(e)) + assert False + + # + # Search using deleted attribute value - no entries should be returned + # + try: + entry = topology.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + 'mail=user0099@redhat.com') + if entry: + log.fatal('Entry incorrectly returned') + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search for user: ' + str(e)) + assert False + + # + # Make sure presence index is correctly updated - no entries should be + # returned + # + try: + entry = topology.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + 'mail=*') + if entry: + log.fatal('Entry incorrectly returned') + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search for user: ' + str(e)) + assert False + + # + # Now add the attributes back, and lets run a different set of tests with + # a different number of attributes + # + try: + topology.standalone.modify_s(DN, [(ldap.MOD_ADD, + 'mail', + ['user0099@dev.null', + 'alias@dev.null'])]) + except ldap.LDAPError as e: + log.fatal('Failedto modify user: ' + str(e)) + assert False + + # + # Remove and readd some attibutes + # + try: + topology.standalone.modify_s(DN, [(ldap.MOD_DELETE, + 'mail', + 'alias@dev.null'), + (ldap.MOD_DELETE, + 'mail', + 'user0099@dev.null'), + (ldap.MOD_ADD, + 'mail', 'user0099@dev.null')]) + except ldap.LDAPError as e: + log.fatal('Failedto modify user: ' + str(e)) + assert False + + # + # Search using deleted attribute value - no entries should be returned + # + try: + entry = topology.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + 'mail=alias@dev.null') + if entry: + log.fatal('Entry incorrectly returned') + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search for user: ' + str(e)) + assert False + + # + # Search using existing attribute value - the entry should be returned + # + try: + entry = topology.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + 'mail=user0099@dev.null') + if entry is None: + log.fatal('Entry not found, but it should have been') + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search for user: ' + str(e)) + assert False + + log.info('Test PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48383_test.py b/dirsrvtests/tests/tickets/ticket48383_test.py new file mode 100644 index 0000000..c6bebcd --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48383_test.py @@ -0,0 +1,138 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +import string +import random + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + # This is useful for analysing the test env. + #standalone.db2ldif(bename=DEFAULT_BENAME, suffixes=[DEFAULT_SUFFIX], excludeSuffixes=[], encrypt=False, \ + # repl_data=True, outputfile='%s/ldif/%s.ldif' % (standalone.dbdir,SERVERID_STANDALONE )) + #standalone.clearBackupFS() + #standalone.backupFS() + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def test_ticket48383(topology): + """ + This test case will check that we re-alloc buffer sizes on import.c + + We achieve this by setting the servers dbcachesize to a stupid small value + and adding huge objects to ds. + + Then when we run db2index, either: + * If we are not using the re-alloc code, it will FAIL (Bad) + * If we re-alloc properly, it all works regardless. + """ + + topology.standalone.config.set('nsslapd-maxbersize', '200000000') + topology.standalone.restart() + + # Create some stupid huge objects / attributes in DS. + # seeAlso is indexed by default. Lets do that! + # This will take a while ... + data = [random.choice(string.letters) for x in xrange(10000000)] + s = "".join(data) + + # This was here for an iteration test. + i = 1 + USER_DN = 'uid=user%s,ou=people,%s' % (i, DEFAULT_SUFFIX) + padding = ['%s' % n for n in range(400)] + + user = Entry((USER_DN, { + 'objectclass': 'top posixAccount person extensibleObject'.split(), + 'uid': 'user%s' % (i), + 'cn': 'user%s' % (i), + 'uidNumber': '%s' % (i), + 'gidNumber': '%s' % (i), + 'homeDirectory': '/home/user%s' % (i), + 'description': 'user description', + 'sn' : s , + 'padding' : padding , + })) + + try: + topology.standalone.add_s(user) + except ldap.LDAPError as e: + log.fatal('test 48383: Failed to user%s: error %s ' % (i, e.message['desc'])) + assert False + + # Set the dbsize really low. + try: + topology.standalone.modify_s(DEFAULT_BENAME, [(ldap.MOD_REPLACE, + 'nsslapd-cachememsize', '1')]) + except ldap.LDAPError as e: + log.fatal('Failed to change nsslapd-cachememsize ' + e.message['desc']) + + ## Does ds try and set a minimum possible value for this? + ## Yes: [16/Feb/2016:16:39:18 +1000] - WARNING: cache too small, increasing to 500K bytes + # Given the formula, by default, this means DS will make the buffsize 400k + # So an object with a 1MB attribute should break indexing + + # stop the server + topology.standalone.stop(timeout=30) + # Now export and import the DB. It's easier than db2index ... + topology.standalone.db2ldif(bename=DEFAULT_BENAME, suffixes=[DEFAULT_SUFFIX], excludeSuffixes=[], encrypt=False, \ + repl_data=True, outputfile='%s/ldif/%s.ldif' % (topology.standalone.dbdir,SERVERID_STANDALONE )) + + result = topology.standalone.ldif2db(DEFAULT_BENAME, None, None, False, '%s/ldif/%s.ldif' % (topology.standalone.dbdir,SERVERID_STANDALONE )) + + assert(result) + + # see if user1 exists at all .... + + result_user = topology.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=user1)') + + assert(len(result_user) > 0) + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48497_test.py b/dirsrvtests/tests/tickets/ticket48497_test.py new file mode 100644 index 0000000..3130fc4 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48497_test.py @@ -0,0 +1,158 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +NEW_ACCOUNT = "new_account" +MAX_ACCOUNTS = 20 + +MIXED_VALUE = "/home/mYhOmEdIrEcToRy" +LOWER_VALUE = "/home/myhomedirectory" +HOMEDIRECTORY_INDEX = 'cn=homeDirectory,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config' +HOMEDIRECTORY_CN = "homedirectory" +MATCHINGRULE = 'nsMatchingRule' +UIDNUMBER_INDEX = 'cn=uidnumber,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config' +UIDNUMBER_CN = "uidnumber" + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def test_ticket48497_init(topology): + log.info("Initialization: add dummy entries for the tests") + for cpt in range(MAX_ACCOUNTS): + name = "%s%d" % (NEW_ACCOUNT, cpt) + topology.standalone.add_s(Entry(("uid=%s,%s" % (name, SUFFIX), { + 'objectclass': "top posixAccount".split(), + 'uid': name, + 'cn': name, + 'uidnumber': str(111), + 'gidnumber': str(222), + 'homedirectory': "/home/tb_%d" % cpt}))) + + +def test_ticket48497_homeDirectory_mixed_value(topology): + # Set a homedirectory value with mixed case + name = "uid=%s1,%s" % (NEW_ACCOUNT, SUFFIX) + mod = [(ldap.MOD_REPLACE, 'homeDirectory', MIXED_VALUE)] + topology.standalone.modify_s(name, mod) + + +def test_ticket48497_extensible_search(topology): + name = "uid=%s1,%s" % (NEW_ACCOUNT, SUFFIX) + + # check with the exact stored value + log.info("Default: can retrieve an entry filter syntax with exact stored value") + ent = topology.standalone.getEntry(name, ldap.SCOPE_BASE, "(homeDirectory=%s)" % MIXED_VALUE) + log.info("Default: can retrieve an entry filter caseExactIA5Match with exact stored value") + ent = topology.standalone.getEntry(name, ldap.SCOPE_BASE, "(homeDirectory:caseExactIA5Match:=%s)" % MIXED_VALUE) + + # check with a lower case value that is different from the stored value + log.info("Default: can not retrieve an entry filter syntax match with lowered stored value") + try: + ent = topology.standalone.getEntry(name, ldap.SCOPE_BASE, "(homeDirectory=%s)" % LOWER_VALUE) + assert ent is None + except ldap.NO_SUCH_OBJECT: + pass + log.info("Default: can not retrieve an entry filter caseExactIA5Match with lowered stored value") + try: + ent = topology.standalone.getEntry(name, ldap.SCOPE_BASE, "(homeDirectory:caseExactIA5Match:=%s)" % LOWER_VALUE) + assert ent is None + except ldap.NO_SUCH_OBJECT: + pass + log.info("Default: can retrieve an entry filter caseIgnoreIA5Match with lowered stored value") + ent = topology.standalone.getEntry(name, ldap.SCOPE_BASE, "(homeDirectory:caseIgnoreIA5Match:=%s)" % LOWER_VALUE) + + +def test_ticket48497_homeDirectory_index_cfg(topology): + log.info("\n\nindex homeDirectory in caseIgnoreIA5Match and caseExactIA5Match") + try: + ent = topology.standalone.getEntry(HOMEDIRECTORY_INDEX, ldap.SCOPE_BASE) + except ldap.NO_SUCH_OBJECT: + topology.standalone.add_s(Entry((HOMEDIRECTORY_INDEX, { + 'objectclass': "top nsIndex".split(), + 'cn': HOMEDIRECTORY_CN, + 'nsSystemIndex': 'false', + 'nsIndexType': 'eq'}))) + + IGNORE_MR_NAME='caseIgnoreIA5Match' + EXACT_MR_NAME='caseExactIA5Match' + mod = [(ldap.MOD_REPLACE, MATCHINGRULE, (IGNORE_MR_NAME, EXACT_MR_NAME))] + topology.standalone.modify_s(HOMEDIRECTORY_INDEX, mod) + + +def test_ticket48497_homeDirectory_index_run(topology): + args = {TASK_WAIT: True} + topology.standalone.tasks.reindex(suffix=SUFFIX, attrname='homeDirectory', args=args) + + log.info("Check indexing succeeded with a specified matching rule") + file_path = os.path.join(topology.standalone.prefix, "var/log/dirsrv/slapd-%s/errors" % topology.standalone.serverid) + file_obj = open(file_path, "r") + + # Check if the MR configuration failure occurs + regex = re.compile("unknown or invalid matching rule") + while True: + line = file_obj.readline() + found = regex.search(line) + if ((line == '') or (found)): + break + + if (found): + log.info("The configuration of a specific MR fails") + log.info(line) + assert 0 + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48637_test.py b/dirsrvtests/tests/tickets/ticket48637_test.py new file mode 100644 index 0000000..2bf0321 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48637_test.py @@ -0,0 +1,197 @@ +import os +import ldap +import time +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +DEBUGGING = False + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + + +USER_DN = "uid=test,ou=people,dc=example,dc=com" +GROUP_DN = "cn=group,dc=example,dc=com" +GROUP_OU = "ou=groups,dc=example,dc=com" +PEOPLE_OU = "ou=people,dc=example,dc=com" +MEP_OU = "ou=mep,dc=example,dc=com" +MEP_TEMPLATE = "cn=mep template,dc=example,dc=com" +AUTO_DN = "cn=All Users,cn=Auto Membership Plugin,cn=plugins,cn=config" +MEP_DN = "cn=MEP Definition,cn=Managed Entries,cn=plugins,cn=config" + + +class TopologyStandalone(object): + """The DS Topology Class""" + def __init__(self, standalone): + """Init""" + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + """Create DS Deployment""" + + # Creating standalone instance ... + if DEBUGGING: + standalone = DirSrv(verbose=True) + else: + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + """If we are debugging just stop the instances, otherwise remove + them + """ + if DEBUGGING: + standalone.stop() + else: + standalone.delete() + + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + + +def test_ticket48637(topology): + """Test for entry cache corruption + + This requires automember and managed entry plugins to be configured. + + Then remove the group that automember would use to trigger a failure when + adding a new entry. Automember fails, and then managed entry also fails. + + Make sure a base search on the entry returns error 32 + """ + + if DEBUGGING: + # Add debugging steps(if any)... + pass + + # + # Add our setup entries + # + try: + topology.standalone.add_s(Entry((PEOPLE_OU, { + 'objectclass': 'top organizationalunit'.split(), + 'ou': 'people'}))) + except ldap.ALREADY_EXISTS: + pass + except ldap.LDAPError as e: + log.fatal('Failed to add people ou: ' + str(e)) + assert False + + try: + topology.standalone.add_s(Entry((GROUP_OU, { + 'objectclass': 'top organizationalunit'.split(), + 'ou': 'groups'}))) + except ldap.ALREADY_EXISTS: + pass + except ldap.LDAPError as e: + log.fatal('Failed to add groups ou: ' + str(e)) + assert False + + try: + topology.standalone.add_s(Entry((MEP_OU, { + 'objectclass': 'top extensibleObject'.split(), + 'ou': 'mep'}))) + except ldap.LDAPError as e: + log.fatal('Failed to add MEP ou: ' + str(e)) + assert False + + try: + topology.standalone.add_s(Entry((MEP_TEMPLATE, { + 'objectclass': 'top mepTemplateEntry'.split(), + 'cn': 'mep template', + 'mepRDNAttr': 'cn', + 'mepStaticAttr': 'objectclass: groupofuniquenames', + 'mepMappedAttr': 'cn: $uid'}))) + except ldap.LDAPError as e: + log.fatal('Failed to add MEP ou: ' + str(e)) + assert False + + # + # Configure automember + # + try: + topology.standalone.add_s(Entry((AUTO_DN, { + 'cn': 'All Users', + 'objectclass': ['top', 'autoMemberDefinition'], + 'autoMemberScope': 'dc=example,dc=com', + 'autoMemberFilter': 'objectclass=person', + 'autoMemberDefaultGroup': GROUP_DN, + 'autoMemberGroupingAttr': 'uniquemember:dn'}))) + except ldap.LDAPError as e: + log.fatal('Failed to configure automember plugin : ' + str(e)) + assert False + + # + # Configure managed entry plugin + # + try: + topology.standalone.add_s(Entry((MEP_DN, { + 'cn': 'MEP Definition', + 'objectclass': ['top', 'extensibleObject'], + 'originScope': 'ou=people,dc=example,dc=com', + 'originFilter': 'objectclass=person', + 'managedBase': 'ou=groups,dc=example,dc=com', + 'managedTemplate': MEP_TEMPLATE}))) + except ldap.LDAPError as e: + log.fatal('Failed to configure managed entry plugin : ' + str(e)) + assert False + + # + # Restart DS + # + topology.standalone.restart(timeout=30) + + # + # Add entry that should fail since the automember group does not exist + # + try: + topology.standalone.add_s(Entry((USER_DN, { + 'uid': 'test', + 'objectclass': ['top', 'person', 'extensibleObject'], + 'sn': 'test', + 'cn': 'test'}))) + except ldap.LDAPError as e: + pass + + # + # Search for the entry - it should not be returned + # + try: + entry = topology.standalone.search_s(USER_DN, ldap.SCOPE_SUBTREE, + 'objectclass=*') + if entry: + log.fatal('Entry was incorrectly returned') + assert False + except ldap.NO_SUCH_OBJECT: + pass + + log.info('Test PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48665_test.py b/dirsrvtests/tests/tickets/ticket48665_test.py new file mode 100644 index 0000000..f50ab35 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48665_test.py @@ -0,0 +1,106 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + # This is useful for analysing the test env. + #standalone.db2ldif(bename=DEFAULT_BENAME, suffixes=[DEFAULT_SUFFIX], excludeSuffixes=[], encrypt=False, \ + # repl_data=True, outputfile='%s/ldif/%s.ldif' % (standalone.dbdir,SERVERID_STANDALONE )) + #standalone.clearBackupFS() + #standalone.backupFS() + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def test_ticket48665(topology): + """ + This tests deletion of certain cn=config values. + + First, it should be able to delete, and not crash the server. + + Second, we might be able to delete then add to replace values. + + We should also still be able to mod replace the values and keep the server alive. + """ + #topology.standalone.config.enable_log('audit') + #topology.standalone.config.enable_log('auditfail') + # This will trigger a mod delete then add. + try: + modlist = [(ldap.MOD_DELETE, 'nsslapd-cachememsize', None), (ldap.MOD_ADD, 'nsslapd-cachememsize', '1')] + topology.standalone.modify_s("cn=%s,cn=ldbm database,cn=plugins,cn=config" % DEFAULT_BENAME, + modlist) + except: + pass + # Check the server has not commited seppuku. + result = topology.standalone.whoami_s() + assert(DN_DM.lower() in result.lower()) + + # This has a magic hack to determine if we are in cn=config. + try: + topology.standalone.modify_s(DEFAULT_BENAME, [(ldap.MOD_REPLACE, + 'nsslapd-cachememsize', '1')]) + except ldap.LDAPError as e: + log.fatal('Failed to change nsslapd-cachememsize ' + e.message['desc']) + + # Check the server has not commited seppuku. + result = topology.standalone.whoami_s() + assert(DN_DM.lower() in result.lower()) + + # Now try with mod_replace. This should be okay. + + modlist = [(ldap.MOD_REPLACE, 'nsslapd-cachememsize', '1')] + topology.standalone.modify_s("cn=%s,cn=ldbm database,cn=plugins,cn=config" % DEFAULT_BENAME, + modlist) + # Check the server has not commited seppuku. + result = topology.standalone.whoami_s() + assert(DN_DM.lower() in result.lower()) + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48745_test.py b/dirsrvtests/tests/tickets/ticket48745_test.py new file mode 100644 index 0000000..4c23d04 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48745_test.py @@ -0,0 +1,171 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +NEW_ACCOUNT = "new_account" +MAX_ACCOUNTS = 20 + +MIXED_VALUE="/home/mYhOmEdIrEcToRy" +LOWER_VALUE="/home/myhomedirectory" +HOMEDIRECTORY_INDEX = 'cn=homeDirectory,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config' +HOMEDIRECTORY_CN="homedirectory" +MATCHINGRULE = 'nsMatchingRule' +UIDNUMBER_INDEX = 'cn=uidnumber,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config' +UIDNUMBER_CN="uidnumber" + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def test_ticket48745_init(topology): + log.info("Initialization: add dummy entries for the tests") + for cpt in range(MAX_ACCOUNTS): + name = "%s%d" % (NEW_ACCOUNT, cpt) + topology.standalone.add_s(Entry(("uid=%s,%s" % (name, SUFFIX), { + 'objectclass': "top posixAccount".split(), + 'uid': name, + 'cn': name, + 'uidnumber': str(111), + 'gidnumber': str(222), + 'homedirectory': "/home/tbordaz_%d" % cpt}))) + + +def test_ticket48745_homeDirectory_indexed_cis(topology): + log.info("\n\nindex homeDirectory in caseIgnoreIA5Match and caseExactIA5Match") + try: + ent = topology.standalone.getEntry(HOMEDIRECTORY_INDEX, ldap.SCOPE_BASE) + except ldap.NO_SUCH_OBJECT: + topology.standalone.add_s(Entry((HOMEDIRECTORY_INDEX, { + 'objectclass': "top nsIndex".split(), + 'cn': HOMEDIRECTORY_CN, + 'nsSystemIndex': 'false', + 'nsIndexType': 'eq'}))) + #log.info("attach debugger") + #time.sleep(60) + + IGNORE_MR_NAME='caseIgnoreIA5Match' + EXACT_MR_NAME='caseExactIA5Match' + mod = [(ldap.MOD_REPLACE, MATCHINGRULE, (IGNORE_MR_NAME, EXACT_MR_NAME))] + topology.standalone.modify_s(HOMEDIRECTORY_INDEX, mod) + + #topology.standalone.stop(timeout=10) + log.info("successfully checked that filter with exact mr , a filter with lowercase eq is failing") + #assert topology.standalone.db2index(bename=DEFAULT_BENAME, suffixes=None, attrs=['homeDirectory']) + #topology.standalone.start(timeout=10) + args = {TASK_WAIT: True} + topology.standalone.tasks.reindex(suffix=SUFFIX, attrname='homeDirectory', args=args) + + log.info("Check indexing succeeded with a specified matching rule") + file_path = os.path.join(topology.standalone.prefix, "var/log/dirsrv/slapd-%s/errors" % topology.standalone.serverid) + file_obj = open(file_path, "r") + + # Check if the MR configuration failure occurs + regex = re.compile("unknown or invalid matching rule") + while True: + line = file_obj.readline() + found = regex.search(line) + if ((line == '') or (found)): + break + + if (found): + log.info("The configuration of a specific MR fails") + log.info(line) + assert 0 + + +def test_ticket48745_homeDirectory_mixed_value(topology): + # Set a homedirectory value with mixed case + name = "uid=%s1,%s" % (NEW_ACCOUNT, SUFFIX) + mod = [(ldap.MOD_REPLACE, 'homeDirectory', MIXED_VALUE)] + topology.standalone.modify_s(name, mod) + + +def test_ticket48745_extensible_search_after_index(topology): + name = "uid=%s1,%s" % (NEW_ACCOUNT, SUFFIX) + + # check with the exact stored value + log.info("Default: can retrieve an entry filter syntax with exact stored value") + ent = topology.standalone.getEntry(SUFFIX, ldap.SCOPE_SUBTREE, "(homeDirectory=%s)" % MIXED_VALUE) +# log.info("attach debugger") +# time.sleep(60) + + # This search will fail because a + # subtree search with caseExactIA5Match will find a key + # where the value has been lowercase + log.info("Default: can retrieve an entry filter caseExactIA5Match with exact stored value") + ent = topology.standalone.getEntry(SUFFIX, ldap.SCOPE_SUBTREE, "(homeDirectory:caseExactIA5Match:=%s)" % MIXED_VALUE) + assert ent + + # But do additional searches.. just for more tests + # check with a lower case value that is different from the stored value + log.info("Default: can not retrieve an entry filter syntax match with lowered stored value") + try: + ent = topology.standalone.getEntry(SUFFIX, ldap.SCOPE_SUBTREE, "(homeDirectory=%s)" % LOWER_VALUE) + assert ent is None + except ldap.NO_SUCH_OBJECT: + pass + log.info("Default: can not retrieve an entry filter caseExactIA5Match with lowered stored value") + try: + ent = topology.standalone.getEntry(SUFFIX, ldap.SCOPE_SUBTREE, "(homeDirectory:caseExactIA5Match:=%s)" % LOWER_VALUE) + assert ent is None + except ldap.NO_SUCH_OBJECT: + pass + log.info("Default: can retrieve an entry filter caseIgnoreIA5Match with lowered stored value") + ent = topology.standalone.getEntry(SUFFIX, ldap.SCOPE_SUBTREE, "(homeDirectory:caseIgnoreIA5Match:=%s)" % LOWER_VALUE) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48746_test.py b/dirsrvtests/tests/tickets/ticket48746_test.py new file mode 100644 index 0000000..401b300 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48746_test.py @@ -0,0 +1,192 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +NEW_ACCOUNT = "new_account" +MAX_ACCOUNTS = 20 + +MIXED_VALUE="/home/mYhOmEdIrEcToRy" +LOWER_VALUE="/home/myhomedirectory" +HOMEDIRECTORY_INDEX = 'cn=homeDirectory,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config' +HOMEDIRECTORY_CN="homedirectory" +MATCHINGRULE = 'nsMatchingRule' +UIDNUMBER_INDEX = 'cn=uidnumber,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config' +UIDNUMBER_CN="uidnumber" + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + +def test_ticket48746_init(topology): + log.info("Initialization: add dummy entries for the tests") + for cpt in range(MAX_ACCOUNTS): + name = "%s%d" % (NEW_ACCOUNT, cpt) + topology.standalone.add_s(Entry(("uid=%s,%s" % (name, SUFFIX), { + 'objectclass': "top posixAccount".split(), + 'uid': name, + 'cn': name, + 'uidnumber': str(111), + 'gidnumber': str(222), + 'homedirectory': "/home/tbordaz_%d" % cpt}))) + +def test_ticket48746_homeDirectory_indexed_cis(topology): + log.info("\n\nindex homeDirectory in caseIgnoreIA5Match and caseExactIA5Match") + try: + ent = topology.standalone.getEntry(HOMEDIRECTORY_INDEX, ldap.SCOPE_BASE) + except ldap.NO_SUCH_OBJECT: + topology.standalone.add_s(Entry((HOMEDIRECTORY_INDEX, { + 'objectclass': "top nsIndex".split(), + 'cn': HOMEDIRECTORY_CN, + 'nsSystemIndex': 'false', + 'nsIndexType': 'eq'}))) + #log.info("attach debugger") + #time.sleep(60) + + IGNORE_MR_NAME='caseIgnoreIA5Match' + EXACT_MR_NAME='caseExactIA5Match' + mod = [(ldap.MOD_REPLACE, MATCHINGRULE, (IGNORE_MR_NAME, EXACT_MR_NAME))] + topology.standalone.modify_s(HOMEDIRECTORY_INDEX, mod) + + #topology.standalone.stop(timeout=10) + log.info("successfully checked that filter with exact mr , a filter with lowercase eq is failing") + #assert topology.standalone.db2index(bename=DEFAULT_BENAME, suffixes=None, attrs=['homeDirectory']) + #topology.standalone.start(timeout=10) + args = {TASK_WAIT: True} + topology.standalone.tasks.reindex(suffix=SUFFIX, attrname='homeDirectory', args=args) + + log.info("Check indexing succeeded with a specified matching rule") + file_path = os.path.join(topology.standalone.prefix, "var/log/dirsrv/slapd-%s/errors" % topology.standalone.serverid) + file_obj = open(file_path, "r") + + # Check if the MR configuration failure occurs + regex = re.compile("unknown or invalid matching rule") + while True: + line = file_obj.readline() + found = regex.search(line) + if ((line == '') or (found)): + break + + if (found): + log.info("The configuration of a specific MR fails") + log.info(line) + assert not found + +def test_ticket48746_homeDirectory_mixed_value(topology): + # Set a homedirectory value with mixed case + name = "uid=%s1,%s" % (NEW_ACCOUNT, SUFFIX) + mod = [(ldap.MOD_REPLACE, 'homeDirectory', MIXED_VALUE)] + topology.standalone.modify_s(name, mod) + +def test_ticket48746_extensible_search_after_index(topology): + name = "uid=%s1,%s" % (NEW_ACCOUNT, SUFFIX) + + # check with the exact stored value +# log.info("Default: can retrieve an entry filter syntax with exact stored value") +# ent = topology.standalone.getEntry(name, ldap.SCOPE_BASE, "(homeDirectory=%s)" % MIXED_VALUE) +# log.info("attach debugger") +# time.sleep(60) + + # This search is enought to trigger the crash + # because it loads a registered filter MR plugin that has no indexer create function + # following index will trigger the crash + log.info("Default: can retrieve an entry filter caseExactIA5Match with exact stored value") + ent = topology.standalone.getEntry(name, ldap.SCOPE_BASE, "(homeDirectory:caseExactIA5Match:=%s)" % MIXED_VALUE) + + + +def test_ticket48746_homeDirectory_indexed_ces(topology): + log.info("\n\nindex homeDirectory in caseExactIA5Match, this would trigger the crash") + try: + ent = topology.standalone.getEntry(HOMEDIRECTORY_INDEX, ldap.SCOPE_BASE) + except ldap.NO_SUCH_OBJECT: + topology.standalone.add_s(Entry((HOMEDIRECTORY_INDEX, { + 'objectclass': "top nsIndex".split(), + 'cn': HOMEDIRECTORY_CN, + 'nsSystemIndex': 'false', + 'nsIndexType': 'eq'}))) +# log.info("attach debugger") +# time.sleep(60) + + EXACT_MR_NAME='caseExactIA5Match' + mod = [(ldap.MOD_REPLACE, MATCHINGRULE, (EXACT_MR_NAME))] + topology.standalone.modify_s(HOMEDIRECTORY_INDEX, mod) + + #topology.standalone.stop(timeout=10) + log.info("successfully checked that filter with exact mr , a filter with lowercase eq is failing") + #assert topology.standalone.db2index(bename=DEFAULT_BENAME, suffixes=None, attrs=['homeDirectory']) + #topology.standalone.start(timeout=10) + args = {TASK_WAIT: True} + topology.standalone.tasks.reindex(suffix=SUFFIX, attrname='homeDirectory', args=args) + + log.info("Check indexing succeeded with a specified matching rule") + file_path = os.path.join(topology.standalone.prefix, "var/log/dirsrv/slapd-%s/errors" % topology.standalone.serverid) + file_obj = open(file_path, "r") + + # Check if the MR configuration failure occurs + regex = re.compile("unknown or invalid matching rule") + while True: + line = file_obj.readline() + found = regex.search(line) + if ((line == '') or (found)): + break + + if (found): + log.info("The configuration of a specific MR fails") + log.info(line) + assert not found + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48755_test.py b/dirsrvtests/tests/tickets/ticket48755_test.py new file mode 100644 index 0000000..bcf8d1c --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48755_test.py @@ -0,0 +1,272 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import shlex +import subprocess +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +m1_m2_agmt = None + + +class TopologyReplication(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating master 1... + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + master2 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: r'meTo_%s:%s' % (master2.host, master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + global m1_m2_agmt + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: r'meTo_%s:%s' % (master1.host, master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Delete each instance in the end + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + return TopologyReplication(master1, master2) + + +@pytest.fixture(scope="module") +def add_ou_entry(server, idx, myparent): + name = 'OU%d' % idx + dn = 'ou=%s,%s' % (name, myparent) + server.add_s(Entry((dn, {'objectclass': ['top', 'organizationalunit'], + 'ou': name}))) + time.sleep(1) + + +def add_user_entry(server, idx, myparent): + name = 'tuser%d' % idx + dn = 'uid=%s,%s' % (name, myparent) + server.add_s(Entry((dn, {'objectclass': ['top', 'person', 'organizationalPerson', 'inetorgperson'], + 'givenname': 'test', + 'sn': 'user%d' % idx, + 'cn': 'Test User%d' % idx, + 'userpassword': 'password'}))) + time.sleep(1) + + +def del_user_entry(server, idx, myparent): + name = 'tuser%d' % idx + dn = 'uid=%s,%s' % (name, myparent) + server.delete_s(dn) + time.sleep(1) + + +def add_ldapsubentry(server, myparent): + name = 'nsPwPolicyContainer' + container = 'cn=%s,%s' % (name, myparent) + server.add_s(Entry((container, {'objectclass': ['top', 'nsContainer'], + 'cn': '%s' % name}))) + + name = 'nsPwPolicyEntry' + pwpentry = 'cn=%s,%s' % (name, myparent) + pwpdn = 'cn="%s",%s' % (pwpentry, container) + server.add_s(Entry((pwpdn, {'objectclass': ['top', 'ldapsubentry', 'passwordpolicy'], + 'passwordStorageScheme': 'ssha', + 'passwordCheckSyntax': 'on', + 'passwordInHistory': '6', + 'passwordChange': 'on', + 'passwordMinAge': '0', + 'passwordExp': 'off', + 'passwordMustChange': 'off', + 'cn': '%s' % pwpentry}))) + + name = 'nsPwTemplateEntry' + tmplentry = 'cn=%s,%s' % (name, myparent) + tmpldn = 'cn="%s",%s' % (tmplentry, container) + server.add_s(Entry((tmpldn, {'objectclass': ['top', 'ldapsubentry', 'costemplate', 'extensibleObject'], + 'cosPriority': '1', + 'cn': '%s' % tmplentry}))) + + name = 'nsPwPolicy_CoS' + cos = 'cn=%s,%s' % (name, myparent) + server.add_s(Entry((cos, {'objectclass': ['top', 'ldapsubentry', 'cosPointerDefinition', 'cosSuperDefinition'], + 'costemplatedn': '%s' % tmpldn, + 'cosAttribute': 'pwdpolicysubentry default operational-default', + 'cn': '%s' % name}))) + time.sleep(1) + + +def test_ticket48755(topology): + log.info("Ticket 48755 - moving an entry could make the online init fail") + + M1 = topology.master1 + M2 = topology.master2 + + log.info("Generating DIT_0") + idx = 0 + add_ou_entry(M1, idx, DEFAULT_SUFFIX) + + ou0 = 'ou=OU%d' % idx + parent0 = '%s,%s' % (ou0, DEFAULT_SUFFIX) + add_ou_entry(M1, idx, parent0) + + add_ldapsubentry(M1, parent0) + + parent00 = 'ou=OU%d,%s' % (idx, parent0) + for idx in range(0, 9): + add_user_entry(M1, idx, parent00) + if idx % 2 == 0: + log.info("Turning tuser%d into a tombstone entry" % idx) + del_user_entry(M1, idx, parent00) + + log.info('%s => %s => %s => 10 USERS' % (DEFAULT_SUFFIX, parent0, parent00)) + + log.info("Generating DIT_1") + idx = 1 + add_ou_entry(M1, idx, DEFAULT_SUFFIX) + + parent1 = 'ou=OU%d,%s' % (idx, DEFAULT_SUFFIX) + add_ou_entry(M1, idx, parent1) + + add_ldapsubentry(M1, parent1) + + log.info("Moving %s to DIT_1" % parent00) + M1.rename_s(parent00, ou0, newsuperior=parent1, delold=1) + time.sleep(1) + + log.info("Moving %s to DIT_1" % parent0) + parent01 = '%s,%s' % (ou0, parent1) + M1.rename_s(parent0, ou0, newsuperior=parent01, delold=1) + time.sleep(1) + + parent001 = '%s,%s' % (ou0, parent01) + log.info("Moving USERS to %s" % parent0) + for idx in range(0, 9): + if idx % 2 == 1: + name = 'tuser%d' % idx + rdn = 'uid=%s' % name + dn = 'uid=%s,%s' % (name, parent01) + M1.rename_s(dn, rdn, newsuperior=parent001, delold=1) + time.sleep(1) + + log.info('%s => %s => %s => %s => 10 USERS' % (DEFAULT_SUFFIX, parent1, parent01, parent001)) + + log.info("Run Consumer Initialization.") + global m1_m2_agmt + M1.startReplication_async(m1_m2_agmt) + M1.waitForReplInit(m1_m2_agmt) + time.sleep(2) + + m1entries = M1.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, + '(|(objectclass=ldapsubentry)(objectclass=nstombstone)(nsuniqueid=*))') + m2entries = M2.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, + '(|(objectclass=ldapsubentry)(objectclass=nstombstone)(nsuniqueid=*))') + + log.info("m1entry count - %d", len(m1entries)) + log.info("m2entry count - %d", len(m2entries)) + + assert len(m1entries) == len(m2entries) + log.info('PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48759_test.py b/dirsrvtests/tests/tickets/ticket48759_test.py new file mode 100644 index 0000000..71c7c2f --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48759_test.py @@ -0,0 +1,270 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +MEMBEROF_PLUGIN_DN = ('cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config') +GROUP_DN = ("cn=group," + DEFAULT_SUFFIX) +MEMBER_DN_COMP = "uid=member" + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + +def _add_group_with_members(topology): + # Create group + try: + topology.standalone.add_s(Entry((GROUP_DN, + {'objectclass': 'top groupofnames'.split(), + 'cn': 'group'}))) + except ldap.LDAPError as e: + log.fatal('Failed to add group: error ' + e.message['desc']) + assert False + + # Add members to the group - set timeout + log.info('Adding members to the group...') + for idx in range(1, 5): + try: + MEMBER_VAL = ("uid=member%d,%s" % (idx, DEFAULT_SUFFIX)) + topology.standalone.modify_s(GROUP_DN, + [(ldap.MOD_ADD, + 'member', + MEMBER_VAL)]) + except ldap.LDAPError as e: + log.fatal('Failed to update group: member (%s) - error: %s' % + (MEMBER_VAL, e.message['desc'])) + assert False + +def _find_retrocl_changes(topology, user_dn=None): + ents = topology.standalone.search_s('cn=changelog', ldap.SCOPE_SUBTREE, '(targetDn=%s)' %user_dn) + return len(ents) + +def _find_memberof(topology, user_dn=None, group_dn=None, find_result=True): + ent = topology.standalone.getEntry(user_dn, ldap.SCOPE_BASE, "(objectclass=*)", ['memberof']) + found = False + if ent.hasAttr('memberof'): + + for val in ent.getValues('memberof'): + topology.standalone.log.info("!!!!!!! %s: memberof->%s" % (user_dn, val)) + if val == group_dn: + found = True + break + + if find_result: + assert(found) + else: + assert(not found) + +def test_ticket48759(topology): + """ + The fix for ticket 48759 has to prevent plugin calls for tombstone purging + + The test uses the memberof and retrocl plugins to verify this. + In tombstone purging without the fix the mmeberof plugin is called, + if the tombstone entry is a group, + it modifies the user entries for the group + and if retrocl is enabled this mod is written to the retrocl + + The test sequence is: + - enable replication + - enable memberof and retro cl plugin + - add user entries + - add a group and add the users as members + - verify memberof is set to users + - delete the group + - verify memberof is removed from users + - add group again + - verify memberof is set to users + - get number of changes in retro cl for one user + - configure tombstone purging + - wait for purge interval to pass + - add a dummy entry to increase maxcsn + - wait for purge interval to pass two times + - get number of changes in retro cl for user again + - assert there was no additional change + """ + + log.info('Testing Ticket 48759 - no plugin calls for tombstone purging') + + # + # Setup Replication + # + log.info('Setting up replication...') + topology.standalone.replica.enableReplication(suffix=DEFAULT_SUFFIX, role=REPLICAROLE_MASTER, + replicaId=REPLICAID_MASTER_1) + + # + # enable dynamic plugins, memberof and retro cl plugin + # + log.info('Enable plugins...') + try: + topology.standalone.modify_s(DN_CONFIG, + [(ldap.MOD_REPLACE, + 'nsslapd-dynamic-plugins', + 'on')]) + except ldap.LDAPError as e: + ldap.error('Failed to enable dynamic plugins! ' + e.message['desc']) + assert False + + topology.standalone.plugins.enable(name=PLUGIN_MEMBER_OF) + topology.standalone.plugins.enable(name=PLUGIN_RETRO_CHANGELOG) + # Configure memberOf group attribute + try: + topology.standalone.modify_s(MEMBEROF_PLUGIN_DN, + [(ldap.MOD_REPLACE, + 'memberofgroupattr', + 'member')]) + except ldap.LDAPError as e: + log.fatal('Failed to configure memberOf plugin: error ' + e.message['desc']) + assert False + + + # + # create some users and a group + # + log.info('create users and group...') + for idx in range(1, 5): + try: + USER_DN = ("uid=member%d,%s" % (idx, DEFAULT_SUFFIX)) + topology.standalone.add_s(Entry((USER_DN, + {'objectclass': 'top extensibleObject'.split(), + 'uid': 'member%d' % (idx)}))) + except ldap.LDAPError as e: + log.fatal('Failed to add user (%s): error %s' % (USER_DN, e.message['desc'])) + assert False + + _add_group_with_members(topology) + + MEMBER_VAL = ("uid=member2,%s" % DEFAULT_SUFFIX) + time.sleep(1) + _find_memberof(topology, MEMBER_VAL, GROUP_DN, True) + + # delete group + log.info('delete group...') + try: + topology.standalone.delete_s(GROUP_DN) + except ldap.LDAPError as e: + log.error('Failed to delete entry: ' + e.message['desc']) + assert False + + time.sleep(1) + _find_memberof(topology, MEMBER_VAL, GROUP_DN, False) + + # add group again + log.info('add group again') + _add_group_with_members(topology) + time.sleep(1) + _find_memberof(topology, MEMBER_VAL, GROUP_DN, True) + + # + # get number of changelog records for one user entry + log.info('get number of changes for %s before tombstone purging' % MEMBER_VAL) + changes_pre = _find_retrocl_changes(topology, MEMBER_VAL) + + # configure tombstone purging + args = {REPLICA_PRECISE_PURGING: 'on', + REPLICA_PURGE_DELAY: '5', + REPLICA_PURGE_INTERVAL: '5'} + try: + topology.standalone.replica.setProperties(DEFAULT_SUFFIX, None, None, args) + except: + log.fatal('Failed to configure replica') + assert False + + # Wait for the interval to pass + log.info('Wait for tombstone purge interval to pass ...') + time.sleep(6) + + # Add an entry to trigger replication + log.info('add dummy entry') + try: + topology.standalone.add_s(Entry(('cn=test_entry,dc=example,dc=com', { + 'objectclass': 'top person'.split(), + 'sn': 'user', + 'cn': 'entry1'}))) + except ldap.LDAPError as e: + log.error('Failed to add entry: ' + e.message['desc']) + assert False + + # check memberof is still correct + time.sleep(1) + _find_memberof(topology, MEMBER_VAL, GROUP_DN, True) + + # Wait for the interval to pass again + log.info('Wait for tombstone purge interval to pass again...') + time.sleep(10) + + # + # get number of changelog records for one user entry + log.info('get number of changes for %s before tombstone purging' % MEMBER_VAL) + changes_post = _find_retrocl_changes(topology, MEMBER_VAL) + + assert (changes_pre == changes_post) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48784_test.py b/dirsrvtests/tests/tickets/ticket48784_test.py new file mode 100644 index 0000000..3559a48 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48784_test.py @@ -0,0 +1,443 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2016 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import shlex +import subprocess +import ldap +import logging +import pytest +import base64 +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +CONFIG_DN = 'cn=config' +ENCRYPTION_DN = 'cn=encryption,%s' % CONFIG_DN +RSA = 'RSA' +RSA_DN = 'cn=%s,%s' % (RSA, ENCRYPTION_DN) +ISSUER = 'cn=CAcert' +CACERT = 'CAcertificate' +M1SERVERCERT = 'Server-Cert1' +M2SERVERCERT = 'Server-Cert2' +M1LDAPSPORT = '41636' +M2LDAPSPORT = '42636' + + +class TopologyReplication(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating master 1... + master1 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + master2 = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: r'meTo_%s:%s' % (master2.host, master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + global m1_m2_agmt + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: r'meTo_%s:%s' % (master1.host, master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + global m2_m1_agmt + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(2) + + global M1SUBJECT + M1SUBJECT = 'CN=%s,OU=389 Directory Server' % (master1.host) + global M2SUBJECT + M2SUBJECT = 'CN=%s,OU=390 Directory Server' % (master2.host) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Delete each instance in the end + def fin(): + master1.delete() + master2.delete() + request.addfinalizer(fin) + + return TopologyReplication(master1, master2) + + +@pytest.fixture(scope="module") +def add_entry(server, name, rdntmpl, start, num): + log.info("\n######################### Adding %d entries to %s ######################" % (num, name)) + + for i in range(num): + ii = start + i + dn = '%s%d,%s' % (rdntmpl, ii, DEFAULT_SUFFIX) + try: + server.add_s(Entry((dn, {'objectclass': 'top person extensibleObject'.split(), + 'uid': '%s%d' % (rdntmpl, ii), + 'cn': '%s user%d' % (name, ii), + 'sn': 'user%d' % (ii)}))) + except ldap.LDAPError as e: + log.error('Failed to add %s ' % dn + e.message['desc']) + assert False + + +def enable_ssl(server, ldapsport, mycert): + log.info("\n######################### Enabling SSL LDAPSPORT %s ######################\n" % ldapsport) + server.simple_bind_s(DN_DM, PASSWORD) + server.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3', 'off'), + (ldap.MOD_REPLACE, 'nsTLS1', 'on'), + (ldap.MOD_REPLACE, 'nsSSLClientAuth', 'allowed'), + (ldap.MOD_REPLACE, 'nsSSL3Ciphers', '+all')]) + + server.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-security', 'on'), + (ldap.MOD_REPLACE, 'nsslapd-ssl-check-hostname', 'off'), + (ldap.MOD_REPLACE, 'nsslapd-secureport', ldapsport)]) + + server.add_s(Entry((RSA_DN, {'objectclass': "top nsEncryptionModule".split(), + 'cn': RSA, + 'nsSSLPersonalitySSL': mycert, + 'nsSSLToken': 'internal (software)', + 'nsSSLActivation': 'on'}))) + time.sleep(1) + + +def doAndPrintIt(cmdline, filename): + proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if filename is None: + log.info(" OUT:") + else: + log.info(" OUT: %s" % filename) + fd = open(filename, "w") + while True: + l = proc.stdout.readline() + if l == "": + break + if filename is None: + log.info(" %s" % l) + else: + fd.write(l) + log.info(" ERR:") + while True: + l = proc.stderr.readline() + if l == "" or l == "\n": + break + log.info(" <%s>" % l) + assert False + + if filename is not None: + fd.close() + time.sleep(1) + + +def create_keys_certs(topology): + log.info("\n######################### Creating SSL Keys and Certs ######################\n") + + global m1confdir + m1confdir = topology.master1.confdir + global m2confdir + m2confdir = topology.master2.confdir + + log.info("##### shutdown master1") + topology.master1.stop(timeout=10) + + log.info("##### Creating a password file") + pwdfile = '%s/pwdfile.txt' % (m1confdir) + os.system('rm -f %s' % pwdfile) + opasswd = os.popen("(ps -ef ; w ) | sha1sum | awk '{print $1}'", "r") + passwd = opasswd.readline() + pwdfd = open(pwdfile, "w") + pwdfd.write(passwd) + pwdfd.close() + time.sleep(1) + + log.info("##### create the pin file") + m1pinfile = '%s/pin.txt' % (m1confdir) + m2pinfile = '%s/pin.txt' % (m2confdir) + os.system('rm -f %s' % m1pinfile) + os.system('rm -f %s' % m2pinfile) + pintxt = 'Internal (Software) Token:%s' % passwd + pinfd = open(m1pinfile, "w") + pinfd.write(pintxt) + pinfd.close() + os.system('chmod 400 %s' % m1pinfile) + + log.info("##### Creating a noise file") + noisefile = '%s/noise.txt' % (m1confdir) + noise = os.popen("(w ; ps -ef ; date ) | sha1sum | awk '{print $1}'", "r") + noisewdfd = open(noisefile, "w") + noisewdfd.write(noise.readline()) + noisewdfd.close() + time.sleep(1) + + cmdline = ['certutil', '-N', '-d', m1confdir, '-f', pwdfile] + log.info("##### Create key3.db and cert8.db database (master1): %s" % cmdline) + doAndPrintIt(cmdline, None) + + cmdline = ['certutil', '-G', '-d', m1confdir, '-z', noisefile, '-f', pwdfile] + log.info("##### Creating encryption key for CA (master1): %s" % cmdline) + #os.system('certutil -G -d %s -z %s -f %s' % (m1confdir, noisefile, pwdfile)) + doAndPrintIt(cmdline, None) + + time.sleep(2) + + log.info("##### Creating self-signed CA certificate (master1) -- nickname %s" % CACERT) + os.system('( echo y ; echo ; echo y ) | certutil -S -n "%s" -s "%s" -x -t "CT,," -m 1000 -v 120 -d %s -z %s -f %s -2' % (CACERT, ISSUER, m1confdir, noisefile, pwdfile)) + + global M1SUBJECT + cmdline = ['certutil', '-S', '-n', M1SERVERCERT, '-s', M1SUBJECT, '-c', CACERT, '-t', ',,', '-m', '1001', '-v', '120', '-d', m1confdir, '-z', noisefile, '-f', pwdfile] + log.info("##### Creating Server certificate -- nickname %s: %s" % (M1SERVERCERT, cmdline)) + doAndPrintIt(cmdline, None) + + time.sleep(2) + + global M2SUBJECT + cmdline = ['certutil', '-S', '-n', M2SERVERCERT, '-s', M2SUBJECT, '-c', CACERT, '-t', ',,', '-m', '1002', '-v', '120', '-d', m1confdir, '-z', noisefile, '-f', pwdfile] + log.info("##### Creating Server certificate -- nickname %s: %s" % (M2SERVERCERT, cmdline)) + doAndPrintIt(cmdline, None) + + time.sleep(2) + + log.info("##### start master1") + topology.master1.start(timeout=10) + + log.info("##### enable SSL in master1 with all ciphers") + enable_ssl(topology.master1, M1LDAPSPORT, M1SERVERCERT) + + cmdline = ['certutil', '-L', '-d', m1confdir] + log.info("##### Check the cert db: %s" % cmdline) + doAndPrintIt(cmdline, None) + + log.info("##### stop master[12]") + topology.master1.stop(timeout=10) + topology.master2.stop(timeout=10) + + global mytmp + mytmp = '/tmp' + m2pk12file = '%s/%s.pk12' % (mytmp, M2SERVERCERT) + cmd = 'pk12util -o %s -n "%s" -d %s -w %s -k %s' % (m2pk12file, M2SERVERCERT, m1confdir, pwdfile, pwdfile) + log.info("##### Extract PK12 file for master2: %s" % cmd) + os.system(cmd) + time.sleep(1) + + log.info("##### Check PK12 files") + if os.path.isfile(m2pk12file): + log.info('%s is successfully extracted.' % m2pk12file) + else: + log.fatal('%s was not extracted.' % m2pk12file) + assert False + + log.info("##### Initialize Cert DB for master2") + cmdline = ['certutil', '-N', '-d', m2confdir, '-f', pwdfile] + log.info("##### Create key3.db and cert8.db database (master2): %s" % cmdline) + doAndPrintIt(cmdline, None) + + log.info("##### Import certs to master2") + log.info('Importing %s' % CACERT) + cacert = '%s%s.pem' % (mytmp, CACERT) + cmdline = ['certutil', '-L', '-n', CACERT, '-d', m1confdir, '-a'] + doAndPrintIt(cmdline, cacert) + + os.system('certutil -A -n "%s" -t "CT,," -f %s -d %s -a -i %s' % (CACERT, pwdfile, m2confdir, cacert)) + cmd = 'pk12util -i %s -n "%s" -d %s -w %s -k %s' % (m2pk12file, M2SERVERCERT, m2confdir, pwdfile, pwdfile) + log.info('##### Importing %s to master2: %s' % (M2SERVERCERT, cmd)) + os.system(cmd) + log.info('copy %s to %s' % (m1pinfile, m2pinfile)) + os.system('cp %s %s' % (m1pinfile, m2pinfile)) + os.system('chmod 400 %s' % m2pinfile) + time.sleep(1) + + log.info("##### start master2") + topology.master2.start(timeout=10) + + log.info("##### enable SSL in master2 with all ciphers") + enable_ssl(topology.master2, M2LDAPSPORT, M2SERVERCERT) + + log.info("##### restart master2") + topology.master2.restart(timeout=30) + + log.info("##### restart master1") + topology.master1.restart(timeout=30) + + log.info("\n######################### Creating SSL Keys and Certs Done ######################\n") + + +def config_tls_agreements(topology): + log.info("######################### Configure SSL/TLS agreements ######################") + log.info("######################## master1 <-- startTLS -> master2 #####################") + + log.info("##### Update the agreement of master1") + global m1_m2_agmt + topology.master1.modify_s(m1_m2_agmt, [(ldap.MOD_REPLACE, 'nsDS5ReplicaTransportInfo', 'TLS')]) + + log.info("##### Update the agreement of master2") + global m2_m1_agmt + topology.master2.modify_s(m2_m1_agmt, [(ldap.MOD_REPLACE, 'nsDS5ReplicaTransportInfo', 'TLS')]) + + time.sleep(1) + + topology.master1.restart(10) + topology.master2.restart(10) + + log.info("\n######################### Configure SSL/TLS agreements Done ######################\n") + + +def set_ssl_Version(server, name, version): + log.info("\n######################### Set %s on %s ######################\n" % + (version, name)) + server.simple_bind_s(DN_DM, PASSWORD) + if version.startswith('SSL'): + server.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3', 'on'), + (ldap.MOD_REPLACE, 'nsTLS1', 'off'), + (ldap.MOD_REPLACE, 'sslVersionMin', 'SSL3'), + (ldap.MOD_REPLACE, 'sslVersionMax', 'SSL3')]) + elif version.startswith('TLS'): + server.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3', 'off'), + (ldap.MOD_REPLACE, 'nsTLS1', 'on'), + (ldap.MOD_REPLACE, 'sslVersionMin', version), + (ldap.MOD_REPLACE, 'sslVersionMax', version)]) + else: + log.info("Invalid version %s", version) + assert False + + +def test_ticket48784(topology): + """ + Set up 2way MMR: + master_1 <----- startTLS -----> master_2 + + Make sure the replication is working. + Then, stop the servers and set only SSLv3 on master_1 while TLS1.2 on master_2 + Replication is supposed to fail. + """ + log.info("Ticket 48784 - Allow usage of OpenLDAP libraries that don't use NSS for crypto") + + create_keys_certs(topology) + config_tls_agreements(topology) + + add_entry(topology.master1, 'master1', 'uid=m1user', 0, 5) + add_entry(topology.master2, 'master2', 'uid=m2user', 0, 5) + + time.sleep(10) + + log.info('##### Searching for entries on master1...') + entries = topology.master1.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*)') + assert 10 == len(entries) + + log.info('##### Searching for entries on master2...') + entries = topology.master2.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*)') + assert 10 == len(entries) + + log.info("##### openldap client just accepts sslVersionMin not Max.") + set_ssl_Version(topology.master1, 'master1', 'SSL3') + set_ssl_Version(topology.master2, 'master2', 'TLS1.2') + + log.info("##### restart master[12]") + topology.master1.restart(timeout=10) + topology.master2.restart(timeout=10) + + log.info("##### replication from master_1 to master_2 should be ok.") + add_entry(topology.master1, 'master1', 'uid=m1user', 10, 1) + log.info("##### replication from master_2 to master_1 should fail.") + add_entry(topology.master2, 'master2', 'uid=m2user', 10, 1) + + time.sleep(10) + + log.info('##### Searching for entries on master1...') + entries = topology.master1.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*)') + assert 11 == len(entries) + + log.info('##### Searching for entries on master2...') + entries = topology.master2.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(uid=*)') + assert 12 == len(entries) + + log.info("Ticket 48784 - PASSED") + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48798_test.py b/dirsrvtests/tests/tickets/ticket48798_test.py new file mode 100644 index 0000000..297e2ef --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48798_test.py @@ -0,0 +1,152 @@ +import os +import sys +import time +import ldap +import logging +import pytest + +import nss + +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +from subprocess import check_output + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + +def check_socket_dh_param_size(hostname, port): + ### You know why we have to do this? + # Because TLS and SSL suck. Hard. They are impossible. It's all terrible, burn it all down. + cmd = "echo quit | openssl s_client -connect {HOSTNAME}:{PORT} -msg -cipher DH | grep -A 1 ServerKeyExchange".format( + HOSTNAME=hostname, + PORT=port) + output = check_output(cmd, shell=True) + dhheader = output.split('\n')[1] + # Get rid of all the other whitespace. + dhheader = dhheader.replace(' ', '') + # Example is 0c00040b0100ffffffffffffffffadf8 + # We need the bits 0100 here. Which means 256 bytes aka 256 * 8, for 2048 bit. + dhheader = dhheader[8:12] + # make it an int, and times 8 + i = int(dhheader, 16) * 8 + return i + + +def test_ticket48798(topology): + """ + Test DH param sizes offered by DS. + + """ + + # Create a CA + # This is a trick. The nss db that ships with DS is broken fundamentally. + ## THIS ASSUMES old nss format. SQLite will bite us! + for f in ('key3.db', 'cert8.db', 'key4.db', 'cert9.db', 'secmod.db', 'pkcs11.txt'): + try: + os.remove("%s/%s" % (topology.standalone.confdir, f )) + except: + pass + + # Check if the db exists. Should be false. + assert(topology.standalone.nss_ssl._db_exists() is False) + time.sleep(0.5) + + # Create it. Should work. + assert(topology.standalone.nss_ssl.reinit() is True) + time.sleep(0.5) + + # Check if the db exists. Should be true + assert(topology.standalone.nss_ssl._db_exists() is True) + time.sleep(0.5) + + # Check if ca exists. Should be false. + assert(topology.standalone.nss_ssl._rsa_ca_exists() is False) + time.sleep(0.5) + + # Create it. Should work. + assert(topology.standalone.nss_ssl.create_rsa_ca() is True) + time.sleep(0.5) + + # Check if ca exists. Should be true + assert(topology.standalone.nss_ssl._rsa_ca_exists() is True) + time.sleep(0.5) + + # Check if we have a server cert / key. Should be false. + assert(topology.standalone.nss_ssl._rsa_key_and_cert_exists() is False) + time.sleep(0.5) + + # Create it. Should work. + assert(topology.standalone.nss_ssl.create_rsa_key_and_cert() is True) + time.sleep(0.5) + + # Check if server cert and key exist. Should be true. + assert(topology.standalone.nss_ssl._rsa_key_and_cert_exists() is True) + time.sleep(0.5) + + topology.standalone.config.enable_ssl(secport=DEFAULT_SECURE_PORT, secargs={'nsSSL3Ciphers': '+all'} ) + + topology.standalone.restart(30) + + # Confirm that we have a connection, and that it has DH + + # Open a socket to the port. + # Check the security settings. + size = check_socket_dh_param_size(topology.standalone.host, DEFAULT_SECURE_PORT) + + assert(size == 2048) + + # Now toggle the settings. + mod = [(ldap.MOD_REPLACE, 'allowWeakDHParam', 'on')] + dn_enc = 'cn=encryption,cn=config' + topology.standalone.modify_s(dn_enc, mod) + + topology.standalone.restart(30) + + # Check the DH params are less than 1024. + size = check_socket_dh_param_size(topology.standalone.host, DEFAULT_SECURE_PORT) + + assert(size == 1024) + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48799_test.py b/dirsrvtests/tests/tickets/ticket48799_test.py new file mode 100644 index 0000000..47461eb --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48799_test.py @@ -0,0 +1,174 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + + +class TopologyReplication(object): + def __init__(self, master1, consumer1): + master1.open() + self.master1 = master1 + consumer1.open() + self.consumer1 = consumer1 + + +@pytest.fixture(scope="module") +def topology(request): + # Creating master 1... + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating consumer 1... + consumer1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_CONSUMER_1 + args_instance[SER_PORT] = PORT_CONSUMER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_CONSUMER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_consumer = args_instance.copy() + consumer1.allocate(args_consumer) + instance_consumer1 = consumer1.exists() + if instance_consumer1: + consumer1.delete() + consumer1.create() + consumer1.open() + consumer1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_CONSUMER, replicaId=CONSUMER_REPLICAID) + + # + # Create all the agreements + # + # Creating agreement from master 1 to consumer 1 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_c1_agmt = master1.agreement.create(suffix=SUFFIX, host=consumer1.host, port=consumer1.port, properties=properties) + if not m1_c1_agmt: + log.fatal("Fail to create a hub -> consumer replica agreement") + sys.exit(1) + log.debug("%s created" % m1_c1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_CONSUMER_1, PORT_CONSUMER_1) + master1.waitForReplInit(m1_c1_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, consumer1): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Delete each instance in the end + def fin(): + master1.delete() + consumer1.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + master1.clearTmpDir(__file__) + + return TopologyReplication(master1, consumer1) + + +def _add_custom_schema(server): + attr_value = "( 10.0.9.2342.19200300.100.1.1 NAME 'customManager' EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 X-ORIGIN 'user defined' )" + mod = [(ldap.MOD_ADD, 'attributeTypes', attr_value)] + server.modify_s('cn=schema', mod) + + oc_value = "( 1.3.6.1.4.1.4843.2.1 NAME 'customPerson' SUP inetorgperson STRUCTURAL MAY (customManager) X-ORIGIN 'user defined' )" + mod = [(ldap.MOD_ADD, 'objectclasses', oc_value)] + server.modify_s('cn=schema', mod) + + +def _create_user(server): + server.add_s(Entry(( + "uid=testuser,ou=People,%s" % DEFAULT_SUFFIX, + { + 'objectClass' : "top account posixaccount".split(), + 'uid' : 'testuser', + 'gecos' : 'Test User', + 'cn' : 'testuser', + 'homedirectory' : '/home/testuser', + 'passwordexpirationtime' : '20160710184141Z', + 'userpassword' : '!', + 'uidnumber' : '1111212', + 'gidnumber' : '1111212', + 'loginshell' : '/bin/bash' + } + ))) + + +def _modify_user(server): + mod = [ + (ldap.MOD_ADD, 'objectClass', ['customPerson']), + (ldap.MOD_ADD, 'sn', ['User']), + (ldap.MOD_ADD, 'customManager', ['cn=manager']), + ] + server.modify("uid=testuser,ou=People,%s" % DEFAULT_SUFFIX, mod) + + +def test_ticket48799(topology): + """Write your replication testcase here. + + To access each DirSrv instance use: topology.master1, topology.master2, + ..., topology.hub1, ..., topology.consumer1,... + + Also, if you need any testcase initialization, + please, write additional fixture for that(include finalizer). + """ + + # Add the new schema element. + _add_custom_schema(topology.master1) + _add_custom_schema(topology.consumer1) + + # Add a new user on the master. + _create_user(topology.master1) + # Modify the user on the master. + _modify_user(topology.master1) + + # We need to wait for replication here. + time.sleep(15) + + # Now compare the master vs consumer, and see if the objectClass was dropped. + + master_entry = topology.master1.search_s("uid=testuser,ou=People,%s" % DEFAULT_SUFFIX, ldap.SCOPE_BASE, '(objectclass=*)', ['objectClass']) + consumer_entry = topology.consumer1.search_s("uid=testuser,ou=People,%s" % DEFAULT_SUFFIX, ldap.SCOPE_BASE, '(objectclass=*)', ['objectClass']) + + assert(master_entry == consumer_entry) + + log.info('Test complete') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48808_test.py b/dirsrvtests/tests/tickets/ticket48808_test.py new file mode 100644 index 0000000..3dbceac --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48808_test.py @@ -0,0 +1,337 @@ +import time +import ldap +import logging +import pytest +from random import sample +from ldap.controls import SimplePagedResultsControl +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +TEST_USER_NAME = 'simplepaged_test' +TEST_USER_DN = 'uid=%s,%s' % (TEST_USER_NAME, DEFAULT_SUFFIX) +TEST_USER_PWD = 'simplepaged_test' + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +@pytest.fixture(scope="module") +def test_user(topology): + """User for binding operation""" + + try: + topology.standalone.add_s(Entry((TEST_USER_DN, { + 'objectclass': 'top person'.split(), + 'objectclass': 'organizationalPerson', + 'objectclass': 'inetorgperson', + 'cn': TEST_USER_NAME, + 'sn': TEST_USER_NAME, + 'userpassword': TEST_USER_PWD, + 'mail': '%s@redhat.com' % TEST_USER_NAME, + 'uid': TEST_USER_NAME + }))) + except ldap.LDAPError as e: + log.error('Failed to add user (%s): error (%s)' % (TEST_USER_DN, + e.message['desc'])) + raise e + + +def add_users(topology, users_num): + """Add users to the default suffix + and return a list of added user DNs. + """ + + users_list = [] + log.info('Adding %d users' % users_num) + for num in sample(range(1000), users_num): + num_ran = int(round(num)) + USER_NAME = 'test%05d' % num_ran + USER_DN = 'uid=%s,%s' % (USER_NAME, DEFAULT_SUFFIX) + users_list.append(USER_DN) + try: + topology.standalone.add_s(Entry((USER_DN, { + 'objectclass': 'top person'.split(), + 'objectclass': 'organizationalPerson', + 'objectclass': 'inetorgperson', + 'cn': USER_NAME, + 'sn': USER_NAME, + 'userpassword': 'pass%s' % num_ran, + 'mail': '%s@redhat.com' % USER_NAME, + 'uid': USER_NAME + }))) + except ldap.LDAPError as e: + log.error('Failed to add user (%s): error (%s)' % (USER_DN, + e.message['desc'])) + raise e + return users_list + + +def del_users(topology, users_list): + """Delete users with DNs from given list""" + + log.info('Deleting %d users' % len(users_list)) + for user_dn in users_list: + try: + topology.standalone.delete_s(user_dn) + except ldap.LDAPError as e: + log.error('Failed to delete user (%s): error (%s)' % (user_dn, + e.message['desc'])) + raise e + + +def change_conf_attr(topology, suffix, attr_name, attr_value): + """Change configurational attribute in the given suffix. + Funtion returns previous attribute value. + """ + + try: + entries = topology.standalone.search_s(suffix, ldap.SCOPE_BASE, + 'objectclass=top', + [attr_name]) + attr_value_bck = entries[0].data.get(attr_name) + log.info('Set %s to %s. Previous value - %s. Modified suffix - %s.' % ( + attr_name, attr_value, attr_value_bck, suffix)) + if attr_value is None: + topology.standalone.modify_s(suffix, [(ldap.MOD_DELETE, + attr_name, + attr_value)]) + else: + topology.standalone.modify_s(suffix, [(ldap.MOD_REPLACE, + attr_name, + attr_value)]) + except ldap.LDAPError as e: + log.error('Failed to change attr value (%s): error (%s)' % (attr_name, + e.message['desc'])) + raise e + + return attr_value_bck + + +def paged_search(topology, controls, search_flt, searchreq_attrlist): + """Search at the DEFAULT_SUFFIX with ldap.SCOPE_SUBTREE + using Simple Paged Control(should the first item in the + list controls. + Return the list with results summarized from all pages + """ + + pages = 0 + pctrls = [] + all_results = [] + req_ctrl = controls[0] + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + while True: + log.info('Getting page %d' % (pages,)) + rtype, rdata, rmsgid, rctrls = topology.standalone.result3(msgid) + all_results.extend(rdata) + pages += 1 + pctrls = [ + c + for c in rctrls + if c.controlType == SimplePagedResultsControl.controlType + ] + + if pctrls: + if pctrls[0].cookie: + # Copy cookie from response control to request control + req_ctrl.cookie = pctrls[0].cookie + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + else: + break # no more pages available + else: + break + + assert not pctrls[0].cookie + return all_results + + +def test_ticket48808(topology, test_user): + log.info('Run multiple paging controls on a single connection') + users_num = 100 + page_size = 30 + users_list = add_users(topology, users_num) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + log.info('Create simple paged results control instance') + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + for ii in xrange(3): + log.info('Iteration %d' % ii) + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + rtype, rdata, rmsgid, rctrls = topology.standalone.result3(msgid) + pctrls = [ + c + for c in rctrls + if c.controlType == SimplePagedResultsControl.controlType + ] + + req_ctrl.cookie = pctrls[0].cookie + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + log.info('Set Directory Manager bind back') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + + log.info('Abandon the search') + users_num = 10 + page_size = 0 + users_list = add_users(topology, users_num) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + log.info('Create simple paged results control instance') + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + msgid = topology.standalone.search_ext(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + search_flt, + searchreq_attrlist, + serverctrls=controls) + rtype, rdata, rmsgid, rctrls = topology.standalone.result3(msgid) + pctrls = [ + c + for c in rctrls + if c.controlType == SimplePagedResultsControl.controlType + ] + assert not pctrls[0].cookie + + log.info('Set Directory Manager bind back') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + + log.info("Search should fail with 'nsPagedSizeLimit = 5'" + "and 'nsslapd-pagedsizelimit = 15' with 10 users") + conf_attr = '15' + user_attr = '5' + expected_rs = ldap.SIZELIMIT_EXCEEDED + users_num = 10 + page_size = 10 + users_list = add_users(topology, users_num) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + conf_attr_bck = change_conf_attr(topology, DN_CONFIG, + 'nsslapd-pagedsizelimit', conf_attr) + user_attr_bck = change_conf_attr(topology, TEST_USER_DN, + 'nsPagedSizeLimit', user_attr) + + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + log.info('Create simple paged results control instance') + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + log.info('Expect to fail with SIZELIMIT_EXCEEDED') + with pytest.raises(expected_rs): + all_results = paged_search(topology, controls, + search_flt, searchreq_attrlist) + + log.info('Set Directory Manager bind back') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + change_conf_attr(topology, DN_CONFIG, + 'nsslapd-pagedsizelimit', conf_attr_bck) + change_conf_attr(topology, TEST_USER_DN, + 'nsPagedSizeLimit', user_attr_bck) + + log.info("Search should pass with 'nsPagedSizeLimit = 15'" + "and 'nsslapd-pagedsizelimit = 5' with 10 users") + conf_attr = '5' + user_attr = '15' + users_num = 10 + page_size = 10 + users_list = add_users(topology, users_num) + search_flt = r'(uid=test*)' + searchreq_attrlist = ['dn', 'sn'] + conf_attr_bck = change_conf_attr(topology, DN_CONFIG, + 'nsslapd-pagedsizelimit', conf_attr) + user_attr_bck = change_conf_attr(topology, TEST_USER_DN, + 'nsPagedSizeLimit', user_attr) + + log.info('Set user bind') + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD) + + log.info('Create simple paged results control instance') + req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='') + controls = [req_ctrl] + + log.info('Search should PASS') + all_results = paged_search(topology, controls, + search_flt, searchreq_attrlist) + log.info('%d results' % len(all_results)) + assert len(all_results) == len(users_list) + + log.info('Set Directory Manager bind back') + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + del_users(topology, users_list) + change_conf_attr(topology, DN_CONFIG, + 'nsslapd-pagedsizelimit', conf_attr_bck) + change_conf_attr(topology, TEST_USER_DN, + 'nsPagedSizeLimit', user_attr_bck) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48844_test.py b/dirsrvtests/tests/tickets/ticket48844_test.py new file mode 100644 index 0000000..de719c3 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48844_test.py @@ -0,0 +1,179 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +PLUGIN_BITWISE = 'Bitwise Plugin' +TESTBASEDN="dc=bitwise,dc=com" +TESTBACKEND_NAME="TestBitw" + +F1 = 'objectclass=testperson' +BITWISE_F2 = '(&(%s)(testUserAccountControl:1.2.840.113556.1.4.803:=514))' % F1 +BITWISE_F3 = '(&(%s)(testUserAccountControl:1.2.840.113556.1.4.803:=513))' % F1 +BITWISE_F6 = '(&(%s)(testUserAccountControl:1.2.840.113556.1.4.803:=16777216))' % F1 + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def _addBitwiseEntries(topology): + + users = [ + ('testuser2', '65536' ,'PasswordNeverExpired' ), + ('testuser3', '8388608' ,'PasswordExpired'), + ('testuser4', '256' ,'TempDuplicateAccount'), + ('testuser5', '16777216' ,'TrustedAuthDelegation'), + ('testuser6', '528' ,'AccountLocked'), + ('testuser7', '513' ,'AccountActive'), + ('testuser8', '98536 99512 99528'.split() ,'AccountActive PasswordExxpired AccountLocked'.split()), + ('testuser9', '87536 912'.split() ,'AccountActive PasswordNeverExpired'.split()), + ('testuser10', '89536 97546 96579'.split() ,'TestVerify1 TestVerify2 TestVerify3'.split() ), + ('testuser11', '655236' ,'TestStatus1'), + ('testuser12', '665522' ,'TestStatus2'), + ('testuser13', '266552' ,'TestStatus3')] + try: + topology.standalone.add_s(Entry((TESTBASEDN, + {'objectclass': "top dcobject".split(), + 'dc': 'bitwise', + 'aci': '(target =\"ldap:///dc=bitwise,dc=com\")' +\ + '(targetattr != \"userPassword\")' +\ + '(version 3.0;acl \"Anonymous read-search access\";' +\ + 'allow (read, search, compare)(userdn = \"ldap:///anyone\");)'}))) + + topology.standalone.add_s(Entry(('uid=btestuser1,%s' % TESTBASEDN, + {'objectclass': 'top testperson organizationalPerson inetorgperson'.split(), + 'mail': 'btestuser1@redhat.com', + 'uid': 'btestuser1', + 'givenName': 'bit', + 'sn': 'testuser1', + 'userPassword': 'testuser1', + 'testUserAccountControl': '514', + 'testUserStatus': 'Disabled', + 'cn': 'bit tetsuser1'}))) + for (userid, accCtl,accStatus) in users: + topology.standalone.add_s(Entry(('uid=b%s,%s' % (userid, TESTBASEDN), + {'objectclass': 'top testperson organizationalPerson inetorgperson'.split(), + 'mail': '%s@redhat.com' % userid, + 'uid': 'b%s' % userid, + 'givenName': 'bit', + 'sn': userid, + 'userPassword': userid, + 'testUserAccountControl': accCtl, + 'testUserStatus': accStatus, + 'cn': 'bit %s' % userid}))) + except ValueError: + topology.standalone.log.fatal("add_s failed: %s", ValueError) + + +def test_ticket48844_init(topology): + # create a suffix where test entries will be stored + BITW_SCHEMA_AT_1 = '( NAME \'testUserAccountControl\' DESC \'Attribute Bitwise filteri-Multi-Valued\' SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )' + BITW_SCHEMA_AT_2 = '( NAME \'testUserStatus\' DESC \'State of User account active/disabled\' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )' + BITW_SCHEMA_OC_1 = '( NAME \'testperson\' SUP top STRUCTURAL MUST ( sn $ cn $ testUserAccountControl $ testUserStatus )' +\ + ' MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) X-ORIGIN \'BitWise\' )' + topology.standalone.schema.add_schema('attributetypes', [BITW_SCHEMA_AT_1, BITW_SCHEMA_AT_2]) + topology.standalone.schema.add_schema('objectClasses', BITW_SCHEMA_OC_1) + + topology.standalone.backend.create(TESTBASEDN, {BACKEND_NAME: TESTBACKEND_NAME}) + topology.standalone.mappingtree.create(TESTBASEDN, bename=TESTBACKEND_NAME, parent=None) + _addBitwiseEntries(topology) + + +def test_ticket48844_bitwise_on(topology): + """ + Check that bitwise plugin (old style MR plugin) that defines + Its own indexer create function, is selected to evaluate the filter + """ + + topology.standalone.plugins.enable(name=PLUGIN_BITWISE) + topology.standalone.restart(timeout=10) + ents = topology.standalone.search_s('cn=%s,cn=plugins,cn=config' % PLUGIN_BITWISE, ldap.SCOPE_BASE, 'objectclass=*') + assert(ents[0].hasValue('nsslapd-pluginEnabled', 'on')) + + expect = 2 + ents = topology.standalone.search_s(TESTBASEDN, ldap.SCOPE_SUBTREE, BITWISE_F2) + assert (len(ents) == expect) + + expect=1 + ents = topology.standalone.search_s(TESTBASEDN, ldap.SCOPE_SUBTREE, BITWISE_F3) + assert (len(ents) == expect) + assert (ents[0].hasAttr('testUserAccountControl')) + + expect=1 + ents = topology.standalone.search_s(TESTBASEDN, ldap.SCOPE_SUBTREE, BITWISE_F6) + assert (len(ents) == expect) + assert (ents[0].hasAttr('testUserAccountControl')) + + +def test_ticket48844_bitwise_off(topology): + """ + Check that when bitwise plugin is not enabled, no plugin + is identified to evaluate the filter -> ldap.UNAVAILABLE_CRITICAL_EXTENSION: + """ + topology.standalone.plugins.disable(name=PLUGIN_BITWISE) + topology.standalone.restart(timeout=10) + ents = topology.standalone.search_s('cn=%s,cn=plugins,cn=config' % PLUGIN_BITWISE, ldap.SCOPE_BASE, 'objectclass=*') + assert(ents[0].hasValue('nsslapd-pluginEnabled', 'off')) + + res = 0 + try: + ents = topology.standalone.search_s(TESTBASEDN, ldap.SCOPE_SUBTREE, BITWISE_F2) + except ldap.UNAVAILABLE_CRITICAL_EXTENSION: + res = 12 + assert (res == 12) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48891_test.py b/dirsrvtests/tests/tickets/ticket48891_test.py new file mode 100644 index 0000000..a33b22a --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48891_test.py @@ -0,0 +1,152 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +import fnmatch + +log = logging.getLogger(__name__) + +installation_prefix = None + +CONFIG_DN = 'cn=config' +RDN_VAL_SUFFIX = 'ticket48891.org' +MYSUFFIX = 'dc=%s' % RDN_VAL_SUFFIX +MYSUFFIXBE = 'ticket48891' + +SEARCHFILTER = '(objectclass=person)' + +OTHER_NAME = 'other_entry' +MAX_OTHERS = 10 + + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + ''' + This fixture is used to standalone topology for the 'module'. + ''' + global installation_prefix + + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + standalone = DirSrv(verbose=False) + + # Args for the standalone instance + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + + # Get the status of the instance and restart it if it exists + instance_standalone = standalone.exists() + + # Remove the instance + if instance_standalone: + standalone.delete() + + # Create the instance + standalone.create() + + # Used to retrieve configuration information (dbdir, confdir...) + standalone.open() + + def fin(): + standalone.delete() + request.addfinalizer(fin) + + # Here we have standalone instance up and running + return TopologyStandalone(standalone) + + +def test_ticket48891_setup(topology): + """ + Check there is no core + Create a second backend + stop DS (that should trigger the core) + check there is no core + """ + log.info('Testing Ticket 48891 - ns-slapd crashes during the shutdown after adding attribute with a matching rule') + + # bind as directory manager + topology.standalone.log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + # check there is no core + entry = topology.standalone.search_s(CONFIG_DN, ldap.SCOPE_BASE, + "(cn=config)", ['nsslapd-errorlog']) + assert entry + path = entry[0].getValue('nsslapd-errorlog').replace('errors', '') + log.debug('Looking for a core file in: ' + path) + cores = fnmatch.filter(os.listdir(path), 'core.*') + assert len(cores) == 0 + + topology.standalone.log.info("\n\n######################### SETUP SUFFIX o=ticket48891.org ######################\n") + + topology.standalone.backend.create(MYSUFFIX, {BACKEND_NAME: MYSUFFIXBE}) + topology.standalone.mappingtree.create(MYSUFFIX, bename=MYSUFFIXBE) + topology.standalone.add_s(Entry((MYSUFFIX, { + 'objectclass': "top domain".split(), + 'dc': RDN_VAL_SUFFIX}))) + + topology.standalone.log.info("\n\n######################### Generate Test data ######################\n") + + # add dummy entries on both backends + for cpt in range(MAX_OTHERS): + name = "%s%d" % (OTHER_NAME, cpt) + topology.standalone.add_s(Entry(("cn=%s,%s" % (name, SUFFIX), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + for cpt in range(MAX_OTHERS): + name = "%s%d" % (OTHER_NAME, cpt) + topology.standalone.add_s(Entry(("cn=%s,%s" % (name, MYSUFFIX), { + 'objectclass': "top person".split(), + 'sn': name, + 'cn': name}))) + + topology.standalone.log.info("\n\n######################### SEARCH ALL ######################\n") + topology.standalone.log.info("Bind as %s and add the READ/SEARCH SELFDN aci" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + entries = topology.standalone.search_s(MYSUFFIX, ldap.SCOPE_SUBTREE, SEARCHFILTER) + topology.standalone.log.info("Returned %d entries.\n", len(entries)) + + assert MAX_OTHERS == len(entries) + + topology.standalone.log.info('%d person entries are successfully created under %s.' % (len(entries), MYSUFFIX)) + topology.standalone.stop(timeout=1) + + cores = fnmatch.filter(os.listdir(path), 'core.*') + for core in cores: + core = os.path.join(path, core) + topology.standalone.log.info('cores are %s' % core) + assert not os.path.isfile(core) + + log.info('Testcase PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket48893_test.py b/dirsrvtests/tests/tickets/ticket48893_test.py new file mode 100644 index 0000000..76d9dc9 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48893_test.py @@ -0,0 +1,105 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +DEBUGGING = False + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) + + +log = logging.getLogger(__name__) + + +class TopologyStandalone(object): + """The DS Topology Class""" + def __init__(self, standalone): + """Init""" + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + """Create DS Deployment""" + + # Creating standalone instance ... + if DEBUGGING: + standalone = DirSrv(verbose=True) + else: + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + """If we are debugging just stop the instances, otherwise remove + them + """ + if DEBUGGING: + standalone.stop(60) + else: + standalone.delete() + + request.addfinalizer(fin) + + # Clear out the tmp dir + standalone.clearTmpDir(__file__) + + return TopologyStandalone(standalone) + + +def _attr_present(conn): + results = conn.search_s('cn=config', ldap.SCOPE_SUBTREE, '(objectClass=*)') + if DEBUGGING: + print(results) + if len(results) > 0: + return True + return False + +def test_ticket48893(topology): + """ + Test that anonymous has NO VIEW to cn=config + """ + + if DEBUGGING: + # Add debugging steps(if any)... + pass + + # Do an anonymous bind + conn = ldap.initialize("ldap://%s:%s" % (HOST_STANDALONE, PORT_STANDALONE)) + conn.simple_bind_s() + + # Make sure that we cannot see what's in cn=config as anonymous + assert(not _attr_present(conn)) + + conn.unbind_s() + + log.info('Test PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket48916_test.py b/dirsrvtests/tests/tickets/ticket48916_test.py new file mode 100644 index 0000000..299b224 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48916_test.py @@ -0,0 +1,253 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +DEBUGGING = False + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) + + +log = logging.getLogger(__name__) + + +class TopologyReplication(object): + """The Replication Topology Class""" + def __init__(self, master1, master2): + """Init""" + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + """Create Replication Deployment""" + + # Creating master 1... + if DEBUGGING: + master1 = DirSrv(verbose=True) + else: + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + if DEBUGGING: + master2 = DirSrv(verbose=True) + else: + master2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: 'meTo_' + master2.host + ':' + str(master2.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m1_m2_agmt = master1.agreement.create(suffix=SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: 'meTo_' + master1.host + ':' + str(master1.port), + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + def fin(): + """If we are debugging just stop the instances, otherwise remove + them + """ + if DEBUGGING: + master1.stop() + master2.stop() + else: + master1.delete() + master2.delete() + + request.addfinalizer(fin) + + # Clear out the tmp dir + master1.clearTmpDir(__file__) + + return TopologyReplication(master1, master2) + + +def _create_user(inst, idnum): + inst.add_s(Entry( + ('uid=user%s,ou=People,%s' % (idnum, DEFAULT_SUFFIX), { + 'objectClass' : 'top account posixAccount'.split(' '), + 'cn' : 'user', + 'uid' : 'user%s' % idnum, + 'homeDirectory' : '/home/user%s' % idnum, + 'loginShell' : '/bin/nologin', + 'gidNumber' : '-1', + 'uidNumber' : '-1', + }) + )) + + +def test_ticket48916(topology): + """ + https://bugzilla.redhat.com/show_bug.cgi?id=1353629 + + This is an issue with ID exhaustion in DNA causing a crash. + + To access each DirSrv instance use: topology.master1, topology.master2, + ..., topology.hub1, ..., topology.consumer1,... + + + """ + + if DEBUGGING: + # Add debugging steps(if any)... + pass + + # Enable the plugin on both servers + + dna_m1 = topology.master1.plugins.get('Distributed Numeric Assignment Plugin') + dna_m2 = topology.master2.plugins.get('Distributed Numeric Assignment Plugin') + + # Configure it + # Create the container for the ranges to go into. + + topology.master1.add_s(Entry( + ('ou=Ranges,%s' % DEFAULT_SUFFIX, { + 'objectClass' : 'top organizationalUnit'.split(' '), + 'ou' : 'Ranges', + }) + )) + + # Create the dnaAdmin? + + # For now we just pinch the dn from the dna_m* types, and add the relevant child config + # but in the future, this could be a better plugin template type from lib389 + + config_dn = dna_m1.dn + + topology.master1.add_s(Entry( + ('cn=uids,%s' % config_dn, { + 'objectClass' : 'top dnaPluginConfig'.split(' '), + 'cn': 'uids', + 'dnatype': 'uidNumber gidNumber'.split(' '), + 'dnafilter': '(objectclass=posixAccount)', + 'dnascope': '%s' % DEFAULT_SUFFIX, + 'dnaNextValue': '1', + 'dnaMaxValue': '50', + 'dnasharedcfgdn': 'ou=Ranges,%s' % DEFAULT_SUFFIX, + 'dnaThreshold': '0', + 'dnaRangeRequestTimeout': '60', + 'dnaMagicRegen': '-1', + 'dnaRemoteBindDN': 'uid=dnaAdmin,ou=People,%s' % DEFAULT_SUFFIX, + 'dnaRemoteBindCred': 'secret123', + 'dnaNextRange': '80-90' + }) + )) + + topology.master2.add_s(Entry( + ('cn=uids,%s' % config_dn, { + 'objectClass' : 'top dnaPluginConfig'.split(' '), + 'cn': 'uids', + 'dnatype': 'uidNumber gidNumber'.split(' '), + 'dnafilter': '(objectclass=posixAccount)', + 'dnascope': '%s' % DEFAULT_SUFFIX, + 'dnaNextValue': '61', + 'dnaMaxValue': '70', + 'dnasharedcfgdn': 'ou=Ranges,%s' % DEFAULT_SUFFIX, + 'dnaThreshold': '2', + 'dnaRangeRequestTimeout': '60', + 'dnaMagicRegen': '-1', + 'dnaRemoteBindDN': 'uid=dnaAdmin,ou=People,%s' % DEFAULT_SUFFIX, + 'dnaRemoteBindCred': 'secret123', + }) + )) + + # Enable the plugins + dna_m1.enable() + dna_m2.enable() + + # Restart the instances + topology.master1.restart(60) + topology.master2.restart(60) + + # Wait for a replication ..... + time.sleep(40) + + # Allocate the 10 members to exhaust + + for i in range(1, 11): + _create_user(topology.master2, i) + + # Allocate the 11th + _create_user(topology.master2, 11) + + log.info('Test PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket48956_test.py b/dirsrvtests/tests/tickets/ticket48956_test.py new file mode 100644 index 0000000..291dd4e --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket48956_test.py @@ -0,0 +1,167 @@ +import os +import sys +import time +import ldap +import logging +import pytest +import subprocess +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + + +DEBUGGING = False + +RDN_LONG_SUFFIX = 'this' +LONG_SUFFIX = "dc=%s,dc=is,dc=a,dc=very,dc=long,dc=suffix,dc=so,dc=long,dc=suffix,dc=extremely,dc=long,dc=suffix" % RDN_LONG_SUFFIX +LONG_SUFFIX_BE = 'ticket48956' + + +ACCT_POLICY_PLUGIN_DN = 'cn=%s,cn=plugins,cn=config' % PLUGIN_ACCT_POLICY +ACCT_POLICY_CONFIG_DN = 'cn=config,%s' % ACCT_POLICY_PLUGIN_DN + + +INACTIVITY_LIMIT = '9' +SEARCHFILTER = '(objectclass=*)' + +TEST_USER = 'ticket48956user' +TEST_USER_PW = '%s' % TEST_USER + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + + +class TopologyStandalone(object): + """The DS Topology Class""" + def __init__(self, standalone): + """Init""" + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + """Create DS Deployment""" + + # Creating standalone instance ... + if DEBUGGING: + standalone = DirSrv(verbose=True) + else: + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + def fin(): + """If we are debugging just stop the instances, otherwise remove them + """ + if DEBUGGING: + standalone.stop() + else: + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + +def _check_status(topology, user, expected): + nsaccountstatus = '%s/sbin/ns-accountstatus.pl' % topology.standalone.prefix + proc = subprocess.Popen([nsaccountstatus, '-Z', 'standalone', '-D', DN_DM, '-w', PASSWORD, '-p', str(topology.standalone.port), '-I', user], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + found = False + while True: + l = proc.stdout.readline() + log.info("output: %s" % l) + if l == "": + break + if expected in l: + found = True + break + return found + +def _check_inactivity(topology, mysuffix): + ACCT_POLICY_DN = 'cn=Account Inactivation Policy,%s' % mysuffix + log.info("\n######################### Adding Account Policy entry: %s ######################\n" % ACCT_POLICY_DN) + topology.standalone.add_s(Entry((ACCT_POLICY_DN, {'objectclass': "top ldapsubentry extensibleObject accountpolicy".split(), + 'accountInactivityLimit': INACTIVITY_LIMIT}))) + TEST_USER_DN = 'uid=%s,%s' % (TEST_USER, mysuffix) + log.info("\n######################### Adding Test User entry: %s ######################\n" % TEST_USER_DN) + topology.standalone.add_s(Entry((TEST_USER_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(), + 'cn': TEST_USER, + 'sn': TEST_USER, + 'givenname': TEST_USER, + 'userPassword': TEST_USER_PW, + 'acctPolicySubentry': ACCT_POLICY_DN}))) + + # Setting the lastLoginTime + try: + topology.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PW) + except ldap.CONSTRAINT_VIOLATION as e: + log.error('CONSTRAINT VIOLATION ' + e.message['desc']) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + + assert(_check_status(topology, TEST_USER_DN, '- activated')) + + time.sleep(int(INACTIVITY_LIMIT) + 5) + assert(_check_status(topology, TEST_USER_DN, '- inactivated (inactivity limit exceeded')) + +def test_ticket48956(topology): + """Write your testcase here... + + Also, if you need any testcase initialization, + please, write additional fixture for that(include finalizer). + + """ + + topology.standalone.modify_s(ACCT_POLICY_PLUGIN_DN, [(ldap.MOD_REPLACE, 'nsslapd-pluginarg0', ACCT_POLICY_CONFIG_DN)]) + + topology.standalone.modify_s(ACCT_POLICY_CONFIG_DN, [(ldap.MOD_REPLACE, 'alwaysrecordlogin', 'yes'), + (ldap.MOD_REPLACE, 'stateattrname', 'lastLoginTime'), + (ldap.MOD_REPLACE, 'altstateattrname', 'createTimestamp'), + (ldap.MOD_REPLACE, 'specattrname', 'acctPolicySubentry'), + (ldap.MOD_REPLACE, 'limitattrname', 'accountInactivityLimit')]) + + # Enable the plugins + topology.standalone.plugins.enable(name=PLUGIN_ACCT_POLICY) + + topology.standalone.restart(timeout=10) + + # Check inactivity on standard suffix (short) + _check_inactivity(topology, SUFFIX) + + # Check inactivity on a long suffix + topology.standalone.backend.create(LONG_SUFFIX, {BACKEND_NAME: LONG_SUFFIX_BE}) + topology.standalone.mappingtree.create(LONG_SUFFIX, bename=LONG_SUFFIX_BE) + topology.standalone.add_s(Entry((LONG_SUFFIX, { + 'objectclass': "top domain".split(), + 'dc': RDN_LONG_SUFFIX}))) + _check_inactivity(topology, LONG_SUFFIX) + + + if DEBUGGING: + # Add debugging steps(if any)... + pass + + log.info('Test PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket49039_test.py b/dirsrvtests/tests/tickets/ticket49039_test.py new file mode 100644 index 0000000..f0b224c --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket49039_test.py @@ -0,0 +1,141 @@ +import time +import ldap +import logging +import pytest +import os +from lib389 import Entry +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +from lib389.topologies import topology_st as topo + + +DEBUGGING = os.getenv("DEBUGGING", default=False) +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + +USER_DN = 'uid=user,dc=example,dc=com' + + +def ssl_init(topo): + """ Setup TLS + """ + topo.standalone.stop() + # Prepare SSL but don't enable it. + for f in ('key3.db', 'cert8.db', 'key4.db', 'cert9.db', 'secmod.db', 'pkcs11.txt'): + try: + os.remove("%s/%s" % (topo.standalone.confdir, f)) + except: + pass + assert(topo.standalone.nss_ssl.reinit() is True) + assert(topo.standalone.nss_ssl.create_rsa_ca() is True) + assert(topo.standalone.nss_ssl.create_rsa_key_and_cert() is True) + # Start again + topo.standalone.start() + topo.standalone.rsa.create() + topo.standalone.config.set('nsslapd-ssl-check-hostname', 'off') + topo.standalone.config.set('nsslapd-secureport', '%s' % + SECUREPORT_STANDALONE1) + topo.standalone.config.set('nsslapd-security', 'on') + topo.standalone.restart() + + log.info("SSL setup complete\n") + + +def test_ticket49039(topo): + """Test "password must change" verses "password min age". Min age should not + block password update if the password was reset. + """ + + # Setup SSL (for ldappasswd test) + ssl_init(topo) + + # Configure password policy + try: + topo.standalone.modify_s("cn=config", [(ldap.MOD_REPLACE, 'nsslapd-pwpolicy-local', 'on'), + (ldap.MOD_REPLACE, 'passwordMustChange', 'on'), + (ldap.MOD_REPLACE, 'passwordExp', 'on'), + (ldap.MOD_REPLACE, 'passwordMaxAge', '86400000'), + (ldap.MOD_REPLACE, 'passwordMinAge', '8640000'), + (ldap.MOD_REPLACE, 'passwordChange', 'on')]) + except ldap.LDAPError as e: + log.fatal('Failed to set password policy: ' + str(e)) + + # Add user, bind, and set password + try: + topo.standalone.add_s(Entry((USER_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'user1', + 'userpassword': PASSWORD + }))) + except ldap.LDAPError as e: + log.fatal('Failed to add user: error ' + e.message['desc']) + assert False + + # Reset password as RootDN + try: + topo.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, 'userpassword', PASSWORD)]) + except ldap.LDAPError as e: + log.fatal('Failed to bind: error ' + e.message['desc']) + assert False + + time.sleep(1) + + # Reset password as user + try: + topo.standalone.simple_bind_s(USER_DN, PASSWORD) + except ldap.LDAPError as e: + log.fatal('Failed to bind: error ' + e.message['desc']) + assert False + + try: + topo.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, 'userpassword', PASSWORD)]) + except ldap.LDAPError as e: + log.fatal('Failed to change password: error ' + e.message['desc']) + assert False + + ################################### + # Make sure ldappasswd also works + ################################### + + # Reset password as RootDN + try: + topo.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('Failed to bind as rootdn: error ' + e.message['desc']) + assert False + + try: + topo.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, 'userpassword', PASSWORD)]) + except ldap.LDAPError as e: + log.fatal('Failed to bind: error ' + e.message['desc']) + assert False + + time.sleep(1) + + # Run ldappasswd as the User. + cmd = ('LDAPTLS_REQCERT=never LDAPTLS_CACERTDIR=' + topo.standalone.get_cert_dir() + + ' ldappasswd' + ' -h ' + topo.standalone.host + ' -Z -p 38901 -D ' + USER_DN + + ' -w password -a password -s password2 ' + USER_DN) + os.system(cmd) + time.sleep(1) + + try: + topo.standalone.simple_bind_s(USER_DN, "password2") + except ldap.LDAPError as e: + log.fatal('Failed to bind: error ' + e.message['desc']) + assert False + + log.info('Test Passed') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket49095_test.py b/dirsrvtests/tests/tickets/ticket49095_test.py new file mode 100644 index 0000000..04f92b2 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket49095_test.py @@ -0,0 +1,85 @@ +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +from lib389.topologies import topology_st as topo + +DEBUGGING = os.getenv("DEBUGGING", default=False) +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + +USER_DN = 'uid=testuser,dc=example,dc=com' +acis = ['(targetattr != "tele*") (version 3.0;acl "test case";allow (read,compare,search)(userdn = "ldap:///anyone");)', + '(targetattr != "TELE*") (version 3.0;acl "test case";allow (read,compare,search)(userdn = "ldap:///anyone");)', + '(targetattr != "telephonenum*") (version 3.0;acl "test case";allow (read,compare,search)(userdn = "ldap:///anyone");)', + '(targetattr != "TELEPHONENUM*") (version 3.0;acl "test case";allow (read,compare,search)(userdn = "ldap:///anyone");)'] + + +def test_ticket49095(topo): + """Check that target attrbiutes with wildcards are case insensitive + """ + + # Add an entry + try: + topo.standalone.add_s(Entry((USER_DN, { + 'objectclass': 'top extensibleObject'.split(), + 'uid': 'testuser', + 'telephonenumber': '555-555-5555' + }))) + except ldap.LDAPError as e: + log.fatal('Failed to add test user: ' + e.message['desc']) + assert False + + for aci in acis: + # Add ACI + try: + topo.standalone.modify_s(DEFAULT_SUFFIX, + [(ldap.MOD_REPLACE, 'aci', aci)]) + + except ldap.LDAPError as e: + log.fatal('Failed to set aci: ' + aci + ': ' + e.message['desc']) + assert False + + # Set Anonymous Bind to test aci + try: + topo.standalone.simple_bind_s("", "") + except ldap.LDAPError as e: + log.fatal('Failed to bind anonymously: ' + e.message['desc']) + assert False + + # Search for entry - should not get any results + try: + entry = topo.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_BASE, + 'telephonenumber=*') + if entry: + log.fatal('The entry was incorrectly returned') + assert False + except ldap.LDAPError as e: + log.fatal('Failed to search anonymously: ' + e.message['desc']) + assert False + + # Set root DN Bind so we can update aci's + try: + topo.standalone.simple_bind_s(DN_DM, PASSWORD) + except ldap.LDAPError as e: + log.fatal('Failed to bind anonymously: ' + e.message['desc']) + assert False + + log.info("Test Passed") + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket49104_test.py b/dirsrvtests/tests/tickets/ticket49104_test.py new file mode 100644 index 0000000..9840b1d --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket49104_test.py @@ -0,0 +1,80 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2017 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import logging +import subprocess + +import pytest +from lib389.tasks import * +from lib389.topologies import topology_st + +log = logging.getLogger(__name__) + +def test_ticket49104_setup(topology_st): + """ + Generate an ldif file having 10K entries and import it. + """ + # Generate a test ldif (100k entries) + ldif_dir = topology_st.standalone.get_ldif_dir() + import_ldif = ldif_dir + '/49104.ldif' + try: + topology_st.standalone.buildLDIF(100000, import_ldif) + except OSError as e: + log.fatal('ticket 49104: failed to create test ldif,\ + error: %s - %s' % (e.errno, e.strerror)) + assert False + + # Online + try: + topology_st.standalone.tasks.importLDIF(suffix=DEFAULT_SUFFIX, + input_file=import_ldif, + args={TASK_WAIT: True}) + except ValueError: + log.fatal('ticket 49104: Online import failed') + assert False + +def test_ticket49104(topology_st): + """ + Run dbscan with valgrind changing the truncate size. + If there is no Invalid report, we can claim the test has passed. + """ + log.info("Test ticket 49104 -- dbscan crashes by memory corruption") + myvallog = '/tmp/val49104.out' + if os.path.exists(myvallog): + os.remove(myvallog) + prog = os.path.join(topology_st.standalone.get_bin_dir(), 'dbscan-bin') + valcmd = 'valgrind --tool=memcheck --leak-check=yes --num-callers=40 --log-file=%s ' % myvallog + id2entry = os.path.join(topology_st.standalone.dbdir, DEFAULT_BENAME, 'id2entry.db') + + for i in range(20, 30): + cmd = valcmd + '%s -f %s -t %d -R' % (prog, id2entry , i) + log.info('Running script: %s' % cmd) + proc = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) + outs = '' + try: + outs = proc.communicate() + except OSError as e: + log.exception('dbscan: error executing (%s): error %d - %s' % + (cmd, e.errno, e.strerror)) + raise e + + grep = 'egrep "Invalid read|Invalid write" %s' % myvallog + p = os.popen(grep, "r") + l = p.readline() + if 'Invalid' in l: + log.fatal('ERROR: valgrind reported invalid read/write: %s' % l) + assert False + + log.info('ticket 49104 - PASSED') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket49121_test.py b/dirsrvtests/tests/tickets/ticket49121_test.py new file mode 100644 index 0000000..6450297 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket49121_test.py @@ -0,0 +1,211 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2017 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import pytest +import sys +import codecs +from lib389.tasks import * +from lib389.utils import * +from lib389.topologies import topology_m2 + +DEBUGGING = os.getenv('DEBUGGING', False) + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + + +def test_ticket49121(topology_m2): + """ + Creating some users. + Deleting quite a number of attributes which may or may not be in the entry. + The attribute type names are to be long. + Under the conditions, it did not estimate the size of string format entry + shorter than the real size and caused the Invalid write / server crash. + """ + reload(sys) + sys.setdefaultencoding('utf-8') + log.info('DefaultEncoding: %s' % sys.getdefaultencoding()) + + utf8file = os.path.join(topology_m2.ms["master1"].getDir(__file__, DATA_DIR), "ticket49121/utf8str.txt") + utf8obj = codecs.open(utf8file, 'r', 'utf-8') + utf8strorig = utf8obj.readline() + utf8str = utf8strorig.encode('utf-8').rstrip('\n') + utf8obj.close() + assert(utf8str) + + # Get the sbin directory so we know where to replace 'ns-slapd' + sbin_dir = topology_m2.ms["master1"].get_sbin_dir() + log.info('sbin_dir: %s' % sbin_dir) + + # stop M1 to do the next updates + topology_m2.ms["master1"].stop(30) + topology_m2.ms["master2"].stop(30) + + # wait for the servers shutdown + time.sleep(5) + + # Enable valgrind + if not topology_m2.ms["master1"].has_asan(): + valgrind_enable(sbin_dir) + + # start M1 to do the next updates + topology_m2.ms["master1"].start() + topology_m2.ms["master2"].start() + + for idx in range(1, 10): + try: + USER_DN = 'CN=user%d,ou=People,%s' % (idx, DEFAULT_SUFFIX) + log.info('adding user %s...' % (USER_DN)) + topology_m2.ms["master1"].add_s(Entry((USER_DN, + {'objectclass': 'top person extensibleObject'.split(' '), + 'cn': 'user%d' % idx, + 'sn': 'SN%d-%s' % (idx, utf8str)}))) + except ldap.LDAPError as e: + log.fatal('Failed to add user (%s): error %s' % (USER_DN, e.message['desc'])) + assert False + + for i in range(1, 3): + time.sleep(3) + for idx in range(1, 10): + try: + USER_DN = 'CN=user%d,ou=People,%s' % (idx, DEFAULT_SUFFIX) + log.info('[%d] modify user %s - replacing attrs...' % (i, USER_DN)) + topology_m2.ms["master1"].modify_s( + USER_DN, [(ldap.MOD_REPLACE, 'cn', 'user%d' % idx), + (ldap.MOD_REPLACE, 'ABCDEFGH_ID', ['239001ad-06dd-e011-80fa-c00000ad5174', + '240f0878-c552-e411-b0f3-000006040037']), + (ldap.MOD_REPLACE, 'attr1', 'NEW_ATTR'), + (ldap.MOD_REPLACE, 'attr20000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr30000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr40000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr50000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr600000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr7000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr8000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr900000000000000000', None), + (ldap.MOD_REPLACE, 'attr1000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr110000000000000', None), + (ldap.MOD_REPLACE, 'attr120000000000000', None), + (ldap.MOD_REPLACE, 'attr130000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr140000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr150000000000000000000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr1600000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr17000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr18000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr1900000000000000000', None), + (ldap.MOD_REPLACE, 'attr2000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr210000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr220000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr230000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr240000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr25000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr260000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr270000000000000000000000000000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr280000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr29000000000000000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr3000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr310000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr320000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr330000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr340000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr350000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr360000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr370000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr380000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr390000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr4000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr410000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr420000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr430000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr440000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr4500000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr460000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr470000000000000000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr480000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr49000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr5000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr510000000000000', None), + (ldap.MOD_REPLACE, 'attr520000000000000', None), + (ldap.MOD_REPLACE, 'attr530000000000000', None), + (ldap.MOD_REPLACE, 'attr540000000000000', None), + (ldap.MOD_REPLACE, 'attr550000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr5600000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr57000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr58000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr5900000000000000000', None), + (ldap.MOD_REPLACE, 'attr6000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr6100000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr6200000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr6300000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr6400000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr65000000000000000000000000000000000000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr6600000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr6700000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr6800000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr690000000000000000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr7000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr71000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr72000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr73000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr74000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr750000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr7600000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr77000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr78000000000000000000000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr79000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr800000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr81000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr82000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr83000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr84000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr85000000000000000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr8600000000000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr87000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr88000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr89000000000000000000000000000000000', None), + (ldap.MOD_REPLACE, 'attr9000000000000000000000000000000000000000000000000000', None)]) + except ldap.LDAPError as e: + log.fatal('Failed to modify user - deleting attrs (%s): error %s' % (USER_DN, e.message['desc'])) + + if not topology_m2.ms["master1"].has_asan(): + results_file = valgrind_get_results_file(topology_m2.ms["master1"]) + + # Stop master2 + topology_m2.ms["master1"].stop(30) + topology_m2.ms["master2"].stop(30) + + # Check for leak + if not topology_m2.ms["master1"].has_asan(): + # Check for invalid read/write + if valgrind_check_file(results_file, VALGRIND_INVALID_STR): + log.info('Valgrind reported invalid!') + assert False + else: + log.info('Valgrind is happy!') + + # Disable valgrind + if not topology_m2.ms["master1"].has_asan(): + valgrind_disable(sbin_dir) + + # start M1 to do the next updates + topology_m2.ms["master1"].start() + topology_m2.ms["master2"].start() + + log.info('Testcase PASSED') + if DEBUGGING: + # Add debugging steps(if any)... + pass + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tickets/ticket49122_test.py b/dirsrvtests/tests/tickets/ticket49122_test.py new file mode 100644 index 0000000..bd553f2 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket49122_test.py @@ -0,0 +1,73 @@ +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * +from lib389.topologies import topology_st as topo + +DEBUGGING = os.getenv("DEBUGGING", default=False) +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + +USER_DN = 'uid=user,' + DEFAULT_SUFFIX +ROLE_DN = 'cn=Filtered_Role_That_Includes_Empty_Role,' + DEFAULT_SUFFIX + + +def test_ticket49122(topo): + """Search for non-existant role and make sure the server does not crash + """ + + # Enable roles plugin + topo.standalone.plugins.enable(name=PLUGIN_ROLES) + topo.standalone.restart() + + # Add invalid role + try: + topo.standalone.add_s(Entry(( + ROLE_DN, {'objectclass': ['top', 'ldapsubentry', 'nsroledefinition', + 'nscomplexroledefinition', 'nsfilteredroledefinition'], + 'cn': 'Filtered_Role_That_Includes_Empty_Role', + 'nsRoleFilter': '(!(nsrole=cn=This_Is_An_Empty_Managed_NsRoleDefinition,dc=example,dc=com))', + 'description': 'A filtered role with filter that will crash the server'}))) + except ldap.LDAPError as e: + topo.standalone.log.fatal('Failed to add filtered role: error ' + e.message['desc']) + assert False + + # Add test user + try: + topo.standalone.add_s(Entry(( + USER_DN, {'objectclass': "top extensibleObject".split(), + 'uid': 'user'}))) + except ldap.LDAPError as e: + topo.standalone.log.fatal('Failed to add test user: error ' + str(e)) + assert False + + if DEBUGGING: + # Add debugging steps(if any)... + print "Attach gdb" + time.sleep(20) + + # Search for the role + try: + topo.standalone.search_s(USER_DN, ldap.SCOPE_SUBTREE, 'objectclass=*', ['nsrole']) + except ldap.LDAPError as e: + topo.standalone.log.fatal('Search failed: error ' + str(e)) + assert False + + topo.standalone.log.info('Test Passed') + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + diff --git a/dirsrvtests/tests/tickets/ticket548_test.py b/dirsrvtests/tests/tickets/ticket548_test.py new file mode 100644 index 0000000..b0feff4 --- /dev/null +++ b/dirsrvtests/tests/tickets/ticket548_test.py @@ -0,0 +1,428 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2015 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +log = logging.getLogger(__name__) + +installation_prefix = None + +# Assuming DEFAULT_SUFFIX is "dc=example,dc=com", otherwise it does not work... :( +SUBTREE_CONTAINER = 'cn=nsPwPolicyContainer,' + DEFAULT_SUFFIX +SUBTREE_PWPDN = 'cn=nsPwPolicyEntry,' + DEFAULT_SUFFIX +SUBTREE_PWP = 'cn=cn\3DnsPwPolicyEntry\2C' + DEFAULT_SUFFIX_ESCAPED + ',' + SUBTREE_CONTAINER +SUBTREE_COS_TMPLDN = 'cn=nsPwTemplateEntry,' + DEFAULT_SUFFIX +SUBTREE_COS_TMPL = 'cn=cn\3DnsPwTemplateEntry\2C' + DEFAULT_SUFFIX_ESCAPED + ',' + SUBTREE_CONTAINER +SUBTREE_COS_DEF = 'cn=nsPwPolicy_CoS,' + DEFAULT_SUFFIX + +USER1_DN = 'uid=user1,' + DEFAULT_SUFFIX +USER2_DN = 'uid=user2,' + DEFAULT_SUFFIX +USER3_DN = 'uid=user3,' + DEFAULT_SUFFIX +USER_PW = 'password' + +class TopologyStandalone(object): + def __init__(self, standalone): + standalone.open() + self.standalone = standalone + + +@pytest.fixture(scope="module") +def topology(request): + global installation_prefix + if installation_prefix: + args_instance[SER_DEPLOYED_DIR] = installation_prefix + + # Creating standalone instance ... + standalone = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_STANDALONE + args_instance[SER_PORT] = PORT_STANDALONE + args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_standalone = args_instance.copy() + standalone.allocate(args_standalone) + instance_standalone = standalone.exists() + if instance_standalone: + standalone.delete() + standalone.create() + standalone.open() + + # Delete each instance in the end + def fin(): + standalone.delete() + request.addfinalizer(fin) + + return TopologyStandalone(standalone) + +def days_to_secs(days): + # Value of 60 * 60 * 24 + return days * 86400 + +# Values are in days +def set_global_pwpolicy(topology, min_=1, max_=10, warn=3): + log.info(" +++++ Enable global password policy +++++\n") + # Enable password policy + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-pwpolicy-local', 'on')]) + except ldap.LDAPError as e: + log.error('Failed to set pwpolicy-local: error ' + e.message['desc']) + assert False + + # Convert our values to seconds + min_secs = days_to_secs(min_) + max_secs = days_to_secs(max_) + warn_secs = days_to_secs(warn) + + log.info(" Set global password Min Age -- %s day\n"% min_) + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'passwordMinAge', '%s' % min_secs)]) + except ldap.LDAPError as e: + log.error('Failed to set passwordMinAge: error ' + e.message['desc']) + assert False + + log.info(" Set global password Expiration -- on\n") + try: + topology_st.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'passwordExp', 'on')]) + except ldap.LDAPError as e: + log.error('Failed to set passwordExp: error ' + e.message['desc']) + assert False + + log.info(" Set global password Max Age -- %s days\n" % max_) + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'passwordMaxAge', '%s' % max_secs)]) + except ldap.LDAPError as e: + log.error('Failed to set passwordMaxAge: error ' + e.message['desc']) + assert False + + log.info(" Set global password Warning -- %s days\n" % warn) + try: + topology.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'passwordWarning', '%s' % warn_secs)]) + except ldap.LDAPError as e: + log.error('Failed to set passwordWarning: error ' + e.message['desc']) + assert False + + +def set_subtree_pwpolicy(topology, min_=2, max_=20, warn=6): + log.info(" +++++ Enable subtree level password policy +++++\n") + + # Convert our values to seconds + min_secs = days_to_secs(min_) + max_secs = days_to_secs(max_) + warn_secs = days_to_secs(warn) + + log.info(" Add the container") + try: + topology.standalone.add_s(Entry((SUBTREE_CONTAINER, {'objectclass': 'top nsContainer'.split(), + 'cn': 'nsPwPolicyContainer'}))) + except ldap.LDAPError as e: + log.error('Failed to add subtree container: error ' + e.message['desc']) + #assert False + + try: + # Purge the old policy + topology.standalone.delete_s(SUBTREE_PWP) + except: + pass + + log.info(" Add the password policy subentry {passwordMustChange: on, passwordMinAge: %s, passwordMaxAge: %s, passwordWarning: %s}" % (min_, max_, warn)) + try: + topology.standalone.add_s(Entry((SUBTREE_PWP, {'objectclass': 'top ldapsubentry passwordpolicy'.split(), + 'cn': SUBTREE_PWPDN, + 'passwordMustChange': 'on', + 'passwordExp': 'on', + 'passwordMinAge': '%s' % min_secs, + 'passwordMaxAge': '%s' % max_secs, + 'passwordWarning': '%s' % warn_secs, + 'passwordChange': 'on', + 'passwordStorageScheme': 'clear'}))) + except ldap.LDAPError as e: + log.error('Failed to add passwordpolicy: error ' + e.message['desc']) + assert False + + log.info(" Add the COS template") + try: + topology.standalone.add_s(Entry((SUBTREE_COS_TMPL, {'objectclass': 'top ldapsubentry costemplate extensibleObject'.split(), + 'cn': SUBTREE_PWPDN, + 'cosPriority': '1', + 'cn': SUBTREE_COS_TMPLDN, + 'pwdpolicysubentry': SUBTREE_PWP}))) + except ldap.LDAPError as e: + log.error('Failed to add COS template: error ' + e.message['desc']) + #assert False + + log.info(" Add the COS definition") + try: + topology.standalone.add_s(Entry((SUBTREE_COS_DEF, {'objectclass': 'top ldapsubentry cosSuperDefinition cosPointerDefinition'.split(), + 'cn': SUBTREE_PWPDN, + 'costemplatedn': SUBTREE_COS_TMPL, + 'cosAttribute': 'pwdpolicysubentry default operational-default'}))) + except ldap.LDAPError as e: + log.error('Failed to add COS def: error ' + e.message['desc']) + #assert False + + time.sleep(1) + +def update_passwd(topology, user, passwd, newpasswd): + log.info(" Bind as {%s,%s}" % (user, passwd)) + topology.standalone.simple_bind_s(user, passwd) + try: + topology.standalone.modify_s(user, [(ldap.MOD_REPLACE, 'userpassword', newpasswd)]) + except ldap.LDAPError as e: + log.fatal('test_ticket548: Failed to update the password ' + cpw + ' of user ' + user + ': error ' + e.message['desc']) + assert False + + time.sleep(1) + + +def check_shadow_attr_value(entry, attr_type, expected, dn): + if entry.hasAttr(attr_type): + actual = entry.getValue(attr_type) + if int(actual) == expected: + log.info('%s of entry %s has expected value %s' % (attr_type, dn, actual)) + assert True + else: + log.fatal('%s %s of entry %s does not have expected value %s' % (attr_type, actual, dn, expected)) + assert False + else: + log.fatal('entry %s does not have %s attr' % (dn, attr_type)) + assert False + + +def test_ticket548_test_with_no_policy(topology): + """ + Check shadowAccount under no password policy + """ + log.info("Case 1. No password policy") + + log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + log.info('Add an entry' + USER1_DN) + try: + topology.standalone.add_s(Entry((USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson shadowAccount".split(), + 'sn': '1', + 'cn': 'user 1', + 'uid': 'user1', + 'givenname': 'user', + 'mail': 'user1@' + DEFAULT_SUFFIX, + 'userpassword': USER_PW}))) + except ldap.LDAPError as e: + log.fatal('test_ticket548: Failed to add user' + USER1_DN + ': error ' + e.message['desc']) + assert False + + edate = int(time.time() / (60 * 60 * 24)) + log.info('Search entry %s' % USER1_DN) + + log.info("Bind as %s" % USER1_DN) + topology.standalone.simple_bind_s(USER1_DN, USER_PW) + entry = topology.standalone.getEntry(USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)", ['shadowLastChange']) + check_shadow_attr_value(entry, 'shadowLastChange', edate, USER1_DN) + + log.info("Check shadowAccount with no policy was successfully verified.") + + +def test_ticket548_test_global_policy(topology): + """ + Check shadowAccount with global password policy + """ + + log.info("Case 2. Check shadowAccount with global password policy") + + log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + set_global_pwpolicy(topology) + + log.info('Add an entry' + USER2_DN) + try: + topology.standalone.add_s(Entry((USER2_DN, {'objectclass': "top person organizationalPerson inetOrgPerson shadowAccount".split(), + 'sn': '2', + 'cn': 'user 2', + 'uid': 'user2', + 'givenname': 'user', + 'mail': 'user2@' + DEFAULT_SUFFIX, + 'userpassword': USER_PW}))) + except ldap.LDAPError as e: + log.fatal('test_ticket548: Failed to add user' + USER2_DN + ': error ' + e.message['desc']) + assert False + + edate = int(time.time() / (60 * 60 * 24)) + + log.info("Bind as %s" % USER1_DN) + topology.standalone.simple_bind_s(USER1_DN, USER_PW) + + log.info('Search entry %s' % USER1_DN) + entry = topology.standalone.getEntry(USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)") + check_shadow_attr_value(entry, 'shadowLastChange', edate, USER1_DN) + + # passwordMinAge -- 1 day + check_shadow_attr_value(entry, 'shadowMin', 1, USER1_DN) + + # passwordMaxAge -- 10 days + check_shadow_attr_value(entry, 'shadowMax', 10, USER1_DN) + + # passwordWarning -- 3 days + check_shadow_attr_value(entry, 'shadowWarning', 3, USER1_DN) + + log.info("Bind as %s" % USER2_DN) + topology.standalone.simple_bind_s(USER2_DN, USER_PW) + + log.info('Search entry %s' % USER2_DN) + entry = topology.standalone.getEntry(USER2_DN, ldap.SCOPE_BASE, "(objectclass=*)") + check_shadow_attr_value(entry, 'shadowLastChange', edate, USER2_DN) + + # passwordMinAge -- 1 day + check_shadow_attr_value(entry, 'shadowMin', 1, USER2_DN) + + # passwordMaxAge -- 10 days + check_shadow_attr_value(entry, 'shadowMax', 10, USER2_DN) + + # passwordWarning -- 3 days + check_shadow_attr_value(entry, 'shadowWarning', 3, USER2_DN) + + # Bind as DM again, change policy + log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + set_global_pwpolicy(topology, 3, 30, 9) + + # change the user password, then check again. + log.info("Bind as %s" % USER2_DN) + topology.standalone.simple_bind_s(USER2_DN, USER_PW) + + newpasswd = USER_PW + '2' + update_passwd(topology, USER2_DN, USER_PW, newpasswd) + + log.info("Re-bind as %s with new password" % USER2_DN) + topology.standalone.simple_bind_s(USER2_DN, newpasswd) + + ## This tests if we update the shadow values on password change. + log.info('Search entry %s' % USER2_DN) + entry = topology.standalone.getEntry(USER2_DN, ldap.SCOPE_BASE, "(objectclass=*)") + + # passwordMinAge -- 1 day + check_shadow_attr_value(entry, 'shadowMin', 3, USER2_DN) + + # passwordMaxAge -- 10 days + check_shadow_attr_value(entry, 'shadowMax', 30, USER2_DN) + + # passwordWarning -- 3 days + check_shadow_attr_value(entry, 'shadowWarning', 9, USER2_DN) + + log.info("Check shadowAccount with global policy was successfully verified.") + + +def test_ticket548_test_subtree_policy(topology): + """ + Check shadowAccount with subtree level password policy + """ + + log.info("Case 3. Check shadowAccount with subtree level password policy") + + log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + # Check the global policy values + + set_subtree_pwpolicy(topology, 2, 20, 6) + + log.info('Add an entry' + USER3_DN) + try: + topology.standalone.add_s(Entry((USER3_DN, {'objectclass': "top person organizationalPerson inetOrgPerson shadowAccount".split(), + 'sn': '3', + 'cn': 'user 3', + 'uid': 'user3', + 'givenname': 'user', + 'mail': 'user3@' + DEFAULT_SUFFIX, + 'userpassword': USER_PW}))) + except ldap.LDAPError as e: + log.fatal('test_ticket548: Failed to add user' + USER3_DN + ': error ' + e.message['desc']) + assert False + + log.info('Search entry %s' % USER3_DN) + entry0 = topology.standalone.getEntry(USER3_DN, ldap.SCOPE_BASE, "(objectclass=*)") + + log.info('Expecting shadowLastChange 0 since passwordMustChange is on') + check_shadow_attr_value(entry0, 'shadowLastChange', 0, USER3_DN) + + # passwordMinAge -- 2 day + check_shadow_attr_value(entry0, 'shadowMin', 2, USER3_DN) + + # passwordMaxAge -- 20 days + check_shadow_attr_value(entry0, 'shadowMax', 20, USER3_DN) + + # passwordWarning -- 6 days + check_shadow_attr_value(entry0, 'shadowWarning', 6, USER3_DN) + + log.info("Bind as %s" % USER3_DN) + topology.standalone.simple_bind_s(USER3_DN, USER_PW) + + log.info('Search entry %s' % USER3_DN) + try: + entry1 = topology.standalone.getEntry(USER3_DN, ldap.SCOPE_BASE, "(objectclass=*)") + except ldap.UNWILLING_TO_PERFORM: + log.info('test_ticket548: Search by' + USER3_DN + ' failed by UNWILLING_TO_PERFORM as expected') + except ldap.LDAPError as e: + log.fatal('test_ticket548: Failed to serch user' + USER3_DN + ' by self: error ' + e.message['desc']) + assert False + + log.info("Bind as %s and updating the password with a new one" % USER3_DN) + topology.standalone.simple_bind_s(USER3_DN, USER_PW) + + # Bind as DM again, change policy + log.info("Bind as %s" % DN_DM) + topology.standalone.simple_bind_s(DN_DM, PASSWORD) + + set_subtree_pwpolicy(topology, 4, 40, 12) + + newpasswd = USER_PW + '0' + update_passwd(topology, USER3_DN, USER_PW, newpasswd) + + log.info("Re-bind as %s with new password" % USER3_DN) + topology.standalone.simple_bind_s(USER3_DN, newpasswd) + + try: + entry2 = topology.standalone.getEntry(USER3_DN, ldap.SCOPE_BASE, "(objectclass=*)") + except ldap.LDAPError as e: + log.fatal('test_ticket548: Failed to serch user' + USER3_DN + ' by self: error ' + e.message['desc']) + assert False + + edate = int(time.time() / (60 * 60 * 24)) + + log.info('Expecting shadowLastChange %d once userPassword is updated', edate) + check_shadow_attr_value(entry2, 'shadowLastChange', edate, USER3_DN) + + log.info('Search entry %s' % USER3_DN) + entry = topology.standalone.getEntry(USER3_DN, ldap.SCOPE_BASE, "(objectclass=*)") + check_shadow_attr_value(entry, 'shadowLastChange', edate, USER3_DN) + + # passwordMinAge -- 1 day + check_shadow_attr_value(entry, 'shadowMin', 4, USER3_DN) + + # passwordMaxAge -- 10 days + check_shadow_attr_value(entry, 'shadowMax', 40, USER3_DN) + + # passwordWarning -- 3 days + check_shadow_attr_value(entry, 'shadowWarning', 12, USER3_DN) + + log.info("Check shadowAccount with subtree level policy was successfully verified.") + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) diff --git a/dirsrvtests/tests/tmp/README b/dirsrvtests/tests/tmp/README new file mode 100644 index 0000000..0e8f416 --- /dev/null +++ b/dirsrvtests/tests/tmp/README @@ -0,0 +1,10 @@ +TMP DIRECTORY README + +This directory is used to store files(LDIFs, etc) that are created during the ticket script runtime. The script is also responsible for removing any files it places in this directory. This directory can be retrieved via getDir() from the DirSrv class. + +Example: + + tmp_dir_path = topology.standalone.getDir(__file__, TMP_DIR) + + new_ldif = tmp_dir_path + "export.ldif" + diff --git a/dirsrvtests/tickets/ticket47966_test.py b/dirsrvtests/tickets/ticket47966_test.py new file mode 100644 index 0000000..0e784af --- /dev/null +++ b/dirsrvtests/tickets/ticket47966_test.py @@ -0,0 +1,219 @@ +import os +import sys +import time +import ldap +import logging +import pytest +from lib389 import DirSrv, Entry, tools, tasks +from lib389.tools import DirSrvTools +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +installation1_prefix = None + +m1_m2_agmt = "" + +class TopologyReplication(object): + def __init__(self, master1, master2): + master1.open() + self.master1 = master1 + master2.open() + self.master2 = master2 + + +@pytest.fixture(scope="module") +def topology(request): + global installation1_prefix + if installation1_prefix: + args_instance[SER_DEPLOYED_DIR] = installation1_prefix + + # Creating master 1... + master1 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_1 + args_instance[SER_PORT] = PORT_MASTER_1 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_1 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master1.allocate(args_master) + instance_master1 = master1.exists() + if instance_master1: + master1.delete() + master1.create() + master1.open() + master1.replica.enableReplication(suffix=DEFAULT_SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_1) + + # Creating master 2... + master2 = DirSrv(verbose=False) + args_instance[SER_HOST] = HOST_MASTER_2 + args_instance[SER_PORT] = PORT_MASTER_2 + args_instance[SER_SERVERID_PROP] = SERVERID_MASTER_2 + args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX + args_master = args_instance.copy() + master2.allocate(args_master) + instance_master2 = master2.exists() + if instance_master2: + master2.delete() + master2.create() + master2.open() + master2.replica.enableReplication(suffix=DEFAULT_SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + + # + # Create all the agreements + # + # Creating agreement from master 1 to master 2 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + global m1_m2_agmt + m1_m2_agmt = master1.agreement.create(suffix=DEFAULT_SUFFIX, host=master2.host, port=master2.port, properties=properties) + if not m1_m2_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m1_m2_agmt) + + # Creating agreement from master 2 to master 1 + properties = {RA_NAME: r'meTo_$host:$port', + RA_BINDDN: defaultProperties[REPLICATION_BIND_DN], + RA_BINDPW: defaultProperties[REPLICATION_BIND_PW], + RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD], + RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]} + m2_m1_agmt = master2.agreement.create(suffix=DEFAULT_SUFFIX, host=master1.host, port=master1.port, properties=properties) + if not m2_m1_agmt: + log.fatal("Fail to create a master -> master replica agreement") + sys.exit(1) + log.debug("%s created" % m2_m1_agmt) + + # Allow the replicas to get situated with the new agreements... + time.sleep(5) + + # + # Initialize all the agreements + # + master1.agreement.init(DEFAULT_SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + master1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if master1.testReplication(DEFAULT_SUFFIX, master2): + log.info('Replication is working.') + else: + log.fatal('Replication is not working.') + assert False + + # Clear out the tmp dir + master1.clearTmpDir(__file__) + + return TopologyReplication(master1, master2) + + +def test_ticket47966(topology): + ''' + Testing bulk import when the backend with VLV was recreated. + If the test passes without the server crash, 47966 is verified. + ''' + log.info('Testing Ticket 47966 - [VLV] slapd crashes during Dogtag clone reinstallation') + M1 = topology.master1 + M2 = topology.master2 + + log.info('0. Create a VLV index on Master 2.') + # get the backend entry + be = M2.replica.conn.backend.list(suffix=DEFAULT_SUFFIX) + if not be: + log.fatal("ticket47966: enable to retrieve the backend for %s" % DEFAULT_SUFFIX) + raise ValueError("no backend for suffix %s" % DEFAULT_SUFFIX) + bent = be[0] + beName = bent.getValue('cn') + beDn = "cn=%s,cn=ldbm database,cn=plugins,cn=config" % beName + + # generate vlvSearch entry + vlvSrchDn = "cn=vlvSrch,%s" % beDn + log.info('0-1. vlvSearch dn: %s' % vlvSrchDn) + vlvSrchEntry = Entry(vlvSrchDn) + vlvSrchEntry.setValues('objectclass', 'top', 'vlvSearch') + vlvSrchEntry.setValues('cn', 'vlvSrch') + vlvSrchEntry.setValues('vlvBase', DEFAULT_SUFFIX) + vlvSrchEntry.setValues('vlvFilter', '(|(objectclass=*)(objectclass=ldapsubentry))') + vlvSrchEntry.setValues('vlvScope', '2') + M2.add_s(vlvSrchEntry) + + # generate vlvIndex entry + vlvIndexDn = "cn=vlvIdx,%s" % vlvSrchDn + log.info('0-2. vlvIndex dn: %s' % vlvIndexDn) + vlvIndexEntry = Entry(vlvIndexDn) + vlvIndexEntry.setValues('objectclass', 'top', 'vlvIndex') + vlvIndexEntry.setValues('cn', 'vlvIdx') + vlvIndexEntry.setValues('vlvSort', 'cn ou sn') + M2.add_s(vlvIndexEntry) + + log.info('1. Initialize Master 2 from Master 1.') + M1.agreement.init(DEFAULT_SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + M1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if M1.testReplication(DEFAULT_SUFFIX, M2): + log.info('1-1. Replication is working.') + else: + log.fatal('1-1. Replication is not working.') + assert False + + log.info('2. Delete the backend instance on Master 2.') + M2.delete_s(vlvIndexDn) + M2.delete_s(vlvSrchDn) + # delete the agreement, replica, and mapping tree, too. + M2.replica.disableReplication(DEFAULT_SUFFIX) + mappingTree = 'cn="%s",cn=mapping tree,cn=config' % DEFAULT_SUFFIX + M2.mappingtree.delete(DEFAULT_SUFFIX, beName, mappingTree) + M2.backend.delete(DEFAULT_SUFFIX, beDn, beName) + + log.info('3. Recreate the backend and the VLV index on Master 2.') + M2.mappingtree.create(DEFAULT_SUFFIX, beName) + M2.backend.create(DEFAULT_SUFFIX, {BACKEND_NAME: beName}) + log.info('3-1. Recreating %s and %s on Master 2.' % (vlvSrchDn, vlvIndexDn)) + M2.add_s(vlvSrchEntry) + M2.add_s(vlvIndexEntry) + M2.replica.enableReplication(suffix=DEFAULT_SUFFIX, role=REPLICAROLE_MASTER, replicaId=REPLICAID_MASTER_2) + # agreement m2_m1_agmt is not needed... :p + + log.info('4. Initialize Master 2 from Master 1 again.') + M1.agreement.init(DEFAULT_SUFFIX, HOST_MASTER_2, PORT_MASTER_2) + M1.waitForReplInit(m1_m2_agmt) + + # Check replication is working... + if M1.testReplication(DEFAULT_SUFFIX, M2): + log.info('4-1. Replication is working.') + else: + log.fatal('4-1. Replication is not working.') + assert False + + log.info('5. Check Master 2 is up.') + entries = M2.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(cn=*)') + assert len(entries) > 0 + log.info('5-1. %s entries are returned from M2.' % len(entries)) + + log.info('Test complete') + + +def test_ticket47966_final(topology): + topology.master1.delete() + topology.master2.delete() + log.info('Testcase PASSED') + + +def run_isolated(): + global installation1_prefix + installation1_prefix = None + + topo = topology(True) + test_ticket47966(topo) + test_ticket47966_final(topo) + + +if __name__ == '__main__': + run_isolated() + diff --git a/include/base/crit.h b/include/base/crit.h new file mode 100644 index 0000000..119ecda --- /dev/null +++ b/include/base/crit.h @@ -0,0 +1,210 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef BASE_CRIT_H +#define BASE_CRIT_H + +#ifndef NOINTNSAPI +#define INTNSAPI +#endif /* !NOINTNSAPI */ + +/* + * crit.h: Critical section abstraction. Used in threaded servers to protect + * areas where two threads can interfere with each other. + * + * Condvars are condition variables that are used for thread-thread + * synchronization. + * + * Rob McCool + */ + +#ifndef NETSITE_H +#include "netsite.h" +#endif /* !NETSITE_H */ + +/* Define C++ interface */ +#ifdef __cplusplus + +#include "prlog.h" /* NSPR */ + +#ifndef prmon_h___ +#include "prmon.h" +#endif /* !prmon_h___ */ + +class NSAPI_PUBLIC CriticalSection +{ +public: + CriticalSection(); + ~CriticalSection(); + void Acquire(){PR_EnterMonitor(_crtsec);} + void Release(){PR_ExitMonitor(_crtsec);} + +private: + PRMonitor *_crtsec; +}; + +inline CriticalSection::CriticalSection():_crtsec(0) +{ + _crtsec = PR_NewMonitor(); + PR_ASSERT(_crtsec); +} + +inline CriticalSection::~CriticalSection() +{ + if (_crtsec) + PR_DestroyMonitor(_crtsec); +} + +class SafeLock { + public: + SafeLock (CriticalSection&); // acquire lock + ~SafeLock (); // release lock + private: + CriticalSection& lock; +}; + +inline SafeLock::SafeLock (CriticalSection& _lock) : lock(_lock) +{ + lock.Acquire(); +} + +inline SafeLock::~SafeLock () +{ + lock.Release(); +} +#endif /* __cplusplus */ + +/* --- Begin function prototypes --- */ + +#ifdef INTNSAPI + +NSPR_BEGIN_EXTERN_C + +/* ASSERT function only */ +NSAPI_PUBLIC int crit_owner_is_me(CRITICAL id); + +/* + * INTcrit_init creates and returns a new critical section variable. At the + * time of creation no one has entered it. + */ +NSAPI_PUBLIC CRITICAL INTcrit_init(void); + +/* + * INTcrit_enter enters a critical section. If someone is already in the + * section, the calling thread is blocked until that thread exits. + */ +NSAPI_PUBLIC void INTcrit_enter(CRITICAL id); + + +/* + * INTcrit_exit exits a critical section. If another thread is blocked waiting + * to enter, it will be unblocked and given ownership of the section. + */ +NSAPI_PUBLIC void INTcrit_exit(CRITICAL id); + + +/* + * INTcrit_terminate removes a previously allocated critical section variable. + */ +NSAPI_PUBLIC void INTcrit_terminate(CRITICAL id); + + +/* + * INTcondvar_init initializes and returns a new condition variable. You + * must provide a critical section to be associated with this condition + * variable. + */ +NSAPI_PUBLIC CONDVAR INTcondvar_init(CRITICAL id); + + +/* + * INTcondvar_wait blocks on the given condition variable. The calling thread + * will be blocked until another thread calls INTcondvar_notify on this variable. + * The caller must have entered the critical section associated with this + * condition variable prior to waiting for it. + */ +NSAPI_PUBLIC void INTcondvar_wait(CONDVAR cv); +NSAPI_PUBLIC void condvar_timed_wait(CONDVAR _cv, long secs); + + +/* + * INTcondvar_notify awakens any threads blocked on the given condition + * variable. The caller must have entered the critical section associated + * with this variable first. + */ +NSAPI_PUBLIC void INTcondvar_notify(CONDVAR cv); + +/* + * INTcondvar_notifyAll awakens all threads blocked on the given condition + * variable. The caller must have entered the critical section associated + * with this variable first. + */ +NSAPI_PUBLIC void INTcondvar_notifyAll(CONDVAR cv); + +/* + * INTcondvar_terminate frees the given previously allocated condition variable + */ +NSAPI_PUBLIC void INTcondvar_terminate(CONDVAR cv); + + +/* + * Create a counting semaphore. + * Return non-zero on success, 0 on failure. + */ +NSAPI_PUBLIC COUNTING_SEMAPHORE INTcs_init(int initial_count); + +/* + * Destroy a counting semaphore + */ +NSAPI_PUBLIC void INTcs_terminate(COUNTING_SEMAPHORE csp); + +/* + * Wait to "enter" the semaphore. + * Return 0 on success, -1 on failure. + */ +NSAPI_PUBLIC int INTcs_wait(COUNTING_SEMAPHORE csp); + +/* + * Enter the semaphore if the count is > 0. Otherwise return -1. + * + */ +NSAPI_PUBLIC int INTcs_trywait(COUNTING_SEMAPHORE csp); + +/* + * Release the semaphore- allowing a thread to enter. + * Return 0 on success, -1 on failure. + */ +NSAPI_PUBLIC int INTcs_release(COUNTING_SEMAPHORE csp); + +NSPR_END_EXTERN_C + +/* --- End function prototypes --- */ + +#define crit_init INTcrit_init +#define crit_enter INTcrit_enter +#define crit_exit INTcrit_exit +#define crit_terminate INTcrit_terminate +#define condvar_init INTcondvar_init +#define condvar_wait INTcondvar_wait +#define condvar_notify INTcondvar_notify +#define condvar_notifyAll INTcondvar_notifyAll +#define condvar_terminate INTcondvar_terminate +#define cs_init INTcs_init +#define cs_terminate INTcs_terminate +#define cs_wait INTcs_wait +#define cs_trywait INTcs_trywait +#define cs_release INTcs_release + +#endif /* INTNSAPI */ + +#endif /* !BASE_CRIT_H */ diff --git a/include/base/dbtbase.h b/include/base/dbtbase.h new file mode 100644 index 0000000..8865160 --- /dev/null +++ b/include/base/dbtbase.h @@ -0,0 +1,227 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + + +#define LIBRARY_NAME "base" + +#ifdef RESOURCE_STR +static char dbtbaseid[] = "$DBT: base referenced v1 $"; +#endif + +#include "i18n.h" + +BEGIN_STR(base) + ResDef( DBT_LibraryID_, -1, dbtbaseid )/* extracted from dbtbase.h*/ + ResDef( DBT_insufficientMemoryToCreateHashTa_, 1, "insufficient memory to create hash table" )/*extracted from cache.cpp*/ + ResDef( DBT_insufficientMemoryToCreateHashTa_1, 2, "insufficient memory to create hash table" )/*extracted from cache.cpp*/ + ResDef( DBT_cacheDestroyCacheTablesAppearCor_, 3, "cache_destroy: cache tables appear corrupt." )/*extracted from cache.cpp*/ + ResDef( DBT_unableToAllocateHashEntry_, 4, "unable to allocate hash entry" )/*extracted from cache.cpp*/ + ResDef( DBT_cacheInsertUnableToCreateCacheEn_, 5, "cache_insert: unable to create cache entry" )/*extracted from cache.cpp*/ + ResDef( DBT_http10200OkNcontentTypeTextHtmlN_, 6, "HTTP/1.0 200 OK\nContent-type: text/html\n\n" )/*extracted from cache.cpp*/ + ResDef( DBT_H2NetscapeCacheStatusReportH2N_, 7, "

Cache status report

\n" )/*extracted from cache.cpp*/ + ResDef( DBT_noCachesOnSystemP_, 8, "No caches on system

" )/*extracted from cache.cpp*/ + ResDef( DBT_H2SCacheH2N_, 9, "

%s cache

\n" )/*extracted from cache.cpp*/ + ResDef( DBT_cacheHitRatioDDFPNPN_, 10, "Cache hit ratio: %d/%d (%f)

\n

\n" )/*extracted from cache.cpp*/ + ResDef( DBT_cacheSizeDDPNPN_, 11, "Cache size: %d/%d

\n

\n" )/*extracted from cache.cpp*/ + ResDef( DBT_hashTableSizeDPNPN_, 12, "Hash table size: %d

\n

\n" )/*extracted from cache.cpp*/ + ResDef( DBT_mruDPNlruDPN_, 13, "mru : %d

\nlru : %d

\n" )/*extracted from cache.cpp*/ + ResDef( DBT_UlTableBorder4ThBucketThThAddres_, 14, "
    \n" )/*extracted from cache.cpp*/ + ResDef( DBT_munmapFailedS_, 15, "munmap failed (%s)" )/*extracted from buffer.cpp*/ + ResDef( DBT_munmapFailedS_1, 16, "munmap failed (%s)" )/*extracted from buffer.cpp*/ + ResDef( DBT_closeFailedS_, 17, "close failed (%s)" )/*extracted from buffer.cpp*/ + ResDef( DBT_daemonUnableToForkNewProcessSN_, 18, "daemon: unable to fork new process (%s)\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_daemonSetsidFailedSN_, 19, "daemon: setsid failed (%s)\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_daemonCanTLogPidToSSN_, 20, "daemon: can't log pid to %s (%s)\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_warningCouldNotSetGroupIdToDSN_, 21, "warning: could not set group id to %d (%s)\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_warningCouldNotSetUserIdToDSN_, 22, "warning: could not set user id to %d (%s)\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_warningDaemonIsRunningAsSuperUse_, 23, "warning: daemon is running as super-user\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_couldNotDetermineCurrentUserName_, 24, "could not determine current user name\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_errorChrootToSFailedSN_, 25, "error: chroot to %s failed (%s)\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_AddressS_, 27, ", address %s" )/*extracted from daemon.cpp*/ + ResDef( DBT_warningStatisticsDisabledSN_, 28, "warning: statistics disabled (%s)\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_securityHandshakeTimedOutForPidD_, 29, "security handshake timed out for pid %d" )/*extracted from daemon.cpp*/ + ResDef( DBT_warningStatisticsDisabledSN_1, 30, "warning: statistics disabled (%s)\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_secureHandshakeFailedCodeDN_, 31, "secure handshake failed (code %d)\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_acceptFailedS_, 32, "accept failed (%s)" )/*extracted from daemon.cpp*/ + ResDef( DBT_warningStatisticsDisabledSN_2, 33, "warning: statistics disabled (%s)\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_selectThreadMiss_, 34, "select thread miss" )/*extracted from daemon.cpp*/ + ResDef( DBT_keepaliveWorkerAwokenWithNoWorkT_, 35, "keepalive worker awoken with no work to do" )/*extracted from daemon.cpp*/ + ResDef( DBT_couldNotCreateNewThreadDS_, 36, "could not create new thread: %d (%s)" )/*extracted from daemon.cpp*/ + ResDef( DBT_waitForSemaSucceededButNothingTo_, 37, "wait for sema succeeded, but nothing to dequeue" )/*extracted from daemon.cpp*/ + ResDef( DBT_queueSemaCreationFailure_, 38, "queue-sema creation failure" )/*extracted from daemon.cpp*/ + ResDef( DBT_errorGettingProcessorInfoForProc_, 39, "error getting processor info for processor %d" )/*extracted from daemon.cpp*/ + ResDef( DBT_errorBindingToProcessorD_, 40, "Error binding to processor %d" )/*extracted from daemon.cpp*/ + ResDef( DBT_boundProcessDToProcessorD_, 41, "bound process %d to processor %d" )/*extracted from daemon.cpp*/ + ResDef( DBT_netscapeServerIsNotExplicitlyBin_, 42, "Server is not explicitly binding to any processors." )/*extracted from daemon.cpp*/ + ResDef( DBT_cacheMonitorExited_, 43, "cache monitor exited" )/*extracted from daemon.cpp*/ + ResDef( DBT_cacheBatchUpdateDaemonExited_, 44, "cache batch update daemon exited" )/*extracted from daemon.cpp*/ + ResDef( DBT_usingSingleThreadedAccepts_, 45, "Using single threaded accepts." )/*extracted from daemon.cpp*/ + ResDef( DBT_usingMultiThreadedAccepts_, 46, "Using multi threaded accepts." )/*extracted from daemon.cpp*/ + ResDef( DBT_usingPartialSingleThreadedAccept_, 47, "Using partial single threaded accepts." )/*extracted from daemon.cpp*/ + ResDef( DBT_thisMachineHasDProcessors_, 48, "This machine has %d processors." )/*extracted from daemon.cpp*/ + ResDef( DBT_errorCallingThrSeconcurrencyDS_, 49, "Error calling thr_seconcurrency(%d)- (%s)" )/*extracted from daemon.cpp*/ + ResDef( DBT_setConncurrencyToD_, 50, "Set conncurrency to %d." )/*extracted from daemon.cpp*/ + ResDef( DBT_warningNetscapeExecutableAndLibr_, 51, "WARNING! executable and library have different versions.\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_seminitFailedSN_, 54, "seminit failed (%s)\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_thisBetaSoftwareHasExpiredN_, 55, "This beta software has expired.\n" )/*extracted from daemon.cpp*/ + ResDef( DBT_cacheMonitorRespawned_, 56, "Cache monitor respawned" )/*extracted from daemon.cpp*/ + ResDef( DBT_cacheBatchUpdateDaemonRespawned_, 57, "Cache batch update daemon respawned" )/*extracted from daemon.cpp*/ + ResDef( DBT_canTFindEmptyStatisticsSlot_, 58, "can't find empty statistics slot" )/*extracted from daemon.cpp*/ + ResDef( DBT_canTForkNewProcessS_, 59, "can't fork new process (%s)" )/*extracted from daemon.cpp*/ + ResDef( DBT_assertFailedSN_, 60, "assert failed! %s\n" )/*extracted from multiplex.c*/ + ResDef( DBT_mrTableInit_, 61, "mr_table_init()" )/*extracted from multiplex.c*/ + ResDef( DBT_mallocFailed_, 62, "malloc failed" )/*extracted from multiplex.c*/ + ResDef( DBT_mallocFailed_1, 63, "malloc failed!" )/*extracted from multiplex.c*/ + ResDef( DBT_mrAddIoDTypeDFileD_, 64, "mr_add_io(%d, type %d, file %d)" )/*extracted from multiplex.c*/ + ResDef( DBT_mrAddIoStage1_, 65, "mr_add_io - stage 1" )/*extracted from multiplex.c*/ + ResDef( DBT_mrAddIoStage2_, 66, "mr_add_io - stage 2" )/*extracted from multiplex.c*/ + ResDef( DBT_mrAddIoFoundInvalidIoTypeD_, 67, "mr_add_io found invalid IO type %d" )/*extracted from multiplex.c*/ + ResDef( DBT_mrAddIoAddingTimeout_, 68, "mr_add_io - adding timeout" )/*extracted from multiplex.c*/ + ResDef( DBT_outOfMemoryN_, 69, "Out of memory!\n" )/*extracted from multiplex.c*/ + ResDef( DBT_doneWithMrAddIo_, 70, "done with mr_add_io" )/*extracted from multiplex.c*/ + ResDef( DBT_mrDelIoDTypeDFileD_, 71, "mr_del_io(%d, type %d, file %d)" )/*extracted from multiplex.c*/ + ResDef( DBT_mrDelIoFoundInvalidIoTypeD_, 72, "mr_del_io found invalid IO type %d" )/*extracted from multiplex.c*/ + ResDef( DBT_mrLookupIoD_, 73, "mr_lookup_io(%d)" )/*extracted from multiplex.c*/ + ResDef( DBT_mrAsyncIoDDBytesFileD_, 74, "mr_async_io(%d, %d bytes, file %d)" )/*extracted from multiplex.c*/ + ResDef( DBT_mallocFailureAddingAsyncIo_, 75, "malloc failure adding async IO" )/*extracted from multiplex.c*/ + ResDef( DBT_errorAddingAsyncIo_, 76, "Error adding async io!" )/*extracted from multiplex.c*/ + ResDef( DBT_cannotSeekForRead_, 77, "Cannot seek for read!" )/*extracted from multiplex.c*/ + ResDef( DBT_readFailureDS_, 78, "read failure! (%d, %s)" )/*extracted from multiplex.c*/ + ResDef( DBT_doReadReadDBytesForFileD_, 79, "do_read read %d bytes for file %d" )/*extracted from multiplex.c*/ + ResDef( DBT_cannotSeekForWrite_, 80, "Cannot seek for write!" )/*extracted from multiplex.c*/ + ResDef( DBT_writevFailureDS_, 81, "writev failure! (%d, %s)" )/*extracted from multiplex.c*/ + ResDef( DBT_writeFailureDS_, 82, "write failure! (%d, %s)" )/*extracted from multiplex.c*/ + ResDef( DBT_doWriteWroteDBytesForFileD_, 83, "do_write wrote %d bytes for file %d" )/*extracted from multiplex.c*/ + ResDef( DBT_doTimeoutMrpD_, 84, "do_timeout(mrp %d)" )/*extracted from multiplex.c*/ + ResDef( DBT_doTimeoutFoundIoTimerDTimeD_, 85, "do_timeout: found IO (timer=%d, time=%d)" )/*extracted from multiplex.c*/ + ResDef( DBT_errorDeletingIo_, 86, "error deleting io" )/*extracted from multiplex.c*/ + ResDef( DBT_timeoutCallbackFailureForDN_, 87, "timeout callback failure for %d\n" )/*extracted from multiplex.c*/ + ResDef( DBT_mrGetEventDOutstandingIoD_, 88, "mr_get_event(%d) - outstanding io %d" )/*extracted from multiplex.c*/ + ResDef( DBT_mrGetEventWaitingForReadsOnFd_, 89, "mr_get_event: Waiting for reads on FD:" )/*extracted from multiplex.c*/ + ResDef( DBT_mrGetEventWaitingForWritesOnFd_, 90, "mr_get_event: Waiting for writes on FD:" )/*extracted from multiplex.c*/ + ResDef( DBT_TD_, 91, "\t%d" )/*extracted from multiplex.c*/ + ResDef( DBT_TD_1, 92, "\t%d" )/*extracted from multiplex.c*/ + ResDef( DBT_mrGetEventSetNoTimeout_, 93, "mr_get_event set no timeout" )/*extracted from multiplex.c*/ + ResDef( DBT_mrGetEventSetTimeoutToDDSec_, 94, "mr_get_event set timeout to: %d.%d sec" )/*extracted from multiplex.c*/ + ResDef( DBT_errorInSelectDS_, 95, "error in select (%d, %s)" )/*extracted from multiplex.c*/ + ResDef( DBT_mrGetEventSelectFoundD_, 96, "mr_get_event() - select found %d" )/*extracted from multiplex.c*/ + ResDef( DBT_errorLookingUpIoFdD_, 97, "error looking up IO fd %d" )/*extracted from multiplex.c*/ + ResDef( DBT_readFailedForFdD_, 98, "read failed for fd %d" )/*extracted from multiplex.c*/ + ResDef( DBT_errorDeletingIo_1, 99, "error deleting io" )/*extracted from multiplex.c*/ + ResDef( DBT_callbackFailureForDN_, 100, "callback failure for %d\n" )/*extracted from multiplex.c*/ + ResDef( DBT_errorLookingUpIoFdD_1, 101, "error looking up IO fd %d" )/*extracted from multiplex.c*/ + ResDef( DBT_writingHeaderLenDWritelenDTotalD_, 102, "writing: header len %d, writelen %d, total %d" )/*extracted from multiplex.c*/ + ResDef( DBT_writeFailedForFdD_, 103, "write failed for fd %d" )/*extracted from multiplex.c*/ + ResDef( DBT_errorDeletingIo_2, 104, "error deleting io" )/*extracted from multiplex.c*/ + ResDef( DBT_callbackFailureForDN_1, 105, "callback failure for %d\n" )/*extracted from multiplex.c*/ + ResDef( DBT_errorCreatingDnsCache_, 106, "Error creating dns cache" )/*extracted from dns_cache.cpp*/ + ResDef( DBT_dnsCacheInitHashSize0UsingD_, 107, "dns_cache_init: hash_size <= 0, using %d" )/*extracted from dns_cache.cpp*/ + ResDef( DBT_dnsCacheInitCacheSizeDUsingD_, 108, "dns_cache_init: cache-size <= %d, using %d" )/*extracted from dns_cache.cpp*/ + ResDef( DBT_dnsCacheInitCacheSizeIsDIsTooLar_, 109, "dns_cache_init: cache-size is %d is too large, using %d." )/*extracted from dns_cache.cpp*/ + ResDef( DBT_dnsCacheInitExpireTime0UsingD_, 110, "dns_cache_init: expire_time <= 0, using %d" )/*extracted from dns_cache.cpp*/ + ResDef( DBT_dnsCacheInitExpireIsDIsTooLargeU_, 111, "dns_cache_init: expire is %d is too large, using %d seconds." )/*extracted from dns_cache.cpp*/ + ResDef( DBT_errorCreatingDnsCache_1, 112, "Error creating dns cache" )/*extracted from dns_cache.cpp*/ + ResDef( DBT_dnsCacheInsertErrorAllocatingEnt_, 113, "dns-cache-insert: Error allocating entry" )/*extracted from dns_cache.cpp*/ + ResDef( DBT_dnsCacheInsertMallocFailure_, 114, "dns-cache-insert: malloc failure" )/*extracted from dns_cache.cpp*/ + ResDef( DBT_successfulServerStartup_, 115, "successful server startup" )/*extracted from ereport.cpp*/ + ResDef( DBT_SBS_, 116, "%s B%s" )/*extracted from ereport.cpp*/ + ResDef( DBT_netscapeExecutableAndSharedLibra_, 117, "executable and shared library have different versions" )/*extracted from ereport.cpp*/ + ResDef( DBT_executableVersionIsS_, 118, " executable version is %s" )/*extracted from ereport.cpp*/ + ResDef( DBT_sharedLibraryVersionIsS_, 119, " shared library version is %s" )/*extracted from ereport.cpp*/ + ResDef( DBT_errorReportingShuttingDown_, 120, "error reporting shutting down" )/*extracted from ereport.cpp*/ + ResDef( DBT_warning_, 121, "warning" )/*extracted from ereport.cpp*/ + ResDef( DBT_config_, 122, "config" )/*extracted from ereport.cpp*/ + ResDef( DBT_security_, 123, "security" )/*extracted from ereport.cpp*/ + ResDef( DBT_failure_, 124, "failure" )/*extracted from ereport.cpp*/ + ResDef( DBT_catastrophe_, 125, "catastrophe" )/*extracted from ereport.cpp*/ + ResDef( DBT_info_, 126, "info" )/*extracted from ereport.cpp*/ + ResDef( DBT_verbose_, 127, "verbose" )/*extracted from ereport.cpp*/ + ResDef( DBT_eventHandlerFailedToWaitOnEvents_, 128, "event_handler:Failed to wait on events %s" )/*extracted from eventhandler.cpp*/ + ResDef( DBT_couldNotWaitOnResumeEventEventS_, 129, "could not wait on resume event event (%s)" )/*extracted from eventhandler.cpp*/ + ResDef( DBT_dlopenOfSFailedS_, 130, "dlopen of %s failed (%s)" )/*extracted from LibMgr.cpp*/ + ResDef( DBT_dlopenOfSFailedS_1, 131, "dlopen of %s failed (%s)" )/*extracted from LibMgr.cpp*/ + ResDef( DBT_theServerIsTerminatingDueToAnErr_, 132, "The server is terminating due to an error. Check the event viewer for the error message. SERVER EXITING!" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_terminatingTheServerS_, 133, "Terminating the server %s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_killServerCannotOpenServerEventS_, 134, "kill_server:cannot open server event %s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_killServerCannotSetServerEventS_, 135, "kill_server:cannot set server event %s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_errorCouldNotGetSocketSN_, 136, "error: could not get socket (%s)\n" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_errorCouldNotSetSocketOptionSN_, 137, "error: could not set socket option (%s)\n" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_terminatingServiceErrorCouldNotB_, 138, "Terminating Service:error: could not bind to address %s port %d (%s)\n" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_terminatingServiceErrorCouldNotB_1, 139, "Terminating Service:error: could not bind to port %d (%s)\n" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_sethandlenoninheritableCouldNotD_, 140, "SetHandleNonInheritable: could not duplicate socket (%s)" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_sethandlenoninheritableClosingTh_, 141, "SetHandleNonInheritable: closing the original socket failed (%s)" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_couldNotSethandleinformationS_, 142, "Could not SetHandleInformation (%s)" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_terminatingServiceFailureCouldNo_, 143, "Terminating Service:Failure: Could not open statistics file (%s)\n" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_couldNotSetThreadLocalStorageVal_, 144, "Could not set Thread Local Storage Value for thread at slot %d" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_secureHandshakeFailedCodeDN_1, 145, "secure handshake failed (code %d)\n" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_acceptFailedDS_, 146, "accept failed %d (%s)" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_failedToPulseEventDS_, 147, "Failed to pulse Event %d %s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_failedToSendMobgrowthEventToPare_, 148, "Failed to send MobGrowth Event to parent %s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_pulsingMobrespawnEventD_, 149, "Pulsing MobRespawn Event %d" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_respawnThreadPoolToDD_, 150, "respawn thread pool to %d (%d)" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_couldNotOpenEventToSignalRotateA_, 151, "Could not open event to signal rotate application. Could not create the MoveLog event:%s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_failedToSendMovelogEventToRotate_, 152, "Failed to send MoveLog Event to rotate app %s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_growingThreadPoolFromDToD_, 153, "growing thread pool from %d to %d" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_couldNotOpenTheServicecontrolman_, 154, "Could not open the ServiceControlManager, Error %d" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_startnetsiteserviceCouldNotOpenT_, 155, "StartNetsiteService:Could not open the service %s: Error %d" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_startnetsiteserviceCouldNotStart_, 156, "StartNetsiteService:Could not start the service %s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_serviceStartupCouldNotAllocateSe_, 157, "Service Startup: Could not allocate security descriptor" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_serviceStartupCouldNotInitSecuri_, 158, "Service Startup: Could not init security descriptor" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_serviceStartupCouldNotSetTheSecu_, 159, "Service Startup: Could not set the security Dacl" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_terminatingServiceWinsockInitFai_, 160, "Terminating Service:WinSock init failed: %s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_httpdServerStartupFailedS_, 161, "Httpd Server Startup failed: %s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_canTFindEmptyStatisticsSlot_1, 162, "can't find empty statistics slot" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_ntDaemonCouldNotCreateNewThreadD_, 163, "NT daemon: could not create new thread %d" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_serviceStartupFailureTerminating_, 164, "Service Startup Failure. Terminating Service:Could not create event %d:%s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_serviceStartupErrorCouldNotCreat_, 165, "Service Startup Error. Could not create the MoveLog event:%s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_failedToWaitOnEventObjectsS_, 166, "Failed to wait on Event objects %s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_failedToWaitOnEventObjectsS_1, 167, "Failed to wait on Event objects %s" )/*extracted from ntdaemon.cpp*/ + ResDef( DBT_pipebufBuf2sdPipebufGrabIoErrorD_, 168, "pipebuf_buf2sd: pipebuf_grab IO_ERROR %d" )/*extracted from ntpipe.cpp*/ + ResDef( DBT_poolInitMemoryPoolsDisabled_, 169, "pool-init: memory pools disabled" )/*extracted from pool.cpp*/ + ResDef( DBT_poolInitFreeSize0UsingD_, 170, "pool-init: free_size <= 0, using %d" )/*extracted from pool.cpp*/ + ResDef( DBT_poolCreateBlockOutOfMemory_, 171, "pool-create-block: out of memory" )/*extracted from pool.cpp*/ + ResDef( DBT_poolCreateOutOfMemory_, 172, "pool-create: out of memory" )/*extracted from pool.cpp*/ + ResDef( DBT_poolCreateOutOfMemory_1, 173, "pool-create: out of memory" )/*extracted from pool.cpp*/ + ResDef( DBT_poolMallocOutOfMemory_, 174, "pool-malloc: out of memory" )/*extracted from pool.cpp*/ + ResDef( DBT_freeUsedWherePermFreeShouldHaveB_, 175, "FREE() used where PERM_FREE() should have been used- problem corrected and supressing further warnings." )/*extracted from pool.cpp*/ + ResDef( DBT_regexErrorSRegexS_, 176, "regex error: %s (regex: '%s')" )/*extracted from regexp.cpp*/ + ResDef( DBT_canTCreateIpcPipeS_, 177, "can't create IPC pipe (%s)" )/*extracted from thrconn.cpp*/ + ResDef( DBT_writeToWakeupPipeFailedS_, 178, "write to wakeup pipe failed (%s)" )/*extracted from thrconn.cpp*/ + ResDef( DBT_flushingDConnectionsCurrentDTotD_, 179, "flushing %d connections; current %d; tot %d" )/*extracted from thrconn.cpp*/ + ResDef( DBT_acceptFailedS_1, 180, "accept failed (%s)" )/*extracted from thrconn.cpp*/ + ResDef( DBT_errorCreatingTimeCache_, 181, "Error creating time cache" )/*extracted from time_cache.cpp*/ + ResDef( DBT_timeCacheCacheDisabled_, 182, "time-cache: cache disabled" )/*extracted from time_cache.cpp*/ + ResDef( DBT_timeCacheInitHashSizeDUsingDefau_, 183, "time_cache_init: hash_size < %d, using default, %d" )/*extracted from time_cache.cpp*/ + ResDef( DBT_timeCacheInitHashSizeDUsingDefau_1, 184, "time_cache_init: hash_size > %d, using default, %d" )/*extracted from time_cache.cpp*/ + ResDef( DBT_timeCacheInitCacheSizeDUsingDefa_, 185, "time_cache_init: cache_size < %d, using default, %d" )/*extracted from time_cache.cpp*/ + ResDef( DBT_timeCacheInitCacheSizeDUsingDefa_1, 186, "time_cache_init: cache_size > %d, using default, %d" )/*extracted from time_cache.cpp*/ + ResDef( DBT_errorAllocatingMemoryForTimeCach_, 187, "Error allocating memory for time_cache" )/*extracted from time_cache.cpp*/ + ResDef( DBT_errorAllocatingMemoryForTimeCach_1, 188, "Error allocating memory for time_cache entry" )/*extracted from time_cache.cpp*/ + ResDef( DBT_errorAllocatingMemoryForTimeCach_2, 189, "Error allocating memory for time_cache entry" )/*extracted from time_cache.cpp*/ + ResDef( DBT_errorInsertingNewTimeCacheEntry_, 190, "Error inserting new time_cache entry" )/*extracted from time_cache.cpp*/ + ResDef( DBT_errorAllocatingMemoryForTimeCach_3, 191, "Error allocating memory for time_cache" )/*extracted from time_cache.cpp*/ + ResDef( DBT_csTerminateFailureS_, 192, "cs-terminate failure (%s)" )/*extracted from crit.cpp*/ + ResDef( DBT_csInitFailureS_, 193, "cs-init failure (%s)" )/*extracted from crit.cpp*/ + ResDef( DBT_csWaitFailureS_, 194, "cs-wait failure (%s)" )/*extracted from crit.cpp*/ + ResDef( DBT_csPostFailureS_, 195, "cs-post failure (%s)" )/*extracted from crit.cpp*/ + ResDef( DBT_unableToCreateNonblockingSocketS_, 196, "Unable to create nonblocking socket (%s)" )/*extracted from net.cpp*/ + ResDef( DBT_errorCouldNotSetKeepaliveSN_, 197, "error: could not set keepalive (%s)\n" )/*extracted from net.cpp*/ + ResDef( DBT_errorCouldNotSetRecvTimeoutSN_, 198, "error: could not set recv timeout (%s)\n" )/*extracted from net.cpp*/ + ResDef( DBT_errorCouldNotSetSendTimeoutSN_, 199, "error: could not set send timeout (%s)\n" )/*extracted from net.cpp*/ + ResDef( DBT_unableToCreateNonblockingSocketS_1, 200, "Unable to create nonblocking socket (%s)" )/*extracted from net.cpp*/ + ResDef( DBT_semGrabFailedS_, 201, "sem_grab failed (%s)" )/*extracted from net.cpp*/ + ResDef( DBT_semReleaseFailedS_, 202, "sem_release failed (%s)" )/*extracted from net.cpp*/ + ResDef( DBT_semReleaseFailedS_1, 203, "sem_release failed (%s)" )/*extracted from net.cpp*/ + ResDef( DBT_couldNotRemoveTemporaryDirectory_, 204, "Could not remove temporary directory %s, Error %d" )/*extracted from util.cpp*/ + ResDef( DBT_couldNotRemoveTemporaryDirectory_1, 205, "Could not remove temporary directory %s, Error %d" )/*extracted from util.cpp*/ +END_STR(base) diff --git a/include/base/ereport.h b/include/base/ereport.h new file mode 100644 index 0000000..4560abf --- /dev/null +++ b/include/base/ereport.h @@ -0,0 +1,56 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef BASE_EREPORT_H +#define BASE_EREPORT_H + +#ifndef NOINTNSAPI +#define INTNSAPI +#endif /* !NOINTNSAPI */ + +/* + * ereport.h: Records transactions, reports errors to administrators, etc. + * + * Rob McCool + */ + +/* --- Begin function prototypes --- */ + +#ifdef INTNSAPI + +NSPR_BEGIN_EXTERN_C + +/* + * INTereport logs an error of the given degree and formats the arguments with + * the printf() style fmt. Returns whether the log was successful. Records + * the current date. + */ + +NSAPI_PUBLIC int INTereport(int degree, char *fmt, ...) +#ifdef __GNUC__ + __attribute__ ((format (printf, 2, 3))); +#else + ; +#endif +NSAPI_PUBLIC int INTereport_v(int degree, char *fmt, va_list args); + +NSPR_END_EXTERN_C + +/* --- End function prototypes --- */ + +#define ereport INTereport +#define ereport_v INTereport_v + +#endif /* INTNSAPI */ + +#endif /* !BASE_EREPORT_H */ diff --git a/include/base/file.h b/include/base/file.h new file mode 100644 index 0000000..5a4df09 --- /dev/null +++ b/include/base/file.h @@ -0,0 +1,95 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef BASE_FILE_H +#define BASE_FILE_H + +#ifndef NOINTNSAPI +#define INTNSAPI +#endif /* !NOINTNSAPI */ + +/* GLOBAL FUNCTIONS: + * DESCRIPTION: + * system-specific functions for reading/writing files + */ + +#ifndef NETSITE_H +#include "../netsite.h" +#endif /* !NETSITE_H */ + +/* --- Begin function prototypes --- */ + +#ifdef INTNSAPI + +NSPR_BEGIN_EXTERN_C + +void INTsystem_errmsg_init(void); + +NSAPI_PUBLIC SYS_FILE INTsystem_fopenRO(char *path); +NSAPI_PUBLIC SYS_FILE INTsystem_fopenWA(char *path); +NSAPI_PUBLIC SYS_FILE INTsystem_fopenRW(char *path); +NSAPI_PUBLIC SYS_FILE INTsystem_fopenWT(char *path); +NSAPI_PUBLIC int INTsystem_fread(SYS_FILE fd, char *buf, int sz); +NSAPI_PUBLIC int INTsystem_fwrite(SYS_FILE fd,char *buf,int sz); +NSAPI_PUBLIC int INTsystem_fwrite_atomic(SYS_FILE fd, char *buf, int sz); +NSAPI_PUBLIC int INTsystem_lseek(SYS_FILE fd, int off, int wh); +NSAPI_PUBLIC int INTsystem_fclose(SYS_FILE fd); +NSAPI_PUBLIC int INTsystem_stat(char *name, struct stat *finfo); +NSAPI_PUBLIC int INTsystem_rename(char *oldpath, char *newpath); +NSAPI_PUBLIC int INTsystem_unlink(char *path); +NSAPI_PUBLIC int INTsystem_tlock(SYS_FILE fd); +NSAPI_PUBLIC int INTsystem_flock(SYS_FILE fd); +NSAPI_PUBLIC int INTsystem_ulock(SYS_FILE fd); + + +/* --- OBSOLETE ---------------------------------------------------------- + * The following macros/functions are obsolete and are only maintained for + * compatibility. Do not use them. 11-19-96 + * ----------------------------------------------------------------------- + */ + +NSAPI_PUBLIC int INTsystem_nocoredumps(void); +NSAPI_PUBLIC int INTfile_setinherit(SYS_FILE fd, int value); +NSAPI_PUBLIC int INTfile_notfound(void); +NSAPI_PUBLIC const char *INTsystem_errmsg(void); +NSAPI_PUBLIC int INTsystem_errmsg_fn(char **buff, size_t maxlen); + +NSPR_END_EXTERN_C + +#define system_errmsg_init INTsystem_errmsg_init +#define system_fopenRO INTsystem_fopenRO +#define system_fopenWA INTsystem_fopenWA +#define system_fopenRW INTsystem_fopenRW +#define system_fopenWT INTsystem_fopenWT +#define system_fread INTsystem_fread +#define system_fwrite INTsystem_fwrite +#define system_fwrite_atomic INTsystem_fwrite_atomic +#define system_lseek INTsystem_lseek +#define system_fclose INTsystem_fclose +#define system_stat INTsystem_stat +#define system_rename INTsystem_rename +#define system_unlink INTsystem_unlink +#define system_tlock INTsystem_tlock +#define system_flock INTsystem_flock +#define system_ulock INTsystem_ulock + +#define system_nocoredumps INTsystem_nocoredumps +#define file_setinherit INTfile_setinherit +#define file_notfound INTfile_notfound +#define rtfile_notfound INTfile_notfound +#define system_errmsg INTsystem_errmsg +#define system_errmsg_fn INTsystem_errmsg_fn + +#endif /* INTNSAPI */ + +#endif /* BASE_FILE_H */ diff --git a/include/base/fsmutex.h b/include/base/fsmutex.h new file mode 100644 index 0000000..d856254 --- /dev/null +++ b/include/base/fsmutex.h @@ -0,0 +1,98 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +/* + * fsmutex: Mutexes that are filesystem-based so they're available from more + * than one process and address space + * + * Rob McCool + */ + + +#ifndef FSMUTEX_H +#define FSMUTEX_H + +#include "netsite.h" + +typedef void * FSMUTEX; + + +/* ------------------------------ Prototypes ------------------------------ */ + +NSPR_BEGIN_EXTERN_C + +/* + Flags to fsmutex_init. + + FSMUTEX_VISIBLE makes a filesystem mutex which can be opened by other + programs or processes. + + FSMUTEX_NEEDCRIT specifies that the fsmutex_lock and fsmutex_unlock + functions should also use a critical section to ensure that more than + one thread does not acquire the mutex at a time. If this flag is not + specified, it is up to the caller to ensure that only thread within a + process tries to acquire the lock at any given time. + */ +#define FSMUTEX_VISIBLE 0x01 +#define FSMUTEX_NEEDCRIT 0x02 + + +/* + fsmutex_init creates a new filesystem-based mutex. The resulting mutex + is part of the filesystem. The name and number parameters are used to + create a name for the mutex. If the FSMUTEX_VISIBLE flag is specified, + the mutex will be left in the filesystem for other programs and processes + to access. If a mutex with the given name/number combination already + exists, the calling process is allowed access to it. If the mutex does + not already exist, the mutex is created. + + Returns NULL on failure, a void pointer to a fsmutex structure otherwise. + This fsmutex structure is local to the current process. + */ +NSAPI_PUBLIC FSMUTEX fsmutex_init(char *name, int number, int flags); + +/* + Sets the ownership of the underlying filesystem object to the given + uid and gid. Only effective if the server is running as root. + */ +#include +#ifdef __sony +#include +#endif +NSAPI_PUBLIC void fsmutex_setowner(FSMUTEX fsm, uid_t uid, gid_t gid); + +/* + fsmutex_terminate deletes a filesystem-based mutex. A mutex will only + be deleted when every process which has an open pointer to the mutex + calls this function. + */ +NSAPI_PUBLIC void fsmutex_terminate(FSMUTEX id); + +/* + fsmutex_lock attempts to acquire the given filesystem-based mutex. If + another process is holding the mutex, or if the FSMUTEX_NEEDCRIT flag + was passed to fsmutex_init and another thread in the current process is + holding the mutex, then the calling thread will block until the mutex + is available. + */ +NSAPI_PUBLIC void fsmutex_lock(FSMUTEX id); + +/* + fsmutex_unlock releases a filesystem-based mutex previously acquired + by fsmutex_lock. + */ +NSAPI_PUBLIC void fsmutex_unlock(FSMUTEX id); + +NSPR_END_EXTERN_C + +#endif diff --git a/include/base/plist.h b/include/base/plist.h new file mode 100644 index 0000000..f40d074 --- /dev/null +++ b/include/base/plist.h @@ -0,0 +1,69 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef _PLIST_H +#define _PLIST_H + +#ifndef NOINTNSACL +#define INTNSACL +#endif /* !NOINTNSACL */ + +/* + * TYPE: PList_t + * + * DESCRIPTION: + * + * This type defines a handle for a property list. + */ + +#include "base/pool.h" + +#ifndef PUBLIC_NSACL_PLISTDEF_H +#include "../public/nsacl/plistdef.h" +#endif /* !PUBLIC_NSACL_PLISTDEF_H */ + +#ifdef INTNSACL + +/* Functions in plist.c */ +NSPR_BEGIN_EXTERN_C + +NSAPI_PUBLIC extern int PListAssignValue(PList_t plist, const char *pname, + const void *pvalue, PList_t ptype); +NSAPI_PUBLIC extern PList_t PListCreate(pool_handle_t *mempool, + int resvprop, int maxprop, int flags); +NSAPI_PUBLIC extern int PListDefProp(PList_t plist, int pindex, + const char *pname, const int flags); +NSAPI_PUBLIC extern const void * PListDeleteProp(PList_t plist, int pindex, const char *pname); +NSAPI_PUBLIC extern int PListFindValue(PList_t plist, + const char *pname, void **pvalue, PList_t *type); +NSAPI_PUBLIC extern int PListInitProp(PList_t plist, int pindex, const char *pname, + const void *pvalue, PList_t ptype); +NSAPI_PUBLIC extern PList_t PListNew(pool_handle_t *mempool); +NSAPI_PUBLIC extern void PListDestroy(PList_t plist); +NSAPI_PUBLIC extern int PListGetValue(PList_t plist, + int pindex, void **pvalue, PList_t *type); +NSAPI_PUBLIC extern int PListNameProp(PList_t plist, int pindex, const char *pname); +NSAPI_PUBLIC extern int PListSetType(PList_t plist, int pindex, PList_t type); +NSAPI_PUBLIC extern int PListSetValue(PList_t plist, + int pindex, const void *pvalue, PList_t type); +NSAPI_PUBLIC extern void PListEnumerate(PList_t plist, PListFunc_t *user_func, + void *user_data); +NSAPI_PUBLIC extern PList_t +PListDuplicate(PList_t plist, pool_handle_t *new_mempool, int flags); +NSAPI_PUBLIC extern pool_handle_t *PListGetPool(PList_t plist); + +NSPR_END_EXTERN_C + +#endif /* INTNSACL */ + +#endif /* _PLIST_H */ diff --git a/include/base/pool.h b/include/base/pool.h new file mode 100644 index 0000000..cee0ed7 --- /dev/null +++ b/include/base/pool.h @@ -0,0 +1,92 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef BASE_POOL_H +#define BASE_POOL_H + +#ifndef NOINTNSAPI +#define INTNSAPI +#endif /* !NOINTNSAPI */ + +/* + * pool.h + * + * Module for handling memory allocations. + * + * Notes: + * This module is used instead of the NSPR prarena module because the prarenas + * did not fit as cleanly into the existing server. + * + * Mike Belshe + * 10-02-95 + * + */ + +#ifdef MALLOC_POOLS + +#ifndef NETSITE_H +#include "netsite.h" +#endif /* !NETSITE_H */ + +/* --- Begin function prototypes --- */ + +#ifdef INTNSAPI + +NSPR_BEGIN_EXTERN_C + +int pool_internal_init(void); + +#ifdef DEBUG_CACHES +NSAPI_PUBLIC int INTpool_service_debug(pblock *pb, Session *sn, Request *rq); +#endif + +NSAPI_PUBLIC pool_handle_t *INTpool_create(void); +NSAPI_PUBLIC void INTpool_terminate(void); + +NSAPI_PUBLIC void INTpool_destroy(pool_handle_t *pool_handle); + +NSAPI_PUBLIC int INTpool_enabled(void); + +NSAPI_PUBLIC void *INTpool_malloc(pool_handle_t *pool_handle, size_t size ); + +NSAPI_PUBLIC void INTpool_free(pool_handle_t *pool_handle, void *ptr ); + +NSAPI_PUBLIC void *INTpool_calloc(pool_handle_t *pool_handle, size_t nelem, size_t elsize); + +NSAPI_PUBLIC +void *INTpool_realloc(pool_handle_t *pool_handle, void *ptr, size_t size ); + +NSAPI_PUBLIC +char *INTpool_strdup(pool_handle_t *pool_handle, const char *orig_str ); + +NSPR_END_EXTERN_C + +#ifdef DEBUG_CACHES +#define pool_service_debug INTpool_service_debug +#endif /* DEBUG_CACHES */ + +#define pool_create INTpool_create +#define pool_terminate INTpool_terminate +#define pool_destroy INTpool_destroy +#define pool_enabled INTpool_enabled +#define pool_malloc INTpool_malloc +#define pool_free INTpool_free +#define pool_calloc INTpool_calloc +#define pool_realloc INTpool_realloc +#define pool_strdup INTpool_strdup + +#endif /* INTNSAPI */ + +#endif /* MALLOC_POOLS */ + +#endif /* !BASE_POOL_H_ */ diff --git a/include/base/shexp.h b/include/base/shexp.h new file mode 100644 index 0000000..58cde30 --- /dev/null +++ b/include/base/shexp.h @@ -0,0 +1,118 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef BASE_SHEXP_H +#define BASE_SHEXP_H + +#ifndef NOINTNSAPI +#define INTNSAPI +#endif /* !NOINTNSAPI */ + +/* + * shexp.h: Defines and prototypes for shell exp. match routines + * + * + * This routine will match a string with a shell expression. The expressions + * accepted are based loosely on the expressions accepted by zsh. + * + * o * matches anything + * o ? matches one character + * o \ will escape a special character + * o $ matches the end of the string + * o [abc] matches one occurence of a, b, or c. The only character that needs + * to be escaped in this is ], all others are not special. + * o [a-z] matches any character between a and z + * o [^az] matches any character except a or z + * o ~ followed by another shell expression will remove any pattern + * matching the shell expression from the match list + * o (foo|bar) will match either the substring foo, or the substring bar. + * These can be shell expressions as well. + * + * The public interface to these routines is documented in + * public/base/shexp.h. + * + * Rob McCool + * + */ + +/* + * Requires that the macro MALLOC be set to a "safe" malloc that will + * exit if no memory is available. If not under MCC httpd, define MALLOC + * to be the real malloc and play with fire, or make your own function. + */ + +#ifndef NETSITE_H +#include "../netsite.h" +#endif /* !NETSITE_H */ + +#ifndef OS_CTYPE_H +#include /* isalnum */ +#define OS_CTYPE_H +#endif /* !OS_CTYPE_H */ + +#ifndef OS_STRING_H +#include /* strlen */ +#define OS_STRING_H +#endif /* !OS_STRING_H */ + +/* See public/base/shexp.h or public/base/regexp.h concerning USE_REGEX */ + +/* + * This little bit of nonsense is because USE_REGEX is currently + * supposed to be recognized only by the proxy. If that's the + * case, only the proxy should define USE_REGEX, but I'm playing + * it safe. XXXHEP 12/96 + */ +#ifndef MCC_PROXY +#ifdef USE_REGEX +#define SAVED_USE_REGEX USE_REGEX +#undef USE_REGEX +#endif /* USE_REGEX */ +#endif /* !MCC_PROXY */ + +/* --- Begin function prototypes --- */ + +#ifdef INTNSAPI + +NSPR_BEGIN_EXTERN_C + +NSAPI_PUBLIC int INTshexp_valid(char *exp); + +NSAPI_PUBLIC int INTshexp_match(char *str, char *exp); + +NSAPI_PUBLIC int INTshexp_cmp(char *str, char *exp); + +NSAPI_PUBLIC int INTshexp_casecmp(char *str, char *exp); + +NSPR_END_EXTERN_C + +/* --- End function prototypes --- */ + +#define shexp_valid INTshexp_valid +#define shexp_match INTshexp_match +#define shexp_cmp INTshexp_cmp +#define shexp_casecmp INTshexp_casecmp + +#endif /* INTNSAPI */ + +/* Restore USE_REGEX definition for non-proxy. See above. */ +#ifdef SAVED_USE_REGEX +#define USE_REGEX SAVED_USE_REGEX +#undef SAVED_USE_REGEX +#endif /* SAVED_USE_REGEX */ + +#ifdef USE_REGEX +#include "base/regexp.h" +#endif /* USE_REGEX */ + +#endif /* !BASE_SHEXP_H */ diff --git a/include/base/systems.h b/include/base/systems.h new file mode 100644 index 0000000..5f14969 --- /dev/null +++ b/include/base/systems.h @@ -0,0 +1,219 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef BASE_SYSTEMS_H +#define BASE_SYSTEMS_H + +#ifndef NOINTNSAPI +#define INTNSAPI +#endif /* !NOINTNSAPI */ + +/* + * systems.h: Lists of defines for systems + * + * This sets what general flavor the system is (UNIX, etc.), + * and defines what extra functions your particular system needs. + */ + + +/* --- Begin common definitions for all supported platforms --- */ + +#define DAEMON_ANY +#define DAEMON_STATS + +/* --- End common definitions for all supported platforms --- */ + +/* --- Begin platform-specific definitions --- */ + + +#if defined(HPUX) + +#define ACCELERATOR_CACHE +#define AUTH_DBM +#undef BSD_RLIMIT +#undef BSD_SIGNALS +#ifdef MCC_PROXY +#define DAEMON_NEEDS_SEMAPHORE +#else +#undef DAEMON_NEEDS_SEMAPHORE +#endif +#define DAEMON_UNIX_MOBRULE +#define DLL_CAPABLE +#define DLL_HPSHL +#define DNS_CACHE +#define FILE_INHERIT_FCNTL +#define FILE_MMAP_FLAGS MAP_PRIVATE +#define HAS_STATFS +#define HAVE_ATEXIT +#define JAVA_STATIC_LINK +#undef NEED_CRYPT_H +#define NET_SOCKETS +#define SA_HANDLER_T(x) (void (*)(int))x +/* warning: mmap doesn't work under 9.04 */ +#define SHMEM_MMAP_FLAGS MAP_FILE | MAP_VARIABLE | MAP_SHARED + +#elif defined(Linux) + +#define ACCELERATOR_CACHE +#define DNS_CACHE +#define FILE_INHERIT_FCNTL +#define DAEMON_UNIX_MOBRULE +#define BSD_RLIMIT +#undef BSD_SIGNALS +#define FILE_UNIX_MMAP +#define FILE_MMAP_FLAGS (MAP_FILE | MAP_SHARED) +#define SHMEM_UNIX_MMAP +#define SHMEM_MMAP_FLAGS MAP_SHARED +#define AUTH_DBM +#define SEM_FLOCK +#define DLL_CAPABLE +#define DLL_DLOPEN +#define DLL_DLOPEN_FLAGS RTLD_NOW +#define HAVE_ATEXIT +#define HAS_STATFS +#define JAVA_STATIC_LINK +#define SA_HANDLER_T(x) (void (*)(int))(x) +#undef NEED_CRYPT_PROTO +#define NET_SOCKETS +#ifndef NO_DOMAINNAME +#define NO_DOMAINNAME +#endif + +#elif defined(SOLARIS) || defined(SOLARISx86) + +#define ACCELERATOR_CACHE +#define AUTH_DBM +#define BSD_RLIMIT +#undef BSD_SIGNALS +#define DAEMON_NEEDS_SEMAPHORE +#define DAEMON_UNIX_MOBRULE +#define DLL_CAPABLE +#define DLL_DLOPEN +#define DLL_DLOPEN_FLAGS RTLD_NOW +#define DNS_CACHE +#define FILE_INHERIT_FCNTL +#define FILE_MMAP_FLAGS MAP_SHARED +#define HAS_STATVFS +#define HAVE_ATEXIT +#define HAVE_PW_R +#define HAVE_STRTOK_R +#define HAVE_TIME_R 3 /* arg count */ +#define NEED_CRYPT_H +#define NEED_FILIO +#if OSVERSION < 506 || OSVERSION == 50501 +#define NEED_GHN_PROTO +#endif +#define NET_SOCKETS +#if OSVERSION > 504 +#define SA_HANDLER_T(x) x +#endif +#define SHMEM_MMAP_FLAGS MAP_SHARED + +#elif defined(SUNOS4) + +#define ACCELERATOR_CACHE +#define AUTH_DBM +#define BSD_MAIL +#define BSD_RLIMIT +#define BSD_SIGNALS +#define BSD_TIME +#define DAEMON_UNIX_MOBRULE +#define DLL_CAPABLE +#define DLL_DLOPEN +#define DLL_DLOPEN_FLAGS 1 +#define DNS_CACHE +#define FILE_INHERIT_FCNTL +#define FILE_MMAP_FLAGS MAP_SHARED +#define HAS_STATFS +#undef HAVE_ATEXIT +#undef NEED_CRYPT_H +#define NEED_CRYPT_PROTO +#define NEED_FILIO +#define NET_SOCKETS +#define SHMEM_MMAP_FLAGS MAP_SHARED + +#else +#error "Missing defines in ns/netsite/include/base/systems.h" +#endif + +/* Pick up the configuration symbols in the public interface */ +#ifndef PUBLIC_BASE_SYSTEMS_H +#include "public/base/systems.h" +#endif /* PUBLIC_BASE_SYSTEMS_H */ + + +/* --- Begin defaults for values not defined above --- */ + +#ifndef DAEMON_LISTEN_SIZE +#define DAEMON_LISTEN_SIZE 128 +#endif /* !DAEMON_LISTEN_SIZE */ + +#ifndef SA_HANDLER_T +#define SA_HANDLER_T(x) (void (*)())x +#endif + +#ifdef HAS_CONSTVALUED_STRFUNCS +#define CONSTVALSTRCAST (char *) +#else +#define CONSTVALSTRCAST +#endif + +#ifndef THROW_HACK +#define THROW_HACK /* as nothing */ +#endif + + +/* --- End defaults for values not defined above --- */ + +/* --- Begin the great debate --- */ + +/* NS_MAIL builds sec-key.c which calls systhread_init, which requires */ +/* that USE_NSPR is defined when systhr.c is compiled. --lachman */ +/* MCC_PROXY does the same thing now --nbreslow -- LIKE HELL --ari */ +#define USE_NSPR +/* XXXrobm This is UNIX-only for the moment */ +#define LOG_BUFFERING +#ifdef SW_THREADS +#define THREAD_NSPR_USER +#else +#define THREAD_NSPR_KERNEL +#endif /* SW_THREADS */ +#define THREAD_ANY + +/* --- End the great debate --- */ + +#ifndef APSTUDIO_READONLY_SYMBOLS + +#ifndef NSPR_PRIO_H +#include +#define NSPR_PRIO_H +#endif /* !NSPR_PRIO_H */ + +/* + * These types have to be defined early, because they are defined + * as (void *) in the public API. + */ + +#ifndef SYS_FILE_T +typedef PRFileDesc *SYS_FILE; +#define SYS_FILE_T PRFileDesc * +#endif /* !SYS_FILE_T */ + +#ifndef SYS_NETFD_T +typedef PRFileDesc *SYS_NETFD; +#define SYS_NETFD_T PRFileDesc * +#endif /* !SYS_NETFD_T */ + +#endif /* !APSTUDIO_READONLY_SYMBOLS */ + +#endif /* BASE_SYSTEMS_H */ diff --git a/include/base/systhr.h b/include/base/systhr.h new file mode 100644 index 0000000..aeb02ac --- /dev/null +++ b/include/base/systhr.h @@ -0,0 +1,88 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef BASE_SYSTHR_H +#define BASE_SYSTHR_H + +#ifndef NOINTNSAPI +#define INTNSAPI +#endif /* !NOINTNSAPI */ + +/* + * systhr.h: Abstracted threading mechanisms + * + * Rob McCool + */ + +#ifndef NETSITE_H +#include "netsite.h" +#endif /* !NETSITE_H */ + +#ifdef THREAD_ANY + +/* --- Begin function prototypes --- */ + +#ifdef INTNSAPI + +NSPR_BEGIN_EXTERN_C + +NSAPI_PUBLIC +SYS_THREAD INTsysthread_start(int prio, int stksz, void (*fn)(void *), void *arg); + +NSAPI_PUBLIC SYS_THREAD INTsysthread_current(void); + +NSAPI_PUBLIC void INTsysthread_yield(void); + +NSAPI_PUBLIC SYS_THREAD INTsysthread_attach(void); + +NSAPI_PUBLIC void INTsysthread_detach(SYS_THREAD thr); + +NSAPI_PUBLIC void INTsysthread_terminate(SYS_THREAD thr); + +NSAPI_PUBLIC void INTsysthread_sleep(int milliseconds); + +NSAPI_PUBLIC void INTsysthread_init(char *name); + +NSAPI_PUBLIC void INTsysthread_timerset(int usec); + +NSAPI_PUBLIC int INTsysthread_newkey(void); + +NSAPI_PUBLIC void *INTsysthread_getdata(int key); + +NSAPI_PUBLIC void INTsysthread_setdata(int key, void *data); + +NSAPI_PUBLIC +void INTsysthread_set_default_stacksize(unsigned long size); + +NSPR_END_EXTERN_C + +/* --- End function prototypes --- */ +#define systhread_start INTsysthread_start +#define systhread_current INTsysthread_current +#define systhread_yield INTsysthread_yield +#define systhread_attach INTsysthread_attach +#define systhread_detach INTsysthread_detach +#define systhread_terminate INTsysthread_terminate +#define systhread_sleep INTsysthread_sleep +#define systhread_init INTsysthread_init +#define systhread_timerset INTsysthread_timerset +#define systhread_newkey INTsysthread_newkey +#define systhread_getdata INTsysthread_getdata +#define systhread_setdata INTsysthread_setdata +#define systhread_set_default_stacksize INTsysthread_set_default_stacksize + +#endif /* INTNSAPI */ + +#endif /* THREAD_ANY */ + +#endif /* !BASE_SYSTHR_H */ diff --git a/include/base/util.h b/include/base/util.h new file mode 100644 index 0000000..91f98a5 --- /dev/null +++ b/include/base/util.h @@ -0,0 +1,96 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef BASE_UTIL_H +#define BASE_UTIL_H + +#ifndef NOINTNSAPI +#define INTNSAPI +#endif /* !NOINTNSAPI */ + +/* + * util.h: A hodge podge of utility functions and standard functions which + * are unavailable on certain systems + * + * Rob McCool + */ + +#ifndef PUBLIC_NSAPI_H +#include "public/nsapi.h" +#endif /* !PUBLIC_NSAPI_H */ + + +/* --- Begin common function prototypes --- */ + +#ifdef INTNSAPI + +NSPR_BEGIN_EXTERN_C + +NSAPI_PUBLIC char *INTutil_hostname(void); + +NSAPI_PUBLIC int INTutil_itoa(int i, char *a); + +NSAPI_PUBLIC +int INTutil_vsprintf(char *s, register const char *fmt, va_list args); + +NSAPI_PUBLIC int INTutil_sprintf(char *s, const char *fmt, ...) +#ifdef __GNUC__ + __attribute__ ((format (printf, 2, 3))); +#else + ; +#endif + +NSAPI_PUBLIC int INTutil_vsnprintf(char *s, int n, register const char *fmt, + va_list args); + +NSAPI_PUBLIC int INTutil_snprintf(char *s, int n, const char *fmt, ...) +#ifdef __GNUC__ + __attribute__ ((format (printf, 3, 4))); +#else + ; +#endif + +NSAPI_PUBLIC int INTutil_strftime(char *s, const char *format, const struct tm *t); + +NSAPI_PUBLIC struct tm *INTutil_localtime(const time_t *clock, struct tm *res); + +#ifdef NEED_STRCASECMP +NSAPI_PUBLIC int INTutil_strcasecmp(CASECMPARG_T char *one, CASECMPARG_T char *two); +#endif /* NEED_STRCASECMP */ + +#ifdef NEED_STRNCASECMP +NSAPI_PUBLIC int INTutil_strncasecmp(CASECMPARG_T char *one, CASECMPARG_T char *two, int n); +#endif /* NEED_STRNCASECMP */ + +/* --- End common function prototypes --- */ + +NSPR_END_EXTERN_C + +#define util_hostname INTutil_hostname +#define util_itoa INTutil_itoa +#define util_vsprintf INTutil_vsprintf +#define util_sprintf INTutil_sprintf +#define util_vsnprintf INTutil_vsnprintf +#define util_snprintf INTutil_snprintf +#define util_strftime INTutil_strftime +#define util_strcasecmp INTutil_strcasecmp +#define util_strncasecmp INTutil_strncasecmp +#define util_localtime INTutil_localtime + +#ifdef NEED_STRINGS_H /* usually for strcasecmp */ +#include +#endif + +#endif /* INTNSAPI */ + +#endif /* !BASE_UTIL_H */ diff --git a/include/i18n.h b/include/i18n.h new file mode 100644 index 0000000..491c0de --- /dev/null +++ b/include/i18n.h @@ -0,0 +1,185 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + + +#ifndef I18N_H +#define I18N_H + +/* Make NSAPI_PUBLIC available */ +#include "base/systems.h" + +/* This stuff was copied from libadminutil/resource.h so we could + remove the dependency on adminutil which is not being open sourced + this first round. +*/ +#ifndef COPIED_FROM_LIBADMINUTIL_RESOURCE_H +/* Resource contains the name of the + property file w/ paht information +*/ +typedef struct +{ + char *path; + char *package; + void *propset; +} Resource; + +/*******************************************************************************/ +/* + * this table contains library name + * (stored in the first string entry, with id=0), + * and the id/string pairs which are used by library + */ + +typedef struct res_RESOURCE_TABLE +{ + int id; + char *str; +} res_RESOURCE_TABLE; + +/*******************************************************************************/ + +/* + * resource global contains resource table list which is used + * to generate the database. + * Also used for "in memory" version of XP_GetStringFromDatabase() + */ + +typedef struct res_RESOURCE_GLOBAL +{ + res_RESOURCE_TABLE *restable; +} res_RESOURCE_GLOBAL; + +/*******************************************************************************/ + +/* + * Define the ResDef macro to simplify the maintenance of strings which are to + * be added to the library or application header file (dbtxxx.h). This enables + * source code to refer to the strings by theit TokenNames, and allows the + * strings to be stored in the database. + * + * Usage: ResDef(TokenName,TokenValue,String) + * + * Example: ResDef(DBT_HelloWorld_, \ + * 1,"Hello, World!") + * ResDef(DBT_TheCowJumpedOverTheMoon_, \ + * 2,"The cow jumped over the moon.") + * ResDef(DBT_TheValueOfPiIsAbout31415926536_, \ + * 3,"The value of PI is about 3.1415926536." + * + * RESOURCE_STR is used by makstrdb.c only. It is not used by getstrdb.c or + * in library or application source code. + */ + +#ifdef RESOURCE_STR +#define BEGIN_STR(argLibraryName) \ + RESOURCE_TABLE argLibraryName[] = { {0, #argLibraryName}, +#define ResDef(argToken,argID,argString) \ + {argID, argString}, +#define END_STR(argLibraryName) \ + {0, 0} }; +#else +#define BEGIN_STR(argLibraryName) \ + enum { +#define ResDef(argToken,argID,argString) \ + argToken = argID, +#define END_STR(argLibraryName) \ + argLibraryName ## top }; +#endif + +#endif /* COPIED_FROM_LIBADMINUTIL_RESOURCE_H */ + +typedef res_RESOURCE_TABLE RESOURCE_TABLE; +typedef res_RESOURCE_GLOBAL RESOURCE_GLOBAL; + + +/*******************************************************************************/ + +/* + * In accordance with the recommendations in the + * "Netscape Coding Standard for Server Internationalization", + * the following aliases are defined for fprintf, et al., and + * these aliases should be used to clearly indicate the intended + * destination for output. + */ + +#define AdminFprintf fprintf +#define DebugFprintf fprintf + +#define ClientSprintf sprintf +#define AdminSprintf sprintf +#define DebugSprintf sprintf + +#define ClientFputs fputs +#define AdminFputs fputs +#define DebugFputs fputs + +/* more #define, as needed */ + +/*******************************************************************************/ + +/* + * Function prototypes for application and libraries + */ + + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/******************************/ +/* XP_GetStringFromDatabase() */ +/******************************/ + +NSAPI_PUBLIC +extern const char* +XP_GetStringFromDatabase(const char* strLibraryName, + const char* strLanguage, + int iToken); + +#ifdef __cplusplus +} +#endif + + +/*******************************************************************************/ + +/* + * Function prototypes for building string database + */ + +extern int XP_MakeStringDatabase(void); + +/* Used to create the string database at build time; not used by the application + itself. Returns 0 is successful. */ + +extern void XP_PrintStringDatabase(void); + +/* DEBUG: Prints out entire string database to standard output. */ + +/*******************************************************************************/ + +/* + * Macros to simplify calls to XP_GetStringFromDatabase + * (need one argument instead of three) + */ + +#define XP_GetAdminStr(DBTTokenName) \ + XP_GetStringFromDatabase(LIBRARY_NAME, \ + "en", \ + DBTTokenName) + +/*******************************************************************************/ + +#endif diff --git a/include/ldaputil/cert.h b/include/ldaputil/cert.h new file mode 100644 index 0000000..5cd29e7 --- /dev/null +++ b/include/ldaputil/cert.h @@ -0,0 +1,31 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef _LDAPU_CERT_H +#define _LDAPU_CERT_H + +#ifndef NSAPI_PUBLIC +#define NSAPI_PUBLIC +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +NSAPI_PUBLIC int ldapu_get_cert (void *SSLendpoint, void **cert); + +#ifdef __cplusplus +} +#endif + +#endif /* _LDAPU_CERT_H */ diff --git a/include/ldaputil/certmap.h b/include/ldaputil/certmap.h new file mode 100644 index 0000000..5b71c6d --- /dev/null +++ b/include/ldaputil/certmap.h @@ -0,0 +1,130 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef _LDAPU_CERTMAP_H +#define _LDAPU_CERTMAP_H + +#ifndef INTLDAPU +#define INTLDAPU +#endif /* INTLDAPU */ + +#include "extcmap.h" + +enum { + LDAPU_STR_FILTER_DEFAULT, + LDAPU_STR_FILTER_USER, + LDAPU_STR_FILTER_GROUP, + LDAPU_STR_FILTER_MEMBER, + LDAPU_STR_FILTER_MEMBER_RECURSE, + LDAPU_STR_ATTR_USER, + LDAPU_STR_ATTR_CERT, + LDAPU_STR_ATTR_CERT_NOSUBTYPE, + LDAPU_STR_MAX_INDEX +}; + +#ifdef DEFINE_LDAPU_STRINGS +/* used only in certmap.c and ldaputil.c */ +static char *ldapu_strings[] = { + "objectclass=*", /* LDAPU_STR_DEFAULT */ + "uid=%s", /* LDAPU_STR_FILTER_USER */ + "(& (cn=%s) (| (objectclass=groupofuniquenames) (objectclass=groupofnames)))", /* LDAPU_STR_FILTER_GROUP */ + "(| (uniquemember=%s) (member=%s))", /* LDAPU_STR_FILTER_MEMBER */ + "(& %s (| (objectclass=groupofuniquenames) (objectclass=groupofnames))", /* LDAPU_STR_FILTER_MEMBER_RECURSE */ + "uid", /* LDAPU_STR_ATTR_USER */ + "userCertificate;binary", /* LDAPU_STR_ATTR_CERT */ + "userCertificate" /* LDAPU_STR_ATTR_CERT_NOSUBTYPE */ +}; +#endif /* DEFINE_LDAPU_STRINGS */ + +typedef struct { + char *str; + int size; + int len; +} LDAPUStr_t; + +#ifdef __cplusplus +extern "C" { +#endif + +NSAPI_PUBLIC int ldapu_cert_to_ldap_entry (void *cert, LDAP *ld, + const char *basedn, + LDAPMessage **res); + +NSAPI_PUBLIC int ldapu_set_cert_mapfn (const char *issuerDN, + CertMapFn_t mapfn); + + +NSAPI_PUBLIC CertMapFn_t ldapu_get_cert_mapfn (const char *issuerDN); + +NSAPI_PUBLIC int ldapu_set_cert_searchfn (const char *issuerDN, + CertSearchFn_t searchfn); + + +NSAPI_PUBLIC CertSearchFn_t ldapu_get_cert_searchfn (const char *issuerDN); + +NSAPI_PUBLIC int ldapu_set_cert_verifyfn (const char *issuerDN, + CertVerifyFn_t verifyFn); + +NSAPI_PUBLIC CertVerifyFn_t ldapu_get_cert_verifyfn (const char *issuerDN); + + +NSAPI_PUBLIC int ldapu_get_cert_subject_dn (void *cert, char **subjectDN); + + +NSAPI_PUBLIC int ldapu_get_cert_issuer_dn (void *cert, char **issuerDN); + + +NSAPI_PUBLIC int ldapu_get_cert_ava_val (void *cert, int which_dn, + const char *attr, char ***val); + + +NSAPI_PUBLIC int ldapu_free_cert_ava_val (char **val); + + +NSAPI_PUBLIC int ldapu_get_cert_der (void *cert, unsigned char **derCert, + unsigned int *len); + + +NSAPI_PUBLIC int ldapu_issuer_certinfo (const char *issuerDN, + void **certmap_info); + + +NSAPI_PUBLIC int ldapu_certmap_info_attrval (void *certmap_info, + const char *attr, char **val); + + +NSAPI_PUBLIC char *ldapu_err2string (int err); + +/* Keep the old fn for backward compatibility */ +NSAPI_PUBLIC void ldapu_free_old (char *ptr); + + +NSAPI_PUBLIC void *ldapu_malloc (int size); + + +NSAPI_PUBLIC char *ldapu_strdup (const char *ptr); + + +NSAPI_PUBLIC void *ldapu_realloc (void *ptr, int size); + + +NSAPI_PUBLIC void ldapu_free (void *ptr); + + +NSAPI_PUBLIC int ldaputil_exit (); + +#ifdef __cplusplus +} +#endif + +#endif /* _LDAPU_CERTMAP_H */ diff --git a/include/ldaputil/dbconf.h b/include/ldaputil/dbconf.h new file mode 100644 index 0000000..9418f3f --- /dev/null +++ b/include/ldaputil/dbconf.h @@ -0,0 +1,95 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef _LDAPU_DBCONF_H +#define _LDAPU_DBCONF_H + +#include + +#ifndef NSAPI_PUBLIC +#define NSAPI_PUBLIC +#endif + +typedef struct dbconf_propval { + char *prop; /* Property name */ + char *val; /* Property value */ + struct dbconf_propval *next; /* Pointer to the next prop-val pair */ +} DBPropVal_t; + +typedef struct dbconf_dbinfo { + char *dbname; /* Database name */ + char *url; /* Database URL */ + DBPropVal_t *firstprop; /* pointer to first property-value pair */ + DBPropVal_t *lastprop; /* pointer to last property-value pair */ + struct dbconf_dbinfo *next; /* pointer to next db info */ +} DBConfDBInfo_t; + +typedef struct { + DBConfDBInfo_t *firstdb; /* pointer to first db info */ + DBConfDBInfo_t *lastdb; /* pointer to last db info */ +} DBConfInfo_t; + +#define DBCONF_DEFAULT_DBNAME "default" + +#ifdef __cplusplus +extern "C" { +#endif + +NSAPI_PUBLIC extern int dbconf_read_default_dbinfo (const char *file, + DBConfDBInfo_t **db_info); +NSAPI_PUBLIC extern int dbconf_read_config_file (const char *file, + DBConfInfo_t **conf_info); + +NSAPI_PUBLIC extern int ldapu_dbinfo_attrval (DBConfDBInfo_t *db_info, + const char *attr, char **val); + +NSAPI_PUBLIC extern void dbconf_free_confinfo (DBConfInfo_t *conf_info); +NSAPI_PUBLIC extern void dbconf_free_dbinfo (DBConfDBInfo_t *db_info); + +extern void dbconf_free_propval (DBPropVal_t *propval); + +extern void dbconf_print_confinfo (DBConfInfo_t *conf_info); +extern void dbconf_print_dbinfo (DBConfDBInfo_t *db_info); +extern void dbconf_print_propval (DBPropVal_t *propval); + + +NSAPI_PUBLIC int dbconf_output_db_directive (FILE *fp, const char *dbname, + const char *url); + +NSAPI_PUBLIC int dbconf_output_propval (FILE *fp, const char *dbname, + const char *prop, const char *val, + const int encoded); + +/* Following functions are required by certmap.c file */ +extern int dbconf_read_config_file_sub (const char *file, + const char *directive, + const int directive_len, + DBConfInfo_t **conf_info_out); + +extern int dbconf_read_default_dbinfo_sub (const char *file, + const char *directive, + const int directive_len, + DBConfDBInfo_t **db_info_out); + +NSAPI_PUBLIC int dbconf_get_dbnames (const char *dbmap, char ***dbnames, int *cnt); + +NSAPI_PUBLIC int dbconf_free_dbnames (char **dbnames); + + +extern int ldapu_strcasecmp (const char *s1, const char *s2); + +#ifdef __cplusplus +} +#endif + +#endif /* _LDAPU_DBCONF_H */ diff --git a/include/ldaputil/encode.h b/include/ldaputil/encode.h new file mode 100644 index 0000000..dbf3481 --- /dev/null +++ b/include/ldaputil/encode.h @@ -0,0 +1,33 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef _LDAPU_ENCODE_H +#define _LDAPU_ENCODE_H + +#ifndef NSAPI_PUBLIC +#define NSAPI_PUBLIC +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +NSAPI_PUBLIC extern char *dbconf_encodeval(const char *val); + +NSAPI_PUBLIC extern char *dbconf_decodeval (const char *val); + +#ifdef __cplusplus +} +#endif + +#endif /* _LDAPU_ENCODE_H */ diff --git a/include/ldaputil/errors.h b/include/ldaputil/errors.h new file mode 100644 index 0000000..8bbbdc2 --- /dev/null +++ b/include/ldaputil/errors.h @@ -0,0 +1,112 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef _LDAPU_ERRORS_H +#define _LDAPU_ERRORS_H + +#ifndef NSAPI_PUBLIC +#define NSAPI_PUBLIC +#endif + +#ifdef DBG_PRINT +#include +#define DBG_PRINT1(x) fprintf(stderr, x) +#define DBG_PRINT2(x,y) fprintf(stderr, x, y) +#define DBG_PRINT3(x,y,z) fprintf(stderr, x, y, z) +#define DBG_PRINT4(x,y,z,a) fprintf(stderr, x, y, z, a) +#else +#define DBG_PRINT1(x) +#define DBG_PRINT2(x,y) +#define DBG_PRINT3(x,y,z) +#define DBG_PRINT4(x,y,z,a) +#endif + +/* Common error codes */ +#define LDAPU_ERR_NOT_IMPLEMENTED -1000 +#define LDAPU_ERR_INTERNAL -1001 +/* #define LDAPU_SUCCESS 0 */ /* defined in extcmap.h */ +/* #define LDAPU_FAILED -1 */ /* defined in extcmap.h */ +/* #define LDAPU_CERT_MAP_FUNCTION_FAILED -2 *//* defined in extcmap.h */ +/* #define LDAPU_CERT_VERIFY_FUNCTION_FAILED -3 *//* defined in extcmap.h */ +/* #define LDAPU_CERT_VERIFY_FUNCTION_FAILED -4 *//* defined in extcmap.h */ +/* #define LDAPU_CERT_MAP_INITFN_FAILED -5 *//* defined in extcmap.h */ + +/* Error codes returned by ldapdb.c */ +#define LDAPU_ERR_OUT_OF_MEMORY -110 +#define LDAPU_ERR_URL_INVALID_PREFIX -112 +#define LDAPU_ERR_URL_NO_BASEDN -113 +#define LDAPU_ERR_URL_PARSE_FAILED -114 + +#define LDAPU_ERR_LDAP_INIT_FAILED -120 +#define LDAPU_ERR_LCACHE_INIT_FAILED -121 +#define LDAPU_ERR_LDAP_SET_OPTION_FAILED -122 +#define LDAPU_ERR_NO_DEFAULT_CERTDB -123 + +/* Errors returned by dbconf.c */ +#define LDAPU_ERR_CANNOT_OPEN_FILE -141 +#define LDAPU_ERR_DBNAME_IS_MISSING -142 +#define LDAPU_ERR_PROP_IS_MISSING -143 +#define LDAPU_ERR_DIRECTIVE_IS_MISSING -145 +#define LDAPU_ERR_NOT_PROPVAL -146 +#define LDAPU_ATTR_NOT_FOUND -147 + +/* Error codes returned by certmap.c */ +#define LDAPU_ERR_NO_ISSUERDN_IN_CERT -181 +#define LDAPU_ERR_NO_ISSUERDN_IN_CONFIG_FILE -182 +#define LDAPU_ERR_CERTMAP_INFO_MISSING -183 +#define LDAPU_ERR_MALFORMED_SUBJECT_DN -184 +#define LDAPU_ERR_MAPPED_ENTRY_NOT_FOUND -185 +#define LDAPU_ERR_UNABLE_TO_LOAD_PLUGIN -186 +#define LDAPU_ERR_MISSING_INIT_FN_IN_LIB -187 +#define LDAPU_ERR_MISSING_INIT_FN_IN_CONFIG -188 +#define LDAPU_ERR_CERT_VERIFY_FAILED -189 +#define LDAPU_ERR_CERT_VERIFY_NO_CERTS -190 +#define LDAPU_ERR_MISSING_LIBNAME -191 +#define LDAPU_ERR_MISSING_INIT_FN_NAME -192 + +#define LDAPU_ERR_EMPTY_LDAP_RESULT -193 +#define LDAPU_ERR_MULTIPLE_MATCHES -194 +#define LDAPU_ERR_MISSING_RES_ENTRY -195 +#define LDAPU_ERR_MISSING_UID_ATTR -196 +#define LDAPU_ERR_WRONG_ARGS -197 +#define LDAPU_ERR_RENAME_FILE_FAILED -198 + +#define LDAPU_ERR_MISSING_VERIFYCERT_VAL -199 +#define LDAPU_ERR_CANAME_IS_MISSING -200 +#define LDAPU_ERR_CAPROP_IS_MISSING -201 +#define LDAPU_ERR_UNKNOWN_CERT_ATTR -202 +#define LDAPU_ERR_INVALID_ARGUMENT -203 +#define LDAPU_ERR_INVALID_SUFFIX -204 + +/* Error codes returned by cert.c */ +#define LDAPU_ERR_EXTRACT_SUBJECTDN_FAILED -300 +#define LDAPU_ERR_EXTRACT_ISSUERDN_FAILED -301 +#define LDAPU_ERR_EXTRACT_DERCERT_FAILED -302 + +/* Error codes returned by ldapauth.c */ +#define LDAPU_ERR_CIRCULAR_GROUPS -400 +#define LDAPU_ERR_INVALID_STRING -401 +#define LDAPU_ERR_INVALID_STRING_INDEX -402 +#define LDAPU_ERR_MISSING_ATTR_VAL -403 + +#ifdef __cplusplus +extern "C" { +#endif + + /* NSAPI_PUBLIC extern char *ldapu_err2string(int err); */ + +#ifdef __cplusplus +} +#endif + +#endif /* LDAPUTIL_LDAPU_H */ diff --git a/include/ldaputil/extcmap.h b/include/ldaputil/extcmap.h new file mode 100644 index 0000000..f5b0227 --- /dev/null +++ b/include/ldaputil/extcmap.h @@ -0,0 +1,627 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef _PUBLIC_CERTMAP_H +#define _PUBLIC_CERTMAP_H + +#include + +#ifndef NSAPI_PUBLIC +#define NSAPI_PUBLIC +#endif + + +#define LDAPU_ATTR_INITFN "InitFn" +#define LDAPU_ATTR_LIBRARY "library" +#define LDAPU_ATTR_DNCOMPS "DNComps" +#define LDAPU_ATTR_FILTERCOMPS "FilterComps" +#define LDAPU_ATTR_VERIFYCERT "VerifyCert" +#define LDAPU_ATTR_CERTMAP_LDAP_ATTR "CmapLdapAttr" + +/* Error/Success codes */ +#define LDAPU_SUCCESS 0 +#define LDAPU_FAILED -1 +#define LDAPU_CERT_MAP_FUNCTION_FAILED -2 +#define LDAPU_CERT_SEARCH_FUNCTION_FAILED -3 +#define LDAPU_CERT_VERIFY_FUNCTION_FAILED -4 +#define LDAPU_CERT_MAP_INITFN_FAILED -5 + + +/* + * CertMapFn_t - + * This is a typedef for cert mapping function. The mapping function is + * called by the function ldapu_cert_to_ldap_entry. + * Parameters: + * cert - cert to be mapped. You can pass this to + * functions ldapu_get_cert_XYZ. + * ld - Handle to the connection to the directory server. + * certmap_info - This structure contains information about the + * configuration parameters for the cert's issuer (CA). + * This structure can be passed to the function + * ldapu_certmap_info_attrval to get value for a particular + * configuration attribute (or a property). + * ldapdn - The mapping function should allocate memory for ldapdn + * using malloc and set this variable using the 'cert' and + * 'certmap_info'. This DN will be used for ldap lookup. + * filter - The mapping function should allocate memory for filter + * using malloc and set this variable using the 'cert' and + * 'certmap_info'. This will be used as ldap filter for ldap + * lookup of the ldapdn. + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion (cert is mapped) + * return LDAPU_FAILED there is no unexpected error but cert could not + * mapped (probably because ldap entry doesn't exist). + * otherwise return LDAPU_CERT_MAP_FUNCTION_FAILED. + */ +typedef int (*CertMapFn_t)(void *cert, LDAP *ld, void *certmap_info, + char **ldapdn, char **filter); + + +/* + * CertSearchFn_t - + * This is a typedef for cert search function. The search function is + * called by the function ldapu_cert_to_ldap_entry after calling the mapping + * function. The candidate 'dn' and 'filter' returned by the mapping + * function is passed to this function. + * The default search function works as follows: + * 1. If the 'filter' is NULL, default it to 'objectclass=*'. + * 2. If the 'dn' is non-NULL, do a base level search with the 'dn' and + * 'filter'. If it succeeds, we are done. If there is no serious + * error (LDAP_NO_SUCH_OBJECT is not serious error yet), continue. + * 3. If the 'dn' is NULL, default it to 'basedn'. + * 4. Perform a 'subtree' search in LDAP for the 'dn' and the 'filter'. + * 5. Return the results of the last search. + * Parameters: + * cert - cert to be mapped. You can pass this to + * functions ldapu_get_cert_XYZ. + * ld - Handle to the connection to the directory server. + * certmap_info - This structure contains information about the + * configuration parameters for the cert's issuer (CA). + * This structure can be passed to the function + * ldapu_certmap_info_attrval to get value for a particular + * configuration attribute (or a property). + * suffix - If the ldapdn is empty then use this DN to begin the + * search. This is the DN of the root object in LDAP + * Directory. + * ldapdn - candidate 'dn' returned by the mapping function. + * filter - returned by the mapping function. + * attrs - list of attributes to return from the search. If this is + * NULL, all attributes are returned. + * res - result of the search which is passed to the verify + * function. + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * return LDAPU_FAILED there is no unexpected error but entries matching the + * 'dn' and 'filter' doesn't exist. + * otherwise return LDAPU_CERT_SEARCH_FUNCTION_FAILED. + */ +typedef int (*CertSearchFn_t)(void *cert, LDAP *ld, void *certmap_info, + const char *suffix, const char *ldapdn, + const char *filter, const char **attrs, + LDAPMessage ***res); + + +/* + * CertVerifyFn_t - + * This is a typedef for cert verify function. The verify function is + * called by the function ldapu_cert_to_ldap_entry after the cert is + * successfully mapped to ldapdn and filter, and an entry matching that + * exists in the directory server. The verify fn may get called for + * multiple matched entries. This function must go through all the entries + * and check which one is appropriate. The pointer to that entry must be + * passed back in the 'LDAPMessage **entry' parameter. + * Parameters: + * cert - Original cert to be mapped. You can pass this to + * functions ldapu_get_cert_XYZ. + * ld - Handle to the connection to the directory server. + * certmap_info - This structure contains information about the + * configuration parameters for the cert's issuer (CA). + * This structure can be passed to the function + * ldapu_certmap_info_attrval to get value for a particular + * configuration attribute (or a property). + * res - cert is first mapped to ldapdn and filter. 'res' is the + * result of ldap search using the ldapdn and filter. + * 'ld' and 'res' can be used in the calls to ldapsdk API. + * entry - pointer to the entry from 'res' which is the correct match + * according to the verify function. + * + * Return Values: + * return LDAPU_SUCCESS upon successful completion (cert is verified) + * return LDAPU_FAILED there is no unexpected error but cert could not + * verified (probably because it was revoked). + * otherwise return LDAPU_CERT_VERIFY_FUNCTION_FAILED. + */ +typedef int (*CertVerifyFn_t)(void *cert, LDAP *ld, void *certmap_info, + LDAPMessage *res, LDAPMessage **entry); + + + +/* + * CertmapInitFn_t - + * This is a typedef for user defined init function. An init function can be + * specified in the config file (/userdb/certmap.conf) per issuer + * of a certificate. This init function must from the user's library, also + * loaded from the config file using the 'library' property. The init + * function is specified in the config file using the 'InitFn' property. + * When the config file is loaded, any user defined init functions will be + * called with the certmap_info pertaining to the issuer (CA). + * Parameters: + * certmap_info - This structure contains information about the + * configuration parameters for the cert's issuer (CA). + * This structure can be passed to the function + * ldapu_certmap_info_attrval to get value for a particular + * configuration attribute (or a property). + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * otherwise return LDAPU_CERT_MAP_INITFN_FAILED. The server startup will be + * aborted if the return value is not LDAPU_SUCCESS. + */ +typedef int (*CertMapInitFn_t)(void *certmap_info, const char *issuerName, + const char *issuerDN, const char *libname); + +/* + * Refer to the description of the function ldapu_get_cert_ava_val + */ +enum { + LDAPU_SUBJECT_DN, + LDAPU_ISSUER_DN +}; + +/* ldapu_cert_to_ldap_entry */ +typedef int (*t_ldapu_cert_to_ldap_entry)(void *cert, LDAP *ld, + const char *suffix, + LDAPMessage **res); + +/* ldapu_set_cert_mapfn */ +typedef int (*t_ldapu_set_cert_mapfn)(const char *issuerDN, + CertMapFn_t mapfn); + +/* ldapu_get_cert_mapfn */ +typedef CertMapFn_t (*t_ldapu_get_cert_mapfn) (const char *issuerDN); + +/* ldapu_set_cert_searchfn */ +typedef int (*t_ldapu_set_cert_searchfn) (const char *issuerDN, + CertSearchFn_t searchfn); + +/* ldapu_get_cert_searchfn */ +typedef CertSearchFn_t (*t_ldapu_get_cert_searchfn) (const char *issuerDN); + +/* ldapu_set_cert_verifyfn */ +typedef int (*t_ldapu_set_cert_verifyfn) (const char *issuerDN, + CertVerifyFn_t verifyFn); + +/* ldapu_get_cert_verifyfn */ +typedef CertVerifyFn_t (*t_ldapu_get_cert_verifyfn) (const char *issuerDN); + +/* ldapu_get_cert_subject_dn */ +typedef int (*t_ldapu_get_cert_subject_dn) (void *cert, char **subjectDN); + +/* ldapu_get_cert_issuer_dn */ +typedef int (*t_ldapu_get_cert_issuer_dn) (void *cert, char **issuerDN); + +/* ldapu_get_cert_ava_val */ +typedef int (*t_ldapu_get_cert_ava_val) (void *cert, int which_dn, + const char *attr, char ***val); + +/* ldapu_free_cert_ava_val */ +typedef int (*t_ldapu_free_cert_ava_val) (char **val); + +/* ldapu_get_cert_der */ +typedef int (*t_ldapu_get_cert_der) (void *cert, unsigned char **derCert, + unsigned int *len); + +/* ldapu_issuer_certinfo */ +typedef int (*t_ldapu_issuer_certinfo) (const char *issuerDN, + void **certmap_info); + +/* ldapu_certmap_info_attrval */ +typedef int (*t_ldapu_certmap_info_attrval) (void *certmap_info, + const char *attr, char **val); + +/* ldapu_err2string */ +typedef char * (*t_ldapu_err2string) (int err); + +/* ldapu_free */ +typedef void (*t_ldapu_free_old) (char *ptr); +typedef void (*t_ldapu_free) (void *ptr); + +/* ldapu_malloc */ +typedef void *(*t_ldapu_malloc) (int size); + +/* ldapu_strdup */ +typedef char *(*t_ldapu_strdup) (const char *ptr); + + +typedef struct LDAPUDispatchVector LDAPUDispatchVector_t; +struct LDAPUDispatchVector { + t_ldapu_cert_to_ldap_entry f_ldapu_cert_to_ldap_entry; + t_ldapu_set_cert_mapfn f_ldapu_set_cert_mapfn; + t_ldapu_get_cert_mapfn f_ldapu_get_cert_mapfn; + t_ldapu_set_cert_searchfn f_ldapu_set_cert_searchfn; + t_ldapu_get_cert_searchfn f_ldapu_get_cert_searchfn; + t_ldapu_set_cert_verifyfn f_ldapu_set_cert_verifyfn; + t_ldapu_get_cert_verifyfn f_ldapu_get_cert_verifyfn; + t_ldapu_get_cert_subject_dn f_ldapu_get_cert_subject_dn; + t_ldapu_get_cert_issuer_dn f_ldapu_get_cert_issuer_dn; + t_ldapu_get_cert_ava_val f_ldapu_get_cert_ava_val; + t_ldapu_free_cert_ava_val f_ldapu_free_cert_ava_val; + t_ldapu_get_cert_der f_ldapu_get_cert_der; + t_ldapu_issuer_certinfo f_ldapu_issuer_certinfo; + t_ldapu_certmap_info_attrval f_ldapu_certmap_info_attrval; + t_ldapu_err2string f_ldapu_err2string; + t_ldapu_free_old f_ldapu_free_old; + t_ldapu_malloc f_ldapu_malloc; + t_ldapu_strdup f_ldapu_strdup; + t_ldapu_free f_ldapu_free; +}; + + +#ifdef INTLDAPU +NSAPI_PUBLIC extern LDAPUDispatchVector_t *__ldapu_table; +#else +typedef int (*CertMapDLLInitFn_t)(LDAPUDispatchVector_t **table); + +NSAPI_PUBLIC extern int CertMapDLLInitFn(LDAPUDispatchVector_t **table); + +extern LDAPUDispatchVector_t *__ldapu_table; + +#define CertmapDLLInit(rv, libname) +#define CertmapDLLInitFnTbl + + +#endif /* INTLDAPU */ + +#ifndef INTLDAPU + +/* + * ldapu_cert_to_ldap_entry - + * This function is called to map a cert to an ldap entry. It extracts the + * cert issuer information from the given cert. The mapping function set for + * the issuer (if any) or the default mapping function is called to map the + * subject DN from the cert to a candidate ldap DN and filter for ldap + * search. If the mapped ldap DN is NULL, the 'basedn' passed into this + * function is used as a starting place for the search. If the mapped filter + * is NULL, "objectclass=*" is used as a filter. A base level search is + * performed to see if the candidate DN exists in the LDAP database matching + * the filter. If there is no match, a scoped search (sub-tree search) is + * performed. If at least one entry matched the mapped DN and filter, the + * result is passed to the appropriate verify function. The verify function + * is called only if 'VerifyCert' parameter has been set for the cert issuer + * in the certmap.conf file. + * If the verify function succeeds, it must return the pointer to the matched + * 'entry'. If at the end, there is only one matching entry, the mapping is + * successful. + * Parameters: + * cert - cert to be mapped. You can pass this to + * functions ldapu_get_cert_XYZ. + * ld - Handle to the connection to the directory server. + * suffix - If the subject dn is mapped to empty LDAP DN then use this + * DN to begin the search. This is the DN of the root object + * in LDAP Directory. + * res - cert is first mapped to ldapdn and filter. 'res' is the + * result of ldap search using the ldapdn and filter. + * 'ld' and 'res' can be used in the calls to ldapsdk API. + * When done with 'res', free it using ldap_msgfree(res) + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * otherwise returns an error code that can be passed to ldapu_err2string. + */ +#define ldapu_cert_to_ldap_entry (*__ldapu_table->f_ldapu_cert_to_ldap_entry) + +/* + * ldapu_set_cert_mapfn - + * This function can be used to set the cert mapping function for the given + * issuer (CA). If the mapping information doesn't exist for the given + * issuer then a new one will be created and the mapping function will be + * set. When creating the new mapping information, the default mapping + * information is copied. + * Parameters: + * issuerDN - DN of the cert issuer. This mapping function will be used + * for all certs issued by this issuer. If the issuerDN is + * NULL, the given 'mapfn' becomes the default mapping + * function (which is used when no mapping function has been + * set for the cert's issuer). + * mapfn - the mapping function. Look at the desciption of + * CertMapFn_t to find out more about the mapping functions. + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * otherwise returns an error code that can be passed to ldapu_err2string. + */ +#define ldapu_set_cert_mapfn (*__ldapu_table->f_ldapu_set_cert_mapfn) + + +/* + * ldapu_get_cert_mapfn - + * This function can be used to get the cert mapping function for the given + * issuer (CA). This will always return a non-NULL function. + * Parameters: + * issuerDN - DN of the cert issuer for which the mapping function is to + * be retrieved. If this is NULL, default mapping function + * is returned. + * + * Return Value: + * The mapping function set for the issuer is returned. If the issuerDN is + * NULL or if no specific mapping function has been set for the issuer, the + * default mapping function is returned. + */ +#define ldapu_get_cert_mapfn (*__ldapu_table->f_ldapu_get_cert_mapfn) + +/* + * ldapu_set_cert_searchfn - + * This function can be used to set the cert search function for the given + * issuer (CA). + * Parameters: + * issuerDN - DN of the cert issuer. This search function will be used + * for all certs issued by this issuer. If the issuerDN is + * NULL, the given 'searchfn' becomes the default search + * function (which is used when no search function has been + * set for the cert's issuer). + * searchfn - the search function. Look at the desciption of + * CertSearchFn_t to find out more about the search functions. + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * otherwise returns an error code that can be passed to ldapu_err2string. + */ +#define ldapu_set_cert_searchfn (*__ldapu_table->f_ldapu_set_cert_searchfn) + + +/* + * ldapu_get_cert_searchfn - + * This function can be used to get the cert search function for the given + * issuer (CA). This will always return a non-NULL function. + * Parameters: + * issuerDN - DN of the cert issuer for which the search function is to + * be retrieved. If this is NULL, the default search + * function is returned. + * + * Return Value: + * The search function set for the issuer is returned. If the issuerDN is + * NULL or if no specific search function has been set for the issuer, the + * default search function is returned. + */ +#define ldapu_get_cert_searchfn (*__ldapu_table->f_ldapu_get_cert_searchfn) + +/* + * ldapu_set_cert_verifyfn - + * This function can be used to set the cert verify function for the given + * issuer (CA). If the mapping information doesn't exist for the given + * issuer then a new one will be created and the verify function will be + * set. When creating the new mapping information, the default mapping + * information is copied. + * Parameters: + * issuerDN - DN of the cert issuer. This verify function will be used + * for all certs issued by this issuer. If the issuerDN is + * NULL, the given 'verifyFn' becomes the default verify + * function (which is used when no verify function has been + * set for the cert's issuer). + * verifyFn - the verify function. Look at the desciption of + * CertMapFn_t to find out more about the verify functions. + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * otherwise returns an error code that can be passed to ldapu_err2string. + */ +#define ldapu_set_cert_verifyfn (*__ldapu_table->f_ldapu_set_cert_verifyfn) + +/* + * ldapu_get_cert_verifyfn - + * This function can be used to get the cert verify function for the given + * issuer (CA). This function can return NULL when there is no applicable + * verify function. + * Parameters: + * issuerDN - DN of the cert issuer for which the verify function is to + * be retrieved. If this is NULL, default verify function + * is returned. + * + * Return Value: + * The verify function set for the issuer is returned. If the issuerDN is + * NULL or if no specific verify function has been set for the issuer, the + * default verify function is returned. This function can return NULL when + * there is no applicable verify function. + */ +#define ldapu_get_cert_verifyfn (*__ldapu_table->f_ldapu_get_cert_verifyfn) + + +/* + * ldapu_get_cert_subject_dn - + * This function can be used to get the subject DN from the cert. Free the + * subjectDN using 'free' after you are done using it. + * Parameters: + * cert - cert from which the DN is to be extracted. + * subjectDN - subjectDN extracted from the cert. Free it using 'free' + * after it is no longer required. + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * otherwise returns an error code that can be passed to ldapu_err2string. + */ +#define ldapu_get_cert_subject_dn (*__ldapu_table->f_ldapu_get_cert_subject_dn) + + +/* + * ldapu_get_cert_issuer_dn - + * This function can be used to get the issuer DN from the cert. Free the + * issuerDN using 'free' after you are done using it. + * Parameters: + * cert - cert from which the DN is to be extracted. + * issuerDN - issuerDN extracted from the cert. Free it using 'free' + * after it is no longer required. + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * otherwise returns an error code that can be passed to ldapu_err2string. + */ +#define ldapu_get_cert_issuer_dn (*__ldapu_table->f_ldapu_get_cert_issuer_dn) + + +/* + * ldapu_get_cert_ava_val - + * This function can be used to get value of the given attribute from either + * the subject DN or the issuer DN from the cert. + * Parameters: + * cert - cert from which the values are to be extracted. + * which_dn - Should be either LDAPU_ISSUER_DN or LDAPU_SUBJECT_DN. + * attr - Should be one of "CN", "OU", "O", "C", "UID", "MAIL", + * "E", "L", and "ST". + * val - An array of attribute values extracted from the cert. + * There could be multiple values. The last entry in the + * array is NULL. You must free this array of strings after + * you are done with it (using the function + * ldapu_free_cert_ava_val). 'val' is initialized to NULL if + * there is an error. + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * otherwise returns an error code that can be passed to ldapu_err2string. + */ +#define ldapu_get_cert_ava_val (*__ldapu_table->f_ldapu_get_cert_ava_val) + + +/* + * ldapu_free_cert_ava_val - + * This function can be used to free the array returned by the + * ldapu_get_cert_ava_val function. + * Parameters: + * val - An array of attribute values returned by + * ldapu_get_cert_ava_val. + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * otherwise returns an error code that can be passed to ldapu_err2string. + */ +#define ldapu_free_cert_ava_val (*__ldapu_table->f_ldapu_free_cert_ava_val) + + +/* + * ldapu_get_cert_der - + * This function can be used to get the original DER encoded cert for the + * given cert. + * Parameters: + * cert - cert from which the original DER is to be extracted. + * derCert - the original DER encoded cert + * len - length of derCert + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * otherwise returns an error code that can be passed to ldapu_err2string. + */ +#define ldapu_get_cert_der (*__ldapu_table->f_ldapu_get_cert_der) + + +/* + * ldapu_issuer_certinfo - + * This function can be used to get the handle on the internal structure for + * the given issuer. This handle can be passed to ldapu_certmap_info_attrval + * to get configuration attribute values for the issuer. + * Parameters: + * issuerDN - DN of the issuer for whom the handle on internal structure + * is requested. If issuerDN is NULL, the handle to the + * default configuration information is returned. + * certmap_info - This structure contains information about the + * configuration parameters for the cert's issuer (CA). + * This structure can be passed to the function + * ldapu_certmap_info_attrval to get value for a particular + * configuration attribute (or a property). + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * otherwise returns an error code that can be passed to ldapu_err2string. + * CAUTION: DON'T FREE THE 'certmap_info' STRUCTURE. + */ +#define ldapu_issuer_certinfo (*__ldapu_table->f_ldapu_issuer_certinfo) + + +/* + * ldapu_certmap_info_attrval - + * This function can be used to get values for the given attribute/property + * from the given certmap_info. You can get handle on the certmap_info by + * calling the ldapu_issuer_certinfo function. Free the 'val' using 'free' + * after it is no longer required. + * Parameters: + * certmap_info - This structure contains information about the + * configuration parameters for the cert's issuer (CA). + * attr - name of the attribute/property for which the value is to + * be returned. The attribute can be one of the attributes + * listed above (LDAPU_ATTR_XYZ). User defined attributes + * can also be used. + * val - Value of the 'attr' from the 'certmap_info'. + * + * Return Value: + * return LDAPU_SUCCESS upon successful completion + * otherwise returns an error code that can be passed to ldapu_err2string. + */ +#define ldapu_certmap_info_attrval (*__ldapu_table->f_ldapu_certmap_info_attrval) + + +/* + * ldapu_err2string - + * This function can be used to print any of the ldaputil or LDAP error + * code. + * Parameters: + * err - error code to be converted to printable string. + * + * Return Value: + * Printable representation of the given error code. + */ +#define ldapu_err2string (*__ldapu_table->f_ldapu_err2string) + +/* + * ldapu_free - + * This function should be used to free the memory allocated by + * ldapu_* functions if the ldapu_* function doesn't have a corresponding + * 'free' function. Use this function for free'ing the memory allocated by + * the following functions: + * ldapu_get_cert_subject_dn + * ldapu_get_cert_issuer_dn + * ldapu_get_cert_der + * ldapu_certmap_info_attrval + * To free memory allocated by ldapu_get_cert_ava_val, use + * ldapu_free_cert_ava_val. Do not free the certmap_info pointer returned by + * ldapu_issuer_certinfo. + * Parameters: + * ptr - pointer returned by ldapu_get_cert_* functions. + */ +#define ldapu_free (*__ldapu_table->f_ldapu_free) + +/* + * ldapu_malloc - + * This function is a cover function for the 'malloc' system call. On NT, it + * is best to alloc & free the memory in the same DLL. + * Parameters: + * size - size of the memory to be allocated + * Return Value: + * same as 'malloc' -- pointer to the allocated memory or NULL on failure. + */ +#define ldapu_malloc (*__ldapu_table->f_ldapu_malloc) + +/* + * ldapu_strdup - + * This function is a cover function for the 'strdup' system call. On NT, it + * is best to alloc & free the memory in the same DLL. + * Parameters: + * ptr - Pointer to the string to be copied + * Return Value: + * same as 'strdup' -- pointer to the copied string or NULL on failure. + */ +#define ldapu_strdup (*__ldapu_table->f_ldapu_strdup) + + +#endif /* !INTLDAPU */ + +#endif /* _PUBLIC_CERTMAP_H */ diff --git a/include/ldaputil/init.h b/include/ldaputil/init.h new file mode 100644 index 0000000..21de2ca --- /dev/null +++ b/include/ldaputil/init.h @@ -0,0 +1,31 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef _LDAPU_INIT_H +#define _LDAPU_INIT_H + +#ifdef __cplusplus +extern "C" { +#endif + +NSAPI_PUBLIC extern int ldaputil_init (const char *config_file, + const char *dllname, + const char *serv_root, + const char *serv_type, + const char *serv_id); + +#ifdef __cplusplus +} +#endif + +#endif /* _LDAPU_INIT_H */ diff --git a/include/ldaputil/ldapauth.h b/include/ldaputil/ldapauth.h new file mode 100644 index 0000000..7850ad2 --- /dev/null +++ b/include/ldaputil/ldapauth.h @@ -0,0 +1,40 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + + +#ifndef LDAPU_AUTH_H +#define LDAPU_AUTH_H + +#include + +#ifndef NSAPI_PUBLIC +#define NSAPI_PUBLIC +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +extern int ldapu_find (LDAP *ld, const char *base, int scope, + const char *filter, const char **attrs, + int attrsonly, LDAPMessage **res); + +int ldapu_find_entire_tree (LDAP *ld, int scope, + const char *filter, const char **attrs, + int attrsonly, LDAPMessage ***res); + +#ifdef __cplusplus +} +#endif + +#endif /* LDAPU_AUTH_H */ diff --git a/include/ldaputil/ldaputil.h b/include/ldaputil/ldaputil.h new file mode 100644 index 0000000..23fa3a0 --- /dev/null +++ b/include/ldaputil/ldaputil.h @@ -0,0 +1,138 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef _LDAPU_LDAPUTIL_H +#define _LDAPU_LDAPUTIL_H + +#include +#include + +typedef struct ldapu_list_node { + void *info; /* pointer to the corresponding info */ + struct ldapu_list_node *next; /* pointer to the next node */ + struct ldapu_list_node *prev; /* pointer to the prev node */ +} LDAPUListNode_t; + +typedef struct ldapu_list { + LDAPUListNode_t *head; + LDAPUListNode_t *tail; +} LDAPUList_t; + +typedef struct { + char *prop; /* property name */ + char *val; /* value -- only char* supported for now */ +} LDAPUPropVal_t; + +typedef LDAPUList_t LDAPUPropValList_t; + +enum { + COMPS_COMMENTED_OUT, + COMPS_EMPTY, + COMPS_HAS_ATTRS +}; + +typedef struct { + char *issuerName; /* issuer (symbolic/short) name */ + char *issuerDN; /* cert issuer's DN */ + LDAPUPropValList_t *propval; /* pointer to the prop-val pairs list */ + CertMapFn_t mapfn; /* cert to ldapdn & filter mapping func */ + CertVerifyFn_t verifyfn; /* verify cert function */ + CertSearchFn_t searchfn; /* search ldap entry function */ + long dncomps; /* bitmask: components to form ldap dn */ + long filtercomps; /* components used to form ldap filter */ + int verifyCert; /* Verify the cert? */ + char *searchAttr; /* LDAP attr used by the search fn */ + int dncompsState; /* Empty, commented out, or attr names */ + int filtercompsState; /* Empty, commented out, or attr names */ +} LDAPUCertMapInfo_t; + +typedef LDAPUList_t LDAPUCertMapListInfo_t; + +typedef void * (*LDAPUListNodeFn_t)(void *info, void *arg); + +#ifdef __cplusplus +extern "C" { +#endif + +extern int certmap_read_default_certinfo (const char *file); + +extern int certmap_read_certconfig_file (const char *file); + +extern void ldapu_certinfo_free (void *certmap_info); + +extern void ldapu_certmap_listinfo_free (void *certmap_listinfo); + +extern void ldapu_propval_list_free (void *propval_list); + +NSAPI_PUBLIC extern int ldaputil_exit (); + +NSAPI_PUBLIC extern int ldapu_cert_to_user (void *cert, LDAP *ld, + const char *basedn, + LDAPMessage **res, + char **user); + +NSAPI_PUBLIC extern int ldapu_certmap_init (const char *config_file, + const char *libname, + LDAPUCertMapListInfo_t **certmap_list, + LDAPUCertMapInfo_t + **certmap_default); + +NSAPI_PUBLIC extern int ldapu_list_alloc (LDAPUList_t **list); +NSAPI_PUBLIC extern int ldapu_propval_alloc (const char *prop, const char *val, + LDAPUPropVal_t **propval); +NSAPI_PUBLIC extern int ldapu_list_add_info (LDAPUList_t *list, void *info); + +#ifndef DONT_USE_LDAP_SSL +#define USE_LDAP_SSL +#endif + +#ifndef LDAP_CALL +#define LDAP_CALL +#endif + +#ifndef LDAP_CALLBACK +#define LDAP_CALLBACK +#endif + +typedef struct { +#ifdef USE_LDAP_SSL + LDAP* (LDAP_CALL LDAP_CALLBACK *ldapuV_ssl_init) ( const char*, int, int ); +#else + LDAP* (LDAP_CALL LDAP_CALLBACK *ldapuV_init) ( const char*, int ); +#endif + int (LDAP_CALL LDAP_CALLBACK *ldapuV_set_option) ( LDAP*, int, const void* ); + int (LDAP_CALL LDAP_CALLBACK *ldapuV_simple_bind_s) ( LDAP*, const char*, const char* ); + int (LDAP_CALL LDAP_CALLBACK *ldapuV_unbind) ( LDAP* ); + int (LDAP_CALL LDAP_CALLBACK *ldapuV_search_s) ( LDAP*, const char*, int, const char*, char**, int, LDAPMessage** ); + int (LDAP_CALL LDAP_CALLBACK *ldapuV_count_entries) ( LDAP*, LDAPMessage* ); + LDAPMessage*(LDAP_CALL LDAP_CALLBACK *ldapuV_first_entry) ( LDAP*, LDAPMessage* ); + LDAPMessage*(LDAP_CALL LDAP_CALLBACK *ldapuV_next_entry) ( LDAP*, LDAPMessage* ); + int (LDAP_CALL LDAP_CALLBACK *ldapuV_msgfree) ( LDAP*, LDAPMessage* ); + char* (LDAP_CALL LDAP_CALLBACK *ldapuV_get_dn) ( LDAP*, LDAPMessage* ); + void (LDAP_CALL LDAP_CALLBACK *ldapuV_memfree) ( LDAP*, void* ); + char* (LDAP_CALL LDAP_CALLBACK *ldapuV_first_attribute) ( LDAP*, LDAPMessage*, BerElement** ); + char* (LDAP_CALL LDAP_CALLBACK *ldapuV_next_attribute) ( LDAP*, LDAPMessage*, BerElement* ); + void (LDAP_CALL LDAP_CALLBACK *ldapuV_ber_free) ( LDAP*, BerElement*, int ); + char** (LDAP_CALL LDAP_CALLBACK *ldapuV_get_values) ( LDAP*, LDAPMessage*, const char* ); + void (LDAP_CALL LDAP_CALLBACK *ldapuV_value_free) ( LDAP*, char** ); + struct berval**(LDAP_CALL LDAP_CALLBACK *ldapuV_get_values_len)( LDAP*, LDAPMessage*, const char* ); + void (LDAP_CALL LDAP_CALLBACK *ldapuV_value_free_len)( LDAP*, struct berval** ); +} LDAPUVTable_t; + +NSAPI_PUBLIC extern void ldapu_VTable_set (LDAPUVTable_t*); + +#ifdef __cplusplus +} +#endif + +#endif /* _LDAPU_LDAPUTIL_H */ diff --git a/include/libaccess/acl.h b/include/libaccess/acl.h new file mode 100644 index 0000000..b962f0a --- /dev/null +++ b/include/libaccess/acl.h @@ -0,0 +1,48 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef ACL_HEADER +#define ACL_HEADER + +#ifndef NOINTNSACL +#define INTNSACL +#endif /* NOINTNSACL */ + +#include +#include +#include +#include + +#ifndef FALSE +#define FALSE 0 +#endif +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef PUBLIC_NSACL_ACLAPI_H +#include "public/nsacl/aclapi.h" +#endif /* !PUBLIC_NSACL_ACLAPI_H */ + +#ifdef INTNSACL + +NSPR_BEGIN_EXTERN_C + +extern const char *generic_rights[]; +extern const char *http_generic[]; + +NSPR_END_EXTERN_C + +#endif /* INTNSACL */ + +#endif diff --git a/include/libaccess/aclerror.h b/include/libaccess/aclerror.h new file mode 100644 index 0000000..372e9a9 --- /dev/null +++ b/include/libaccess/aclerror.h @@ -0,0 +1,306 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef __aclerror_h +#define __aclerror_h + +/* ACL facility name string (in aclbuild.c) */ +NSPR_BEGIN_EXTERN_C +extern const char * ACL_Program; +NSPR_END_EXTERN_C + +/* Define error identifiers */ + +/* Errors generated in aclparse.c */ + +/* aclAuthListParse() */ +#define ACLERR1000 1000 /* dynamic memory shortage */ + +/* aclAuthHostsParse() */ +#define ACLERR1100 1100 /* unsupported list of host lists */ +#define ACLERR1120 1120 /* host list name not found where expected */ +#define ACLERR1140 1140 /* undefined host list name */ +#define ACLERR1160 1160 /* *unused* */ +#define ACLERR1180 1180 /* error adding IP filter entry */ +#define ACLERR1200 1200 /* error adding DNS filter entry */ +#define ACLERR1220 1220 /* ")" missing */ + +/* aclAuthUsersParse() */ +#define ACLERR1300 1300 /* *unused* */ +#define ACLERR1320 1320 /* *unused* */ +#define ACLERR1340 1340 /* *unused* */ +#define ACLERR1360 1360 /* undefined user or group name */ +#define ACLERR1380 1380 /* duplicate user or group name */ +#define ACLERR1400 1400 /* ")" missing */ +#define ACLERR1420 1420 /* empty auth-user-elem */ +#define ACLERR1440 1440 /* duplicate or conflicting use of "all" */ +#define ACLERR1460 1460 /* duplicate or conflicting use of "any" */ +#define ACLERR1480 1480 /* conflicting use of "all" or "any" */ +#define ACLERR1500 1500 /* insufficient dynamic memory */ +#define ACLERR1520 1520 /* insufficient dynamic memory */ + +/* aclDirectivesParse() */ +#define ACLERR1600 1600 /* dir-access missing */ +#define ACLERR1620 1620 /* invalid dir-access specification */ +#define ACLERR1640 1640 /* error adding ACD_AUTH directive to ACL */ +#define ACLERR1650 1650 /* error adding directive to ACL */ +#define ACLERR1660 1660 /* insufficient dynamic memory */ +#define ACLERR1680 1680 /* insufficient dynamic memory */ +#define ACLERR1685 1685 /* insufficient dynamic memory */ +#define ACLERR1690 1690 /* error adding directive to ACL */ +#define ACLERR1695 1695 /* error in "execute" directive */ + +/* aclACLParse() */ +#define ACLERR1700 1700 /* ACL statement missing */ +#define ACLERR1720 1720 /* ACL name missing */ +#define ACLERR1740 1740 /* opening "{" missing */ +#define ACLERR1760 1760 /* closing "}" missing */ +#define ACLERR1780 1780 /* unrecognized ACL statement */ + +/* aclFileOpen() */ +#define ACLERR1900 1900 /* file open error */ +#define ACLERR1920 1920 /* memory shortage for ACLFile_t */ +#define ACLERR1940 1940 /* memory shortage for token */ +#define ACLERR1960 1960 /* memory shortage for LEX stream */ + +/* aclGetDNSString() */ +#define ACLERR2100 2100 /* */ +#define ACLERR2120 2120 /* */ +#define ACLERR2140 2140 /* */ + +/* aclGetIPAddr() */ +#define ACLERR2200 2200 /* */ +#define ACLERR2220 2220 /* */ +#define ACLERR2240 2240 /* */ +#define ACLERR2260 2260 /* */ +#define ACLERR2280 2280 /* */ +#define ACLERR2300 2300 /* */ +#define ACLERR2320 2320 /* */ + +/* aclGetToken() */ +#define ACLERR2400 2400 /* aclGetToken() parse error */ + +/* aclParseInit() */ + +/* aclRealmSpecParse() */ +#define ACLERR2500 2500 /* missing realm name */ +#define ACLERR2520 2520 /* undefined realm name */ +#define ACLERR2540 2540 /* insufficient dynamic memory */ +#define ACLERR2560 2560 /* missing realm directive */ +#define ACLERR2570 2570 /* missing database filespec */ +#define ACLERR2580 2580 /* missing authentication method name */ +#define ACLERR2600 2600 /* unknown authentication method name */ +#define ACLERR2605 2605 /* realm prompt string missing */ +#define ACLERR2610 2610 /* unknown realm directive */ +#define ACLERR2620 2620 /* missing "}" */ + +/* aclRightsParse() */ +#define ACLERR2700 2700 /* missing rights list element */ +#define ACLERR2720 2720 /* missing rights list name */ +#define ACLERR2740 2740 /* undefined rights list name */ +#define ACLERR2760 2760 /* insufficient dynamic memory */ +#define ACLERR2780 2780 /* insufficient dynamic memory */ +#define ACLERR2800 2800 /* error creating access right definition */ +#define ACLERR2820 2820 /* insufficient dynamic memory */ +#define ACLERR2840 2840 /* missing ")" */ + +/* aclGetFileSpec() */ +#define ACLERR2900 2900 /* skip over whitespace failed */ +#define ACLERR2920 2920 /* scan over filename failed */ +#define ACLERR2940 2940 /* missing filename */ + +/* aclStringOpen() */ +#define ACLERR5000 5000 /* memory shortage for ACLFile_t */ +#define ACLERR5020 5020 /* memory shortage for token */ +#define ACLERR5040 5040 /* memory shortage for LEX stream */ + +/* Errors generated in aclbuild.c */ + +/* accCreate() */ +#define ACLERR3000 3000 /* insufficient dynamic memory */ +#define ACLERR3020 3020 /* insufficient dynamic memory */ + +/* accFileRead() */ +#define ACLERR3100 3100 /* error initializing ACL parser */ +#define ACLERR3120 3120 /* error creating ACL symbol table */ + +/* aclCreate() */ +#define ACLERR3200 3200 /* insufficient dynamic memory */ +#define ACLERR3220 3220 /* duplicate ACL name */ + +/* aclAuthNameAdd() */ +#define ACLERR3400 3400 /* realm missing for user/group name */ +#define ACLERR3420 3420 /* error opening authentication DB */ +#define ACLERR3440 3440 /* error finding name in DB */ +#define ACLERR3460 3460 /* insufficient dynamic memory */ + +/* aclRightDef() */ +#define ACLERR3600 3600 /* insufficient dynamic memory */ +#define ACLERR3620 3620 /* add right to symbol table failed */ + +/* ACL_ListPostParseForAuth() */ +#define ACLERR3800 3800 /* Undefined method/database */ +#define ACLERR3810 3810 /* insufficient dynamic memory */ + +/* Register.cpp */ +#define ACLERR3900 3900 /* Duplicate LAS registered */ + +/* ACL_EvalBuildContext */ +#define ACLERR4000 4000 /* Unable to create context hash */ +#define ACLERR4010 4010 /* Unable to alloc cache structure */ +#define ACLERR4020 4020 /* Unable to alloc ACE entry */ +#define ACLERR4030 4030 /* Unable to alloc ACE entry */ +#define ACLERR4040 4040 /* Unable to alloc Auth Ptr Array */ +#define ACLERR4050 4050 /* Unable to alloc Auth Ptr Array */ + +/* ACL_EvalTestRights */ +#define ACLERR4100 4100 /* Interim absolute, non-allow value */ +#define ACLERR4110 4110 /* BuildContext call failed */ + +/* ACL_ModuleRegister */ +#define ACLERR4200 4200 /* module name missing */ +#define ACLERR4210 4210 /* module registration call failed */ + +/* ACL_GetAttribute */ +#define ACLERR4300 4300 /* Couldn't determine method */ +#define ACLERR4310 4310 /* Couldn't locate Getter */ +#define ACLERR4320 4320 /* Couldn't Set Attr */ +#define ACLERR4330 4330 /* Couldn't Get Attr */ +#define ACLERR4340 4340 /* All getters declined */ +#define ACLERR4350 4350 /* All getters declined */ +#define ACLERR4360 4360 /* All getters declined */ +#define ACLERR4370 4370 /* All getters declined */ +#define ACLERR4380 4380 /* Couldn't determine dbtype */ + +/* reg_dbname_internal */ +#define ACLERR4400 4400 /* dbtype not defined yet */ +#define ACLERR4410 4410 /* dbtype not defined yet */ +#define ACLERR4420 4420 /* out of memory */ + +/* ACL_DatabaseRegister */ +#define ACLERR4500 4500 /* database name is missing */ + +/* LASDnsBuild */ +#define ACLERR4700 4700 /* Cannot allocatae hash */ +#define ACLERR4710 4710 /* Cannot add token to hash */ +#define ACLERR4720 4720 /* Cannot add token to hash */ +#define ACLERR4730 4730 /* Cannot add token to hash */ +#define ACLERR4740 4740 /* Cannot add token to hash */ +#define ACLERR4750 4750 /* Cannot add token to hash */ +#define ACLERR4760 4760 /* Cannot add token to hash */ +#define ACLERR4770 4770 /* Invalid attribute pattern */ + +/* LASDnsEval */ +#define ACLERR4800 4800 /* Wrong attribute name */ +#define ACLERR4810 4810 /* Illegal comparator */ +#define ACLERR4820 4820 /* Cannot allocate context struct */ +#define ACLERR4830 4830 /* Cannot get DNS attribute */ + +/* LASGroupEval */ +#define ACLERR4900 4900 /* wrong attribute */ +#define ACLERR4910 4910 /* bad comparator */ +#define ACLERR4920 4920 /* unable to get database name */ + +/* LASIpTreeAllocNode */ +#define ACLERR5000 5000 /* Cannot allocate IP tree */ + +/* LASIpAddPattern */ +#define ACLERR5100 5100 /* Cannot allocate IP tree node */ +#define ACLERR5110 5110 /* Cannot allocate IP tree node */ + +/* LASIpEval */ +#define ACLERR5200 5200 /* Wrong attribute */ +#define ACLERR5210 5210 /* Bad comparator */ +#define ACLERR5220 5220 /* Cannot get session pointer */ +#define ACLERR5230 5230 /* Cannot allocate context */ +#define ACLERR5240 5240 /* Tested 32 bits without conclusion */ + +/* LASProgramEval */ +#define ACLERR5300 5300 /* Wrong attribute */ +#define ACLERR5310 5310 /* Bad comparator */ +#define ACLERR5320 5320 /* Can't get request pointer */ +#define ACLERR5330 5330 /* Invalid program expression */ +#define ACLERR5340 5340 /* Rejecting Request */ + +/* LASDayOfWeekEval */ +#define ACLERR5400 5400 /* wrong attribute */ +#define ACLERR5410 5410 /* bad comparator */ + +/* LASTimeOfDayEval */ +#define ACLERR5600 5600 /* wrong attribute */ +#define ACLERR5610 5610 /* bad comparator */ + +/* LASUserEval */ +#define ACLERR5700 5700 /* wrong attribute */ +#define ACLERR5710 5710 /* bad comparator */ +#define ACLERR5720 5720 /* Out of memory */ + +/* ldapacl.cpp */ +#define ACLERR5800 5800 /* missing the database url */ +#define ACLERR5810 5810 /* missing the database name */ +#define ACLERR5820 5820 /* error parsing the db url */ +#define ACLERR5830 5830 /* unable to get db name */ +#define ACLERR5840 5840 /* can't get parsed db name */ +#define ACLERR5850 5850 /* can't init ldap connection */ +#define ACLERR5860 5860 /* passwd check ldap error */ +#define ACLERR5870 5870 /* Out of memory */ +#define ACLERR5880 5880 /* User doesn't exist anymore */ +#define ACLERR5890 5890 /* PList error */ + +/* get_user_ismember_ldap */ +#define ACLERR5900 5900 /* Can't get db name */ +#define ACLERR5910 5910 /* Can't get parsed db name */ +#define ACLERR5920 5920 /* Out of memory */ +#define ACLERR5930 5930 /* Can't init ldap connection */ +#define ACLERR5940 5940 /* Group doesn't exist */ +#define ACLERR5950 5950 /* LDAP error */ + +/* ACL_LDAPDatabaseHandle */ +#define ACLERR6000 6000 /* Not a registered db */ +#define ACLERR6010 6010 /* Not an LDAP db */ +#define ACLERR6020 6020 /* Out of memory */ +#define ACLERR6030 6030 /* Can't init ldap connection */ +#define ACLERR6040 6040 /* Can't bind to ldap server */ + + + +/* Define error return codes */ +#define ACLERRNOMEM -1 /* insufficient dynamic memory */ +#define ACLERROPEN -2 /* file open error */ +#define ACLERRDUPSYM -3 /* duplicate symbol */ +#define ACLERRSYNTAX -4 /* syntax error */ +#define ACLERRUNDEF -5 /* undefined symbol */ +#define ACLERRADB -6 /* authentication DB access error */ +#define ACLERRPARSE -7 /* ACL parsing error */ +#define ACLERRNORLM -8 /* missing authentication realm */ +#define ACLERRIO -9 /* IO error */ +#define ACLERRINTERNAL -10 /* internal processing error */ +/* #define ACLERRFAIL -11 */ /* defined in include/public/nsacl/acldef.h */ +#define ACLERRINVAL -12 /* invalid argument */ +#define ACLERRCONFIG -13 /* auth realms don't math acl */ + +#include "nserror.h" + +#ifndef PUBLIC_NSACL_ACLDEF_H +#include "public/nsacl/acldef.h" +#endif /* !PUBLIC_NSACL_ACLDEF_H */ + +NSPR_BEGIN_EXTERN_C + +/* Functions in aclerror.c */ +extern void aclErrorFmt(NSErr_t * errp, + char * msgbuf, int maxlen, int maxdepth); + +NSPR_END_EXTERN_C + +#endif /* __aclerror_h */ diff --git a/include/libaccess/acleval.h b/include/libaccess/acleval.h new file mode 100644 index 0000000..bf29fc7 --- /dev/null +++ b/include/libaccess/acleval.h @@ -0,0 +1,44 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef __acleval_h +#define __acleval_h + +/* + * Description (acleval.h) + * + * This file defines the interface to the ACL evaluation module. + */ + +#include "nserror.h" +#include "nsauth.h" +#include "aclstruct.h" + +/* Define values returned by lookup routines */ +#define ACL_NOMATCH 0 /* no match */ +#define ACL_IPMATCH 0x1 /* IP address match */ +#define ACL_DNMATCH 0x2 /* DNS name match */ +#define ACL_USMATCH 0x4 /* user name match */ +#define ACL_GRMATCH 0x8 /* user is member of group */ + +NSPR_BEGIN_EXTERN_C + +/* Functions in acleval.c */ +extern int aclDNSLookup(DNSFilter_t * dnf, const char * dnsspec, int fqdn, const char **match); +extern int aclIPLookup(IPFilter_t * ipf, IPAddr_t ipaddr, void **match); +extern int aclUserLookup(UidUser_t * uup, UserObj_t * uoptr); +extern int aclEvaluate(ACL_t * acl, USI_t arid, ClAuth_t * clauth, int * padn); + +NSPR_END_EXTERN_C + +#endif /* __acleval_h */ diff --git a/include/libaccess/aclglobal.h b/include/libaccess/aclglobal.h new file mode 100644 index 0000000..364afe1 --- /dev/null +++ b/include/libaccess/aclglobal.h @@ -0,0 +1,60 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +/* +** Header file containing global data elements. These are duplicated +** when a cache flush is done. +*/ + +#include + +struct ACLGlobal_s { + ACLListHandle_t *masterlist; + pool_handle_t *pool; /* Deallocate at the start of cache flush */ + pool_handle_t *databasepool; + pool_handle_t *methodpool; + PRHashTable *urihash; + PRHashTable *urigethash; + PRHashTable *listhash; + PRHashTable *evalhash; + PRHashTable *flushhash; + PRHashTable *methodhash; + PRHashTable *dbtypehash; + PRHashTable *dbnamehash; + PRHashTable *attrgetterhash; + PRHashTable *userLdbHash; /* user's LDAP handle hash */ +}; + +typedef struct ACLGlobal_s ACLGlobal_t; +typedef struct ACLGlobal_s *ACLGlobal_p; + +#define acl_uri_hash_pool ACLGlobal->pool +#define acl_uri_hash ACLGlobal->urihash +#define acl_uri_get_hash ACLGlobal->urigethash +#define ACLListHash ACLGlobal->listhash +#define ACLLasEvalHash ACLGlobal->evalhash +#define ACLLasFlushHash ACLGlobal->flushhash +#define ACLMethodHash ACLGlobal->methodhash +#define ACLDbTypeHash ACLGlobal->dbtypehash +#define ACLDbNameHash ACLGlobal->dbnamehash +#define ACLAttrGetterHash ACLGlobal->attrgetterhash +#define ACLUserLdbHash ACLGlobal->userLdbHash +#define ACL_DATABASE_POOL ACLGlobal->databasepool +#define ACL_METHOD_POOL ACLGlobal->methodpool + +NSPR_BEGIN_EXTERN_C + +extern ACLGlobal_p ACLGlobal; +extern ACLGlobal_p oldACLGlobal; + +NSPR_END_EXTERN_C diff --git a/include/libaccess/aclproto.h b/include/libaccess/aclproto.h new file mode 100644 index 0000000..3ff89f5 --- /dev/null +++ b/include/libaccess/aclproto.h @@ -0,0 +1,153 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef ACL_PROTO_HEADER +#define ACL_PROTO_HEADER + +#ifndef NOINTNSACL +#define INTNSACL +#endif /* !NOINTNSACL */ + +#ifndef PUBLIC_NSACL_ACLDEF_H +#include "public/nsacl/acldef.h" +#endif /* !PUBLIC_NSACL_ACLDEF_H */ + +#ifdef INTNSACL + +NSPR_BEGIN_EXTERN_C + +/********************************************************************* + * ACL language and file interfaces + *********************************************************************/ +NSAPI_PUBLIC ACLListHandle_t * ACL_ParseString(NSErr_t *errp, char *buffer); + +/********************************************************************* + * ACL Expression construction interfaces + *********************************************************************/ +NSAPI_PUBLIC ACLExprHandle_t *ACL_ExprNew(const ACLExprType_t expr_type); +NSAPI_PUBLIC void ACL_ExprDestroy(ACLExprHandle_t *expr); +NSAPI_PUBLIC int ACL_ExprSetPFlags(NSErr_t *errp, ACLExprHandle_t *expr, PFlags_t flags); +NSAPI_PUBLIC int ACL_ExprClearPFlags(NSErr_t *errp, ACLExprHandle_t *expr); +NSAPI_PUBLIC int ACL_ExprTerm(NSErr_t *errp, ACLExprHandle_t *acl_expr, const char *attr_name, CmpOp_t cmp, char *attr_pattern); +NSAPI_PUBLIC int ACL_ExprNot(NSErr_t *errp, ACLExprHandle_t *acl_expr); +NSAPI_PUBLIC int ACL_ExprAnd(NSErr_t *errp, ACLExprHandle_t *acl_expr); +NSAPI_PUBLIC int ACL_ExprOr(NSErr_t *errp, ACLExprHandle_t *acl_expr); +NSAPI_PUBLIC int ACL_ExprAddAuthInfo(ACLExprHandle_t *expr, PList_t auth_info); +NSAPI_PUBLIC int ACL_ExprAddArg(NSErr_t *errp, ACLExprHandle_t *expr, const char *arg); +NSAPI_PUBLIC int ACL_ExprSetDenyWith(NSErr_t *errp, ACLExprHandle_t *expr, char *deny_type, char *deny_response); +NSAPI_PUBLIC int ACL_ExprGetDenyWith(NSErr_t *errp, ACLExprHandle_t *expr, char **deny_type, char **deny_response); + +/********************************************************************* + * ACL manipulation + *********************************************************************/ + +NSAPI_PUBLIC ACLHandle_t * ACL_AclNew(NSErr_t *errp, char *tag); +NSAPI_PUBLIC void ACL_AclDestroy(NSErr_t *errp, ACLHandle_t *acl); +NSAPI_PUBLIC int ACL_ExprAppend(NSErr_t *errp, ACLHandle_t *acl, ACLExprHandle_t *expr); +NSAPI_PUBLIC const char *ACL_AclGetTag(ACLHandle_t *acl); + +/********************************************************************* + * ACL list manipulation + *********************************************************************/ + +NSAPI_PUBLIC ACLListHandle_t * ACL_ListNew(NSErr_t *errp); +NSAPI_PUBLIC int ACL_ListConcat(NSErr_t *errp, ACLListHandle_t *acl_list1, ACLListHandle_t *acl_list2, int flags); +NSAPI_PUBLIC int ACL_ListAppend(NSErr_t *errp, ACLListHandle_t *acllist, ACLHandle_t *acl, int flags); +NSAPI_PUBLIC void ACL_ListDestroy(NSErr_t *errp, ACLListHandle_t *acllist); +NSAPI_PUBLIC ACLHandle_t * ACL_ListFind(NSErr_t *errp, ACLListHandle_t *acllist, char *aclname, int flags); +NSAPI_PUBLIC int ACL_ListAclDelete(NSErr_t *errp, ACLListHandle_t *acl_list, char *acl_name, int flags); +NSAPI_PUBLIC int ACL_ListGetNameList(NSErr_t *errp, ACLListHandle_t *acl_list, char ***name_list); +NSAPI_PUBLIC int ACL_NameListDestroy(NSErr_t *errp, char **name_list); +NSAPI_PUBLIC ACLHandle_t *ACL_ListGetFirst(ACLListHandle_t *acl_list, + ACLListEnum_t *acl_enum); +NSAPI_PUBLIC ACLHandle_t *ACL_ListGetNext(ACLListHandle_t *acl_list, + ACLListEnum_t *acl_enum); + +/* Only used for asserts. Probably shouldn't be publicly advertized */ +extern int ACL_AssertAcllist( ACLListHandle_t *acllist ); + +/* Need to be ACL_LIB_INTERNAL */ +NSAPI_PUBLIC int ACL_ListPostParseForAuth(NSErr_t *errp, ACLListHandle_t *acl_list); + +/********************************************************************* + * ACL evaluation + *********************************************************************/ + +NSAPI_PUBLIC int ACL_EvalTestRights(NSErr_t *errp, ACLEvalHandle_t *acleval, const char **rights, const char **map_generic, char **deny_type, char **deny_response, char **acl_tag, int *expr_num); +NSAPI_PUBLIC int ACL_CachableAclList(ACLListHandle_t *acllist); +NSAPI_PUBLIC ACLEvalHandle_t * ACL_EvalNew(NSErr_t *errp, pool_handle_t *pool); +NSAPI_PUBLIC void ACL_EvalDestroy(NSErr_t *errp, pool_handle_t *pool, ACLEvalHandle_t *acleval); +NSAPI_PUBLIC void ACL_EvalDestroyNoDecrement(NSErr_t *errp, pool_handle_t *pool, ACLEvalHandle_t *acleval); +NSAPI_PUBLIC int ACL_ListDecrement(NSErr_t *errp, ACLListHandle_t *acllist); +NSAPI_PUBLIC int ACL_EvalSetACL(NSErr_t *errp, ACLEvalHandle_t *acleval, ACLListHandle_t *acllist); +NSAPI_PUBLIC PList_t ACL_EvalGetSubject(NSErr_t *errp, ACLEvalHandle_t *acleval); +NSAPI_PUBLIC int ACL_EvalSetSubject(NSErr_t *errp, ACLEvalHandle_t *acleval, PList_t subject); +NSAPI_PUBLIC PList_t ACL_EvalGetResource(NSErr_t *errp, ACLEvalHandle_t *acleval); +NSAPI_PUBLIC int ACL_EvalSetResource(NSErr_t *errp, ACLEvalHandle_t *acleval, PList_t resource); + +/* + * The following entities are only meant to be called by whole server + * products that include libaccess. E.g. the HTTP server, the Directory + * server etc. They should not be called by ACL callers, LASs etc. + */ + +/********************************************************************* + * ACL misc routines + *********************************************************************/ + +NSAPI_PUBLIC int ACL_Init(void); +NSAPI_PUBLIC int ACL_InitPostMagnus(void); +NSAPI_PUBLIC int ACL_LateInitPostMagnus(void); +NSAPI_PUBLIC void ACL_ListHashUpdate(ACLListHandle_t **acllistp); + +NSAPI_PUBLIC int ACL_MethodNamesGet(NSErr_t *errp, char ***names, int *count); +NSAPI_PUBLIC int ACL_MethodNamesFree(NSErr_t *errp, char **names, int count); + +NSAPI_PUBLIC int ACL_DatabaseNamesGet(NSErr_t *errp, char ***names, int *count); +NSAPI_PUBLIC int ACL_DatabaseNamesFree(NSErr_t *errp, char **names, int count); + +NSAPI_PUBLIC int ACL_InitAttr2Index(void); +NSAPI_PUBLIC int ACL_Attr2Index(const char *attrname); +NSAPI_PUBLIC void ACL_Attr2IndexListDestroy(); +NSAPI_PUBLIC void ACL_AttrGetterHashDestroy(void); +NSAPI_PUBLIC void ACL_Destroy(void); +NSAPI_PUBLIC void ACL_DestroyPools(void); + +/********************************************************************* + * ACL cache and flush utility + *********************************************************************/ + +NSAPI_PUBLIC int ACL_CacheCheck(char *uri, ACLListHandle_t **acllist_p); +NSAPI_PUBLIC int ACL_CacheCheckGet(char *uri, ACLListHandle_t **acllist_p); +NSAPI_PUBLIC void ACL_CacheEnter(char *uri, ACLListHandle_t **acllist_p); +NSAPI_PUBLIC void ACL_CacheEnterGet(char *uri, ACLListHandle_t **acllist_p); +NSAPI_PUBLIC int ACL_ListHashCheck(ACLListHandle_t **acllist_p); +NSAPI_PUBLIC void ACL_ListHashEnter(ACLListHandle_t **acllist_p); +NSAPI_PUBLIC int ACL_CacheFlush(void); +NSAPI_PUBLIC void ACL_Restart(void *clntData); +NSAPI_PUBLIC void ACL_CritEnter(void); +NSAPI_PUBLIC void ACL_CritExit(void); + +/********************************************************************* + * ACL CGI routines + *********************************************************************/ + +NSAPI_PUBLIC void ACL_OutputSelector(char *name, char **item); + + +NSPR_END_EXTERN_C + +#endif /* INTNSACL */ + +#endif + diff --git a/include/libaccess/aclstruct.h b/include/libaccess/aclstruct.h new file mode 100644 index 0000000..a1dd40b --- /dev/null +++ b/include/libaccess/aclstruct.h @@ -0,0 +1,270 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef __aclstruct_h +#define __aclstruct_h + +/* + * Description (aclstruct.h) + * + * This file defines types and data structures used to construct + * representations of Access Control Lists (ACLs) in memory. + */ + +#include "base/systems.h" +#include "base/file.h" +#include "nsauth.h" /* authentication types */ +#include "symbols.h" /* typed symbol support */ +#include "ipfstruct.h" /* IP address filter structures */ +#include "dnfstruct.h" /* DNS name filter structures */ + + +NSPR_BEGIN_EXTERN_C + +/* Forward type definitions */ +typedef struct ACL_s ACL_t; + +/* + * Description (InetHost_t) + * + * This type defines a structure which represents a list of Internet + * hosts by IP address and netmask, or by fully or partially + * qualified DNS name. + */ + +typedef struct InetHost_s InetHost_t; +struct InetHost_s { + IPFilter_t inh_ipf; /* reference to IP filter */ + DNSFilter_t inh_dnf; /* reference to DNS filter */ +}; + +/* + * Description (HostSpec_t) + * + * This type describes a named list of hosts. + */ + +typedef struct HostSpec_s HostSpec_t; +struct HostSpec_s { + Symbol_t hs_sym; /* symbol name, type ACLSYMHOST */ + InetHost_t hs_host; /* host information */ +}; + +/* + * Description (UidUser_t) + * + * This type represents a list of users and groups using unique + * integer identifiers. + */ + +typedef struct UidUser_s UidUser_t; +struct UidUser_s { + USIList_t uu_user; /* list of user ids */ + USIList_t uu_group; /* list of group ids */ +}; + +/* + * Description (UserSpec_t) + * + * This type describes a named list of users and groups. + */ + +typedef struct UserSpec_s UserSpec_t; +struct UserSpec_s { + Symbol_t us_sym; /* list name, type ACLSYMUSER */ + int us_flags; /* bit flags */ +#define ACL_USALL 0x1 /* any authenticated user */ + + UidUser_t us_user; /* user list structure */ +}; + +/* + * Description (ACClients_t) + * + * This type defines the structure of action-specific information + * for access control directives with action codes ACD_ALLOW and + * ACD_DENY. These directives specify access control constraints + * on users/groups and hosts. + */ + +typedef struct ACClients_s ACClients_t; +struct ACClients_s { + ACClients_t * cl_next; /* list link */ + HostSpec_t * cl_host; /* host specification pointer */ + UserSpec_t * cl_user; /* user list pointer */ +}; + +/* + * Description (RealmSpec_t) + * + * This type describes a named realm. + */ + +typedef struct RealmSpec_s RealmSpec_t; +struct RealmSpec_s { + Symbol_t rs_sym; /* realm name, type ACLSYMREALM */ + Realm_t rs_realm; /* realm information */ +}; + +/* + * Description (ACAuth_t) + * + * This type defines the structure of action-specific information + * for an access control directive with action code ACD_AUTH, + * which specifies information about authentication requirements. + */ + +typedef struct ACAuth_s ACAuth_t; +struct ACAuth_s { + RealmSpec_t * au_realm; /* pointer to realm information */ +}; + +/* + * Description (ACDirective_t) + * + * This type defines a structure which represents an access control + * directive. Each directive specifies an access control action + * to be taken during ACL evaluation. The ACDirective_t structure + * begins an action-specific structure which contains the + * parameters for an action. + */ + +typedef struct ACDirective_s ACDirective_t; +struct ACDirective_s { + ACDirective_t * acd_next; /* next directive in ACL */ + short acd_action; /* directive action code */ + short acd_flags; /* action modifier flags */ + + /* Begin action-specific information */ + union { + ACClients_t * acu_cl; /* ACD_ALLOW, ACD_DENY */ + ACAuth_t acu_auth; /* ACD_AUTH */ + } acd_u; +}; + +#define acd_cl acd_u.acu_cl +#define acd_auth acd_u.acu_auth + +/* Define acd_action codes */ +#define ACD_ALLOW 1 /* allow access */ +#define ACD_DENY 2 /* deny access */ +#define ACD_AUTH 3 /* specify authentication realm */ +#define ACD_EXEC 4 /* execute (conditionally) */ + +/* Define acd_flags values */ +#define ACD_ACTION 0xf /* bits reserved for acd_action */ +#define ACD_FORCE 0x10 /* force of action */ +#define ACD_DEFAULT 0 /* default action */ +#define ACD_ALWAYS ACD_FORCE /* immediate action */ +#define ACD_EXALLOW 0x20 /* execute if allow */ +#define ACD_EXDENY 0x40 /* execute if deny */ +#define ACD_EXAUTH 0x80 /* execute if authenticate */ + +/* + * Description (RightDef_t) + * + * This type describes a named access right. Each access right has + * an associated unique integer id. A list of all access rights + * known in an ACL context is maintained, with its head in the + * ACContext_t structure. + */ + +typedef struct RightDef_s RightDef_t; +struct RightDef_s { + Symbol_t rd_sym; /* right name, type ACLSYMRIGHT */ + RightDef_t * rd_next; /* next on ACContext_t list */ + USI_t rd_id; /* unique id */ +}; + +/* + * Description (RightSpec_t) + * + * This type describes a named list of access rights. + */ + +typedef struct RightSpec_s RightSpec_t; +struct RightSpec_s { + Symbol_t rs_sym; /* list name, type ACLSYMRDEF */ + USIList_t rs_list; /* list of right ids */ +}; + +/* + * Description (ACContext_t) + * + * This type defines a structure that defines a context for a set + * of Access Control Lists. This includes references to an + * authentication database, if any, and a symbol table containing + * access right definitions. It also serves as a list head for the + * ACLs which are defined in the specified context. + */ + +typedef struct ACContext_s ACContext_t; +struct ACContext_s { + void * acc_stp; /* symbol table handle */ + ACL_t * acc_acls; /* list of ACLs */ + RightDef_t * acc_rights; /* list of access right definitions */ + int acc_refcnt; /* reference count */ +}; + +/* + * Description (ACL_t) + * + * This type defines the structure that represents an Access Control + * List (ACL). An ACL has a user-assigned name and an internally + * assigned identifier (which is an index in an object directory). + * It references a list of access rights which are to be allowed or + * denied, according to the ACL specifications. It references an + * ordered list of ACL directives, which specify who has and who does + * not have the associated access rights. + */ + +struct ACL_s { + Symbol_t acl_sym; /* ACL name, type ACLSYMACL */ + ACL_t * acl_next; /* next ACL on a list */ + ACContext_t * acl_acc; /* context for this ACL */ + USI_t acl_id; /* id of this ACL */ + int acl_refcnt; /* reference count */ + RightSpec_t * acl_rights; /* access rights list */ + ACDirective_t * acl_dirf; /* first directive pointer */ + ACDirective_t * acl_dirl; /* last directive pointer */ +}; + +/* Define symbol type codes */ +#define ACLSYMACL 0 /* ACL */ +#define ACLSYMRIGHT 1 /* access right */ +#define ACLSYMRDEF 2 /* access rights list */ +#define ACLSYMREALM 3 /* realm name */ +#define ACLSYMHOST 4 /* host specifications */ +#define ACLSYMUSER 5 /* user/group list */ + +/* + * Description (ACLFile_t) + * + * This type describes a structure containing information about + * an open ACL description file. + */ + +typedef struct ACLFile_s ACLFile_t; +struct ACLFile_s { + ACLFile_t * acf_next; /* list link */ + char * acf_filename; /* pointer to filename string */ + SYS_FILE acf_fd; /* file descriptor */ + int acf_flags; /* bit flags (unused) */ + int acf_lineno; /* current line number */ + void * acf_token; /* LEX token handle */ + int acf_ttype; /* current token type */ +}; + +NSPR_END_EXTERN_C + +#endif /* __aclstruct_h */ diff --git a/include/libaccess/attrec.h b/include/libaccess/attrec.h new file mode 100644 index 0000000..3a1d267 --- /dev/null +++ b/include/libaccess/attrec.h @@ -0,0 +1,165 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef __attrec_h +#define __attrec_h + +/* + * Description (attrec.h) + * + * This file describes the encoding and decoding of attribute + * records. Attribute records consist of a sequence of items + * of the form: + * + * + * + * The is an integer code which identifies a particular + * attribute. The is the integer length in bytes of + * the . The encoding of the contents is determined + * by the , and is application-specific. + * + * Primitive data types currently supported are unsigned + * integers (USI) and null-terminated strings (NTS). The + * encoding of USI values less than 128 is simply an octet + * containing the value. For values 128 or greater, the first + * octet is 0x80 plus the length of the value, in octets. + * This octet is followed by the indicated number of octets, + * containing the USI value, with the most significant bits in + * the first octet, and the least significant bits in the last + * octet. + * + * Examples of USI encoding: + * + * Value Encoding (each value is an octet) + * 4 0x04 + * 127 0x7f + * -1 (this is not a USI) + * 128 0x81 0x80 + * 1023 0x82 0x03 0xff + * + * The encoding of a null-terminated string (NTS) is simply the + * sequence of octets which comprise the string, including the + * terminating null (0x00) octet. The terminating null octet is + * the only null value in the string. The character set used to + * encode the other string octets is ASCII. + */ + +#include "usi.h" + +NSPR_BEGIN_EXTERN_C + +/* Define a type to reference an attribute record */ +typedef unsigned char * ATR_t; + +/* + * Description (USILENGTH) + * + * This macro returns the length of the USI encoding for a specified + * unsigned integer value. The length is the number of octets + * required. It will be greater than zero, and less than or equal + * to USIALLOC(). This is a partial inline optimization of + * USI_Length(). + */ + +#define USILENGTH(val) (((USI_t)(val) <= 0x7f) ? 1 : USI_Length((USI_t)(val))) + +/* + * Description (USIALLOC) + * + * This macro returns the maximum length of an unsigned integer + * encoding. + */ + +#define USIALLOC() (5) + +/* + * Description (USIENCODE) + * + * This macro encodes a USI value into a specified buffer. It + * returns a pointer to the first octet after the encoding. + * This is a partial inline optimization for USI_Encode(). + */ + +#define USIENCODE(cp, val) (((USI_t)(val) <= 0x7f) ? (*(cp) = (val), (cp)+1) \ + : USI_Encode((cp), (val))) + +/* + * Description (USIINSERT) + * + * This macro performs a variation of USIENCODE which always + * generates the maximum-sized USI encoding, i.e. the number of + * octets indicated by USIALLOC(). + */ + +#define USIINSERT(cp, val) USI_Insert((ATR_t)(cp), (USI_t)(val)) + +/* + * Description (USIDECODE) + * + * This macro decodes a USI value from a specified buffer. It + * returns a pointer to the first octet after the encoding. + * This is a partial inline optimization for USI_Decode(). + */ + +#define USIDECODE(cp, pval) \ + ((*(cp) & 0x80) ? USI_Decode((cp), (pval)) \ + : (((pval) ? (*(pval) = *(cp)) : 0), (cp)+1)) + +/* Define a type to reference a null-terminated string */ +typedef unsigned char * NTS_t; + +/* + * Decription (NTSLENGTH) + * + * Return the length, in octets, of a null-terminated string. + * It includes the terminating null octet. + */ + +#define NTSLENGTH(nts) ((nts) ? strlen((char *)(nts)) + 1 : 1) + +/* + * Description (NTSENCODE) + * + * This macro copies a null-terminated string to a specified + * attribute record buffer. It returns a pointer to the octet + * following the NTS in the buffer. + */ + +#define NTSENCODE(cp, nts) \ + ((ATR_t)memccpy((void *)(cp), \ + (void *)((nts) ? (NTS_t)(nts) : (NTS_t)""), \ + 0, NTSLENGTH(nts))) + +/* + * Description (NTSDECODE) + * + * This macro decodes a null-terminated string in a specified + * attribute record buffer into a dynamically allocated buffer. + * It returns a pointer to the first octet after the NTS in the + * attribute record buffer. + */ + +#define NTSDECODE(cp, pnts) NTS_Decode((cp), (pnts)) + +/* Functions in attrec.c */ +extern int NTS_Length(NTS_t ntsp); +extern ATR_t NTS_Decode(ATR_t cp, NTS_t * pnts); +extern ATR_t NTS_Encode(ATR_t cp, NTS_t nts); +extern ATR_t USI_Decode(ATR_t cp, USI_t * pval); +extern ATR_t USI_Encode(ATR_t cp, USI_t val); +extern ATR_t USI_Insert(ATR_t cp, USI_t val); +extern int USI_Length(USI_t val); + +NSPR_END_EXTERN_C + +#endif /* __attrec_h */ diff --git a/include/libaccess/authdb.h b/include/libaccess/authdb.h new file mode 100644 index 0000000..ed74cad --- /dev/null +++ b/include/libaccess/authdb.h @@ -0,0 +1,32 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef AUTHDB_H +#define AUTHDB_H + +#include +#include +#include + +#define URL_PREFIX_LDAP "ldap" +#define URL_PREFIX_LDAP_LEN 4 + +typedef struct { + char *dbname; + ACLDbType_t dbtype; + void *dbinfo; +} AuthdbInfo_t; + +extern int acl_num_databases(); + +#endif /* AUTHDB_H */ diff --git a/include/libaccess/dbtlibaccess.h b/include/libaccess/dbtlibaccess.h new file mode 100644 index 0000000..43e729c --- /dev/null +++ b/include/libaccess/dbtlibaccess.h @@ -0,0 +1,172 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + + +#define LIBRARY_NAME "libaccess" + +#ifdef RESOURCE_STR +static char dbtlibaccessid[] = "$DBT: libaccess referenced v1 $"; +#endif /* RESOURCE_STR */ + +#include "i18n.h" + +BEGIN_STR(libaccess) + ResDef( DBT_LibraryID_, -1, dbtlibaccessid )/* extracted from dbtlibaccess.h*/ + ResDef( DBT_basicNcsa_, 1, "basic-ncsa" )/*extracted from userauth.cpp*/ + ResDef( DBT_cannotOpenDatabaseS_, 2, "cannot open database %s" )/*extracted from userauth.cpp*/ + ResDef( DBT_basicNcsa_1, 3, "basic-ncsa" )/*extracted from userauth.cpp*/ + ResDef( DBT_userSPasswordDidNotMatchDatabase_, 4, "user %s password did not match database %s" )/*extracted from userauth.cpp*/ + ResDef( DBT_basicNcsa_2, 5, "basic-ncsa" )/*extracted from userauth.cpp*/ + ResDef( DBT_cannotOpenConnectionToLdapServer_, 6, "cannot open connection to LDAP server on %s:%d" )/*NOT USED - extracted from userauth.cpp*/ + ResDef( DBT_basicNcsa_3, 7, "basic-ncsa" )/*extracted from userauth.cpp*/ + ResDef( DBT_userSPasswordDidNotMatchLdapOnSD_, 8, "user %s password did not match LDAP on %s:%d" )/*NOT USED - extracted from userauth.cpp*/ + ResDef( DBT_aclState_, 9, "acl-state" )/*extracted from userauth.cpp*/ + ResDef( DBT_missingRealm_, 10, "missing realm" )/*extracted from userauth.cpp*/ + ResDef( DBT_unableToAllocateAclListHashN_, 11, "Unable to allocate ACL List Hash\n" )/*extracted from cache.cpp*/ + ResDef( DBT_aclevalbuildcontextUnableToPermM_, 12, "ACLEvalBuildContext unable to PERM_MALLOC cache structure\n" )/*extracted from eval.cpp*/ + ResDef( DBT_aclevalbuildcontextUnableToCreat_, 13, "ACLEvalBuildContext unable to create hash table\n" )/*extracted from eval.cpp*/ + ResDef( DBT_aclevalbuildcontextUnableToAlloc_, 14, "ACLEvalBuildContext unable to allocate ACE Entry\n" )/*extracted from eval.cpp*/ + ResDef( DBT_aclevalbuildcontextUnableToAlloc_1, 15, "ACLEvalBuildContext unable to allocate ACE entry\n" )/*extracted from eval.cpp*/ + ResDef( DBT_aclevalbuildcontextUnableToAlloc_2, 16, "ACLEvalBuildContext unable to allocate Boundary Entry\n" )/*extracted from eval.cpp*/ + ResDef( DBT_aclevalbuildcontextFailedN_, 17, "ACLEvalBuildContext failed.\n" )/*extracted from eval.cpp*/ + ResDef( DBT_aclEvaltestrightsAnInterimAbsolu_, 18, "ACL_EvalTestRights: an interim, absolute non-allow value was encountered. right=%s, value=%d\n" )/*NOT USED - extracted from eval.cpp*/ + ResDef( DBT_lasdnsbuildUnableToAllocateHashT_, 19, "LASDnsBuild unable to allocate hash table header\n" )/*extracted from lasdns.cpp*/ + ResDef( DBT_lasdnsbuildUnableToAddKeySN_, 20, "LASDnsBuild unable to add key %s\n" )/*extracted from lasdns.cpp*/ + ResDef( DBT_lasdnsbuildUnableToAddKeySN_1, 21, "LASDnsBuild unable to add key %s\n" )/*extracted from lasdns.cpp*/ + ResDef( DBT_lasdnsbuildUnableToAddKeySN_2, 22, "LASDnsBuild unable to add key %s\n" )/*extracted from lasdns.cpp*/ + ResDef( DBT_lasdnsbuildUnableToAddKeySN_3, 23, "LASDnsBuild unable to add key %s\n" )/*extracted from lasdns.cpp*/ + ResDef( DBT_lasdnsbuildUnableToAddKeySN_4, 24, "LASDnsBuild unable to add key %s\n" )/*extracted from lasdns.cpp*/ + ResDef( DBT_lasDnsBuildReceivedRequestForAtt_, 25, "LAS DNS build received request for attribute %s\n" )/*extracted from lasdns.cpp*/ + ResDef( DBT_lasdnsevalIllegalComparatorDN_, 26, "LASDnsEval - illegal comparator %s\n" )/*extracted from lasdns.cpp*/ + ResDef( DBT_lasdnsevalUnableToAllocateContex_, 27, "LASDnsEval unable to allocate Context struct\n\n" )/*extracted from lasdns.cpp*/ + ResDef( DBT_lasdnsevalUnableToGetSessionAddr_, 28, "LASDnsEval unable to get session address %d\n" )/*NOT USED - extracted from lasdns.cpp*/ + ResDef( DBT_lasdnsevalUnableToGetDnsErrorDN_, 29, "LASDnsEval unable to get DNS - error=%s\n" )/*extracted from lasdns.cpp*/ + ResDef( DBT_lasGroupEvalReceivedRequestForAt_, 30, "LAS Group Eval received request for attribute %s\n" )/*extracted from lasgroup.cpp*/ + ResDef( DBT_lasgroupevalIllegalComparatorDN_, 31, "LASGroupEval - illegal comparator %s\n" )/*extracted from lasgroup.cpp*/ + ResDef( DBT_lasgroupevalRanOutOfMemoryN_, 32, "LASGroupEval - ran out of memory\n" )/*extracted from lasgroup.cpp*/ + ResDef( DBT_lasgroupevalUnableToGetSessionAd_, 33, "LASGroupEval unable to get session address %d\n" )/*NOT USED - extracted from lasgroup.cpp*/ + ResDef( DBT_lasgroupevalUnableToGetSessionAd_1, 34, "LASGroupEval unable to get session address %d\n" )/*NOT USED - extracted from lasgroup.cpp*/ + ResDef( DBT_lasgroupevalCouldnTLocateGetterF_, 35, "LASGroupEval - couldn't locate getter for auth-user\n" )/*extracted from lasgroup.cpp*/ + ResDef( DBT_lasgroupevalAttributeGetterForAu_, 36, "LASGroupEval - Attribute getter for auth-user failed\n" )/*extracted from lasgroup.cpp*/ + ResDef( DBT_lasgroupevalAttributeGetterDidnT_, 37, "LASGroupEval - Attribute getter didn't set auth-user\n" )/*extracted from lasgroup.cpp*/ + ResDef( DBT_checkGroupMembershipOfUserSForGr_, 38, "Check group membership of user \"%s\" for group \"%s\"\n" )/*extracted from lasgroup.cpp*/ + ResDef( DBT_ldapuSuccessForGroupSN_, 39, "LDAPU_SUCCESS for group \"%s\"\n" )/*extracted from lasgroup.cpp*/ + ResDef( DBT_ldapuFailedForGroupSN_, 40, "LDAPU_FAILED for group \"%s\"\n" )/*extracted from lasgroup.cpp*/ + ResDef( DBT_lasEvalFalseN_, 41, "LAS_EVAL_FALSE\n" )/*extracted from lasgroup.cpp*/ + ResDef( DBT_lasEvalTrueN_, 42, "LAS_EVAL_TRUE\n" )/*extracted from lasgroup.cpp*/ + ResDef( DBT_lasiptreeallocNoMemoryN_, 43, "LASIpTreeAlloc - no memory\n" )/*extracted from lasip.cpp*/ + ResDef( DBT_ipLasUnableToAllocateTreeNodeN_, 44, "IP LAS unable to allocate tree node\n" )/*extracted from lasip.cpp*/ + ResDef( DBT_ipLasUnableToAllocateTreeNodeN_1, 45, "IP LAS unable to allocate tree node\n" )/*extracted from lasip.cpp*/ + ResDef( DBT_lasIpBuildReceivedRequestForAttr_, 46, "LAS IP build received request for attribute %s\n" )/*extracted from lasip.cpp*/ + ResDef( DBT_lasipevalIllegalComparatorDN_, 47, "LASIpEval - illegal comparator %s\n" )/*extracted from lasip.cpp*/ + ResDef( DBT_lasipevalUnableToGetSessionAddre_, 48, "LASIpEval unable to get session address - error=%s\n" )/*extracted from lasip.cpp*/ + ResDef( DBT_lasipevalUnableToAllocateContext_, 49, "LASIpEval unable to allocate Context struct\n\n" )/*extracted from lasip.cpp*/ + ResDef( DBT_lasipevalReach32BitsWithoutConcl_, 50, "LASIpEval - reach 32 bits without conclusion value=%s" )/*extracted from lasip.cpp*/ + ResDef( DBT_lasProgramEvalReceivedRequestFor_, 51, "LAS Program Eval received request for attribute %s\n" )/*extracted from lasprogram.cpp*/ + ResDef( DBT_lasprogramevalIllegalComparatorD_, 52, "LASProgramEval - illegal comparator %s\n" )/*extracted from lasprogram.cpp*/ + ResDef( DBT_lasprogramUnableToGetSessionAddr_, 53, "LASProgram unable to get session address %d\n" )/*NOT USED - extracted from lasprogram.cpp*/ + ResDef( DBT_bin_, 54, "bin" )/*extracted from lasprogram.cpp*/ + ResDef( DBT_lasprogramevalRequestNotOfTypeAd_, 55, "LASProgramEval: request not of type admin or bin, passing.\n" )/*extracted from lasprogram.cpp*/ + ResDef( DBT_lasprogramevalCheckIfProgramSMat_, 56, "LASProgramEval: check if program %s matches pattern %s.\n" )/*extracted from lasprogram.cpp*/ + ResDef( DBT_lasprogramevalInvalidWildcardExp_, 57, "LASProgramEval: Invalid wildcard expression %s.\n" )/*extracted from lasprogram.cpp*/ + ResDef( DBT_lasEvalFalseN_1, 58, "LAS_EVAL_FALSE\n" )/*extracted from lasprogram.cpp*/ + ResDef( DBT_lasEvalTrueN_1, 59, "LAS_EVAL_TRUE\n" )/*extracted from lasprogram.cpp*/ + ResDef( DBT_unexpectedAttributeInDayofweekSN_, 60, "Unexpected attribute in dayOfWeek - %s\n" )/*extracted from lastod.cpp*/ + ResDef( DBT_illegalComparatorForDayofweekDN_, 61, "Illegal comparator for dayOfWeek - %s\n" )/*extracted from lastod.cpp*/ + ResDef( DBT_unexpectedAttributeInTimeofdaySN_, 62, "Unexpected attribute in timeOfDay - %s\n" )/*extracted from lastod.cpp*/ + ResDef( DBT_lasUserEvalReceivedRequestForAtt_, 63, "LAS User Eval received request for attribute %s\n" )/*extracted from lasuser.cpp*/ + ResDef( DBT_lasuserevalIllegalComparatorDN_, 64, "LASUserEval - illegal comparator %s\n" )/*extracted from lasuser.cpp*/ + ResDef( DBT_lasuserevalRanOutOfMemoryN_, 65, "LASUserEval - ran out of memory\n" )/*extracted from lasuser.cpp*/ + ResDef( DBT_lasuserevalUnableToGetSessionAdd_, 66, "LASUserEval unable to get session address %d\n" )/*NOT USED - extracted from lasuser.cpp*/ + ResDef( DBT_lasuserevalUnableToGetSessionAdd_1, 67, "LASUserEval unable to get session address %d\n" )/*NOT USED - extracted from lasuser.cpp*/ + ResDef( DBT_lasgroupevalCouldnTLocateGetterF_1, 68, "LASGroupEval - couldn't locate getter for auth-user\n" )/*extracted from lasuser.cpp*/ + ResDef( DBT_lasgroupevalAttributeGetterForAu_1, 69, "LASGroupEval - Attribute getter for auth-user failed\n" )/*extracted from lasuser.cpp*/ + ResDef( DBT_lasgroupevalAttributeGetterDidnT_1, 70, "LASGroupEval - Attribute getter didn't set auth-user\n" )/*extracted from lasuser.cpp*/ + ResDef( DBT_checkIfUidUserIECheckSSN_, 71, "Check if uid == user (i.e. check \"%s\" == \"%s)\"\n" )/*extracted from lasuser.cpp*/ + ResDef( DBT_successForUserSN_, 72, "SUCCESS for user \"%s\"\n" )/*extracted from lasuser.cpp*/ + ResDef( DBT_failedForUserSN_, 73, "FAILED for user \"%s\"\n" )/*extracted from lasuser.cpp*/ + ResDef( DBT_lasEvalFalseN_2, 74, "LAS_EVAL_FALSE\n" )/*extracted from lasuser.cpp*/ + ResDef( DBT_lasEvalTrueN_2, 75, "LAS_EVAL_TRUE\n" )/*extracted from lasuser.cpp*/ + ResDef( DBT_Unused76, 76, "") + ResDef( DBT_lasProgramUnableToGetRequest_, 77, "LASProgram unable to get request address - error=%s" ) /*extracted from lasprogram.cpp*/ + ResDef( DBT_lasProgramRejectingRequestForProgram_, 78, "LASProgram rejecting request for program %s from pattern %s" ) /*extracted from lasprogram.cpp*/ + ResDef( DBT_aclcacheflushCannotParseFile, 79, "ACL_CacheFlush: unable to parse file \"%s\"\n" ) + ResDef( DBT_aclcacheflushCannotConcatList, 80, "ACL_CacheFlush: unable to concatenate ACL list \"%s\"\n" ) + ResDef( DBT_aclcacheflushCannotOpenMagnus, 81, "ACL_CacheFlush: unable to open and process the magnus file \"%s\"\n" ) + ResDef( DBT_illegalComparatorForTimeOfDayDN_, 82, "Illegal comparator for timeOfDay - %s\n" )/*extracted from lastod.cpp*/ + ResDef( DBT_EvalBuildContextUnableToCreateHash, 83, "ACL_EvalBuildContext unable to create hash table\n") + ResDef( DBT_EvalBuildContextUnableToAllocCache, 84, "ACL_EvalBuildContext unable to PERM_CALLOC cache structure\n") + ResDef( DBT_EvalBuildContextUnableToAllocAceEntry, 85, "ACL_EvalBuildContext unable to allocate ACE entry\n") + ResDef( DBT_EvalBuildContextUnableToAllocAuthPointerArray, 86, "ACL_EvalBuildContext unable to allocate auth pointer array\n") + ResDef( DBT_EvalBuildContextUnableToAllocAuthPlist, 87, "ACL_EvalBuildContext unable to allocate auth plist\n") + ResDef( DBT_EvalTestRightsInterimAbsoluteNonAllowValue, 88, "ACL_EvalTestRights: an interim, absolute non-allow value was encountered. right=%s, value=%s\n") + ResDef( DBT_EvalTestRightsEvalBuildContextFailed, 89, "ACL_INTEvalTestRights: call to ACL_EvalBuildContext returned failure status\n") + ResDef( DBT_ModuleRegisterModuleNameMissing, 90, "ACL_ModuleRegister: module name is missing\n") + ResDef( DBT_ModuleRegisterFailed, 91, "ACL_ModuleRegister: call to module init function returned a failed status\n") + ResDef( DBT_GetAttributeCouldntDetermineMethod, 92, "ACL_GetAttribute: couldn't determine method for %s\n") + ResDef( DBT_GetAttributeCouldntLocateGetter, 93, "ACL_GetAttribute: couldn't locate getter for %s") + ResDef( DBT_GetAttributeDidntGetAttr, 94, "ACL_GetAttribute: attr getter failed to get %s") + ResDef( DBT_GetAttributeDidntSetAttr, 95, "ACL_GetAttribute: attr getter failed to get %s") + ResDef( DBT_GetAttributeAllGettersDeclined, 96, "ACL_GetAttribute: All attribute getters declined for attr %s") + ResDef( DBT_DbtypeNoteDefinedYet, 97, "ACL_DatabaseRegister: dbtype for database \"%s\" is not defined yet!") + ResDef( DBT_DatabaseRegisterDatabaseNameMissing, 98, "ACL_DatabaseRegister: database name is missing") + ResDef( DBT_ReadDbMapFileErrorReadingFile, 99, "Error reading the DB Map File: %s. Reason: %s") + ResDef( DBT_ReadDbMapFileMissingUrl, 100, "URL is missing for database %s") + ResDef( DBT_ReadDbMapFileInvalidPropertyPair, 101, "Invalid property value pair for database %s") + ResDef( DBT_ReadDbMapFileDefaultDatabaseNotLdap, 102, "\"default\" database must be an LDAP database") + ResDef( DBT_ReadDbMapFileMultipleDefaultDatabases, 103, "Multiple \"default\" databases are being registered") + ResDef( DBT_ReadDbMapFileMissingDefaultDatabase, 104, "\"default\" LDAP database must be registered") + ResDef( DBT_lasGroupEvalUnableToGetDatabaseName, 105, "LASGroupEval unable to get database name - error= %s") + ResDef( DBT_lasProgramReceivedInvalidProgramExpression, 106, "received invalid program expression %s") + ResDef( DBT_ldapaclDatabaseUrlIsMissing, 107, "parse_ldap_url: database url is missing") + ResDef( DBT_ldapaclDatabaseNameIsMissing, 108, "parse_ldap_url: database name is missing") + ResDef( DBT_ldapaclErrorParsingLdapUrl, 109, "parse_ldap_url: error in parsing ldap url. Reason: %s") + ResDef( DBT_ldapaclUnableToGetDatabaseName, 110, "ldap password check: unable to get database name - error=%s") + ResDef( DBT_ldapaclUnableToGetParsedDatabaseName, 111, "ldap password check: unable to get parsed database %s") + ResDef( DBT_ldapaclCoudlntInitializeConnectionToLdap, 112, "ldap password check: couldn't initialize connection to LDAP. Reason: %s") + ResDef( DBT_ldapaclPassworkCheckLdapError, 113, "ldap password check: LDAP error: \"%s\"") + ResDef( DBT_GetUserIsMemberLdapUnabelToGetDatabaseName, 114, "get_user_ismember_ldap unable to get database name - error=%s") + ResDef( DBT_GetUserIsMemberLdapUnableToGetParsedDatabaseName, 115, "get_user_ismember_ldap unable to get parsed database %s") + ResDef( DBT_GetUserIsMemberLdapCouldntInitializeConnectionToLdap, 116, "ldap password check: couldn't initialize connection to LDAP. Reason: %s") + ResDef( DBT_GetUserIsMemberLdapGroupDoesntExist, 117, "get_user_ismember_ldap: group %s does not exist") + ResDef( DBT_GetUserIsMemberLdapError, 118, "get_user_ismember_ldap: LDAP error: \"%s\"") + ResDef( DBT_LdapDatabaseHandleNotARegisteredDatabase, 119, "ACL_LDAPDatabaseHandle: %s is not a registered database") + ResDef( DBT_LdapDatabaseHandleNotAnLdapDatabase, 120, "ACL_LDAPDatabaseHandle: %s is not an LDAP database") + ResDef( DBT_LdapDatabaseHandleOutOfMemory, 121, "ACL_LDAPDatabaseHandle: out of memory") + ResDef( DBT_LdapDatabaseHandleCouldntInitializeConnectionToLdap, 122, "ACL_LDAPDatabaseHandle: couldn't initialize connection to LDAP. Reason: %s") + ResDef( DBT_LdapDatabaseHandleCouldntBindToLdapServer, 123, "ACL_LDAPDatabaseHandle: couldn't bind to LDAP server. Reason: %s") + ResDef( DBT_AclerrfmtAclerrnomem, 124, "insufficient dynamic memory") + ResDef( DBT_AclerrfmtAclerropen, 125, "error opening file, %s: %s") + ResDef( DBT_AclerrfmtAclerrdupsym1, 126, "duplicate definition of %s") + ResDef( DBT_AclerrfmtAclerrdupsym3, 127, "file %s, line %s: duplicate definition of %s") + ResDef( DBT_AclerrfmtAclerrsyntax, 128, "file %s, line %s: syntax error") + ResDef( DBT_AclerrfmtAclerrundef, 129, "file %s, line %s: %s is undefined") + ResDef( DBT_AclerrfmtAclaclundef, 130, "in acl %s, %s %s is undefined") + ResDef( DBT_AclerrfmtAclerradb, 131, "database %s: error accessing %s") + ResDef( DBT_AclerrfmtAclerrparse1, 132, "%s") + ResDef( DBT_AclerrfmtAclerrparse2, 133, "file %s, line %s: invalid syntax") + ResDef( DBT_AclerrfmtAclerrparse3, 134, "file %s, line %s: syntax error at \"%s\"") + ResDef( DBT_AclerrfmtAclerrnorlm, 135, "realm %s is not defined") + ResDef( DBT_AclerrfmtUnknownerr, 136, "error code = %d") + ResDef( DBT_AclerrfmtAclerrinternal, 137, "internal ACL error") + ResDef( DBT_AclerrfmtAclerrinval, 138, "invalid argument") + ResDef( DBT_DbtypeNotDefinedYet, 139, "ACL_DatabaseRegister: dbtype for database \"%s\" is not defined yet!") + ResDef( DBT_ReadDbMapFileCouldntDetermineDbtype, 140, "couldn't determine dbtype from: %s") + ResDef( DBT_ReadDbMapFileRegisterDatabaseFailed, 141, "Failed to register database %s") + ResDef( DBT_AclerrfmtAclerrfail, 142, "ACL call returned failed status") + ResDef( DBT_AclerrfmtAclerrio, 143, "file %s: ACL IO error - %s") + ResDef( DBT_AclUserExistsOutOfMemory, 144, "acl_user_exists: out of memory") + ResDef( DBT_AclUserExistsNot, 145, "acl_user_exists: user doesn't exist anymore") + ResDef( DBT_AclUserPlistError, 146, "acl_user_exists: plist error") + ResDef( DBT_lasdnsbuildInvalidAttributePattern_, 147, "LASDnsBuild invalid attribute pattern\n" ) +END_STR(libaccess) diff --git a/include/libaccess/dnfstruct.h b/include/libaccess/dnfstruct.h new file mode 100644 index 0000000..58ad834 --- /dev/null +++ b/include/libaccess/dnfstruct.h @@ -0,0 +1,59 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef __dnfstruct_h +#define __dnfstruct_h + +/* + * Description (dnfstruct_h) + * + * This file defines types and structures used to represent a DNS + * name filter in memory. A DNS name filter contains specifications + * of fully or partially qualified DNS names. Each of these + * specifications can be associated with whatever information is + * appropriate for a particular use of a DNS name filter. + */ + +#include "nspr.h" +#include "plhash.h" + +NSPR_BEGIN_EXTERN_C + +/* + * Description (DNSLeaf_t) + * + * This type describes the structure of information associated with + * an entry in a DNS filter. The filter itself is implemented as a + * hash table, keyed by the DNS name specification string. The + * value associated with a key is a pointer to a DNSLeaf_t structure. + */ + +typedef struct DNSLeaf_s DNSLeaf_t; +struct DNSLeaf_s { + PLHashEntry dnl_he; /* NSPR hash table entry */ +}; + +#define dnl_next dnl_he.next /* hash table collision link */ +#define dnl_keyhash dnl_he.keyHash /* symbol hash value */ +#define dnl_key dnl_he.key /* pointer to Symbol_t structure */ +#define dnl_ref dnl_he.value /* pointer to named structure */ + +typedef struct DNSFilter_s DNSFilter_t; +struct DNSFilter_s { + DNSFilter_t * dnf_next; /* link to next filter */ + void * dnf_hash; /* pointer to constructed hash table */ +}; + +NSPR_END_EXTERN_C + +#endif /* __dnfstruct_h */ diff --git a/include/libaccess/ipfstruct.h b/include/libaccess/ipfstruct.h new file mode 100644 index 0000000..bce7857 --- /dev/null +++ b/include/libaccess/ipfstruct.h @@ -0,0 +1,89 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef __ipfstruct_h +#define __ipfstruct_h + +/* + * Description (ipfstruct.h) + * + * This file defines types and structures used to represent an + * IP address filter in memory. An IP address filter contains + * specifications of IP host and network addresses. Each of + * these specifications can be associated with whatever information + * is appropriate for a particular use of an IP address filter. + */ + +/* Define a scalar IP address value */ +#ifndef __IPADDR_T_ +#define __IPADDR_T_ +typedef unsigned long IPAddr_t; +#endif /* __IPADDR_T_ */ + +/* + * Description (IPNode_t) + * + * This type describes an internal node in the radix tree. An internal + * node has a link up the tree to its parent, and up to three links + * down the tree to its descendants. Each internal node is used to + * test a particular bit in a given IP address, and traverse down the + * tree in a direction which depends on whether the bit is set, clear, + * or masked out. The descendants of an internal node may be internal + * nodes or leaf nodes (IPLeaf_t). + */ + +/* Define indices of links in an IPNode_t */ +#define IPN_CLEAR 0 /* link to node with ipn_bit clear */ +#define IPN_SET 1 /* link to node with ipn_bit set */ +#define IPN_MASKED 2 /* link to node with ipn_bit masked out */ +#define IPN_NLINKS 3 /* number of links */ + +typedef struct IPNode_s IPNode_t; +struct IPNode_s { + char ipn_type; /* node type */ +#define IPN_LEAF 0 /* leaf node */ +#define IPN_NODE 1 /* internal node */ + + char ipn_bit; /* bit number (31-0) to test */ + IPNode_t * ipn_parent; /* link to parent node */ + IPNode_t * ipn_links[IPN_NLINKS]; +}; + +/* Helper definitions */ +#define ipn_clear ipn_links[IPN_CLEAR] +#define ipn_set ipn_links[IPN_SET] +#define ipn_masked ipn_links[IPN_MASKED] + +/* + * Description (IPLeaf_t) + * + * This type describes a leaf node in the radix tree. A leaf node + * contains an IP host or network address, and a network mask. A + * given IP address matches a leaf node if the IP address, when masked + * by ipl_netmask, equals ipl_ipaddr. + */ + +typedef struct IPLeaf_s IPLeaf_t; +struct IPLeaf_s { + char ipl_type; /* see ipn_type in IPNode_t */ + IPAddr_t ipl_netmask; /* IP network mask */ + IPAddr_t ipl_ipaddr; /* IP address of host or network */ +}; + +typedef struct IPFilter_s IPFilter_t; +struct IPFilter_s { + IPFilter_t * ipf_next; /* link to next filter */ + IPNode_t * ipf_tree; /* pointer to radix tree structure */ +}; + +#endif /* __ipfstruct_h */ diff --git a/include/libaccess/las.h b/include/libaccess/las.h new file mode 100644 index 0000000..80cb71f --- /dev/null +++ b/include/libaccess/las.h @@ -0,0 +1,195 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + + +#ifndef ACL_LAS_HEADER +#define ACL_LAS_HEADER + +#ifndef NOINTNSACL +#define INTNSACL +#endif /* !NOINTNSACL */ + +/* #include */ +#include +#include + +#include +#include +#include + +#ifndef PUBLIC_NSACL_ACLDEF_H +#include "public/nsacl/acldef.h" +#endif /* !PUBLIC_NSACL_ACLDEF_H */ + +#define ACL_MAX_METHOD 32 +#define ACL_MAX_DBTYPE 32 + +struct ACLAttrGetter { + PRCList list; /* must be first */ + ACLMethod_t method; + ACLDbType_t dbtype; + ACLAttrGetterFn_t fn; + void *arg; +}; + +NSPR_BEGIN_EXTERN_C + +NSAPI_PUBLIC extern int + ACL_LasRegister(NSErr_t *errp, const char *attr_name, LASEvalFunc_t + eval_func, LASFlushFunc_t flush_func); +NSAPI_PUBLIC extern int + ACL_LasFindEval(NSErr_t *errp, char *attr_name, LASEvalFunc_t + *eval_funcp); +NSAPI_PUBLIC extern int + ACL_LasFindFlush(NSErr_t *errp, char *attr_name, LASFlushFunc_t + *flush_funcp); +extern void + ACL_LasHashInit(void); +extern void + ACL_LasHashDestroy(void); +extern void + ACL_AttrGetterHashDestroy(void); +extern void + ACL_MethodHashDestroy(void); + +/* + * Revised, normalized method/dbtype registration routines + */ +NSAPI_PUBLIC extern int + ACL_MethodRegister(NSErr_t *errp, const char *name, ACLMethod_t *t); +NSAPI_PUBLIC extern int + ACL_MethodIsEqual(NSErr_t *errp, const ACLMethod_t t1, const ACLMethod_t t2); +NSAPI_PUBLIC extern int + ACL_MethodNameIsEqual(NSErr_t *errp, const ACLMethod_t t, const char *name); +NSAPI_PUBLIC extern int + ACL_MethodFind(NSErr_t *errp, const char *name, ACLMethod_t *t); +NSAPI_PUBLIC extern ACLMethod_t + ACL_MethodGetDefault(NSErr_t *errp); +NSAPI_PUBLIC extern int + ACL_MethodSetDefault(NSErr_t *errp, const ACLMethod_t t); +NSAPI_PUBLIC extern int + ACL_AuthInfoGetMethod(NSErr_t *errp, PList_t auth_info, ACLMethod_t *t); +NSAPI_PUBLIC extern int + ACL_AuthInfoSetMethod(NSErr_t *errp, PList_t auth_info, ACLMethod_t t); +NSAPI_PUBLIC extern int + ACL_DbTypeRegister(NSErr_t *errp, const char *name, DbParseFn_t func, ACLDbType_t *t); +NSAPI_PUBLIC extern int + ACL_DbTypeIsEqual(NSErr_t *errp, const ACLDbType_t t1, const ACLDbType_t t2); +NSAPI_PUBLIC extern int + ACL_DbTypeNameIsEqual(NSErr_t *errp, const ACLDbType_t t, const char *name); +NSAPI_PUBLIC extern int + ACL_DbTypeFind(NSErr_t *errp, const char *name, ACLDbType_t *t); +NSAPI_PUBLIC extern ACLDbType_t + ACL_DbTypeGetDefault(NSErr_t *errp); +NSAPI_PUBLIC extern const char * + ACL_DatabaseGetDefault(NSErr_t *errp); +NSAPI_PUBLIC extern int + ACL_DatabaseSetDefault(NSErr_t *errp, const char *dbname); +NSAPI_PUBLIC extern int + ACL_AuthInfoGetDbType(NSErr_t *errp, PList_t auth_info, ACLDbType_t *t); +NSAPI_PUBLIC extern int + ACL_DbTypeIsRegistered(NSErr_t *errp, const ACLDbType_t dbtype); +NSAPI_PUBLIC extern int + ACL_AttrGetterRegister(NSErr_t *errp, const char *attr, + ACLAttrGetterFn_t fn, ACLMethod_t m, + ACLDbType_t d, int position, void *arg); + +extern ACLDbType_t ACL_DbTypeLdap; + +NSAPI_PUBLIC extern int + ACL_DbTypeSetDefault(NSErr_t *errp, ACLDbType_t t); +NSAPI_PUBLIC extern DbParseFn_t + ACL_DbTypeParseFn(NSErr_t *errp, const ACLDbType_t dbtype); +NSAPI_PUBLIC extern int + ACL_AttrGetterFind(NSErr_t *errp, const char *attr, + ACLAttrGetterList_t *getters); +NSAPI_PUBLIC extern ACLAttrGetter_t * + ACL_AttrGetterFirst(ACLAttrGetterList_t *getters); +NSAPI_PUBLIC extern ACLAttrGetter_t * + ACL_AttrGetterNext(ACLAttrGetterList_t *getters, + ACLAttrGetter_t *last); + +/* typedef PRHashTable AttrGetterTable_t; */ +typedef PLHashTable AttrGetterTable_t; + +typedef struct { + char *method; + char *authtype; + char *dbtype; + AttrGetterTable_t *attrGetters; +} MethodInfo_t; + +NSAPI_PUBLIC int ACL_ModuleRegister (NSErr_t *errp, const char *moduleName, AclModuleInitFunc func); + +NSAPI_PUBLIC int ACL_GetAttribute(NSErr_t *errp, const char *attr, void **val, PList_t subject, PList_t resource, PList_t auth_info, PList_t global_auth); + +NSAPI_PUBLIC int ACL_DatabaseRegister(NSErr_t *errp, ACLDbType_t dbtype, const char *dbname, const char *url, PList_t plist); + +NSAPI_PUBLIC int ACL_RegisterDbFromACL(NSErr_t *errp, const char *url, ACLDbType_t *dbtype); +NSAPI_PUBLIC int ACL_DatabaseFind(NSErr_t *errp, const char *dbname, + ACLDbType_t *dbtype, void **db); +NSAPI_PUBLIC int ACL_LDAPDatabaseHandle (NSErr_t *errp, + const char *dbname, LDAP **ld, + char **basedn); +NSAPI_PUBLIC int ACL_AuthInfoGetDbname (PList_t auth_info, char **dbname); +NSAPI_PUBLIC int ACL_AuthInfoSetDbname (NSErr_t *errp, PList_t auth_info, + const char *dbname); +NSAPI_PUBLIC int ACL_CacheFlushRegister(AclCacheFlushFunc_t func); +NSAPI_PUBLIC int ACL_SetDefaultResult (NSErr_t *errp, + ACLEvalHandle_t *acleval, + int result); +NSAPI_PUBLIC int ACL_GetDefaultResult (ACLEvalHandle_t *acleval); + +struct program_groups { + char *type; + char **groups; + char **programs; +}; + +extern int LASTimeOfDayEval(NSErr_t *errp, char *attribute, CmpOp_t comparator, + char *pattern, ACLCachable_t *cachable, void **las_cookie, + PList_t subject, PList_t resource, PList_t auth_info, + PList_t global_auth); +extern int LASDayOfWeekEval(NSErr_t *errp, char *attribute, CmpOp_t comparator, + char *pattern, ACLCachable_t *cachable, void **las_cookie, + PList_t subject, PList_t resource, PList_t auth_info, + PList_t global_auth); +extern int LASIpEval(NSErr_t *errp, char *attribute, CmpOp_t comparator, + char *pattern, ACLCachable_t *cachable, void **las_cookie, + PList_t subject, PList_t resource, PList_t auth_info, + PList_t global_auth); +extern int LASDnsEval(NSErr_t *errp, char *attribute, CmpOp_t comparator, + char *pattern, ACLCachable_t *cachable, void **las_cookie, + PList_t subject, PList_t resource, PList_t auth_info, + PList_t global_auth); +extern int LASGroupEval(NSErr_t *errp, char *attribute, CmpOp_t comparator, + char *pattern, ACLCachable_t *cachable, void **las_cookie, + PList_t subject, PList_t resource, PList_t auth_info, + PList_t global_auth); +extern int LASUserEval(NSErr_t *errp, char *attribute, CmpOp_t comparator, + char *pattern, ACLCachable_t *cachable, void **las_cookie, + PList_t subject, PList_t resource, PList_t auth_info, + PList_t global_auth); +extern int LASProgramEval(NSErr_t *errp, char *attribute, CmpOp_t comparator, + char *pattern, ACLCachable_t *cachable, void **las_cookie, + PList_t subject, PList_t resource, PList_t auth_info, + PList_t global_auth); + +extern void LASTimeOfDayFlush(void **cookie); +extern void LASDayOfWeekFlush(void **cookie); +extern void LASIpFlush(void **cookie); +extern void LASDnsFlush(void **cookie); + +NSPR_END_EXTERN_C + +#endif /* ACL_LAS_HEADER */ diff --git a/include/libaccess/nsauth.h b/include/libaccess/nsauth.h new file mode 100644 index 0000000..6f6ef78 --- /dev/null +++ b/include/libaccess/nsauth.h @@ -0,0 +1,283 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef __nsauth_h +#define __nsauth_h + +/* + * Description (nsauth.h) + * + * This file defines types and interfaces which pertain to client + * authentication. The key types are Realm_t, which describes a + * context for authentication, and ClAuth_t, which is used to + * pass authentication information about a particular client + * into and out of authentication interface functions. + */ + +#include "ssl.h" + +#include "cert.h" /* CERTCertificate for new ns security bin */ + +#include "usi.h" /* identifier list support */ +#include "attrec.h" /* attribute record types */ +#include "nserror.h" /* error frame list support */ +#include "nsautherr.h" /* authentication error codes */ + +/* Define a scalar IP address value */ +#ifndef __IPADDR_T_ +#define __IPADDR_T_ +typedef unsigned long IPAddr_t; +#endif /* __IPADDR_T_ */ + +/* + * Description (UserObj_t) + * + * This type defines the structure of a user object. A user object + * contains information about a user which might be contained in + * an authentication database, including user name, password, user id, + * and group membership. + */ + +typedef struct UserObj_s UserObj_t; +struct UserObj_s { + NTS_t uo_name; /* user account name */ + NTS_t uo_pwd; /* encrypted password */ + USI_t uo_uid; /* user id */ + USI_t uo_flags; /* bit flags */ +#define UOF_DBFLAGS 0x1f /* mask for flags stored in DB file */ +#define UOF_ERROR 0x20 /* error on last operation */ +#define UOF_NEW 0x40 /* new user object */ +#define UOF_MODIFIED 0x80 /* internal object modified */ +#define UOF_DELPEND 0x100 /* delete pending */ + + NTS_t uo_rname; /* real user name (gecos string) */ + USIList_t uo_groups; /* list of group ids containing user */ +}; + +/* + * Description (GroupObj_t) + * + * This type defines the structure of a group object. A group object + * contains information about a group which might be contained in + * an authentication database, including group name, group id, and + * relationships to other groups. + */ + +typedef struct GroupObj_s GroupObj_t; +struct GroupObj_s { + NTS_t go_name; /* group name */ + USI_t go_gid; /* group id */ + USI_t go_flags; /* bit flags */ +#define GOF_DBFLAGS 0x3f /* mask for flags stored in DB file */ +#define GOF_NEW 0x40 /* new group object */ +#define GOF_MODIFIED 0x80 /* internal object modified */ +#define GOF_DELPEND 0x100 /* delete pending */ + + NTS_t go_desc; /* group description */ + USIList_t go_users; /* list of user members (uids) */ + USIList_t go_groups; /* list of group members (gids) */ + USIList_t go_pgroups; /* list of parent groups (gids) */ +}; + +/* + * Description (AuthIF_t) + * + * This type describes a structure containing pointers to functions + * which provide a standard interface to an authentication database. + * The functions are described below. + * + * Description (aif_close) + * + * The referenced function closes an authentication database which + * was previously opened via the aif_open function. + * + * Arguments: + * + * authdb - handle for database returned by aif_open + * flags - close flags (unused - must be zero) + * + * + * Description (aif_findid) + * + * The referenced function looks up a specified user or group id + * in a given authentication database. Flags can be specified to + * search for only matching user ids, only matching group ids, + * or both. The result value for a successful search indicates + * whether a matching user or group id was found, and a pointer to + * a user or group object is returned accordingly. + * + * Arguments: + * + * authdb - handle for database returned by aif_open + * id - user/group id value + * flags - bit flags to control search + * rptr - pointer to returned user or group object + * pointer (may be null) + * + * Returns: + * + * If successful, the result value is greater than zero, and contains + * a subset of the search flags, indicating what was found, and a user + * or group object pointer is returned through 'rptr' if it is non-null. + * An unsuccessful search is indicated by a return value of zero. An + * error is indicated by a negative return value (defined in + * nsautherr.h). + * + * + * Description (aif_findname) + * + * The referenced function looks up a specified user or group name + * in a given authentication database. Flags can be specified to + * search for only matching user names, only matching group names, + * or both. The result value for a successful search indicates + * whether a matching user or group was found, and a pointer to a + * user or group object is returned accordingly. + * + * Arguments: + * + * authdb - handle for database returned by aif_open + * name - user/group name string pointer + * flags - bit flags to control search + * rptr - pointer to returned user or group object + * pointer (may be null) + * + * Returns: + * + * If successful, the result value is greater than zero, and contains + * a subset of the search flags, indicating what was found, and a user + * or group object pointer is returned through 'rptr' if it is non-null. + * An unsuccessful search is indicated by a return value of zero. An + * error is indicated by a negative return value (defined in + * nsautherr.h). + * + * + * Description (aif_idtoname) + * + * The referenced function looks up a specified user or group id + * in a given authentication database, and returns the associated + * user or group name. Flags can be specified to search for only + * matching user ids, only matching group ids, or both. The result + * value for a successful search indicates whether a matching user + * or group id was found, and a pointer to the user or group name + * is returned accordingly. + * + * Arguments: + * + * authdb - handle for database returned by aif_open + * id - user/group id value + * flags - bit flags to control search + * rptr - pointer to returned user or group name + * pointer (may be null) + * + * Returns: + * + * If successful, the result value is greater than zero, and contains + * a subset of the search flags, indicating what was found, and a user + * or group name pointer is returned through 'rptr' if it is non-null. + * An unsuccessful search is indicated by a return value of zero. An + * error is indicated by a negative return value (defined in + * nsautherr.h). + * + * + * Description (aif_open) + * + * The referenced function opens a named authentication database of + * the type supported by this interface. The actual effect of the + * open function depends on the particular type of database, but a + * call to the aif_open function should generally be followed by a + * call to the aif_close function at some point. + * + * Arguments: + * + * adbname - authentication database name string pointer + * flags - open flags (definitions below) + * rptr - pointer to returned handle for the database + * + * Returns: + * + * The return value is zero if the operation is successful, and a + * handle for the authentication database is returned through 'rptr'. + * An error is indicated by a negative return value (defined in + * nsautherr.h). + */ + +typedef struct AuthIF_s AuthIF_t; +struct AuthIF_s { + int (*aif_findid)(NSErr_t * errp, + void * authdb, USI_t id, int flags, void **rptr); + int (*aif_findname)(NSErr_t * errp, + void * authdb, char * name, int flags, void **rptr); + int (*aif_idtoname)(NSErr_t * errp, + void * authdb, USI_t id, int flags, char **rptr); + int (*aif_open)(NSErr_t * errp, char * adbname, int flags, void **rptr); + void (*aif_close)(void * authdb, int flags); + int (*aif_addmember)(void **pmlist, char * name, int flags); + int (*aif_ismember)(void * mlist, char * name, int flags); +}; + +/* Define flags for the aif_open function */ +#define AIF_CREATE 0x1 /* new database (create it) */ + +/* + * Define bits for flags and return value of aif_findid, aif_findid, + * and aif_idtoname functions. + */ +#define AIF_NONE 0 /* no matching group or user name */ +#define AIF_GROUP 0x1 /* matching group name/id found */ +#define AIF_USER 0x2 /* matching user name/id found */ + +/* + * Description (Realm_t) + * + * This type defines a structure which represents an authentication + * realm. Each realm has a unique name, which is accessed through + * a Symbol_t structure, which in turn references a Realm_t as the + * symbol value. This structure specifies an authentication + * method and an authentication database. + */ + +typedef struct Realm_s Realm_t; +struct Realm_s { + int rlm_ameth; /* authentication method type */ + char * rlm_dbname; /* authentication database name */ + AuthIF_t * rlm_aif; /* authentication interface pointer */ + void * rlm_authdb; /* authentication database handle */ + char * rlm_prompt; /* realm prompt string */ +}; + +/* Define supported authentication method codes for rlm_ameth */ +#define AUTH_METHOD_BASIC 1 /* basic authentication */ +#define AUTH_METHOD_SSL 2 /* SSL client authentication */ + +/* + * Description (ClAuth_t) + * + * This type describes a structure containing information about a + * particular client. It is used to pass information into and out + * of authentication support functions, as well as to other functions + * needing access to client authentication information. + * FUTURE: + * - add client certificate pointer + */ + +typedef struct ClAuth_s ClAuth_t; +struct ClAuth_s { + Realm_t * cla_realm; /* authentication realm pointer */ + IPAddr_t cla_ipaddr; /* IP address */ + char * cla_dns; /* DNS name string pointer */ + UserObj_t * cla_uoptr; /* authenticated user object pointer */ + GroupObj_t * cla_goptr; /* pointer to list of group objects */ + CERTCertificate * cla_cert; /* certificate from SSL client auth */ +}; + +#endif /* __nsauth_h */ diff --git a/include/libaccess/nsautherr.h b/include/libaccess/nsautherr.h new file mode 100644 index 0000000..23d9e4f --- /dev/null +++ b/include/libaccess/nsautherr.h @@ -0,0 +1,102 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef __nsautherr_h +#define __nsautherr_h + +/* Define error id codes */ + +/* Define error ids generated by nsumgmt.c */ + +/* userRename() */ +#define NSAUERR1000 1000 /* insufficient dynamic memory */ + +/* userStore() */ +#define NSAUERR1100 1100 /* insufficient dynamic memory */ + +/* Define error ids generated by nsgmgmt.c */ + +/* groupStore() */ +#define NSAUERR2000 2000 /* insufficient dynamic memory */ + +/* Define error ids generated by nsadb.c */ + +/* nsadbOpen() */ +#define NSAUERR3000 3000 /* invalid function argument */ +#define NSAUERR3020 3020 /* insufficient dynamic memory */ +#define NSAUERR3040 3040 /* create directory operation failed */ +#define NSAUERR3060 3060 /* open directory operation failed */ + +/* nsadbOpenUsers() */ +#define NSAUERR3200 3200 /* invalid function argument */ +#define NSAUERR3220 3220 /* insufficient dynamic memory */ +#define NSAUERR3240 3240 /* error opening user database */ + +/* nsadbOpenGroups() */ +#define NSAUERR3300 3300 /* invalid function argument */ +#define NSAUERR3320 3320 /* insufficient dynamic memory */ +#define NSAUERR3340 3340 /* error opening group database */ + +/* nsadbOpenClients() */ +#define NSAUERR3400 3400 /* invalid function argument */ +#define NSAUERR3420 3420 /* insufficient dynamic memory */ +#define NSAUERR3430 3430 /* error initializing DB lock */ +#define NSAUERR3440 3440 /* error opening group database */ + +/* nsadbPutUserByCert() */ +#define NSAUERR3500 3500 /* invalid username length */ +#define NSAUERR3520 3520 /* user-to-cert map already exists */ + +/* nsadbOpenCertUsers() */ +#define NSAUERR3600 3600 /* error opening user-to-cert id DB */ + +/* nsadbFindCertUser() */ +#define NSAUERR3700 3700 /* specified user name not found */ + +/* nsadbAddCertUser() */ +#define NSAUERR3800 3800 /* error adding entry to database */ + +/* nsadbRemoveCertUser() */ +#define NSAUERR3900 3900 /* error deleting entry in database */ + +/* Define error ids generated by nsamgmt.c */ + +/* nsadbRemoveUser() */ +#define NSAUERR4000 4000 /* user name not found */ + +/* nsadbRemoveGroup() */ +#define NSAUERR4100 4100 /* group name not found */ + +/* Define error codes */ +#define NSAERRNOMEM -1 /* insufficient dynamic memory */ +#define NSAERRINVAL -2 /* invalid function argument */ +#define NSAERROPEN -3 /* error opening database */ +#define NSAERRMKDIR -4 /* error creating database directory */ +#define NSAERRNAME -5 /* user or group name not found */ +#define NSAERRPUT -6 /* error writing record to database */ +#define NSAERRCMAP -7 /* certificate map already exists */ +#define NSAERRDEL -8 /* error deleting database entry */ +#define NSAERRLOCK -9 /* error initializing DB lock */ + +NSPR_BEGIN_EXTERN_C + +/* Authentication facility name in nsuser.c */ +extern const char * NSAuth_Program; + + /* Functions in nsautherr.c */ +extern NSAPI_PUBLIC void nsadbErrorFmt(NSErr_t * errp, + char * msgbuf, int maxlen, int maxdepth); + +NSPR_END_EXTERN_C + +#endif /* __nsautherr_h */ diff --git a/include/libaccess/nserror.h b/include/libaccess/nserror.h new file mode 100644 index 0000000..9ae7c53 --- /dev/null +++ b/include/libaccess/nserror.h @@ -0,0 +1,55 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef __nserror_h +#define __nserror_h + +#ifndef NOINTNSACL +#define INTNSACL +#endif /* !NOINTNSACL */ + +/* + * Description (nserror.h) + * + * This file describes the interface to an error handling mechanism + * that is intended for general use. This mechanism uses a data + * structure known as an "error frame" to capture information about + * an error. Multiple error frames are used in nested function calls + * to capture the interpretation of an error at the different levels + * of a nested call. + */ + +#include +#include +#include "public/nsacl/nserrdef.h" + +#ifdef INTNSACL + +NSPR_BEGIN_EXTERN_C + +/* Functions in nseframe.c */ +extern void nserrDispose(NSErr_t * errp); +extern NSEFrame_t * nserrFAlloc(NSErr_t * errp); +extern void nserrFFree(NSErr_t * errp, NSEFrame_t * efp); +extern NSEFrame_t * nserrGenerate(NSErr_t * errp, long retcode, long errorid, + const char * program, int errc, ...); + +/* Functions in nserrmsg.c */ +extern char * nserrMessage(NSEFrame_t * efp, int flags); +extern char * nserrRetrieve(NSEFrame_t * efp, int flags); + +NSPR_END_EXTERN_C + +#endif /* INTNSACL */ + +#endif /* __nserror_h */ diff --git a/include/libaccess/symbols.h b/include/libaccess/symbols.h new file mode 100644 index 0000000..c30792b --- /dev/null +++ b/include/libaccess/symbols.h @@ -0,0 +1,99 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef __symbols_h +#define __symbols_h + +/* + * Description (symbols.h) + * + * This file describes the interface to an ACL symbol table + * implementation. The symbol table provides for storing symbols + * keyed by name and type, creating a separate name space for + * each symbol type. + */ + +#ifdef __PRIVATE_SYMBOLS + +#include "plhash.h" +#include "base/crit.h" + +/* + * Description (SymTable_t) + * + * This type describes a symbols table. It contains a pointer to + * an NSPR hash table and a pointer to a monitor. The monitor is + * needed even for read access to the symbol table because NSPR + * modifies the list for a hash bucket when a name is looked up. + */ + +typedef struct SymTable_s SymTable_t; +struct SymTable_s { + CRITICAL stb_crit; /* monitor pointer */ + PLHashTable * stb_ht; /* hash table pointer */ +}; + + +/* Private functions defined in symbols.c */ +/* +static PLHashEntry * symAllocEntry(void * pool, const void *unused); +static void * symAllocTable(void * pool, PRSize size); +static int symCmpName(const void * name1, const void * name2); +static int symCmpValue(const void * value1, const void * value2); +static PLHashNumber symHash(const void * symkey); +static void symFreeEntry(void * pool, PLHashEntry * he, PRUintn flag); +static void symFreeTable(void * pool, void * item); +*/ +#endif /* __PRIVATE_SYMBOLS */ + +/* + * Description (Symbol_t) + * + * This type describes a symbol table entry. A symbol is + * identified by the combination of its name and type. This + * structure is normally embedded in a structure for a particular + * symbol type, which will contain the symbol "value" information + * as well. + */ + +typedef struct Symbol_s Symbol_t; +struct Symbol_s { + const char * sym_name; /* pointer to symbol name string */ + int sym_type; /* symbol type */ + void *sym_data; /* symbol data storage */ +}; + +/* Define error return codes */ +#define SYMERRNOMEM -1 /* insufficient dynamic memory */ +#define SYMERRDUPSYM -2 /* duplicate symbol name and type */ +#define SYMERRNOSYM -3 /* symbol name and type not found */ + +/* Define return flags for symTableEnumerate() func() */ +#define SYMENUMSTOP 0x1 /* terminate enumeration */ +#define SYMENUMREMOVE 0x2 /* remove entry from symbol table */ + +NSPR_BEGIN_EXTERN_C + +/* Public functions defined in symbols.c */ +extern int symTableAddSym(void * table, Symbol_t * newsym, void * symref); +extern void symTableRemoveSym(void * table, Symbol_t * sym); +extern void symTableDestroy(void * table, int flags); +extern void symTableEnumerate(void * table, void * argp, + int (*func)(Symbol_t * sym, void * parg)); +extern int symTableFindSym(void * table, const char * symname, + int symtype, void **psymref); +extern int symTableNew(void **ptable); + +NSPR_END_EXTERN_C + +#endif /* __symbols_h */ diff --git a/include/libaccess/userauth.h b/include/libaccess/userauth.h new file mode 100644 index 0000000..22670ec --- /dev/null +++ b/include/libaccess/userauth.h @@ -0,0 +1,21 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef USERAUTH_H +#define USERAUTH_H + +NSPR_BEGIN_EXTERN_C + + +NSPR_END_EXTERN_C +#endif diff --git a/include/libaccess/usi.h b/include/libaccess/usi.h new file mode 100644 index 0000000..851df04 --- /dev/null +++ b/include/libaccess/usi.h @@ -0,0 +1,89 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef __usi_h +#define __usi_h + +/* + * Description (usi.h) + * + * This file defines the interface to an unsigned integer datatype. + * Unsigned integers are used to represent object identifiers of + * various sorts, including user ids and group ids. Functions + * for manipulating lists of USIs are also provided in this + * interface. + */ + +/* Define a type to contain an unsigned integer value */ +typedef unsigned int USI_t; + +/* Define a type to describe a list of USI_t values */ +typedef struct USIList_s USIList_t; +struct USIList_s { + int uil_count; /* number of active values in list */ + int uil_size; /* current size of list area in USI_t */ + USI_t * uil_list; /* pointer to array of values */ +}; + +/* Define macro to initialize a USIList_t structure */ +#define UILINIT(uilptr) \ + { \ + (uilptr)->uil_count = 0; \ + (uilptr)->uil_size = 0; \ + (uilptr)->uil_list = 0; \ + } + +/* Define a macro to replace the contents of one USIList_t with another's */ +#define UILREPLACE(dst, src) \ + { \ + if ((dst)->uil_size > 0) { \ + FREE((dst)->uil_list); \ + } \ + (dst)->uil_count = (src)->uil_count; \ + (dst)->uil_size = (src)->uil_size; \ + (dst)->uil_list = (src)->uil_list; \ + (src)->uil_count = 0; \ + (src)->uil_size = 0; \ + (src)->uil_list = 0; \ + } + +/* Define a variation of UILINIT() that frees any allocated space */ +#define UILFREE(uilptr) \ + { \ + if ((uilptr)->uil_size > 0) { \ + FREE((uilptr)->uil_list); \ + } \ + (uilptr)->uil_count = 0; \ + (uilptr)->uil_size = 0; \ + (uilptr)->uil_list = 0; \ + } + +/* Define a macro to extract the current number of items in a USIList_t */ +#define UILCOUNT(uilptr) ((uilptr)->uil_count) + +/* Define a macro to return a pointer to the array of values */ +#define UILLIST(uilptr) ((uilptr)->uil_list) + +NSPR_BEGIN_EXTERN_C + +/* Define functions in usi.c */ +extern USI_t * usiAlloc(USIList_t * uilptr, int count); +extern int usiInsert(USIList_t * uilptr, USI_t usi); +extern int usiPresent(USIList_t * uilptr, USI_t usi); +extern int usiRemove(USIList_t * uilptr, USI_t usi); +extern int uilDuplicate(USIList_t * dstptr, USIList_t * srcptr); +extern int uilMerge(USIList_t * dstptr, USIList_t * srcptr); + +NSPR_END_EXTERN_C + +#endif /* __usi_h */ diff --git a/include/libaccess/usrcache.h b/include/libaccess/usrcache.h new file mode 100644 index 0000000..fda5174 --- /dev/null +++ b/include/libaccess/usrcache.h @@ -0,0 +1,108 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + + +#ifndef ACL_USER_CACHE_H +#define ACL_USER_CACHE_H + +#include + +#include +#include +/* Removed for new ns security integration +#include +*/ +#include +#include +#include + +typedef struct { + PRCList list; /* pointer to next & prev obj */ + char *uid; /* unique within a database */ + char *userdn; /* LDAP DN if using LDAP db */ + char *passwd; /* password */ + SECItem *derCert; /* raw certificate data */ + char *group; /* group recently checked for membership */ + time_t time; /* last time when the cache was validated */ + PRHashTable *hashtable; /* hash table where this obj is being used */ +} UserCacheObj; + +NSPR_BEGIN_EXTERN_C + +/* Set the number of seconds the cache is valid */ +extern int acl_usr_cache_set_timeout (const int nsec); + +/* Is the cache enabled? */ +extern int acl_usr_cache_enabled(); + +/* initialize user cache */ +extern int acl_usr_cache_init (); + +/* Creates a new user obj entry */ +extern int acl_usr_cache_insert (const char *uid, const char *dbname, + const char *dn, const char *passwd, + const char *group, const SECItem *derCert, + const time_t time); + +/* Add group to the user's cache obj. */ +extern int acl_usr_cache_set_group (const char *uid, const char *dbname, + const char *group, const time_t time); + +/* Add userdn to the user's cache obj. */ +extern int acl_usr_cache_set_userdn (const char *uid, const char *dbname, + const char *userdn, const time_t time); + +/* Returns LAS_EVAL_TRUE if the user's password matches -- also returns the dn */ +extern int acl_usr_cache_passwd_check (const char *uid, const char *dbname, + const char *passwd, + const time_t time, char **dn, + pool_handle_t *pool); + +/* Returns LAS_EVAL_TRUE if the user is a member of the group */ +extern int acl_usr_cache_group_check (const char *uid, const char *dbname, + const char *group, const time_t time); + +/* Returns LAS_EVAL_TRUE if the user is a member of the group */ +extern int acl_usr_cache_group_len_check (const char *uid, const char *dbname, + const char *group, + const int len, + const time_t time); + +/* Returns LAS_EVAL_TRUE if the user's cache is valid and has a group */ +extern int acl_usr_cache_get_group (const char *uid, const char *dbname, + const time_t time, char **group, + pool_handle_t *pool); + +/* Returns LAS_EVAL_TRUE if the user is a member of the group */ +extern int acl_usr_cache_userdn_check (const char *uid, const char *dbname, + const char *userdn, const time_t time); + +/* Returns LAS_EVAL_TRUE if the user's cache is valid and has userdn */ +extern int acl_usr_cache_get_userdn (const char *uid, const char *dbname, + const time_t time, char **userdn, + pool_handle_t *pool); + +/* Creates a new user obj entry for cert to user mapping */ +extern int acl_cert_cache_insert (void *cert, const char *dbname, + const char *uid, const char *dn, + const time_t time); + +/* Returns LAS_EVAL_TRUE if the user's cache is valid and returns uid */ +extern int acl_cert_cache_get_uid (void *cert, const char *dbname, + const time_t time, char **uid, + char **dn, pool_handle_t *pool); + +NSPR_END_EXTERN_C + + +#endif /* ACL_USER_CACHE_H */ diff --git a/include/libadmin/dbtlibadmin.h b/include/libadmin/dbtlibadmin.h new file mode 100644 index 0000000..3bb6f16 --- /dev/null +++ b/include/libadmin/dbtlibadmin.h @@ -0,0 +1,28 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + + +#define LIBRARY_NAME "libadmin" + +static char dbtlibadminid[] = "$DBT: libadmin referenced v1 $"; + +#include "i18n.h" + +BEGIN_STR(libadmin) + ResDef( DBT_LibraryID_, -1, dbtlibadminid )/* extracted from dbtlibadmin.h*/ + ResDef( DBT_help_, 1, " Help " )/*extracted from template.c*/ + ResDef( DBT_ok_, 2, " OK " )/*extracted from template.c*/ + ResDef( DBT_reset_, 3, " Reset " )/*extracted from template.c*/ + ResDef( DBT_done_, 4, " Done " )/*extracted from template.c*/ + ResDef( DBT_cancel_, 5, " Cancel " )/*extracted from template.c*/ +END_STR(libadmin) diff --git a/include/libadmin/libadmin.h b/include/libadmin/libadmin.h new file mode 100644 index 0000000..7db6d13 --- /dev/null +++ b/include/libadmin/libadmin.h @@ -0,0 +1,93 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +/* + * libadmin.h - All functions contained in libadmin.a + * + * All blame goes to Mike McCool + */ + +#ifndef libadmin_h +#define libadmin_h + +#include +#include +#include "base/systems.h" +#include "base/systhr.h" +#include "base/util.h" +#include +#include "prinit.h" +#include "prthread.h" +#include "prlong.h" + +#define NSPR_INIT(Program) (PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 8)) + +NSPR_BEGIN_EXTERN_C + +/* error types */ +#define FILE_ERROR 0 +#define MEMORY_ERROR 1 +#define SYSTEM_ERROR 2 +#define INCORRECT_USAGE 3 +#define ELEM_MISSING 4 +#define REGISTRY_DATABASE_ERROR 5 +#define NETWORK_ERROR 6 +#define GENERAL_FAILURE 7 +#define WARNING 8 + +/* The upper bound on error types */ +#define MAX_ERROR 9 + +/* The default error type (in case something goes wrong */ +#define DEFAULT_ERROR 3 + +#define INFO_IDX_NAME "infowin" +#define INFO_TOPIC_NAME "infotopic" +#define HELP_WIN_OPTIONS "'resizable=1,width=500,height=500'" + +/* Initialize libadmin. Should be called by EVERY CGI. */ +/* util.c */ +NSAPI_PUBLIC int ADM_Init(void); + +/* Since everyone seems to be doing this independently, at least centralize + the code. Useful for onClicks and automatic help */ +NSAPI_PUBLIC char *helpJavaScript(); +NSAPI_PUBLIC char *helpJavaScriptForTopic( char *topic ); + +/* Report an error. Takes 3 args: 1. Category of error + * 2. Some more specific category info (opt) + * 3. A short explanation of the error. + * + * report_warning: same thing except doesn't exit when done whining + */ +/* error.c */ +NSAPI_PUBLIC void output_alert(int type, char *info, char *details, int wait); +NSAPI_PUBLIC void report_error(int type, char *info, char *details); +NSAPI_PUBLIC void report_warning(int type, char *info, char *details); + +/* Word wrap a string to fit into a JavaScript alert box. */ +/* str is the string, width is the width to wrap to, linefeed is the string + * to use as a linefeed. */ +/* util.c */ +#define WORD_WRAP_WIDTH 80 +NSAPI_PUBLIC char *alert_word_wrap(char *str, int width, char *linefeed); + +/* Get the admin/userdb directory. */ +/* util.c */ +NSAPI_PUBLIC char *get_userdb_dir(void); + +NSAPI_PUBLIC char *cookieValue( char *, char * ); + +NSPR_END_EXTERN_C + +#endif /* libadmin_h */ diff --git a/include/netsite.h b/include/netsite.h new file mode 100644 index 0000000..9db5cb1 --- /dev/null +++ b/include/netsite.h @@ -0,0 +1,196 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef NETSITE_H +#define NETSITE_H + +#ifndef NOINTNSAPI +#define INTNSAPI +#endif /* !NOINTNSAPI */ + +/* + * Standard defs for NetSite servers. + */ + +/* +** Macro shorthands for conditional C++ extern block delimiters. +** Don't redefine for compatability with NSPR. +*/ +#ifndef NSPR_BEGIN_EXTERN_C +#ifdef __cplusplus +#define NSPR_BEGIN_EXTERN_C extern "C" { +#define NSPR_END_EXTERN_C } +#else +#define NSPR_BEGIN_EXTERN_C +#define NSPR_END_EXTERN_C +#endif +#endif /* NSPR_BEGIN_EXTERN_C */ +#ifdef __cplusplus +#define EXTERNC extern "C" +#else +#define EXTERNC +#endif + +#ifndef BASE_SYSTEMS_H +#include "base/systems.h" +#endif /* !BASE_SYSTEMS_H */ + +#ifndef VOID +#define VOID void +#endif + +#if !defined (boolean) && !defined (__GNUC__) +typedef int boolean; +#endif + +#define NS_TRUE 1 +#define NS_FALSE 0 + +NSPR_BEGIN_EXTERN_C + +#ifndef APSTUDIO_READONLY_SYMBOLS + +/* Include the public netsite.h definitions */ +#ifndef PUBLIC_NETSITE_H +#ifdef MALLOC_DEBUG +#define NS_MALLOC_DEBUG +#endif /* MALLOC_DEBUG */ +#include "public/netsite.h" +#endif /* PUBLIC_NETSITE_H */ + +#endif /* !APSTUDIO_READONLY_SYMBOLS */ + +/* + * If NS_MALLOC_DEBUG is defined, declare the debug version of the memory + * allocation API. + */ +#ifdef NS_MALLOC_DEBUG +#define PERM_MALLOC(size) INTsystem_malloc_perm(size, __LINE__, __FILE__) +NSAPI_PUBLIC void *INTsystem_malloc_perm(int size, int line, char *file); + +#define PERM_CALLOC(size) INTsystem_calloc_perm(size, __LINE__, __FILE__) +NSAPI_PUBLIC void *INTsystem_calloc_perm(int size, int line, char *file); + +#define PERM_REALLOC(ptr, size) INTsystem_realloc_perm(ptr, size, __LINE__, __FILE__) +NSAPI_PUBLIC void *INTsystem_realloc_perm(void *ptr, int size, int line, char *file); + +#define PERM_FREE(ptr) INTsystem_free_perm((void *) ptr, __LINE__, __FILE__) +NSAPI_PUBLIC void INTsystem_free_perm(void *ptr, int line, char *file); + +#define PERM_STRDUP(ptr) INTsystem_strdup_perm(ptr, __LINE__, __FILE__) +NSAPI_PUBLIC char *INTsystem_strdup_perm(const char *ptr, int line, char *file); +#endif /* NS_MALLOC_DEBUG */ + +/* + * Only the mainline needs to set the malloc key. + */ + +void setThreadMallocKey(int key); + +/* This probably belongs somewhere else, perhaps with a different name */ +NSAPI_PUBLIC char *INTdns_guess_domain(char * hname); + +/* --- Begin public functions --- */ + +#ifdef INTNSAPI + +NSAPI_PUBLIC char *INTsystem_version(); + +/* + Depending on the system, memory allocated via these macros may come from + an arena. If these functions are called from within an Init function, they + will be allocated from permanent storage. Otherwise, they will be freed + when the current request is finished. + */ + +#define MALLOC(size) INTsystem_malloc(size) +NSAPI_PUBLIC void *INTsystem_malloc(int size); + +#define CALLOC(size) INTsystem_calloc(size) +NSAPI_PUBLIC void *INTsystem_calloc(int size); + +#define REALLOC(ptr, size) INTsystem_realloc(ptr, size) +NSAPI_PUBLIC void *INTsystem_realloc(void *ptr, int size); + +#define FREE(ptr) INTsystem_free((void *) ptr) +NSAPI_PUBLIC void INTsystem_free(void *ptr); + +#define STRDUP(ptr) INTsystem_strdup(ptr) +NSAPI_PUBLIC char *INTsystem_strdup(const char *ptr); + +/* + These macros always provide permanent storage, for use in global variables + and such. They are checked at runtime to prevent them from returning NULL. + */ + +#ifndef NS_MALLOC_DEBUG + +#define PERM_MALLOC(size) INTsystem_malloc_perm(size) +NSAPI_PUBLIC void *INTsystem_malloc_perm(int size); + +#define PERM_CALLOC(size) INTsystem_calloc_perm(size) +NSAPI_PUBLIC void *INTsystem_calloc_perm(int size); + +#define PERM_REALLOC(ptr, size) INTsystem_realloc_perm(ptr, size) +NSAPI_PUBLIC void *INTsystem_realloc_perm(void *ptr, int size); + +#define PERM_FREE(ptr) INTsystem_free_perm((void *) ptr) +NSAPI_PUBLIC void INTsystem_free_perm(void *ptr); + +#define PERM_STRDUP(ptr) INTsystem_strdup_perm(ptr) +NSAPI_PUBLIC char *INTsystem_strdup_perm(const char *ptr); + +#endif /* !NS_MALLOC_DEBUG */ + +/* Thread-Private data key index for accessing the thread-private memory pool. + * Each thread creates its own pool for allocating data. The MALLOC/FREE/etc + * macros have been defined to check the thread private data area with the + * thread_malloc_key index to find the address for the pool currently in use. + * + * If a thread wants to use a different pool, it must change the thread-local- + * storage[thread_malloc_key]. + */ + +NSAPI_PUBLIC int INTgetThreadMallocKey(void); + +/* Not sure where to put this. */ +NSAPI_PUBLIC void INTmagnus_atrestart(void (*fn)(void *), void *data); + +#endif /* INTNSAPI */ + +/* --- End public functions --- */ + +NSPR_END_EXTERN_C + +#define system_version_set INTsystem_version_set +#define dns_guess_domain INTdns_guess_domain + +#ifdef INTNSAPI + +#define system_version INTsystem_version +#define system_malloc INTsystem_malloc +#define system_calloc INTsystem_calloc +#define system_realloc INTsystem_realloc +#define system_free INTsystem_free +#define system_strdup INTsystem_strdup +#define system_malloc_perm INTsystem_malloc_perm +#define system_calloc_perm INTsystem_calloc_perm +#define system_realloc_perm INTsystem_realloc_perm +#define system_free_perm INTsystem_free_perm +#define system_strdup_perm INTsystem_strdup_perm +#define getThreadMallocKey INTgetThreadMallocKey +#define magnus_atrestart INTmagnus_atrestart + +#endif /* INTNSAPI */ + +#endif /* NETSITE_H */ diff --git a/include/public/base/systems.h b/include/public/base/systems.h new file mode 100644 index 0000000..535a35c --- /dev/null +++ b/include/public/base/systems.h @@ -0,0 +1,92 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef PUBLIC_BASE_SYSTEMS_H +#define PUBLIC_BASE_SYSTEMS_H + +/* + * File: systems.h + * + * Description: + * + * This file defines various platform-dependent symbols, which are + * used to configure platform-dependent aspects of the API. + */ + +/* --- Begin native platform configuration definitions --- */ + +#if defined(HPUX) + +#define FILE_UNIX +#define FILE_UNIX_MMAP +#define MALLOC_POOLS +#define SEM_FLOCK +/* warning: mmap doesn't work under 9.04 */ +#define SHMEM_UNIX_MMAP +#define ZERO(ptr,len) memset(ptr,0,len) + +#elif defined(SOLARIS) || defined (SOLARISx86) + +#undef FILE_UNIX /* avoid redefinition message */ +#define FILE_UNIX +#define FILE_UNIX_MMAP +#define MALLOC_POOLS +/* The Solaris routines return ENOSPC when too many semaphores are SEM_UNDO. */ +#define SEM_FLOCK +#define SHMEM_UNIX_MMAP +#define ZERO(ptr,len) memset(ptr,0,len) + +#elif defined(SUNOS4) + +#define BSD_FLOCK +#define FILE_UNIX +#define FILE_UNIX_MMAP +#define MALLOC_POOLS +#define SEM_FLOCK +#define SHMEM_UNIX_MMAP +#define ZERO(ptr,len) memset(ptr,0,len) + +#elif defined(Linux) + +#define FILE_UNIX +#define FILE_UNIX_MMAP +#define MALLOC_POOLS +#define SEM_FLOCK +#define SHMEM_UNIX_MMAP +#define ZERO(ptr,len) memset(ptr,0,len) + +#else +#error "Missing defines in ns/netsite/include/public/base/systems.h" +#endif + +#ifndef NSPR_BEGIN_EXTERN_C +#ifdef __cplusplus +#define NSPR_BEGIN_EXTERN_C extern "C" { +#define NSPR_END_EXTERN_C } +#else +#define NSPR_BEGIN_EXTERN_C +#define NSPR_END_EXTERN_C +#endif /* __cplusplus */ +#endif /* !NSPR_BEGIN_EXTERN_C */ + +#ifndef NSAPI_PUBLIC +#define NSAPI_PUBLIC +#endif /* !NSAPI_PUBLIC */ + +#if defined(NEED_STRCASECMP) || defined(NEED_STRNCASECMP) +#ifndef CASECMPARG_T +#define CASECMPARG_T const +#endif /* !CASECMPARG_T */ +#endif /* NEED_STRCASECMP || NEED_STRNCASECMP */ + +#endif /* PUBLIC_BASE_SYSTEMS_H */ diff --git a/include/public/netsite.h b/include/public/netsite.h new file mode 100644 index 0000000..40211a6 --- /dev/null +++ b/include/public/netsite.h @@ -0,0 +1,29 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef PUBLIC_NETSITE_H +#define PUBLIC_NETSITE_H + +/* + * File: netsite.h + * + * Description: + * + * Deprecated include file. + */ + +#ifndef PUBLIC_NSAPI_H +#include "nsapi.h" +#endif /* !PUBLIC_NSAPI_H */ + +#endif /* !PUBLIC_NETSITE_H */ diff --git a/include/public/nsacl/aclapi.h b/include/public/nsacl/aclapi.h new file mode 100644 index 0000000..1ff8ce1 --- /dev/null +++ b/include/public/nsacl/aclapi.h @@ -0,0 +1,387 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef PUBLIC_NSACL_ACLAPI_H +#define PUBLIC_NSACL_ACLAPI_H + +/* + * File: aclapi.h + * + * Description: + * + * This file defines the functions available in the ACL API. + */ + +#ifndef PUBLIC_NSACL_NSERRDEF_H +#include "nserrdef.h" +#endif /* !PUBLIC_NSACL_NSERRDEF_H */ + +#ifndef PUBLIC_NSAPI_H +#include "public/nsapi.h" +#endif /* !PUBLIC_NSAPI_H */ + +#ifndef PUBLIC_NSACL_PLISTDEF_H +#include "plistdef.h" +#endif /* !PUBLIC_NSACL_PLISTDEF_H */ + +#ifndef PUBLIC_NSACL_ACLDEF_H +#include "acldef.h" +#endif /* !PUBLIC_NSACL_ACLDEF_H */ + +NSPR_BEGIN_EXTERN_C + +typedef struct ACLDispatchVector ACLDispatchVector_t; +struct ACLDispatchVector { + + /* Error frame stack support */ + + void (*f_nserrDispose)(NSErr_t * errp); + NSEFrame_t *(*f_nserrFAlloc)(NSErr_t * errp); + void (*f_nserrFFree)(NSErr_t * errp, NSEFrame_t * efp); + NSEFrame_t *(*f_nserrGenerate)(NSErr_t * errp, long retcode, + long errorid, const char * program, + int errc, ...); + + /* Property list support + * The Property List facility makes extensive use of pointers to + * opaque structures. As such, PLists cannot be marshalled. WAI-style + * ACL APIs in future releases will therefore not be using PLists. + * However the C API documented here may continue to be supported + * in future releases. + */ + + int (*f_PListAssignValue)(PList_t plist, const char *pname, + const void *pvalue, PList_t ptype); + PList_t (*f_PListCreate)(pool_handle_t *mempool, + int resvprop, int maxprop, int flags); + int (*f_PListDefProp)(PList_t plist, int pindex, + const char *pname, const int flags); + const void * (*f_PListDeleteProp)(PList_t plist, int pindex, + const char *pname); + int (*f_PListFindValue)(PList_t plist, + const char *pname, void **pvalue, PList_t *type); + int (*f_PListInitProp)(PList_t plist, int pindex, const char *pname, + const void *pvalue, PList_t ptype); + PList_t (*f_PListNew)(pool_handle_t *mempool); + void (*f_PListDestroy)(PList_t plist); + int (*f_PListGetValue)(PList_t plist, + int pindex, void **pvalue, PList_t *type); + int (*f_PListNameProp)(PList_t plist, int pindex, const char *pname); + int (*f_PListSetType)(PList_t plist, int pindex, PList_t type); + int (*f_PListSetValue)(PList_t plist, + int pindex, const void *pvalue, PList_t type); + void (*f_PListEnumerate)(PList_t plist, PListFunc_t *user_func, + void *user_data); + PList_t (*f_PListDuplicate)(PList_t plist, + pool_handle_t *new_mempool, int flags); + pool_handle_t *(*f_PListGetPool)(PList_t plist); + + /* ACL attribute handling */ + + int (*f_ACL_LasRegister)(NSErr_t *errp, const char *attr_name, + LASEvalFunc_t eval_func, + LASFlushFunc_t flush_func); + + /* method/dbtype registration routines */ + + int (*f_ACL_MethodRegister)(NSErr_t *errp, const char *name, + ACLMethod_t *t); + int (*f_ACL_MethodIsEqual)(NSErr_t *errp, + const ACLMethod_t t1, const ACLMethod_t t2); + int (*f_ACL_MethodNameIsEqual)(NSErr_t *errp, + const ACLMethod_t t, const char *name); + int (*f_ACL_MethodFind)(NSErr_t *errp, const char *name, ACLMethod_t *t); + ACLMethod_t (*f_ACL_MethodGetDefault)(NSErr_t *errp); + int (*f_ACL_MethodSetDefault)(NSErr_t *errp, const ACLMethod_t t); + int (*f_ACL_AuthInfoGetMethod)(NSErr_t *errp, + PList_t auth_info, ACLMethod_t *t); + + int (*f_ACL_DbTypeRegister)(NSErr_t *errp, const char *name, + DbParseFn_t func, ACLDbType_t *t); + int (*f_ACL_DbTypeIsEqual)(NSErr_t *errp, + const ACLDbType_t t1, const ACLDbType_t t2); + int (*f_ACL_DbTypeNameIsEqual)(NSErr_t * errp, + const ACLDbType_t t, const char *name); + int (*f_ACL_DbTypeFind)(NSErr_t *errp, const char *name, ACLDbType_t *t); + ACLDbType_t (*f_ACL_DbTypeGetDefault)(NSErr_t *errp); + int (*f_ACL_AuthInfoGetDbType)(NSErr_t *errp, + PList_t auth_info, ACLDbType_t *t); + int (*f_ACL_DbTypeIsRegistered)(NSErr_t *errp, const ACLDbType_t dbtype); + DbParseFn_t (*f_ACL_DbTypeParseFn)(NSErr_t *errp, + const ACLDbType_t dbtype); + + int (*f_ACL_AttrGetterRegister)(NSErr_t *errp, + const char *attr, ACLAttrGetterFn_t fn, + ACLMethod_t m, ACLDbType_t d, + int position, void *arg); + + int (*f_ACL_ModuleRegister)(NSErr_t *errp, const char *moduleName, + AclModuleInitFunc func); + int (*f_ACL_GetAttribute)(NSErr_t *errp, const char *attr, void **val, + PList_t subject, PList_t resource, + PList_t auth_info, PList_t global_auth); + int (*f_ACL_DatabaseRegister)(NSErr_t *errp, ACLDbType_t dbtype, + const char *dbname, const char *url, + PList_t plist); + int (*f_ACL_DatabaseFind)(NSErr_t *errp, const char *dbname, + ACLDbType_t *dbtype, void **db); + int (*f_ACL_DatabaseSetDefault)(NSErr_t *errp, const char *dbname); + int (*f_ACL_LDAPDatabaseHandle )(NSErr_t *errp, const char *dbname, + LDAP **ld, char **basedn); + int (*f_ACL_AuthInfoGetDbname)(PList_t auth_info, char **dbname); + int (*f_ACL_CacheFlushRegister)(AclCacheFlushFunc_t func); + int (*f_ACL_CacheFlush)(void); + + /* ACL language and file interfaces */ + + ACLListHandle_t * (*f_ACL_ParseFile)(NSErr_t *errp, char *filename); + ACLListHandle_t * (*f_ACL_ParseString)(NSErr_t *errp, char *buffer); + int (*f_ACL_WriteString)(NSErr_t *errp, char **acl, + ACLListHandle_t *acllist); + int (*f_ACL_WriteFile)(NSErr_t *errp, char *filename, + ACLListHandle_t *acllist); + int (*f_ACL_FileRenameAcl)(NSErr_t *errp, char *filename, + char *acl_name, char *new_acl_name, int flags); + int (*f_ACL_FileDeleteAcl)(NSErr_t *errp, char *filename, + char *acl_name, int flags); + int (*f_ACL_FileGetAcl)(NSErr_t *errp, char *filename, + char *acl_name, char **acl_text, int flags); + int (*f_ACL_FileSetAcl)(NSErr_t *errp, char *filename, + char *acl_text, int flags); + + /* ACL Expression construction interfaces + * These are low-level interfaces that may be useful to those who are not + * using the ONE ACL syntax, but want to use the ONE ACL evaluation + * routines. By their low-level nature, future support of these APIs + * cannot be guaranteed. Use ACL_ParseFile and ACL_ParseString wherever + * possible. + */ + + ACLExprHandle_t *(*f_ACL_ExprNew)(const ACLExprType_t expr_type); + void (*f_ACL_ExprDestroy)(ACLExprHandle_t *expr); + int (*f_ACL_ExprSetPFlags)(NSErr_t *errp, + ACLExprHandle_t *expr, PFlags_t flags); + int (*f_ACL_ExprClearPFlags)(NSErr_t *errp, ACLExprHandle_t *expr); + int (*f_ACL_ExprTerm)(NSErr_t *errp, ACLExprHandle_t *acl_expr, + const char *attr_name, CmpOp_t cmp, + char *attr_pattern); + int (*f_ACL_ExprNot)(NSErr_t *errp, ACLExprHandle_t *acl_expr); + int (*f_ACL_ExprAnd)(NSErr_t *errp, ACLExprHandle_t *acl_expr); + int (*f_ACL_ExprOr)(NSErr_t *errp, ACLExprHandle_t *acl_expr); + int (*f_ACL_ExprAddAuthInfo)(ACLExprHandle_t *expr, PList_t auth_info); + int (*f_ACL_ExprAddArg)(NSErr_t *errp, ACLExprHandle_t *expr, const char *arg); + int (*f_ACL_ExprSetDenyWith)(NSErr_t *errp, ACLExprHandle_t *expr, + char *deny_type, char *deny_response); + int (*f_ACL_ExprGetDenyWith)(NSErr_t *errp, ACLExprHandle_t *expr, + char **deny_type, char **deny_response); + int (*f_ACL_ExprAppend)(NSErr_t *errp, + ACLHandle_t *acl, ACLExprHandle_t *expr); + + /* ACL manipulation */ + + ACLHandle_t * (*f_ACL_AclNew)(NSErr_t *errp, char *tag); + void (*f_ACL_AclDestroy)(NSErr_t *errp, ACLHandle_t *acl); + + /* ACL list manipulation */ + + ACLListHandle_t * (*f_ACL_ListNew)(NSErr_t *errp); + int (*f_ACL_ListConcat)(NSErr_t *errp, ACLListHandle_t *acl_list1, + ACLListHandle_t *acl_list2, int flags); + int (*f_ACL_ListAppend)(NSErr_t *errp, ACLListHandle_t *acllist, + ACLHandle_t *acl, int flags); + void (*f_ACL_ListDestroy)(NSErr_t *errp, ACLListHandle_t *acllist); + ACLHandle_t * (*f_ACL_ListFind)(NSErr_t *errp, ACLListHandle_t *acllist, + char *aclname, int flags); + int (*f_ACL_ListAclDelete)(NSErr_t *errp, ACLListHandle_t *acl_list, + char *acl_name, int flags); + int (*f_ACL_ListGetNameList)(NSErr_t *errp, ACLListHandle_t *acl_list, + char ***name_list); + int (*f_ACL_NameListDestroy)(NSErr_t *errp, char **name_list); + + /* ACL evaluation */ + + int (*f_ACL_EvalTestRights)(NSErr_t *errp, ACLEvalHandle_t *acleval, + const char **rights, const char **map_generic, + char **deny_type, char **deny_response, + char **acl_tag, int *expr_num); + ACLEvalHandle_t * (*f_ACL_EvalNew)(NSErr_t *errp, pool_handle_t *pool); + void (*f_ACL_EvalDestroy)(NSErr_t *errp, + pool_handle_t *pool, ACLEvalHandle_t *acleval); + int (*f_ACL_EvalSetACL)(NSErr_t *errp, ACLEvalHandle_t *acleval, + ACLListHandle_t *acllist); + PList_t (*f_ACL_EvalGetSubject)(NSErr_t *errp, ACLEvalHandle_t *acleval); + int (*f_ACL_EvalSetSubject)(NSErr_t *errp, + ACLEvalHandle_t *acleval, PList_t subject); + PList_t (*f_ACL_EvalGetResource)(NSErr_t *errp, ACLEvalHandle_t *acleval); + int (*f_ACL_EvalSetResource)(NSErr_t *errp, + ACLEvalHandle_t *acleval, PList_t resource); + + /* Access to critical section for ACL cache */ + + void (*f_ACL_CritEnter)(void); + void (*f_ACL_CritExit)(void); + + /* Miscellaneous functions */ + const char * (*f_ACL_AclGetTag)(ACLHandle_t *acl); + ACLHandle_t * (*f_ACL_ListGetFirst)(ACLListHandle_t *acl_list, + ACLListEnum_t *acl_enum); + ACLHandle_t * (*f_ACL_ListGetNext)(ACLListHandle_t *acl_list, + ACLListEnum_t *acl_enum); + + /* Functions added after ES 3.0 release */ + const char * (*f_ACL_DatabaseGetDefault)(NSErr_t *errp); + int (*f_ACL_SetDefaultResult)(NSErr_t *errp, ACLEvalHandle_t *acleval, + int result); + int (*f_ACL_GetDefaultResult)(ACLEvalHandle_t *acleval); +}; + +NSAPI_PUBLIC extern ACLDispatchVector_t *__nsacl_table; + + +#ifndef INTNSACL + +#define nserrDispose (*__nsacl_table->f_nserrDispose) +#define nserrFAlloc (*__nsacl_table->f_nserrFAlloc) +#define nserrFFree (*__nsacl_table->f_nserrFFree) +#define nserrGenerate (*__nsacl_table->f_nserrGenerate) + + /* Property list support + * The Property List facility makes extensive use of pointers to + * opaque structures. As such, PLists cannot be marshalled. WAI-style + * ACL APIs in future releases will therefore not be using PLists. + * However the C API documented here may continue to be supported + * in future releases. + */ + +#define PListAssignValue (*__nsacl_table->f_PListAssignValue) +#define PListCreate (*__nsacl_table->f_PListCreate) +#define PListDefProp (*__nsacl_table->f_PListDefProp) +#define PListDeleteProp (*__nsacl_table->f_PListDeleteProp) +#define PListFindValue (*__nsacl_table->f_PListFindValue) +#define PListInitProp (*__nsacl_table->f_PListInitProp) +#define PListNew (*__nsacl_table->f_PListNew) +#define PListDestroy (*__nsacl_table->f_PListDestroy) +#define PListGetValue (*__nsacl_table->f_PListGetValue) +#define PListNameProp (*__nsacl_table->f_PListNameProp) +#define PListSetType (*__nsacl_table->f_PListSetType) +#define PListSetValue (*__nsacl_table->f_PListSetValue) +#define PListEnumerate (*__nsacl_table->f_PListEnumerate) +#define PListDuplicate (*__nsacl_table->f_PListDuplicate) +#define PListGetPool (*__nsacl_table->f_PListGetPool) + + /* ACL attribute handling */ + +#define ACL_LasRegister (*__nsacl_table->f_ACL_LasRegister) + + /* method/dbtype registration routines */ + +#define ACL_MethodRegister (*__nsacl_table->f_ACL_MethodRegister) +#define ACL_MethodIsEqual (*__nsacl_table->f_ACL_MethodIsEqual) +#define ACL_MethodNameIsEqual (*__nsacl_table->f_ACL_MethodNameIsEqual) +#define ACL_MethodFind (*__nsacl_table->f_ACL_MethodFind) +#define ACL_MethodGetDefault (*__nsacl_table->f_ACL_MethodGetDefault) +#define ACL_MethodSetDefault (*__nsacl_table->f_ACL_MethodSetDefault) +#define ACL_AuthInfoGetMethod (*__nsacl_table->f_ACL_AuthInfoGetMethod) +#define ACL_DbTypeRegister (*__nsacl_table->f_ACL_DbTypeRegister) +#define ACL_DbTypeIsEqual (*__nsacl_table->f_ACL_DbTypeIsEqual) +#define ACL_DbTypeNameIsEqual (*__nsacl_table->f_ACL_DbTypeNameIsEqual) +#define ACL_DbTypeFind (*__nsacl_table->f_ACL_DbTypeFind) +#define ACL_DbTypeGetDefault (*__nsacl_table->f_ACL_DbTypeGetDefault) +#define ACL_AuthInfoGetDbType (*__nsacl_table->f_ACL_AuthInfoGetDbType) +#define ACL_DbTypeIsRegistered (*__nsacl_table->f_ACL_DbTypeIsRegistered) +#define ACL_DbTypeParseFn (*__nsacl_table->f_ACL_DbTypeParseFn) +#define ACL_AttrGetterRegister (*__nsacl_table->f_ACL_AttrGetterRegister) +#define ACL_ModuleRegister (*__nsacl_table->f_ACL_ModuleRegister) +#define ACL_GetAttribute (*__nsacl_table->f_ACL_GetAttribute) +#define ACL_DatabaseRegister (*__nsacl_table->f_ACL_DatabaseRegister) +#define ACL_DatabaseFind (*__nsacl_table->f_ACL_DatabaseFind) +#define ACL_DatabaseSetDefault (*__nsacl_table->f_ACL_DatabaseSetDefault) +#define ACL_LDAPDatabaseHandle (*__nsacl_table->f_ACL_LDAPDatabaseHandle) +#define ACL_AuthInfoGetDbname (*__nsacl_table->f_ACL_AuthInfoGetDbname) +#define ACL_CacheFlushRegister (*__nsacl_table->f_ACL_CacheFlushRegister) +#define ACL_CacheFlush (*__nsacl_table->f_ACL_CacheFlush) + + /* ACL language and file interfaces */ + +#define ACL_ParseString (*__nsacl_table->f_ACL_ParseString) + + /* ACL Expression construction interfaces + * These are low-level interfaces that may be useful to those who are not + * using the ONE ACL syntax, but want to use the ONE ACL evaluation + * routines. By their low-level nature, future support of these APIs + * cannot be guaranteed. Use ACL_ParseFile and ACL_ParseString wherever + * possible. + */ + +#define ACL_ExprNew (*__nsacl_table->f_ACL_ExprNew) +#define ACL_ExprDestroy (*__nsacl_table->f_ACL_ExprDestroy) +#define ACL_ExprSetPFlags (*__nsacl_table->f_ACL_ExprSetPFlags) +#define ACL_ExprClearPFlags (*__nsacl_table->f_ACL_ExprClearPFlags) +#define ACL_ExprTerm (*__nsacl_table->f_ACL_ExprTerm) +#define ACL_ExprNot (*__nsacl_table->f_ACL_ExprNot) +#define ACL_ExprAnd (*__nsacl_table->f_ACL_ExprAnd) +#define ACL_ExprOr (*__nsacl_table->f_ACL_ExprOr) +#define ACL_ExprAddAuthInfo (*__nsacl_table->f_ACL_ExprAddAuthInfo) +#define ACL_ExprAddArg (*__nsacl_table->f_ACL_ExprAddArg) +#define ACL_ExprSetDenyWith (*__nsacl_table->f_ACL_ExprSetDenyWith) +#define ACL_ExprGetDenyWith (*__nsacl_table->f_ACL_ExprGetDenyWith) +#define ACL_ExprAppend (*__nsacl_table->f_ACL_ExprAppend) + + /* ACL manipulation */ + +#define ACL_AclNew (*__nsacl_table->f_ACL_AclNew) +#define ACL_AclDestroy (*__nsacl_table->f_ACL_AclDestroy) + + /* ACL list manipulation */ + +#define ACL_ListNew (*__nsacl_table->f_ACL_ListNew) +#define ACL_ListConcat (*__nsacl_table->f_ACL_ListConcat) +#define ACL_ListAppend (*__nsacl_table->f_ACL_ListAppend) +#define ACL_ListDestroy (*__nsacl_table->f_ACL_ListDestroy) +#define ACL_ListFind (*__nsacl_table->f_ACL_ListFind) +#define ACL_ListAclDelete (*__nsacl_table->f_ACL_ListAclDelete) +#define ACL_ListGetNameList (*__nsacl_table->f_ACL_ListGetNameList) +#define ACL_NameListDestroy (*__nsacl_table->f_ACL_NameListDestroy) + + /* ACL evaluation */ + +#define ACL_EvalTestRights (*__nsacl_table->f_ACL_EvalTestRights) +#define ACL_EvalNew (*__nsacl_table->f_ACL_EvalNew) +#define ACL_EvalDestroy (*__nsacl_table->f_ACL_EvalDestroy) +#define ACL_EvalSetACL (*__nsacl_table->f_ACL_EvalSetACL) +#define ACL_EvalGetSubject (*__nsacl_table->f_ACL_EvalGetSubject) +#define ACL_EvalSetSubject (*__nsacl_table->f_ACL_EvalSetSubject) +#define ACL_EvalGetResource (*__nsacl_table->f_ACL_EvalGetResource) +#define ACL_EvalSetResource (*__nsacl_table->f_ACL_EvalSetResource) + + /* Access to critical section for ACL cache */ + +#define ACL_CritEnter (*__nsacl_table->f_ACL_CritEnter) +#define ACL_CritExit (*__nsacl_table->f_ACL_CritExit) + + /* Miscellaneous functions */ + +#define ACL_AclGetTag (*__nsacl_table->f_ACL_AclGetTag) +#define ACL_ListGetFirst (*__nsacl_table->f_ACL_ListGetFirst) +#define ACL_ListGetNext (*__nsacl_table->f_ACL_ListGetNext) + + /* Functions added after ES 3.0 release */ +#define ACL_DatabaseGetDefault (*__nsacl_table->f_ACL_DatabaseGetDefault) +#define ACL_SetDefaultResult (*__nsacl_table->f_ACL_SetDefaultResult) +#define ACL_GetDefaultResult (*__nsacl_table->f_ACL_GetDefaultResult) + +#endif /* !INTNSACL */ + +NSPR_END_EXTERN_C + +#endif /* !PUBLIC_NSACL_ACLAPI_H */ diff --git a/include/public/nsacl/acldef.h b/include/public/nsacl/acldef.h new file mode 100644 index 0000000..a621931 --- /dev/null +++ b/include/public/nsacl/acldef.h @@ -0,0 +1,473 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef PUBLIC_NSACL_ACLDEF_H +#define PUBLIC_NSACL_ACLDEF_H + +/* + * File: acldef.h + * + * Description: + * + * This file contains constant and type definitions for the ACL API. + */ + +#ifndef PUBLIC_NSACL_NSERRDEF_H +#include "nserrdef.h" +#endif /* !PUBLIC_NSACL_NSERRDEF_H */ + +#ifndef PUBLIC_NSACL_PLISTDEF_H +#include "plistdef.h" +#endif /* !PUBLIC_NSACL_PLISTDEF_H */ + +NSPR_BEGIN_EXTERN_C + +/* + * Type: ACLCachable_t + * + * Description: + * + * This type is used to specify whether and how long something + * may be safely cached. A value of zero (ACL_NOT_CACHABLE) + * indicates that the item is not cachable. Any other value is + * a time, in seconds since 00:00:00 UTC, January 1, 1970, after + * which the cached information should be discarded. + */ + +typedef unsigned long ACLCachable_t; + +#define ACL_NOT_CACHABLE 0 +#define ACL_INDEF_CACHABLE ((unsigned long)(-1)) + +/* + * Type: ACLListHandle_t + * + * Description: + * + * This type represents a list of ACLs in their in-memory form. + */ + +typedef struct ACLListHandle ACLListHandle_t; + +/* The object has been checked for ACLs and has none attached */ +#define ACL_LIST_NO_ACLS ((ACLListHandle_t *)-1) + +/* + * Type: ACLHandle_t + * + * Description: + * + * This type represents the in-memory form of an ACL. + */ + +typedef struct ACLHandle ACLHandle_t; + +/* + * Type: ACLListEnum_t + * + * Description: + * + * This type contains the state of an ACL list enumeration. + */ + +typedef void *ACLListEnum_t; + +/* + * Type: ACLExprHandle_t + * + * Description: + * + * This type represents a single ACL entry, e.g. allow, deny, etc. + */ + +typedef struct ACLExprHandle ACLExprHandle_t; + +/* + * Type: ACLEvalHandle_t + * + * Description: + * + * This type represents an ACL evaluation context, which includes + * an ACL list and property lists for the subject and resource. + */ + +typedef struct ACLEvalHandle ACLEvalHandle_t; + +/* + * Type: PFlags_t + * + * Description: + * + * This type represents a set of processing flags for an ACL entry. + */ +typedef int PFlags_t; + +#define ACL_PFLAG_ABSOLUTE 0x1 +#define ACL_PFLAG_TERMINAL 0x2 +#define ACL_PFLAG_CONTENT 0x4 + +#define IS_ABSOLUTE(x) ((x) & ACL_PFLAG_ABSOLUTE) +#define IS_STATIC(x) ((x) & ACL_PFLAG_STATIC) +#define IS_CONTENT(x) ((x) & ACL_PFLAG_CONTENT) + +/* + * Type: CmpOp_t + * + * Description: + * + * This type represents a comparison operator in an ACL attribute + * expression. + */ +typedef enum { + CMP_OP_EQ, + CMP_OP_NE, + CMP_OP_GT, + CMP_OP_LT, + CMP_OP_GE, + CMP_OP_LE + } CmpOp_t; + +/* + * Type: ACLExprType_t + * + * Description: + * + * This type represents the type of an ACL entry. + */ +typedef enum { + ACL_EXPR_TYPE_ALLOW, + ACL_EXPR_TYPE_DENY, + ACL_EXPR_TYPE_AUTH, + ACL_EXPR_TYPE_RESPONSE + } ACLExprType_t; + +/* + * Type: ACLEvalRes_t + * + * Description: + * + * This type represents the result of ACL evaluation. + */ +typedef enum { + ACL_RES_ALLOW, + ACL_RES_DENY, + ACL_RES_FAIL, + ACL_RES_INVALID, + ACL_RES_NONE + } ACLEvalRes_t; + +/* + * Type: ACLMethod_t + * + * Description: + * + * This type represents a reference to an authentication method. + */ +typedef void * ACLMethod_t; + +#define ACL_METHOD_ANY ((ACLMethod_t)-1) +#define ACL_METHOD_INVALID ((ACLMethod_t)-2) + +/* + * Type: ACLDbType_t + * + * Description: + * + * This type represents a reference to a type of authentication + * database. + */ +typedef void * ACLDbType_t; + +#define ACL_DBTYPE_ANY ((ACLDbType_t)-1) +#define ACL_DBTYPE_INVALID ((ACLDbType_t)-2) + +/* + * Type: ACLAttrGetterFn_t + * + * Description: + * + * This type describes a kind of callback function that obtains + * a value for an ACL attribute and enters the attribute and value + * into the subject property list. + */ +typedef int (*ACLAttrGetterFn_t)(NSErr_t *errp, PList_t subject, + PList_t resource, PList_t auth_info, + PList_t global_auth, void *arg); + +typedef struct ACLAttrGetter ACLAttrGetter_t; +typedef void *ACLAttrGetterList_t; + +/* + * Type: AclModuleInitFunc + * + * Description: + * + * This type describes a kind of callback function that is + * specified to ACL_ModuleRegister() and called from there. + * The function should return 0 on success and non-zero on + * failure. + */ +typedef int (*AclModuleInitFunc)(NSErr_t *errp); + +/* + * Type: DbParseFn_t + * + * Description: + * + * This type describes a kind of callback function that parses + * a reference to an authentication database of a particular + * database type. It is called when ACL_DatabaseRegister() is + * called for a database which is that database type. + * The function should return 0 on success and non-zero on + * failure. + */ +typedef int (*DbParseFn_t)(NSErr_t *errp, ACLDbType_t dbtype, + const char *name, const char *url, + PList_t plist, void **db); + +/* + * Type: AclCacheFlushFunc_t + * + * Description: + * + * This type describes a kind of callback function that is called + * when ACL_CacheFlush() is called. + */ +typedef int (*AclCacheFlushFunc_t)(void); + +/* + * Type: LASEvalFunc_t + * + * Description: + * + * This type describes a kind of callback function that is called + * to evaluate an attribute value expression in an ACL statement. + */ +typedef int (*LASEvalFunc_t)(NSErr_t *errp, char *attr_name, + CmpOp_t comparator, char *attr_pattern, + ACLCachable_t *cachable, void **cookie, + PList_t subject, PList_t resource, + PList_t auth_info, PList_t global_auth); + +/* + * Type: LASFlushFunc_t + * + * Description: + * + * This type describes a kind of callback function that is called + * when a previously cached LAS cookie is being flushed from + * the ACL cache. + */ +typedef void (*LASFlushFunc_t)(void **cookie); + +/* + * Type: LDAP + * + * Description: + * + * This is an opaque type that represents an open LDAP connection. + * It is used mostly via the LDAP SDK API. + * Include the file before including this file if you wish to + * use the function ACL_LDAPDatabaseHandle. + */ +#ifndef _LDAP_H +typedef struct ldap LDAP; +#endif /* _LDAP_H */ + + +/* Flags to ACL_ListFind */ +#define ACL_CASE_INSENSITIVE 0x1 +#define ACL_CASE_SENSITIVE 0x2 + +#define ACL_MAX_TEST_RIGHTS 32 +#define ACL_MAX_GENERIC 32 + +/* + * ACLERRFAIL -- Use this as an 'retcode' argument to nserrGenerate. + */ +#define ACLERRFAIL -11 + + +/* + * Command values for the "position" argument to ACL_RegisterGetter + * Any positive >0 value is the specific position in the list to insert + * the new function. + */ +#define ACL_AT_FRONT 0 +#define ACL_AT_END -1 +#define ACL_REPLACE_ALL -2 +#define ACL_REPLACE_MATCHING -3 + +#define ACL_ATTR_GROUP "group" +#define ACL_ATTR_GROUP_INDEX 1 +#define ACL_ATTR_RAW_USER_LOGIN "user-login" +#define ACL_ATTR_RAW_USER_LOGIN_INDEX 2 +#define ACL_ATTR_AUTH_USER "auth-user" +#define ACL_ATTR_AUTH_USER_INDEX 3 +#define ACL_ATTR_AUTH_TYPE "auth-type" +#define ACL_ATTR_AUTH_TYPE_INDEX 4 +#define ACL_ATTR_AUTH_DB "auth-db" +#define ACL_ATTR_AUTH_DB_INDEX 5 +#define ACL_ATTR_AUTH_PASSWORD "auth-password" +#define ACL_ATTR_AUTH_PASSWORD_INDEX 6 +#define ACL_ATTR_USER "user" +#define ACL_ATTR_USER_INDEX 7 +#define ACL_ATTR_PASSWORD "pw" +#define ACL_ATTR_PASSWORD_INDEX 8 +#define ACL_ATTR_USERDN "userdn" +#define ACL_ATTR_USERDN_INDEX 9 +#define ACL_ATTR_RAW_USER "raw-user" +#define ACL_ATTR_RAW_USER_INDEX 10 +#define ACL_ATTR_RAW_PASSWORD "raw-pw" +#define ACL_ATTR_RAW_PASSWORD_INDEX 11 +#define ACL_ATTR_USER_ISMEMBER "user-ismember" +#define ACL_ATTR_USER_ISMEMBER_INDEX 12 +#define ACL_ATTR_DATABASE "database" +#define ACL_ATTR_DATABASE_INDEX 13 +#define ACL_ATTR_DBTYPE "dbtype" +#define ACL_ATTR_DBTYPE_INDEX 14 +#define ACL_ATTR_DBNAME "dbname" +#define ACL_ATTR_DBNAME_INDEX 15 +#define ACL_ATTR_DATABASE_URL "url" +#define ACL_ATTR_DATABASE_URL_INDEX 16 +#define ACL_ATTR_METHOD "method" +#define ACL_ATTR_METHOD_INDEX 17 +#define ACL_ATTR_AUTHTYPE "authtype" +#define ACL_ATTR_AUTHTYPE_INDEX 18 +#define ACL_ATTR_AUTHORIZATION "authorization" +#define ACL_ATTR_AUTHORIZATION_INDEX 19 +#define ACL_ATTR_PARSEFN "parsefn" +#define ACL_ATTR_PARSEFN_INDEX 20 +#define ACL_ATTR_ATTRIBUTE "attr" +#define ACL_ATTR_ATTRIBUTE_INDEX 21 +#define ACL_ATTR_GETTERFN "getterfunc" +#define ACL_ATTR_GETTERFN_INDEX 22 +#define ACL_ATTR_IP "ip" +#define ACL_ATTR_IP_INDEX 23 +#define ACL_ATTR_DNS "dns" +#define ACL_ATTR_DNS_INDEX 24 +#define ACL_ATTR_MODULE "module" +#define ACL_ATTR_MODULE_INDEX 25 +#define ACL_ATTR_MODULEFUNC "func" +#define ACL_ATTR_MODULEFUNC_INDEX 26 +#define ACL_ATTR_GROUPS "groups" +#define ACL_ATTR_GROUPS_INDEX 27 +#define ACL_ATTR_IS_VALID_PASSWORD "isvalid-password" +#define ACL_ATTR_IS_VALID_PASSWORD_INDEX 28 +#define ACL_ATTR_CERT2USER "cert2user" +#define ACL_ATTR_CERT2USER_INDEX 29 +#define ACL_ATTR_USER_CERT "cert" +#define ACL_ATTR_USER_CERT_INDEX 30 +#define ACL_ATTR_PROMPT "prompt" +#define ACL_ATTR_PROMPT_INDEX 31 +#define ACL_ATTR_TIME "time" +#define ACL_ATTR_TIME_INDEX 32 +#define ACL_ATTR_USERS_GROUP "users-group" +#define ACL_ATTR_USERS_GROUP_INDEX 33 +#define ACL_ATTR_SESSION "session" /* subject property */ +#define ACL_ATTR_SESSION_INDEX 34 +#define ACL_ATTR_REQUEST "request" /* resource property */ +#define ACL_ATTR_REQUEST_INDEX 35 +#define ACL_ATTR_ERROR "error" +#define ACL_ATTR_ERROR_INDEX 36 +#define ACL_ATTR_PROGRAMS "programs" /* resource property */ +#define ACL_ATTR_PROGRAMS_INDEX 37 +#define ACL_ATTR_ACCEL_AUTH "accel-authorization" +#define ACL_ATTR_ACCEL_AUTH_INDEX 38 +#define ACL_ATTR_WWW_AUTH_PROMPT "www-auth-prompt" +#define ACL_ATTR_WWW_AUTH_PROMPT_INDEX 39 +#define ACL_ATTR_OWNER "owner" +#define ACL_ATTR_OWNER_INDEX 40 +#define ACL_ATTR_IS_OWNER "is-owner" +#define ACL_ATTR_IS_OWNER_INDEX 41 +#define ACL_ATTR_CACHED_USER "cached-user" +#define ACL_ATTR_CACHED_USER_INDEX 42 +#define ACL_ATTR_USER_EXISTS "user-exists" +#define ACL_ATTR_USER_EXISTS_INDEX 43 + +/* Must be 1 larger than the highest index used */ +#define ACL_ATTR_INDEX_MAX 44 + +#ifdef ALLOCATE_ATTR_TABLE +/* Must be in the same order as the index numbers */ +const char *ACLAttrTable[] = { + NULL, /* 0 */ +/* Don't have one numbered 0 */ + ACL_ATTR_GROUP, /* 1 */ + ACL_ATTR_RAW_USER_LOGIN, /* 2 */ + ACL_ATTR_AUTH_USER, /* 3 */ + ACL_ATTR_AUTH_TYPE, /* 4 */ + ACL_ATTR_AUTH_DB, /* 5 */ + ACL_ATTR_AUTH_PASSWORD, /* 6 */ + ACL_ATTR_USER, /* 7 */ + ACL_ATTR_PASSWORD, /* 8 */ + ACL_ATTR_USERDN, /* 9 */ + ACL_ATTR_RAW_USER, /* 10 */ + ACL_ATTR_RAW_PASSWORD, /* 11 */ + ACL_ATTR_USER_ISMEMBER, /* 12 */ + ACL_ATTR_DATABASE, /* 13 */ + ACL_ATTR_DBTYPE, /* 14 */ + ACL_ATTR_DBNAME, /* 15 */ + ACL_ATTR_DATABASE_URL, /* 16 */ + ACL_ATTR_METHOD, /* 17 */ + ACL_ATTR_AUTHTYPE, /* 18 */ + ACL_ATTR_AUTHORIZATION, /* 19 */ + ACL_ATTR_PARSEFN, /* 20 */ + ACL_ATTR_ATTRIBUTE, /* 21 */ + ACL_ATTR_GETTERFN, /* 22 */ + ACL_ATTR_IP, /* 23 */ + ACL_ATTR_DNS, /* 24 */ + ACL_ATTR_MODULE, /* 25 */ + ACL_ATTR_MODULEFUNC, /* 26 */ + ACL_ATTR_GROUPS, /* 27 */ + ACL_ATTR_IS_VALID_PASSWORD, /* 28 */ + ACL_ATTR_CERT2USER, /* 29 */ + ACL_ATTR_USER_CERT, /* 30 */ + ACL_ATTR_PROMPT, /* 31 */ + ACL_ATTR_TIME, /* 32 */ + ACL_ATTR_USERS_GROUP, /* 33 */ + ACL_ATTR_SESSION, /* 34 */ + ACL_ATTR_REQUEST, /* 35 */ + ACL_ATTR_ERROR, /* 36 */ + ACL_ATTR_PROGRAMS, /* 37 */ + ACL_ATTR_ACCEL_AUTH, /* 38 */ + ACL_ATTR_WWW_AUTH_PROMPT, /* 39 */ + ACL_ATTR_OWNER, /* 40 */ + ACL_ATTR_IS_OWNER, /* 41 */ + ACL_ATTR_CACHED_USER, /* 42 */ + ACL_ATTR_USER_EXISTS /* 43 */ +}; +#endif + + +#define ACL_DBTYPE_LDAP "ldap" + +#define METHOD_DEFAULT "default" + +/* Errors must be < 0 */ +#define ACL_RES_ERROR -1 + +/* LAS return codes - Must all be negative numbers */ +#define LAS_EVAL_TRUE -1 +#define LAS_EVAL_FALSE -2 +#define LAS_EVAL_DECLINE -3 +#define LAS_EVAL_FAIL -4 +#define LAS_EVAL_INVALID -5 +#define LAS_EVAL_NEED_MORE_INFO -6 + +/* Max pathlength. Intended to match REQ_MAX_LEN */ +#define ACL_PATH_MAX 4096 + +NSPR_END_EXTERN_C + +#endif /* !PUBLIC_NSACL_ACLDEF_H */ diff --git a/include/public/nsacl/nserrdef.h b/include/public/nsacl/nserrdef.h new file mode 100644 index 0000000..88015eb --- /dev/null +++ b/include/public/nsacl/nserrdef.h @@ -0,0 +1,108 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef PUBLIC_NSACL_NSERRDEF_H +#define PUBLIC_NSACL_NSERRDEF_H + +/* + * Type: NSEFrame_t + * + * Description: + * + * This type describes the structure of an error frame. An error + * frame contains the following items: + * + * ef_retcode - This is a copy of the traditional error code, + * as might be returned as a function value to + * indicate an error. The purpose of the error + * code is to provide the caller of a function + * with sufficient information to determine how + * to process the error. That is, it does not + * need to identify a specific error, but only + * has to distinguish between classes of errors + * as needed by the caller to respond differently. + * Usually this should be a small number of values. + * + * ef_errorid - This is an integer identifier which uniquely + * identifies errors in a module or library. + * That is, there should be only one place in + * the source code of the module or library which + * generates a particular error id. The error id + * is used to select an error message in an error + * message file. + * + * ef_program - This is a pointer to a string which identifies + * the module or library context of ef_errorid. + * The string is used to construct the name of + * the message file in which an error message for + * ef_errorid can be found. + * + * ef_errc - This is the number of values stored in ef_errc[] + * for the current error id. + * + * ef_errv - This is an array of strings which are relevant + * to a particular error id. These strings can + * be included in an error message retrieved from + * a message file. The strings in a message file + * can contain "%s" sprintf() format codes. The + * ef_errv[] strings are passed to sprintf() along + * with the error message string. + */ + +#define NSERRMAXARG 8 /* size of ef_errv[] */ + +typedef struct NSEFrame_s NSEFrame_t; +struct NSEFrame_s { + NSEFrame_t * ef_next; /* next error frame on NSErr_t list */ + long ef_retcode; /* error return code */ + long ef_errorid; /* error unique identifier */ + const char * ef_program; /* context for ef_errorid */ + int ef_errc; /* number of strings in ef_errv[] */ + char * ef_errv[NSERRMAXARG];/* arguments for formatting error message */ +}; + +/* + * Description (NSErr_t) + * + * This type describes the structure of a header for a list of + * error frames. The header contains a pointer to the first + * and last error frames on the list. The first error frame + * is normally the one most recently generated, which usually + * represents the highest-level interpretation available for an + * error that is propogating upward in a call chain. These + * structures are generally allocated as automatic or static + * variables. + */ + +typedef struct NSErr_s NSErr_t; +struct NSErr_s { + NSEFrame_t * err_first; /* first error frame */ + NSEFrame_t * err_last; /* last error frame */ + NSEFrame_t *(*err_falloc)(NSErr_t * errp); /* error frame allocator */ + void (*err_ffree)(NSErr_t * errp, + NSEFrame_t * efp); /* error frame deallocator */ +}; + +/* Define an initializer for an NSErr_t */ +#define NSERRINIT { 0, 0, 0, 0 } + +#ifndef INTNSACL + +#define nserrDispose (*__nsacl_table->f_nserrDispose) +#define nserrFAlloc (*__nsacl_table->f_nserrFAlloc) +#define nserrFFree (*__nsacl_table->f_nserrFFree) +#define nserrGenerate (*__nsacl_table->f_nserrGenerate) + +#endif /* !INTNSACL */ + +#endif /* !PUBLIC_NSACL_NSERRDEF_H */ diff --git a/include/public/nsacl/plistdef.h b/include/public/nsacl/plistdef.h new file mode 100644 index 0000000..cdf9fb4 --- /dev/null +++ b/include/public/nsacl/plistdef.h @@ -0,0 +1,70 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef PUBLIC_NSACL_PLISTDEF_H +#define PUBLIC_NSACL_PLISTDEF_H + +/* + * File: plistdef.h + * + * Description: + * + * This file defines the interface to property lists. Property + * lists are a generalization of parameter blocks (pblocks). + */ + +#ifndef PUBLIC_NSAPI_H +#include "public/nsapi.h" +#endif /* !PUBLIC_NSAPI_H */ + +typedef struct PListStruct_s *PList_t; + +/* Define error codes returned from property list routines */ + +#define ERRPLINVPI -1 /* invalid property index */ +#define ERRPLEXIST -2 /* property already exists */ +#define ERRPLFULL -3 /* property list is full */ +#define ERRPLNOMEM -4 /* insufficient dynamic memory */ +#define ERRPLUNDEF -5 /* undefined property name */ + +#define PLFLG_OLD_MPOOL 0 /* use the plist memory pool */ +#define PLFLG_NEW_MPOOL 1 /* use the input memory pool */ +#define PLFLG_IGN_RES 2 /* ignore the reserved properties */ +#define PLFLG_USE_RES 3 /* use the reserved properties */ + +#ifdef __cplusplus +typedef void (PListFunc_t)(char*, const void*, void*); +#else +typedef void (PListFunc_t)(); +#endif + +#ifndef INTNSACL +#define PListAssignValue (*__nsacl_table->f_PListAssignValue) +#define PListCreate (*__nsacl_table->f_PListCreate) +#define PListDefProp (*__nsacl_table->f_PListDefProp) +#define PListDeleteProp (*__nsacl_table->f_PListDeleteProp) +#define PListFindValue (*__nsacl_table->f_PListFindValue) +#define PListInitProp (*__nsacl_table->f_PListInitProp) +#define PListNew (*__nsacl_table->f_PListNew) +#define PListDestroy (*__nsacl_table->f_PListDestroy) +#define PListGetValue (*__nsacl_table->f_PListGetValue) +#define PListNameProp (*__nsacl_table->f_PListNameProp) +#define PListSetType (*__nsacl_table->f_PListSetType) +#define PListSetValue (*__nsacl_table->f_PListSetValue) +#define PListEnumerate (*__nsacl_table->f_PListEnumerate) +#define PListDuplicate (*__nsacl_table->f_PListDuplicate) +#define PListGetPool (*__nsacl_table->f_PListGetPool) + +#endif /* !INTNSACL */ + +#endif /* !PUBLIC_NSACL_PLISTDEF_H */ diff --git a/include/public/nsapi.h b/include/public/nsapi.h new file mode 100644 index 0000000..d8b7b02 --- /dev/null +++ b/include/public/nsapi.h @@ -0,0 +1,256 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. + * Copyright (C) 2005 Red Hat, Inc. + * All rights reserved. + * + * License: GPL (version 3 or any later version). + * See LICENSE for details. + * END COPYRIGHT BLOCK **/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef PUBLIC_NSAPI_H +#define PUBLIC_NSAPI_H + +/* + * File: nsapi.h + * + * Description: + * + * This file defines an interface for extending the server with + * in-process plug-ins. + */ + +#include "base/systems.h" + +#if defined(FILE_UNIX_MMAP) +#define FILE_MMAP +#endif + +/* --- Begin miscellaneous definitions --- */ + +/* Used in some places as a length limit on error messages */ +#define MAGNUS_ERROR_LEN 1024 + +#define ENDLINE "\n" + +/* + * The maximum length of an error message. NOT RUN-TIME CHECKED + */ + +#define MAX_ERROR_LEN 1024 + +/* A warning is a minor mishap, such as a 404 being issued. */ +#define LOG_WARN 0 + +/* + * A misconfig is when there is a syntax error or permission violation in + * a config. file. + */ +#define LOG_MISCONFIG 1 + +/* + * Security warnings are issued when authentication fails, or a host is + * given a 403 return code. + */ +#define LOG_SECURITY 2 + +/* + * A failure is when a request could not be fulfilled due to an internal + * problem, such as a CGI script exiting prematurely, or a filesystem + * permissions problem. + */ +#define LOG_FAILURE 3 + +/* + * A catastrophe is a fatal server error such as running out of + * memory or processes, or a system call failing, or even a server crash. + * The server child cannot recover from a catastrophe. + */ +#define LOG_CATASTROPHE 4 + +/* + * Informational message, of no concern. + */ +#define LOG_INFORM 5 + +/* + * Internal log messages to be logged. Internal use only. + * Enable with "LogVerbose on" in magnus.conf + */ +#define LOG_VERBOSE 6 + +/* + * The time format to use in the error log + */ + +#define ERR_TIMEFMT "[%d/%b/%Y:%H:%M:%S]" + + +/* The fd you will get if you are reporting errors to SYSLOG */ + +#define ERRORS_TO_SYSLOG -1 + +/* Return codes from file I/O routines */ +#define IO_OKAY 1 +#define IO_ERROR -1 +#define IO_EOF 0 + +/* The disk page size on this machine. */ +#define FILE_BUFFERSIZE 4096 + +#define FILE_PATHSEP '/' +#define FILE_PARENT "../" + + +/* WILDPAT uses shell expressions */ +#define WILDPAT_VALID(exp) shexp_valid(exp) +#define WILDPAT_MATCH(str, exp) shexp_match(str, exp) +#define WILDPAT_CMP(str, exp) shexp_cmp(str, exp) +#define WILDPAT_CASECMP(str, exp) shexp_casecmp(str, exp) +#define WILDPAT_USES_SHEXP 1 + +/* Define return codes from WILDPAT_VALID */ +#define NON_WILDPAT -1 /* exp is ordinary string */ +#define INVALID_WILDPAT -2 /* exp is an invalid pattern */ +#define VALID_WILDPAT 1 /* exp is a valid pattern */ + +/* Define return codes from regexp_valid and shexp_valid */ +#define NON_SXP NON_WILDPAT /* exp is an ordinary string */ +#define INVALID_SXP INVALID_WILDPAT /* exp is an invalid shell exp */ +#define VALID_SXP VALID_WILDPAT /* exp is a valid shell exp */ + +#define SYSTHREAD_DEFAULT_PRIORITY 16 + +/* --- Begin native platform includes --- */ + +#if defined(FILE_UNIX) || defined(FILE_UNIX_MMAP) +#include /* caddr_t */ +#include +#include +#include +#endif + +#if !defined(SUNOS4) && !defined(HPUX) && !defined(LINUX) +#include +#endif +#include /* struct timeval */ +#include +#include /* sockaddr and in_addr */ +#include +#include +#include /* isspace */ +#include +#include +#include +#include +#include +#include +#include +#include /* struct passwd */ + +#ifndef BIG_LINE +#define BIG_LINE 1024 +#endif + + +/* --- End native platform includes --- */ + +/* --- Begin type definitions --- */ + +#ifndef SYS_FILE_T +typedef void *SYS_FILE; +#define SYS_FILE_T void * +#endif /* !SYS_FILE_T */ + +#define SYS_ERROR_FD ((SYS_FILE)-1) + +typedef void* CONDVAR; +typedef void *COUNTING_SEMAPHORE; +typedef void* CRITICAL; +typedef DIR* SYS_DIR; +typedef struct dirent SYS_DIRENT; + +typedef struct { + char *name,*value; +} pb_param; + +struct pb_entry { + pb_param *param; + struct pb_entry *next; +}; + +typedef struct { + int hsize; + struct pb_entry **ht; +} pblock; + +#ifndef POOL_HANDLE_T +#define POOL_HANDLE_T +typedef void *pool_handle_t; +#endif + +typedef struct PListStruct_s PListStruct_s; +typedef struct ACLListHandle ACLListHandle; + +/* Define a handle for a thread */ +typedef void* SYS_THREAD; + +/* Define an error value for the thread handle */ +#define SYS_THREAD_ERROR NULL + +/* + * Hierarchy of httpd_object + * + * An object contains dtables. + * + * Each dtable is a table of directives that were entered of a certain type. + * There is one dtable for each unique type of directive. + * + * Each dtable contains an array of directives, each of which is equivalent + * to one directive that occurred in a config. file. + * + * It is up to the caller to determine how many dtables will be allocated + * and to keep track of which of their directive types maps to which dtable + * number. + */ + + +/* + * directive is a structure containing the protection and parameters to an + * instance of a directive within an httpd_object. + * + * param is the parameters, client is the protection. + */ + +typedef struct { + pblock *param; + pblock *client; +} directive; + +/* --- End type definitions --- */ + +#ifdef NEED_STRCASECMP +#define strcasecmp(s1, s2) util_strcasecmp(s1, s2) +#endif /* NEED_STRCASECMP */ + +#ifdef NEED_STRNCASECMP +#define strncasecmp(s1, s2, n) util_strncasecmp(s1, s2, n) +#endif /* NEED_STRNCASECMP */ + +#define dir_open opendir +#define dir_read readdir +#define dir_close closedir +#define dir_create(path) mkdir(path, 0755) +#define dir_remove rmdir +#define system_chdir chdir +#define file_unix2local(path,p2) strcpy(p2,path) + +/* + * Thread-safe variant of localtime + */ +#define system_localtime(curtime, ret) util_localtime(curtime, ret) + +#endif /* !PUBLIC_NSAPI_H */ diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..0b0fdcb --- /dev/null +++ b/install-sh @@ -0,0 +1,501 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2013-12-25.23; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +tab=' ' +nl=' +' +IFS=" $tab$nl" + +# Set DOITPROG to "echo" to test this script. + +doit=${DOITPROG-} +doit_exec=${doit:-exec} + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +is_target_a_directory=possibly + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) is_target_a_directory=never;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + dstdir=`dirname "$dst"` + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + oIFS=$IFS + IFS=/ + set -f + set fnord $dstdir + shift + set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + set +f && + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/ldap/admin/src/base-initconfig.in b/ldap/admin/src/base-initconfig.in new file mode 100644 index 0000000..8507296 --- /dev/null +++ b/ldap/admin/src/base-initconfig.in @@ -0,0 +1,49 @@ +# This file is sourced by @package_name@ upon startup to set +# the default environment for all directory server instances. +# To set instance specific defaults, use the file in the same +# directory called @package_name@-instance where "instance" +# is the name of your directory server instance e.g. +# @package_name@-localhost for the slapd-localhost instance. + +@preamble@ + +# In order to make more file descriptors available to the directory server, +# first make sure the system hard limits are raised, then use ulimit - +# uncomment out the following line and change the value to the desired value +#ulimit -n 8192 +# note - if using systemd, ulimit won't work - you must edit the systemd unit +# file for directory server to add the LimitNOFILE option - see "man +# systemd.exec" for more info + +# A per instance keytab does not make much sense for servers. Kerberos clients +# use the machine FQDN to obtain a ticket like ldap/FQDN, there is nothing that +# can make a client understand how to get a per-instance ticket. Therefore by +# default a keytab should be considered a per server option. +# +# Also this file is sourced for all instances, so again all instances would +# ultimately get the same keytab. +# +# Finally a keytab is normally named either krb5.keytab or .keytab +# +# In order to use SASL/GSSAPI (Kerberos) the directory server needs to know +# where to find its keytab file - uncomment the following line and set the +# path and filename appropriately. +# If using systemd, omit the "; export VARNAME" at the end. +#KRB5_KTNAME=@instconfigdir@/myname.keytab ; export KRB5_KTNAME + +# How many seconds to wait for the startpid file to show up before we assume +# there is a problem and fail to start. +# If using systemd, omit the "; export STARTPID_TIME" at the end. +#STARTPID_TIME=10 ; export STARTPID_TIME + +# How many seconds to wait for the pid file to show up before we assume there +# is a problem and fail to start. +# If using systemd, omit the "; export PID_TIME" at the end. +#PID_TIME=600 ; export PID_TIME + +# The tcmalloc memory allocator has been shown to have a positive impact on +# the Directory Server's virtual & resident memory size/growth. tcmalloc is +# available on RHEL/Fedora in the gperftools-libs package (this could be +# different on other platforms). +# If using systemd, omit the "; export LD_PRELOAD" at the end. +#LD_PRELOAD=@libdir@/libtcmalloc.so.4 ; export LD_PRELOAD diff --git a/ldap/admin/src/defaults.inf.in b/ldap/admin/src/defaults.inf.in new file mode 100644 index 0000000..fe4ccda --- /dev/null +++ b/ldap/admin/src/defaults.inf.in @@ -0,0 +1,59 @@ +; --- BEGIN COPYRIGHT BLOCK --- +; Copyright (C) 2016 Red Hat, Inc. +; All rights reserved. +; +; License: GPL (version 3 or any later version). +; See LICENSE for details. +; --- END COPYRIGHT BLOCK --- + +; Author: firstyear at redhat.com + +; This is a set of default paths that tools consuming DS should search +; for paths. This is the foundation of the version 2 ds setup inf +; +; All format strings should be in python syntax IE {key} + +[slapd] +; These values should NOT be altered in an installation. +; This is because the server itself depends on these locations and values +; being known, and are set at compilation time. +product = @capbrand@ Directory Server +version = @PACKAGE_VERSION@ +asan_enabled = @enable_asan@ +with_systemd = @with_systemd@ +with_selinux = @with_selinux@ +prefix = @prefixdir@ +bin_dir = @bindir@ +sbin_dir = @sbindir@ +lib_dir = @libdir@ +data_dir = @datadir@ +tmp_dir = /tmp +sysconf_dir = @sysconfdir@ +initconfig_dir = @initconfigdir@ +config_dir = @instconfigdir@/slapd-{instance_name} +local_state_dir = @localstatedir@ +run_dir = @localstatedir@/run/dirsrv +pid_file = @localstatedir@/run/dirsrv/slapd-{instance_name}.pid +inst_dir = @serverdir@ +plugin_dir = @serverplugindir@ +; This value is not relevant for 1.3.5 and lower. +;system_schema_dir = @systemschemadir@ + +; These values can be altered in an installation of ds +user = dirsrv +group = dirsrv +root_dn = cn=Directory Manager + +schema_dir = @instconfigdir@/slapd-{instance_name}/schema +cert_dir = @instconfigdir@/slapd-{instance_name} + +lock_dir = @localstatedir@/lock/dirsrv/slapd-{instance_name} +log_dir = @localstatedir@/log/dirsrv/slapd-{instance_name} +access_log = @localstatedir@/log/dirsrv/slapd-{instance_name}/access +audit_log = @localstatedir@/log/dirsrv/slapd-{instance_name}/audit +error_log = @localstatedir@/log/dirsrv/slapd-{instance_name}/errors +db_dir = @localstatedir@/lib/dirsrv/slapd-{instance_name}/db +backup_dir = @localstatedir@/lib/dirsrv/slapd-{instance_name}/bak +ldif_dir = @localstatedir@/lib/dirsrv/slapd-{instance_name}/ldif + + diff --git a/ldap/admin/src/initconfig.in b/ldap/admin/src/initconfig.in new file mode 100644 index 0000000..7afa315 --- /dev/null +++ b/ldap/admin/src/initconfig.in @@ -0,0 +1,12 @@ +# other environment settings can be added here too +OS=`uname -s` +# use the new mt slab memory allocator on Solaris +# this requires Solaris 9 update 3 or later +if [ "$OS" = "SunOS" ] && [ -f /usr/lib/libumem.so ] ; then + LD_PRELOAD=/usr/lib/libumem.so + export LD_PRELOAD +fi +if [ "$OS" = "SunOS" ] && [ -f /usr/lib/64/libumem.so ] ; then + LD_PRELOAD_64=/usr/lib/64/libumem.so + export LD_PRELOAD_64 +fi diff --git a/ldap/admin/src/logconv.pl b/ldap/admin/src/logconv.pl new file mode 100755 index 0000000..9b5e34b --- /dev/null +++ b/ldap/admin/src/logconv.pl @@ -0,0 +1,2806 @@ +#!/usr/bin/env perl + +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +# +# Check for usage +# +use strict; +use warnings; +use warnings 'untie'; +use Time::Local; +use IO::File; +use Getopt::Long; +use DB_File; +use sigtrap qw(die normal-signals); +use Archive::Tar; +use IO::Uncompress::AnyUncompress qw($AnyUncompressError); +use Scalar::Util qw(looks_like_number); +use DB; + +Getopt::Long::Configure ("bundling"); +Getopt::Long::Configure ("permute"); + +if ($#ARGV < 0){; + &displayUsage; +} + +####################################### +# # +# parse commandline switches # +# # +####################################### + +my $file_count = 0; +my $arg_count = 0; +my $logversion = "8.2"; +my $sizeCount = "20"; +my $startFlag = 0; +my $startTime = 0; +my $startTimeInNsecs = 0; +my $endFlag = 0; +my $endTime = 0; +my $endTimeInNsecs = 0; +my $minEtime = 0; +my $reportStats = ""; +my $dataLocation = "/tmp"; +my $startTLSoid = "1.3.6.1.4.1.1466.20037"; +my @statnames=qw(last last_str results srch add mod modrdn moddn cmp del abandon + conns sslconns bind anonbind unbind notesA notesU etime); +my $s_stats; +my $m_stats; +my $verb = "no"; +my @excludeIP; +my $xi = 0; +my $bindReportDN; +my $usage = ""; +my @latency; +# key is conn number - val is IP address +my %openConnection; +my @errorCode; +my @errtext; +my @errornum; +my @errornum2; +my $ds6x = "false"; +my $connCodeCount = 0; +my %connList; +my %bindReport; +my @vlvconn; +my @vlvop; +my @fds; +my $reportBinds = "no"; +my $rootDN = ""; +my $needCleanup = 0; +my @scopeTxt = ("0 (base)", "1 (one)", "2 (subtree)"); +my $reportStatsSecFile; +my $reportStatsMinFile; + +GetOptions( + 'd|rootDN=s' => \$rootDN, + 'v|version' => sub { print "Access Log Analyzer v$logversion\n"; exit (0); }, + 'V|verbose' => sub { $verb = "yes"; }, + 'D|data=s' => \$dataLocation, + 'X|excludeIP=s' => \$excludeIP[$xi++], + 's|sizeLimit=s' => \$sizeCount, + 'S|startTime=s' => \$startTime, + 'E|endTime=s' => \$endTime, + 'T|minEtime=s' => \$minEtime, + 'B|bind=s' => sub { $reportBinds = "yes"; $bindReportDN=($_[1]) }, + 'm|reportFileSecs=s' => \$reportStatsSecFile, + 'M|reportFileMins=s' => \$reportStatsMinFile, + 'h|help' => sub { displayUsage() }, + # usage options '-efcibaltnxgjuiryp' + 'e' => sub { $usage = $usage . "e"; }, + 'f' => sub { $usage = $usage . "f"; }, + 'c' => sub { $usage = $usage . "c"; }, + 'i' => sub { $usage = $usage . "i"; }, + 'b' => sub { $usage = $usage . "b"; }, + 'a' => sub { $usage = $usage . "a"; }, + 'l' => sub { $usage = $usage . "l"; }, + 't' => sub { $usage = $usage . "t"; }, + 'n' => sub { $usage = $usage . "n"; }, + 'x' => sub { $usage = $usage . "x"; }, + 'g' => sub { $usage = $usage . "g"; }, + 'j' => sub { $usage = $usage . "j"; }, + 'u' => sub { $usage = $usage . "u"; }, + 'r' => sub { $usage = $usage . "r"; }, + 'y' => sub { $usage = $usage . "y"; }, + 'p' => sub { $usage = $usage . "p"; }, + 'U' => sub { $usage = $usage . "U"; } +); + +# +# setup the report Bind DN if any +# +if($reportBinds eq "yes"){ + $bindReportDN =~ tr/A-Z/a-z/; + if($bindReportDN eq "all"){ + $bindReportDN = ""; + } + if($bindReportDN eq "anonymous"){ + $bindReportDN = "Anonymous"; + } +} + +# +# set the default root DN +# +if($rootDN eq ""){ + $rootDN = "cn=directory manager"; +} + +# +# get the logs +# +my @files = (); +while($arg_count <= $#ARGV){ + $files[$file_count] = $ARGV[$arg_count]; + $file_count++; + $arg_count++; +} + +if($file_count == 0){ + print "There are no access logs specified, or the tool options have not been used correctly!\n"; + exit 1; +} + +# +# Initialize the statistic blocks +# +if ($reportStatsSecFile) { + $s_stats = new_stats_block($reportStatsSecFile); + $reportStats = "-m"; +} +if ($reportStatsMinFile) { + $m_stats = new_stats_block($reportStatsMinFile); + $reportStats = "-M"; +} + +if ($sizeCount eq "all"){$sizeCount = "100000";} + +####################################### +# # +# Initialize Hashes and variables # +# # +####################################### + +print "Access Log Analyzer $logversion\n"; +print "Command: logconv.pl @ARGV\n"; + +my $rootDNBindCount = 0; +my $anonymousBindCount = 0; +my $unindexedSrchCountNotesA = 0; +my $unindexedSrchCountNotesU = 0; +my $vlvNotesACount= 0; +my $vlvNotesUCount= 0; +my $srchCount = 0; +my $fdTaken = 0; +my $fdReturned = 0; +my $highestFdTaken = 0; +my $unbindCount = 0; +my $cmpCount = 0; +my $modCount = 0; +my $delCount = 0; +my $addCount = 0; +my $modrdnCount = 0; +my $abandonCount = 0; +my $extopCount = 0; +my $vlvCount = 0; +my $errorCount = 0; +my $proxiedAuthCount = 0; +my $serverRestartCount = 0; +my $resourceUnavailCount = 0; +my $brokenPipeCount = 0; +my $v2BindCount = 0; +my $v3BindCount = 0; +my $vlvSortCount = 0; +my $connResetByPeerCount = 0; +my $isVlvNotes = 0; +my $successCount = 0; +my $sslCount = 0; +my $sslClientBindCount = 0; +my $sslClientFailedCount = 0; +my $objectclassTopCount= 0; +my $pagedSearchCount = 0; +my $bindCount = 0; +my $filterCount = 0; +my $baseCount = 0; +my $scopeCount = 0; +my $allOps = 0; +my $allResults = 0; +my $badPwdCount = 0; +my $saslBindCount = 0; +my $internalOpCount = 0; +my $entryOpCount = 0; +my $referralCount = 0; +my $anyAttrs = 0; +my $persistentSrchCount = 0; +my $maxBerSizeCount = 0; +my $connectionCount = 0; +my $timerange = 0; +my $simConnection = 0; +my $maxsimConnection = 0; +my $firstFile = 1; +my $elapsedDays = 0; +my $logCount = 0; +my $startTLSCount = 0; +my $ldapiCount = 0; +my $autobindCount = 0; +my $limit = 25000; # number of lines processed to trigger output +my $connStat; +my $ldapiConnStat; +my $sslConnStat; +my $ldapConnStat; +my $tlsConnStat; +my $searchStat; +my $modStat; +my $addStat; +my $deleteStat; +my $modrdnStat; +my $compareStat; +my $bindCountStat; +my %cipher = (); +my @removefiles = (); + +my @conncodes = qw(A1 B1 B4 T1 T2 B2 B3 R1 P1 P2 U1); +my %conn = (); +map {$conn{$_} = $_} @conncodes; + +# hash db-backed hashes +my @hashnames = qw(attr rc src rsrc excount conn_hash ip_hash conncount nentries + filter base ds6xbadpwd saslmech bindlist etime oid + start_time_of_connection end_time_of_connection + notesa_conn_op notesu_conn_op etime_conn_op nentries_conn_op + optype_conn_op time_conn_op srch_conn_op del_conn_op mod_conn_op + mdn_conn_op cmp_conn_op bind_conn_op unbind_conn_op ext_conn_op + abandon_conn_op badpwd_conn_op); +# need per connection code ip address counts - so use a hash table +# for each connection code - key is ip, val is count +push @hashnames, @conncodes; +my $hashes = openHashFiles($dataLocation, @hashnames); + +$needCleanup = 1; + +my @err; +$err[0] = "Successful Operations\n"; +$err[1] = "Operations Error(s)\n"; +$err[2] = "Protocal Errors\n"; +$err[3] = "Time Limit Exceeded\n"; +$err[4] = "Size Limit Exceeded\n"; +$err[5] = "Compare False\n"; +$err[6] = "Compare True\n"; +$err[7] = "Strong Authentication Not Supported\n"; +$err[8] = "Strong Authentication Required\n"; +$err[9] = "Partial Results\n"; +$err[10] = "Referral Received\n"; +$err[11] = "Administrative Limit Exceeded (Look Through Limit)\n"; +$err[12] = "Unavailable Critical Extension\n"; +$err[13] = "Confidentiality Required\n"; +$err[14] = "SASL Bind in Progress\n"; +$err[16] = "No Such Attribute\n"; +$err[17] = "Undefined Type\n"; +$err[18] = "Inappropriate Matching\n"; +$err[19] = "Constraint Violation\n"; +$err[20] = "Type or Value Exists\n"; +$err[21] = "Invalid Syntax\n"; +$err[32] = "No Such Object\n"; +$err[33] = "Alias Problem\n"; +$err[34] = "Invalid DN Syntax\n"; +$err[35] = "Is Leaf\n"; +$err[36] = "Alias Deref Problem\n"; +$err[48] = "Inappropriate Authentication (No password presented, etc)\n"; +$err[49] = "Invalid Credentials (Bad Password)\n"; +$err[50] = "Insufficent (write) Privledges\n"; +$err[51] = "Busy\n"; +$err[52] = "Unavailable\n"; +$err[53] = "Unwilling To Perform\n"; +$err[54] = "Loop Detected\n"; +$err[60] = "Sort Control Missing\n"; +$err[61] = "Index Range Error\n"; +$err[64] = "Naming Violation\n"; +$err[65] = "Objectclass Violation\n"; +$err[66] = "Not Allowed on Non Leaf\n"; +$err[67] = "Not Allowed on RDN\n"; +$err[68] = "Already Exists\n"; +$err[69] = "No Objectclass Mods\n"; +$err[70] = "Results Too Large\n"; +$err[71] = "Effect Multiple DSA's\n"; +$err[80] = "Other :-)\n"; +$err[81] = "Server Down\n"; +$err[82] = "Local Error\n"; +$err[83] = "Encoding Error\n"; +$err[84] = "Decoding Error\n"; +$err[85] = "Timeout\n"; +$err[86] = "Authentication Unknown\n"; +$err[87] = "Filter Error\n"; +$err[88] = "User Canceled\n"; +$err[89] = "Parameter Error\n"; +$err[90] = "No Memory\n"; +$err[91] = "Connect Error\n"; +$err[92] = "Not Supported\n"; +$err[93] = "Control Not Found\n"; +$err[94] = "No Results Returned\n"; +$err[95] = "More Results To Return\n"; +$err[96] = "Client Loop\n"; +$err[97] = "Referral Limit Exceeded\n"; + +my %connmsg; +$connmsg{"A1"} = "Client Aborted Connections"; +$connmsg{"B1"} = "Bad Ber Tag Encountered"; +$connmsg{"B4"} = "Server failed to flush data (response) back to Client"; +$connmsg{"T1"} = "Idle Timeout Exceeded"; +$connmsg{"T2"} = "IO Block Timeout Exceeded or NTSSL Timeout"; +$connmsg{"B2"} = "Ber Too Big"; +$connmsg{"B3"} = "Ber Peek"; +$connmsg{"R1"} = "Revents"; +$connmsg{"P1"} = "Plugin"; +$connmsg{"P2"} = "Poll"; +$connmsg{"U1"} = "Cleanly Closed Connections"; + +my %monthname = ( + "jan" => 0, + "feb" => 1, + "mar" => 2, + "apr" => 3, + "may" => 4, + "jun" => 5, + "jul" => 6, + "aug" => 7, + "sep" => 8, + "oct" => 9, + "nov" => 10, + "dec" => 11, + +); + +# +# Validate start/end times (if specified) +# +if ($startTime and $endTime){ + # Make sure the end time is not earlier than the start time + my $testStart = convertTimeToNanoseconds($startTime); + my $testEnd = convertTimeToNanoseconds($endTime); + if ($testStart > $testEnd){ + print "Start time ($startTime) is greater than end time ($endTime)!\n"; + exit 1; + } +} + +my $linesProcessed; +my $lineBlockCount; +my $cursize = 0; +my $LOGFH; +sub statusreport { + if ($lineBlockCount > $limit) { + my $curpos = tell($LOGFH); + my $percent = $curpos/$cursize*100.0; + print sprintf "%10d Lines Processed %12d of %12d bytes (%.3f%%)\n",--$linesProcessed,$curpos,$cursize,$percent; + $lineBlockCount = 0; + } +} + +########################################## +# # +# Parse Access Logs # +# # +########################################## + +if ($files[$#files] =~ m/access.rotationinfo/) { + # Remove the rotationinfo file from the log array + delete $files[$#files]; + $file_count--; +} +$logCount = $file_count; + +print "Processing $logCount Access Log(s)...\n"; + + +#print "Filename\t\t\t Total Lines\n"; +#print "--------------------------------------------------\n"; + +my $skipFirstFile = 0; +if ($logCount > 1){ + # sort the log array + my @sorted_files = sort @files; + if($sorted_files[0] =~ /access$/){ + # Move "access" to the end of the array + $sorted_files[$logCount] = $sorted_files[0]; + $skipFirstFile = 1; + $file_count++; + } + @files = @sorted_files; +} + + +my $logline; +my $totalLineCount = 0; + +sub isTarArchive { + local $_ = shift; + return /\.tar$/ || /\.tar\.bz2$/ || /\.tar.gz$/ || /\.tar.xz$/ || /\.tgz$/ || /\.tbz$/ || /\.txz$/; +} + +sub isCompressed { + local $_ = shift; + return /\.gz$/ || /\.bz2$/ || /\.xz$/; +} + +# Tar::Archive can't grok xz, so have to uncompress first +sub tarNeedsUncompress { + local $_ = shift; + return /\.tar.xz$/ || /\.txz$/; +} + +# rhel7 can't grok xz +sub doUncompress { + local $_ = shift; + my $data = shift; + my $TARFH; + # some platforms don't have xz support in IO::Uncompress::AnyUncompress + if (/\.tar.xz$/ || /\.txz$/ || /\.xz$/) { + if ($data) { + openFailed("Cannot read from compressed xz file in tar archive.\nPlease un-tar the tar file first, then pass individual .xz files to this program.\n", $_); + } + # so use the xz command directly + # NOTE: This doesn't work if the argument is a file handle e.g. from + # Archive::Tar + $? = 0; # clear + if (!open($TARFH, "xz -dc $_ |") or $?) { + openFailed($?, $_); + return; + } + } else { + my $uncompressthing; + if ($data) { + # make a filehandle object from data + open($uncompressthing, "<", \$data) or openFailed($!, $_); + } else { + # just read from the file + $uncompressthing = $_; + } + $TARFH = new IO::Uncompress::AnyUncompress $uncompressthing or + do { openFailed($AnyUncompressError, $_); return; }; + if (*$TARFH->{Plain}) { + openFailed("Unknown compression", $_); + return; + } + } + return $TARFH; +} + +sub convertTimeToNanoseconds { + my $log_line = shift; + + my $logDate; + my @dateComps; + my ($timeMonth, $timeDay, $timeYear, $dateTotal); + $dateTotal = 0; + if ($log_line =~ / *([0-9A-Z\/]+)/i ){ + $logDate = $1; + @dateComps = split /\//, $logDate; + if ($#dateComps < 2) { + print "The date string ($log_line) is invalid, exiting...\n"; + exit(1); + } + if (!looks_like_number($dateComps[0]) || length $dateComps[0] != 2) { + print "The date string ($log_line) has invalid day ($dateComps[0]), exiting...\n"; + exit(1); + } + if ($monthname{lc $dateComps[1]} eq "") { + print "The date string ($log_line) has invalid month ($dateComps[1]), exiting...\n"; + exit(1); + } + if (!looks_like_number($dateComps[2]) || length $dateComps[2] != 4 ) { + print "The date string ($log_line) has invalid year ($dateComps[2]), exiting...\n"; + exit(1); + } + $timeMonth = 1 + $monthname{lc $dateComps[1]}; + $timeMonth = $timeMonth * 3600 * 24 * 30; + $timeDay= $dateComps[0] * 3600 * 24; + $timeYear = $dateComps[2] * 365 * 3600 * 24; + $dateTotal = $timeMonth + $timeDay + $timeYear; + } + + my $logTime; + my @timeComps; + my ($timeHour, $timeMinute, $timeSecond, $timeNanosecond, $timeTotal); + $timeTotal = 0; + if ($log_line =~ / *(:[0-9:\.]+)/i ){ + $logTime = $1; + @timeComps = split /:|\./, $logTime; + if ($#timeComps < 3) { + print "The time string ($log_line) is invalid, exiting...\n"; + exit(1); + } + if (!looks_like_number($timeComps[1]) || length $timeComps[1] != 2){ + print "The time string ($log_line) has invalid hour ($timeComps[1]), exiting...\n"; + exit(1); + } + if (!looks_like_number($timeComps[2]) || length $timeComps[2] != 2){ + print "The time string ($log_line) has invalid minute ($timeComps[2]), exiting...\n"; + exit(1); + } + if (!looks_like_number($timeComps[3]) || length $timeComps[3] != 2){ + print "The time string ($log_line) has invalid second ($timeComps[3]), exiting...\n"; + exit(1); + } + if ($#timeComps < 4 || !looks_like_number($timeComps[4]) || length $timeComps[4] != 9){ + # This isn't an error for nano seconds, we just assume old log format and set nsec to 0 + $timeNanosecond = 0; + } else { + $timeNanosecond = $timeComps[4]; + } + $timeHour = $timeComps[1] * 3600; + $timeMinute = $timeComps[2] * 60; + $timeSecond = $timeComps[3]; + $timeTotal = $timeHour + $timeMinute + $timeSecond; + } + + return (($timeTotal + $dateTotal) * 1000000000) + $timeNanosecond; +} + +if($startTime){ + $startTimeInNsecs = convertTimeToNanoseconds($startTime); +} +if($endTime){ + $endTimeInNsecs = convertTimeToNanoseconds($endTime); +} + +$Archive::Tar::WARN = 0; # so new will shut up when reading a regular file +for (my $count=0; $count < $file_count; $count++){ + my $logname = $files[$count]; + # we moved access to the end of the list, so if its the first file skip it + if($logCount > 1 && $count == 0 && $skipFirstFile == 1){ + next; + } + if (! -r $logname) { + print "File not found: $logname\n"; + next; + } + $linesProcessed = 0; $lineBlockCount = 0; + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$atime,$mtime,$ctime,$blksize,$blocks); + ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$cursize, + $atime,$mtime,$ctime,$blksize,$blocks) = stat($logname); + print sprintf "\n[%03d] %-30s\tsize (bytes): %12s\n",$logCount, $logname, $cursize; + $logCount--; + if ($cursize == 0){ + # access log is empty + print "Skipping empty access log ($logname)...\n"; + next; + } + + my $tar = 0; + my $tariter = 0; + my $tarfile = 0; + my $comp = 0; + $LOGFH = undef; + if (isTarArchive($logname)) { + $tar = Archive::Tar->new(); + if (tarNeedsUncompress($logname)) { + my $TARFH = doUncompress($logname); + next if (!$TARFH); + $tariter = Archive::Tar->iter($TARFH); + } else { + $tariter = Archive::Tar->iter($logname); + } + if (!$tariter) { + print "$logname is not a valid tar archive, or compression is unrecognized: $!\n"; + next; + } + } elsif (isCompressed($logname)) { + $comp = 1; + } + + while (!$tariter or ($tarfile = $tariter->())) { + if ($tarfile) { + if ($tarfile->is_file) { + print sprintf "\t%-30s\tsize (bytes): %12s\n",$tarfile->name, $tarfile->size; + $cursize = $tarfile->size; + } else { + print "\tskipping non-file $tarfile->name\n"; + next; + } + if (isCompressed($tarfile->name)) { + $LOGFH = doUncompress($tarfile->name, $tarfile->get_content); + next if (!$LOGFH); + # no way in general to know how big the uncompressed file is - so + # assume a factor of 10 inflation - only used for progress reporting + $cursize *= 10; + } else { + open($LOGFH,"<",\$tarfile->data) or do { openFailed($!, $tarfile->name) ; next }; + } + } elsif ($comp) { + $LOGFH = doUncompress($logname); + # no way in general to know how big the uncompressed file is - so + # assume a factor of 10 inflation - only used for progress reporting + $cursize *= 10; + } else { + open($LOGFH,$logname) or do { openFailed($!, $logname); next }; + } + my $firstline = "yes"; + while(<$LOGFH>){ + unless ($endFlag) { + if ($firstline eq "yes"){ + if (/^\[/) { + $logline = $_; + $firstline = "no"; + } + $linesProcessed++; + $lineBlockCount++; + } elsif (/^\[/ && $firstline eq "no"){ + &parseLine(); + $logline = $_; + } else { + $logline = $logline . $_; + $logline =~ s/\n//; + } + } + } + &parseLine(); + close ($LOGFH); + $totalLineCount = $totalLineCount + $linesProcessed; + statusreport(); + if($reportStats){ + print_stats_block( $s_stats ); + print_stats_block( $m_stats ); + } + last if (!$tariter); + } + if ($tar) { + if ($tar->error()) { + openFailed($tar->error(), $logname); + } + if ($Archive::Tar::error) { + openFailed($Archive::Tar::error, $logname); + } + } +} + +if ($totalLineCount eq "0"){ + print "There was no logging to process, exiting...\n"; + exit 1; +} + +print "\n\nTotal Log Lines Analysed: " . ($totalLineCount - 1) . "\n"; + +$allOps = $srchCount + $modCount + $addCount + $cmpCount + $delCount + $modrdnCount + $bindCount + $extopCount + $abandonCount + $vlvCount; + +################################################################## +# # +# Calculate the total elapsed time of the processed access logs # +# # +################################################################## + +# if we are using startTime & endTime then we need to clean it up for our processing + +my $start; +if($startTime){ + if ($start =~ / *([0-9a-z:\/\.]+)/i){$start=$1;} +} +my $end; +if($endTime){ + if ($end =~ / *([0-9a-z:\/\.]+)/i){$end =$1;} +} + +# +# Get the start time in seconds +# +my $logStart = $start; +my $startTotal = convertTimeToNanoseconds($logStart); + +# +# Get the end time in seconds +# +my $logEnd = $end; +my $endTotal = convertTimeToNanoseconds($logEnd); + +# +# Tally the numbers +# +my $totalTimeInNsecs = $endTotal - $startTotal; +my $remainingTimeInNsecs = $totalTimeInNsecs; + +my $totalTimeInSecs = $totalTimeInNsecs / 1000000000; +my $remainingTimeInSecs = $remainingTimeInNsecs / 1000000000; + +# +# Calculate the elapsed time +# + +# days +while(($remainingTimeInNsecs - (86400 * 1000000000)) > 0){ + $elapsedDays++; + $remainingTimeInNsecs = $remainingTimeInNsecs - (86400 * 1000000000); + +} + +# hours +my $elapsedHours = 0; +while(($remainingTimeInNsecs - (3600 * 1000000000 )) > 0){ + $elapsedHours++; + $remainingTimeInNsecs = $remainingTimeInNsecs - (3600 * 1000000000); +} + +# minutes +my $elapsedMinutes = 0; +while($remainingTimeInNsecs - (60 * 1000000000) > 0){ + $elapsedMinutes++; + $remainingTimeInNsecs = $remainingTimeInNsecs - (60 * 1000000000); +} + +# seconds +my $elapsedSeconds = $remainingTimeInNsecs / 1000000000; + +##################################### +# # +# Display Basic Results # +# # +##################################### + + +print "\n\n----------- Access Log Output ------------\n"; +print "\nStart of Logs: $start\n"; +print "End of Logs: $end\n\n"; + +if($elapsedDays eq "0"){ + print "Processed Log Time: $elapsedHours Hours, $elapsedMinutes Minutes, $elapsedSeconds Seconds\n\n"; +} else { + print "Processed Log Time: $elapsedDays Days, $elapsedHours Hours, $elapsedMinutes Minutes, $elapsedSeconds Seconds\n\n"; +} + +# +# Check here if we are producing any unqiue reports +# + +if($reportBinds eq "yes"){ + &displayBindReport(); +} + +if($reportStats ne ""){ + # No need to print the general report, so exit here + removeDataFiles(); + exit (0); +} + +# +# Generate stats first +# +if ($totalTimeInNsecs == 0){ + $connStat = sprintf "(%.2f/sec) (%.2f/min)\n","0", "0"; + $ldapiConnStat = sprintf "(%.2f/sec) (%.2f/min)\n","0", "0"; + $sslConnStat = sprintf "(%.2f/sec) (%.2f/min)\n","0", "0"; + $tlsConnStat = sprintf "(%.2f/sec) (%.2f/min)\n","0", "0"; + $ldapConnStat = sprintf "(%.2f/sec) (%.2f/min)\n","0", "0"; + $searchStat = sprintf "(%.2f/sec) (%.2f/min)\n","0", "0"; + $modStat = sprintf "(%.2f/sec) (%.2f/min)\n","0", "0"; + $addStat = sprintf "(%.2f/sec) (%.2f/min)\n","0", "0"; + $deleteStat = sprintf "(%.2f/sec) (%.2f/min)\n","0", "0"; + $modrdnStat = sprintf "(%.2f/sec) (%.2f/min)\n","0", "0"; + $compareStat = sprintf "(%.2f/sec) (%.2f/min)\n","0", "0"; + $bindCountStat = sprintf "(%.2f/sec) (%.2f/min)\n","0", "0"; +} else { + $connStat = sprintf "(%.2f/sec) (%.2f/min)\n",($connectionCount / $totalTimeInSecs), $connectionCount / ($totalTimeInSecs/60); + $ldapiConnStat = sprintf "(%.2f/sec) (%.2f/min)\n",($ldapiCount / $totalTimeInSecs), $ldapiCount / ($totalTimeInSecs/60); + $sslConnStat = sprintf "(%.2f/sec) (%.2f/min)\n",($sslCount / $totalTimeInSecs), $sslCount / ($totalTimeInSecs/60); + $tlsConnStat = sprintf "(%.2f/sec) (%.2f/min)\n",($startTLSCount / $totalTimeInSecs), $startTLSCount / ($totalTimeInSecs/60); + $ldapConnStat = sprintf "(%.2f/sec) (%.2f/min)\n",(($connectionCount - $sslCount - $ldapiCount) / $totalTimeInSecs), + ($connectionCount - $sslCount - $ldapiCount) / ($totalTimeInSecs/60); + $searchStat = sprintf "(%.2f/sec) (%.2f/min)\n",($srchCount / $totalTimeInSecs), $srchCount / ($totalTimeInSecs/60); + $modStat = sprintf "(%.2f/sec) (%.2f/min)\n",$modCount / $totalTimeInSecs, $modCount/($totalTimeInSecs/60); + $addStat = sprintf "(%.2f/sec) (%.2f/min)\n",$addCount/$totalTimeInSecs, $addCount/($totalTimeInSecs/60); + $deleteStat = sprintf "(%.2f/sec) (%.2f/min)\n",$delCount/$totalTimeInSecs, $delCount/($totalTimeInSecs/60); + $modrdnStat = sprintf "(%.2f/sec) (%.2f/min)\n",$modrdnCount/$totalTimeInSecs, $modrdnCount/($totalTimeInSecs/60); + $compareStat = sprintf "(%.2f/sec) (%.2f/min)\n",$cmpCount/$totalTimeInSecs, $cmpCount/($totalTimeInSecs/60); + $bindCountStat = sprintf "(%.2f/sec) (%.2f/min)\n",$bindCount/$totalTimeInSecs, $bindCount/($totalTimeInSecs/60); +} + +# +# Continue with standard report +# +print "Restarts: $serverRestartCount\n"; + +if(%cipher){ + print " Secure Protocol Versions:\n"; + foreach my $key (sort { $b cmp $a } keys %cipher) { + print " - $key - $cipher{$key}\n"; + } + print "\n"; +} + +print "Peak Concurrent Connections: $maxsimConnection\n"; +print "Total Operations: $allOps\n"; +print "Total Results: $allResults\n"; +my ($perf, $tmp); +if ($allOps ne "0"){ + print sprintf "Overall Performance: %.1f%%\n\n" , ($perf = ($tmp = ($allResults / $allOps)*100) > 100 ? 100.0 : $tmp) ; +} else { + print "Overall Performance: No Operations to evaluate\n\n"; +} + +format STDOUT = +Total Connections: @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + $connectionCount, $connStat, + - LDAP Connections: @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + ($connectionCount - $sslCount - $ldapiCount), $ldapConnStat + - LDAPI Connections: @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + $ldapiCount, $ldapiConnStat + - LDAPS Connections: @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + $sslCount, $sslConnStat + - StartTLS Extended Ops: @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + $startTLSCount, $tlsConnStat + +Searches: @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + $srchCount, $searchStat, +Modifications: @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + $modCount, $modStat, +Adds: @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + $addCount, $addStat, +Deletes: @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + $delCount, $deleteStat, +Mod RDNs: @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + $modrdnCount, $modrdnStat, +Compares: @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + $cmpCount, $compareStat, +Binds: @<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + $bindCount, $bindCountStat, +. +write STDOUT; + +# format/write messes up emacs autoformatting - inserting this dummy function +# fixes that +sub dummy { + my $bar = shift; +} + +print "\n"; +print "Proxied Auth Operations: $proxiedAuthCount\n"; +print "Persistent Searches: $persistentSrchCount\n"; +print "Internal Operations: $internalOpCount\n"; +print "Entry Operations: $entryOpCount\n"; +print "Extended Operations: $extopCount\n"; +print "Abandoned Requests: $abandonCount\n"; +print "Smart Referrals Received: $referralCount\n"; +print "\n"; +print "VLV Operations: $vlvCount\n"; +print "VLV Unindexed Searches: $vlvNotesACount\n"; +print "VLV Unindexed Components: $vlvNotesUCount\n"; +print "SORT Operations: $vlvSortCount\n"; +print "\n"; +print "Entire Search Base Queries: $objectclassTopCount\n"; +print "Paged Searches: $pagedSearchCount\n"; +print "Unindexed Searches: $unindexedSrchCountNotesA\n"; +print "Unindexed Components: $unindexedSrchCountNotesU\n"; + +if ($verb eq "yes" || $usage =~ /u/ || $usage =~ /U/){ + if ($unindexedSrchCountNotesA > 0){ + my $conn_hash = $hashes->{conn_hash}; + my $notesa_conn_op = $hashes->{notesa_conn_op}; + my $time_conn_op = $hashes->{time_conn_op}; + my $etime_conn_op = $hashes->{etime_conn_op}; + my $nentries_conn_op = $hashes->{nentries_conn_op}; + my $base_conn_op = $hashes->{base_conn_op}; + my $scope_conn_op = $hashes->{scope_conn_op}; + my $filter_conn_op = $hashes->{filter_conn_op}; + my $bind_conn_op = $hashes->{bind_conn_op}; + + my $notesCount = 1; + my $unindexedIp; + my $binddn_key; + my %uniqFilt = (); # hash of unique filters + my %uniqFilter = (); # hash of unique filters bind dn + my %uniqBindDNs = (); # hash of unique bind dn's + my %uniqBindFilters = (); # hash of filters for a bind DN + + while (my ($srcnt_conn_op, $count) = each %{$notesa_conn_op}) { + my ($srvRstCnt, $conn, $op) = split(",", $srcnt_conn_op); + if ($verb eq "yes" || $usage =~ /u/) { + my $unindexedIp = getIPfromConn($conn, $srvRstCnt); + print "\n Unindexed Search #".$notesCount." (notes=A)\n"; + print " - Date/Time: $time_conn_op->{$srcnt_conn_op}\n"; + print " - Connection Number: $conn\n"; + print " - Operation Number: $op\n"; + print " - Etime: $etime_conn_op->{$srcnt_conn_op}\n"; + print " - Nentries: $nentries_conn_op->{$srcnt_conn_op}\n"; + print " - IP Address: $unindexedIp\n"; + if (exists($base_conn_op->{$srcnt_conn_op}) && defined($base_conn_op->{$srcnt_conn_op})) { + print " - Search Base: $base_conn_op->{$srcnt_conn_op}\n"; + } + if (exists($scope_conn_op->{$srcnt_conn_op}) && defined($scope_conn_op->{$srcnt_conn_op})) { + print " - Search Scope: $scope_conn_op->{$srcnt_conn_op}\n"; + } + } + if (exists($filter_conn_op->{$srcnt_conn_op}) && defined($filter_conn_op->{$srcnt_conn_op})) { + if ($verb eq "yes" || $usage =~ /u/) { + print " - Search Filter: $filter_conn_op->{$srcnt_conn_op}\n"; + } + $uniqFilt{$filter_conn_op->{$srcnt_conn_op}}++; + } + while($op > 0){ + # The bind op is not the same as the search op that triggered the notes=A. + # We have adjust the key by decrementing the op count until we find the last bind op. + $op--; + $binddn_key = "$srvRstCnt,$conn,$op"; + if (exists($bind_conn_op->{$binddn_key}) && defined($bind_conn_op->{$binddn_key})) { + if ($verb eq "yes" || $usage =~ /u/) { + print " - Bind DN: $bind_conn_op->{$binddn_key}\n"; + } + $uniqBindDNs{$bind_conn_op->{$binddn_key}}++; + if( $uniqFilt{$filter_conn_op->{$srcnt_conn_op}} && defined($filter_conn_op->{$srcnt_conn_op})) { + $uniqBindFilters{$bind_conn_op->{$binddn_key}}{$filter_conn_op->{$srcnt_conn_op}}++; + $uniqFilter{$filter_conn_op->{$srcnt_conn_op}}{$bind_conn_op->{$binddn_key}}++; + } + last; + } + } + $notesCount++; + } + if ($usage =~ /U/) { + $notesCount--; + print "\n Unindexed Search Summary - $notesCount total unindexed searches"; + foreach my $key (sort { $uniqFilt{$b} <=> $uniqFilt{$a} } keys %uniqFilt) { + if ($uniqFilt{$key} > 0) { + printf "\n - Unindexed Filters: Filter: $key (occurrences $uniqFilt{$key})\n"; + foreach my $bindkey (sort { $uniqFilter{$key}{$a} <=> $uniqFilter{$key}{$b} } keys %{$uniqFilter{$key}} ) { + printf " - Bind DN: $bindkey (binds $uniqFilter{$key}{$bindkey})\n"; + } + } + } + # now list the binds, and their filters + foreach my $key (sort { $uniqBindDNs{$b} <=> $uniqBindDNs{$a} } keys %uniqBindDNs) { + if ($uniqBindDNs{$key} > 0) { + printf "\n - Unindexed Bind DNs: Bind DN: $key (binds $uniqBindDNs{$key})\n"; + foreach my $bindkey (sort { $uniqBindFilters{$key}{$a} <=> $uniqBindFilters{$key}{$b} } keys %{$uniqBindFilters{$key}} ) { + printf " - Unindexed Filter: $bindkey (occurrances $uniqBindFilters{$key}{$bindkey})\n"; + } + } + } + } + } + if ($unindexedSrchCountNotesU > 0){ + my $conn_hash = $hashes->{conn_hash}; + my $notesu_conn_op = $hashes->{notesu_conn_op}; + my $time_conn_op = $hashes->{time_conn_op}; + my $etime_conn_op = $hashes->{etime_conn_op}; + my $nentries_conn_op = $hashes->{nentries_conn_op}; + my $base_conn_op = $hashes->{base_conn_op}; + my $scope_conn_op = $hashes->{scope_conn_op}; + my $filter_conn_op = $hashes->{filter_conn_op}; + my $bind_conn_op = $hashes->{bind_conn_op}; + + my $notesCount = 1; + my $unindexedIp; + my $binddn_key; + my %uniqFilt = (); # hash of unique filters + my %uniqFilter = (); # hash of unique filters bind dn + my %uniqBindDNs = (); # hash of unique bind dn's + my %uniqBindFilters = (); # hash of filters for a bind DN + + while (my ($srcnt_conn_op, $count) = each %{$notesu_conn_op}) { + my ($srvRstCnt, $conn, $op) = split(",", $srcnt_conn_op); + if ($verb eq "yes" || $usage =~ /u/) { + $unindexedIp = getIPfromConn($conn, $srvRstCnt); + print "\n Unindexed Component #".$notesCount." (notes=U)\n"; + print " - Date/Time: $time_conn_op->{$srcnt_conn_op}\n"; + print " - Connection Number: $conn\n"; + print " - Operation Number: $op\n"; + print " - Etime: $etime_conn_op->{$srcnt_conn_op}\n"; + print " - Nentries: $nentries_conn_op->{$srcnt_conn_op}\n"; + print " - IP Address: $unindexedIp\n"; + if (exists($base_conn_op->{$srcnt_conn_op}) && defined($base_conn_op->{$srcnt_conn_op})) { + print " - Search Base: $base_conn_op->{$srcnt_conn_op}\n"; + } + if (exists($scope_conn_op->{$srcnt_conn_op}) && defined($scope_conn_op->{$srcnt_conn_op})) { + print " - Search Scope: $scope_conn_op->{$srcnt_conn_op}\n"; + } + } + if (exists($filter_conn_op->{$srcnt_conn_op}) && defined($filter_conn_op->{$srcnt_conn_op})) { + if ($verb eq "yes" || $usage =~ /u/) { + print " - Search Filter: $filter_conn_op->{$srcnt_conn_op}\n"; + } + $uniqFilt{$filter_conn_op->{$srcnt_conn_op}}++; + } + while($op > 0){ + # The bind op is not the same as the search op that triggered the notes=U. + # We have adjust the key by decrementing the op count until we find the last bind op. + $op--; + $binddn_key = "$srvRstCnt,$conn,$op"; + if (exists($bind_conn_op->{$binddn_key}) && defined($bind_conn_op->{$binddn_key})) { + if ($verb eq "yes" || $usage =~ /u/) { + print " - Bind DN: $bind_conn_op->{$binddn_key}\n"; + } + $uniqBindDNs{$bind_conn_op->{$binddn_key}}++; + if( $uniqFilt{$filter_conn_op->{$srcnt_conn_op}} && defined($filter_conn_op->{$srcnt_conn_op})) { + $uniqBindFilters{$bind_conn_op->{$binddn_key}}{$filter_conn_op->{$srcnt_conn_op}}++; + $uniqFilter{$filter_conn_op->{$srcnt_conn_op}}{$bind_conn_op->{$binddn_key}}++; + } + last; + } + } + $notesCount++; + } + if ($usage =~ /U/) { + $notesCount--; + print "\n Unindexed Component Summary - $notesCount total unindexed components"; + foreach my $key (sort { $uniqFilt{$b} <=> $uniqFilt{$a} } keys %uniqFilt) { + if ($uniqFilt{$key} > 0) { + printf "\n - Unindexed Filters: Filter: $key (occurrences $uniqFilt{$key})\n"; + foreach my $bindkey (sort { $uniqFilter{$key}{$a} <=> $uniqFilter{$key}{$b} } keys %{$uniqFilter{$key}} ) { + printf " - Bind DN: $bindkey (binds $uniqFilter{$key}{$bindkey})\n"; + } + } + } + # now list the binds, and their filters + foreach my $key (sort { $uniqBindDNs{$b} <=> $uniqBindDNs{$a} } keys %uniqBindDNs) { + if ($uniqBindDNs{$key} > 0) { + printf "\n - Unindexed Bind DNs: Bind DN: $key (binds $uniqBindDNs{$key})\n"; + foreach my $bindkey (sort { $uniqBindFilters{$key}{$a} <=> $uniqBindFilters{$key}{$b} } keys %{$uniqBindFilters{$key}} ) { + printf " - Unindexed Filter: $bindkey (occurrances $uniqBindFilters{$key}{$bindkey})\n"; + } + } + } + } + } +} # end of unindexed search report + +print "\n"; +print "FDs Taken: $fdTaken\n"; +print "FDs Returned: $fdReturned\n"; +print "Highest FD Taken: $highestFdTaken\n\n"; +print "Broken Pipes: $brokenPipeCount\n"; +if ($brokenPipeCount > 0){ + my $rc = $hashes->{rc}; + my @etext; + foreach my $key (sort { $rc->{$b} <=> $rc->{$a} } keys %{$rc}) { + if ($rc->{$key} > 0){ + if ($conn{$key} eq ""){$conn{$key} = "**Unknown**";} + push @etext, sprintf " - %-4s (%2s) %-40s\n",$rc->{$key},$conn{$key},$connmsg{$key}; + } + } + print @etext; + print "\n"; +} + +print "Connections Reset By Peer: $connResetByPeerCount\n"; +if ($connResetByPeerCount > 0){ + my $src = $hashes->{src}; + my @retext; + foreach my $key (sort { $src->{$b} <=> $src->{$a} } keys %{$src}) { + if ($src->{$key} > 0){ + if ($conn{$key} eq ""){$conn{$key} = "**Unknown**";} + push @retext, sprintf " - %-4s (%2s) %-40s\n",$src->{$key},$conn{$key},$connmsg{$key}; + } + } + print @retext; + print "\n"; +} + +print "Resource Unavailable: $resourceUnavailCount\n"; +if ($resourceUnavailCount > 0){ + my $rsrc = $hashes->{rsrc}; + my @rtext; + foreach my $key (sort { $rsrc->{$b} <=> $rsrc->{$a} } keys %{$rsrc}) { + if ($rsrc->{$key} > 0){ + if ($conn{$key} eq ""){$conn{$key} = "**Resource Issue**";} + push @rtext, sprintf " - %-4s (%2s) %-40s\n",$rsrc->{$key},$conn{$key},$connmsg{$key}; + } + } + print @rtext; +} +print "Max BER Size Exceeded: $maxBerSizeCount\n"; +print "\n"; +print "Binds: $bindCount\n"; +print "Unbinds: $unbindCount\n"; +print " - LDAP v2 Binds: $v2BindCount\n"; +print " - LDAP v3 Binds: $v3BindCount\n"; +print " - AUTOBINDs: $autobindCount\n"; +print " - SSL Client Binds: $sslClientBindCount\n"; +print " - Failed SSL Client Binds: $sslClientFailedCount\n"; +print " - SASL Binds: $saslBindCount\n"; +if ($saslBindCount > 0){ + my $saslmech = $hashes->{saslmech}; + foreach my $saslb ( sort {$saslmech->{$b} <=> $saslmech->{$a} } (keys %{$saslmech}) ){ + printf " %-4s - %s\n",$saslb, $saslmech->{$saslb}; + } +} + +print " - Directory Manager Binds: $rootDNBindCount\n"; +print " - Anonymous Binds: $anonymousBindCount\n"; +my $otherBindCount = $bindCount -($rootDNBindCount + $anonymousBindCount); +print " - Other Binds: $otherBindCount\n\n"; + +########################################################################## +# Verbose Logging Section # +########################################################################## + +################################### +# # +# Display Connection Latency # +# # +################################### + +if ($verb eq "yes" || $usage =~ /y/){ + print "\n\n----- Connection Latency Details -----\n\n"; + print " (in seconds)\t\t<=1\t2\t3\t4-5\t6-10\t11-15\t>15\n"; + print " --------------------------------------------------------------------------\n"; + print " (# of connections)\t"; + for (my $i=0; $i <=$#latency; $i++) { + if (defined($latency[$i])) { + print "$latency[$i]\t"; + } + } +} + +################################### +# # +# Display Open Connections # +# # +################################### + +if ($verb eq "yes" || $usage =~ /p/){ + if (%openConnection){ + print "\n\n----- Current Open Connection IDs ----- \n\n"; + while (my ($connid, $ip) = each %openConnection) { + print "Conn Number: $connid ($ip)\n"; + } + } +} + +################################### +# # +# Display Error Codes # +# # +################################### + +if ($usage =~ /e/i || $verb eq "yes"){ + print "\n\n----- Errors -----\n"; + + for (my $i = 0; $i<98; $i++){ + if (defined($err[$i]) && $err[$i] ne "" && defined($errorCode[$i]) && $errorCode[$i] >0) { + push @errtext, sprintf "%-8s %12s %-25s","err=$i",$errorCode[$i],$err[$i]; + } + } + + for (my $i = 0; $i < $#errtext; $i++){ + for (my $ii = 0; $ii < $#errtext; $ii++){ + my $yy="0"; + my $zz="0"; + while ($errtext[$ii] =~ /(\w+)\s/g){ + $errornum[$yy]="$1"; + $yy++; + } + while ($errtext[$ii+1] =~ /(\w+)\s/g){ + $errornum2[$zz]="$1"; + $zz++; + } + if ($errornum2[1] > $errornum[1]){ + $tmp = $errtext[$ii]; + $errtext[$ii] = $errtext[$ii+1]; + $errtext[$ii+1] = $tmp; + } + } + } + for (my $i = 0; $i <= $#errtext; $i++){ + $errtext[$i] =~ s/\n//g; + print "\n" . $errtext[$i]; + } +} + +#################################### +# # +# Print Failed Logins # +# # +#################################### + +if ($verb eq "yes" || $usage =~ /f/ ){ + if ($badPwdCount > 0){ + print "\n\n----- Top $sizeCount Failed Logins ------\n\n"; + + if ($ds6x eq "true"){ + my $ds6xbadpwd = $hashes->{ds6xbadpwd}; + my $ds6loop = 0; + foreach my $ds6bp (sort { $ds6xbadpwd->{$b} <=> $ds6xbadpwd->{$a} } keys %{$ds6xbadpwd}) { + if ($ds6loop > $sizeCount){ last; } + printf "%-4s %-40s\n", $ds6xbadpwd->{$ds6bp}, $ds6bp; + $ds6loop++; + } + } else { + # key is conn,op - val is binddn + my $bind_conn_op = $hashes->{bind_conn_op}; + # key is conn,op - val is count + my $badpwd_conn_op = $hashes->{badpwd_conn_op}; + # key is binddn - val is count + my %badPassword = (); + my %badPasswordIp = (); + while (my ($srcnt_conn_op, $ip) = each %{$badpwd_conn_op}) { + my ($srvRstCnt, $conn, $op) = split(",", $srcnt_conn_op); + if (exists($bind_conn_op->{$srcnt_conn_op}) && defined($bind_conn_op->{$srcnt_conn_op})) { + my $binddn = $bind_conn_op->{$srcnt_conn_op}; + $badPassword{$binddn}++; + $badPasswordIp{$ip}++; + } + } + # sort the new hash of $badPassword{} + my $bpTotal = 0; + my $bpCount = 0; + foreach my $badpw (sort {$badPassword{$b} <=> $badPassword{$a} } keys %badPassword){ + if ($bpCount > $sizeCount){ last;} + $bpCount++; + $bpTotal = $bpTotal + $badPassword{"$badpw"}; + printf "%-4s %-40s\n", $badPassword{"$badpw"}, $badpw; + } + print "\nFrom the IP address(s) :\n\n"; + $bpCount = 0; + foreach my $ip (sort {$badPasswordIp{$b} <=> $badPasswordIp{$a} } keys %badPasswordIp){ + if ($bpCount > $sizeCount){ last;} + $bpCount++; + printf "%-4s %-16s\n", $badPasswordIp{$ip}, $ip; + } + if ($bpTotal > $badPwdCount){ + print "\n** Warning : Wrongly reported failed login attempts : ". ($bpTotal - $badPwdCount) . "\n"; + } + } # this ends the if $ds6x = true + } +} + +#################################### +# # +# Print Connection Codes # +# # +#################################### + + +if ($connCodeCount > 0){ + if ($usage =~ /c/i || $verb eq "yes"){ + print "\n\n----- Total Connection Codes -----\n\n"; + my $conncount = $hashes->{conncount}; + my @conntext; + foreach my $key (sort { $conncount->{$b} <=> $conncount->{$a} } keys %{$conncount}) { + if ($conncount->{$key} > 0){ + push @conntext, sprintf "%-4s %6s %-40s\n",$key,$conncount->{$key},$connmsg{ $key }; + } + } + print @conntext; + } +} + +######################################## +# # +# Gather and Process all unique IPs # +# # +######################################## + +if ($usage =~ /i/i || $verb eq "yes"){ + my $ip_hash = $hashes->{ip_hash}; + my $exCount = $hashes->{excount}; + my @ipkeys = keys %{$ip_hash}; + my @exxCount = keys %${exCount}; + my $ip_count = ($#ipkeys + 1)-($#exxCount + 1); + my $ccount = 0; + if ($ip_count > 0){ + print "\n\n----- Top $sizeCount Clients -----\n\n"; + print "Number of Clients: $ip_count\n\n"; + foreach my $key (sort { $ip_hash->{$b} <=> $ip_hash->{$a} } @ipkeys) { + my $exc = "no"; + if ($ccount > $sizeCount){ last;} + $ccount++; + for (my $xxx =0; $xxx < $#excludeIP; $xxx++){ + if ($excludeIP[$xxx] eq $key){$exc = "yes";} + } + if ($exc ne "yes"){ + if ($ip_hash->{ $key } eq ""){$ip_hash->{ $key } = "?";} + printf "[%s] Client: %s\n",$ccount, $key; + printf "%10s - Connections\n", $ip_hash->{ $key }; + my %counts; + map { $counts{$_} = $hashes->{$_}->{$key} if (defined($hashes->{$_}->{$key})) } @conncodes; + foreach my $code (sort { $counts{$b} <=> $counts{$a} } keys %counts) { + if ($code eq 'count' ) { next; } + printf "%10s - %s (%s)\n", $counts{ $code }, $code, $connmsg{ $code }; + } + print "\n"; + } + } + } +} + +################################### +# # +# Gather All unique Bind DN's # +# # +################################### + +if ($usage =~ /b/i || $verb eq "yes"){ + my $bindlist = $hashes->{bindlist}; + my @bindkeys = keys %{$bindlist}; + my $bind_count = $#bindkeys + 1; + if ($bind_count > 0){ + print "\n\n----- Top $sizeCount Bind DN's -----\n\n"; + print "Number of Unique Bind DN's: $bind_count\n\n"; + my $bindcount = 0; + foreach my $dn (sort { $bindlist->{$b} <=> $bindlist->{$a} } @bindkeys) { + if ($bindcount < $sizeCount){ + printf "%-8s %-40s\n", $bindlist->{ $dn },$dn; + } else { + last; + } + $bindcount++; + } + } +} + +######################################### +# # +# Gather and process search bases # +# # +######################################### + +if ($usage =~ /a/i || $verb eq "yes"){ + my $base = $hashes->{base}; + my @basekeys = keys %{$base}; + my $base_count = $#basekeys + 1; + if ($base_count > 0){ + print "\n\n----- Top $sizeCount Search Bases -----\n\n"; + print "Number of Unique Search Bases: $base_count\n\n"; + my $basecount = 0; + foreach my $bas (sort { $base->{$b} <=> $base->{$a} } @basekeys) { + if ($basecount < $sizeCount){ + printf "%-8s %-40s\n", $base->{ $bas },$bas; + } else { + last; + } + $basecount++; + } + } +} + +######################################### +# # +# Gather and process search filters # +# # +######################################### + +if ($usage =~ /l/ || $verb eq "yes"){ + my $filter = $hashes->{filter}; + my @filterkeys = keys %{$filter}; + my $filter_count = $#filterkeys + 1; + if ($filter_count > 0){ + print "\n\n----- Top $sizeCount Search Filters -----\n"; + print "\nNumber of Unique Search Filters: $filter_count\n\n"; + my $filtercount = 0; + foreach my $filt (sort { $filter->{$b} <=> $filter->{$a} } @filterkeys){ + if ($filtercount < $sizeCount){ + printf "%-8s %-40s\n", $filter->{$filt}, $filt; + } else { + last; + } + $filtercount++; + } + } +} + +######################################### +# # +# Gather and Process the unique etimes # +# # +######################################### + +my $first; +if ($usage =~ /t/i || $verb eq "yes"){ + my $etime = $hashes->{etime}; + my @ekeys = keys %{$etime}; + # + # print most often etimes + # + print "\n\n----- Top $sizeCount Most Frequent etimes -----\n\n"; + my $eloop = 0; + my $retime = 0; + foreach my $et (sort { $etime->{$b} <=> $etime->{$a} } @ekeys) { + if ($eloop == $sizeCount) { last; } + if ($retime ne "2"){ + $first = $et; + $retime = "2"; + } + printf "%-8s %-12s\n", $etime->{ $et }, "etime=$et"; + $eloop++; + } + # + # print longest etimes + # + print "\n\n----- Top $sizeCount Longest etimes -----\n\n"; + $eloop = 0; + foreach my $et (sort { $b <=> $a } @ekeys) { + if ($eloop == $sizeCount) { last; } + printf "%-12s %-10s\n","etime=$et",$etime->{ $et }; + $eloop++; + } +} + +####################################### +# # +# Gather and Process unique nentries # +# # +####################################### + + +if ($usage =~ /n/i || $verb eq "yes"){ + my $nentries = $hashes->{nentries}; + my @nkeys = keys %{$nentries}; + print "\n\n----- Top $sizeCount Largest nentries -----\n\n"; + my $eloop = 0; + foreach my $nentry (sort { $b <=> $a } @nkeys){ + if ($eloop == $sizeCount) { last; } + printf "%-18s %12s\n","nentries=$nentry", $nentries->{ $nentry }; + $eloop++; + } + print "\n\n----- Top $sizeCount Most returned nentries -----\n\n"; + $eloop = 0; + foreach my $nentry (sort { $nentries->{$b} <=> $nentries->{$a} } @nkeys){ + if ($eloop == $sizeCount) { last; } + printf "%-12s %-14s\n", $nentries->{ $nentry }, "nentries=$nentry"; + $eloop++; + } + print "\n"; +} + +########################################## +# # +# Gather and process extended operations # +# # +########################################## + +if ($usage =~ /x/i || $verb eq "yes"){ + if ($extopCount > 0){ + my $oid = $hashes->{oid}; + print "\n\n----- Extended Operations -----\n\n"; + foreach my $oids (sort { $oid->{$b} <=> $oid->{$a} } (keys %{$oid}) ){ + my $oidmessage; + if ($oids eq "2.16.840.1.113730.3.5.1"){ $oidmessage = "Transaction Request"} #depreciated? + elsif ($oids eq "2.16.840.1.113730.3.5.2"){ $oidmessage = "Transaction Response"} #depreciated? + elsif ($oids eq "2.16.840.1.113730.3.5.3"){ $oidmessage = "Start Replication Request (incremental update)"} + elsif ($oids eq "2.16.840.1.113730.3.5.4"){ $oidmessage = "Replication Response"} + elsif ($oids eq "2.16.840.1.113730.3.5.5"){ $oidmessage = "End Replication Request (incremental update)"} + elsif ($oids eq "2.16.840.1.113730.3.5.6"){ $oidmessage = "Replication Entry Request"} + elsif ($oids eq "2.16.840.1.113730.3.5.7"){ $oidmessage = "Start Bulk Import"} + elsif ($oids eq "2.16.840.1.113730.3.5.8"){ $oidmessage = "Finished Bulk Import"} + elsif ($oids eq "2.16.840.1.113730.3.5.9"){ $oidmessage = "DS71 Replication Entry Request"} + elsif ($oids eq "2.16.840.1.113730.3.6.1"){ $oidmessage = "Incremental Update Replication Protocol"} + elsif ($oids eq "2.16.840.1.113730.3.6.2"){ $oidmessage = "Total Update Replication Protocol (Initialization)"} + elsif ($oids eq "2.16.840.1.113730.3.4.13"){ $oidmessage = "Replication Update Info Control"} + elsif ($oids eq "2.16.840.1.113730.3.6.4"){ $oidmessage = "DS71 Replication Incremental Update Protocol"} + elsif ($oids eq "2.16.840.1.113730.3.6.3"){ $oidmessage = "DS71 Replication Total Update Protocol"} + elsif ($oids eq "2.16.840.1.113730.3.5.12"){ $oidmessage = "DS90 Start Replication Request"} + elsif ($oids eq "2.16.840.1.113730.3.5.13"){ $oidmessage = "DS90 Replication Response"} + elsif ($oids eq "1.2.840.113556.1.4.841"){ $oidmessage = "Replication Dirsync Control"} + elsif ($oids eq "1.2.840.113556.1.4.417"){ $oidmessage = "Replication Return Deleted Objects"} + elsif ($oids eq "1.2.840.113556.1.4.1670"){ $oidmessage = "Replication WIN2K3 Active Directory"} + elsif ($oids eq "2.16.840.1.113730.3.6.5"){ $oidmessage = "Replication CleanAllRUV"} + elsif ($oids eq "2.16.840.1.113730.3.6.6"){ $oidmessage = "Replication Abort CleanAllRUV"} + elsif ($oids eq "2.16.840.1.113730.3.6.7"){ $oidmessage = "Replication CleanAllRUV Get MaxCSN"} + elsif ($oids eq "2.16.840.1.113730.3.6.8"){ $oidmessage = "Replication CleanAllRUV Check Status"} + elsif ($oids eq "2.16.840.1.113730.3.5.10"){ $oidmessage = "DNA Plugin Request"} + elsif ($oids eq "2.16.840.1.113730.3.5.11"){ $oidmessage = "DNA Plugin Response"} + elsif ($oids eq "1.3.6.1.4.1.1466.20037"){ $oidmessage = "Start TLS"} + elsif ($oids eq "1.3.6.1.4.1.4203.1.11.1"){ $oidmessage = "Password Modify"} + elsif ($oids eq "2.16.840.1.113730.3.4.20"){ $oidmessage = "MTN Control Use One Backend"} + else {$oidmessage = "Other"} + printf "%-6s %-23s %-60s\n", $oid->{ $oids }, $oids, $oidmessage; + } + } +} + +############################################ +# # +# Print most commonly requested attributes # +# # +############################################ + +if ($usage =~ /r/i || $verb eq "yes"){ + if ($anyAttrs > 0){ + my $attr = $hashes->{attr}; + print "\n\n----- Top $sizeCount Most Requested Attributes -----\n\n"; + my $eloop = 0; + foreach my $mostAttr (sort { $attr->{$b} <=> $attr->{$a} } (keys %{$attr}) ){ + if ($eloop eq $sizeCount){ last; } + printf "%-10s %-19s\n", $attr->{$mostAttr}, $mostAttr; + $eloop++; + } + } +} + +############################# +# # +# abandoned operation stats # +# # +############################# + +if ($usage =~ /g/i || $verb eq "yes"){ + my $abandonTotal = $srchCount + $delCount + $modCount + $addCount + $modrdnCount + $bindCount + $extopCount + $cmpCount; + if ($verb eq "yes" && $abandonCount > 0 && $abandonTotal > 0){ + my $conn_hash = $hashes->{conn_hash}; + my $abandon_conn_op = $hashes->{abandon_conn_op}; + my $srch_conn_op = $hashes->{srch_conn_op}; + my $del_conn_op = $hashes->{del_conn_op}; + my $add_conn_op = $hashes->{add_conn_op}; + my $mod_conn_op = $hashes->{mod_conn_op}; + my $cmp_conn_op = $hashes->{cmp_conn_op}; + my $mdn_conn_op = $hashes->{mdn_conn_op}; + my $bind_conn_op = $hashes->{bind_conn_op}; + my $unbind_conn_op = $hashes->{unbind_conn_op}; + my $ext_conn_op = $hashes->{ext_conn_op}; + + print "\n\n----- Abandon Request Stats -----\n\n"; + + while (my ($srcnt_conn_op, $targ_msgid) = each %{$abandon_conn_op}) { + my ($srvRstCnt, $conn, $op) = split(",", $srcnt_conn_op); + my ($targetop, $msgid) = split(",", $targ_msgid); + my $srcnt_conn_targ = "$srvRstCnt,$conn,$targetop"; + my $clientIP = getIPfromConn($conn, $srvRstCnt); + if (exists($srch_conn_op->{$srcnt_conn_targ}) && defined($srch_conn_op->{$srcnt_conn_targ})) { + print " - SRCH conn=$conn op=$targetop msgid=$msgid client=$clientIP\n"; + } elsif (exists($del_conn_op->{$srcnt_conn_targ}) && defined($del_conn_op->{$srcnt_conn_targ})) { + print " - DEL conn=$conn op=$targetop msgid=$msgid client=$clientIP\n"; + } elsif (exists($add_conn_op->{$srcnt_conn_targ}) && defined($add_conn_op->{$srcnt_conn_targ})) { + print " - ADD conn=$conn op=$targetop msgid=$msgid client=$clientIP\n"; + } elsif (exists($mod_conn_op->{$srcnt_conn_targ}) && defined($mod_conn_op->{$srcnt_conn_targ})) { + print " - MOD conn=$conn op=$targetop msgid=$msgid client=$clientIP\n"; + } elsif (exists($cmp_conn_op->{$srcnt_conn_targ}) && defined($cmp_conn_op->{$srcnt_conn_targ})) { + print " - CMP conn=$conn op=$targetop msgid=$msgid client=$clientIP\n"; + } elsif (exists($mdn_conn_op->{$srcnt_conn_targ}) && defined($mdn_conn_op->{$srcnt_conn_targ})) { + print " - MODRDN conn=$conn op=$targetop msgid=$msgid client=$clientIP\n"; + } elsif (exists($bind_conn_op->{$srcnt_conn_targ}) && defined($bind_conn_op->{$srcnt_conn_targ})) { + print " - BIND conn=$conn op=$targetop msgid=$msgid client=$clientIP\n"; + } elsif (exists($unbind_conn_op->{$srcnt_conn_targ}) && defined($unbind_conn_op->{$srcnt_conn_targ})) { + print " - UNBIND conn=$conn op=$targetop msgid=$msgid client=$clientIP\n"; + } elsif (exists($ext_conn_op->{$srcnt_conn_targ}) && defined($ext_conn_op->{$srcnt_conn_targ})) { + print " - EXT conn=$conn op=$targetop msgid=$msgid client=$clientIP\n"; + } else { + print " - UNKNOWN conn=$conn op=$targetop msgid=$msgid client=$clientIP\n"; + } + } + } +} +print "\n"; + +####################################### +# # +# Recommendations # +# # +####################################### + +if ($usage =~ /j/i || $verb eq "yes"){ + my $conncount = $hashes->{conncount}; + print "\n----- Recommendations -----\n"; + my $recCount = "1"; + if ($unindexedSrchCountNotesA > 0){ + print "\n $recCount. You have unindexed searches, this can be caused from a search on an unindexed attribute, or your returned results exceeded the allidsthreshold. Unindexed searches are not recommended. To refuse unindexed searches, switch \'nsslapd-require-index\' to \'on\' under your database entry (e.g. cn=UserRoot,cn=ldbm database,cn=plugins,cn=config).\n"; + $recCount++; + } + if ($unindexedSrchCountNotesU > 0){ + print "\n $recCount. You have unindexed components, this can be caused from a search on an unindexed attribute, or your returned results exceeded the allidsthreshold. Unindexed components are not recommended. To refuse unindexed searches, switch \'nsslapd-require-index\' to \'on\' under your database entry (e.g. cn=UserRoot,cn=ldbm database,cn=plugins,cn=config).\n"; + $recCount++; + } + if (defined($conncount->{"T1"}) and $conncount->{"T1"} > 0){ + print "\n $recCount. You have some connections that are are being closed by the idletimeout setting. You may want to increase the idletimeout if it is set low.\n"; + $recCount++; + } + if (defined($conncount->{"T2"}) and $conncount->{"T2"} > 0){ + print "\n $recCount. You have some coonections that are being closed by the ioblocktimeout setting. You may want to increase the ioblocktimeout.\n"; + $recCount++; + } + # compare binds to unbinds, if the difference is more than 30% of the binds, then report a issue + if (($bindCount - $unbindCount) > ($bindCount*.3)){ + print "\n $recCount. You have a significant difference between binds and unbinds. You may want to investigate this difference.\n"; + $recCount++; + } + # compare fds taken and return, if the difference is more than 30% report a issue + if (($fdTaken -$fdReturned) > ($fdTaken*.3)){ + print "\n $recCount. You have a significant difference between file descriptors taken and file descriptors returned. You may want to investigate this difference.\n"; + $recCount++; + } + if ($rootDNBindCount > ($bindCount *.2)){ + print "\n $recCount. You have a high number of Directory Manager binds. The Directory Manager account should only be used under certain circumstances. Avoid using this account for client applications.\n"; + $recCount++; + } + if ($errorCount > $successCount){ + print "\n $recCount. You have more unsuccessful operations than successful operations. You should investigate this difference.\n"; + $recCount++; + } + if (defined($conncount->{"U1"}) and $conncount->{"U1"} < ($connCodeCount - $conncount->{"U1"})){ + print "\n $recCount. You have more abnormal connection codes than cleanly closed connections. You may want to investigate this difference.\n"; + $recCount++; + } + if ($first > 0){ + print "\n $recCount. You have a majority of etimes that are greater than zero, you may want to investigate this performance problem.\n"; + $recCount++; + } + if ($objectclassTopCount > ($srchCount *.25)){ + print "\n $recCount. You have a high number of searches that query the entire search base. Although this is not necessarily bad, it could be resource intensive if the search base contains many entries.\n"; + $recCount++; + } + if ($recCount == 1){ + print "\nNone.\n"; + } + print "\n"; +} + +# +# We're done, clean up the data files +# +removeDataFiles(); +exit (0); + + +####################### +# # +# Display Usage # +# # +####################### + +sub displayUsage { + + print "Usage:\n\n"; + + print " ./logconv.pl [-h] [-d|--rootdn ] [-s|--sizeLimit ] [-v|verison] [-Vi|verbose]\n"; + print " [-S|--startTime ] [-E|--endTime ] \n"; + print " [-efcibaltnxrgjuyp] [ access log ... ... ]\n\n"; + + print "- Commandline Switches:\n\n"; + + print " -h, --help help/usage\n"; + print " -d, --rootDN default is \"cn=directory manager\"\n"; + print " -D, --data default is \"/tmp\"\n"; + print " -s, --sizeLimit default is 20\n"; + print " -X, --excludeIP E.g. Load balancers\n"; + print " -v, --version show version of tool\n"; + print " -S, --startTime
    Bucket Address Key Access Count Delete Next LRU MRU Data
    \n"; + print "\n
    \n"; + print "Replica ID: "; + print "$serverid\n"; + print "Replica Root: "; + print "$replicaroot\n"; + print "Max CSN: "; + print "$maxcsn\n"; + } + return $maxcsn; +} + +sub print_hub_header +{ + my ($ridx, $mid) = @_; + my ($myruv) = $allruvs {"$ridx:$mid"}; + my ($maxcsnval) = split ( /;/, "$myruv" ); + my ($maxcsn) = &to_string_csn ($maxcsnval); + my ($sidx, $last_sidx, $replicaroot, $replicatype, $serverid) = split (/:/, $allreplicas[$ridx]); + + # Print the master name + if ( $last_sidx != $sidx ) { + my ($ldapurl) = &get_ldap_url ($sidx, $sidx); + &print_legend if ( $last_sidx < 0); + if($opt_s){ + print "Hub: $ldapurl\n"; + } else { + print "


    \n"; + print "\n

    \n"; + print "Hub:  $ldapurl
    \n"; + } + $last_sidx = $sidx; + } + + # Print the current replica info on the master + if($opt_s){ + print "\nReplica Root: $replicaroot\n"; + print "Replica ID: $serverid\n"; + print "Max CSN: $maxcsn\n-\n"; + } else { + print "\n

    \n"; + print "\n\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; +} + +sub print_consumers +{ + my ($m_ridx, $mid) = @_; + my ($ignore, $m_replicaroot) = split (/:/, $allreplicas[$m_ridx]); + my (@consumers, @ouragreements, @myagreements); + my ($s_ridx, $c_ridx, $s_sidx, $conntype, $schedule, $status); + my ($c_maxcsn, $c_maxcsn_str, $c_lastmodified, $c_sidx, $lag, $markcolor); + my ($c_replicaroot, $c_replicatype); + my ($first_entry, $s_ldapurl, $c_ldapurl); + my $supplier_maxcsn = "Unavailable"; + my ($nrows); + my ($found); + + undef @ouragreements; + $c_lastmodified = "Unavailable"; + + # Collect all the consumer replicas for the current master replica + push (@consumers, $m_ridx); + foreach (@consumers) { + $s_ridx = $_; + for (@allagreements) { + next if ($_->{ridx} != $s_ridx); + $c_ridx = $_->{cidx}; + next if $c_ridx == $m_ridx; + push @ouragreements, $_; + $found = 0; + foreach (@consumers) { + if ($_ == $c_ridx) { + $found = 1; + last; + } + } + push (@consumers, $c_ridx) if !$found; + } + } + + # Print each consumer replica + my ($myruv) = $allruvs {"$m_ridx:$mid"}; + my ($m_maxcsn) = split ( /;/, "$myruv" ); + foreach (@consumers) { + $c_ridx = $_; + next if $c_ridx == $m_ridx; + + if ($c_ridx >= 0) { + $myruv = $allruvs {"$c_ridx:$mid"}; + if ($myruv) { + ($c_maxcsn, $c_lastmodified) = split ( /;/, $myruv ); + ($c_sidx, $c_replicaroot, $c_replicatype) = split (/:/, $allreplicas[$c_ridx]); + $c_replicaroot = "same as master" if $m_replicaroot eq $c_replicaroot; + } + } + else { + # $c_ridx is actually -$c_sidx when c is not available + $c_sidx = -$c_ridx; + $c_maxcsn_str = "Unavailable"; + $lag = "n/a"; + $markcolor = "red"; + $c_replicaroot = "Unavailable"; + $c_replicatype = "Unavailable"; + } + + $nrows = 0; + foreach (@ouragreements) { + $s_ridx = $_->{ridx}; + $s_sidx = $1 if $allreplicas [$s_ridx] =~ /^(\d+):/; + $s_ldapurl = &get_ldap_url ($s_sidx, "n/a"); + next if ($_->{cidx} != $c_ridx || $supplierUrl ne $s_ldapurl); + $nrows++; + } + + $first_entry = 1; + foreach (@ouragreements) { + $s_ridx = $_->{ridx}; + $s_sidx = $1 if $allreplicas [$s_ridx] =~ /^(\d+):/; + $s_ldapurl = &get_ldap_url ($s_sidx, "n/a"); + next if ($_->{cidx} != $c_ridx || $supplierUrl ne $s_ldapurl); + $conntype = $_->{nsDS5ReplicaBindMethod}; + $status = $_->{nsds5replicaLastUpdateStatus}; + $schedule = $_->{nsds5ReplicaUpdateSchedule}; + + # Print out the consumer's replica and ruvs + if(!$opt_s){ print "\n\n"; } + if ($first_entry) { + $first_entry = 0; + $c_ldapurl = &get_ldap_url ($c_sidx, $conntype); + if ($c_ridx >= 0) { + ($c_maxcsn_str, $lag, $markcolor, $supplier_maxcsn) = + &cacl_time_lag ($_->{nsDS5ReplicaRoot}, + $_->{cn}, + $_->{nsds5ReplicaHost}, + $_->{nsds5ReplicaPort}, + $s_ridx, + $m_maxcsn, + $c_maxcsn); + if(!$opt_s){ $c_maxcsn_str =~ s/ /\/; } + } + if($opt_s){ + print "-\nConsumer: $c_ldapurl\nType: $c_replicatype\n"; + print "Time Lag: $lag\n"; + print "Supplier Max CSN: $supplier_maxcsn\n"; + print "Consumer Max CSN: $c_maxcsn_str\n"; + print "Last Modify Time: $c_lastmodified\n"; + } else { + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + } + } + if($opt_s){ + print "Supplier: $s_ldapurl\n"; + } else { + print "\n"; + } + my $changecount = $_->{nsds5replicaChangesSentSinceStartup}; + if ( $changecount =~ /^$mid:(\d+)\/(\d+) / || $changecount =~ / $mid:(\d+)\/(\d+) / ) { + $changecount = "$1 / $2"; + } + elsif ( $changecount =~ /^(\d+)$/ ) { + $changecount = $changecount . " / " . "$_->{nsds5replicaChangesSkippedSinceStartup}"; + } + else { + $changecount = "0 / 0"; + } + if($opt_s){ + print "Sent/Skipped: $changecount\n"; + } else { + print "\n"; + } + my $redfontstart = ""; + my $redfontend = ""; + if ($status !~ /Error \(0\)/i) { + $redfontstart = ""; + $redfontend = ""; + } + elsif ($status =~ /^(\d+) /) { + if ( $1 != 0 ) { + # warning + $redfontstart = ""; + $redfontend = ""; + } + } + if($opt_s){ + print "Update Status: $status\n"; + print "Update Started: ", &format_z_time($_->{nsds5replicaLastUpdateStart}), "\n"; + print "Update Ended: ", &format_z_time($_->{nsds5replicaLastUpdateEnd}), "\n"; + } else { + print "\n"; + print "\n"; + print "\n"; + } + if ( $schedule =~ /always/i ) { + if($opt_s){ + print "Schedule: $schedule\n"; + } else { + print "\n"; + } + } + else { + my ($ndays, @days); + $schedule =~ /(\d\d)(\d\d)-(\d\d)(\d\d) (\d+)/; + if($opt_s){ + print "Schedule: $1:$2-$3:$4 "; + } else { + print "\n"; + } + $ndays = $5; + $ndays =~ s/(\d)/$1,/g; + @days = ("Sun","Mon","Tue","Wed","Thu","Fri","Sat")[eval $ndays]; + if($opt_s){ + print "@days\n"; + } else { + print "\n"; + } + } + if($opt_s){ + print "SSL: $conntype\n"; + } else { + print "\n"; + } + } + } +} + +sub get_supplier_maxcsn +{ + my ($ridx, $s, $cn, $h, $p) = @_; + my $decimalcsn; + my $csn = "Unavailable"; + # normalize suffix + $s =~ s/ //; + $s =~ lc $s; + my $agmt = "$ridx;$s;$cn;$h;$p"; + + foreach my $key (keys %agmtmaxcsn){ + if ($key eq $agmt){ + $csn = $agmtmaxcsn{$key}; + last; + } + } + if($csn && $csn ne "Unavailable"){ + $decimalcsn = &to_decimal_csn ($csn); + return "$csn:$decimalcsn"; + } + + return $csn; +} + +sub cacl_time_lag +{ + my ($s, $cn, $h, $p, $ridx, $s_maxcsn, $c_maxcsn) = @_; + my ($markcolor); + my ($m_maxcsn, $csn_str, $supplier_csn_str); + my ($s_tm, $c_tm, $lag_tm, $lag_str, $hours, $minutes); + + $m_maxcsn = get_supplier_maxcsn($ridx,$s, $cn, $h, $p); + if($m_maxcsn ne ""){ + $s_maxcsn = $m_maxcsn; + } + $supplier_csn_str = &to_string_csn ($s_maxcsn); + $csn_str = &to_string_csn ($c_maxcsn); + + if (!$s_maxcsn || $s_maxcsn eq "Unavailable" || + !$c_maxcsn || $c_maxcsn eq "Unavailable") { + $lag_str = "?:??:??"; + $markcolor = "white"; # True status unknown + } + elsif ($s_maxcsn le $c_maxcsn) { + $lag_str = "0:00:00"; + $markcolor = &get_color (0); + } + else { + my ($rawcsn, $decimalcsn) = split (/:/, $s_maxcsn); + ($s_tm) = split(/ /, $decimalcsn); + + ($rawcsn, $decimalcsn) = split (/:/, $c_maxcsn); + ($c_tm) = split(/ /, $decimalcsn); + if ($s_tm > $c_tm) { + $lag_tm = $s_tm - $c_tm; + $lag_str = "- "; + $markcolor = &get_color ($lag_tm); + } + else { + $lag_tm = $c_tm - $s_tm; + $lag_str = "+ "; + $markcolor = $allcolors{ $colorkeys[0] }; # no delay + } + $hours = int ($lag_tm / 3600); + $lag_str .= "$hours:"; + + $lag_tm = $lag_tm % 3600; + $minutes = int ($lag_tm / 60); + $minutes = "0".$minutes if ($minutes < 10); + $lag_str .= "$minutes:"; + + $lag_tm = $lag_tm % 60; + $lag_tm = "0".$lag_tm if ($lag_tm < 10); + $lag_str .= "$lag_tm"; + } + return ($csn_str, $lag_str, $markcolor, $supplier_csn_str); +} + +sub set_server_params +{ + my ($host, $port, $binddn, $bindpwd, $bindcert); + + ($host, $port, $binddn, $bindpwd, $bindcert) = split (/:/, $allconnections[0]); + if($opt_p && $opt_p ne ""){ + $ld{port} = $opt_p + } elsif(!$port || $port eq ""){ + $ld{port} = "389"; + } else { + $ld{port} = $port; + } + if($host && $host ne ""){ + $ld{host} = $host; + } + if($binddn){ + $ld{bind} = $binddn; + } + if($bindpwd){ + $ld{pswd} = $bindpwd; + } + if($bindcert){ + $ld{cert} = $bindcert; + } +} + +# +# The subroutine would append a new entry to the end of +# @servers if the host and port are new to @servers. +# +sub add_server +{ + my ($host, $port, $binddn, $bindpwd, $bindcert) = split (/:/, "$_[0]"); + my ($shadowport) = $port; + my ($domainpattern) = '\.[^:]+'; + my ($i); + + for ($i = 0; $i <= $#servers; $i++) { + return $i if ($servers[$i] =~ /$host:\d*=$shadowport\D/i); + return $i if ($servers[$i] =~ /$host:$port\D/i); + } + + # Remove the domain name from the host name + my ($hostnode) = $host; + $hostnode = $1 if $host =~ /^(.+?)\./; + + # new host:port + if (!$binddn || $binddn eq "" || $binddn eq "*" || + !$bindpwd || $bindpwd eq "" || $bindpwd eq "*" || + !$bindcert || $bindcert eq "" || $bindcert eq "*" ) + { + # + # Look up connection parameter in the order of + # host:port + # host:* + # *:port + # *:* + # + my (@myconfig, $h, $p, $d, $w, $c); + $h = ""; $p = ""; $d = ""; $w = ""; $c = ""; + (@myconfig = grep (/^$hostnode($domainpattern)*:[0-9]+\D/i, @allconnections)) || + (@myconfig = grep (/^$hostnode($domainpattern)*:\*:/i, @allconnections)) || + (@myconfig = grep (/^\*:$port\D/, @allconnections)) || + (@myconfig = grep (/^\*:\*\D/, @allconnections)); + if ($#myconfig >= 0) { + ($h, $p, $d, $w, $c) = split (/:/, $myconfig[0]); + ($p, $shadowport) = split (/=/, $p); + if(!$p || $p eq "*"){ + $p = ""; + } + if(!$c || $c eq "*"){ + $c = ""; + } + if(!$w || $w eq "*"){ + $w = ""; + } + } + if (!$binddn || $binddn eq "" || $binddn eq "*") { + if ($d eq "" || $d eq "*") { + $binddn = "cn=Directory Manager"; + } else { + $binddn = $d; + } + } + if($prompt eq "yes" && ($w eq "" || (!$bindpwd || $bindpwd eq "" || $bindpwd eq "*"))){ + $bindpwd = passwdPrompt($h, $p); + } elsif ($passwd ne ""){ + $bindpwd = $passwd; + } else { + $bindpwd = $w if (!$bindpwd || $bindpwd eq "" || $bindpwd eq "*"); + } + $bindcert = $c if (!$bindcert || $bindcert eq "" || $bindcert eq "*"); + } + + if ($shadowport) { + push (@servers, "$host:$port=$shadowport:$binddn:$bindpwd:$bindcert"); + } else { + push (@servers, "$host:$port:$binddn:$bindpwd:$bindcert"); + } + return $i; +} + +sub +passwdPrompt +{ + my ($h, $p) = @_; + my $key = "$h:$p"; + my $pw = ""; + + if ($passwords{$key}){ + # we already have a password for this replica + return $passwords{$key}; + } + # Disable console echo + system("@sttyexec@ -echo") if -t STDIN; + + while ($pw eq ""){ + if($passwd ne ""){ + print "Enter password for ($h:$p) : "; + chomp($pw = <>); + if ($pw eq ""){ + $pw = $passwd; + } else { + $passwords{$key} = $pw; + $passwd = $pw; + } + } else { + print "Enter password for ($h:$p): "; + chomp($pw = <>); + $passwords{$key} = $pw; + $passwd = $pw; + } + } + # Enable console echo + system("@sttyexec@ echo") if -t STDIN; + + return $pw; +} + +sub get_ldap_url +{ + my ($sidx, $conntype) = @_; + my ($host, $port) = split(/:/, $servers[$sidx]); + my ($shadowport); + ($port, $shadowport) = split (/=/, $port); + my ($protocol, $ldapurl); + + if ($port == 636 && $conntype eq "0" || $conntype =~ /SSL/i) { + $protocol = "ldaps"; + } + else { + $protocol = "ldap"; + } + my ($instance) = $allaliases { "$host:$port" }; + $instance = "$host:$port" if !$instance; + if ($conntype eq "n/a") { + $ldapurl = $instance; + } else { + if($opt_s){ + $ldapurl = "$instance $protocol://$host:$port/"; + } else { + $ldapurl = "$instance"; + } + } + return $ldapurl; +} + +sub to_decimal_csn +{ + my ($maxcsn) = @_; + if (!$maxcsn || $maxcsn eq "" || $maxcsn eq "Unavailable") { + return "Unavailable"; + } + + my ($tm, $seq, $masterid, $subseq) = unpack("a8 a4 a4 a4", $maxcsn); + + $tm = hex($tm); + $seq = hex($seq); + $masterid = hex($masterid); + $subseq = hex($subseq); + + return "$tm $seq $masterid $subseq"; +} + +sub to_string_csn +{ + my $str = shift; + if (!defined($str)){ + return "Unavailable"; + } + my ($rawcsn, $decimalcsn) = split(/:/, "$str"); + if (!$rawcsn || $rawcsn eq "") { + return "Unavailable"; + } + if ($rawcsn eq "Unavailable"){ + return $rawcsn; + } + my ($tm, $seq, $masterid, $subseq) = split(/ /, $decimalcsn); + my ($sec, $min, $hour, $mday, $mon, $year) = localtime($tm); + $mon++; + $year += 1900; + foreach ($sec, $min, $hour, $mday, $mon) { + $_ = "0".$_ if ($_ < 10); + } + my ($csnstr) = "$mon/$mday/$year $hour:$min:$sec"; + $csnstr .= " $seq $subseq" if ( $seq != 0 || $subseq != 0 ); + + return "$rawcsn ($csnstr)"; +} + +sub get_color +{ + my ($lag_minute) = @_; + $lag_minute /= 60; + my ($color) = $allcolors { $colorkeys[0] }; + + foreach ( sort { $a <=> $b } keys %allcolors) { + if ($lag_minute >= $_){ + $color = $allcolors {$_}; + } + } + return $color; +} + +# subroutine to remove escaped encoding + +sub unescape +{ + #my ($_) = @_; + tr/+/ /; + s/%(..)/pack("c",hex($1))/ge; + $_; +} + +sub print_html_header +{ + if(!$opt_s){ + # print the HTML header + + print "\n"; + print "\n"; + print "Replication Status\n"; + # print "\n"; + print "\n\n"; + + if ($opt_u) { + print "\n"; + } + + print "
    \n"; + print "Replica ID: "; + print "$serverid\n"; + print "Replica Root: "; + print "$replicaroot\n"; + print "Max CSN: "; + print "$maxcsn\n"; + } + return $maxcsn; +} + +sub print_consumer_header +{ + if($opt_s) { return; } # we'll do the text printing in "print_consumers" + + #Print the header of consumer + print "\n
    ConsumerTime LagSupplier Max CSNConsumer Max CSNLast Modify TimeSupplierSent/SkippedUpdate StatusUpdate StartedUpdate EndedScheduleSSL?
    $c_ldapurl
    Type: $c_replicatype
    $lag
    $supplier_maxcsn$c_maxcsn_str$c_lastmodified
    $s_ldapurl
    $changecount$redfontstart$status$redfontend", &format_z_time($_->{nsds5replicaLastUpdateStart}), "", &format_z_time($_->{nsds5replicaLastUpdateEnd}), "$schedule$1:$2-$3:$4@days$conntype
    \n"; + print "\n"; + print "
    $now"; + print "Directory Server Replication Status\n"; + + if ($opt_u) { + print "
    (This page updates every $interval seconds)\n"; + } + + print "
    $version"; + print "
    \n"; + } else { + print "Directory Server Replication Status ($version)\n\n"; + print "Time: $now"; + if ($opt_u) { + print " - This report updates every $interval seconds\n\n"; + } else { + print "\n"; + } + } +} + +sub print_legend +{ + my ($nlegends) = $#colorkeys + 1; + if($opt_s){ return; } + print "\n

    Time Lag Legend:

    \n"; + print "\n\n"; + print "\n\n"; + my ($i, $j); + for ($i = 0; $i < $nlegends - 1; $i++) { + $j = $colorkeys[$i]; + print "\n\n"; + } + $j = $colorkeys[$i]; + print "\n\n"; + print "\n\n"; + print "
    Unknown
    Within $colorkeys[$i+1] minutes
    Over $colorkeys[$i] minutes
    Server n/a

    \n"; +} + +sub print_supplier_end +{ + if(!$opt_s){ print "
    \n"; } +} + +# given a string in generalized time format, convert to ascii time +sub format_z_time +{ + my $zstr = shift; + return "n/a" if (! $zstr); + my ($year, $mon, $day, $hour, $min, $sec) = + ($zstr =~ /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/); + my $time = timegm($sec, $min, $hour, $day, ($mon-1), $year); + ($sec, $min, $hour, $day, $mon, $year) = localtime($time); + $mon++; + $year += 1900; + foreach ($sec, $min, $hour, $day, $mon) { + $_ = "0".$_ if ($_ < 10); + } + + return "$mon/$day/$year $hour:$min:$sec"; +} diff --git a/ldap/admin/src/scripts/restart-dirsrv.in b/ldap/admin/src/scripts/restart-dirsrv.in new file mode 100644 index 0000000..e86a24c --- /dev/null +++ b/ldap/admin/src/scripts/restart-dirsrv.in @@ -0,0 +1,63 @@ +#!/bin/sh + +# Script that restarts the ns-slapd server. +# Exit status can be: +# 0: Server restarted successfully +# 1: Server could not be started +# 2: Server started successfully (was not running) +# 3: Server could not be stopped + +. @datadir@/@package_name@/data/DSSharedLib + +restart_instance() { + SERV_ID=$1 + + server_already_stopped=0 + @sbindir@/stop-dirsrv -d $initconfig_dir $SERV_ID + status=$? + if [ $status -eq 1 ] ; then + return 3; + else + if [ $status -eq 2 ] ; then + server_already_stopped=1 + fi + fi + @sbindir@/start-dirsrv -d $initconfig_dir $SERV_ID + status=$? + if [ $server_already_stopped -eq 1 ] && [ $status -eq 0 ] ; then + return 2; + fi + return $status +} + +while getopts "d:" flag +do + case "$flag" in + d) initconfig_dir="$OPTARG";; + esac +done +shift $(($OPTIND-1)) + +if [ "$initconfig_dir" = "" ]; then + initconfig_dir=@initconfigdir@ +fi + +if [ "$#" -eq 0 ]; then + # We're restarting all instances. + ret=0 + initfiles=`get_initconfig_files $initconfig_dir` || { echo No instances found in $initconfig_dir ; exit 1 ; } + for i in $initfiles; do + inst=`normalize_server_id $i` + echo Restarting instance \"$inst\" + restart_instance $inst + rv=$? + if [ "$rv" -ne 0 ]; then + ret=$rv + fi + done + exit $ret +else + # We're restarting a single instance. + restart_instance $* + exit $? +fi diff --git a/ldap/admin/src/scripts/restoreconfig.in b/ldap/admin/src/scripts/restoreconfig.in new file mode 100755 index 0000000..56c9e43 --- /dev/null +++ b/ldap/admin/src/scripts/restoreconfig.in @@ -0,0 +1,52 @@ +#!/bin/sh + +. @datadir@/@package_name@/data/DSSharedLib + +libpath_add "@libdir@/@package_name@/" +libpath_add "@nss_libdir@" +libpath_add "@libdir@" +libpath_add "@pcre_libdir@" + +export LD_LIBRARY_PATH +SHLIB_PATH=$LD_LIBRARY_PATH +export SHLIB_PATH + +usage () +{ + echo "Usage: restoreconfig [-Z serverID] [-h]" + echo "Options:" + echo " -Z serverID - Server instance identifier" + echo " -h - Display usage" +} + +while getopts "Z:h" flag +do + case $flag in + Z) servid=$OPTARG;; + h) usage + exit 0;; + ?) usage + exit 1;; + esac +done + +initfile=$(get_init_file "@initconfigdir@" $servid) +if [ $? -eq 1 ] +then + usage + echo "You must supply a valid server instance identifier. Use -Z to specify instance name" + echo "Available instances: $initfile" + exit 1 +fi + +servid=`normalize_server_id $initfile` +. $initfile + +conf_ldif=`ls -1t @localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/bak/$servid-*.ldif 2>/dev/null | head -1 ` +if [ -z "$conf_ldif" ] +then + echo No configuration to restore in @localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/bak/ ; exit 1 +fi +echo Restoring $conf_ldif... +@sbindir@/ns-slapd ldif2db -D $CONFIG_DIR -i $conf_ldif -n NetscapeRoot 2>&1 +exit $? diff --git a/ldap/admin/src/scripts/saveconfig.in b/ldap/admin/src/scripts/saveconfig.in new file mode 100755 index 0000000..16e3efc --- /dev/null +++ b/ldap/admin/src/scripts/saveconfig.in @@ -0,0 +1,53 @@ +#!/bin/sh + +. @datadir@/@package_name@/data/DSSharedLib + +libpath_add "@libdir@/@package_name@/" +libpath_add "@libdir@" +libpath_add "@nss_libdir@" +libpath_add "@pcre_libdir@" + +export LD_LIBRARY_PATH +SHLIB_PATH=$LD_LIBRARY_PATH +export SHLIB_PATH + +usage () +{ + echo "Usage: saveconfig [-Z serverID] [-h]" + echo "Options:" + echo " -Z serverID - Server instance identifier" + echo " -h - Display Usage" +} + +while getopts "Z:h" flag +do + case $flag in + Z) servid=$OPTARG;; + h) usage + exit 0;; + ?) usage + exit 1;; + esac +done + +initfile=$(get_init_file "@initconfigdir@" $servid) +if [ $? -eq 1 ] +then + usage + echo "You must supply a valid server instance identifier. Use -Z to specify instance name" + echo "Available instances: $initfile" + exit 1 +fi + +servid=`normalize_server_id $initfile` +. $initfile + +echo saving configuration... +conf_ldif=@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/bak/$servid-`date +%Y_%m_%d_%H%M%S`.ldif +@sbindir@/ns-slapd db2ldif -N -D $CONFIG_DIR -s "o=NetscapeRoot" -a $conf_ldif -n NetscapeRoot 2>&1 +if [ $? -ge 1 ] +then + echo Error occurred while saving configuration + exit 1 +fi +exit 0 diff --git a/ldap/admin/src/scripts/schema-reload.pl.in b/ldap/admin/src/scripts/schema-reload.pl.in new file mode 100644 index 0000000..307100b --- /dev/null +++ b/ldap/admin/src/scripts/schema-reload.pl.in @@ -0,0 +1,110 @@ +#!@perlexec@ +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(@perlpath@); +use DSUtil; + +DSUtil::libpath_add("@nss_libdir@"); +DSUtil::libpath_add("/usr/lib"); +DSUtil::libpath_add("/usr/lib64"); +$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}"; +$ENV{'PATH'} = "@ldaptool_bindir@:/usr/bin:/usr/lib64/mozldap/"; + +$i = 0; + +sub usage { + print(STDERR "Usage: schema-reload.pl [-Z serverID] [-D rootdn] { -w password | -w - | -j filename } [-P protocol] [-d schemadir] [-v] [-h]\n"); + print(STDERR "Options:\n"); + print(STDERR " -D rootdn - Directory Manager\n"); + print(STDERR " -w password - Directory Manager's password\n"); + print(STDERR " -w - - Prompt for Directory Manager's password\n"); + print(STDERR " -Z serverID - Server instance identifier\n"); + print(STDERR " -j filename - Read Directory Manager's password from file\n"); + print(STDERR " -d schemadir - Directory where schema files are located\n"); + print(STDERR " -P protocol - STARTTLS, LDAPS, LDAPI, LDAP (default: uses most secure protocol available)\n"); + print(STDERR " -v - Verbose output\n"); + print(STDERR " -h - Display usage\n"); +} + +while ($i <= $#ARGV) +{ + if ("$ARGV[$i]" eq "-d"){ + # schemadir + $i++; $schemadir = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-D"){ + # Directory Manager + $i++; $rootdn = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-w"){ + # Directory Manager's password + $i++; $passwd = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-j"){ + # Read Directory Manager's password from a file + $i++; $passwdfile = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-Z"){ + # server instance identifier + $i++; $servid = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-h"){ + # help + &usage; + exit(0); + } elsif ("$ARGV[$i]" eq "-v"){ + # verbose + $verbose = 1; + } elsif ("$ARGV[$i]" eq "-P") { + # protocol preference + $i++; $protocol = $ARGV[$i]; + } else { + &usage; + exit(1); + } + $i++; +} + +# +# Gather all our config settings +# +($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@"); +%info = DSUtil::get_info($confdir, $host, $port, $rootdn); +$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile); +$info{protocol} = $protocol; +if ($verbose == 1){ + $info{args} = "-v -a"; +} else { + $info{args} = "-a"; +} + +# +# Construct the task entry +# +($s, $m, $h, $dy, $mn, $yr, $wdy, $ydy, $r) = localtime(time); +$mn++; $yr += 1900; +$taskname = "schema_reload_${yr}_${mn}_${dy}_${h}_${m}_${s}"; +$dn = "dn: cn=$taskname, cn=schema reload task, cn=tasks, cn=config\n"; +$misc = "objectclass: top\nobjectclass: extensibleObject\n"; +$cn = "cn: $taskname\n"; +if ( $schemadir ne "" ) +{ + $schemadir = "schemadir: $schemadir\n"; +} +$entry = "${dn}${misc}${cn}${schemadir}"; + +$rc = DSUtil::ldapmod($entry, %info); + +$dn =~ s/^dn: //; +$dn =~ s/\n//; +if($rc == 0){ + print "Successfully added task entry \"$dn\"\n"; +} else { + print "Failed to add task entry \"$dn\" error ($rc)\n"; +} + +exit($rc); diff --git a/ldap/admin/src/scripts/setup-ds.pl.in b/ldap/admin/src/scripts/setup-ds.pl.in new file mode 100644 index 0000000..0803a41 --- /dev/null +++ b/ldap/admin/src/scripts/setup-ds.pl.in @@ -0,0 +1,94 @@ +#!@perlexec@ +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(@perlpath@); + +use strict; + +use Setup; +use SetupLog; +use Inf; +use Resource; +use DialogManager; +use DSUtil; +use DSCreate; +use DSUpdate; + +my $res = new Resource("@propertydir@/setup-ds.res"); + +my $setup = new Setup($res); + +if (!$setup->{silent}) { + my $dialogmgr = new DialogManager($setup, $res, $TYPICAL); + + my @dialogs; + if ($setup->{update}) { + require DSUpdateDialogs; + push @dialogs, DSUpdateDialogs->getDialogs(); + } else { + require SetupDialogs; + require DSDialogs; + push @dialogs, SetupDialogs->getDialogs(); + push @dialogs, DSDialogs->getDialogs(); + } + + $dialogmgr->addDialog(@dialogs); + + my $rc = $dialogmgr->run(); + if ($rc) { + $setup->doExit(); + } +} + +my @errs; +if ($setup->{update}) { + @errs = updateDS($setup); +} else { + @errs = createDSInstance($setup->{inf}); +} + +if (@errs) { + $setup->msg(@errs); + if ($setup->{update}) { + $setup->msg($FATAL, 'error_updating'); + } else { + if($setup->{inf}->{slapd}->{ServerIdentifier} eq "admin"){ + # 'admin' is reserved for the admin server - log the correct error + $setup->msg($FATAL, 'error_creating_dsinstance_adminid', + $setup->{inf}->{slapd}->{ServerIdentifier}); + } else { + $setup->msg($FATAL, 'error_creating_dsinstance', + $setup->{inf}->{slapd}->{ServerIdentifier}); + } + } + $setup->doExit(1); +} else { + if ($setup->{update}) { + $setup->msg('update_successful'); + } else { + $setup->msg('created_dsinstance', + $setup->{inf}->{slapd}->{ServerIdentifier}); + } +} + +$setup->doExit(0); + +END { + if ($setup and $setup->{keep}) { + $setup->{inf}->write("__temp__"); + } +} + +# emacs settings +# Local Variables: +# mode:perl +# indent-tabs-mode: nil +# tab-width: 4 +# End: diff --git a/ldap/admin/src/scripts/setup-ds.res.in b/ldap/admin/src/scripts/setup-ds.res.in new file mode 100644 index 0000000..e46b858 --- /dev/null +++ b/ldap/admin/src/scripts/setup-ds.res.in @@ -0,0 +1,212 @@ +# ------------ Global Resources ----------- +brand = @capbrand@ +yes = yes +no = no +yes_no_error = Please answer "yes" or "no"\n\n +setup_err_exit = Setup cannot proceed. Exiting.\n\n +dialog_use_different_type = When using Silent or Express mode, some of the\ndialogs are skipped, but validation is still performed\non the default or given answers. You should run this program again and\nchoose Typical or Custom mode in order to provide a valid input\nfor the problem dialog.\n\n + +# ------------ Welcome Dialog Resource ------------ +dialog_welcome_text = This program will set up the %s Directory Server.\n\nIt is recommended that you have "root" privilege to set up the software.\nTips for using this program:\n - Press "Enter" to choose the default and go to the next screen\n - Type "Control-B" or the word "back" then "Enter" to go back to the previous screen\n - Type "Control-C" to cancel the setup program\n\n +# %s -> brand + +dialog_welcome_prompt = Would you like to continue with set up? + +# ----------- dsktune Dialog Resource ----------- +dialog_dsktune_text = Your system has been scanned for potential problems, missing patches,\ +etc. The following output is a report of the items found that need to\ +be addressed before running this software in a production\ +environment.\n\n%s +dialog_dsktune_prompt = Would you like to continue? + +# ----------- Setup Type Dialog Resource ---------------- +dialog_setuptype_text = Choose a setup type:\n\n 1. Express\n Allows you to quickly set up the servers using the most\n common options and pre-defined defaults. Useful for quick\n evaluation of the products.\n\n 2. Typical\n Allows you to specify common defaults and options.\n\n 3. Custom\n Allows you to specify more advanced options. This is \n recommended for experienced server administrators only.\n\nTo accept the default shown in brackets, press the Enter key.\n\n + +dialog_setuptype_prompt = Choose a setup type + +dialog_setuptype_error = Invalid setup type\n\n + + +# ----------- HostName Dialog Resource ---------------- +dialog_hostname_text = Enter the fully qualified domain name of the computer\non which you're setting up server software. Using the form\n.\nExample: eros.example.com.\n\nTo accept the default shown in brackets, press the Enter key.\n\nWarning: This step may take a few minutes if your DNS servers\ncan not be reached or if DNS is not configured correctly. If\nyou would rather not wait, hit Ctrl-C and run this program again\nwith the following command line option to specify the hostname:\n\n General.FullMachineName=your.hostname.domain.name\n\n + +dialog_hostname_prompt = Computer name + +# ----------- SSUser Dialog Resource ---------------- +dialog_ssuser_text = The server must run as a specific user in a specific group.\nIt is strongly recommended that this user should have no privileges\non the computer (i.e. a non-root user). The setup procedure\nwill give this user/group some permissions in specific paths/files\nto perform server-specific operations.\n\nIf you have not yet created a user and group for the server,\ncreate this user and group using your native operating\nsystem utilities.\n\n + +dialog_ssuser_prompt = System User +dialog_ssuser_error = The user '%s' is invalid.\n\n +dialog_ssuser_must_be_same = Since you are not running setup as root, the System User must be the same as your userid '%s'.\n\n +dialog_ssuser_root_warning = You are strongly encouraged to use a non-root user for the server uid.\nIf you feel you have made a mistake,\nplease go back to this dialog and enter another system user.\n\n +dialog_ssgroup_prompt = System Group +dialog_ssgroup_error = The group '%s' is invalid.\n\n +dialog_ssgroup_no_match = The system user '%s' does not belong to the group '%s'.\n\nThis is the list of users of the given group: %s\n\n +dialog_ssgroup_no_user = The system user '%s' does not belong to the group '%s'.\n\n + +# ----------- DS port Dialog Resource ---------------- +dialog_dsport_text = The standard directory server network port number is 389. However, if\nyou are not logged as the superuser, or port 389 is in use, the\ndefault value will be a random unused port number greater than 1024.\nIf you want to use port 389, make sure that you are logged in as the\nsuperuser, that port 389 is not in use.\n\n +dialog_dsport_prompt = Directory server network port +dialog_dsport_error = The port %s is in use or not available. Please choose another port.\n\n +dialog_dsport_invalid = The port %s is not a valid port. Please choose a valid port.\n\n + +# ----------- DS server ID Dialog Resource ---------------- +dialog_dsserverid_text = Each instance of a directory server requires a unique identifier.\nThis identifier is used to name the various\ninstance specific files and directories in the file system,\nas well as for other uses as a server instance identifier.\n\n +dialog_dsserverid_prompt = Directory server identifier +dialog_dsserverid_error = The server identifier '%s' is not valid. Please choose another one.\n\n +dialog_dsserverid_inuse = The server identifier '%s' is already in use. Please choose another one.\n\n + +# ----------- DS suffix Dialog Resource ---------------- +dialog_dssuffix_text = The suffix is the root of your directory tree. The suffix must be a valid DN.\nIt is recommended that you use the dc=domaincomponent suffix convention.\nFor example, if your domain is example.com,\nyou should use dc=example,dc=com for your suffix.\nSetup will create this initial suffix for you,\nbut you may have more than one suffix.\nUse the directory server utilities to create additional suffixes.\n\n +dialog_dssuffix_prompt = Suffix +dialog_dssuffix_error = The suffix '%s' is not a valid DN. Please choose another one.\n\n + +# ----------- DS Root DN and password Dialog Resource ---------------- +dialog_dsrootdn_text = Certain directory server operations require an administrative user.\nThis user is referred to as the Directory Manager and typically has a\nbind Distinguished Name (DN) of cn=Directory Manager.\nYou will also be prompted for the password for this user. The password must\nbe at least 8 characters long, and contain no spaces.\nPress Control-B or type the word "back", then Enter to back up and start over.\n\n +dialog_dsrootdn_prompt = Directory Manager DN +dialog_dsrootdn_error = The input '%s' is not a valid DN. Please choose another one.\n\n +dialog_dsrootpw_prompt1 = Password +dialog_dsrootpw_prompt2 = Password (confirm) +dialog_dsrootpw_invalid = The password contains invalid characters. Please choose another one.\n\n +dialog_dsrootpw_tooshort = The password must be at least %s characters long. Please choose another one.\n\n +dialog_dsrootpw_nomatch = The passwords do not match. Please try again.\n\n + +# ----------- DS Sample Data Dialog Resource ---------------- +dialog_dssample_text = You may install some sample entries in this directory instance. These\nentries will be installed in a separate suffix and will not interfere\nwith the normal operation of the directory server.\n\n +dialog_dssample_prompt = Do you want to install the sample entries? + +# ----------- DS Populate Data Dialog Resource ---------------- +dialog_dspopulate_text = You may wish to populate your new directory instance with some data.\n"You may already have a file in LDIF format to use or some suggested\nentries can be added. If you want to import entries from an LDIF\nfile, you may type in the full path and filename at the prompt. If\nyou want the setup program to add the suggested entries, type the\nword suggest at the prompt. The suggested entries are common\ncontainer entries under your specified suffix, such as ou=People and\nou=Groups, which are commonly used to hold the entries for the persons\nand groups in your organization. If you do not want to add any of\nthese entries, type the word none at the prompt.\n\n +dialog_dspopulate_prompt = Type the full path and filename, the word suggest, or the word none +dialog_dspopulate_error = The file '%s' was not found. Please choose another one.\n\n + +# ----------- miscellaneous ---------------- +backend_already_exists = A database backend with the name '%s' already exists. Config entry DN '%s'. Please choose another backend name. addSuffix can generate a unique backend name if you do not specify a backend name.\n\n +suffix_already_exists = The suffix '%s' already exists. Config entry DN '%s'.\n\n +error_creating_suffix_backend = Could not create the suffix '%s'. There was an error creating the backend database named '%s' for the suffix. Error: %s\n\n +error_creating_suffix = Could not create the suffix '%s'. Error: %s\n\n + +setup_exiting = Exiting . . .\nLog file is '%s'\n\n +error_creating_dsinstance = Error: Could not create directory server instance '%s'.\n +error_creating_dsinstance_adminid = Error: Could not create directory server instance '%s', instance name 'admin' reserved for the Administration Server.\n +created_dsinstance = Your new DS instance '%s' was successfully created.\n +no_mapvalue_for_key = The map value '%s' for key '%s' did not map to a value in any of the given information files.\n +error_opening_ldiftmpl = Could not open the LDIF template file '%s'. Error: %s\n +error_mapping_token_ldiftmpl = The entry '%s' in LDIF file '%s' contains a token '%s' for which there is no mapper.\nPlease check the file and your mapper to make sure all tokens are handled correctly.\n +error_deleteall_entries = Error deleting entry '%s' and all children. Error: %s\n +error_adding_entry = Error adding entry '%s'. Error: %s\n +error_updating_entry = Error updating entry '%s'. Error: %s\n + +error_invalid_param = The parameter '%s' has an invalid value '%s'.\n +error_port_invalid = The port %s is not a valid port. Please choose a valid port.\n +error_port_available = The port number '%s' is not available for use. This may be due to an\ +invalid port number, or the port already being in use by another\ +program, or low port restriction. Please choose another value for\ +ServerPort. Error: $!\n +error_invalid_serverid = The ServerIdentifier '%s' contains invalid characters. It must\ +contain only alphanumeric characters and the following: #%:@_-\n\n +error_reserved_serverid = The ServerIdentifier '%s' is reserved for the Administration Server, please choose a different server identifier.\n +error_opening_scripttmpl = Could not open the script template file '%s'. Error: %s\n +error_creating_directory = Could not create directory '%s'. Error: %s\n +error_chowning_directory = Could not change ownership of directory '%s' to userid '%s': Error: %s\n +error_chowning_file = Could not change ownership of '%s' to userid '%s': Error: %s\n +error_chmoding_file = Could not change permissions of '%s': Error: %s\n +error_chgrping_directory = Could not change group of directory '%s' to group '%s': Error: %s\n +error_creating_file = Could not create file '%s'. Error: %s\n +error_copying_file = Could not copy file '%s' to '%s'. Error: %s\n +error_enabling_feature = Could not enable the directory server feature '%s'. Error: %s\n +error_importing_ldif = Could not import LDIF file '%s'. Error: %s. Output: %s\n +error_invalid_boolean = Could not convert value '%s' to boolean. Valid values are true or false.\n +error_starting_server = Could not start the directory server using command '%s'. The last line from the error log was '%s'. Error: %s\n +error_stopping_server = Could not stop the directory server '%s'. Error: %s\n +error_missing_userid = The SuiteSpotUserID is missing. This must be set to valid user\n +error_missing_port_and_ldapi = Either ServerPort or ldapifilepath must be specified. The server must listen to something.\n +error_missing_port = No ServerPort specified. The server must have a port number to listen to (default 389).\n +error_server_already_exists = Error: the server already exists at '%s'\ +Please remove it first if you really want to recreate it,\ +or use a different ServerIdentifier to create another instance.\n +error_opening_init_ldif = Could not open the initial LDIF file '%s'.\ +The file was not found or could not be read.\n +error_opening_dseldif = Could not open the DSE config file '%s'. Error: %s\n +error_opening_tempinf = Could not create temporary .inf file for config. Error: %s\n +error_writing_ldif = Could not write the LDIF file '%s'. Error: %s\n +error_creating_templdif = Could not create temporary LDIF file. Error: %s\n +error_no_such_instance = Error: could not find directory server configuration directory '%s'. Error: %s\n +error_finding_config_entry = Error: could not find the config entry '%s' in '%s'. Error: %s\n +error_removing_path = Error: could not remove path '%s'. Error: %s\n +error_removing_port_label = Error: could not remove selinux label from port '%s'. Error: %s\n +error_loading_update = Error: not applying update '%s'. Error: %s\n +error_unknown_update = Error: cannot apply update '%s'. Not a recognized update type.\n +error_executing_update = Error: update '%s' returned code '%s': %s\n +error_updating = Error: could not update the directory server.\n +update_successful = Finished successful update of directory server.\nPlease restart your directory servers.\n + +update_dialog_first = This program will update the %s Directory Server.\n\nIt is recommended that you have "root" privilege to perform the update.\nTips for using this program:\n - Press "Enter" to choose the default and go to the next screen\n - Type "Control-B" or the word "back" then "Enter" to go back to the previous screen\n - Type "Control-C" to cancel the update\n\n +# %s -> brand + +update_dialog_first_prompt = Would you like to continue with update? + +update_dialog_mode =\ +The update process can work in one of two modes:\ +\ + - Online: The changes are made to the running directory servers using LDAP.\ + The operations must be performed as an administrative user.\ + You must provide the name and password, for each instance\ + if there is more than one instance of directory server.\ + Some operations may require a directory server restart to take\ + effect. The update script will notify you if you need to restart\ + the server.\ +\ + - Offline: The changes are made to the server configuration files. The\ + servers MUST FIRST BE SHUTDOWN BY YOU. The script will not\ + shutdown the servers for you. You MUST shutdown the\ + servers in order to use this mode. A username and password\ + are not required to use Offline mode. If the servers are not\ + shutdown, CHANGES WILL BE LOST.\ +\ +To summarize:\ + Online - servers remain running - you must provide admin name and password\ + for each server - servers may need to be restarted\ + Offline - servers must be shutdown - no username or password required\n\n + +update_dialog_mode_prompt = Which update mode do you want to use? + +update_admin_dialog = Please specify the authentication data for '%s'\n\n +update_admin_id_prompt = Full DN of administrative user +update_admin_pwd_prompt = Password for this user +error_renaming_schema = Could not rename schema file '%s' to '%s'. Error: %s\n +error_reading_schema_file = Schema file '%s' does not exist or is not readable. Error: %s\n +error_reading_schema_dir = Schema directory '%s' does not exist or is not readable\n +error_writing_schema_file = Schema file '%s' could not be opened for writing. Error: %s\n +error_reading_config_dir = Config directory '%s' does not exist or is not readable\n +error_renaming_config = Could not rename config file '%s' to '%s'. Error: %s\n +error_online_update = Could not open a connection to the server at %s port %s as '%s'.\ +Please make sure the server is up and running before using online mode,\ +or use offline mode.\n\n +error_offline_update = Could not read the server config file '%s'. Error: %s\n\n +error_no_mapping_tree_entries = Could not find a mapping tree entry. Error: %s\n +error_no_configuration_entry = Could not find a configuration entry. Error: %s\n +error_no_backend_entry = Could not find a backend entry. Error: %s\n +error_invalid_dbinst_dir = Invalid database instance dir '%s'.\n +error_cant_backup_db = Failed to back up backend instance '%s'. Error: %s\n +error_cant_convert_db = Failed to convert backend instance '%s'. Error: %s\n +error_missing_entrydn = Backend instance '%s' does not have database files to upgrade.\n +warning_hostname_not_fully_qualified = The hostname '%s' does not look like a\nfully qualified host and domain name.\n +warning_no_such_hostname = Could not find an address for hostname '%s'.\n +warning_reverse_resolve = Hostname '%s' is valid, but none of the IP addresses\ +resolve back to %s\n +warning_reverse_resolve_sub = - address %s resolves to host %s\n +dialog_hostname_warning = \nWARNING: There are problems with the hostname.\n%s\ +Please check the spelling of the hostname and/or your network configuration.\ +If you proceed with this hostname, you may encounter problems.\ +\ +Do you want to proceed with hostname '%s'? +error_import_check_log = Error: unable to import file '%s' for backend '%s' - %s. Check the errors log for additional information\n +error_could_not_parse_nsstate = Error: could not parse nsState from %s. Value: %s\n +error_linking_file = Error: could not link '%s' to '%s': %s +error_running_command = Error: command '%s' failed - output [%s] error [%s] +error_opening_file = Opening file '%s' failed. Error: %s\n +error_format_error = '%s' has invalid format.\n +error_update_not_offline = Error: offline mode selected but the server [%s] is still running.\n +error_update_all = Failed to update all the Directory Server instances.\n +error_reindexing = Failed to reindex '%s' in backend '%s'. Error: %s\n diff --git a/ldap/admin/src/scripts/start-dirsrv.in b/ldap/admin/src/scripts/start-dirsrv.in new file mode 100755 index 0000000..e3c46e3 --- /dev/null +++ b/ldap/admin/src/scripts/start-dirsrv.in @@ -0,0 +1,132 @@ +#!/bin/sh + +# Script that starts the ns-slapd server. +# Exit status can be: +# 0: Server started successfully +# 1: Server could not be started +# 2: Server already running + +. @datadir@/@package_name@/data/DSSharedLib + +# Starts a single instance +start_instance() { + # The first argument is the server ID. Anything + # after that is an argument to ns-slapd. + SERV_ID=$1 + shift + + initfile=`get_init_file $initconfig_dir $SERV_ID` || { echo Instance $SERV_ID not found. ; return 1 ; } + + # source env. for this instance + if [ -f $initfile ] ; then + . $initfile + else + echo Instance $SERV_ID not found. + return 1 + fi + + prefix="$DS_ROOT" + + libpath_add "$prefix$SERVER_DIR" + libpath_add "$prefix@nss_libdir@" + libpath_add "$prefix@libdir@" + libpath_add "@nss_libdir@" + libpath_add "$prefix@pcre_libdir@" + + export LD_LIBRARY_PATH + SHLIB_PATH=$LD_LIBRARY_PATH + export SHLIB_PATH + + DS_CONFIG_DIR=$CONFIG_DIR + export DS_CONFIG_DIR + PIDFILE=$RUN_DIR/$PRODUCT_NAME-$SERV_ID.pid + + if test -f $PIDFILE ; then + PID=`cat $PIDFILE` + if kill -s 0 $PID > /dev/null 2>&1 ; then + echo There is an ns-slapd running: $PID + return 2; + else + rm -f $PIDFILE + fi + fi + # + # Use systemctl if available and running as root, + # otherwise start the instance the old way. + # + if [ -d "@systemdsystemunitdir@" ] && [ $(id -u) -eq 0 ];then + @bindir@/systemctl start @package_name@@$SERV_ID.service + if [ $? -ne 0 ]; then + return 1 + fi + else + if test 1 -eq @enable_asan@; then + echo "NOTICE: Starting instance ${SERV_ID} with ASAN options." + echo "This is probably not what you want. Please contact support." + : ${ASAN_LOG_PATH:=$RUN_DIR/ns-slapd-${SERV_ID}.asan} + echo "Asan errors will go to ${ASAN_LOG_PATH}*" + export ASAN_OPTIONS="detect_leaks=1 symbolize=1 detect_deadlocks=1 log_path=${ASAN_LOG_PATH}" + export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer + fi + $SERVERBIN_DIR/ns-slapd -D $CONFIG_DIR -i $PIDFILE "$@" + if [ $? -ne 0 ]; then + return 1 + fi + fi + loop_counter=1 + # wait for 10 minutes (600 times 1 seconds) + max_count=${PID_TIME:-600} + while test $loop_counter -le $max_count; do + loop_counter=`expr $loop_counter + 1` + if test -f $PIDFILE ; then + PID=`cat $PIDFILE` + # if kill -s 0 $PID > /dev/null 2>&1 ; then + if kill -s 0 $PID ; then + return 0; + else + echo Server failed to start !!! Please check errors log for problems + return 1 + fi + else + sleep 1 + fi + done + echo Server not running!! Failed to start ns-slapd process. Please check the errors log for problems. + return 1 +} + +# source env. for all instances +[ -f @initconfigdir@/@package_name@ ] && . @initconfigdir@/@package_name@ + +while getopts "d:" flag +do + case "$flag" in + d) initconfig_dir="$OPTARG";; + esac +done +shift $(($OPTIND-1)) + +if [ -z "$initconfig_dir" ]; then + initconfig_dir=@initconfigdir@ +fi + +found=0 +if [ $# -eq 0 ]; then + # We're starting all instances. + ret=0 + initfiles=`get_initconfig_files $initconfig_dir` || { echo No instances found in $initconfig_dir ; exit 1 ; } + for i in $initfiles; do + inst=`normalize_server_id $i` + echo Starting instance \"$inst\" + start_instance $inst + rv=$? + if [ $rv -ne 0 ]; then + ret=$rv + fi + done + exit $ret +else + # We're starting a single instance. + start_instance $@ + exit $? +fi diff --git a/ldap/admin/src/scripts/status-dirsrv.in b/ldap/admin/src/scripts/status-dirsrv.in new file mode 100755 index 0000000..9042899 --- /dev/null +++ b/ldap/admin/src/scripts/status-dirsrv.in @@ -0,0 +1,85 @@ +#!/bin/sh + +# Script that reports the status of the ns-slapd server. + +. @datadir@/@package_name@/data/DSSharedLib + +# Get the status of a single instance +status_instance() { + # The first argument is the server ID. Anything + # after that is an argument to ns-slapd. + SERV_ID=$1 + shift + + initfile=`get_init_file $initconfig_dir $SERV_ID` || { echo Instance $SERV_ID not found. ; return 255 ; } + + # source env. for this instance + if [ -f $initfile ] ; then + . $initfile + else + echo Instance $SERV_ID not found. + return 255 + fi + + prefix="$DS_ROOT" + + libpath_add "$prefix$SERVER_DIR" + libpath_add "$prefix@nss_libdir@" + libpath_add "$prefix@libdir@" + libpath_add "@nss_libdir@" + libpath_add "$prefix@pcre_libdir@" + + export LD_LIBRARY_PATH + SHLIB_PATH=$LD_LIBRARY_PATH + export SHLIB_PATH + + # + # Use systemctl if available. + # + if [ -d "@systemdsystemunitdir@" ] && [ $(id -u) -eq 0 ];then + @bindir@/systemctl status @package_name@@$SERV_ID.service + rv=$? + if [ $rv -ne 0 ]; then + return 1 + fi + fi + return 0 +} + +# source env. for all instances +[ -f @initconfigdir@/@package_name@ ] && . @initconfigdir@/@package_name@ + +while getopts "d:" flag +do + case "$flag" in + d) initconfig_dir="$OPTARG";; + esac +done +shift $(($OPTIND-1)) + +if [ -z "$initconfig_dir" ]; then + initconfig_dir=@initconfigdir@ +fi + +found=0 +if [ $# -eq 0 ]; then + # We're reporting the status of all instances. + ret=0 + @bindir@/systemctl status @package_name@.target + initfiles=`get_initconfig_files $initconfig_dir` || { echo No instances found in $initconfig_dir ; exit 1 ; } + for i in $initfiles; do + inst=`normalize_server_id $i` + echo Status of instance \"$inst\" + status_instance $inst + rv=$? + #if one of them is successful, return 0. + if [ $rv -ne 0 ]; then + ret=`expr $ret + 1` + fi + done + exit $ret +else + # We're getting the status of a single instance. + status_instance $@ + exit $? +fi diff --git a/ldap/admin/src/scripts/stop-dirsrv.in b/ldap/admin/src/scripts/stop-dirsrv.in new file mode 100755 index 0000000..72e2b85 --- /dev/null +++ b/ldap/admin/src/scripts/stop-dirsrv.in @@ -0,0 +1,117 @@ +#!/bin/sh + +# Script that stops the ns-slapd server. +# Exit status can be: +# 0: Server stopped successfully +# 1: Server could not be stopped +# 2: Server was not running + +. @datadir@/@package_name@/data/DSSharedLib + +stop_instance() { + SERV_ID=$1 + + initfile=`get_init_file $initconfig_dir $SERV_ID` || { echo Instance $SERV_ID not found. ; return 1 ; } + + # source env. for this instance + if [ -f $initfile ] ; then + . $initfile + else + echo Instance $SERV_ID not found. + return 1 + fi + + PIDFILE=$RUN_DIR/$PRODUCT_NAME-$SERV_ID.pid + if test ! -f $PIDFILE ; then + echo No ns-slapd PID file found. Server is probably not running + return 2 + fi + PID=`cat $PIDFILE` + # see if the server is already stopped + kill -s 0 $PID > /dev/null 2>&1 || { + echo Server not running + if test -f $PIDFILE ; then + rm -f $PIDFILE + fi + return 2 + } + + # + # use systemctl if running as root + # + if [ -d "@systemdsystemunitdir@" ] && [ $(id -u) -eq 0 ];then + # + # Now, check if systemctl is aware of this running instance + # + @bindir@/systemctl is-active @package_name@@$SERV_ID.service > /dev/null 2>&1 + if [ $? -eq 0 ]; then + # + # systemctl sees the running process, so stop it correctly + # + @bindir@/systemctl stop @package_name@@$SERV_ID.service + else + # + # Have to kill it since systemctl doesn't think it's running + # + kill $PID + fi + else + # server is running - kill it + kill $PID + fi + + # wait for 10 minutes (600 times 1 second) + loop_counter=1 + max_count=600 + while test $loop_counter -le $max_count; do + loop_counter=`expr $loop_counter + 1` + if kill -s 0 $PID > /dev/null 2>&1 ; then + sleep 1; + else + if test -f $PIDFILE ; then + rm -f $PIDFILE + fi + return 0 + fi + done + if test -f $PIDFILE ; then + echo Server still running!! Failed to stop the ns-slapd process: $PID. Please check the errors log for problems. + fi + return 1 +} + +while getopts "d:" flag +do + case "$flag" in + d) initconfig_dir="$OPTARG";; + esac +done +shift $(($OPTIND-1)) + +if [ -z "$initconfig_dir" ]; then + initconfig_dir=@initconfigdir@ +fi + +if [ $# -eq 0 ]; then + # We're stopping all instances. + ret=0 + initfiles=`get_initconfig_files $initconfig_dir` || { echo No instances found in $initconfig_dir ; exit 1 ; } + for i in $initfiles; do + if [ ! -f "$i" ] ; then + echo No instances found in $initconfig_dir + exit 1 + fi + inst=`normalize_server_id $i` + echo Stopping instance \"$inst\" + stop_instance $inst + rv=$? + if [ $rv -ne 0 ]; then + ret=$rv + fi + done + exit $ret +else + # We're stopping a single instance. + stop_instance $@ + exit $? +fi diff --git a/ldap/admin/src/scripts/suffix2instance.in b/ldap/admin/src/scripts/suffix2instance.in new file mode 100755 index 0000000..d7c6661 --- /dev/null +++ b/ldap/admin/src/scripts/suffix2instance.in @@ -0,0 +1,58 @@ +#!/bin/sh + +. @datadir@/@package_name@/data/DSSharedLib + +libpath_add "@libdir@/@package_name@/" +libpath_add "@libdir@" +libpath_add "@nss_libdir@" +libpath_add "@pcre_libdir@" + +export LD_LIBRARY_PATH +SHLIB_PATH=$LD_LIBRARY_PATH +export SHLIB_PATH + +usage () +{ + echo "Usage: suffix2instance [-Z serverID] -s suffix [-h]" + echo "Options:" + echo " -Z serverID - Server instance identifier" + echo " -s suffix - Suffix used to map to backend instance" + echo " -h - Display usage" +} + +while getopts "Z:s:h" flag +do + case $flag in + Z) servid=$OPTARG;; + s) args=$args" -s \"$OPTARG\"";; + h) usage + exit 0;; + ?) usage + exit 1;; + esac +done + +if [ -z "$args" ] +then + usage + exit 1 +fi + +initfile=$(get_init_file "@initconfigdir@" $servid) +if [ $? -eq 1 ] +then + usage + echo "You must supply a valid server instance identifier. Use -Z to specify instance name" + echo "Available instances: $initfile" + exit 1 +fi + +. $initfile + +if [ $# -lt 2 ] +then + echo Usage: suffix2instance [-Z serverID] {-s includesuffix}* + exit 1 +fi + +eval @sbindir@/ns-slapd suffix2instance -D $CONFIG_DIR $args 2>&1 diff --git a/ldap/admin/src/scripts/syntax-validate.pl.in b/ldap/admin/src/scripts/syntax-validate.pl.in new file mode 100644 index 0000000..05dc938 --- /dev/null +++ b/ldap/admin/src/scripts/syntax-validate.pl.in @@ -0,0 +1,122 @@ +#!@perlexec@ +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(@perlpath@); +use DSUtil; + +DSUtil::libpath_add("@nss_libdir@"); +DSUtil::libpath_add("/usr/lib"); +DSUtil::libpath_add("/usr/lib64"); +$ENV{'PATH'} = "@ldaptool_bindir@:/usr/bin:/usr/lib64/mozldap/"; +$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}"; + +$i = 0; + +sub usage { + print(STDERR "Usage: syntax-validate.pl [-v] [-Z serverID] [-D rootdn] { -w password | -w - | -j filename }\n"); + print(STDERR " [-P protocol] -b baseDN [-f filter] [-h]\n"); + print(STDERR "Options:\n"); + print(STDERR " -D rootdn - Directory Manager\n"); + print(STDERR " -w password - Directory Manager's password\n"); + print(STDERR " -w - - Prompt for Directory Manager's password\n"); + print(STDERR " -Z serverID - Server instance identifier\n"); + print(STDERR " -j filename - Read Directory Manager's password from file\n"); + print(STDERR " -b baseDN - Base DN that contains entries to validate\n"); + print(STDERR " -f filter - Filter for entries to validate\n"); + print(STDERR " If omitted, all entries under the specified\n"); + print(STDERR " base will have their attribute values validated.\n"); + print(STDERR " -P protocol - STARTTLS, LDAPS, LDAPI, LDAP (default: uses most secure protocol available)\n"); + print(STDERR " -v - Verbose output\n"); + print(STDERR " -h - Display usage\n"); +} + +while ($i <= $#ARGV) +{ + if ("$ARGV[$i]" eq "-b"){ + # base DN + $i++; $basedn_arg = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-f"){ + # filter + $i++; $filter_arg = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-D"){ + # Directory Manager + $i++; $rootdn = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-w"){ + # Directory Manager's password + $i++; $passwd = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-j"){ + # Read Directory Manager's password from a file + $i++; $passwdfile = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-Z"){ + # Server instance identifier + $i++; $servid = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-P") { + # protocol preference + $i++; $protocol = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-h"){ + # help + &usage; + exit(0); + } elsif ("$ARGV[$i]" eq "-v"){ + # verbose + $verbose = 1; + } else { + &usage; + exit(1); + } + $i++; +} + +# +# Gather all our config settings +# +($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@"); +%info = DSUtil::get_info($confdir, $host, $port, $rootdn); +$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile); +$info{protocol} = $protocol; +if ($verbose == 1){ + $info{args} = "-v -a"; +} else { + $info{args} = "-a"; +} +if ( $basedn_arg eq "" ){ + &usage; + exit(1); +} + +# +# Construct the task entry +# +($s, $m, $h, $dy, $mn, $yr, $wdy, $ydy, $r) = localtime(time); +$mn++; $yr += 1900; +$taskname = "syntax_validate_${yr}_${mn}_${dy}_${h}_${m}_${s}"; +$dn = "dn: cn=$taskname, cn=syntax validate, cn=tasks, cn=config\n"; +$misc = "objectclass: top\nobjectclass: extensibleObject\n"; +$cn = "cn: $taskname\n"; +$basedn = "basedn: $basedn_arg\n"; +if ( $filter_arg ne "" ) +{ + $filter = "filter: $filter_arg\n"; +} +$entry = "${dn}${misc}${cn}${basedn}${filter}"; + +$rc = DSUtil::ldapmod($entry, %info); + +$dn =~ s/^dn: //; +$dn =~ s/\n//; +if($rc == 0){ + print "Successfully added task entry \"$dn\"\n"; +} else { + print "Failed to add task entry \"$dn\" error ($rc)\n"; +} + +exit($rc); diff --git a/ldap/admin/src/scripts/template-bak2db.in b/ldap/admin/src/scripts/template-bak2db.in new file mode 100755 index 0000000..01a12fa --- /dev/null +++ b/ldap/admin/src/scripts/template-bak2db.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/bak2db "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-bak2db.pl.in b/ldap/admin/src/scripts/template-bak2db.pl.in new file mode 100644 index 0000000..1df5e36 --- /dev/null +++ b/ldap/admin/src/scripts/template-bak2db.pl.in @@ -0,0 +1,28 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/bak2db.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-cleanallruv.pl.in b/ldap/admin/src/scripts/template-cleanallruv.pl.in new file mode 100644 index 0000000..9781ca9 --- /dev/null +++ b/ldap/admin/src/scripts/template-cleanallruv.pl.in @@ -0,0 +1,28 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/cleanallruv.pl @wrapperArgs -Z {{SERV-ID}}" + +exit ($?); diff --git a/ldap/admin/src/scripts/template-db2bak.in b/ldap/admin/src/scripts/template-db2bak.in new file mode 100755 index 0000000..70a4a2b --- /dev/null +++ b/ldap/admin/src/scripts/template-db2bak.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/db2bak "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-db2bak.pl.in b/ldap/admin/src/scripts/template-db2bak.pl.in new file mode 100644 index 0000000..c94623e --- /dev/null +++ b/ldap/admin/src/scripts/template-db2bak.pl.in @@ -0,0 +1,29 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/db2bak.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); + diff --git a/ldap/admin/src/scripts/template-db2index.in b/ldap/admin/src/scripts/template-db2index.in new file mode 100755 index 0000000..9c7c5ec --- /dev/null +++ b/ldap/admin/src/scripts/template-db2index.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/db2index "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-db2index.pl.in b/ldap/admin/src/scripts/template-db2index.pl.in new file mode 100644 index 0000000..96d21f4 --- /dev/null +++ b/ldap/admin/src/scripts/template-db2index.pl.in @@ -0,0 +1,28 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/db2index.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-db2ldif.in b/ldap/admin/src/scripts/template-db2ldif.in new file mode 100755 index 0000000..3881911 --- /dev/null +++ b/ldap/admin/src/scripts/template-db2ldif.in @@ -0,0 +1,5 @@ +#!/bin/sh + +cwd=`pwd` +{{SERVERBIN-DIR}}/db2ldif "$@" -Z {{SERV-ID}} -c $cwd +exit $? diff --git a/ldap/admin/src/scripts/template-db2ldif.pl.in b/ldap/admin/src/scripts/template-db2ldif.pl.in new file mode 100644 index 0000000..2afb226 --- /dev/null +++ b/ldap/admin/src/scripts/template-db2ldif.pl.in @@ -0,0 +1,31 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); +use Cwd; + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +$cwd = cwd(); + +exec "{{SERVERBIN-DIR}}/db2ldif.pl -c $cwd @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-dbverify.in b/ldap/admin/src/scripts/template-dbverify.in new file mode 100755 index 0000000..abcc58e --- /dev/null +++ b/ldap/admin/src/scripts/template-dbverify.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/dbverify "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-dn2rdn.in b/ldap/admin/src/scripts/template-dn2rdn.in new file mode 100755 index 0000000..9ecae08 --- /dev/null +++ b/ldap/admin/src/scripts/template-dn2rdn.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/dn2rdn "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-fixup-linkedattrs.pl.in b/ldap/admin/src/scripts/template-fixup-linkedattrs.pl.in new file mode 100644 index 0000000..b02d897 --- /dev/null +++ b/ldap/admin/src/scripts/template-fixup-linkedattrs.pl.in @@ -0,0 +1,28 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/fixup-linkedattrs.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-fixup-memberof.pl.in b/ldap/admin/src/scripts/template-fixup-memberof.pl.in new file mode 100644 index 0000000..90b76f1 --- /dev/null +++ b/ldap/admin/src/scripts/template-fixup-memberof.pl.in @@ -0,0 +1,28 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/fixup-memberof.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-fixup-memberuid.pl.in b/ldap/admin/src/scripts/template-fixup-memberuid.pl.in new file mode 100644 index 0000000..7dfe689 --- /dev/null +++ b/ldap/admin/src/scripts/template-fixup-memberuid.pl.in @@ -0,0 +1,154 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2014 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +sub usage { + print(STDERR "Usage: $0 [-v] -D rootdn { -w password | -w - | -j filename } \n"); + print(STDERR " -b baseDN [-f filter]\n"); + print(STDERR " Opts: -D rootdn - Directory Manager\n"); + print(STDERR " : -w password - Directory Manager's password\n"); + print(STDERR " : -w - - Prompt for Directory Manager's password\n"); + print(STDERR " : -j filename - Read Directory Manager's password from file\n"); + print(STDERR " : -b baseDN - Base DN that contains entries to fix up.\n"); + print(STDERR " : -f filter - Filter for entries to fix up\n"); + print(STDERR " If omitted, all entries under the specified\n"); + print(STDERR " base will have their memberUid attribute\n"); + print(STDERR " regenerated.\n"); + print(STDERR " : -v - verbose\n"); +} + +$rootdn = ""; +$passwd = ""; +$passwdfile = ""; +$basedn_arg = ""; +$filter_arg = ""; +$filter = ""; +$verbose = 0; + +$prefix = "{{DS-ROOT}}"; + +$ENV{'PATH'} = "$prefix@ldaptool_bindir@:$prefix/usr/bin:@ldaptool_bindir@:/usr/bin"; + +libpath_add("$prefix@nss_libdir@"); +libpath_add("$prefix/usr/lib"); +libpath_add("@nss_libdir@"); +libpath_add("/usr/lib"); + +$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}"; + +$i = 0; +while ($i <= $#ARGV) +{ + if ("$ARGV[$i]" eq "-b") + { + # base DN + $i++; $basedn_arg = $ARGV[$i]; + } + elsif ("$ARGV[$i]" eq "-f") + { + # filter + $i++; $filter_arg = $ARGV[$i]; + } + elsif ("$ARGV[$i]" eq "-D") + { + # Directory Manager + $i++; $rootdn = $ARGV[$i]; + } + elsif ("$ARGV[$i]" eq "-w") + { + # Directory Manager's password + $i++; $passwd = $ARGV[$i]; + } + elsif ("$ARGV[$i]" eq "-j") + { + # Read Directory Manager's password from a file + $i++; $passwdfile = $ARGV[$i]; + } + elsif ("$ARGV[$i]" eq "-v") + { + # verbose + $verbose = 1; + } + else + { + &usage; exit(1); + } + $i++; +} + +if ($passwdfile ne ""){ +# Open file and get the password + unless (open (RPASS, $passwdfile)) { + die "Error, cannot open password file $passwdfile\n"; + } + $passwd = ; + chomp($passwd); + close(RPASS); +} elsif ($passwd eq "-"){ +# Read the password from terminal + print "Bind Password: "; + # Disable console echo + system("@sttyexec@ -echo") if -t STDIN; + # read the answer + $passwd = ; + # Enable console echo + system("@sttyexec@ echo") if -t STDIN; + print "\n"; + chop($passwd); # trim trailing newline +} + +if ( $rootdn eq "" || $passwd eq "" || $basedn_arg eq "" ) +{ + &usage; + exit(1); +} + +$vstr = ""; +if ($verbose != 0) +{ + $vstr = "-v"; +} + +# Use a timestamp as part of the task entry name +($s, $m, $h, $dy, $mn, $yr, $wdy, $ydy, $r) = localtime(time); +$mn++; $yr += 1900; +$taskname = "memberUid_fixup_${yr}_${mn}_${dy}_${h}_${m}_${s}"; + +# Build the task entry to add +$dn = "dn: cn=$taskname, cn=memberuid task, cn=tasks, cn=config\n"; +$misc = "changetype: add\nobjectclass: top\nobjectclass: extensibleObject\n"; +$cn = "cn: $taskname\n"; +$basedn = "basedn: $basedn_arg\n"; + +if ( $filter_arg ne "" ) +{ + $filter = "filter: $filter_arg\n"; +} + +$entry = "${dn}${misc}${cn}${basedn}${filter}"; +open(FOO, "| ldapmodify @ldaptool_opts@ $vstr -h {{SERVER-NAME}} -p {{SERVER-PORT}} -D \"$rootdn\" -w shellEscape($passwd) -a" ); +print(FOO "$entry"); +close(FOO); + +sub libpath_add { + my $libpath = shift; + + if ($libpath) { + if ($ENV{'LD_LIBRARY_PATH'}) { + $ENV{'LD_LIBRARY_PATH'} = "$ENV{'LD_LIBRARY_PATH'}:$libpath"; + } else { + $ENV{'LD_LIBRARY_PATH'} = "$libpath"; + } + } +} diff --git a/ldap/admin/src/scripts/template-ldif2db.in b/ldap/admin/src/scripts/template-ldif2db.in new file mode 100755 index 0000000..f38fce3 --- /dev/null +++ b/ldap/admin/src/scripts/template-ldif2db.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/ldif2db "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-ldif2db.pl.in b/ldap/admin/src/scripts/template-ldif2db.pl.in new file mode 100644 index 0000000..64bcfdf --- /dev/null +++ b/ldap/admin/src/scripts/template-ldif2db.pl.in @@ -0,0 +1,28 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/ldif2db.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-ldif2ldap.in b/ldap/admin/src/scripts/template-ldif2ldap.in new file mode 100755 index 0000000..c785742 --- /dev/null +++ b/ldap/admin/src/scripts/template-ldif2ldap.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/ldif2ldap "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-monitor.in b/ldap/admin/src/scripts/template-monitor.in new file mode 100755 index 0000000..c89bb8a --- /dev/null +++ b/ldap/admin/src/scripts/template-monitor.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/monitor "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-ns-accountstatus.pl.in b/ldap/admin/src/scripts/template-ns-accountstatus.pl.in new file mode 100644 index 0000000..3eda54d --- /dev/null +++ b/ldap/admin/src/scripts/template-ns-accountstatus.pl.in @@ -0,0 +1,28 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/ns-accountstatus.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-ns-activate.pl.in b/ldap/admin/src/scripts/template-ns-activate.pl.in new file mode 100644 index 0000000..25a0742 --- /dev/null +++ b/ldap/admin/src/scripts/template-ns-activate.pl.in @@ -0,0 +1,28 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/ns-activate.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-ns-inactivate.pl.in b/ldap/admin/src/scripts/template-ns-inactivate.pl.in new file mode 100644 index 0000000..55d7226 --- /dev/null +++ b/ldap/admin/src/scripts/template-ns-inactivate.pl.in @@ -0,0 +1,28 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/ns-inactivate.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-ns-newpwpolicy.pl.in b/ldap/admin/src/scripts/template-ns-newpwpolicy.pl.in new file mode 100755 index 0000000..cd8cd65 --- /dev/null +++ b/ldap/admin/src/scripts/template-ns-newpwpolicy.pl.in @@ -0,0 +1,28 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/ns-newpwpolicy.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-restart-slapd.in b/ldap/admin/src/scripts/template-restart-slapd.in new file mode 100644 index 0000000..7933806 --- /dev/null +++ b/ldap/admin/src/scripts/template-restart-slapd.in @@ -0,0 +1,3 @@ +#!/bin/sh +# DEPRECATED - use @sbindir@/restart-dirsrv instead +exec @sbindir@/restart-dirsrv -d {{INITCONFIG-DIR}} {{SERV-ID}} "$@" diff --git a/ldap/admin/src/scripts/template-restoreconfig.in b/ldap/admin/src/scripts/template-restoreconfig.in new file mode 100755 index 0000000..5109561 --- /dev/null +++ b/ldap/admin/src/scripts/template-restoreconfig.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/restoreconfig "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-saveconfig.in b/ldap/admin/src/scripts/template-saveconfig.in new file mode 100755 index 0000000..7784e83 --- /dev/null +++ b/ldap/admin/src/scripts/template-saveconfig.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/saveconfig "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-schema-reload.pl.in b/ldap/admin/src/scripts/template-schema-reload.pl.in new file mode 100644 index 0000000..6a1b686 --- /dev/null +++ b/ldap/admin/src/scripts/template-schema-reload.pl.in @@ -0,0 +1,28 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/schema-reload.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-start-slapd.in b/ldap/admin/src/scripts/template-start-slapd.in new file mode 100755 index 0000000..be59404 --- /dev/null +++ b/ldap/admin/src/scripts/template-start-slapd.in @@ -0,0 +1,4 @@ +#!/bin/sh +# DEPRECATED - use @sbindir@/start-dirsrv instead +INSTANCE={{SERV-ID}} +exec @sbindir@/start-dirsrv -d {{INITCONFIG-DIR}} $INSTANCE "$@" diff --git a/ldap/admin/src/scripts/template-stop-slapd.in b/ldap/admin/src/scripts/template-stop-slapd.in new file mode 100755 index 0000000..3bf358d --- /dev/null +++ b/ldap/admin/src/scripts/template-stop-slapd.in @@ -0,0 +1,3 @@ +#!/bin/sh +# DEPRECATED - use @sbindir@/stop-dirsrv instead +exec @sbindir@/stop-dirsrv -d {{INITCONFIG-DIR}} {{SERV-ID}} "$@" diff --git a/ldap/admin/src/scripts/template-suffix2instance.in b/ldap/admin/src/scripts/template-suffix2instance.in new file mode 100755 index 0000000..e29408d --- /dev/null +++ b/ldap/admin/src/scripts/template-suffix2instance.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/suffix2instance "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-syntax-validate.pl.in b/ldap/admin/src/scripts/template-syntax-validate.pl.in new file mode 100644 index 0000000..e802010 --- /dev/null +++ b/ldap/admin/src/scripts/template-syntax-validate.pl.in @@ -0,0 +1,28 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/syntax-validate.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-upgradedb.in b/ldap/admin/src/scripts/template-upgradedb.in new file mode 100755 index 0000000..ae28ac2 --- /dev/null +++ b/ldap/admin/src/scripts/template-upgradedb.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/upgradedb "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-upgradednformat.in b/ldap/admin/src/scripts/template-upgradednformat.in new file mode 100755 index 0000000..74c18e8 --- /dev/null +++ b/ldap/admin/src/scripts/template-upgradednformat.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/upgradednformat "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/template-usn-tombstone-cleanup.pl.in b/ldap/admin/src/scripts/template-usn-tombstone-cleanup.pl.in new file mode 100644 index 0000000..4f16f3e --- /dev/null +++ b/ldap/admin/src/scripts/template-usn-tombstone-cleanup.pl.in @@ -0,0 +1,27 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/usn-tombstone-cleanup.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-verify-db.pl.in b/ldap/admin/src/scripts/template-verify-db.pl.in new file mode 100644 index 0000000..8a52ded --- /dev/null +++ b/ldap/admin/src/scripts/template-verify-db.pl.in @@ -0,0 +1,27 @@ +#{{PERL-EXEC}} +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(/usr/lib64/dirsrv/perl); +use DSUtil qw(shellEscape); + +# We lose args that are quoted when passing ARGV to a wrapper +while ($i <= $#ARGV) { + if($ARGV[$i] =~ /^-/){ + $wrapperArgs[$i] = $ARGV[$i]; + } else { + $wrapperArgs[$i] = shellEscape($ARGV[$i]); + } + $i++; +} + +exec "{{SERVERBIN-DIR}}/verify-db.pl @wrapperArgs -Z {{SERV-ID}}"; + +exit ($?); diff --git a/ldap/admin/src/scripts/template-vlvindex.in b/ldap/admin/src/scripts/template-vlvindex.in new file mode 100755 index 0000000..a7ffb40 --- /dev/null +++ b/ldap/admin/src/scripts/template-vlvindex.in @@ -0,0 +1,4 @@ +#!/bin/sh + +{{SERVERBIN-DIR}}/vlvindex "$@" -Z {{SERV-ID}} +exit $? diff --git a/ldap/admin/src/scripts/upgradedb.in b/ldap/admin/src/scripts/upgradedb.in new file mode 100755 index 0000000..2b7c79d --- /dev/null +++ b/ldap/admin/src/scripts/upgradedb.in @@ -0,0 +1,59 @@ +#!/bin/sh + +. @datadir@/@package_name@/data/DSSharedLib + +libpath_add "@libdir@/@package_name@/" +libpath_add "@libdir@" +libpath_add "@nss_libdir@" +libpath_add "@pcre_libdir@" + +export LD_LIBRARY_PATH +SHLIB_PATH=$LD_LIBRARY_PATH +export SHLIB_PATH + +usage () +{ + echo "Usage: upgradedb [-a archivedir] [-Z serverID] [-f] [-v] [-d debuglevel] [-h]" + echo "Options:" + echo " -a archivedir - Location of database backup" + echo " -Z serverID - Server instance identifier" + echo " -f - Force upgrade" + echo " -v - Display version" + echo " -d debuglevel - Debugging level" + echo " -h - Display usage" +} +while getopts "Z:vfrd:h" flag +do + case $flag in + Z) servid=$OPTARG;; + v) args=$args" -v";; + f) args=$args" -f";; + r) args=$args" -r";; + d) args=$args" -d \"$OPTARG\"";; + a) args=$args" -a \"$OPTARG\"" + archive_provided="yes";; + D) args=$args" -D \"$OPTARG\"";; + h) usage + exit 0;; + esac +done + +initfile=$(get_init_file "@initconfigdir@" $servid) +if [ $? -eq 1 ] +then + echo "You must supply a valid server instance identifier. Use -Z to specify instance name" + echo "Available instances: $initfile" + exit 1 +fi + +servid=`normalize_server_id $initfile` +. $initfile + +if [ "$archive_provided" != "yes" ] +then + bak_dir=@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/bak/upgradedb_`date +%Y_%m_%d_%H_%M_%S` + args=$args" -a $bak_dir" +fi + +echo upgrade index files ... +eval @sbindir@/ns-slapd upgradedb -D $CONFIG_DIR $args diff --git a/ldap/admin/src/scripts/upgradednformat.in b/ldap/admin/src/scripts/upgradednformat.in new file mode 100755 index 0000000..9de60ea --- /dev/null +++ b/ldap/admin/src/scripts/upgradednformat.in @@ -0,0 +1,71 @@ +#!/bin/sh + +. @datadir@/@package_name@/data/DSSharedLib + +# upgradednformat -- upgrade DN format to the new style (RFC 4514) +# Usgae: upgradednformat [-N] -n backend_instance -a db_instance_directory +# -N: dryrun +# exit code: 0 -- needs upgrade; 1 -- no need to upgrade; -1 -- error +# -n backend_instance -- instance name to be examined or upgraded +# -a db_instance_directory -- full path to the db instance dir +# e.g., /var/lib/dirsrv/slapd-ID/db/userRoot + +libpath_add "@libdir@/@package_name@/" +libpath_add "@nss_libdir@" +libpath_add "@libdir@" +libpath_add "@pcre_libdir@" + +export LD_LIBRARY_PATH +SHLIB_PATH=$LD_LIBRARY_PATH +export SHLIB_PATH + +usage () +{ + echo "Usage: upgradednformat -n backendname -a database_directory [-Z serverID] [-N] [-h]" + echo "Options:" + echo " -n backendname - Backend name" + echo " -a database_directory - Path to database directory" + echo " -Z serverID - Server instance identifier" + echo " -N - Only checks if database has any DNs that need to be upgraded" + echo " -h - Display usage" +} + +while getopts "vhd:a:n:D:NZ:" flag +do + case $flag in + Z) servid=$OPTARG;; + v) args=$args" -v";; + N) args=$args" -N";; + d) args=$args" -d \"$OPTARG\"";; + a) args=$args" -a \"$OPTARG\"" + dir="set";; + n) args=$args" -n \"$OPTARG\"" + be="set";; + h) usage + exit 0;; + D) args=$args" -D \"$OPTARG\"";; + ?) usage + exit 1;; + esac +done + +if [ -z "$be" ] || [ -z "$dir" ]; then + usage + exit 1 +fi + +initfile=$(get_init_file "@initconfigdir@" $servid) +if [ $? -eq 1 ] +then + usage + echo "You must supply a valid server instance identifier. Use -Z to specify instance name" + echo "Available instances: $initfile" + exit 1 +fi + +. $initfile + +eval @sbindir@/ns-slapd upgradednformat -D $CONFIG_DIR $args +rc=$? + +exit $rc diff --git a/ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in b/ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in new file mode 100644 index 0000000..bafdb1a --- /dev/null +++ b/ldap/admin/src/scripts/usn-tombstone-cleanup.pl.in @@ -0,0 +1,126 @@ +#!@perlexec@ +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(@perlpath@); +use DSUtil; + +DSUtil::libpath_add("@nss_libdir@"); +DSUtil::libpath_add("/usr/lib"); +DSUtil::libpath_add("/usr/lib64"); +$ENV{'PATH'} = "@ldaptool_bindir@:/usr/bin:/usr/lib64/mozldap/"; +$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}"; + +$i = 0; + +sub usage { + print(STDERR "Usage: usn-tombstone-cleanup.pl [-Z serverID] [-D rootdn] { -w password | -w - | -j filename }\n"); + print(STDERR " -s suffix -n backend [-m maxusn_to_delete] [-P protocol] [-v] [-h]\n"); + print(STDERR "Options:\n"); + print(STDERR " -D rootdn - Directory Manager\n"); + print(STDERR " -w password - Directory Manager's password\n"); + print(STDERR " -w - - Prompt for Directory Manager's password\n"); + print(STDERR " -Z serverID - Server instance identifier\n"); + print(STDERR " -j filename - Read Directory Manager's password from file\n"); + print(STDERR " -s suffix - Suffix where USN tombstone entries are cleaned up\n"); + print(STDERR " -n backend - Backend instance in which USN tombstone entries are cleaned up (alternative to suffix)\n"); + print(STDERR " -m maxusn_to_delete - USN tombstone entries are deleted up to the entry with maxusn_to_delete\n"); + print(STDERR " -P protocol - STARTTLS, LDAPS, LDAPI, LDAP (default: uses most secure protocol available)\n"); + print(STDERR " -v - Verbose output\n"); + print(STDERR " -h - Display usage\n"); +} + +while ($i <= $#ARGV) +{ + if ("$ARGV[$i]" eq "-s"){ + # suffix + $i++; $suffix_arg = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-n"){ + # backend + $i++; $backend_arg = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-m"){ + # max usn + $i++; $maxusn_arg = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-D"){ + # Directory Manager + $i++; $rootdn = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-w"){ + # Directory Manager's password + $i++; $passwd = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-j"){ + # Read Directory Manager's password from a file + $i++; $passwdfile = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-Z"){ + # Server instance identifier + $i++; $servid = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-P") { + # protocol preference + $i++; $protocol = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-h"){ + # help + &usage; + exit(0); + } elsif ("$ARGV[$i]" eq "-v"){ + # verbose + $verbose = 1; + } else { + &usage; + exit(1); + } + $i++; +} + +# +# Gather all our config settings +# +($servid, $confdir) = DSUtil::get_server_id($servid, "@initconfigdir@"); +%info = DSUtil::get_info($confdir, $host, $port, $rootdn); +$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile); +$info{protocol} = $protocol; +if ($verbose == 1){ + $info{args} = "-v -a"; +} else { + $info{args} = "-a"; +} +if ( $suffix_arg eq "" && $backend_arg eq "" ){ + &usage; + exit(1); +} + +# +# Construct the task entry +# +($s, $m, $h, $dy, $mn, $yr, $wdy, $ydy, $r) = localtime(time); +$mn++; $yr += 1900; +$taskname = "usn_cleanup_${yr}_${mn}_${dy}_${h}_${m}_${s}"; +$dn = "dn: cn=$taskname, cn=USN tombstone cleanup task, cn=tasks, cn=config\n"; +$misc = "objectclass: top\nobjectclass: extensibleObject\n"; +$cn = "cn: $taskname\n"; +if ( $suffix_arg ne "" ){ + $args = "suffix: $suffix_arg\n"; +} else { + $args = "backend: $backend_arg\n"; +} +if ( $maxusn_arg ne "" ){ + $args = $args . "maxusn_to_delete: $maxusn_arg\n"; +} +$entry = "${dn}${misc}${cn}${args}"; + +$rc = DSUtil::ldapmod($entry, %info); + +$dn =~ s/^dn: //; +$dn =~ s/\n//; +if($rc == 0){ + print "Successfully added task entry \"$dn\"\n"; +} else { + print "Failed to add task entry \"$dn\" error ($rc)\n"; +} + +exit($rc); diff --git a/ldap/admin/src/scripts/verify-db.pl.in b/ldap/admin/src/scripts/verify-db.pl.in new file mode 100644 index 0000000..d481ecb --- /dev/null +++ b/ldap/admin/src/scripts/verify-db.pl.in @@ -0,0 +1,239 @@ +#!@perlexec@ +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# + +use lib qw(@perlpath@); +use DSUtil; + +DSUtil::libpath_add("@db_libdir@"); +DSUtil::libpath_add("@libdir@"); +$ENV{'PATH'} = "@libdir@/@package_name@/slapd-$servid:@db_bindir@:/usr/bin:/"; +$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}"; +my $custom_dbdir = 0; +my $i = 0; + +sub usage +{ + print "Usage: verify-db.pl [-Z serverID] [ -a ] [-h]\n"; +} + +# getDbDir checks up to 4 levels of db dirs +# e.g., /db// +sub getDbDir +{ + (my $here) = @_; + my @dbdirs = (); + + opendir(DIR0, $here) or die "can't opendir $here : $!"; + while (defined(my $file0 = readdir(DIR0))) + { + if ( "$file0" eq "\." || "$file0" eq "\.\." ) + { + ; + } + elsif ( "$file0" eq "DBVERSION" ) + { + $#dbdirs++; + $dbdirs[$#dbdirs] = $here; + } + elsif ( -d $here . "/" . $file0 ) + { + opendir(DIR1, $here . "/" . $file0) or die "can't opendir $file0 : $!"; + while (defined(my $file1 = readdir(DIR1))) + { + if ( "$file1" eq "\." || "$file1" eq "\.\." ) + { + ; + } + elsif ( "$file1" eq "DBVERSION" ) + { + $#dbdirs++; + $dbdirs[$#dbdirs] = $here . "/" . $file0; + } + elsif ( -d $here . "/" . $file0 . "/" . $file1 ) + { + opendir(DIR2, $here . "/" . $file0 . "/" . $file1) or die "can't opendir $file1 : $!"; + while (defined(my $file2 = readdir(DIR2))) + { + if ( "$file2" eq "\." || "$file2" eq "\.\." ) + { + ; + } + elsif ("$file2" eq "DBVERSION") + { + $#dbdirs++; + $dbdirs[$#dbdirs] = $here . "/" . $file0 . "/" . $file1; + } + elsif ( -d $here . "/" . $file0 . "/" . $file1 . "/" . $file2 ) + { + opendir(DIR3, $here . "/" . $file0 . "/" . $file1 . "/" . $file2) or die "can't opendir $file1 : $!"; + while (defined(my $file3 = readdir(DIR3))) + { + if ( "$file3" eq "\." || "$file3" eq "\.\." ) + { + ; + } + elsif ("$file3" eq "DBVERSION") + { + $#dbdirs++; + $dbdirs[$#dbdirs] = $here . "/" . $file0 . "/" . $file1 . "/" . $file2; + } + } + closedir(DIR3); + } + } + closedir(DIR2); + } + } + closedir(DIR1); + } + } + closedir(DIR0); + + return \@dbdirs; +} + +sub getLastLogfile +{ + (my $here) = @_; + my $logfile = ""; + + opendir(DIR, $here) or die "can't opendir $here : $!"; + while (defined($file = readdir(DIR))) + { + if ($file =~ /log./) + { + $logfile = $file; + } + } + closedir(DIR); + + return \$logfile; +} + +$NULL = "/dev/null"; + +while ($i <= $#ARGV) { + if ( "$ARGV[$i]" eq "-a" ) { # path to search the db files + $i++; $startpoint = $ARGV[$i]; + } elsif ( "$ARGV[$i]" eq "-Z" ) { # server instance identifier + $i++; $servid = $ARGV[$i]; + } elsif ("$ARGV[$i]" eq "-h") { # help + &usage; exit(0); + } else { + &usage; exit(1); + } + $i++; +} + +($servid, $notused_configdir) = DSUtil::get_server_id($servid, "@initconfigdir@"); + +print("*****************************************************************\n"); +print("verify-db: This tool should only be run if recovery start fails\n" . + "and the server is down. If you run this tool while the server is\n" . + "running, you may get false reports of corrupted files or other\n" . + "false errors.\n"); +print("*****************************************************************\n"); + +if ( "$startpoint" eq "" ) { + $startpoint = "@localstatedir@/lib/@PACKAGE_NAME@/slapd-$servid/db"; +} else { + $custom_dbdir = 1; +} +# get dirs having DBVERSION +my $dbdirs = getDbDir($startpoint); + +# Check transaction logs by db_printlog +for (my $i = 0; "$$dbdirs[$i]" ne ""; $i++) +{ + my $logfile = getLastLogfile($$dbdirs[$i]); + + if ( "$$logfile" ne "" ) + { + # run db_printlog -h for each + print "Verify log files in $$dbdirs[$i] ... "; + open(PRINTLOG, "db_printlog -h $$dbdirs[$i] 2>&1 1> $NULL |"); + sleep 1; + my $haserr = 0; + while ($l = ) + { + if ("$l" ne "") + { + if ($haserr == 0) + { + print "\n"; + } + print "LOG ERROR: $l"; + $haserr++; + } + } + close(PRINTLOG); + if ($haserr == 0 && $? == 0) + { + print "Good\n"; + } + else + { + print "Log file(s) in $$dbdirs[$i] could be corrupted.\n"; + print "Please delete a log file $$logfile, and try restarting the server.\n"; + } + } +} + +# Check db files by db_verify +print "Verify db files ... "; +if ($custom_dbdir){ + open(DBVERIFY, "@sbindir@/dbverify -Z $servid -a $startpoint 2>&1 1> $NULL |"); +} else { + open(DBVERIFY, "@sbindir@/dbverify -Z $servid 2>&1 1> $NULL |"); +} +sleep 1; +my $bad_index = 0; +my $bad_id2entry = 0; +my $isfirst = 1; +while ($l = ) +{ + if ($isfirst) + { + print "\n"; + $isfirst = 0; + } + if ("$l" =~ /verify failed/) + { + if ("$l" =~ /id2entry.db/) + { + $bad_id2entry++; + } + else + { + $bad_index++; + } + } + 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); +} diff --git a/ldap/admin/src/scripts/vlvindex.in b/ldap/admin/src/scripts/vlvindex.in new file mode 100755 index 0000000..a1696bc --- /dev/null +++ b/ldap/admin/src/scripts/vlvindex.in @@ -0,0 +1,64 @@ +#!/bin/sh + +. @datadir@/@package_name@/data/DSSharedLib + +libpath_add "@libdir@/@package_name@/" +libpath_add "@libdir@" +libpath_add "@nss_libdir@" +libpath_add "@pcre_libdir@" + +export LD_LIBRARY_PATH +SHLIB_PATH=$LD_LIBRARY_PATH +export SHLIB_PATH + +usage () +{ + echo "Usage: vlvindex [-Z serverID] -n backendname | {-s includesuffix}* -T vlvTag [-d debuglevel] [-h]" + echo "Note: either \"-n backend\" or \"-s includesuffix\" are required." + echo "Options:" + echo " -Z serverID - Server instance identifier" + echo " -n backend - Backend database name. Example: userRoot" + echo " -s includessuffix - Suffix to index" + echo " -T vlvTag - VLV index name" + echo " -d debuglevel - Debugging level" + echo " -h - Display usage" +} + +while getopts "Z:vd:a:T:Sn:s:x:hD:" flag +do + case $flag in + Z) servid=$OPTARG;; + v) args=$args" -v";; + s) args=$args" -s \"$OPTARG\"";; + d) args=$args" -d \"$OPTARG\"";; + a) args=$args" -a \"$OPTARG\"";; + T) args=$args" -T \"$OPTARG\"";; + S) args=$args" -S";; + n) args=$args" -n \"$OPTARG\"";; + x) args=$args" -x \"$OPTARG\"";; + D) args=$args" -D \"$OPTARG\"";; + h) usage + exit 0;; + ?) usage + exit 1;; + esac +done + +initfile=$(get_init_file "@initconfigdir@" $servid) +if [ $? -eq 1 ] +then + usage + echo "You must supply a valid server instance identifier. Use -Z to specify instance name" + echo "Available instances: $initfile" + exit 1 +fi + +. $initfile + +if [ $# -lt 4 ] +then + usage + exit 1 +fi + +eval @sbindir@/ns-slapd db2index -D $CONFIG_DIR $args diff --git a/ldap/admin/src/slapd.inf.in b/ldap/admin/src/slapd.inf.in new file mode 100644 index 0000000..67370e1 --- /dev/null +++ b/ldap/admin/src/slapd.inf.in @@ -0,0 +1,38 @@ +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2007 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# +[General] +Name=@capbrand@ Directory Suite +Components=slapd + +[slapd] +Name= @capbrand@ Directory Server +InstanceNamePrefix= Directory Server +NickName= slapd +Version= @PACKAGE_VERSION@ +BaseVersion= @CONSOLE_VERSION@ +Compatible= 1.0 +BuildNumber= @NQBUILD_NUM@ +Description= @capbrand@ Directory Server +ProductName=Directory Server +Vendor= @vendor@ +# the rest of these are obsolete, but left here for +# compatability with the old setuputil +Expires= 0 +Security= domestic +IsDirLite=false +PrePreInstall= dsktune +PreInstall= ns-config +PostInstall= bin/slapd/admin/bin/ns-update +PreUninstall= bin/slapd/admin/bin/uninstall +PostUninstall= +Checked=True +Mandatory=False +IsLdap=True diff --git a/ldap/admin/src/template-initconfig.in b/ldap/admin/src/template-initconfig.in new file mode 100644 index 0000000..03a6922 --- /dev/null +++ b/ldap/admin/src/template-initconfig.in @@ -0,0 +1,22 @@ +# This file is sourced by @package_name@ upon startup to set +# the default environment for a single specific directory +# server instances. To set defaults for all instances, edit +# the file in the same directory called @package_name@. + +# These settings are used by the start-dirsrv and +# start-slapd scripts (as well as their associates stop +# and restart scripts). Do not edit them unless you know +# what you are doing. + +@preamble@ + +SERVER_DIR={{SERVER-DIR}} +SERVERBIN_DIR={{SERVERBIN-DIR}} +CONFIG_DIR={{CONFIG-DIR}} +INST_DIR={{INST-DIR}} +RUN_DIR={{RUN-DIR}} +DS_ROOT={{DS-ROOT}} +PRODUCT_NAME={{PRODUCT-NAME}} + +# Put custom instance specific settings below here. +# if using systemd, omit the "; export VARNAME" at the end diff --git a/ldap/admin/src/upgradeServer b/ldap/admin/src/upgradeServer new file mode 100755 index 0000000..3f32ef4 --- /dev/null +++ b/ldap/admin/src/upgradeServer @@ -0,0 +1,542 @@ +#!/usr/bin/env perl +# +# BEGIN COPYRIGHT BLOCK +# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. +# Copyright (C) 2005 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# END COPYRIGHT BLOCK +# +# This script is used to copy over files from 'install' directory +# to the server instance. + +BEGIN { + $isNT = -d "\\"; + $PS = $isNT ? "\\" : "/"; + $SEP = $isNT ? ";" : ":" ; + $slapdExecName = $isNT ? "slapd.exe" : "ns-slapd"; + # NT needs quotes around some things unix doesn't + $quote = $isNT ? "\"" : ""; +} + +$sroot = $ARGV[0]; +$prefix = $ARGV[1]; +$installDir = sprintf("%s%s%s%s%s%s%s", $sroot, ${PS}, "bin", ${PS}, "slapd", ${PS}, "install"); + +push @INC, "$sroot/bin/slapd/admin/bin"; +require 'uname.lib'; + +my $os = &uname("-s"); +my $shlibsuf; +SWITCH: { + if ($os eq "AIX") { + $LIB_PATH = "LIBPATH" ; + $shlibsuf = ".so"; + last SWITCH ; + } + if ($os eq "HP-UX") { + $LIB_PATH = "SHLIB_PATH" ; + my $arch = &uname("-p"); + if ($arch eq "ia64") { + $shlibsuf = ".so"; + } else { + $shlibsuf = ".sl"; + } + last SWITCH ; + } + if ($isNT) { + $LIB_PATH = "PATH" ; + $shlibsuf = ".dll"; + last SWITCH ; + } + else { + $LIB_PATH = "LD_LIBRARY_PATH" ; + $shlibsuf = ".so"; + last SWITCH ; + } +} + +# This subroutine takes source directory and destination directory +# as the arguments. + +sub copy_files +{ + my $destDir = pop(@_); + my $srcDir = pop(@_); + my $buf = ""; + my $bufsize = 8192; + + opendir(SRCDIR, $srcDir) || die "Can not open source directory $src_dir\n"; + my @srcfiles = readdir(SRCDIR); + closedir(SRCDIR); + + my $count = 0; + while ($count <= $#srcfiles) { + if ($srcfiles[$count] eq "." || $srcfiles[$count] eq ".." + || $srcfiles[$count] eq "99user.ldif" ) { + $count++; + next; + } + my $fullpath_srcfile = sprintf("%s%s%s", $srcDir, ${PS}, $srcfiles[$count]); + my $fullpath_destfile = sprintf("%s%s%s", $destDir, ${PS}, $srcfiles[$count]); + + open( SRC, $fullpath_srcfile ) || die "Can't open $fullpath_srcfile: $!\n"; + open( DEST, ">$fullpath_destfile" ) || die "Can't create $fullpath_destfile: $!\n"; + while (read(SRC, $buf, $bufsize)) { + print DEST $buf; + } + close( SRC ); + close( DEST ); + + $count++; + } +} + +# Copy schema ldiffiles from /bin/slapd/install/schema to +# //config/schema + +sub copy_schema_files +{ + my $schema_bakdir = sprintf("%s%s%s%s%s%s%s", $sroot, ${PS}, ${prefix}, ${PS}, "config", ${PS}, "schema-bak"); + my $schema_srcdir = sprintf("%s%s%s", $installDir, ${PS}, "schema"); + my $schema_destdir = sprintf("%s%s%s%s%s%s%s", $sroot, ${PS}, ${prefix}, ${PS}, "config", ${PS}, "schema"); + + # First, back up the original schema ldiffiles under schema-bak directory + unless (-d $schema_bakdir) { + mkdir ($schema_bakdir, 0755) || + die "Cannot create directory $schema_bakdir: $!\n"; + } + copy_files( $schema_destdir, $schema_bakdir ); + + # Now, copy the latest schema ldiffiles + copy_files( $schema_srcdir, $schema_destdir ); +} + +sub modify_dse_ldif +{ + my $dse_ldiffile = sprintf("%s%s%s%s%s%s%s", $sroot, ${PS}, ${prefix}, ${PS}, "config", ${PS}, "dse.ldif"); + my $isOID = 0; + my $isJPEG = 0; + my $isSpInSt = 0; + my $reqNameChange = 0; + + open( DSE, "$dse_ldiffile" ) || die "Can't open $dse_ldiffile: $!\n"; + my $new_filename = "$dse_ldiffile"."_new"; + open( OUTFILE, "> $new_filename" ); + while($line = ) { + $isOID = 1 if ( $line =~ /^dn:\s*cn=OID Syntax,\s*cn=plugins,\s*cn=config/i); + $isJPEG = 1 if ( $line =~ /^dn:\s*cn=JPEG Syntax,\s*cn=plugins,\s*cn=config/i); + $isSpInSt = 1 if ( $line =~ /^dn:\s*cn=Space Insensitive String Syntax,\s*cn=plugins,\s*cn=config/i); + if( ($line =~ s/uid uniqueness/attribute uniqueness/) || + ($line =~ s/uid-plugin/attr-unique-plugin/) ){ + # the plugin name has changed + $reqNameChange = 1; + print OUTFILE $line; + } else { + print OUTFILE $line; + } + + } + close( DSE ); + close(OUTFILE); + + if ($isOID && $isJPEG && $isSpInSt && !$reqNameChange) { + # nothing to be done - just return + unlink($new_filename); + return; + } + + if($reqNameChange){ + # if the name change is required copy the contents of the edited dse.ldif_new to the dse.ldif + open( DSE, ">$dse_ldiffile" ) || die "Can't open $dse_ldiffile: $!\n"; + open( OUTFILE, "$new_filename" ) || die "Can't open $new_filename: $!\n"; + while($line = ) { + print DSE $line; + } + close( DSE ); + close(OUTFILE); + } + unlink($new_filename) or die "Cannot unlink $new_filename \n"; + + + open( DSE, ">>$dse_ldiffile" ) || die "Can't open $dse_ldiffile: $!\n"; + + unless ($isOID) { + # Add OID Syntax entry + print DSE "dn: cn=OID Syntax,cn=plugins,cn=config\n"; + print DSE "objectClass: top\n"; + print DSE "objectClass: nsSlapdPlugin\n"; + print DSE "objectClass: extensibleObject\n"; + print DSE "cn: OID Syntax\n"; + print DSE "nsslapd-pluginPath: $sroot/lib/syntax-plugin$shlibsuf\n"; + print DSE "nsslapd-pluginInitfunc: oid_init\n"; + print DSE "nsslapd-pluginType: syntax\n"; + print DSE "nsslapd-pluginEnabled: on\n"; + print DSE "nsslapd-pluginId: oid-syntax\n"; + print DSE "nsslapd-pluginVersion: 1.0.3\n"; + print DSE "nsslapd-pluginVendor: 389 Project\n"; + print DSE "nsslapd-pluginDescription: OID attribute syntax plugin\n"; + print DSE "\n"; + } + + unless ($isJPEG) { + # Add JPEG Syntax entry + print DSE "dn: cn=JPEG Syntax,cn=plugins,cn=config\n"; + print DSE "objectClass: top\n"; + print DSE "objectClass: nsSlapdPlugin\n"; + print DSE "objectClass: extensibleObject\n"; + print DSE "cn: JPEG Syntax\n"; + print DSE "nsslapd-pluginPath: $sroot/lib/syntax-plugin$shlibsuf\n"; + print DSE "nsslapd-pluginInitfunc: jpeg_init\n"; + print DSE "nsslapd-pluginType: syntax\n"; + print DSE "nsslapd-pluginEnabled: on\n"; + print DSE "nsslapd-pluginId: jpeg-syntax\n"; + print DSE "nsslapd-pluginVersion: 1.0.3\n"; + print DSE "nsslapd-pluginVendor: 389 Project\n"; + print DSE "nsslapd-pluginDescription: JPEG attribute syntax plugin\n"; + print DSE "\n"; + } + + unless ($isSpInSt) { + # Add Space Insensitive String Syntax entry + print DSE "dn: cn=Space Insensitive String Syntax,cn=plugins,cn=config\n"; + print DSE "objectClass: top\n"; + print DSE "objectClass: nsSlapdPlugin\n"; + print DSE "objectClass: extensibleObject\n"; + print DSE "cn: Space Insensitive String Syntax\n"; + print DSE "nsslapd-pluginPath: $sroot/lib/syntax-plugin$shlibsuf\n"; + print DSE "nsslapd-pluginInitfunc: sicis_init\n"; + print DSE "nsslapd-pluginType: syntax\n"; + print DSE "nsslapd-pluginEnabled: on\n"; + print DSE "nsslapd-pluginId: spaceinsensitivestring-syntax\n"; + print DSE "nsslapd-pluginVersion: 1.0.3\n"; + print DSE "nsslapd-pluginVendor: 389 Project\n"; + print DSE "nsslapd-pluginDescription: space insensitive string attribute syntax plugin\n"; + print DSE "\n"; + } + + close( DSE ); +} + +sub get_changelog_dir { + my $dse_ldiffile = sprintf("%s%s%s%s%s%s%s", $sroot, ${PS}, ${prefix}, ${PS}, "config", ${PS}, "dse.ldif"); + my $inClEntry = 0; + my $clDir; + + # first find the changelog dir, if any + open( DSE, "$dse_ldiffile" ) || die "Can't open $dse_ldiffile: $!\n"; + while() { + if (/^dn:\s*cn=changelog5,\s*cn=config/i) { + $inClEntry = 1; + next; + } + if (/^\s*$/ && $inClEntry) { + $inClEntry = 0; + last; # not found, just abort + } + if ($inClEntry && /^nsslapd-changelogdir:\s*/i) { + $clDir = $'; #' + chomp($clDir); + last; + } + } + close( DSE ); + return $clDir; +} + +sub fix_changelog { + my $clDir = shift; + my $newver = shift; + + # look for the region files and remove them - they are the files + # that start with "__" - like __db.001 + opendir CLDIR, $clDir || die "Error: can't open changelog db dir $clDir: $!"; + while (my $ff = readdir CLDIR) { + unlink $clDir."/".$ff if ($ff =~ /^__/); + } + closedir CLDIR; + + # change the dbversion + my $dbverfile = $clDir . "/DBVERSION"; + my $tmpverfile = $clDir . "/DBVERSION.tmp"; + open DBVER, $dbverfile or die "Error: could not read file $dbverfile: $!"; + open TMPVER, ">$tmpverfile" or die "Error: could not write file $tmpverfile: $!"; + while () { + s/\d+\.\d+$/$newver/; + print TMPVER; + } + close TMPVER; + close DBVER; + unlink $dbverfile; + rename $tmpverfile, $dbverfile; +} + +# get the new (current) version from slapd itself +# not currently used +sub getSlapdVersion { + my $dir = shift; + my $version = 0; # major version of e.g. 6.1 == 6 + my $minor = 0; # minor version of e.g. 6.1 == 1 + my $subminor = 0; # subminor version of e.g. 6.1.2 == 2 + my $buildNumber = 0; + my $progDir = "${PS}bin${PS}slapd${PS}server${PS}"; + + # find the slapd executable + $prog = $dir . $progDir . $slapdExecName; + if (! -f $prog) { + die "Could not run slapd program $prog: $!"; + } + else { + chdir($dir . $progDir); + } + + open(F, "${quote}${quote}$prog${quote} -v${quote} 2>&1 |") or + die "Could not run slapd program $prog: $!"; + sleep(1); # allow some data to accumulate in the pipe +# print "Output from $prog -v:\n"; + while () { + if (/^Red Hat-Directory\/(\d+)\.(\d+)(?:\.(\d+))?(?:b\d)*\s+(\S+)/) { + $version = $1; + $minor = $2; + if ($4) { + $subminor = $3; + $buildNumber = $4; + } else { + $buildNumber = $3; + } + last; + } + elsif (/^389-Directory\/(\d+)\.(\d+)(?:\.(\d+))?(?:b\d)*\s+(\S+)/) { + $version = $1; + $minor = $2; + if ($4) { + $subminor = $3; + $buildNumber = $4; + } else { + $buildNumber = $3; + } + last; + } + elsif (/^Fedora-Directory\/(\d+)\.(\d+)(?:\.(\d+))?(?:b\d)*\s+(\S+)/) { + $version = $1; + $minor = $2; + if ($4) { + $subminor = $3; + $buildNumber = $4; + } else { + $buildNumber = $3; + } + last; + } + elsif (/^Netscape-Directory\/(\d+)\.(\d+)(?:\.(\d+))?(?:b\d)*\s+(\S+)/) { + $version = $1; + $minor = $2; + if ($4) { + $subminor = $3; + $buildNumber = $4; + } else { + $buildNumber = $3; + } + last; + } + elsif (/^Netscape-Directory\(restrict?ed-mode\)\/(\d+)\.(\d+)(?:\.(\d+))?\s+(\S+)/) { # we can have restricted-mode or restriced-mode ... + # version could be X.Y or X.Y.Z + $version = $1; + $minor = $2; + if ($4) { + $subminor = $3; + $buildNumber = $4; + } else { + $buildNumber = $3; + } + last; + } + elsif (/^iPlanet-Directory\/(\d+)\.(\d+)\s+(\S+)/i) { + $version = $1; + $minor = $2; + $buildNumber = $3; + last; + } + } + my $code = close(F); + + if ($version == 0) { + die "\nCould not determine version of the directory server in $dir: \n"; + } + + # distinguish the 4.1 and the 4.11 thanks to the buildNumber + if (($version == 4) && ($minor == 1)){ + if (! ($buildNumber =~ /^B99\.16/)) { + # it's not a 4.1 Netscape Directory Server => it's a 4.11 + $minor = 11 ; + } + } + return ( $version, $minor, $subminor ); +} + +# get the old version from the $sroot/setup/slapd/slapd.inf file +# not currently used +sub getInfVersion { + my $inffile = "$sroot/setup/slapd/slapd.inf"; + open INF, $inffile || die "Error: could not read file $inffile: $!"; + my $inslapdsection = 0; + while () { + if (/^\[slapd\]/) { + $inslapdsection = 1; + } elsif ($inslapdsection && /^\[/) { + $inslapdsection = 0; + last; + } elsif ($inslapdsection && /^\s*Version\s*=\s*(\d+)\.(\d+)(?:\.(\d+))?/) { + close INF; + return ($1, $2, $3); + } + } + close INF; + return ('0', '0'); +} + +sub getChangelogVersion { + my $cldir = shift; + my $versionfile = $cldir . "/DBVERSION"; + my $version = "0.0"; + open DBVER, $versionfile or return '0.0'; + while () { + if (/(\d+\.\d+)$/) { + $version = $1; + } + } + close DBVER; + return $version; +} + +sub instantiate_new_package_scripts { + + my @newtemplates = ( + "$sroot/bin/slapd/admin/scripts/template-cl-dump.pl", + "$sroot/bin/slapd/admin/scripts/template-migrate5to7", + "$sroot/bin/slapd/admin/scripts/template-migrate6to7", + "$sroot/bin/slapd/admin/scripts/template-migrateInstance7", + "$sroot/bin/slapd/admin/scripts/template-migrateTo7", + "$sroot/bin/slapd/admin/scripts/template-repl-monitor-cgi.pl", + ); + + foreach $src ( @newtemplates ) { + $dest = "$sroot/bin/slapd/admin/bin/$1" if $src =~ /.*template-(.*)$/; + # repl mon cgi script goes in bin/admin/admin/bin + if ($src =~ /repl-monitor-cgi.pl/) { + $dest =~ s@/bin/slapd/admin/bin/@/bin/admin/admin/bin/@; + } + unless ( open ( template, $src )) { + print "Can't open $src: $!\n"; + next; + } + unless ( open ( target, ">$dest" )) { + print "Can't open $dest: $!\n"; + close template; + next; + } + while (