[Pkg-fedora-ds-maintainers] 389-ds-base: Changes to 'master'
Timo Aaltonen
tjaalton at moszumanska.debian.org
Tue Dec 12 15:33:08 UTC 2017
Makefile.am | 19
VERSION.sh | 2
debian/changelog | 9
debian/control | 26
debian/python3-dirsrvtests.install | 2
debian/python3-lib389.install | 2
debian/rules | 14
dirsrvtests/tests/data/ticket49441/binary.ldif | 858 ++
dirsrvtests/tests/suites/config/removed_config_49298_test.py | 81
dirsrvtests/tests/suites/cos/indirect_cos_test.py | 172
dirsrvtests/tests/suites/replication/changelog_trimming_test.py | 173
dirsrvtests/tests/suites/replication/replica_config_test.py | 397 +
dirsrvtests/tests/suites/schema/schema_reload_test.py | 153
dirsrvtests/tests/tickets/ticket49064_test.py | 261
dirsrvtests/tests/tickets/ticket49386_test.py | 150
dirsrvtests/tests/tickets/ticket49441_test.py | 74
ldap/admin/src/logconv.pl | 12
ldap/admin/src/scripts/50removeLegacyReplication.ldif | 2
ldap/admin/src/scripts/60removeLegacyReplication.ldif | 2
ldap/admin/src/scripts/DSUtil.pm.in | 18
ldap/admin/src/scripts/ns-activate.pl.in | 9
ldap/admin/src/scripts/repl-monitor.pl.in | 4
ldap/admin/src/scripts/status-dirsrv.in | 4
ldap/schema/01core389.ldif | 3
ldap/servers/plugins/cos/cos_cache.c | 34
ldap/servers/plugins/http/http_impl.c | 1
ldap/servers/plugins/memberof/memberof.c | 346 -
ldap/servers/plugins/memberof/memberof.h | 19
ldap/servers/plugins/memberof/memberof_config.c | 166
ldap/servers/plugins/replication/cl5_api.c | 39
ldap/servers/plugins/replication/repl5.h | 55
ldap/servers/plugins/replication/repl5_agmt.c | 173
ldap/servers/plugins/replication/repl5_replica.c | 310
ldap/servers/plugins/replication/repl5_replica_config.c | 164
ldap/servers/plugins/replication/repl5_ruv.c | 13
ldap/servers/plugins/replication/replutil.c | 26
ldap/servers/plugins/replication/urp.c | 10
ldap/servers/plugins/roles/roles_cache.c | 8
ldap/servers/plugins/syntaxes/string.c | 1
ldap/servers/slapd/attrsyntax.c | 8
ldap/servers/slapd/back-ldbm/dblayer.c | 66
ldap/servers/slapd/back-ldbm/dbversion.c | 2
ldap/servers/slapd/back-ldbm/idl_set.c | 5
ldap/servers/slapd/back-ldbm/import.c | 2
ldap/servers/slapd/back-ldbm/index.c | 24
ldap/servers/slapd/back-ldbm/ldbm_config.c | 2
ldap/servers/slapd/config.c | 15
ldap/servers/slapd/connection.c | 14
ldap/servers/slapd/conntable.c | 2
ldap/servers/slapd/dse.c | 42
ldap/servers/slapd/entry.c | 11
ldap/servers/slapd/libglobs.c | 173
ldap/servers/slapd/log.c | 68
ldap/servers/slapd/mapping_tree.c | 26
ldap/servers/slapd/modify.c | 1
ldap/servers/slapd/object.c | 7
ldap/servers/slapd/pblock.c | 166
ldap/servers/slapd/plugin.c | 3
ldap/servers/slapd/proto-slap.h | 1
ldap/servers/slapd/psearch.c | 6
ldap/servers/slapd/referral.c | 18
ldap/servers/slapd/security_wrappers.c | 6
ldap/servers/slapd/slapi-plugin.h | 83
ldap/servers/slapd/slapi_counter.c | 113
ldap/servers/slapd/slapi_pal.c | 11
ldap/servers/slapd/ssl.c | 24
ldap/servers/slapd/task.c | 8
ldap/servers/slapd/thread_data.c | 2
ldap/servers/slapd/valueset.c | 175
ldap/servers/slapd/vattr.c | 28
ldap/servers/snmp/main.c | 13
rpm/389-ds-base.spec.in | 98
src/lib389/.coveragerc | 2
src/lib389/.gitignore | 10
src/lib389/LICENSE | 675 ++
src/lib389/MANIFEST.in | 2
src/lib389/Makefile | 33
src/lib389/README.md | 26
src/lib389/VERSION | 1
src/lib389/bug_harness.py | 107
src/lib389/cli/dsconf | 124
src/lib389/cli/dscreate | 84
src/lib389/cli/dsctl | 101
src/lib389/cli/dsidm | 116
src/lib389/doc/Makefile | 230
src/lib389/doc/source/accesscontrol.rst | 6
src/lib389/doc/source/aci.rst | 66
src/lib389/doc/source/agreement.rst | 27
src/lib389/doc/source/backend.rst | 49
src/lib389/doc/source/changelog.rst | 22
src/lib389/doc/source/conf.py | 335 +
src/lib389/doc/source/config.rst | 47
src/lib389/doc/source/databases.rst | 7
src/lib389/doc/source/dirsrv_log.rst | 30
src/lib389/doc/source/domain.rst | 21
src/lib389/doc/source/dseldif.rst | 30
src/lib389/doc/source/group.rst | 43
src/lib389/doc/source/guidelines.rst | 599 +
src/lib389/doc/source/identitymanagement.rst | 10
src/lib389/doc/source/index.rst | 51
src/lib389/doc/source/indexes.rst | 42
src/lib389/doc/source/ldclt.rst | 42
src/lib389/doc/source/mappingtree.rst | 31
src/lib389/doc/source/monitor.rst | 19
src/lib389/doc/source/need_to_be_triaged.rst | 20
src/lib389/doc/source/organisationalunit.rst | 41
src/lib389/doc/source/passwd.rst | 33
src/lib389/doc/source/paths.rst | 42
src/lib389/doc/source/plugin.rst | 35
src/lib389/doc/source/replica.rst | 59
src/lib389/doc/source/replication.rst | 9
src/lib389/doc/source/repltools.rst | 43
src/lib389/doc/source/rootdse.rst | 25
src/lib389/doc/source/schema.rst | 62
src/lib389/doc/source/services.rst | 40
src/lib389/doc/source/task.rst | 59
src/lib389/doc/source/user.rst | 50
src/lib389/doc/source/utils.rst | 23
src/lib389/dsadmin.pylintrc | 236
src/lib389/lib389/__init__.py | 3189 ++++++++++
src/lib389/lib389/_constants.py | 309
src/lib389/lib389/_controls.py | 137
src/lib389/lib389/_entry.py | 631 +
src/lib389/lib389/_ldifconn.py | 53
src/lib389/lib389/_mapped_object.py | 840 ++
src/lib389/lib389/_replication.py | 202
src/lib389/lib389/aci.py | 240
src/lib389/lib389/agreement.py | 756 ++
src/lib389/lib389/backend.py | 576 +
src/lib389/lib389/changelog.py | 153
src/lib389/lib389/cli_base/__init__.py | 170
src/lib389/lib389/cli_base/dsrc.py | 118
src/lib389/lib389/cli_conf/__init__.py | 8
src/lib389/lib389/cli_conf/backend.py | 76
src/lib389/lib389/cli_conf/health.py | 61
src/lib389/lib389/cli_conf/plugin.py | 124
src/lib389/lib389/cli_conf/plugins/memberof.py | 276
src/lib389/lib389/cli_conf/plugins/referint.py | 197
src/lib389/lib389/cli_conf/plugins/rootdn_ac.py | 229
src/lib389/lib389/cli_conf/plugins/usn.py | 56
src/lib389/lib389/cli_conf/plugins/whoami.py | 16
src/lib389/lib389/cli_conf/schema.py | 53
src/lib389/lib389/cli_ctl/__init__.py | 8
src/lib389/lib389/cli_ctl/dbtasks.py | 56
src/lib389/lib389/cli_ctl/instance.py | 133
src/lib389/lib389/cli_idm/__init__.py | 114
src/lib389/lib389/cli_idm/account.py | 64
src/lib389/lib389/cli_idm/group.py | 76
src/lib389/lib389/cli_idm/initialise.py | 21
src/lib389/lib389/cli_idm/organisationalunit.py | 76
src/lib389/lib389/cli_idm/posixgroup.py | 77
src/lib389/lib389/cli_idm/user.py | 76
src/lib389/lib389/clitools/__init__.py | 79
src/lib389/lib389/clitools/ds_aci_lint | 41
src/lib389/lib389/clitools/ds_backend_getattr | 42
src/lib389/lib389/clitools/ds_backend_list | 39
src/lib389/lib389/clitools/ds_backend_setattr | 43
src/lib389/lib389/clitools/ds_krb_create_keytab | 40
src/lib389/lib389/clitools/ds_krb_create_principal | 38
src/lib389/lib389/clitools/ds_krb_create_realm | 34
src/lib389/lib389/clitools/ds_krb_destroy_realm | 34
src/lib389/lib389/clitools/ds_monitor_backend | 39
src/lib389/lib389/clitools/ds_monitor_server | 35
src/lib389/lib389/clitools/ds_schema_attributetype_list | 33
src/lib389/lib389/clitools/ds_schema_attributetype_query | 46
src/lib389/lib389/clitools/ds_setup | 78
src/lib389/lib389/config.py | 353 +
src/lib389/lib389/configurations/__init__.py | 25
src/lib389/lib389/configurations/config.py | 44
src/lib389/lib389/configurations/config_001003006.py | 139
src/lib389/lib389/configurations/sample.py | 21
src/lib389/lib389/dbgen.py | 191
src/lib389/lib389/dirsrv_log.py | 271
src/lib389/lib389/ds_instance.py | 97
src/lib389/lib389/dseldif.py | 101
src/lib389/lib389/exceptions.py | 43
src/lib389/lib389/extended_operations.py | 67
src/lib389/lib389/idm/account.py | 50
src/lib389/lib389/idm/domain.py | 21
src/lib389/lib389/idm/group.py | 89
src/lib389/lib389/idm/organisationalunit.py | 38
src/lib389/lib389/idm/posixgroup.py | 52
src/lib389/lib389/idm/services.py | 36
src/lib389/lib389/idm/user.py | 85
src/lib389/lib389/index.py | 124
src/lib389/lib389/instance/__init__.py | 7
src/lib389/lib389/instance/options.py | 301
src/lib389/lib389/instance/remove.py | 54
src/lib389/lib389/instance/setup.py | 454 +
src/lib389/lib389/ldclt.py | 130
src/lib389/lib389/lint.py | 131
src/lib389/lib389/mappingTree.py | 420 +
src/lib389/lib389/mit_krb5.py | 226
src/lib389/lib389/monitor.py | 94
src/lib389/lib389/ns-slapd.valgrind | 29
src/lib389/lib389/nss_ssl.py | 371 +
src/lib389/lib389/passwd.py | 51
src/lib389/lib389/paths.py | 186
src/lib389/lib389/plugins.py | 813 ++
src/lib389/lib389/properties.py | 498 +
src/lib389/lib389/referral.py | 35
src/lib389/lib389/replica.py | 1452 ++++
src/lib389/lib389/repltools.py | 298
src/lib389/lib389/rootdse.py | 47
src/lib389/lib389/sasl.py | 36
src/lib389/lib389/schema.py | 236
src/lib389/lib389/suffix.py | 98
src/lib389/lib389/tasks.py | 1195 +++
src/lib389/lib389/tests/__init__.py | 7
src/lib389/lib389/tests/aci_test.py | 122
src/lib389/lib389/tests/agreement_test.py | 362 +
src/lib389/lib389/tests/backend_test.py | 282
src/lib389/lib389/tests/cli/__init__.py | 104
src/lib389/lib389/tests/cli/adm_instance_test.py | 31
src/lib389/lib389/tests/cli/conf_backend_test.py | 52
src/lib389/lib389/tests/cli/conf_plugin_test.py | 53
src/lib389/lib389/tests/cli/conf_plugins/memberof_test.py | 490 +
src/lib389/lib389/tests/cli/conf_plugins/referint_test.py | 119
src/lib389/lib389/tests/cli/conf_plugins/rootdn_ac_test.py | 281
src/lib389/lib389/tests/cli/conf_plugins/usn_test.py | 53
src/lib389/lib389/tests/cli/ctl_dbtasks_test.py | 71
src/lib389/lib389/tests/cli/dsrc_test.py | 180
src/lib389/lib389/tests/config.py | 40
src/lib389/lib389/tests/config_compare_test.py | 56
src/lib389/lib389/tests/config_test.py | 87
src/lib389/lib389/tests/configurations/config_001003006_test.py | 98
src/lib389/lib389/tests/conftest.py | 121
src/lib389/lib389/tests/dereference_test.py | 99
src/lib389/lib389/tests/dirsrv_log_test.py | 123
src/lib389/lib389/tests/dirsrv_test.py | 215
src/lib389/lib389/tests/dsadmin_basic_test.py | 126
src/lib389/lib389/tests/dsadmin_create_remove_test.py | 97
src/lib389/lib389/tests/dsadmin_test.py | 263
src/lib389/lib389/tests/dseldif_test.py | 130
src/lib389/lib389/tests/effective_rights_test.py | 93
src/lib389/lib389/tests/entry_test.py | 98
src/lib389/lib389/tests/healthcheck_test.py | 61
src/lib389/lib389/tests/idm/account_test.py | 70
src/lib389/lib389/tests/idm/services_test.py | 55
src/lib389/lib389/tests/idm/user_and_group_test.py | 93
src/lib389/lib389/tests/idm/user_compare_i2_test.py | 67
src/lib389/lib389/tests/idm/user_compare_m2Repl_test.py | 83
src/lib389/lib389/tests/idm/user_compare_st_test.py | 92
src/lib389/lib389/tests/index_test.py | 69
src/lib389/lib389/tests/instance/__init__.py | 8
src/lib389/lib389/tests/instance/setup_test.py | 121
src/lib389/lib389/tests/krb5_create_test.py | 147
src/lib389/lib389/tests/ldclt_test.py | 64
src/lib389/lib389/tests/mapped_object_test.py | 23
src/lib389/lib389/tests/mappingTreeLegacy_test.py | 271
src/lib389/lib389/tests/mappingtree_test.py | 64
src/lib389/lib389/tests/nss_ssl_test.py | 74
src/lib389/lib389/tests/paths_test.py | 36
src/lib389/lib389/tests/plugin_test.py | 137
src/lib389/lib389/tests/plugins/memberof_test.py | 354 +
src/lib389/lib389/tests/plugins/referint_test.py | 83
src/lib389/lib389/tests/plugins/usn_test.py | 240
src/lib389/lib389/tests/plugins/utils.py | 124
src/lib389/lib389/tests/referral_test.py | 36
src/lib389/lib389/tests/replicaLegacy_test.py | 457 +
src/lib389/lib389/tests/replica_test.py | 375 +
src/lib389/lib389/tests/schema_test.py | 72
src/lib389/lib389/tests/suffix_test.py | 105
src/lib389/lib389/tests/test_module_proxy.py | 79
src/lib389/lib389/tests/tls_external_test.py | 82
src/lib389/lib389/tests/utils_test.py | 139
src/lib389/lib389/tools.py | 1008 +++
src/lib389/lib389/topologies.py | 382 +
src/lib389/lib389/utils.py | 873 ++
src/lib389/python-lib389.spec | 239
src/lib389/requirements.txt | 9
src/lib389/setup.cfg | 3
src/lib389/setup.py | 66
src/lib389/tox.ini | 6
src/libsds/external/csiphash/csiphash.c | 52
src/libsds/test/test_sds_csiphash.c | 43
src/nunc-stans/include/nunc-stans.h | 12
src/nunc-stans/ns/ns_event_fw.h | 3
src/nunc-stans/ns/ns_thrpool.c | 192
src/nunc-stans/test/test_nuncstans.c | 156
src/nunc-stans/test/test_nuncstans_stress_core.c | 42
wrappers/systemd.template.asan.service.in | 2
wrappers/systemd.template.service.in | 2
283 files changed, 36988 insertions(+), 1237 deletions(-)
New commits:
commit b602e827e988386bc42038b6758535010ca6ff60
Author: Timo Aaltonen <tjaalton at debian.org>
Date: Tue Dec 12 17:32:34 2017 +0200
releasing package 389-ds-base version 1.3.7.8-1
diff --git a/debian/changelog b/debian/changelog
index 533003e..8a9930c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,11 +1,11 @@
-389-ds-base (1.3.7.8-1) UNRELEASED; urgency=medium
+389-ds-base (1.3.7.8-1) unstable; urgency=medium
* New upstream release.
* Package python3-lib389 and python3-dirsrvtests.
* control: Add python3 depends to 389-ds-base, since it ships a few
python scripts.
- -- Timo Aaltonen <tjaalton at debian.org> Tue, 12 Dec 2017 13:42:27 +0200
+ -- Timo Aaltonen <tjaalton at debian.org> Tue, 12 Dec 2017 17:32:27 +0200
389-ds-base (1.3.7.5-1) unstable; urgency=medium
commit 4b19af0824aed96f35ab07b55a046cc98fcbc5f2
Author: Timo Aaltonen <tjaalton at debian.org>
Date: Tue Dec 12 17:32:01 2017 +0200
control: Add python3 depends to 389-ds-base, since it ships a few python scripts.
diff --git a/debian/changelog b/debian/changelog
index 76f3d52..533003e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,8 @@
* New upstream release.
* Package python3-lib389 and python3-dirsrvtests.
+ * control: Add python3 depends to 389-ds-base, since it ships a few
+ python scripts.
-- Timo Aaltonen <tjaalton at debian.org> Tue, 12 Dec 2017 13:42:27 +0200
diff --git a/debian/control b/debian/control
index dc5eb4c..3af8d77 100644
--- a/debian/control
+++ b/debian/control
@@ -111,6 +111,7 @@ Depends:
systemd,
${misc:Depends},
${shlibs:Depends},
+ ${python3:Depends},
Description: 389 Directory Server suite - server
Based on the Lightweight Directory Access Protocol (LDAP), the 389
Directory Server is designed to manage large directories of users and
commit 028f82607f7a02602aa691aeddd063acdeee106b
Author: Timo Aaltonen <tjaalton at debian.org>
Date: Tue Dec 12 17:29:13 2017 +0200
Package python3-lib389 and python3-dirsrvtests.
diff --git a/debian/changelog b/debian/changelog
index 39fc930..76f3d52 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
389-ds-base (1.3.7.8-1) UNRELEASED; urgency=medium
* New upstream release.
+ * Package python3-lib389 and python3-dirsrvtests.
-- Timo Aaltonen <tjaalton at debian.org> Tue, 12 Dec 2017 13:42:27 +0200
diff --git a/debian/control b/debian/control
index a40a65f..dc5eb4c 100644
--- a/debian/control
+++ b/debian/control
@@ -9,6 +9,7 @@ Build-Depends:
libcmocka-dev,
debhelper (>= 9),
dh-autoreconf,
+ dh-python,
dh-systemd,
doxygen,
libbz2-dev,
@@ -30,6 +31,8 @@ Build-Depends:
libsvrcore-dev (>= 1:4.1.2+dfsg1-3),
libsystemd-dev,
pkg-config,
+ python3-all-dev,
+ python3-setuptools,
zlib1g-dev,
Standards-Version: 4.1.0
Vcs-Git: git://anonscm.debian.org/pkg-fedora-ds/389-ds-base.git
@@ -124,3 +127,25 @@ Description: 389 Directory Server suite - server
* on-line, zero downtime update of schema, configuration, and
in-tree Access Control Information.
+Package: python3-lib389
+Architecture: all
+Depends: ${misc:Depends}, ${python3:Depends},
+ python3-dateutil,
+ python3-ldap,
+ python3-pyasn1,
+ python3-pyasn1-modules,
+ python3-pytest,
+ python3-six,
+Conflicts: python-lib389 (<< 1.3.7.8)
+Replaces: python-lib389 (<< 1.3.7.8)
+Description: Python3 module for accessing and configuring the 389 Directory Server
+ This Python3 module contains tools and libraries for accessing, testing,
+ and configuring the 389 Directory Server.
+
+Package: python3-dirsrvtests
+Architecture: all
+Depends: ${misc:Depends}, ${python3:Depends},
+ python3-lib389,
+Description: Python3 module for 389 Directory Server Continuous Integration testing
+ This Python3 module contains Continuous Integration tests that can be
+ run against an instance of 389 Directory Server.
diff --git a/debian/python3-dirsrvtests.install b/debian/python3-dirsrvtests.install
new file mode 100644
index 0000000..4d5b1a8
--- /dev/null
+++ b/debian/python3-dirsrvtests.install
@@ -0,0 +1,2 @@
+usr/lib/python3/dist-packages/dirsrvtests-*
+usr/lib/python3/dist-packages/dirsrvtests/
diff --git a/debian/python3-lib389.install b/debian/python3-lib389.install
new file mode 100644
index 0000000..df60f94
--- /dev/null
+++ b/debian/python3-lib389.install
@@ -0,0 +1,2 @@
+usr/lib/python3/dist-packages/lib389-*
+usr/lib/python3/dist-packages/lib389/
diff --git a/debian/rules b/debian/rules
index 3bacd9a..5df57f4 100755
--- a/debian/rules
+++ b/debian/rules
@@ -47,7 +47,7 @@ REALFILE_ONLINE = \
share/man/man8/ldif2db.pl.8
%:
- dh $@ --parallel --with autoreconf,systemd --builddir build/
+ dh $@ --parallel --with autoreconf,systemd,python3 --builddir build/
override_dh_auto_configure:
dh_auto_configure -- \
@@ -60,7 +60,19 @@ override_dh_auto_configure:
--enable-autobind \
--enable-cmocka
+ (cd build && make setup.py)
+
+override_dh_auto_build:
+ (cd build && python3 setup.py build)
+ python3 src/lib389/setup.py build
+ dh_auto_build
+
override_dh_auto_install:
+ (cd build && python3 setup.py install --install-layout=deb --root ../debian/tmp)
+ # stupid build
+ cp -r build/lib/dirsrvtests/ debian/tmp/usr/lib/python3/dist-packages
+ (cd src/lib389 && python3 setup.py install --install-layout=deb --root ../../debian/tmp)
+
dh_auto_install --max-parallel=1
override_dh_install:
commit 3e189a6c8217cd7cf71c79722fb2351bac4be42b
Author: Timo Aaltonen <tjaalton at debian.org>
Date: Tue Dec 12 13:48:20 2017 +0200
update changelog
diff --git a/debian/changelog b/debian/changelog
index bad2e80..39fc930 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+389-ds-base (1.3.7.8-1) UNRELEASED; urgency=medium
+
+ * New upstream release.
+
+ -- Timo Aaltonen <tjaalton at debian.org> Tue, 12 Dec 2017 13:42:27 +0200
+
389-ds-base (1.3.7.5-1) unstable; urgency=medium
* New upstream release.
commit 4234a5f89bda4e3442c232c9c70212b714e97ccf
Author: Mark Reynolds <mreynolds at redhat.com>
Date: Mon Nov 20 11:16:57 2017 -0500
Bump version to 1.3.7.8
diff --git a/VERSION.sh b/VERSION.sh
index e41c046..b54771a 100644
--- a/VERSION.sh
+++ b/VERSION.sh
@@ -10,7 +10,7 @@ vendor="389 Project"
# PACKAGE_VERSION is constructed from these
VERSION_MAJOR=1
VERSION_MINOR=3
-VERSION_MAINT=7.7
+VERSION_MAINT=7.8
# NOTE: VERSION_PREREL is automatically set for builds made out of a git tree
VERSION_PREREL=
VERSION_DATE=$(date -u +%Y%m%d)
commit 928e5a4809717f0393c338e22d2aa58ed6d222f4
Author: William Brown <firstyear at redhat.com>
Date: Fri Nov 17 11:43:36 2017 +1000
Ticket 49298 - fix complier warn
Bug Description: Extra argument to error log in dse.c
Fix Description: Remove extra argument.
https://pagure.io/389-ds-base/issue/49298
Author: wibrown
Review by: oneline rule.
diff --git a/ldap/servers/slapd/dse.c b/ldap/servers/slapd/dse.c
index 653009f..662e91a 100644
--- a/ldap/servers/slapd/dse.c
+++ b/ldap/servers/slapd/dse.c
@@ -613,7 +613,7 @@ dse_check_file(char *filename, char *backupname)
return 1;
} else {
slapi_log_err(SLAPI_LOG_INFO, "dse_check_file",
- "The config %s has zero length. Attempting restore ... \n", filename, rc);
+ "The config %s has zero length. Attempting restore ... \n", filename);
rc = PR_Delete(filename);
}
} else {
commit 3cd1ab4159d14fa52dbe84c95561e328653610cd
Author: William Brown <firstyear at redhat.com>
Date: Wed Nov 15 13:44:02 2017 +1000
Ticket 49298 - Correct error codes with config restore.
Bug Description: The piece of code uses 0 as an error - not 1,
and in some cases did not even check the codes or use the
correct logic.
Fix Description: Cleanup dse_check_file to better check the
content of files and communicate issues to the admin. Correct
slapd_bootstrap_config to correctly handle the cases of removal
and restore.
https://pagure.io/389-ds-base/issue/49298
Author: wibrown
Review by: mreynoolds & spichugi
Signed-off-by: Mark Reynolds <mreynolds at redhat.com>
(cherry picked from commit 75e55e26579955adf058e8adcba9a28779583b7b)
diff --git a/dirsrvtests/tests/suites/config/removed_config_49298_test.py b/dirsrvtests/tests/suites/config/removed_config_49298_test.py
new file mode 100644
index 0000000..e652369
--- /dev/null
+++ b/dirsrvtests/tests/suites/config/removed_config_49298_test.py
@@ -0,0 +1,81 @@
+# --- 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 os
+import logging
+import subprocess
+
+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__)
+
+def test_restore_config(topo):
+ """
+ Check that if a dse.ldif and backup are removed, that the server still starts.
+
+ :id: e1c38fa7-30bc-46f2-a934-f8336f387581
+ :setup: Standalone instance
+ :steps:
+ 1. Stop the instance
+ 2. Delete 'dse.ldif'
+ 3. Start the instance
+ :expectedresults:
+ 1. Steps 1 and 2 succeed.
+ 2. Server will succeed to start with restored cfg.
+ """
+ topo.standalone.stop()
+
+ dse_path = topo.standalone.get_config_dir()
+
+ log.info(dse_path)
+
+ for i in ('dse.ldif', 'dse.ldif.startOK'):
+ p = os.path.join(dse_path, i)
+ os.remove(p)
+
+ # This will pass.
+ topo.standalone.start()
+
+def test_removed_config(topo):
+ """
+ Check that if a dse.ldif and backup are removed, that the server
+ exits better than "segfault".
+
+ :id: b45272d1-c197-473e-872f-07257fcb2ec0
+ :setup: Standalone instance
+ :steps:
+ 1. Stop the instance
+ 2. Delete 'dse.ldif', 'dse.ldif.bak', 'dse.ldif.startOK'
+ 3. Start the instance
+ :expectedresults:
+ 1. Steps 1 and 2 succeed.
+ 2. Server will fail to start, but will not crash.
+ """
+ topo.standalone.stop()
+
+ dse_path = topo.standalone.get_config_dir()
+
+ log.info(dse_path)
+
+ for i in ('dse.ldif', 'dse.ldif.bak', 'dse.ldif.startOK'):
+ p = os.path.join(dse_path, i)
+ os.remove(p)
+
+ # We actually can't check the log output, because it can't read dse.ldif,
+ # don't know where to write it yet! All we want is the server fail to
+ # start here, rather than infinite run + segfault.
+ with pytest.raises(subprocess.CalledProcessError):
+ topo.standalone.start()
+
+
diff --git a/ldap/servers/slapd/config.c b/ldap/servers/slapd/config.c
index afe07df..c8d57e7 100644
--- a/ldap/servers/slapd/config.c
+++ b/ldap/servers/slapd/config.c
@@ -121,14 +121,13 @@ slapd_bootstrap_config(const char *configdir)
"Passed null config directory\n");
return rc; /* Fail */
}
- PR_snprintf(configfile, sizeof(configfile), "%s/%s", configdir,
- CONFIG_FILENAME);
- PR_snprintf(tmpfile, sizeof(tmpfile), "%s/%s.tmp", configdir,
- CONFIG_FILENAME);
- if ((rc = dse_check_file(configfile, tmpfile)) == 0) {
- PR_snprintf(tmpfile, sizeof(tmpfile), "%s/%s.bak", configdir,
- CONFIG_FILENAME);
- rc = dse_check_file(configfile, tmpfile);
+ PR_snprintf(configfile, sizeof(configfile), "%s/%s", configdir, CONFIG_FILENAME);
+ PR_snprintf(tmpfile, sizeof(tmpfile), "%s/%s.bak", configdir, CONFIG_FILENAME);
+ rc = dse_check_file(configfile, tmpfile);
+ if (rc == 0) {
+ /* EVERYTHING IS GOING WRONG, ARRGHHHHHH */
+ slapi_log_err(SLAPI_LOG_ERR, "slapd_bootstrap_config", "No valid configurations can be accessed! You must restore %s from backup!\n", configfile);
+ return 0;
}
if ((rc = PR_GetFileInfo64(configfile, &prfinfo)) != PR_SUCCESS) {
diff --git a/ldap/servers/slapd/dse.c b/ldap/servers/slapd/dse.c
index 420248c..653009f 100644
--- a/ldap/servers/slapd/dse.c
+++ b/ldap/servers/slapd/dse.c
@@ -609,29 +609,49 @@ dse_check_file(char *filename, char *backupname)
if (PR_GetFileInfo64(filename, &prfinfo) == PR_SUCCESS) {
if (prfinfo.size > 0) {
- return (1);
+ /* File exists and has content. */
+ return 1;
} else {
+ slapi_log_err(SLAPI_LOG_INFO, "dse_check_file",
+ "The config %s has zero length. Attempting restore ... \n", filename, rc);
rc = PR_Delete(filename);
}
+ } else {
+ slapi_log_err(SLAPI_LOG_INFO, "dse_check_file",
+ "The config %s can not be accessed. Attempting restore ... (reason: %d)\n", filename, rc);
}
if (backupname) {
+
+ if (PR_GetFileInfo64(backupname, &prfinfo) != PR_SUCCESS) {
+ slapi_log_err(SLAPI_LOG_INFO, "dse_check_file",
+ "The backup %s can not be accessed. Check it exists and permissions.\n", backupname);
+ return 0;
+ }
+
+ if (prfinfo.size <= 0) {
+ slapi_log_err(SLAPI_LOG_ERR, "dse_check_file",
+ "The backup file %s has zero length, refusing to restore it.\n", backupname);
+ return 0;
+ }
+
rc = PR_Rename(backupname, filename);
- } else {
- return (0);
- }
+ if (rc != PR_SUCCESS) {
+ slapi_log_err(SLAPI_LOG_INFO, "dse_check_file",
+ "The configuration file %s was NOT able to be restored from %s, error %d\n", filename, backupname, rc);
+ return 0;
+ }
- if (PR_GetFileInfo64(filename, &prfinfo) == PR_SUCCESS && prfinfo.size > 0) {
slapi_log_err(SLAPI_LOG_INFO, "dse_check_file",
- "The configuration file %s was restored from backup %s\n", filename, backupname);
- return (1);
+ "The configuration file %s was restored from backup %s\n", filename, backupname);
+ return 1;
+
} else {
- slapi_log_err(SLAPI_LOG_ERR, "dse_check_file",
- "The configuration file %s was not restored from backup %s, error %d\n",
- filename, backupname, rc);
- return (0);
+ slapi_log_err(SLAPI_LOG_INFO, "dse_check_file", "No backup filename provided.\n");
+ return 0;
}
}
+
static int
dse_read_one_file(struct dse *pdse, const char *filename, Slapi_PBlock *pb, int primary_file)
{
commit d67e8aea264bc000c41843b88a03654aa675b04f
Author: William Brown <firstyear at redhat.com>
Date: Mon Nov 6 08:56:01 2017 +1000
Ticket 49435 - Fix NS race condition on loaded test systems
Bug Description: During a test run, on a heavily loaded systems
some events would time out before they could occur correctly.
Fix Description: Change the structure of events to mitigate
a deref performance hit, and add a ns_job_wait conditional
that allows blocking on a job to complete so that tests do not
require time based checks.
https://pagure.io/389-ds-base/issue/49435
Author: wibrown
Review by: mreynolds (Thanks!)
(cherry picked from commit 11974a08f7bb083a48590cdc26652934fa74c0cb)
diff --git a/src/nunc-stans/include/nunc-stans.h b/src/nunc-stans/include/nunc-stans.h
index 386a8d2..192e38e 100644
--- a/src/nunc-stans/include/nunc-stans.h
+++ b/src/nunc-stans/include/nunc-stans.h
@@ -77,6 +77,10 @@ typedef enum _ns_result_t {
* This occurs when a lower level OS issue occurs, generally thread related.
*/
NS_THREAD_FAILURE = 5,
+ /**
+ * The job is being deleted
+ */
+ NS_DELETING = 6,
} ns_result_t;
/**
@@ -837,6 +841,14 @@ ns_job_type_t ns_job_get_output_type(struct ns_job_t *job);
ns_result_t ns_job_set_done_cb(struct ns_job_t *job, ns_job_func_t func);
/**
+ * Block until a job is completed. This returns the next state of the job as as a return.
+ *
+ * \param job The job to set the callback for.
+ * \retval ns_job_state_t The next state the job will move to. IE, WAITING, DELETED, ARMED.
+ */
+ns_result_t ns_job_wait(struct ns_job_t *job);
+
+/**
* Creates a new thread pool
*
* Must be called with a struct ns_thrpool_config that has been
diff --git a/src/nunc-stans/ns/ns_event_fw.h b/src/nunc-stans/ns/ns_event_fw.h
index 436b282..88997b2 100644
--- a/src/nunc-stans/ns/ns_event_fw.h
+++ b/src/nunc-stans/ns/ns_event_fw.h
@@ -80,7 +80,8 @@ typedef enum _ns_job_state {
interface between the app/thread pool/event framework */
typedef struct ns_job_t
{
- pthread_mutex_t *monitor;
+ pthread_mutex_t monitor;
+ pthread_cond_t notify;
struct ns_thrpool_t *tp;
ns_job_func_t func;
struct ns_job_data_t *data;
diff --git a/src/nunc-stans/ns/ns_thrpool.c b/src/nunc-stans/ns/ns_thrpool.c
index 2ad0bd7..1d8bb03 100644
--- a/src/nunc-stans/ns/ns_thrpool.c
+++ b/src/nunc-stans/ns/ns_thrpool.c
@@ -214,7 +214,7 @@ job_queue_cleanup(void *arg)
static void
internal_ns_job_done(ns_job_t *job)
{
- pthread_mutex_lock(job->monitor);
+ pthread_mutex_lock(&(job->monitor));
#ifdef DEBUG
ns_log(LOG_DEBUG, "internal_ns_job_done %x state %d moving to NS_JOB_DELETED\n", job, job->state);
#endif
@@ -239,9 +239,9 @@ internal_ns_job_done(ns_job_t *job)
job->done_cb(job);
}
- pthread_mutex_unlock(job->monitor);
- pthread_mutex_destroy(job->monitor);
- ns_free(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
+ pthread_mutex_destroy(&(job->monitor));
+ pthread_cond_destroy(&(job->notify));
ns_free(job);
}
@@ -250,7 +250,7 @@ internal_ns_job_done(ns_job_t *job)
static void
internal_ns_job_rearm(ns_job_t *job)
{
- pthread_mutex_lock(job->monitor);
+ pthread_mutex_lock(&(job->monitor));
PR_ASSERT(job->state == NS_JOB_NEEDS_ARM);
/* Don't think I need to check persistence here, it could be the first arm ... */
#ifdef DEBUG
@@ -267,7 +267,7 @@ internal_ns_job_rearm(ns_job_t *job)
/* Prevents an un-necessary queue / dequeue to the event_q */
work_q_notify(job);
}
- pthread_mutex_unlock(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
}
static void
@@ -281,7 +281,7 @@ work_job_execute(ns_job_t *job)
* DELETED! Crashes abound, you have been warned ...
*/
PR_ASSERT(job);
- pthread_mutex_lock(job->monitor);
+ pthread_mutex_lock(&(job->monitor));
#ifdef DEBUG
ns_log(LOG_DEBUG, "work_job_execute %x state %d moving to NS_JOB_RUNNING\n", job, job->state);
#endif
@@ -303,7 +303,12 @@ work_job_execute(ns_job_t *job)
#ifdef DEBUG
ns_log(LOG_DEBUG, "work_job_execute %x state %d job func complete, sending to job_done...\n", job, job->state);
#endif
- pthread_mutex_unlock(job->monitor);
+ /*
+ * Let waiters know we are done, they'll pick up once
+ * we unlock.
+ */
+ pthread_cond_signal(&(job->notify));
+ pthread_mutex_unlock(&(job->monitor));
internal_ns_job_done(job);
/* MUST NOT ACCESS JOB AGAIN.*/
} else if (job->state == NS_JOB_NEEDS_ARM) {
@@ -311,7 +316,8 @@ work_job_execute(ns_job_t *job)
ns_log(LOG_DEBUG, "work_job_execute %x state %d job func complete, sending to rearm...\n", job, job->state);
#endif
/* Rearm the job! */
- pthread_mutex_unlock(job->monitor);
+ /* We *don't* notify here because we ARE NOT done! */
+ pthread_mutex_unlock(&(job->monitor));
internal_ns_job_rearm(job);
} else {
#ifdef DEBUG
@@ -321,7 +327,12 @@ work_job_execute(ns_job_t *job)
PR_ASSERT(!NS_JOB_IS_PERSIST(job->job_type));
/* We are now idle, set waiting. */
job->state = NS_JOB_WAITING;
- pthread_mutex_unlock(job->monitor);
+ /*
+ * Let waiters know we are done, they'll pick up once
+ * we unlock.
+ */
+ pthread_cond_signal(&(job->notify));
+ pthread_mutex_unlock(&(job->monitor));
}
/* MUST NOT ACCESS JOB AGAIN */
}
@@ -338,7 +349,7 @@ static void
work_q_notify(ns_job_t *job)
{
PR_ASSERT(job);
- pthread_mutex_lock(job->monitor);
+ pthread_mutex_lock(&(job->monitor));
#ifdef DEBUG
ns_log(LOG_DEBUG, "work_q_notify %x state %d\n", job, job->state);
#endif
@@ -346,12 +357,12 @@ work_q_notify(ns_job_t *job)
if (job->state != NS_JOB_ARMED) {
/* Maybe we should return some error here? */
ns_log(LOG_ERR, "work_q_notify %x state %d is not ARMED, cannot queue!\n", job, job->state);
- pthread_mutex_unlock(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
return;
}
/* MUST NOT ACCESS job after enqueue. So we stash tp.*/
ns_thrpool_t *ltp = job->tp;
- pthread_mutex_unlock(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
sds_lqueue_enqueue(ltp->work_q, (void *)job);
pthread_mutex_lock(&(ltp->work_q_lock));
pthread_cond_signal(&(ltp->work_q_cv));
@@ -411,13 +422,13 @@ static void
update_event(ns_job_t *job)
{
PR_ASSERT(job);
- pthread_mutex_lock(job->monitor);
+ pthread_mutex_lock(&(job->monitor));
#ifdef DEBUG
ns_log(LOG_DEBUG, "update_event %x state %d\n", job, job->state);
#endif
PR_ASSERT(job->state == NS_JOB_NEEDS_DELETE || job->state == NS_JOB_ARMED);
if (job->state == NS_JOB_NEEDS_DELETE) {
- pthread_mutex_unlock(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
internal_ns_job_done(job);
return;
} else if (NS_JOB_IS_IO(job->job_type) || job->ns_event_fw_fd) {
@@ -426,7 +437,7 @@ update_event(ns_job_t *job)
} else {
job->tp->ns_event_fw->ns_event_fw_mod_io(job->tp->ns_event_fw_ctx, job);
}
- pthread_mutex_unlock(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
/* We need these returns to prevent a race on the next else if condition when we release job->monitor */
return;
} else if (NS_JOB_IS_TIMER(job->job_type) || job->ns_event_fw_time) {
@@ -435,7 +446,7 @@ update_event(ns_job_t *job)
} else {
job->tp->ns_event_fw->ns_event_fw_mod_timer(job->tp->ns_event_fw_ctx, job);
}
- pthread_mutex_unlock(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
return;
} else if (NS_JOB_IS_SIGNAL(job->job_type) || job->ns_event_fw_sig) {
if (!job->ns_event_fw_sig) {
@@ -443,15 +454,15 @@ update_event(ns_job_t *job)
} else {
job->tp->ns_event_fw->ns_event_fw_mod_signal(job->tp->ns_event_fw_ctx, job);
}
- pthread_mutex_unlock(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
return;
} else {
/* It's a "run now" job. */
if (NS_JOB_IS_THREAD(job->job_type)) {
- pthread_mutex_unlock(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
work_q_notify(job);
} else {
- pthread_mutex_unlock(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
event_q_notify(job);
}
}
@@ -602,14 +613,14 @@ event_cb(ns_job_t *job)
*/
/* There is no guarantee this won't be called once we start to enter the shutdown, especially with timers .... */
- pthread_mutex_lock(job->monitor);
+ pthread_mutex_lock(&(job->monitor));
PR_ASSERT(job->state == NS_JOB_ARMED || job->state == NS_JOB_NEEDS_DELETE);
if (job->state == NS_JOB_ARMED && NS_JOB_IS_THREAD(job->job_type)) {
#ifdef DEBUG
ns_log(LOG_DEBUG, "event_cb %x state %d threaded, send to work_q\n", job, job->state);
#endif
- pthread_mutex_unlock(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
work_q_notify(job);
} else if (job->state == NS_JOB_NEEDS_DELETE) {
#ifdef DEBUG
@@ -620,14 +631,14 @@ event_cb(ns_job_t *job)
* It's here because it's been QUEUED for deletion and *may* be coming
* from the thrpool destroy thread!
*/
- pthread_mutex_unlock(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
} else {
#ifdef DEBUG
ns_log(LOG_DEBUG, "event_cb %x state %d non-threaded, execute right meow\n", job, job->state);
#endif
/* Not threaded, execute now! */
- pthread_mutex_unlock(job->monitor);
+ pthread_mutex_unlock(&(job->monitor));
work_job_execute(job);
/* MUST NOT ACCESS JOB FROM THIS POINT */
}
More information about the Pkg-fedora-ds-maintainers
mailing list