diff --git a/Cargo.lock b/Cargo.lock index 2cd5e62e7..c22bfb148 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1030,7 +1030,7 @@ dependencies = [ [[package]] name = "daemon" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "clap", "clap_complete", @@ -2866,7 +2866,7 @@ dependencies = [ [[package]] name = "kanidm-ipa-sync" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "chrono", "clap", @@ -2890,7 +2890,7 @@ dependencies = [ [[package]] name = "kanidm-ldap-sync" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "chrono", "clap", @@ -2915,7 +2915,7 @@ dependencies = [ [[package]] name = "kanidm_build_profiles" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "base64 0.22.1", "gix", @@ -2926,7 +2926,7 @@ dependencies = [ [[package]] name = "kanidm_client" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "compact_jwt", "http 1.2.0", @@ -2948,7 +2948,7 @@ dependencies = [ [[package]] name = "kanidm_device_flow" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "anyhow", "kanidm_proto", @@ -2961,7 +2961,7 @@ dependencies = [ [[package]] name = "kanidm_lib_crypto" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "argon2", "base64 0.22.1", @@ -2982,14 +2982,14 @@ dependencies = [ [[package]] name = "kanidm_lib_file_permissions" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "kanidm_utils_users", ] [[package]] name = "kanidm_proto" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "base32", "base64 0.22.1", @@ -3015,7 +3015,7 @@ dependencies = [ [[package]] name = "kanidm_tools" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "anyhow", "clap", @@ -3046,7 +3046,7 @@ dependencies = [ [[package]] name = "kanidm_unix_common" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "bytes", "csv", @@ -3065,7 +3065,7 @@ dependencies = [ [[package]] name = "kanidm_unix_int" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "async-trait", "bytes", @@ -3106,14 +3106,14 @@ dependencies = [ [[package]] name = "kanidm_utils_users" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "libc", ] [[package]] name = "kanidmd_core" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "askama", "askama_axum", @@ -3168,7 +3168,7 @@ dependencies = [ [[package]] name = "kanidmd_lib" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "base64 0.22.1", "base64urlsafedata", @@ -3221,7 +3221,7 @@ dependencies = [ [[package]] name = "kanidmd_lib_macros" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "proc-macro2", "quote", @@ -3230,7 +3230,7 @@ dependencies = [ [[package]] name = "kanidmd_testkit" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "compact_jwt", "escargot", @@ -3702,7 +3702,7 @@ dependencies = [ [[package]] name = "nss_kanidm" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "cc", "kanidm_unix_common", @@ -4062,7 +4062,7 @@ dependencies = [ [[package]] name = "orca" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "async-trait", "chrono", @@ -4099,7 +4099,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pam_kanidm" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "kanidm_unix_common", "libc", @@ -4917,7 +4917,7 @@ dependencies = [ [[package]] name = "scim_proto" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "base64urlsafedata", "peg", @@ -5198,7 +5198,7 @@ dependencies = [ [[package]] name = "sketching" -version = "1.5.0-dev" +version = "1.6.0-dev" dependencies = [ "num_enum", "opentelemetry", diff --git a/Cargo.toml b/Cargo.toml index b07522519..9d0634dd1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace.package] -version = "1.5.0-dev" +version = "1.6.0-dev" authors = [ "William Brown ", "James Hodgkinson ", @@ -123,20 +123,20 @@ codegen-units = 256 libnss = { git = "https://github.com/Firstyear/libnss-rs.git", branch = "20250207-freebsd" } [workspace.dependencies] -kanidmd_core = { path = "./server/core", version = "=1.5.0-dev" } -kanidmd_lib = { path = "./server/lib", version = "=1.5.0-dev" } -kanidmd_lib_macros = { path = "./server/lib-macros", version = "=1.5.0-dev" } -kanidmd_testkit = { path = "./server/testkit", version = "=1.5.0-dev" } -kanidm_build_profiles = { path = "./libs/profiles", version = "=1.5.0-dev" } -kanidm_client = { path = "./libs/client", version = "=1.5.0-dev" } +kanidmd_core = { path = "./server/core", version = "=1.6.0-dev" } +kanidmd_lib = { path = "./server/lib", version = "=1.6.0-dev" } +kanidmd_lib_macros = { path = "./server/lib-macros", version = "=1.6.0-dev" } +kanidmd_testkit = { path = "./server/testkit", version = "=1.6.0-dev" } +kanidm_build_profiles = { path = "./libs/profiles", version = "=1.6.0-dev" } +kanidm_client = { path = "./libs/client", version = "=1.6.0-dev" } kanidm-hsm-crypto = "^0.2.0" -kanidm_lib_crypto = { path = "./libs/crypto", version = "=1.5.0-dev" } -kanidm_lib_file_permissions = { path = "./libs/file_permissions", version = "=1.5.0-dev" } -kanidm_proto = { path = "./proto", version = "=1.5.0-dev" } -kanidm_unix_common = { path = "./unix_integration/common", version = "=1.5.0-dev" } -kanidm_utils_users = { path = "./libs/users", version = "=1.5.0-dev" } -scim_proto = { path = "./libs/scim_proto", version = "=1.5.0-dev" } -sketching = { path = "./libs/sketching", version = "=1.5.0-dev" } +kanidm_lib_crypto = { path = "./libs/crypto", version = "=1.6.0-dev" } +kanidm_lib_file_permissions = { path = "./libs/file_permissions", version = "=1.6.0-dev" } +kanidm_proto = { path = "./proto", version = "=1.6.0-dev" } +kanidm_unix_common = { path = "./unix_integration/common", version = "=1.6.0-dev" } +kanidm_utils_users = { path = "./libs/users", version = "=1.6.0-dev" } +scim_proto = { path = "./libs/scim_proto", version = "=1.6.0-dev" } +sketching = { path = "./libs/sketching", version = "=1.6.0-dev" } anyhow = { version = "1.0.95" } argon2 = { version = "0.5.3", features = ["alloc"] } diff --git a/server/lib/src/constants/mod.rs b/server/lib/src/constants/mod.rs index 95e1346d4..18dba211c 100644 --- a/server/lib/src/constants/mod.rs +++ b/server/lib/src/constants/mod.rs @@ -79,22 +79,28 @@ pub const PATCH_LEVEL_2: u32 = 2; /// Deprecated as of 1.8.0 pub const DOMAIN_LEVEL_10: DomainVersion = 10; +/// Domain Level introduced with 1.7.0. +/// Deprecated as of 1.9.0 +pub const DOMAIN_LEVEL_11: DomainVersion = 11; + // The minimum level that we can re-migrate from. // This should be DOMAIN_TGT_LEVEL minus 2 -pub const DOMAIN_MIN_REMIGRATION_LEVEL: DomainVersion = DOMAIN_LEVEL_7; +pub const DOMAIN_MIN_REMIGRATION_LEVEL: DomainVersion = DOMAIN_TGT_LEVEL - 2; // The minimum supported domain functional level (for replication) pub const DOMAIN_MIN_LEVEL: DomainVersion = DOMAIN_TGT_LEVEL; // The previous releases domain functional level -pub const DOMAIN_PREVIOUS_TGT_LEVEL: DomainVersion = DOMAIN_LEVEL_8; +pub const DOMAIN_PREVIOUS_TGT_LEVEL: DomainVersion = DOMAIN_TGT_LEVEL - 1; // The target supported domain functional level. During development this is -// the NEXT level that users will upgrade too. -pub const DOMAIN_TGT_LEVEL: DomainVersion = DOMAIN_LEVEL_9; +// the NEXT level that users will upgrade too. In other words if we are +// developing 1.6.0-dev, then we need to set TGT_LEVEL to 10 which is +// the corresponding level. +pub const DOMAIN_TGT_LEVEL: DomainVersion = DOMAIN_LEVEL_10; // The current patch level if any out of band fixes are required. pub const DOMAIN_TGT_PATCH_LEVEL: u32 = PATCH_LEVEL_2; // The target domain functional level for the SUBSEQUENT release/dev cycle. -pub const DOMAIN_TGT_NEXT_LEVEL: DomainVersion = DOMAIN_LEVEL_10; +pub const DOMAIN_TGT_NEXT_LEVEL: DomainVersion = DOMAIN_TGT_LEVEL + 1; // The maximum supported domain functional level -pub const DOMAIN_MAX_LEVEL: DomainVersion = DOMAIN_LEVEL_10; +pub const DOMAIN_MAX_LEVEL: DomainVersion = DOMAIN_LEVEL_11; // On test builds define to 60 seconds #[cfg(test)] diff --git a/server/lib/src/server/migrations.rs b/server/lib/src/server/migrations.rs index b402df520..10bd56d91 100644 --- a/server/lib/src/server/migrations.rs +++ b/server/lib/src/server/migrations.rs @@ -760,7 +760,18 @@ impl QueryServerWriteTransaction<'_> { #[instrument(level = "info", skip_all)] pub(crate) fn migrate_domain_9_to_10(&mut self) -> Result<(), OperationError> { if !cfg!(test) && DOMAIN_TGT_LEVEL < DOMAIN_LEVEL_9 { - error!("Unable to raise domain level from 8 to 9."); + error!("Unable to raise domain level from 9 to 10."); + return Err(OperationError::MG0004DomainLevelInDevelopment); + } + + Ok(()) + } + + /// Migration domain level 10 to 11 (1.7.0) + #[instrument(level = "info", skip_all)] + pub(crate) fn migrate_domain_10_to_11(&mut self) -> Result<(), OperationError> { + if !cfg!(test) && DOMAIN_TGT_LEVEL < DOMAIN_LEVEL_10 { + error!("Unable to raise domain level from 10 to 11."); return Err(OperationError::MG0004DomainLevelInDevelopment); } @@ -1489,4 +1500,7 @@ mod tests { #[qs_test(domain_level=DOMAIN_LEVEL_9)] async fn test_migrations_dl9_dl10(_server: &QueryServer) {} + + #[qs_test(domain_level=DOMAIN_LEVEL_10)] + async fn test_migrations_dl10_dl11(_server: &QueryServer) {} } diff --git a/server/lib/src/server/mod.rs b/server/lib/src/server/mod.rs index f9b2e2012..51ad616d1 100644 --- a/server/lib/src/server/mod.rs +++ b/server/lib/src/server/mod.rs @@ -2369,6 +2369,10 @@ impl<'a> QueryServerWriteTransaction<'a> { self.migrate_domain_9_to_10()?; } + if previous_version <= DOMAIN_LEVEL_10 && domain_info_version >= DOMAIN_LEVEL_11 { + self.migrate_domain_10_to_11()?; + } + // This is here to catch when we increase domain levels but didn't create the migration // hooks. If this fails it probably means you need to add another migration hook // in the above.