import OL 389-ds-base-2.5.2-9.el9_5
This commit is contained in:
parent
22141ead6c
commit
949299fbd4
@ -1,2 +1,3 @@
|
||||
274dec37976c1efde9cbeb458d50bbcd6b244974 SOURCES/389-ds-base-2.5.2.tar.bz2
|
||||
1c8f2d0dfbf39fa8cd86363bf3314351ab21f8d4 SOURCES/jemalloc-5.3.0.tar.bz2
|
||||
c9dfe857929ddade41096e6d387f593f79d05ea0 SOURCES/vendor-2.5.2-1.tar.gz
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
SOURCES/389-ds-base-2.5.2.tar.bz2
|
||||
SOURCES/jemalloc-5.3.0.tar.bz2
|
||||
SOURCES/vendor-2.5.2-1.tar.gz
|
||||
|
||||
@ -0,0 +1,477 @@
|
||||
From ea415990f55326ecc7595fbbcf3a63c43c1cb8fd Mon Sep 17 00:00:00 2001
|
||||
From: Simon Pichugin <spichugi@redhat.com>
|
||||
Date: Wed, 19 Feb 2025 18:56:34 -0800
|
||||
Subject: [PATCH] Issue 6553 - Update concread to 0.5.4 and refactor statistics
|
||||
tracking (#6607)
|
||||
|
||||
Description: Implement new cache statistics tracking with atomic counters
|
||||
and dedicated stats structs.
|
||||
Update concread dependency to 0.5.4 for improved cache performance.
|
||||
Add tests for cache statistics functionality.
|
||||
|
||||
Fixes: https://github.com/389ds/389-ds-base/issues/6553
|
||||
|
||||
Reviewed by: @firstyear
|
||||
---
|
||||
ldap/servers/slapd/dn.c | 4 +-
|
||||
src/librslapd/Cargo.toml | 3 +-
|
||||
src/librslapd/src/cache.rs | 331 +++++++++++++++++++++++---
|
||||
4 files changed, 533 insertions(+), 276 deletions(-)
|
||||
|
||||
diff --git a/ldap/servers/slapd/dn.c b/ldap/servers/slapd/dn.c
|
||||
index 093019e28..5fbe67d07 100644
|
||||
--- a/ldap/servers/slapd/dn.c
|
||||
+++ b/ldap/servers/slapd/dn.c
|
||||
@@ -58,7 +58,7 @@ struct ndn_cache {
|
||||
|
||||
/*
|
||||
* This means we need 1 MB minimum per thread
|
||||
- *
|
||||
+ *
|
||||
*/
|
||||
#define NDN_CACHE_MINIMUM_CAPACITY 1048576
|
||||
/*
|
||||
@@ -3008,7 +3008,7 @@ ndn_cache_get_stats(uint64_t *hits, uint64_t *tries, uint64_t *size, uint64_t *m
|
||||
uint64_t freq_evicts;
|
||||
uint64_t recent_evicts;
|
||||
uint64_t p_weight;
|
||||
- cache_char_stats(cache,
|
||||
+ cache_char_stats(cache,
|
||||
&reader_hits,
|
||||
&reader_includes,
|
||||
&write_hits,
|
||||
diff --git a/src/librslapd/Cargo.toml b/src/librslapd/Cargo.toml
|
||||
index 6d8d63de4..6d9b621fc 100644
|
||||
--- a/src/librslapd/Cargo.toml
|
||||
+++ b/src/librslapd/Cargo.toml
|
||||
@@ -16,8 +16,7 @@ crate-type = ["staticlib", "lib"]
|
||||
[dependencies]
|
||||
slapd = { path = "../slapd" }
|
||||
libc = "0.2"
|
||||
-concread = "^0.2.20"
|
||||
+concread = "0.5.4"
|
||||
|
||||
[build-dependencies]
|
||||
cbindgen = "0.26"
|
||||
-
|
||||
diff --git a/src/librslapd/src/cache.rs b/src/librslapd/src/cache.rs
|
||||
index b025c830a..e3c692865 100644
|
||||
--- a/src/librslapd/src/cache.rs
|
||||
+++ b/src/librslapd/src/cache.rs
|
||||
@@ -1,38 +1,171 @@
|
||||
// This exposes C-FFI capable bindings for the concread concurrently readable cache.
|
||||
+use concread::arcache::stats::{ARCacheWriteStat, ReadCountStat};
|
||||
use concread::arcache::{ARCache, ARCacheBuilder, ARCacheReadTxn, ARCacheWriteTxn};
|
||||
-use std::convert::TryInto;
|
||||
+use concread::cowcell::CowCell;
|
||||
use std::ffi::{CStr, CString};
|
||||
use std::os::raw::c_char;
|
||||
|
||||
+#[derive(Clone, Debug, Default)]
|
||||
+struct CacheStats {
|
||||
+ reader_hits: u64, // Hits from read transactions (main + local)
|
||||
+ reader_includes: u64, // Number of includes from read transactions
|
||||
+ write_hits: u64, // Hits from write transactions
|
||||
+ write_inc_or_mod: u64, // Number of includes/modifications from write transactions
|
||||
+ freq_evicts: u64, // Number of evictions from frequent set
|
||||
+ recent_evicts: u64, // Number of evictions from recent set
|
||||
+ p_weight: u64, // Current cache weight between recent and frequent.
|
||||
+ shared_max: u64, // Maximum number of items in the shared cache.
|
||||
+ freq: u64, // Number of items in the frequent set at this point in time.
|
||||
+ recent: u64, // Number of items in the recent set at this point in time.
|
||||
+ all_seen_keys: u64, // Number of total keys seen through the cache's lifetime.
|
||||
+}
|
||||
+
|
||||
+impl CacheStats {
|
||||
+ fn new() -> Self {
|
||||
+ CacheStats::default()
|
||||
+ }
|
||||
+
|
||||
+ fn update_from_read_stat(&mut self, stat: ReadCountStat) {
|
||||
+ self.reader_hits += stat.main_hit + stat.local_hit;
|
||||
+ self.reader_includes += stat.include + stat.local_include;
|
||||
+ }
|
||||
+
|
||||
+ fn update_from_write_stat(&mut self, stat: &FFIWriteStat) {
|
||||
+ self.write_hits += stat.read_hits;
|
||||
+ self.write_inc_or_mod += stat.includes + stat.modifications;
|
||||
+ self.freq_evicts += stat.freq_evictions;
|
||||
+ self.recent_evicts += stat.recent_evictions;
|
||||
+ self.p_weight = stat.p_weight;
|
||||
+ self.shared_max = stat.shared_max;
|
||||
+ self.freq = stat.freq;
|
||||
+ self.recent = stat.recent;
|
||||
+ self.all_seen_keys = stat.all_seen_keys;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#[derive(Debug, Default)]
|
||||
+pub struct FFIWriteStat {
|
||||
+ pub read_ops: u64,
|
||||
+ pub read_hits: u64,
|
||||
+ pub p_weight: u64,
|
||||
+ pub shared_max: u64,
|
||||
+ pub freq: u64,
|
||||
+ pub recent: u64,
|
||||
+ pub all_seen_keys: u64,
|
||||
+ pub includes: u64,
|
||||
+ pub modifications: u64,
|
||||
+ pub freq_evictions: u64,
|
||||
+ pub recent_evictions: u64,
|
||||
+ pub ghost_freq_revives: u64,
|
||||
+ pub ghost_rec_revives: u64,
|
||||
+ pub haunted_includes: u64,
|
||||
+}
|
||||
+
|
||||
+impl<K> ARCacheWriteStat<K> for FFIWriteStat {
|
||||
+ fn cache_clear(&mut self) {
|
||||
+ self.read_ops = 0;
|
||||
+ self.read_hits = 0;
|
||||
+ }
|
||||
+
|
||||
+ fn cache_read(&mut self) {
|
||||
+ self.read_ops += 1;
|
||||
+ }
|
||||
+
|
||||
+ fn cache_hit(&mut self) {
|
||||
+ self.read_hits += 1;
|
||||
+ }
|
||||
+
|
||||
+ fn p_weight(&mut self, p: u64) {
|
||||
+ self.p_weight = p;
|
||||
+ }
|
||||
+
|
||||
+ fn shared_max(&mut self, i: u64) {
|
||||
+ self.shared_max = i;
|
||||
+ }
|
||||
+
|
||||
+ fn freq(&mut self, i: u64) {
|
||||
+ self.freq = i;
|
||||
+ }
|
||||
+
|
||||
+ fn recent(&mut self, i: u64) {
|
||||
+ self.recent = i;
|
||||
+ }
|
||||
+
|
||||
+ fn all_seen_keys(&mut self, i: u64) {
|
||||
+ self.all_seen_keys = i;
|
||||
+ }
|
||||
+
|
||||
+ fn include(&mut self, _k: &K) {
|
||||
+ self.includes += 1;
|
||||
+ }
|
||||
+
|
||||
+ fn include_haunted(&mut self, _k: &K) {
|
||||
+ self.haunted_includes += 1;
|
||||
+ }
|
||||
+
|
||||
+ fn modify(&mut self, _k: &K) {
|
||||
+ self.modifications += 1;
|
||||
+ }
|
||||
+
|
||||
+ fn ghost_frequent_revive(&mut self, _k: &K) {
|
||||
+ self.ghost_freq_revives += 1;
|
||||
+ }
|
||||
+
|
||||
+ fn ghost_recent_revive(&mut self, _k: &K) {
|
||||
+ self.ghost_rec_revives += 1;
|
||||
+ }
|
||||
+
|
||||
+ fn evict_from_recent(&mut self, _k: &K) {
|
||||
+ self.recent_evictions += 1;
|
||||
+ }
|
||||
+
|
||||
+ fn evict_from_frequent(&mut self, _k: &K) {
|
||||
+ self.freq_evictions += 1;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
pub struct ARCacheChar {
|
||||
inner: ARCache<CString, CString>,
|
||||
+ stats: CowCell<CacheStats>,
|
||||
}
|
||||
|
||||
pub struct ARCacheCharRead<'a> {
|
||||
- inner: ARCacheReadTxn<'a, CString, CString>,
|
||||
+ inner: ARCacheReadTxn<'a, CString, CString, ReadCountStat>,
|
||||
+ cache: &'a ARCacheChar,
|
||||
}
|
||||
|
||||
pub struct ARCacheCharWrite<'a> {
|
||||
- inner: ARCacheWriteTxn<'a, CString, CString>,
|
||||
+ inner: ARCacheWriteTxn<'a, CString, CString, FFIWriteStat>,
|
||||
+ cache: &'a ARCacheChar,
|
||||
+}
|
||||
+
|
||||
+impl ARCacheChar {
|
||||
+ fn new(max: usize, read_max: usize) -> Option<Self> {
|
||||
+ ARCacheBuilder::new()
|
||||
+ .set_size(max, read_max)
|
||||
+ .set_reader_quiesce(false)
|
||||
+ .build()
|
||||
+ .map(|inner| Self {
|
||||
+ inner,
|
||||
+ stats: CowCell::new(CacheStats::new()),
|
||||
+ })
|
||||
+ }
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn cache_char_create(max: usize, read_max: usize) -> *mut ARCacheChar {
|
||||
- let inner = if let Some(cache) = ARCacheBuilder::new().set_size(max, read_max).build() {
|
||||
- cache
|
||||
+ if let Some(cache) = ARCacheChar::new(max, read_max) {
|
||||
+ Box::into_raw(Box::new(cache))
|
||||
} else {
|
||||
- return std::ptr::null_mut();
|
||||
- };
|
||||
- let cache: Box<ARCacheChar> = Box::new(ARCacheChar { inner });
|
||||
- Box::into_raw(cache)
|
||||
+ std::ptr::null_mut()
|
||||
+ }
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn cache_char_free(cache: *mut ARCacheChar) {
|
||||
- // Should we be responsible to drain and free everything?
|
||||
debug_assert!(!cache.is_null());
|
||||
unsafe {
|
||||
- let _drop = Box::from_raw(cache);
|
||||
+ drop(Box::from_raw(cache));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,22 +186,22 @@ pub extern "C" fn cache_char_stats(
|
||||
) {
|
||||
let cache_ref = unsafe {
|
||||
debug_assert!(!cache.is_null());
|
||||
- &(*cache) as &ARCacheChar
|
||||
+ &(*cache)
|
||||
};
|
||||
- let stats = cache_ref.inner.view_stats();
|
||||
- *reader_hits = stats.reader_hits.try_into().unwrap();
|
||||
- *reader_includes = stats.reader_includes.try_into().unwrap();
|
||||
- *write_hits = stats.write_hits.try_into().unwrap();
|
||||
- *write_inc_or_mod = (stats.write_includes + stats.write_modifies)
|
||||
- .try_into()
|
||||
- .unwrap();
|
||||
- *shared_max = stats.shared_max.try_into().unwrap();
|
||||
- *freq = stats.freq.try_into().unwrap();
|
||||
- *recent = stats.recent.try_into().unwrap();
|
||||
- *freq_evicts = stats.freq_evicts.try_into().unwrap();
|
||||
- *recent_evicts = stats.recent_evicts.try_into().unwrap();
|
||||
- *p_weight = stats.p_weight.try_into().unwrap();
|
||||
- *all_seen_keys = stats.all_seen_keys.try_into().unwrap();
|
||||
+
|
||||
+ // Get stats snapshot
|
||||
+ let stats_read = cache_ref.stats.read();
|
||||
+ *reader_hits = stats_read.reader_hits;
|
||||
+ *reader_includes = stats_read.reader_includes;
|
||||
+ *write_hits = stats_read.write_hits;
|
||||
+ *write_inc_or_mod = stats_read.write_inc_or_mod;
|
||||
+ *freq_evicts = stats_read.freq_evicts;
|
||||
+ *recent_evicts = stats_read.recent_evicts;
|
||||
+ *p_weight = stats_read.p_weight;
|
||||
+ *shared_max = stats_read.shared_max;
|
||||
+ *freq = stats_read.freq;
|
||||
+ *recent = stats_read.recent;
|
||||
+ *all_seen_keys = stats_read.all_seen_keys;
|
||||
}
|
||||
|
||||
// start read
|
||||
@@ -79,7 +212,8 @@ pub extern "C" fn cache_char_read_begin(cache: *mut ARCacheChar) -> *mut ARCache
|
||||
&(*cache) as &ARCacheChar
|
||||
};
|
||||
let read_txn = Box::new(ARCacheCharRead {
|
||||
- inner: cache_ref.inner.read(),
|
||||
+ inner: cache_ref.inner.read_stats(ReadCountStat::default()),
|
||||
+ cache: cache_ref,
|
||||
});
|
||||
Box::into_raw(read_txn)
|
||||
}
|
||||
@@ -87,8 +221,20 @@ pub extern "C" fn cache_char_read_begin(cache: *mut ARCacheChar) -> *mut ARCache
|
||||
#[no_mangle]
|
||||
pub extern "C" fn cache_char_read_complete(read_txn: *mut ARCacheCharRead) {
|
||||
debug_assert!(!read_txn.is_null());
|
||||
+
|
||||
unsafe {
|
||||
- let _drop = Box::from_raw(read_txn);
|
||||
+ let read_txn_box = Box::from_raw(read_txn);
|
||||
+ let read_stats = read_txn_box.inner.finish();
|
||||
+ let write_stats = read_txn_box
|
||||
+ .cache
|
||||
+ .inner
|
||||
+ .try_quiesce_stats(FFIWriteStat::default());
|
||||
+
|
||||
+ // Update stats
|
||||
+ let mut stats_write = read_txn_box.cache.stats.write();
|
||||
+ stats_write.update_from_read_stat(read_stats);
|
||||
+ stats_write.update_from_write_stat(&write_stats);
|
||||
+ stats_write.commit();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,7 +287,8 @@ pub extern "C" fn cache_char_write_begin(
|
||||
&(*cache) as &ARCacheChar
|
||||
};
|
||||
let write_txn = Box::new(ARCacheCharWrite {
|
||||
- inner: cache_ref.inner.write(),
|
||||
+ inner: cache_ref.inner.write_stats(FFIWriteStat::default()),
|
||||
+ cache: cache_ref,
|
||||
});
|
||||
Box::into_raw(write_txn)
|
||||
}
|
||||
@@ -149,15 +296,21 @@ pub extern "C" fn cache_char_write_begin(
|
||||
#[no_mangle]
|
||||
pub extern "C" fn cache_char_write_commit(write_txn: *mut ARCacheCharWrite) {
|
||||
debug_assert!(!write_txn.is_null());
|
||||
- let wr = unsafe { Box::from_raw(write_txn) };
|
||||
- (*wr).inner.commit();
|
||||
+ unsafe {
|
||||
+ let write_txn_box = Box::from_raw(write_txn);
|
||||
+ let current_stats = write_txn_box.inner.commit();
|
||||
+
|
||||
+ let mut stats_write = write_txn_box.cache.stats.write();
|
||||
+ stats_write.update_from_write_stat(¤t_stats);
|
||||
+ stats_write.commit();
|
||||
+ }
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn cache_char_write_rollback(write_txn: *mut ARCacheCharWrite) {
|
||||
debug_assert!(!write_txn.is_null());
|
||||
unsafe {
|
||||
- let _drop = Box::from_raw(write_txn);
|
||||
+ drop(Box::from_raw(write_txn));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,7 +335,7 @@ pub extern "C" fn cache_char_write_include(
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
- use crate::cache::*;
|
||||
+ use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_cache_basic() {
|
||||
@@ -199,4 +352,116 @@ mod tests {
|
||||
cache_char_read_complete(read_txn);
|
||||
cache_char_free(cache_ptr);
|
||||
}
|
||||
+
|
||||
+ #[test]
|
||||
+ fn test_cache_stats() {
|
||||
+ let cache = cache_char_create(100, 8);
|
||||
+
|
||||
+ // Variables to store stats
|
||||
+ let mut reader_hits = 0;
|
||||
+ let mut reader_includes = 0;
|
||||
+ let mut write_hits = 0;
|
||||
+ let mut write_inc_or_mod = 0;
|
||||
+ let mut shared_max = 0;
|
||||
+ let mut freq = 0;
|
||||
+ let mut recent = 0;
|
||||
+ let mut freq_evicts = 0;
|
||||
+ let mut recent_evicts = 0;
|
||||
+ let mut p_weight = 0;
|
||||
+ let mut all_seen_keys = 0;
|
||||
+
|
||||
+ // Do some operations
|
||||
+ let key = CString::new("stats_test").unwrap();
|
||||
+ let value = CString::new("value").unwrap();
|
||||
+
|
||||
+ let write_txn = cache_char_write_begin(cache);
|
||||
+ cache_char_write_include(write_txn, key.as_ptr(), value.as_ptr());
|
||||
+ cache_char_write_commit(write_txn);
|
||||
+
|
||||
+ let read_txn = cache_char_read_begin(cache);
|
||||
+ let _ = cache_char_read_get(read_txn, key.as_ptr());
|
||||
+ cache_char_read_complete(read_txn);
|
||||
+
|
||||
+ // Get stats
|
||||
+ cache_char_stats(
|
||||
+ cache,
|
||||
+ &mut reader_hits,
|
||||
+ &mut reader_includes,
|
||||
+ &mut write_hits,
|
||||
+ &mut write_inc_or_mod,
|
||||
+ &mut shared_max,
|
||||
+ &mut freq,
|
||||
+ &mut recent,
|
||||
+ &mut freq_evicts,
|
||||
+ &mut recent_evicts,
|
||||
+ &mut p_weight,
|
||||
+ &mut all_seen_keys,
|
||||
+ );
|
||||
+
|
||||
+ // Verify that stats were updated
|
||||
+ assert!(write_inc_or_mod > 0);
|
||||
+ assert!(all_seen_keys > 0);
|
||||
+
|
||||
+ cache_char_free(cache);
|
||||
+ }
|
||||
+
|
||||
+ #[test]
|
||||
+ fn test_cache_read_write_operations() {
|
||||
+ let cache = cache_char_create(100, 8);
|
||||
+
|
||||
+ // Create test data
|
||||
+ let key = CString::new("test_key").unwrap();
|
||||
+ let value = CString::new("test_value").unwrap();
|
||||
+
|
||||
+ // Test write operation
|
||||
+ let write_txn = cache_char_write_begin(cache);
|
||||
+ cache_char_write_include(write_txn, key.as_ptr(), value.as_ptr());
|
||||
+ cache_char_write_commit(write_txn);
|
||||
+
|
||||
+ // Test read operation
|
||||
+ let read_txn = cache_char_read_begin(cache);
|
||||
+ let result = cache_char_read_get(read_txn, key.as_ptr());
|
||||
+ assert!(!result.is_null());
|
||||
+
|
||||
+ // Verify the value
|
||||
+ let retrieved_value = unsafe { CStr::from_ptr(result) };
|
||||
+ assert_eq!(retrieved_value.to_bytes(), value.as_bytes());
|
||||
+
|
||||
+ cache_char_read_complete(read_txn);
|
||||
+ cache_char_free(cache);
|
||||
+ }
|
||||
+
|
||||
+ #[test]
|
||||
+ fn test_cache_miss() {
|
||||
+ let cache = cache_char_create(100, 8);
|
||||
+ let read_txn = cache_char_read_begin(cache);
|
||||
+
|
||||
+ let missing_key = CString::new("nonexistent").unwrap();
|
||||
+ let result = cache_char_read_get(read_txn, missing_key.as_ptr());
|
||||
+ assert!(result.is_null());
|
||||
+
|
||||
+ cache_char_read_complete(read_txn);
|
||||
+ cache_char_free(cache);
|
||||
+ }
|
||||
+
|
||||
+ #[test]
|
||||
+ fn test_write_rollback() {
|
||||
+ let cache = cache_char_create(100, 8);
|
||||
+
|
||||
+ let key = CString::new("rollback_test").unwrap();
|
||||
+ let value = CString::new("value").unwrap();
|
||||
+
|
||||
+ // Start write transaction and rollback
|
||||
+ let write_txn = cache_char_write_begin(cache);
|
||||
+ cache_char_write_include(write_txn, key.as_ptr(), value.as_ptr());
|
||||
+ cache_char_write_rollback(write_txn);
|
||||
+
|
||||
+ // Verify key doesn't exist
|
||||
+ let read_txn = cache_char_read_begin(cache);
|
||||
+ let result = cache_char_read_get(read_txn, key.as_ptr());
|
||||
+ assert!(result.is_null());
|
||||
+
|
||||
+ cache_char_read_complete(read_txn);
|
||||
+ cache_char_free(cache);
|
||||
+ }
|
||||
}
|
||||
--
|
||||
2.48.1
|
||||
|
||||
216
SOURCES/0029-Security-fix-for-CVE-2025-2487.patch
Normal file
216
SOURCES/0029-Security-fix-for-CVE-2025-2487.patch
Normal file
@ -0,0 +1,216 @@
|
||||
From 91f5045aa6b0221d1aea82b282cf1d8849dae6f8 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre Rogier <progier@redhat.com>
|
||||
Date: Thu, 27 Feb 2025 16:36:48 +0100
|
||||
Subject: [PATCH] Security fix for CVE-2025-2487
|
||||
|
||||
Description:
|
||||
A denial of service vulnerability was found in the 389 Directory Server.
|
||||
The 389 Directory Server may crash (Null Pointer Exception) after some
|
||||
failed rename subtree operations (i.e. MODDN) issued by a user having enough
|
||||
privileges to do so.
|
||||
|
||||
References:
|
||||
- https://access.redhat.com/security/cve/CVE-2025-2487
|
||||
- https://bugzilla.redhat.com/show_bug.cgi?id=2353071
|
||||
---
|
||||
ldap/servers/slapd/back-ldbm/findentry.c | 36 +++++++++++++++++-----
|
||||
ldap/servers/slapd/back-ldbm/ldbm_add.c | 2 ++
|
||||
ldap/servers/slapd/back-ldbm/ldbm_modify.c | 6 ++++
|
||||
ldap/servers/slapd/back-ldbm/ldbm_modrdn.c | 13 ++++++--
|
||||
4 files changed, 48 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/ldap/servers/slapd/back-ldbm/findentry.c b/ldap/servers/slapd/back-ldbm/findentry.c
|
||||
index 7bb56ef2c..907b4367a 100644
|
||||
--- a/ldap/servers/slapd/back-ldbm/findentry.c
|
||||
+++ b/ldap/servers/slapd/back-ldbm/findentry.c
|
||||
@@ -99,6 +99,7 @@ find_entry_internal_dn(
|
||||
int isroot = 0;
|
||||
int op_type;
|
||||
int reverted_entry = 0;
|
||||
+ int return_err = LDAP_SUCCESS;
|
||||
|
||||
/* get the managedsait ldap message control */
|
||||
slapi_pblock_get(pb, SLAPI_MANAGEDSAIT, &managedsait);
|
||||
@@ -121,6 +122,7 @@ find_entry_internal_dn(
|
||||
if (rc) { /* if check_entry_for_referral returns non-zero, result is sent. */
|
||||
*rc = FE_RC_SENT_RESULT;
|
||||
}
|
||||
+ slapi_set_ldap_result(pb, LDAP_REFERRAL, NULL, NULL, 0, NULL);
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
@@ -153,7 +155,12 @@ find_entry_internal_dn(
|
||||
slapi_log_err(SLAPI_LOG_ERR, "find_entry_internal_dn", "Retry count exceeded (%s)\n", slapi_sdn_get_dn(sdn));
|
||||
}
|
||||
if (reverted_entry) {
|
||||
+ CACHE_RETURN(&inst->inst_cache, &e);
|
||||
+ slapi_set_ldap_result(pb, LDAP_BUSY, NULL, NULL, 0, NULL);
|
||||
slapi_send_ldap_result(pb, LDAP_BUSY, NULL, "target entry busy because of a canceled operation", 0, NULL);
|
||||
+ if (rc) {
|
||||
+ *rc = FE_RC_SENT_RESULT; /* Result is sent */
|
||||
+ }
|
||||
return (NULL);
|
||||
}
|
||||
/*
|
||||
@@ -179,6 +186,7 @@ find_entry_internal_dn(
|
||||
if (rc) { /* if check_entry_for_referral returns non-zero, result is sent. */
|
||||
*rc = FE_RC_SENT_RESULT;
|
||||
}
|
||||
+ slapi_set_ldap_result(pb, LDAP_REFERRAL, NULL, NULL, 0, NULL);
|
||||
return (NULL);
|
||||
}
|
||||
/* else fall through to no such object */
|
||||
@@ -189,7 +197,7 @@ find_entry_internal_dn(
|
||||
if (me && !isroot) {
|
||||
/* If not root, you may not want to reveal it. */
|
||||
int acl_type = -1;
|
||||
- int return_err = LDAP_NO_SUCH_OBJECT;
|
||||
+ return_err = LDAP_NO_SUCH_OBJECT;
|
||||
err = LDAP_SUCCESS;
|
||||
switch (op_type) {
|
||||
case SLAPI_OPERATION_ADD:
|
||||
@@ -230,18 +238,22 @@ find_entry_internal_dn(
|
||||
* do not return the "matched" DN.
|
||||
* Plus, the bind case returns LDAP_INAPPROPRIATE_AUTH.
|
||||
*/
|
||||
+ slapi_set_ldap_result(pb, return_err, NULL, NULL, 0, NULL);
|
||||
slapi_send_ldap_result(pb, return_err, NULL, NULL, 0, NULL);
|
||||
} else {
|
||||
+ slapi_set_ldap_result(pb, LDAP_NO_SUCH_OBJECT, NULL, NULL, 0, NULL);
|
||||
slapi_send_ldap_result(pb, LDAP_NO_SUCH_OBJECT,
|
||||
(char *)slapi_sdn_get_dn(&ancestorsdn), NULL, 0, NULL);
|
||||
}
|
||||
} else {
|
||||
+ slapi_set_ldap_result(pb, LDAP_NO_SUCH_OBJECT, NULL, NULL, 0, NULL);
|
||||
slapi_send_ldap_result(pb, LDAP_NO_SUCH_OBJECT,
|
||||
(char *)slapi_sdn_get_dn(&ancestorsdn), NULL, 0, NULL);
|
||||
}
|
||||
} else {
|
||||
- slapi_send_ldap_result(pb, (LDAP_INVALID_DN_SYNTAX == err) ? LDAP_INVALID_DN_SYNTAX : LDAP_OPERATIONS_ERROR,
|
||||
- (char *)slapi_sdn_get_dn(&ancestorsdn), NULL, 0, NULL);
|
||||
+ return_err = (LDAP_INVALID_DN_SYNTAX == err) ? LDAP_INVALID_DN_SYNTAX : LDAP_OPERATIONS_ERROR;
|
||||
+ slapi_set_ldap_result(pb, return_err, NULL, NULL, 0, NULL);
|
||||
+ slapi_send_ldap_result(pb, return_err, (char *)slapi_sdn_get_dn(&ancestorsdn), NULL, 0, NULL);
|
||||
}
|
||||
if (rc) {
|
||||
*rc = FE_RC_SENT_RESULT;
|
||||
@@ -265,13 +277,15 @@ find_entry_internal_uniqueid(
|
||||
backend *be,
|
||||
const char *uniqueid,
|
||||
int lock,
|
||||
- back_txn *txn)
|
||||
+ back_txn *txn,
|
||||
+ int *rc)
|
||||
{
|
||||
ldbm_instance *inst = (ldbm_instance *)be->be_instance_info;
|
||||
struct backentry *e;
|
||||
int err;
|
||||
size_t tries = 0;
|
||||
int reverted_entry = 0;
|
||||
+ int return_err = 0;
|
||||
|
||||
while ((tries < LDBM_CACHE_RETRY_COUNT) &&
|
||||
(e = uniqueid2entry(be, uniqueid, txn, &err)) != NULL) {
|
||||
@@ -307,12 +321,20 @@ find_entry_internal_uniqueid(
|
||||
}
|
||||
|
||||
if (reverted_entry) {
|
||||
+ slapi_set_ldap_result(pb, LDAP_BUSY, NULL, NULL, 0, NULL);
|
||||
slapi_send_ldap_result(pb, LDAP_BUSY, NULL, "target entry busy because of a canceled operation", 0, NULL);
|
||||
+ if (rc) {
|
||||
+ *rc = FE_RC_SENT_RESULT; /* Result is sent */
|
||||
+ }
|
||||
return (NULL);
|
||||
} else {
|
||||
/* entry not found */
|
||||
- slapi_send_ldap_result(pb, (0 == err || DBI_RC_NOTFOUND == err) ? LDAP_NO_SUCH_OBJECT : LDAP_OPERATIONS_ERROR, NULL /* matched */, NULL,
|
||||
- 0, NULL);
|
||||
+ return_err = (0 == err || DBI_RC_NOTFOUND == err) ? LDAP_NO_SUCH_OBJECT : LDAP_OPERATIONS_ERROR;
|
||||
+ slapi_set_ldap_result(pb, return_err, NULL, NULL, 0, NULL);
|
||||
+ slapi_send_ldap_result(pb, return_err, NULL /* matched */, NULL, 0, NULL);
|
||||
+ if (rc) {
|
||||
+ *rc = FE_RC_SENT_RESULT; /* Result is sent */
|
||||
+ }
|
||||
}
|
||||
slapi_log_err(SLAPI_LOG_TRACE,
|
||||
"find_entry_internal_uniqueid", "<= not found; uniqueid = (%s)\n",
|
||||
@@ -334,7 +356,7 @@ find_entry_internal(
|
||||
if (addr->uniqueid != NULL) {
|
||||
slapi_log_err(SLAPI_LOG_TRACE, "find_entry_internal", "=> (uniqueid=%s) lock %d\n",
|
||||
addr->uniqueid, lock);
|
||||
- return (find_entry_internal_uniqueid(pb, be, addr->uniqueid, lock, txn));
|
||||
+ return (find_entry_internal_uniqueid(pb, be, addr->uniqueid, lock, txn, rc));
|
||||
} else {
|
||||
struct backentry *entry = NULL;
|
||||
|
||||
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_add.c b/ldap/servers/slapd/back-ldbm/ldbm_add.c
|
||||
index ed0c126f8..8f7122d16 100644
|
||||
--- a/ldap/servers/slapd/back-ldbm/ldbm_add.c
|
||||
+++ b/ldap/servers/slapd/back-ldbm/ldbm_add.c
|
||||
@@ -433,6 +433,8 @@ ldbm_back_add(Slapi_PBlock *pb)
|
||||
slapi_log_err(SLAPI_LOG_BACKLDBM, "ldbm_back_add",
|
||||
"find_entry2modify_only returned NULL parententry pdn: %s, uniqueid: %s\n",
|
||||
slapi_sdn_get_dn(&parentsdn), addr.uniqueid ? addr.uniqueid : "none");
|
||||
+ slapi_pblock_get(pb, SLAPI_RESULT_CODE, &ldap_result_code);
|
||||
+ goto error_return;
|
||||
}
|
||||
modify_init(&parent_modify_c, parententry);
|
||||
}
|
||||
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_modify.c b/ldap/servers/slapd/back-ldbm/ldbm_modify.c
|
||||
index 1b5c1fecd..350e40354 100644
|
||||
--- a/ldap/servers/slapd/back-ldbm/ldbm_modify.c
|
||||
+++ b/ldap/servers/slapd/back-ldbm/ldbm_modify.c
|
||||
@@ -177,6 +177,12 @@ modify_update_all(backend *be, Slapi_PBlock *pb, modify_context *mc, back_txn *t
|
||||
slapi_pblock_get(pb, SLAPI_OPERATION, &operation);
|
||||
is_ruv = operation_is_flag_set(operation, OP_FLAG_REPL_RUV);
|
||||
}
|
||||
+ if (NULL == mc->new_entry) {
|
||||
+ /* test entry to avoid crashing in id2entry_add_ext */
|
||||
+ slapi_log_err(SLAPI_LOG_BACKLDBM, "modify_update_all",
|
||||
+ "No entry in modify_context ==> operation is aborted.\n");
|
||||
+ return -1;
|
||||
+ }
|
||||
/*
|
||||
* Update the ID to Entry index.
|
||||
* Note that id2entry_add replaces the entry, so the Entry ID stays the same.
|
||||
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
|
||||
index 659b7a33a..a373ad227 100644
|
||||
--- a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
|
||||
+++ b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
|
||||
@@ -495,8 +495,8 @@ ldbm_back_modrdn(Slapi_PBlock *pb)
|
||||
slapi_pblock_get(pb, SLAPI_TARGET_ADDRESS, &old_addr);
|
||||
e = find_entry2modify(pb, be, old_addr, &txn, &result_sent);
|
||||
if (e == NULL) {
|
||||
- ldap_result_code = -1;
|
||||
- goto error_return; /* error result sent by find_entry2modify() */
|
||||
+ slapi_pblock_get(pb, SLAPI_RESULT_CODE, &ldap_result_code);
|
||||
+ goto error_return; /* error result set and sent by find_entry2modify() */
|
||||
}
|
||||
if (slapi_entry_flag_is_set(e->ep_entry, SLAPI_ENTRY_FLAG_TOMBSTONE) &&
|
||||
!is_resurect_operation) {
|
||||
@@ -528,6 +528,11 @@ ldbm_back_modrdn(Slapi_PBlock *pb)
|
||||
oldparent_addr.uniqueid = NULL;
|
||||
}
|
||||
parententry = find_entry2modify_only(pb, be, &oldparent_addr, &txn, &result_sent);
|
||||
+ if (parententry == NULL) {
|
||||
+ slapi_pblock_get(pb, SLAPI_RESULT_CODE, &ldap_result_code);
|
||||
+ goto error_return; /* error result set and sent by find_entry2modify() */
|
||||
+ }
|
||||
+
|
||||
modify_init(&parent_modify_context, parententry);
|
||||
|
||||
/* Fetch and lock the new parent of the entry that is moving */
|
||||
@@ -538,6 +543,10 @@ ldbm_back_modrdn(Slapi_PBlock *pb)
|
||||
}
|
||||
newparententry = find_entry2modify_only(pb, be, newsuperior_addr, &txn, &result_sent);
|
||||
slapi_ch_free_string(&newsuperior_addr->uniqueid);
|
||||
+ if (newparententry == NULL) {
|
||||
+ slapi_pblock_get(pb, SLAPI_RESULT_CODE, &ldap_result_code);
|
||||
+ goto error_return; /* error result set and sent by find_entry2modify() */
|
||||
+ }
|
||||
modify_init(&newparent_modify_context, newparententry);
|
||||
}
|
||||
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -0,0 +1,410 @@
|
||||
From 2ee7095bc757d10e1a1056ac5957444a8bce8623 Mon Sep 17 00:00:00 2001
|
||||
From: tbordaz <tbordaz@redhat.com>
|
||||
Date: Tue, 14 Jan 2025 18:12:56 +0100
|
||||
Subject: [PATCH] Issue 6470 - Some replication status data are reset upon a
|
||||
restart (#6471)
|
||||
|
||||
Bug description:
|
||||
The replication agreement contains operational attributes
|
||||
related to the total init: nsds5replicaLastInitStart,
|
||||
nsds5replicaLastInitEnd, nsds5replicaLastInitStatus.
|
||||
Those attributes are reset at restart
|
||||
|
||||
Fix description:
|
||||
When reading the replication agreement from config
|
||||
(agmt_new_from_entry) restore the attributes into
|
||||
the in-memory RA.
|
||||
Updates the RA config entry from the in-memory RA
|
||||
during shutdown/cleanallruv/enable_ra
|
||||
|
||||
fixes: #6470
|
||||
|
||||
Reviewed by: Simon Pichugin (Thanks !!)
|
||||
---
|
||||
.../suites/replication/single_master_test.py | 128 ++++++++++++++++
|
||||
ldap/servers/plugins/replication/repl5.h | 4 +
|
||||
ldap/servers/plugins/replication/repl5_agmt.c | 138 +++++++++++++++++-
|
||||
.../plugins/replication/repl5_agmtlist.c | 1 +
|
||||
.../plugins/replication/repl_cleanallruv.c | 1 +
|
||||
.../plugins/replication/repl_globals.c | 3 +
|
||||
6 files changed, 272 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dirsrvtests/tests/suites/replication/single_master_test.py b/dirsrvtests/tests/suites/replication/single_master_test.py
|
||||
index 448cf305a..56e3e49d3 100644
|
||||
--- a/dirsrvtests/tests/suites/replication/single_master_test.py
|
||||
+++ b/dirsrvtests/tests/suites/replication/single_master_test.py
|
||||
@@ -13,6 +13,7 @@ from lib389.utils import *
|
||||
from lib389.idm.user import UserAccounts, TEST_USER_PROPERTIES
|
||||
|
||||
from lib389.replica import ReplicationManager, Replicas
|
||||
+from lib389.agreement import Agreements
|
||||
from lib389.backend import Backends
|
||||
|
||||
from lib389.topologies import topology_m1c1 as topo_r # Replication
|
||||
@@ -156,6 +157,133 @@ def test_lastupdate_attr_before_init(topo_nr):
|
||||
json_obj = json.loads(json_status)
|
||||
log.debug("JSON status message: {}".format(json_obj))
|
||||
|
||||
+def test_total_init_operational_attr(topo_r):
|
||||
+ """Check that operation attributes nsds5replicaLastInitStatus
|
||||
+ nsds5replicaLastInitStart and nsds5replicaLastInitEnd
|
||||
+ are preserved between restart
|
||||
+
|
||||
+ :id: 6ba00bb1-87c0-47dd-86e0-ccf892b3985b
|
||||
+ :customerscenario: True
|
||||
+ :setup: Replication setup with supplier and consumer instances,
|
||||
+ test user on supplier
|
||||
+ :steps:
|
||||
+ 1. Check that user was replicated to consumer
|
||||
+ 2. Trigger a first total init
|
||||
+ 3. Check status/start/end values are set on the supplier
|
||||
+ 4. Restart supplier
|
||||
+ 5. Check previous status/start/end values are preserved
|
||||
+ 6. Trigger a second total init
|
||||
+ 7. Check status/start/end values are set on the supplier
|
||||
+ 8. Restart supplier
|
||||
+ 9. Check previous status/start/end values are preserved
|
||||
+ 10. Check status/start/end values are different between
|
||||
+ first and second total init
|
||||
+ :expectedresults:
|
||||
+ 1. The user should be replicated to consumer
|
||||
+ 2. Total init should be successful
|
||||
+ 3. It must exist a values
|
||||
+ 4. Operation should be successful
|
||||
+ 5. Check values are identical before/after restart
|
||||
+ 6. Total init should be successful
|
||||
+ 7. It must exist a values
|
||||
+ 8. Operation should be successful
|
||||
+ 9. Check values are identical before/after restart
|
||||
+ 10. values must differ between first/second total init
|
||||
+ """
|
||||
+
|
||||
+ supplier = topo_r.ms["supplier1"]
|
||||
+ consumer = topo_r.cs["consumer1"]
|
||||
+ repl = ReplicationManager(DEFAULT_SUFFIX)
|
||||
+
|
||||
+ # Create a test user
|
||||
+ m_users = UserAccounts(topo_r.ms["supplier1"], DEFAULT_SUFFIX)
|
||||
+ m_user = m_users.ensure_state(properties=TEST_USER_PROPERTIES)
|
||||
+ m_user.ensure_present('mail', 'testuser@redhat.com')
|
||||
+
|
||||
+ # Then check it is replicated
|
||||
+ log.info("Check that replication is working")
|
||||
+ repl.wait_for_replication(supplier, consumer)
|
||||
+ c_users = UserAccounts(topo_r.cs["consumer1"], DEFAULT_SUFFIX)
|
||||
+ c_user = c_users.get('testuser')
|
||||
+ assert c_user
|
||||
+
|
||||
+ # Retrieve the replication agreement S1->C1
|
||||
+ replica_supplier = Replicas(supplier).get(DEFAULT_SUFFIX)
|
||||
+ agmts_supplier = Agreements(supplier, replica_supplier.dn)
|
||||
+ supplier_consumer = None
|
||||
+ for agmt in agmts_supplier.list():
|
||||
+ if (agmt.get_attr_val_utf8('nsDS5ReplicaPort') == str(consumer.port) and
|
||||
+ agmt.get_attr_val_utf8('nsDS5ReplicaHost') == consumer.host):
|
||||
+ supplier_consumer = agmt
|
||||
+ break
|
||||
+ assert supplier_consumer
|
||||
+
|
||||
+ # Trigger a first total init and check that
|
||||
+ # start/end/status is updated AND preserved during a restart
|
||||
+ log.info("First total init")
|
||||
+ supplier_consumer.begin_reinit()
|
||||
+ (done, error) = supplier_consumer.wait_reinit()
|
||||
+ assert done is True
|
||||
+
|
||||
+ status_1 = supplier_consumer.get_attr_val_utf8("nsds5replicaLastInitStatus")
|
||||
+ assert status_1
|
||||
+
|
||||
+ initStart_1 = supplier_consumer.get_attr_val_utf8("nsds5replicaLastInitStart")
|
||||
+ assert initStart_1
|
||||
+
|
||||
+ initEnd_1 = supplier_consumer.get_attr_val_utf8("nsds5replicaLastInitEnd")
|
||||
+ assert initEnd_1
|
||||
+
|
||||
+ log.info("Check values from first total init are preserved")
|
||||
+ supplier.restart()
|
||||
+ post_restart_status_1 = supplier_consumer.get_attr_val_utf8("nsds5replicaLastInitStatus")
|
||||
+ assert post_restart_status_1
|
||||
+ assert post_restart_status_1 == status_1
|
||||
+
|
||||
+ post_restart_initStart_1 = supplier_consumer.get_attr_val_utf8("nsds5replicaLastInitStart")
|
||||
+ assert post_restart_initStart_1
|
||||
+ assert post_restart_initStart_1 == initStart_1
|
||||
+
|
||||
+ post_restart_initEnd_1 = supplier_consumer.get_attr_val_utf8("nsds5replicaLastInitEnd")
|
||||
+ assert post_restart_initEnd_1 == initEnd_1
|
||||
+
|
||||
+ # Trigger a second total init and check that
|
||||
+ # start/end/status is updated (differ from previous values)
|
||||
+ # AND new values are preserved during a restart
|
||||
+ time.sleep(1)
|
||||
+ log.info("Second total init")
|
||||
+ supplier_consumer.begin_reinit()
|
||||
+ (done, error) = supplier_consumer.wait_reinit()
|
||||
+ assert done is True
|
||||
+
|
||||
+ status_2 = supplier_consumer.get_attr_val_utf8("nsds5replicaLastInitStatus")
|
||||
+ assert status_2
|
||||
+
|
||||
+ initStart_2 = supplier_consumer.get_attr_val_utf8("nsds5replicaLastInitStart")
|
||||
+ assert initStart_2
|
||||
+
|
||||
+ initEnd_2 = supplier_consumer.get_attr_val_utf8("nsds5replicaLastInitEnd")
|
||||
+ assert initEnd_2
|
||||
+
|
||||
+ log.info("Check values from second total init are preserved")
|
||||
+ supplier.restart()
|
||||
+ post_restart_status_2 = supplier_consumer.get_attr_val_utf8("nsds5replicaLastInitStatus")
|
||||
+ assert post_restart_status_2
|
||||
+ assert post_restart_status_2 == status_2
|
||||
+
|
||||
+ post_restart_initStart_2 = supplier_consumer.get_attr_val_utf8("nsds5replicaLastInitStart")
|
||||
+ assert post_restart_initStart_2
|
||||
+ assert post_restart_initStart_2 == initStart_2
|
||||
+
|
||||
+ post_restart_initEnd_2 = supplier_consumer.get_attr_val_utf8("nsds5replicaLastInitEnd")
|
||||
+ assert post_restart_initEnd_2 == initEnd_2
|
||||
+
|
||||
+ # Check that values are updated by total init
|
||||
+ log.info("Check values from first/second total init are different")
|
||||
+ assert status_2 == status_1
|
||||
+ assert initStart_2 != initStart_1
|
||||
+ assert initEnd_2 != initEnd_1
|
||||
+
|
||||
if __name__ == '__main__':
|
||||
# Run isolated
|
||||
# -s for DEBUG mode
|
||||
diff --git a/ldap/servers/plugins/replication/repl5.h b/ldap/servers/plugins/replication/repl5.h
|
||||
index 2ba2cfaa7..6e5552f54 100644
|
||||
--- a/ldap/servers/plugins/replication/repl5.h
|
||||
+++ b/ldap/servers/plugins/replication/repl5.h
|
||||
@@ -169,6 +169,9 @@ extern const char *type_nsds5ReplicaBootstrapCredentials;
|
||||
extern const char *type_nsds5ReplicaBootstrapBindMethod;
|
||||
extern const char *type_nsds5ReplicaBootstrapTransportInfo;
|
||||
extern const char *type_replicaKeepAliveUpdateInterval;
|
||||
+extern const char *type_nsds5ReplicaLastInitStart;
|
||||
+extern const char *type_nsds5ReplicaLastInitEnd;
|
||||
+extern const char *type_nsds5ReplicaLastInitStatus;
|
||||
|
||||
/* Attribute names for windows replication agreements */
|
||||
extern const char *type_nsds7WindowsReplicaArea;
|
||||
@@ -435,6 +438,7 @@ void agmt_notify_change(Repl_Agmt *ra, Slapi_PBlock *pb);
|
||||
Object *agmt_get_consumer_ruv(Repl_Agmt *ra);
|
||||
ReplicaId agmt_get_consumer_rid(Repl_Agmt *ra, void *conn);
|
||||
int agmt_set_consumer_ruv(Repl_Agmt *ra, RUV *ruv);
|
||||
+void agmt_update_init_status(Repl_Agmt *ra);
|
||||
void agmt_update_consumer_ruv(Repl_Agmt *ra);
|
||||
CSN *agmt_get_consumer_schema_csn(Repl_Agmt *ra);
|
||||
void agmt_set_consumer_schema_csn(Repl_Agmt *ra, CSN *csn);
|
||||
diff --git a/ldap/servers/plugins/replication/repl5_agmt.c b/ldap/servers/plugins/replication/repl5_agmt.c
|
||||
index fd5f23a77..6ffb074d4 100644
|
||||
--- a/ldap/servers/plugins/replication/repl5_agmt.c
|
||||
+++ b/ldap/servers/plugins/replication/repl5_agmt.c
|
||||
@@ -56,6 +56,7 @@
|
||||
#include "repl5_prot_private.h"
|
||||
#include "cl5_api.h"
|
||||
#include "slapi-plugin.h"
|
||||
+#include "slap.h"
|
||||
#include "../../slapd/back-ldbm/dbimpl.h" /* for dblayer_is_lmdb */
|
||||
|
||||
#define DEFAULT_TIMEOUT 120 /* (seconds) default outbound LDAP connection */
|
||||
@@ -532,9 +533,32 @@ agmt_new_from_entry(Slapi_Entry *e)
|
||||
ra->last_update_status[0] = '\0';
|
||||
ra->update_in_progress = PR_FALSE;
|
||||
ra->stop_in_progress = PR_FALSE;
|
||||
- ra->last_init_end_time = 0UL;
|
||||
- ra->last_init_start_time = 0UL;
|
||||
- ra->last_init_status[0] = '\0';
|
||||
+ val = (char *)slapi_entry_attr_get_ref(e, type_nsds5ReplicaLastInitEnd);
|
||||
+ if (val) {
|
||||
+ time_t init_end_time;
|
||||
+
|
||||
+ init_end_time = parse_genTime((char *) val);
|
||||
+ if (init_end_time == NO_TIME || init_end_time == SLAPD_END_TIME) {
|
||||
+ ra->last_init_end_time = 0UL;
|
||||
+ } else {
|
||||
+ ra->last_init_end_time = init_end_time;
|
||||
+ }
|
||||
+ }
|
||||
+ val = (char *)slapi_entry_attr_get_ref(e, type_nsds5ReplicaLastInitStart);
|
||||
+ if (val) {
|
||||
+ time_t init_start_time;
|
||||
+
|
||||
+ init_start_time = parse_genTime((char *) val);
|
||||
+ if (init_start_time == NO_TIME || init_start_time == SLAPD_END_TIME) {
|
||||
+ ra->last_init_start_time = 0UL;
|
||||
+ } else {
|
||||
+ ra->last_init_start_time = init_start_time;
|
||||
+ }
|
||||
+ }
|
||||
+ val = (char *)slapi_entry_attr_get_ref(e, type_nsds5ReplicaLastInitStatus);
|
||||
+ if (val) {
|
||||
+ strcpy(ra->last_init_status, val);
|
||||
+ }
|
||||
ra->changecounters = (struct changecounter **)slapi_ch_calloc(MAX_NUM_OF_SUPPLIERS + 1,
|
||||
sizeof(struct changecounter *));
|
||||
ra->num_changecounters = 0;
|
||||
@@ -2527,6 +2551,113 @@ agmt_set_consumer_ruv(Repl_Agmt *ra, RUV *ruv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+void
|
||||
+agmt_update_init_status(Repl_Agmt *ra)
|
||||
+{
|
||||
+ int rc;
|
||||
+ Slapi_PBlock *pb;
|
||||
+ LDAPMod **mods;
|
||||
+ int nb_mods = 0;
|
||||
+ int mod_idx;
|
||||
+ Slapi_Mod smod_start_time = {0};
|
||||
+ Slapi_Mod smod_end_time = {0};
|
||||
+ Slapi_Mod smod_status = {0};
|
||||
+
|
||||
+ PR_ASSERT(ra);
|
||||
+ PR_Lock(ra->lock);
|
||||
+
|
||||
+ if (ra->last_init_start_time) {
|
||||
+ nb_mods++;
|
||||
+ }
|
||||
+ if (ra->last_init_end_time) {
|
||||
+ nb_mods++;
|
||||
+ }
|
||||
+ if (ra->last_init_status[0] != '\0') {
|
||||
+ nb_mods++;
|
||||
+ }
|
||||
+ if (nb_mods == 0) {
|
||||
+ /* shortcut. no need to go further */
|
||||
+ PR_Unlock(ra->lock);
|
||||
+ return;
|
||||
+ }
|
||||
+ mods = (LDAPMod **) slapi_ch_malloc((nb_mods + 1) * sizeof(LDAPMod *));
|
||||
+ mod_idx = 0;
|
||||
+ if (ra->last_init_start_time) {
|
||||
+ struct berval val;
|
||||
+ char *time_tmp = NULL;
|
||||
+ slapi_mod_init(&smod_start_time, 1);
|
||||
+ slapi_mod_set_type(&smod_start_time, type_nsds5ReplicaLastInitStart);
|
||||
+ slapi_mod_set_operation(&smod_start_time, LDAP_MOD_REPLACE | LDAP_MOD_BVALUES);
|
||||
+
|
||||
+ time_tmp = format_genTime(ra->last_init_start_time);
|
||||
+ val.bv_val = time_tmp;
|
||||
+ val.bv_len = strlen(time_tmp);
|
||||
+ slapi_mod_add_value(&smod_start_time, &val);
|
||||
+ slapi_ch_free((void **)&time_tmp);
|
||||
+ mods[mod_idx] = (LDAPMod *)slapi_mod_get_ldapmod_byref(&smod_start_time);
|
||||
+ mod_idx++;
|
||||
+ }
|
||||
+ if (ra->last_init_end_time) {
|
||||
+ struct berval val;
|
||||
+ char *time_tmp = NULL;
|
||||
+ slapi_mod_init(&smod_end_time, 1);
|
||||
+ slapi_mod_set_type(&smod_end_time, type_nsds5ReplicaLastInitEnd);
|
||||
+ slapi_mod_set_operation(&smod_end_time, LDAP_MOD_REPLACE | LDAP_MOD_BVALUES);
|
||||
+
|
||||
+ time_tmp = format_genTime(ra->last_init_end_time);
|
||||
+ val.bv_val = time_tmp;
|
||||
+ val.bv_len = strlen(time_tmp);
|
||||
+ slapi_mod_add_value(&smod_end_time, &val);
|
||||
+ slapi_ch_free((void **)&time_tmp);
|
||||
+ mods[mod_idx] = (LDAPMod *)slapi_mod_get_ldapmod_byref(&smod_end_time);
|
||||
+ mod_idx++;
|
||||
+ }
|
||||
+ if (ra->last_init_status[0] != '\0') {
|
||||
+ struct berval val;
|
||||
+ char *init_status = NULL;
|
||||
+ slapi_mod_init(&smod_status, 1);
|
||||
+ slapi_mod_set_type(&smod_status, type_nsds5ReplicaLastInitStatus);
|
||||
+ slapi_mod_set_operation(&smod_status, LDAP_MOD_REPLACE | LDAP_MOD_BVALUES);
|
||||
+
|
||||
+ init_status = slapi_ch_strdup(ra->last_init_status);
|
||||
+ val.bv_val = init_status;
|
||||
+ val.bv_len = strlen(init_status);
|
||||
+ slapi_mod_add_value(&smod_status, &val);
|
||||
+ slapi_ch_free((void **)&init_status);
|
||||
+ mods[mod_idx] = (LDAPMod *)slapi_mod_get_ldapmod_byref(&smod_status);
|
||||
+ mod_idx++;
|
||||
+ }
|
||||
+
|
||||
+ if (nb_mods) {
|
||||
+ /* it is ok to release the lock here because we are done with the agreement data.
|
||||
+ we have to do it before issuing the modify operation because it causes
|
||||
+ agmtlist_notify_all to be called which uses the same lock - hence the deadlock */
|
||||
+ PR_Unlock(ra->lock);
|
||||
+
|
||||
+ pb = slapi_pblock_new();
|
||||
+ mods[nb_mods] = NULL;
|
||||
+
|
||||
+ slapi_modify_internal_set_pb_ext(pb, ra->dn, mods, NULL, NULL,
|
||||
+ repl_get_plugin_identity(PLUGIN_MULTISUPPLIER_REPLICATION), 0);
|
||||
+ slapi_modify_internal_pb(pb);
|
||||
+
|
||||
+ slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &rc);
|
||||
+ if (rc != LDAP_SUCCESS && rc != LDAP_NO_SUCH_ATTRIBUTE) {
|
||||
+ slapi_log_err(SLAPI_LOG_ERR, repl_plugin_name, "agmt_update_consumer_ruv - "
|
||||
+ "%s: agmt_update_consumer_ruv: "
|
||||
+ "failed to update consumer's RUV; LDAP error - %d\n",
|
||||
+ ra->long_name, rc);
|
||||
+ }
|
||||
+
|
||||
+ slapi_pblock_destroy(pb);
|
||||
+ } else {
|
||||
+ PR_Unlock(ra->lock);
|
||||
+ }
|
||||
+ slapi_mod_done(&smod_start_time);
|
||||
+ slapi_mod_done(&smod_end_time);
|
||||
+ slapi_mod_done(&smod_status);
|
||||
+}
|
||||
+
|
||||
void
|
||||
agmt_update_consumer_ruv(Repl_Agmt *ra)
|
||||
{
|
||||
@@ -3146,6 +3277,7 @@ agmt_set_enabled_from_entry(Repl_Agmt *ra, Slapi_Entry *e, char *returntext)
|
||||
PR_Unlock(ra->lock);
|
||||
agmt_stop(ra);
|
||||
agmt_update_consumer_ruv(ra);
|
||||
+ agmt_update_init_status(ra);
|
||||
agmt_set_last_update_status(ra, 0, 0, "agreement disabled");
|
||||
return rc;
|
||||
}
|
||||
diff --git a/ldap/servers/plugins/replication/repl5_agmtlist.c b/ldap/servers/plugins/replication/repl5_agmtlist.c
|
||||
index 0ebbc376a..9109f92a3 100644
|
||||
--- a/ldap/servers/plugins/replication/repl5_agmtlist.c
|
||||
+++ b/ldap/servers/plugins/replication/repl5_agmtlist.c
|
||||
@@ -786,6 +786,7 @@ agmtlist_shutdown()
|
||||
ra = (Repl_Agmt *)object_get_data(ro);
|
||||
agmt_stop(ra);
|
||||
agmt_update_consumer_ruv(ra);
|
||||
+ agmt_update_init_status(ra);
|
||||
next_ro = objset_next_obj(agmt_set, ro);
|
||||
/* Object ro was released in objset_next_obj,
|
||||
* but the address ro can be still used to remove ro from objset. */
|
||||
diff --git a/ldap/servers/plugins/replication/repl_cleanallruv.c b/ldap/servers/plugins/replication/repl_cleanallruv.c
|
||||
index 4052d98fd..d002f823d 100644
|
||||
--- a/ldap/servers/plugins/replication/repl_cleanallruv.c
|
||||
+++ b/ldap/servers/plugins/replication/repl_cleanallruv.c
|
||||
@@ -2441,6 +2441,7 @@ clean_agmts(cleanruv_data *data)
|
||||
"Cleaning agmt (%s) ...", agmt_get_long_name(agmt));
|
||||
agmt_stop(agmt);
|
||||
agmt_update_consumer_ruv(agmt);
|
||||
+ agmt_update_init_status(agmt);
|
||||
agmt_start(agmt);
|
||||
agmt_obj = agmtlist_get_next_agreement_for_replica(data->replica, agmt_obj);
|
||||
}
|
||||
diff --git a/ldap/servers/plugins/replication/repl_globals.c b/ldap/servers/plugins/replication/repl_globals.c
|
||||
index 24204a639..03547d9a7 100644
|
||||
--- a/ldap/servers/plugins/replication/repl_globals.c
|
||||
+++ b/ldap/servers/plugins/replication/repl_globals.c
|
||||
@@ -118,6 +118,9 @@ const char *type_nsds5ReplicaBootstrapBindDN = "nsds5ReplicaBootstrapBindDN";
|
||||
const char *type_nsds5ReplicaBootstrapCredentials = "nsds5ReplicaBootstrapCredentials";
|
||||
const char *type_nsds5ReplicaBootstrapBindMethod = "nsds5ReplicaBootstrapBindMethod";
|
||||
const char *type_nsds5ReplicaBootstrapTransportInfo = "nsds5ReplicaBootstrapTransportInfo";
|
||||
+const char *type_nsds5ReplicaLastInitStart = "nsds5replicaLastInitStart";
|
||||
+const char *type_nsds5ReplicaLastInitEnd = "nsds5replicaLastInitEnd";
|
||||
+const char *type_nsds5ReplicaLastInitStatus = "nsds5replicaLastInitStatus";
|
||||
|
||||
/* windows sync specific attributes */
|
||||
const char *type_nsds7WindowsReplicaArea = "nsds7WindowsReplicaSubtree";
|
||||
--
|
||||
2.48.1
|
||||
|
||||
951
SOURCES/Cargo-2.5.2-1.lock
Normal file
951
SOURCES/Cargo-2.5.2-1.lock
Normal file
@ -0,0 +1,951 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "addr2line"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
|
||||
dependencies = [
|
||||
"gimli",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "adler2"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
|
||||
|
||||
[[package]]
|
||||
name = "ahash"
|
||||
version = "0.8.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"getrandom 0.2.15",
|
||||
"once_cell",
|
||||
"version_check",
|
||||
"zerocopy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "allocator-api2"
|
||||
version = "0.2.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
|
||||
|
||||
[[package]]
|
||||
name = "arc-swap"
|
||||
version = "1.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
|
||||
|
||||
[[package]]
|
||||
name = "atty"
|
||||
version = "0.2.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
|
||||
|
||||
[[package]]
|
||||
name = "backtrace"
|
||||
version = "0.3.74"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"
|
||||
dependencies = [
|
||||
"addr2line",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"miniz_oxide",
|
||||
"object",
|
||||
"rustc-demangle",
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.13.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
||||
|
||||
[[package]]
|
||||
name = "cbindgen"
|
||||
version = "0.26.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da6bc11b07529f16944307272d5bd9b22530bc7d05751717c9d416586cedab49"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"heck",
|
||||
"indexmap",
|
||||
"log",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"syn 1.0.109",
|
||||
"tempfile",
|
||||
"toml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.2.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362"
|
||||
dependencies = [
|
||||
"jobserver",
|
||||
"libc",
|
||||
"shlex",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "3.2.25"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
|
||||
dependencies = [
|
||||
"atty",
|
||||
"bitflags 1.3.2",
|
||||
"clap_lex",
|
||||
"indexmap",
|
||||
"strsim",
|
||||
"termcolor",
|
||||
"textwrap",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_lex"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
|
||||
dependencies = [
|
||||
"os_str_bytes",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "concread"
|
||||
version = "0.5.5"
|
||||
source = "git+https://github.com/389ds/concread?branch=unstable_name_collisions#caae357e1b24dc65fac7320760d4833debf9bc33"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"arc-swap",
|
||||
"crossbeam-epoch",
|
||||
"crossbeam-queue",
|
||||
"crossbeam-utils",
|
||||
"lru",
|
||||
"smallvec",
|
||||
"sptr",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-epoch"
|
||||
version = "0.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
|
||||
dependencies = [
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-queue"
|
||||
version = "0.3.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
|
||||
dependencies = [
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-utils"
|
||||
version = "0.8.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
|
||||
|
||||
[[package]]
|
||||
name = "entryuuid"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"paste",
|
||||
"slapi_r_plugin",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "entryuuid_syntax"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"paste",
|
||||
"slapi_r_plugin",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "equivalent"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.3.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fastrand"
|
||||
version = "2.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
|
||||
|
||||
[[package]]
|
||||
name = "fernet"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "93804560e638370a8be6d59ce71ed803e55e230abdbf42598e666b41adda9b1f"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"byteorder",
|
||||
"getrandom 0.2.15",
|
||||
"openssl",
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foldhash"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
|
||||
dependencies = [
|
||||
"foreign-types-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types-shared"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.2.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"r-efi",
|
||||
"wasi 0.14.2+wasi-0.2.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.31.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.12.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.15.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
|
||||
dependencies = [
|
||||
"allocator-api2",
|
||||
"equivalent",
|
||||
"foldhash",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.1.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "1.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"hashbrown 0.12.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
||||
|
||||
[[package]]
|
||||
name = "jobserver"
|
||||
version = "0.1.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
|
||||
dependencies = [
|
||||
"getrandom 0.3.2",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.171"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
|
||||
|
||||
[[package]]
|
||||
name = "librnsslapd"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cbindgen",
|
||||
"libc",
|
||||
"slapd",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "librslapd"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cbindgen",
|
||||
"concread",
|
||||
"libc",
|
||||
"slapd",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.9.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
|
||||
|
||||
[[package]]
|
||||
name = "lru"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465"
|
||||
dependencies = [
|
||||
"hashbrown 0.15.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.7.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
||||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.8.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a"
|
||||
dependencies = [
|
||||
"adler2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.36.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.21.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
||||
|
||||
[[package]]
|
||||
name = "openssl"
|
||||
version = "0.10.72"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da"
|
||||
dependencies = [
|
||||
"bitflags 2.9.0",
|
||||
"cfg-if",
|
||||
"foreign-types",
|
||||
"libc",
|
||||
"once_cell",
|
||||
"openssl-macros",
|
||||
"openssl-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "openssl-macros"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.100",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "openssl-sys"
|
||||
version = "0.9.107"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"pkg-config",
|
||||
"vcpkg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "os_str_bytes"
|
||||
version = "6.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1"
|
||||
|
||||
[[package]]
|
||||
name = "paste"
|
||||
version = "0.1.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880"
|
||||
dependencies = [
|
||||
"paste-impl",
|
||||
"proc-macro-hack",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "paste-impl"
|
||||
version = "0.1.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6"
|
||||
dependencies = [
|
||||
"proc-macro-hack",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-lite"
|
||||
version = "0.2.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
|
||||
|
||||
[[package]]
|
||||
name = "pkg-config"
|
||||
version = "0.3.32"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-hack"
|
||||
version = "0.5.20+deprecated"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.94"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pwdchan"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"cc",
|
||||
"libc",
|
||||
"openssl",
|
||||
"paste",
|
||||
"slapi_r_plugin",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.40"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "r-efi"
|
||||
version = "5.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
|
||||
|
||||
[[package]]
|
||||
name = "rustc-demangle"
|
||||
version = "0.1.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "1.0.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf"
|
||||
dependencies = [
|
||||
"bitflags 2.9.0",
|
||||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.219"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.219"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.100",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.140"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"memchr",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shlex"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
||||
|
||||
[[package]]
|
||||
name = "slapd"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"fernet",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "slapi_r_plugin"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"paste",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
|
||||
|
||||
[[package]]
|
||||
name = "sptr"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a"
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.109"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.100"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tempfile"
|
||||
version = "3.19.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf"
|
||||
dependencies = [
|
||||
"fastrand",
|
||||
"getrandom 0.3.2",
|
||||
"once_cell",
|
||||
"rustix",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
|
||||
dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "textwrap"
|
||||
version = "0.16.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057"
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.44.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"pin-project-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.5.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing"
|
||||
version = "0.1.41"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
|
||||
dependencies = [
|
||||
"pin-project-lite",
|
||||
"tracing-attributes",
|
||||
"tracing-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-attributes"
|
||||
version = "0.1.28"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.100",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-core"
|
||||
version = "0.1.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
||||
|
||||
[[package]]
|
||||
name = "uuid"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
|
||||
dependencies = [
|
||||
"getrandom 0.2.15",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "vcpkg"
|
||||
version = "0.2.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.0+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.14.2+wasi-0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
|
||||
dependencies = [
|
||||
"wit-bindgen-rt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||
dependencies = [
|
||||
"winapi-i686-pc-windows-gnu",
|
||||
"winapi-x86_64-pc-windows-gnu",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-util"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
||||
dependencies = [
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.59.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
||||
dependencies = [
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm",
|
||||
"windows_aarch64_msvc",
|
||||
"windows_i686_gnu",
|
||||
"windows_i686_gnullvm",
|
||||
"windows_i686_msvc",
|
||||
"windows_x86_64_gnu",
|
||||
"windows_x86_64_gnullvm",
|
||||
"windows_x86_64_msvc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnullvm"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
||||
|
||||
[[package]]
|
||||
name = "wit-bindgen-rt"
|
||||
version = "0.39.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
|
||||
dependencies = [
|
||||
"bitflags 2.9.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
version = "0.7.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
|
||||
dependencies = [
|
||||
"zerocopy-derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy-derive"
|
||||
version = "0.7.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.100",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zeroize"
|
||||
version = "1.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
|
||||
dependencies = [
|
||||
"zeroize_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zeroize_derive"
|
||||
version = "1.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.100",
|
||||
]
|
||||
27
SOURCES/cargo.patch
Normal file
27
SOURCES/cargo.patch
Normal file
@ -0,0 +1,27 @@
|
||||
diff --git a/.cargo/config.in b/.cargo/config.in
|
||||
index d7d8ff4d4..d61993c54 100644
|
||||
--- a/.cargo/config.in
|
||||
+++ b/.cargo/config.in
|
||||
@@ -2,5 +2,10 @@
|
||||
registry = "https://github.com/rust-lang/crates.io-index"
|
||||
@rust_vendor_sources@
|
||||
|
||||
+[source."git+https://github.com/389ds/concread?branch=unstable_name_collisions"]
|
||||
+git = "https://github.com/389ds/concread"
|
||||
+branch = "unstable_name_collisions"
|
||||
+replace-with = "vendored-sources"
|
||||
+
|
||||
[source.vendored-sources]
|
||||
directory = "./vendor"
|
||||
diff --git a/src/Cargo.toml b/src/Cargo.toml
|
||||
index 95c1ae3f5..4daf9cf7b 100644
|
||||
--- a/src/Cargo.toml
|
||||
+++ b/src/Cargo.toml
|
||||
@@ -15,4 +15,6 @@ members = [
|
||||
panic = "abort"
|
||||
lto = true
|
||||
|
||||
+[patch.crates-io]
|
||||
+concread = { git = "https://github.com/389ds/concread", branch = "unstable_name_collisions" }
|
||||
|
||||
|
||||
@ -47,8 +47,8 @@ ExcludeArch: i686
|
||||
Summary: 389 Directory Server (base)
|
||||
Name: 389-ds-base
|
||||
Version: 2.5.2
|
||||
Release: 8%{?dist}
|
||||
License: GPL-3.0-or-later AND (0BSD OR Apache-2.0 OR MIT) AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT) AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT OR Zlib) AND (Apache-2.0 OR MIT) AND (CC-BY-4.0 AND MIT) AND (MIT OR Apache-2.0) AND Unicode-DFS-2016 AND (MIT OR CC0-1.0) AND (MIT OR Unlicense) AND 0BSD AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND MIT AND MIT AND ISC AND MPL-2.0 AND PSF-2.0
|
||||
Release: 9%{?dist}
|
||||
License: GPL-3.0-or-later WITH GPL-3.0-389-ds-base-exception AND (0BSD OR Apache-2.0 OR MIT) AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT) AND (Apache-2.0 OR BSD-2-Clause OR MIT) AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR LGPL-2.1-or-later OR MIT) AND (Apache-2.0 OR MIT OR Zlib) AND (Apache-2.0 OR MIT) AND (MIT OR Apache-2.0) AND Unicode-3.0 AND (MIT OR Unlicense) AND Apache-2.0 AND MIT AND MPL-2.0 AND Zlib
|
||||
URL: https://www.port389.org
|
||||
Conflicts: selinux-policy-base < 3.9.8
|
||||
Conflicts: freeipa-server < 4.0.3
|
||||
@ -58,94 +58,90 @@ Obsoletes: %{name}-legacy-tools-debuginfo < 1.4.4.6
|
||||
Provides: ldif2ldbm >= 0
|
||||
|
||||
##### Bundled cargo crates list - START #####
|
||||
Provides: bundled(crate(addr2line)) = 0.22.0
|
||||
Provides: bundled(crate(adler)) = 1.0.2
|
||||
Provides: bundled(crate(ahash)) = 0.7.8
|
||||
Provides: bundled(crate(addr2line)) = 0.24.2
|
||||
Provides: bundled(crate(adler2)) = 2.0.0
|
||||
Provides: bundled(crate(ahash)) = 0.8.11
|
||||
Provides: bundled(crate(allocator-api2)) = 0.2.21
|
||||
Provides: bundled(crate(arc-swap)) = 1.7.1
|
||||
Provides: bundled(crate(atty)) = 0.2.14
|
||||
Provides: bundled(crate(autocfg)) = 1.3.0
|
||||
Provides: bundled(crate(backtrace)) = 0.3.73
|
||||
Provides: bundled(crate(autocfg)) = 1.4.0
|
||||
Provides: bundled(crate(backtrace)) = 0.3.74
|
||||
Provides: bundled(crate(base64)) = 0.13.1
|
||||
Provides: bundled(crate(bitflags)) = 2.6.0
|
||||
Provides: bundled(crate(bitflags)) = 2.9.0
|
||||
Provides: bundled(crate(byteorder)) = 1.5.0
|
||||
Provides: bundled(crate(cbindgen)) = 0.26.0
|
||||
Provides: bundled(crate(cc)) = 1.1.7
|
||||
Provides: bundled(crate(cc)) = 1.2.19
|
||||
Provides: bundled(crate(cfg-if)) = 1.0.0
|
||||
Provides: bundled(crate(clap)) = 3.2.25
|
||||
Provides: bundled(crate(clap_lex)) = 0.2.4
|
||||
Provides: bundled(crate(concread)) = 0.2.21
|
||||
Provides: bundled(crate(crossbeam)) = 0.8.4
|
||||
Provides: bundled(crate(crossbeam-channel)) = 0.5.13
|
||||
Provides: bundled(crate(crossbeam-deque)) = 0.8.5
|
||||
Provides: bundled(crate(concread)) = 0.5.5
|
||||
Provides: bundled(crate(crossbeam-epoch)) = 0.9.18
|
||||
Provides: bundled(crate(crossbeam-queue)) = 0.3.11
|
||||
Provides: bundled(crate(crossbeam-utils)) = 0.8.20
|
||||
Provides: bundled(crate(errno)) = 0.3.9
|
||||
Provides: bundled(crate(fastrand)) = 2.1.0
|
||||
Provides: bundled(crate(crossbeam-queue)) = 0.3.12
|
||||
Provides: bundled(crate(crossbeam-utils)) = 0.8.21
|
||||
Provides: bundled(crate(equivalent)) = 1.0.2
|
||||
Provides: bundled(crate(errno)) = 0.3.11
|
||||
Provides: bundled(crate(fastrand)) = 2.3.0
|
||||
Provides: bundled(crate(fernet)) = 0.1.4
|
||||
Provides: bundled(crate(foldhash)) = 0.1.5
|
||||
Provides: bundled(crate(foreign-types)) = 0.3.2
|
||||
Provides: bundled(crate(foreign-types-shared)) = 0.1.1
|
||||
Provides: bundled(crate(getrandom)) = 0.2.15
|
||||
Provides: bundled(crate(gimli)) = 0.29.0
|
||||
Provides: bundled(crate(hashbrown)) = 0.12.3
|
||||
Provides: bundled(crate(getrandom)) = 0.3.2
|
||||
Provides: bundled(crate(gimli)) = 0.31.1
|
||||
Provides: bundled(crate(hashbrown)) = 0.15.2
|
||||
Provides: bundled(crate(heck)) = 0.4.1
|
||||
Provides: bundled(crate(hermit-abi)) = 0.1.19
|
||||
Provides: bundled(crate(indexmap)) = 1.9.3
|
||||
Provides: bundled(crate(instant)) = 0.1.13
|
||||
Provides: bundled(crate(itoa)) = 1.0.11
|
||||
Provides: bundled(crate(jobserver)) = 0.1.32
|
||||
Provides: bundled(crate(libc)) = 0.2.155
|
||||
Provides: bundled(crate(linux-raw-sys)) = 0.4.14
|
||||
Provides: bundled(crate(lock_api)) = 0.4.12
|
||||
Provides: bundled(crate(log)) = 0.4.22
|
||||
Provides: bundled(crate(lru)) = 0.7.8
|
||||
Provides: bundled(crate(itoa)) = 1.0.15
|
||||
Provides: bundled(crate(jobserver)) = 0.1.33
|
||||
Provides: bundled(crate(libc)) = 0.2.171
|
||||
Provides: bundled(crate(linux-raw-sys)) = 0.9.4
|
||||
Provides: bundled(crate(log)) = 0.4.27
|
||||
Provides: bundled(crate(lru)) = 0.13.0
|
||||
Provides: bundled(crate(memchr)) = 2.7.4
|
||||
Provides: bundled(crate(miniz_oxide)) = 0.7.4
|
||||
Provides: bundled(crate(object)) = 0.36.2
|
||||
Provides: bundled(crate(once_cell)) = 1.19.0
|
||||
Provides: bundled(crate(openssl)) = 0.10.66
|
||||
Provides: bundled(crate(miniz_oxide)) = 0.8.8
|
||||
Provides: bundled(crate(object)) = 0.36.7
|
||||
Provides: bundled(crate(once_cell)) = 1.21.3
|
||||
Provides: bundled(crate(openssl)) = 0.10.72
|
||||
Provides: bundled(crate(openssl-macros)) = 0.1.1
|
||||
Provides: bundled(crate(openssl-sys)) = 0.9.103
|
||||
Provides: bundled(crate(openssl-sys)) = 0.9.107
|
||||
Provides: bundled(crate(os_str_bytes)) = 6.6.1
|
||||
Provides: bundled(crate(parking_lot)) = 0.11.2
|
||||
Provides: bundled(crate(parking_lot_core)) = 0.8.6
|
||||
Provides: bundled(crate(paste)) = 0.1.18
|
||||
Provides: bundled(crate(paste-impl)) = 0.1.18
|
||||
Provides: bundled(crate(pin-project-lite)) = 0.2.14
|
||||
Provides: bundled(crate(pkg-config)) = 0.3.30
|
||||
Provides: bundled(crate(ppv-lite86)) = 0.2.18
|
||||
Provides: bundled(crate(pin-project-lite)) = 0.2.16
|
||||
Provides: bundled(crate(pkg-config)) = 0.3.32
|
||||
Provides: bundled(crate(proc-macro-hack)) = 0.5.20+deprecated
|
||||
Provides: bundled(crate(proc-macro2)) = 1.0.86
|
||||
Provides: bundled(crate(quote)) = 1.0.36
|
||||
Provides: bundled(crate(rand)) = 0.8.5
|
||||
Provides: bundled(crate(rand_chacha)) = 0.3.1
|
||||
Provides: bundled(crate(rand_core)) = 0.6.4
|
||||
Provides: bundled(crate(redox_syscall)) = 0.2.16
|
||||
Provides: bundled(crate(proc-macro2)) = 1.0.94
|
||||
Provides: bundled(crate(quote)) = 1.0.40
|
||||
Provides: bundled(crate(r-efi)) = 5.2.0
|
||||
Provides: bundled(crate(rustc-demangle)) = 0.1.24
|
||||
Provides: bundled(crate(rustix)) = 0.38.34
|
||||
Provides: bundled(crate(ryu)) = 1.0.18
|
||||
Provides: bundled(crate(scopeguard)) = 1.2.0
|
||||
Provides: bundled(crate(serde)) = 1.0.204
|
||||
Provides: bundled(crate(serde_derive)) = 1.0.204
|
||||
Provides: bundled(crate(serde_json)) = 1.0.121
|
||||
Provides: bundled(crate(smallvec)) = 1.13.2
|
||||
Provides: bundled(crate(rustix)) = 1.0.5
|
||||
Provides: bundled(crate(ryu)) = 1.0.20
|
||||
Provides: bundled(crate(serde)) = 1.0.219
|
||||
Provides: bundled(crate(serde_derive)) = 1.0.219
|
||||
Provides: bundled(crate(serde_json)) = 1.0.140
|
||||
Provides: bundled(crate(shlex)) = 1.3.0
|
||||
Provides: bundled(crate(smallvec)) = 1.15.0
|
||||
Provides: bundled(crate(sptr)) = 0.3.2
|
||||
Provides: bundled(crate(strsim)) = 0.10.0
|
||||
Provides: bundled(crate(syn)) = 2.0.72
|
||||
Provides: bundled(crate(tempfile)) = 3.10.1
|
||||
Provides: bundled(crate(syn)) = 2.0.100
|
||||
Provides: bundled(crate(tempfile)) = 3.19.1
|
||||
Provides: bundled(crate(termcolor)) = 1.4.1
|
||||
Provides: bundled(crate(textwrap)) = 0.16.1
|
||||
Provides: bundled(crate(tokio)) = 1.39.2
|
||||
Provides: bundled(crate(tokio-macros)) = 2.4.0
|
||||
Provides: bundled(crate(textwrap)) = 0.16.2
|
||||
Provides: bundled(crate(tokio)) = 1.44.2
|
||||
Provides: bundled(crate(toml)) = 0.5.11
|
||||
Provides: bundled(crate(unicode-ident)) = 1.0.12
|
||||
Provides: bundled(crate(tracing)) = 0.1.41
|
||||
Provides: bundled(crate(tracing-attributes)) = 0.1.28
|
||||
Provides: bundled(crate(tracing-core)) = 0.1.33
|
||||
Provides: bundled(crate(unicode-ident)) = 1.0.18
|
||||
Provides: bundled(crate(uuid)) = 0.8.2
|
||||
Provides: bundled(crate(vcpkg)) = 0.2.15
|
||||
Provides: bundled(crate(version_check)) = 0.9.5
|
||||
Provides: bundled(crate(wasi)) = 0.11.0+wasi_snapshot_preview1
|
||||
Provides: bundled(crate(wasi)) = 0.14.2+wasi_0.2.4
|
||||
Provides: bundled(crate(winapi)) = 0.3.9
|
||||
Provides: bundled(crate(winapi-i686-pc-windows-gnu)) = 0.4.0
|
||||
Provides: bundled(crate(winapi-util)) = 0.1.8
|
||||
Provides: bundled(crate(winapi-util)) = 0.1.9
|
||||
Provides: bundled(crate(winapi-x86_64-pc-windows-gnu)) = 0.4.0
|
||||
Provides: bundled(crate(windows-sys)) = 0.52.0
|
||||
Provides: bundled(crate(windows-sys)) = 0.59.0
|
||||
Provides: bundled(crate(windows-targets)) = 0.52.6
|
||||
Provides: bundled(crate(windows_aarch64_gnullvm)) = 0.52.6
|
||||
Provides: bundled(crate(windows_aarch64_msvc)) = 0.52.6
|
||||
@ -155,190 +151,11 @@ Provides: bundled(crate(windows_i686_msvc)) = 0.52.6
|
||||
Provides: bundled(crate(windows_x86_64_gnu)) = 0.52.6
|
||||
Provides: bundled(crate(windows_x86_64_gnullvm)) = 0.52.6
|
||||
Provides: bundled(crate(windows_x86_64_msvc)) = 0.52.6
|
||||
Provides: bundled(crate(zerocopy)) = 0.6.6
|
||||
Provides: bundled(crate(zerocopy-derive)) = 0.6.6
|
||||
Provides: bundled(crate(wit-bindgen-rt)) = 0.39.0
|
||||
Provides: bundled(crate(zerocopy)) = 0.7.35
|
||||
Provides: bundled(crate(zerocopy-derive)) = 0.7.35
|
||||
Provides: bundled(crate(zeroize)) = 1.8.1
|
||||
Provides: bundled(crate(zeroize_derive)) = 1.4.2
|
||||
Provides: bundled(npm(@aashutoshrathi/word-wrap)) = 1.2.6
|
||||
Provides: bundled(npm(@eslint-community/eslint-utils)) = 4.4.0
|
||||
Provides: bundled(npm(@eslint-community/regexpp)) = 4.5.1
|
||||
Provides: bundled(npm(@eslint/eslintrc)) = 2.0.3
|
||||
Provides: bundled(npm(@eslint/js)) = 8.42.0
|
||||
Provides: bundled(npm(@fortawesome/fontawesome-common-types)) = 0.2.36
|
||||
Provides: bundled(npm(@fortawesome/fontawesome-svg-core)) = 1.2.36
|
||||
Provides: bundled(npm(@fortawesome/free-solid-svg-icons)) = 5.15.4
|
||||
Provides: bundled(npm(@fortawesome/react-fontawesome)) = 0.1.19
|
||||
Provides: bundled(npm(@humanwhocodes/config-array)) = 0.11.10
|
||||
Provides: bundled(npm(@humanwhocodes/module-importer)) = 1.0.1
|
||||
Provides: bundled(npm(@humanwhocodes/object-schema)) = 1.2.1
|
||||
Provides: bundled(npm(@nodelib/fs.scandir)) = 2.1.5
|
||||
Provides: bundled(npm(@nodelib/fs.stat)) = 2.0.5
|
||||
Provides: bundled(npm(@nodelib/fs.walk)) = 1.2.8
|
||||
Provides: bundled(npm(@patternfly/patternfly)) = 4.224.2
|
||||
Provides: bundled(npm(@patternfly/react-charts)) = 6.94.19
|
||||
Provides: bundled(npm(@patternfly/react-core)) = 4.276.8
|
||||
Provides: bundled(npm(@patternfly/react-icons)) = 4.93.6
|
||||
Provides: bundled(npm(@patternfly/react-styles)) = 4.92.6
|
||||
Provides: bundled(npm(@patternfly/react-table)) = 4.113.0
|
||||
Provides: bundled(npm(@patternfly/react-tokens)) = 4.94.6
|
||||
Provides: bundled(npm(@types/d3-array)) = 3.0.5
|
||||
Provides: bundled(npm(@types/d3-color)) = 3.1.0
|
||||
Provides: bundled(npm(@types/d3-ease)) = 3.0.0
|
||||
Provides: bundled(npm(@types/d3-interpolate)) = 3.0.1
|
||||
Provides: bundled(npm(@types/d3-path)) = 3.0.0
|
||||
Provides: bundled(npm(@types/d3-scale)) = 4.0.3
|
||||
Provides: bundled(npm(@types/d3-shape)) = 3.1.1
|
||||
Provides: bundled(npm(@types/d3-time)) = 3.0.0
|
||||
Provides: bundled(npm(@types/d3-timer)) = 3.0.0
|
||||
Provides: bundled(npm(acorn)) = 8.8.2
|
||||
Provides: bundled(npm(acorn-jsx)) = 5.3.2
|
||||
Provides: bundled(npm(ajv)) = 6.12.6
|
||||
Provides: bundled(npm(ansi-regex)) = 5.0.1
|
||||
Provides: bundled(npm(ansi-styles)) = 4.3.0
|
||||
Provides: bundled(npm(argparse)) = 2.0.1
|
||||
Provides: bundled(npm(attr-accept)) = 1.1.3
|
||||
Provides: bundled(npm(balanced-match)) = 1.0.2
|
||||
Provides: bundled(npm(brace-expansion)) = 1.1.11
|
||||
Provides: bundled(npm(callsites)) = 3.1.0
|
||||
Provides: bundled(npm(chalk)) = 4.1.2
|
||||
Provides: bundled(npm(color-convert)) = 2.0.1
|
||||
Provides: bundled(npm(color-name)) = 1.1.4
|
||||
Provides: bundled(npm(concat-map)) = 0.0.1
|
||||
Provides: bundled(npm(core-js)) = 2.6.12
|
||||
Provides: bundled(npm(cross-spawn)) = 7.0.3
|
||||
Provides: bundled(npm(d3-array)) = 3.2.4
|
||||
Provides: bundled(npm(d3-color)) = 3.1.0
|
||||
Provides: bundled(npm(d3-ease)) = 3.0.1
|
||||
Provides: bundled(npm(d3-format)) = 3.1.0
|
||||
Provides: bundled(npm(d3-interpolate)) = 3.0.1
|
||||
Provides: bundled(npm(d3-path)) = 3.1.0
|
||||
Provides: bundled(npm(d3-scale)) = 4.0.2
|
||||
Provides: bundled(npm(d3-shape)) = 3.2.0
|
||||
Provides: bundled(npm(d3-time)) = 3.1.0
|
||||
Provides: bundled(npm(d3-time-format)) = 4.1.0
|
||||
Provides: bundled(npm(d3-timer)) = 3.0.1
|
||||
Provides: bundled(npm(debug)) = 4.3.4
|
||||
Provides: bundled(npm(deep-is)) = 0.1.4
|
||||
Provides: bundled(npm(delaunator)) = 4.0.1
|
||||
Provides: bundled(npm(delaunay-find)) = 0.0.6
|
||||
Provides: bundled(npm(doctrine)) = 3.0.0
|
||||
Provides: bundled(npm(encoding)) = 0.1.13
|
||||
Provides: bundled(npm(escape-string-regexp)) = 4.0.0
|
||||
Provides: bundled(npm(eslint)) = 8.42.0
|
||||
Provides: bundled(npm(eslint-plugin-react-hooks)) = 4.6.0
|
||||
Provides: bundled(npm(eslint-scope)) = 7.2.0
|
||||
Provides: bundled(npm(eslint-visitor-keys)) = 3.4.1
|
||||
Provides: bundled(npm(espree)) = 9.5.2
|
||||
Provides: bundled(npm(esquery)) = 1.5.0
|
||||
Provides: bundled(npm(esrecurse)) = 4.3.0
|
||||
Provides: bundled(npm(estraverse)) = 5.3.0
|
||||
Provides: bundled(npm(esutils)) = 2.0.3
|
||||
Provides: bundled(npm(fast-deep-equal)) = 3.1.3
|
||||
Provides: bundled(npm(fast-json-stable-stringify)) = 2.1.0
|
||||
Provides: bundled(npm(fast-levenshtein)) = 2.0.6
|
||||
Provides: bundled(npm(fastq)) = 1.15.0
|
||||
Provides: bundled(npm(file-entry-cache)) = 6.0.1
|
||||
Provides: bundled(npm(file-selector)) = 0.1.19
|
||||
Provides: bundled(npm(find-up)) = 5.0.0
|
||||
Provides: bundled(npm(flat-cache)) = 3.0.4
|
||||
Provides: bundled(npm(flatted)) = 3.2.7
|
||||
Provides: bundled(npm(focus-trap)) = 6.9.2
|
||||
Provides: bundled(npm(fs.realpath)) = 1.0.0
|
||||
Provides: bundled(npm(gettext-parser)) = 2.0.0
|
||||
Provides: bundled(npm(glob)) = 7.2.3
|
||||
Provides: bundled(npm(glob-parent)) = 6.0.2
|
||||
Provides: bundled(npm(globals)) = 13.20.0
|
||||
Provides: bundled(npm(graphemer)) = 1.4.0
|
||||
Provides: bundled(npm(has-flag)) = 4.0.0
|
||||
Provides: bundled(npm(hoist-non-react-statics)) = 3.3.2
|
||||
Provides: bundled(npm(iconv-lite)) = 0.6.3
|
||||
Provides: bundled(npm(ignore)) = 5.2.4
|
||||
Provides: bundled(npm(import-fresh)) = 3.3.0
|
||||
Provides: bundled(npm(imurmurhash)) = 0.1.4
|
||||
Provides: bundled(npm(inflight)) = 1.0.6
|
||||
Provides: bundled(npm(inherits)) = 2.0.4
|
||||
Provides: bundled(npm(internmap)) = 2.0.3
|
||||
Provides: bundled(npm(is-extglob)) = 2.1.1
|
||||
Provides: bundled(npm(is-glob)) = 4.0.3
|
||||
Provides: bundled(npm(is-path-inside)) = 3.0.3
|
||||
Provides: bundled(npm(isexe)) = 2.0.0
|
||||
Provides: bundled(npm(js-tokens)) = 4.0.0
|
||||
Provides: bundled(npm(js-yaml)) = 4.1.0
|
||||
Provides: bundled(npm(json-schema-traverse)) = 0.4.1
|
||||
Provides: bundled(npm(json-stable-stringify-without-jsonify)) = 1.0.1
|
||||
Provides: bundled(npm(json-stringify-safe)) = 5.0.1
|
||||
Provides: bundled(npm(levn)) = 0.4.1
|
||||
Provides: bundled(npm(locate-path)) = 6.0.0
|
||||
Provides: bundled(npm(lodash)) = 4.17.21
|
||||
Provides: bundled(npm(lodash.merge)) = 4.6.2
|
||||
Provides: bundled(npm(loose-envify)) = 1.4.0
|
||||
Provides: bundled(npm(minimatch)) = 3.1.2
|
||||
Provides: bundled(npm(ms)) = 2.1.2
|
||||
Provides: bundled(npm(natural-compare)) = 1.4.0
|
||||
Provides: bundled(npm(object-assign)) = 4.1.1
|
||||
Provides: bundled(npm(once)) = 1.4.0
|
||||
Provides: bundled(npm(optionator)) = 0.9.3
|
||||
Provides: bundled(npm(p-limit)) = 3.1.0
|
||||
Provides: bundled(npm(p-locate)) = 5.0.0
|
||||
Provides: bundled(npm(parent-module)) = 1.0.1
|
||||
Provides: bundled(npm(path-exists)) = 4.0.0
|
||||
Provides: bundled(npm(path-is-absolute)) = 1.0.1
|
||||
Provides: bundled(npm(path-key)) = 3.1.1
|
||||
Provides: bundled(npm(popper.js)) = 1.16.1
|
||||
Provides: bundled(npm(prelude-ls)) = 1.2.1
|
||||
Provides: bundled(npm(prop-types)) = 15.8.1
|
||||
Provides: bundled(npm(prop-types-extra)) = 1.1.1
|
||||
Provides: bundled(npm(punycode)) = 2.3.0
|
||||
Provides: bundled(npm(queue-microtask)) = 1.2.3
|
||||
Provides: bundled(npm(react)) = 17.0.2
|
||||
Provides: bundled(npm(react-dom)) = 17.0.2
|
||||
Provides: bundled(npm(react-dropzone)) = 9.0.0
|
||||
Provides: bundled(npm(react-fast-compare)) = 3.2.2
|
||||
Provides: bundled(npm(react-is)) = 16.13.1
|
||||
Provides: bundled(npm(resolve-from)) = 4.0.0
|
||||
Provides: bundled(npm(reusify)) = 1.0.4
|
||||
Provides: bundled(npm(rimraf)) = 3.0.2
|
||||
Provides: bundled(npm(run-parallel)) = 1.2.0
|
||||
Provides: bundled(npm(safe-buffer)) = 5.2.1
|
||||
Provides: bundled(npm(safer-buffer)) = 2.1.2
|
||||
Provides: bundled(npm(scheduler)) = 0.20.2
|
||||
Provides: bundled(npm(shebang-command)) = 2.0.0
|
||||
Provides: bundled(npm(shebang-regex)) = 3.0.0
|
||||
Provides: bundled(npm(strip-ansi)) = 6.0.1
|
||||
Provides: bundled(npm(strip-json-comments)) = 3.1.1
|
||||
Provides: bundled(npm(supports-color)) = 7.2.0
|
||||
Provides: bundled(npm(tabbable)) = 5.3.3
|
||||
Provides: bundled(npm(text-table)) = 0.2.0
|
||||
Provides: bundled(npm(tippy.js)) = 5.1.2
|
||||
Provides: bundled(npm(tslib)) = 2.5.3
|
||||
Provides: bundled(npm(type-check)) = 0.4.0
|
||||
Provides: bundled(npm(type-fest)) = 0.20.2
|
||||
Provides: bundled(npm(uri-js)) = 4.4.1
|
||||
Provides: bundled(npm(victory-area)) = 36.6.10
|
||||
Provides: bundled(npm(victory-axis)) = 36.6.10
|
||||
Provides: bundled(npm(victory-bar)) = 36.6.10
|
||||
Provides: bundled(npm(victory-brush-container)) = 36.6.10
|
||||
Provides: bundled(npm(victory-chart)) = 36.6.10
|
||||
Provides: bundled(npm(victory-core)) = 36.6.10
|
||||
Provides: bundled(npm(victory-create-container)) = 36.6.10
|
||||
Provides: bundled(npm(victory-cursor-container)) = 36.6.10
|
||||
Provides: bundled(npm(victory-group)) = 36.6.10
|
||||
Provides: bundled(npm(victory-legend)) = 36.6.10
|
||||
Provides: bundled(npm(victory-line)) = 36.6.10
|
||||
Provides: bundled(npm(victory-pie)) = 36.6.10
|
||||
Provides: bundled(npm(victory-polar-axis)) = 36.6.10
|
||||
Provides: bundled(npm(victory-scatter)) = 36.6.10
|
||||
Provides: bundled(npm(victory-selection-container)) = 36.6.10
|
||||
Provides: bundled(npm(victory-shared-events)) = 36.6.10
|
||||
Provides: bundled(npm(victory-stack)) = 36.6.10
|
||||
Provides: bundled(npm(victory-tooltip)) = 36.6.10
|
||||
Provides: bundled(npm(victory-vendor)) = 36.6.10
|
||||
Provides: bundled(npm(victory-voronoi-container)) = 36.6.10
|
||||
Provides: bundled(npm(victory-zoom-container)) = 36.6.10
|
||||
Provides: bundled(npm(warning)) = 4.0.3
|
||||
Provides: bundled(npm(which)) = 2.0.2
|
||||
Provides: bundled(npm(wrappy)) = 1.0.2
|
||||
Provides: bundled(npm(yocto-queue)) = 0.1.0
|
||||
##### Bundled cargo crates list - END #####
|
||||
|
||||
BuildRequires: nspr-devel >= 4.32
|
||||
@ -468,6 +285,8 @@ Source2: %{name}-devel.README
|
||||
Source3: https://github.com/jemalloc/%{jemalloc_name}/releases/download/%{jemalloc_ver}/%{jemalloc_name}-%{jemalloc_ver}.tar.bz2
|
||||
%endif
|
||||
Source4: 389-ds-base.sysusers
|
||||
Source5: vendor-%{version}-1.tar.gz
|
||||
Source6: Cargo-%{version}-1.lock
|
||||
|
||||
Patch: 0001-Issue-6312-In-branch-2.5-healthcheck-report-an-inval.patch
|
||||
Patch: 0002-Issue-6316-lmdb-reindex-is-broken-if-index-type-is-s.patch
|
||||
@ -496,6 +315,11 @@ Patch: 0024-Issue-6485-Fix-double-free-in-USN-cleanup-task.patch
|
||||
Patch: 0025-Issue-6427-fix-various-memory-leaks.patch
|
||||
Patch: 0026-Issue-6442-Fix-latest-covscan-memory-leaks.patch
|
||||
Patch: 0027-Issue-6442-Fix-latest-covscan-memory-leaks-part-2.patch
|
||||
Patch: 0028-Issue-6553-Update-concread-to-0.5.4-and-refactor-sta.patch
|
||||
Patch: 0029-Security-fix-for-CVE-2025-2487.patch
|
||||
Patch: 0030-Issue-6470-Some-replication-status-data-are-reset-up.patch
|
||||
|
||||
Patch: cargo.patch
|
||||
|
||||
%description
|
||||
389 Directory Server is an LDAPv3 compliant server. The base package includes
|
||||
@ -598,6 +422,9 @@ A cockpit UI Plugin for configuring and administering the 389 Directory Server
|
||||
%prep
|
||||
|
||||
%autosetup -p1 -n %{name}-%{version}
|
||||
rm -rf vendor
|
||||
tar xzf %{SOURCE5}
|
||||
cp %{SOURCE6} src/Cargo.lock
|
||||
%if %{bundle_jemalloc}
|
||||
%setup -q -n %{name}-%{version} -T -D -b 3
|
||||
%endif
|
||||
@ -938,6 +765,11 @@ exit 0
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Mon Apr 14 2025 Viktor Ashirov <vashirov@redhat.com> - 2.5.2-9
|
||||
- Resolves: RHEL-83874 - CVE-2025-2487 389-ds-base: null pointer dereference leads to denial of service [rhel-9.5.z]
|
||||
- Resolves: RHEL-80712 - Increased memory consumption caused by NDN cache [rhel-9.5.z]
|
||||
- Resolves: RHEL-87194 - Some replication status data are reset upon a restart. [rhel-9.5.z]
|
||||
|
||||
* Wed Mar 05 2025 Viktor Ashirov <vashirov@redhat.com> - 2.5.2-8
|
||||
- Fix changelog
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user