mirror of
https://github.com/kanidm/kanidm.git
synced 2025-02-23 20:47:01 +01:00
deploy: 723c428e37
This commit is contained in:
parent
a15dad1c0b
commit
f7eb13ea4e
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `config_security_checks` fn in crate `kanidm_ipa_sync`."><meta name="keywords" content="rust, rustlang, rust-lang, config_security_checks"><title>config_security_checks in kanidm_ipa_sync - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In kanidm_ipa_sync</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="index.html">kanidm_ipa_sync</a>::<wbr><a class="fn" href="#">config_security_checks</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_ipa_sync/main.rs.html#874-909">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub(crate) fn config_security_checks(cfg_path: &<a class="struct" href="https://doc.rust-lang.org/1.66.1/std/path/struct.Path.html" title="struct std::path::Path">Path</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.66.1/std/primitive.bool.html">bool</a></code></pre></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="kanidm_ipa_sync" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `config_security_checks` fn in crate `kanidm_ipa_sync`."><meta name="keywords" content="rust, rustlang, rust-lang, config_security_checks"><title>config_security_checks in kanidm_ipa_sync - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In kanidm_ipa_sync</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="index.html">kanidm_ipa_sync</a>::<wbr><a class="fn" href="#">config_security_checks</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_ipa_sync/main.rs.html#874-912">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub(crate) fn config_security_checks(cfg_path: &<a class="struct" href="https://doc.rust-lang.org/1.66.1/std/path/struct.Path.html" title="struct std::path::Path">Path</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.66.1/std/primitive.bool.html">bool</a></code></pre></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="kanidm_ipa_sync" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
|
@ -1 +1 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `main` fn in crate `kanidm_ipa_sync`."><meta name="keywords" content="rust, rustlang, rust-lang, main"><title>main in kanidm_ipa_sync - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In kanidm_ipa_sync</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="index.html">kanidm_ipa_sync</a>::<wbr><a class="fn" href="#">main</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_ipa_sync/main.rs.html#911-971">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub(crate) fn main()</code></pre></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="kanidm_ipa_sync" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `main` fn in crate `kanidm_ipa_sync`."><meta name="keywords" content="rust, rustlang, rust-lang, main"><title>main in kanidm_ipa_sync - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In kanidm_ipa_sync</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="index.html">kanidm_ipa_sync</a>::<wbr><a class="fn" href="#">main</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_ipa_sync/main.rs.html#914-974">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub(crate) fn main()</code></pre></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="kanidm_ipa_sync" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
|
@ -1 +1 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `run_sync` fn in crate `kanidm_ipa_sync`."><meta name="keywords" content="rust, rustlang, rust-lang, run_sync"><title>run_sync in kanidm_ipa_sync - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In kanidm_ipa_sync</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="index.html">kanidm_ipa_sync</a>::<wbr><a class="fn" href="#">run_sync</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_ipa_sync/main.rs.html#268-479">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub(crate) async fn run_sync(<br> cb: <a class="struct" href="../kanidm_client/struct.KanidmClientBuilder.html" title="struct kanidm_client::KanidmClientBuilder">KanidmClientBuilder</a>,<br> sync_config: &<a class="struct" href="config/struct.Config.html" title="struct kanidm_ipa_sync::config::Config">Config</a>,<br> opt: &<a class="struct" href="struct.Opt.html" title="struct kanidm_ipa_sync::Opt">Opt</a><br>) -> <a class="enum" href="https://doc.rust-lang.org/1.66.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.66.1/std/primitive.unit.html">()</a>, <a class="enum" href="error/enum.SyncError.html" title="enum kanidm_ipa_sync::error::SyncError">SyncError</a>></code></pre></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="kanidm_ipa_sync" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `run_sync` fn in crate `kanidm_ipa_sync`."><meta name="keywords" content="rust, rustlang, rust-lang, run_sync"><title>run_sync in kanidm_ipa_sync - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In kanidm_ipa_sync</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="index.html">kanidm_ipa_sync</a>::<wbr><a class="fn" href="#">run_sync</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_ipa_sync/main.rs.html#268-479">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub(crate) async fn run_sync(<br> cb: KanidmClientBuilder,<br> sync_config: &<a class="struct" href="config/struct.Config.html" title="struct kanidm_ipa_sync::config::Config">Config</a>,<br> opt: &<a class="struct" href="struct.Opt.html" title="struct kanidm_ipa_sync::Opt">Opt</a><br>) -> <a class="enum" href="https://doc.rust-lang.org/1.66.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.66.1/std/primitive.unit.html">()</a>, <a class="enum" href="error/enum.SyncError.html" title="enum kanidm_ipa_sync::error::SyncError">SyncError</a>></code></pre></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="kanidm_ipa_sync" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,4 +1,4 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The server configuration as processed from the startup wrapper. This controls a number of variables that determine how our backends, query server, and frontends are configured."><meta name="keywords" content="rust, rustlang, rust-lang, config"><title>kanidmd_core::config - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../normalize.css"><link rel="stylesheet" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../ayu.css" disabled><link rel="stylesheet" href="../../dark.css" disabled><link rel="stylesheet" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script defer src="../../main.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../../kanidmd_core/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../kanidmd_core/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Module config</a></h2><div class="sidebar-elems"><section><ul class="block"><li><a href="#structs">Structs</a></li><li><a href="#enums">Enums</a></li></ul></section></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Module <a href="../index.html">kanidmd_core</a>::<wbr><a class="mod" href="#">config</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../../src/kanidmd_core/config.rs.html#1-290">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The server configuration as processed from the startup wrapper. This controls a number of
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The server configuration as processed from the startup wrapper. This controls a number of variables that determine how our backends, query server, and frontends are configured."><meta name="keywords" content="rust, rustlang, rust-lang, config"><title>kanidmd_core::config - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../normalize.css"><link rel="stylesheet" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../ayu.css" disabled><link rel="stylesheet" href="../../dark.css" disabled><link rel="stylesheet" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script defer src="../../main.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../../kanidmd_core/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../kanidmd_core/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Module config</a></h2><div class="sidebar-elems"><section><ul class="block"><li><a href="#structs">Structs</a></li><li><a href="#enums">Enums</a></li></ul></section></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Module <a href="../index.html">kanidmd_core</a>::<wbr><a class="mod" href="#">config</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../../src/kanidmd_core/config.rs.html#1-289">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The server configuration as processed from the startup wrapper. This controls a number of
|
||||
variables that determine how our backends, query server, and frontends are configured.</p>
|
||||
<p>These components should be “per server”. Any “per domain” config should be in the system
|
||||
or domain entries that are able to be replicated.</p>
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,4 +1,4 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Access Control Profiles"><meta name="keywords" content="rust, rustlang, rust-lang, access"><title>kanidmd_lib::server::access - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../../normalize.css"><link rel="stylesheet" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../../ayu.css" disabled><link rel="stylesheet" href="../../../dark.css" disabled><link rel="stylesheet" href="../../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../../storage.js"></script><script defer src="../../../main.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../../favicon.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../../../kanidmd_lib/index.html"><div class="logo-container"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../../kanidmd_lib/index.html"><div class="logo-container"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Module access</a></h2><div class="sidebar-elems"><section><ul class="block"><li><a href="#structs">Structs</a></li><li><a href="#traits">Traits</a></li></ul></section></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Module <a href="../../index.html">kanidmd_lib</a>::<wbr><a href="../index.html">server</a>::<wbr><a class="mod" href="#">access</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../../../src/kanidmd_lib/server/access.rs.html#1-2939">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Access Control Profiles</p>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Access Control Profiles"><meta name="keywords" content="rust, rustlang, rust-lang, access"><title>kanidmd_lib::server::access - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../../normalize.css"><link rel="stylesheet" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../../ayu.css" disabled><link rel="stylesheet" href="../../../dark.css" disabled><link rel="stylesheet" href="../../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../../storage.js"></script><script defer src="../../../main.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../../favicon.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../../../kanidmd_lib/index.html"><div class="logo-container"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../../kanidmd_lib/index.html"><div class="logo-container"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Module access</a></h2><div class="sidebar-elems"><section><ul class="block"><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#enums">Enums</a></li><li><a href="#traits">Traits</a></li></ul></section></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Module <a href="../../index.html">kanidmd_lib</a>::<wbr><a href="../index.html">server</a>::<wbr><a class="mod" href="#">access</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../../../src/kanidmd_lib/server/access/mod.rs.html#1-2387">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Access Control Profiles</p>
|
||||
<p>This is a pretty important and security sensitive part of the code - it’s
|
||||
responsible for making sure that who is allowed to do what is enforced, as
|
||||
well as who is <em>not</em> allowed to do what.</p>
|
||||
|
@ -11,4 +11,4 @@ search.</li>
|
|||
<li>the ability to turn an entry into a partial-entry for results send
|
||||
requirements (also search).</li>
|
||||
</ul>
|
||||
</div></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AccessControlCreate.html" title="kanidmd_lib::server::access::AccessControlCreate struct">AccessControlCreate</a></div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AccessControlDelete.html" title="kanidmd_lib::server::access::AccessControlDelete struct">AccessControlDelete</a></div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AccessControlModify.html" title="kanidmd_lib::server::access::AccessControlModify struct">AccessControlModify</a></div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AccessControlSearch.html" title="kanidmd_lib::server::access::AccessControlSearch struct">AccessControlSearch</a></div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AccessControls.html" title="kanidmd_lib::server::access::AccessControls struct">AccessControls</a></div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AccessControlsReadTransaction.html" title="kanidmd_lib::server::access::AccessControlsReadTransaction struct">AccessControlsReadTransaction</a></div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AccessControlsWriteTransaction.html" title="kanidmd_lib::server::access::AccessControlsWriteTransaction struct">AccessControlsWriteTransaction</a></div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AccessEffectivePermission.html" title="kanidmd_lib::server::access::AccessEffectivePermission struct">AccessEffectivePermission</a></div></div></div><h2 id="traits" class="small-section-header"><a href="#traits">Traits</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="trait" href="trait.AccessControlsTransaction.html" title="kanidmd_lib::server::access::AccessControlsTransaction trait">AccessControlsTransaction</a></div></div></div></section></div></main><div id="rustdoc-vars" data-root-path="../../../" data-current-crate="kanidmd_lib" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
||||
</div></details><h2 id="modules" class="small-section-header"><a href="#modules">Modules</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="mod" href="profiles/index.html" title="kanidmd_lib::server::access::profiles mod">profiles</a></div></div></div><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AccessControls.html" title="kanidmd_lib::server::access::AccessControls struct">AccessControls</a></div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AccessControlsReadTransaction.html" title="kanidmd_lib::server::access::AccessControlsReadTransaction struct">AccessControlsReadTransaction</a></div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AccessControlsWriteTransaction.html" title="kanidmd_lib::server::access::AccessControlsWriteTransaction struct">AccessControlsWriteTransaction</a></div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AccessEffectivePermission.html" title="kanidmd_lib::server::access::AccessEffectivePermission struct">AccessEffectivePermission</a></div></div></div><h2 id="enums" class="small-section-header"><a href="#enums">Enums</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="enum" href="enum.Access.html" title="kanidmd_lib::server::access::Access enum">Access</a></div></div><div class="item-row"><div class="item-left module-item"><a class="enum" href="enum.AccessResult.html" title="kanidmd_lib::server::access::AccessResult enum">AccessResult</a></div></div></div><h2 id="traits" class="small-section-header"><a href="#traits">Traits</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="trait" href="trait.AccessControlsTransaction.html" title="kanidmd_lib::server::access::AccessControlsTransaction trait">AccessControlsTransaction</a></div></div></div></section></div></main><div id="rustdoc-vars" data-root-path="../../../" data-current-crate="kanidmd_lib" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
|||
window.SIDEBAR_ITEMS = {"struct":[["AccessControlCreate",""],["AccessControlDelete",""],["AccessControlModify",""],["AccessControlProfile",""],["AccessControlSearch",""]]};
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
|||
window.SIDEBAR_ITEMS = {"struct":[["AccessControlCreate",""],["AccessControlDelete",""],["AccessControlModify",""],["AccessControlSearch",""],["AccessControls",""],["AccessControlsReadTransaction",""],["AccessControlsWriteTransaction",""],["AccessEffectivePermission",""]],"trait":[["AccessControlsTransaction",""]]};
|
||||
window.SIDEBAR_ITEMS = {"enum":[["Access",""],["AccessResult",""]],"mod":[["profiles",""]],"struct":[["AccessControls",""],["AccessControlsReadTransaction",""],["AccessControlsWriteTransaction",""],["AccessEffectivePermission",""]],"trait":[["AccessControlsTransaction",""]]};
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,4 +1,4 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="`server` contains the query server, which is the main high level construction to coordinate queries and operations in the server."><meta name="keywords" content="rust, rustlang, rust-lang, server"><title>kanidmd_lib::server - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../normalize.css"><link rel="stylesheet" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../ayu.css" disabled><link rel="stylesheet" href="../../dark.css" disabled><link rel="stylesheet" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script defer src="../../main.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../../kanidmd_lib/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../kanidmd_lib/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Module server</a></h2><div class="sidebar-elems"><section><ul class="block"><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#traits">Traits</a></li></ul></section></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Module <a href="../index.html">kanidmd_lib</a>::<wbr><a class="mod" href="#">server</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../../src/kanidmd_lib/server/mod.rs.html#1-1748">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p><code>server</code> contains the query server, which is the main high level construction
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="`server` contains the query server, which is the main high level construction to coordinate queries and operations in the server."><meta name="keywords" content="rust, rustlang, rust-lang, server"><title>kanidmd_lib::server - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../normalize.css"><link rel="stylesheet" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../ayu.css" disabled><link rel="stylesheet" href="../../dark.css" disabled><link rel="stylesheet" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script defer src="../../main.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../../kanidmd_lib/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../kanidmd_lib/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Module server</a></h2><div class="sidebar-elems"><section><ul class="block"><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#traits">Traits</a></li></ul></section></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Module <a href="../index.html">kanidmd_lib</a>::<wbr><a class="mod" href="#">server</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../../src/kanidmd_lib/server/mod.rs.html#1-1750">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p><code>server</code> contains the query server, which is the main high level construction
|
||||
to coordinate queries and operations in the server.</p>
|
||||
</div></details><h2 id="modules" class="small-section-header"><a href="#modules">Modules</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="mod" href="access/index.html" title="kanidmd_lib::server::access mod">access</a></div><div class="item-right docblock-short">Access Control Profiles</div></div><div class="item-row"><div class="item-left module-item"><a class="mod" href="batch_modify/index.html" title="kanidmd_lib::server::batch_modify mod">batch_modify</a></div></div><div class="item-row"><div class="item-left module-item"><a class="mod" href="create/index.html" title="kanidmd_lib::server::create mod">create</a></div></div><div class="item-row"><div class="item-left module-item"><a class="mod" href="delete/index.html" title="kanidmd_lib::server::delete mod">delete</a></div></div><div class="item-row"><div class="item-left module-item"><a class="mod" href="identity/index.html" title="kanidmd_lib::server::identity mod">identity</a></div><div class="item-right docblock-short">Contains structures related to the Identity that initiated an <code>Event</code> in the
|
||||
server. Generally this Identity is what will have access controls applied to
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `setup_async_test` fn in crate `kanidmd_testkit`."><meta name="keywords" content="rust, rustlang, rust-lang, setup_async_test"><title>setup_async_test in kanidmd_testkit - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../kanidmd_testkit/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../kanidmd_testkit/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In kanidmd_testkit</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="index.html">kanidmd_testkit</a>::<wbr><a class="fn" href="#">setup_async_test</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/kanidmd_testkit/lib.rs.html#39-89">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub async fn setup_async_test() -> (<a class="struct" href="../kanidm_client/struct.KanidmClient.html" title="struct kanidm_client::KanidmClient">KanidmClient</a>, CoreHandle)</code></pre></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="kanidmd_testkit" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `setup_async_test` fn in crate `kanidmd_testkit`."><meta name="keywords" content="rust, rustlang, rust-lang, setup_async_test"><title>setup_async_test in kanidmd_testkit - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../kanidmd_testkit/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../kanidmd_testkit/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In kanidmd_testkit</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="index.html">kanidmd_testkit</a>::<wbr><a class="fn" href="#">setup_async_test</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/kanidmd_testkit/lib.rs.html#39-89">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub async fn setup_async_test() -> (KanidmClient, CoreHandle)</code></pre></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="kanidmd_testkit" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
File diff suppressed because one or more lines are too long
|
@ -14,7 +14,7 @@ var sourcesIndex = JSON.parse('{\
|
|||
"kanidm_unixd_tasks":["",[],["tasks_daemon.rs"]],\
|
||||
"kanidmd":["",[],["main.rs","opt.rs"]],\
|
||||
"kanidmd_core":["",[["actors",[],["mod.rs","v1_read.rs","v1_scim.rs","v1_write.rs"]],["https",[],["manifest.rs","middleware.rs","mod.rs","oauth2.rs","routemaps.rs","v1.rs","v1_scim.rs"]]],["config.rs","crypto.rs","interval.rs","ldaps.rs","lib.rs"]],\
|
||||
"kanidmd_lib":["",[["be",[],["dbentry.rs","dbvalue.rs","idl_arc_sqlite.rs","idl_sqlite.rs","idxkey.rs","mod.rs"]],["constants",[],["acp.rs","entries.rs","mod.rs","schema.rs","system_config.rs","uuids.rs","values.rs"]],["credential",[],["mod.rs","policy.rs","softlock.rs","totp.rs"]],["idm",[],["account.rs","applinks.rs","authsession.rs","credupdatesession.rs","delayed.rs","event.rs","group.rs","ldap.rs","mod.rs","oauth2.rs","radius.rs","scim.rs","server.rs","serviceaccount.rs","unix.rs"]],["plugins",[],["attrunique.rs","base.rs","cred_import.rs","domain.rs","dyngroup.rs","gidnumber.rs","jwskeygen.rs","memberof.rs","mod.rs","protected.rs","refint.rs","session.rs","spn.rs"]],["repl",[],["cid.rs","entry.rs","mod.rs","ruv.rs"]],["server",[],["access.rs","batch_modify.rs","create.rs","delete.rs","identity.rs","migrations.rs","mod.rs","modify.rs","recycle.rs"]],["valueset",[],["address.rs","binary.rs","bool.rs","cid.rs","cred.rs","datetime.rs","iname.rs","index.rs","iutf8.rs","json.rs","jws.rs","mod.rs","nsuniqueid.rs","oauth.rs","restricted.rs","secret.rs","session.rs","spn.rs","ssh.rs","syntax.rs","totp.rs","uihint.rs","uint32.rs","url.rs","utf8.rs","uuid.rs"]]],["entry.rs","event.rs","filter.rs","lib.rs","macros.rs","modify.rs","schema.rs","status.rs","testkit.rs","utils.rs","value.rs"]],\
|
||||
"kanidmd_lib":["",[["be",[],["dbentry.rs","dbvalue.rs","idl_arc_sqlite.rs","idl_sqlite.rs","idxkey.rs","mod.rs"]],["constants",[],["acp.rs","entries.rs","mod.rs","schema.rs","system_config.rs","uuids.rs","values.rs"]],["credential",[],["mod.rs","policy.rs","softlock.rs","totp.rs"]],["idm",[],["account.rs","applinks.rs","authsession.rs","credupdatesession.rs","delayed.rs","event.rs","group.rs","ldap.rs","mod.rs","oauth2.rs","radius.rs","scim.rs","server.rs","serviceaccount.rs","unix.rs"]],["plugins",[],["attrunique.rs","base.rs","cred_import.rs","domain.rs","dyngroup.rs","gidnumber.rs","jwskeygen.rs","memberof.rs","mod.rs","protected.rs","refint.rs","session.rs","spn.rs"]],["repl",[],["cid.rs","entry.rs","mod.rs","ruv.rs"]],["server",[["access",[],["create.rs","delete.rs","mod.rs","modify.rs","profiles.rs","search.rs"]]],["batch_modify.rs","create.rs","delete.rs","identity.rs","migrations.rs","mod.rs","modify.rs","recycle.rs"]],["valueset",[],["address.rs","binary.rs","bool.rs","cid.rs","cred.rs","datetime.rs","iname.rs","index.rs","iutf8.rs","json.rs","jws.rs","mod.rs","nsuniqueid.rs","oauth.rs","restricted.rs","secret.rs","session.rs","spn.rs","ssh.rs","syntax.rs","totp.rs","uihint.rs","uint32.rs","url.rs","utf8.rs","uuid.rs"]]],["entry.rs","event.rs","filter.rs","lib.rs","macros.rs","modify.rs","schema.rs","status.rs","testkit.rs","utils.rs","value.rs"]],\
|
||||
"kanidmd_lib_macros":["",[],["entry.rs","lib.rs"]],\
|
||||
"kanidmd_testkit":["",[],["lib.rs"]],\
|
||||
"kanidmd_web_ui":["",[["components",[],["admin_accounts.rs","admin_groups.rs","admin_menu.rs","admin_oauth2.rs","change_unix_password.rs","mod.rs"]],["credential",[],["delete.rs","mod.rs","passkey.rs","passkeyremove.rs","pwmodal.rs","reset.rs","totpmodal.rs","totpremove.rs"]],["models",[],["mod.rs"]],["views",[],["apps.rs","components.rs","mod.rs","profile.rs","security.rs"]]],["constants.rs","error.rs","lib.rs","login.rs","macros.rs","manager.rs","oauth2.rs","utils.rs"]],\
|
||||
|
|
|
@ -969,6 +969,9 @@
|
|||
<span id="969">969</span>
|
||||
<span id="970">970</span>
|
||||
<span id="971">971</span>
|
||||
<span id="972">972</span>
|
||||
<span id="973">973</span>
|
||||
<span id="974">974</span>
|
||||
</pre><pre class="rust"><code><span class="attribute">#![deny(warnings)]
|
||||
#![warn(unused_extern_crates)]
|
||||
#![deny(clippy::todo)]
|
||||
|
@ -1856,7 +1859,10 @@
|
|||
<span class="kw">let </span>cfg_meta = <span class="kw">match </span>metadata(<span class="kw-2">&</span>cfg_path) {
|
||||
<span class="prelude-val">Ok</span>(v) => v,
|
||||
<span class="prelude-val">Err</span>(e) => {
|
||||
<span class="macro">error!</span>(<span class="string">"Unable to read metadata for '{}' during security checks - {:?}"</span>, cfg_path_str, e);
|
||||
<span class="macro">error!</span>(
|
||||
<span class="string">"Unable to read metadata for '{}' during security checks - {:?}"</span>,
|
||||
cfg_path_str, e
|
||||
);
|
||||
<span class="kw">return </span><span class="bool-val">false</span>;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -287,7 +287,6 @@
|
|||
<span id="287">287</span>
|
||||
<span id="288">288</span>
|
||||
<span id="289">289</span>
|
||||
<span id="290">290</span>
|
||||
</pre><pre class="rust"><code><span class="doccomment">//! The server configuration as processed from the startup wrapper. This controls a number of
|
||||
//! variables that determine how our backends, query server, and frontends are configured.
|
||||
//!
|
||||
|
@ -334,7 +333,6 @@
|
|||
<span class="kw">pub </span>key: String,
|
||||
}
|
||||
|
||||
|
||||
<span class="attribute">#[derive(Debug, Deserialize)]
|
||||
</span><span class="kw">pub struct </span>ServerConfig {
|
||||
<span class="kw">pub </span>bindaddress: <span class="prelude-ty">Option</span><String>,
|
||||
|
|
|
@ -2545,6 +2545,22 @@
|
|||
<span id="2545">2545</span>
|
||||
<span id="2546">2546</span>
|
||||
<span id="2547">2547</span>
|
||||
<span id="2548">2548</span>
|
||||
<span id="2549">2549</span>
|
||||
<span id="2550">2550</span>
|
||||
<span id="2551">2551</span>
|
||||
<span id="2552">2552</span>
|
||||
<span id="2553">2553</span>
|
||||
<span id="2554">2554</span>
|
||||
<span id="2555">2555</span>
|
||||
<span id="2556">2556</span>
|
||||
<span id="2557">2557</span>
|
||||
<span id="2558">2558</span>
|
||||
<span id="2559">2559</span>
|
||||
<span id="2560">2560</span>
|
||||
<span id="2561">2561</span>
|
||||
<span id="2562">2562</span>
|
||||
<span id="2563">2563</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use </span>core::ops::Deref;
|
||||
<span class="kw">use </span>std::collections::BTreeMap;
|
||||
<span class="kw">use </span>std::fmt;
|
||||
|
@ -2567,6 +2583,7 @@
|
|||
<span class="kw">use </span><span class="kw">crate</span>::idm::account::Account;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::idm::server::{IdmServerCredUpdateTransaction, IdmServerProxyWriteTransaction};
|
||||
<span class="kw">use </span><span class="kw">crate</span>::prelude::<span class="kw-2">*</span>;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::server::access::Access;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::utils::{backup_code_from_random, readable_password_from_random, uuid_from_duration};
|
||||
<span class="kw">use </span><span class="kw">crate</span>::value::IntentTokenState;
|
||||
|
||||
|
@ -2891,10 +2908,25 @@
|
|||
<span class="kw">return </span><span class="prelude-val">Err</span>(OperationError::InvalidEntryState);
|
||||
}
|
||||
|
||||
<span class="kw">if </span>!eperm.search.contains(<span class="string">"primary_credential"</span>)
|
||||
|| !eperm.modify_pres.contains(<span class="string">"primary_credential"</span>)
|
||||
|| !eperm.modify_rem.contains(<span class="string">"primary_credential"</span>)
|
||||
{
|
||||
<span class="kw">let </span>eperm_search_primary_cred = <span class="kw">match </span><span class="kw-2">&</span>eperm.search {
|
||||
Access::Denied => <span class="bool-val">false</span>,
|
||||
Access::Grant => <span class="bool-val">true</span>,
|
||||
Access::Allow(attrs) => attrs.contains(<span class="string">"primary_credential"</span>),
|
||||
};
|
||||
|
||||
<span class="kw">let </span>eperm_mod_primary_cred = <span class="kw">match </span><span class="kw-2">&</span>eperm.modify_pres {
|
||||
Access::Denied => <span class="bool-val">false</span>,
|
||||
Access::Grant => <span class="bool-val">true</span>,
|
||||
Access::Allow(attrs) => attrs.contains(<span class="string">"primary_credential"</span>),
|
||||
};
|
||||
|
||||
<span class="kw">let </span>eperm_rem_primary_cred = <span class="kw">match </span><span class="kw-2">&</span>eperm.modify_rem {
|
||||
Access::Denied => <span class="bool-val">false</span>,
|
||||
Access::Grant => <span class="bool-val">true</span>,
|
||||
Access::Allow(attrs) => attrs.contains(<span class="string">"primary_credential"</span>),
|
||||
};
|
||||
|
||||
<span class="kw">if </span>!eperm_search_primary_cred || !eperm_mod_primary_cred || !eperm_rem_primary_cred {
|
||||
<span class="macro">security_info!</span>(
|
||||
<span class="string">"Requestor {} does not have permission to update credentials of {}"</span>,
|
||||
ident,
|
||||
|
|
278
docs/master/rustdoc/src/kanidmd_lib/server/access/create.rs.html
Normal file
278
docs/master/rustdoc/src/kanidmd_lib/server/access/create.rs.html
Normal file
|
@ -0,0 +1,278 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `kanidmd/lib/src/server/access/create.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>create.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../../../normalize.css"><link rel="stylesheet" href="../../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../../../ayu.css" disabled><link rel="stylesheet" href="../../../../dark.css" disabled><link rel="stylesheet" href="../../../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../../../storage.js"></script><script defer src="../../../../source-script.js"></script><script defer src="../../../../source-files.js"></script><script defer src="../../../../main.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg"></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><div class="width-limiter"><nav class="sub"><a class="sub-logo-container" href="../../../../kanidmd_lib/index.html"><img class="rust-logo" src="../../../../rust-logo.svg" alt="logo"></a><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><pre class="src-line-numbers"><span id="1">1</span>
|
||||
<span id="2">2</span>
|
||||
<span id="3">3</span>
|
||||
<span id="4">4</span>
|
||||
<span id="5">5</span>
|
||||
<span id="6">6</span>
|
||||
<span id="7">7</span>
|
||||
<span id="8">8</span>
|
||||
<span id="9">9</span>
|
||||
<span id="10">10</span>
|
||||
<span id="11">11</span>
|
||||
<span id="12">12</span>
|
||||
<span id="13">13</span>
|
||||
<span id="14">14</span>
|
||||
<span id="15">15</span>
|
||||
<span id="16">16</span>
|
||||
<span id="17">17</span>
|
||||
<span id="18">18</span>
|
||||
<span id="19">19</span>
|
||||
<span id="20">20</span>
|
||||
<span id="21">21</span>
|
||||
<span id="22">22</span>
|
||||
<span id="23">23</span>
|
||||
<span id="24">24</span>
|
||||
<span id="25">25</span>
|
||||
<span id="26">26</span>
|
||||
<span id="27">27</span>
|
||||
<span id="28">28</span>
|
||||
<span id="29">29</span>
|
||||
<span id="30">30</span>
|
||||
<span id="31">31</span>
|
||||
<span id="32">32</span>
|
||||
<span id="33">33</span>
|
||||
<span id="34">34</span>
|
||||
<span id="35">35</span>
|
||||
<span id="36">36</span>
|
||||
<span id="37">37</span>
|
||||
<span id="38">38</span>
|
||||
<span id="39">39</span>
|
||||
<span id="40">40</span>
|
||||
<span id="41">41</span>
|
||||
<span id="42">42</span>
|
||||
<span id="43">43</span>
|
||||
<span id="44">44</span>
|
||||
<span id="45">45</span>
|
||||
<span id="46">46</span>
|
||||
<span id="47">47</span>
|
||||
<span id="48">48</span>
|
||||
<span id="49">49</span>
|
||||
<span id="50">50</span>
|
||||
<span id="51">51</span>
|
||||
<span id="52">52</span>
|
||||
<span id="53">53</span>
|
||||
<span id="54">54</span>
|
||||
<span id="55">55</span>
|
||||
<span id="56">56</span>
|
||||
<span id="57">57</span>
|
||||
<span id="58">58</span>
|
||||
<span id="59">59</span>
|
||||
<span id="60">60</span>
|
||||
<span id="61">61</span>
|
||||
<span id="62">62</span>
|
||||
<span id="63">63</span>
|
||||
<span id="64">64</span>
|
||||
<span id="65">65</span>
|
||||
<span id="66">66</span>
|
||||
<span id="67">67</span>
|
||||
<span id="68">68</span>
|
||||
<span id="69">69</span>
|
||||
<span id="70">70</span>
|
||||
<span id="71">71</span>
|
||||
<span id="72">72</span>
|
||||
<span id="73">73</span>
|
||||
<span id="74">74</span>
|
||||
<span id="75">75</span>
|
||||
<span id="76">76</span>
|
||||
<span id="77">77</span>
|
||||
<span id="78">78</span>
|
||||
<span id="79">79</span>
|
||||
<span id="80">80</span>
|
||||
<span id="81">81</span>
|
||||
<span id="82">82</span>
|
||||
<span id="83">83</span>
|
||||
<span id="84">84</span>
|
||||
<span id="85">85</span>
|
||||
<span id="86">86</span>
|
||||
<span id="87">87</span>
|
||||
<span id="88">88</span>
|
||||
<span id="89">89</span>
|
||||
<span id="90">90</span>
|
||||
<span id="91">91</span>
|
||||
<span id="92">92</span>
|
||||
<span id="93">93</span>
|
||||
<span id="94">94</span>
|
||||
<span id="95">95</span>
|
||||
<span id="96">96</span>
|
||||
<span id="97">97</span>
|
||||
<span id="98">98</span>
|
||||
<span id="99">99</span>
|
||||
<span id="100">100</span>
|
||||
<span id="101">101</span>
|
||||
<span id="102">102</span>
|
||||
<span id="103">103</span>
|
||||
<span id="104">104</span>
|
||||
<span id="105">105</span>
|
||||
<span id="106">106</span>
|
||||
<span id="107">107</span>
|
||||
<span id="108">108</span>
|
||||
<span id="109">109</span>
|
||||
<span id="110">110</span>
|
||||
<span id="111">111</span>
|
||||
<span id="112">112</span>
|
||||
<span id="113">113</span>
|
||||
<span id="114">114</span>
|
||||
<span id="115">115</span>
|
||||
<span id="116">116</span>
|
||||
<span id="117">117</span>
|
||||
<span id="118">118</span>
|
||||
<span id="119">119</span>
|
||||
<span id="120">120</span>
|
||||
<span id="121">121</span>
|
||||
<span id="122">122</span>
|
||||
<span id="123">123</span>
|
||||
<span id="124">124</span>
|
||||
<span id="125">125</span>
|
||||
<span id="126">126</span>
|
||||
<span id="127">127</span>
|
||||
<span id="128">128</span>
|
||||
<span id="129">129</span>
|
||||
<span id="130">130</span>
|
||||
<span id="131">131</span>
|
||||
<span id="132">132</span>
|
||||
<span id="133">133</span>
|
||||
<span id="134">134</span>
|
||||
<span id="135">135</span>
|
||||
<span id="136">136</span>
|
||||
<span id="137">137</span>
|
||||
<span id="138">138</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use </span><span class="kw">super</span>::profiles::AccessControlCreate;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::filter::FilterValidResolved;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::prelude::<span class="kw-2">*</span>;
|
||||
<span class="kw">use </span>std::collections::BTreeSet;
|
||||
|
||||
<span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">enum </span>CreateResult {
|
||||
Denied,
|
||||
Grant,
|
||||
}
|
||||
|
||||
<span class="kw">enum </span>IResult {
|
||||
Denied,
|
||||
Grant,
|
||||
Ignore,
|
||||
}
|
||||
|
||||
<span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">fn </span>apply_create_access<<span class="lifetime">'a</span>>(
|
||||
ident: <span class="kw-2">&</span>Identity,
|
||||
related_acp: <span class="kw-2">&</span><span class="lifetime">'a </span>[(<span class="kw-2">&</span>AccessControlCreate, Filter<FilterValidResolved>)],
|
||||
entry: <span class="kw-2">&</span><span class="lifetime">'a </span>Entry<EntryInit, EntryNew>,
|
||||
) -> CreateResult {
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>denied = <span class="bool-val">false</span>;
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>grant = <span class="bool-val">false</span>;
|
||||
|
||||
<span class="kw">match </span>create_filter_entry(ident, related_acp, entry) {
|
||||
IResult::Denied => denied = <span class="bool-val">true</span>,
|
||||
IResult::Grant => grant = <span class="bool-val">true</span>,
|
||||
IResult::Ignore => {}
|
||||
}
|
||||
|
||||
<span class="kw">if </span>denied {
|
||||
<span class="comment">// Something explicitly said no.
|
||||
</span>CreateResult::Denied
|
||||
} <span class="kw">else if </span>grant {
|
||||
<span class="comment">// Something said yes
|
||||
</span>CreateResult::Grant
|
||||
} <span class="kw">else </span>{
|
||||
<span class="comment">// Nothing said yes.
|
||||
</span>CreateResult::Denied
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">fn </span>create_filter_entry<<span class="lifetime">'a</span>>(
|
||||
ident: <span class="kw-2">&</span>Identity,
|
||||
related_acp: <span class="kw-2">&</span><span class="lifetime">'a </span>[(<span class="kw-2">&</span>AccessControlCreate, Filter<FilterValidResolved>)],
|
||||
entry: <span class="kw-2">&</span><span class="lifetime">'a </span>Entry<EntryInit, EntryNew>,
|
||||
) -> IResult {
|
||||
<span class="kw">match </span><span class="kw-2">&</span>ident.origin {
|
||||
IdentType::Internal => {
|
||||
<span class="macro">trace!</span>(<span class="string">"Internal operation, bypassing access check"</span>);
|
||||
<span class="comment">// No need to check ACS
|
||||
</span><span class="kw">return </span>IResult::Grant;
|
||||
}
|
||||
IdentType::Synch(<span class="kw">_</span>) => {
|
||||
<span class="macro">security_critical!</span>(<span class="string">"Blocking sync check"</span>);
|
||||
<span class="kw">return </span>IResult::Denied;
|
||||
}
|
||||
IdentType::User(<span class="kw">_</span>) => {}
|
||||
};
|
||||
<span class="macro">info!</span>(event = %ident, <span class="string">"Access check for create event"</span>);
|
||||
|
||||
<span class="kw">match </span>ident.access_scope() {
|
||||
AccessScope::IdentityOnly | AccessScope::ReadOnly | AccessScope::Synchronise => {
|
||||
<span class="macro">security_access!</span>(<span class="string">"denied ❌ - identity access scope is not permitted to create"</span>);
|
||||
<span class="kw">return </span>IResult::Denied;
|
||||
}
|
||||
AccessScope::ReadWrite => {
|
||||
<span class="comment">// As you were
|
||||
</span>}
|
||||
};
|
||||
|
||||
<span class="comment">// Build the set of requested classes and attrs here.
|
||||
</span><span class="kw">let </span>create_attrs: BTreeSet<<span class="kw-2">&</span>str> = entry.get_ava_names().collect();
|
||||
<span class="comment">// If this is empty, we make an empty set, which is fine because
|
||||
// the empty class set despite matching is_subset, will have the
|
||||
// following effect:
|
||||
// * there is no class on entry, so schema will fail
|
||||
// * plugin-base will add object to give a class, but excess
|
||||
// attrs will cause fail (could this be a weakness?)
|
||||
// * class is a "may", so this could be empty in the rules, so
|
||||
// if the accr is empty this would not be a true subset,
|
||||
// so this would "fail", but any content in the accr would
|
||||
// have to be validated.
|
||||
//
|
||||
// I still think if this is None, we should just fail here ...
|
||||
// because it shouldn't be possible to match.
|
||||
|
||||
</span><span class="kw">let </span>create_classes: BTreeSet<<span class="kw-2">&</span>str> = <span class="kw">match </span>entry.get_ava_iter_iutf8(<span class="string">"class"</span>) {
|
||||
<span class="prelude-val">Some</span>(s) => s.collect(),
|
||||
<span class="prelude-val">None </span>=> {
|
||||
<span class="macro">admin_error!</span>(<span class="string">"Class set failed to build - corrupted entry?"</span>);
|
||||
<span class="kw">return </span>IResult::Denied;
|
||||
}
|
||||
};
|
||||
|
||||
<span class="comment">// Find the set of related acps for this entry.
|
||||
//
|
||||
// For each "created" entry.
|
||||
// If the created entry is 100% allowed by this acp
|
||||
// IE: all attrs to be created AND classes match classes
|
||||
// allow
|
||||
// if no acp allows, fail operation.
|
||||
</span><span class="kw">let </span>allow = related_acp.iter().any(|(accr, f_res)| {
|
||||
<span class="comment">// Check to see if allowed.
|
||||
</span><span class="kw">if </span>entry.entry_match_no_index(f_res) {
|
||||
<span class="macro">security_access!</span>(<span class="question-mark">?</span>entry, acs = <span class="question-mark">?</span>accr, <span class="string">"entry matches acs"</span>);
|
||||
<span class="comment">// It matches, so now we have to check attrs and classes.
|
||||
// Remember, we have to match ALL requested attrs
|
||||
// and classes to pass!
|
||||
</span><span class="kw">let </span>allowed_attrs: BTreeSet<<span class="kw-2">&</span>str> = accr.attrs.iter().map(|s| s.as_str()).collect();
|
||||
<span class="kw">let </span>allowed_classes: BTreeSet<<span class="kw-2">&</span>str> = accr.classes.iter().map(|s| s.as_str()).collect();
|
||||
|
||||
<span class="kw">if </span>!create_attrs.is_subset(<span class="kw-2">&</span>allowed_attrs) {
|
||||
<span class="macro">security_access!</span>(<span class="string">"create_attrs is not a subset of allowed"</span>);
|
||||
<span class="macro">security_access!</span>(<span class="string">"{:?} !⊆ {:?}"</span>, create_attrs, allowed_attrs);
|
||||
<span class="kw">return </span><span class="bool-val">false</span>;
|
||||
}
|
||||
<span class="kw">if </span>!create_classes.is_subset(<span class="kw-2">&</span>allowed_classes) {
|
||||
<span class="macro">security_access!</span>(<span class="string">"create_classes is not a subset of allowed"</span>);
|
||||
<span class="macro">security_access!</span>(<span class="string">"{:?} !⊆ {:?}"</span>, create_classes, allowed_classes);
|
||||
<span class="kw">return </span><span class="bool-val">false</span>;
|
||||
}
|
||||
<span class="macro">security_access!</span>(<span class="string">"passed"</span>);
|
||||
|
||||
<span class="bool-val">true
|
||||
</span>} <span class="kw">else </span>{
|
||||
<span class="macro">trace!</span>(<span class="question-mark">?</span>entry, acs = %accr.acp.name, <span class="string">"entry DOES NOT match acs"</span>);
|
||||
<span class="comment">// Does not match, fail this rule.
|
||||
</span><span class="bool-val">false
|
||||
</span>}
|
||||
});
|
||||
|
||||
<span class="kw">if </span>allow {
|
||||
IResult::Grant
|
||||
} <span class="kw">else </span>{
|
||||
IResult::Ignore
|
||||
}
|
||||
}
|
||||
</code></pre></div>
|
||||
</section></div></main><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="kanidmd_lib" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
196
docs/master/rustdoc/src/kanidmd_lib/server/access/delete.rs.html
Normal file
196
docs/master/rustdoc/src/kanidmd_lib/server/access/delete.rs.html
Normal file
|
@ -0,0 +1,196 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `kanidmd/lib/src/server/access/delete.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>delete.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../../../normalize.css"><link rel="stylesheet" href="../../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../../../ayu.css" disabled><link rel="stylesheet" href="../../../../dark.css" disabled><link rel="stylesheet" href="../../../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../../../storage.js"></script><script defer src="../../../../source-script.js"></script><script defer src="../../../../source-files.js"></script><script defer src="../../../../main.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg"></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><div class="width-limiter"><nav class="sub"><a class="sub-logo-container" href="../../../../kanidmd_lib/index.html"><img class="rust-logo" src="../../../../rust-logo.svg" alt="logo"></a><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><pre class="src-line-numbers"><span id="1">1</span>
|
||||
<span id="2">2</span>
|
||||
<span id="3">3</span>
|
||||
<span id="4">4</span>
|
||||
<span id="5">5</span>
|
||||
<span id="6">6</span>
|
||||
<span id="7">7</span>
|
||||
<span id="8">8</span>
|
||||
<span id="9">9</span>
|
||||
<span id="10">10</span>
|
||||
<span id="11">11</span>
|
||||
<span id="12">12</span>
|
||||
<span id="13">13</span>
|
||||
<span id="14">14</span>
|
||||
<span id="15">15</span>
|
||||
<span id="16">16</span>
|
||||
<span id="17">17</span>
|
||||
<span id="18">18</span>
|
||||
<span id="19">19</span>
|
||||
<span id="20">20</span>
|
||||
<span id="21">21</span>
|
||||
<span id="22">22</span>
|
||||
<span id="23">23</span>
|
||||
<span id="24">24</span>
|
||||
<span id="25">25</span>
|
||||
<span id="26">26</span>
|
||||
<span id="27">27</span>
|
||||
<span id="28">28</span>
|
||||
<span id="29">29</span>
|
||||
<span id="30">30</span>
|
||||
<span id="31">31</span>
|
||||
<span id="32">32</span>
|
||||
<span id="33">33</span>
|
||||
<span id="34">34</span>
|
||||
<span id="35">35</span>
|
||||
<span id="36">36</span>
|
||||
<span id="37">37</span>
|
||||
<span id="38">38</span>
|
||||
<span id="39">39</span>
|
||||
<span id="40">40</span>
|
||||
<span id="41">41</span>
|
||||
<span id="42">42</span>
|
||||
<span id="43">43</span>
|
||||
<span id="44">44</span>
|
||||
<span id="45">45</span>
|
||||
<span id="46">46</span>
|
||||
<span id="47">47</span>
|
||||
<span id="48">48</span>
|
||||
<span id="49">49</span>
|
||||
<span id="50">50</span>
|
||||
<span id="51">51</span>
|
||||
<span id="52">52</span>
|
||||
<span id="53">53</span>
|
||||
<span id="54">54</span>
|
||||
<span id="55">55</span>
|
||||
<span id="56">56</span>
|
||||
<span id="57">57</span>
|
||||
<span id="58">58</span>
|
||||
<span id="59">59</span>
|
||||
<span id="60">60</span>
|
||||
<span id="61">61</span>
|
||||
<span id="62">62</span>
|
||||
<span id="63">63</span>
|
||||
<span id="64">64</span>
|
||||
<span id="65">65</span>
|
||||
<span id="66">66</span>
|
||||
<span id="67">67</span>
|
||||
<span id="68">68</span>
|
||||
<span id="69">69</span>
|
||||
<span id="70">70</span>
|
||||
<span id="71">71</span>
|
||||
<span id="72">72</span>
|
||||
<span id="73">73</span>
|
||||
<span id="74">74</span>
|
||||
<span id="75">75</span>
|
||||
<span id="76">76</span>
|
||||
<span id="77">77</span>
|
||||
<span id="78">78</span>
|
||||
<span id="79">79</span>
|
||||
<span id="80">80</span>
|
||||
<span id="81">81</span>
|
||||
<span id="82">82</span>
|
||||
<span id="83">83</span>
|
||||
<span id="84">84</span>
|
||||
<span id="85">85</span>
|
||||
<span id="86">86</span>
|
||||
<span id="87">87</span>
|
||||
<span id="88">88</span>
|
||||
<span id="89">89</span>
|
||||
<span id="90">90</span>
|
||||
<span id="91">91</span>
|
||||
<span id="92">92</span>
|
||||
<span id="93">93</span>
|
||||
<span id="94">94</span>
|
||||
<span id="95">95</span>
|
||||
<span id="96">96</span>
|
||||
<span id="97">97</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use </span><span class="kw">super</span>::profiles::AccessControlDelete;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::filter::FilterValidResolved;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::prelude::<span class="kw-2">*</span>;
|
||||
<span class="kw">use </span>std::sync::Arc;
|
||||
|
||||
<span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">enum </span>DeleteResult {
|
||||
Denied,
|
||||
Grant,
|
||||
}
|
||||
|
||||
<span class="kw">enum </span>IResult {
|
||||
Denied,
|
||||
Grant,
|
||||
Ignore,
|
||||
}
|
||||
|
||||
<span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">fn </span>apply_delete_access<<span class="lifetime">'a</span>>(
|
||||
ident: <span class="kw-2">&</span>Identity,
|
||||
related_acp: <span class="kw-2">&</span><span class="lifetime">'a </span>[(<span class="kw-2">&</span>AccessControlDelete, Filter<FilterValidResolved>)],
|
||||
entry: <span class="kw-2">&</span><span class="lifetime">'a </span>Arc<EntrySealedCommitted>,
|
||||
) -> DeleteResult {
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>denied = <span class="bool-val">false</span>;
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>grant = <span class="bool-val">false</span>;
|
||||
|
||||
<span class="kw">match </span>delete_filter_entry(ident, related_acp, entry) {
|
||||
IResult::Denied => denied = <span class="bool-val">true</span>,
|
||||
IResult::Grant => grant = <span class="bool-val">true</span>,
|
||||
IResult::Ignore => {}
|
||||
}
|
||||
|
||||
<span class="kw">if </span>denied {
|
||||
<span class="comment">// Something explicitly said no.
|
||||
</span>DeleteResult::Denied
|
||||
} <span class="kw">else if </span>grant {
|
||||
<span class="comment">// Something said yes
|
||||
</span>DeleteResult::Grant
|
||||
} <span class="kw">else </span>{
|
||||
<span class="comment">// Nothing said yes.
|
||||
</span>DeleteResult::Denied
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">fn </span>delete_filter_entry<<span class="lifetime">'a</span>>(
|
||||
ident: <span class="kw-2">&</span>Identity,
|
||||
related_acp: <span class="kw-2">&</span><span class="lifetime">'a </span>[(<span class="kw-2">&</span>AccessControlDelete, Filter<FilterValidResolved>)],
|
||||
entry: <span class="kw-2">&</span><span class="lifetime">'a </span>Arc<EntrySealedCommitted>,
|
||||
) -> IResult {
|
||||
<span class="kw">match </span><span class="kw-2">&</span>ident.origin {
|
||||
IdentType::Internal => {
|
||||
<span class="macro">trace!</span>(<span class="string">"Internal operation, bypassing access check"</span>);
|
||||
<span class="comment">// No need to check ACS
|
||||
</span><span class="kw">return </span>IResult::Grant;
|
||||
}
|
||||
IdentType::Synch(<span class="kw">_</span>) => {
|
||||
<span class="macro">security_critical!</span>(<span class="string">"Blocking sync check"</span>);
|
||||
<span class="kw">return </span>IResult::Denied;
|
||||
}
|
||||
IdentType::User(<span class="kw">_</span>) => {}
|
||||
};
|
||||
<span class="macro">info!</span>(event = %ident, <span class="string">"Access check for delete event"</span>);
|
||||
|
||||
<span class="kw">match </span>ident.access_scope() {
|
||||
AccessScope::IdentityOnly | AccessScope::ReadOnly | AccessScope::Synchronise => {
|
||||
<span class="macro">security_access!</span>(<span class="string">"denied ❌ - identity access scope is not permitted to delete"</span>);
|
||||
<span class="kw">return </span>IResult::Denied;
|
||||
}
|
||||
AccessScope::ReadWrite => {
|
||||
<span class="comment">// As you were
|
||||
</span>}
|
||||
};
|
||||
|
||||
<span class="kw">let </span>allow = related_acp.iter().any(|(acd, f_res)| {
|
||||
<span class="kw">if </span>entry.entry_match_no_index(f_res) {
|
||||
<span class="macro">security_access!</span>(
|
||||
entry_uuid = <span class="question-mark">?</span>entry.get_uuid(),
|
||||
acs = %acd.acp.name,
|
||||
<span class="string">"entry matches acs"
|
||||
</span>);
|
||||
<span class="comment">// It matches, so we can delete this!
|
||||
</span><span class="macro">security_access!</span>(<span class="string">"passed"</span>);
|
||||
<span class="bool-val">true
|
||||
</span>} <span class="kw">else </span>{
|
||||
<span class="macro">trace!</span>(
|
||||
<span class="string">"entry {:?} DOES NOT match acs {}"</span>,
|
||||
entry.get_uuid(),
|
||||
acd.acp.name
|
||||
);
|
||||
<span class="comment">// Does not match, fail.
|
||||
</span><span class="bool-val">false
|
||||
</span>} <span class="comment">// else
|
||||
</span>}); <span class="comment">// any related_acp
|
||||
</span><span class="kw">if </span>allow {
|
||||
IResult::Grant
|
||||
} <span class="kw">else </span>{
|
||||
IResult::Ignore
|
||||
}
|
||||
}
|
||||
</code></pre></div>
|
||||
</section></div></main><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="kanidmd_lib" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
File diff suppressed because it is too large
Load diff
340
docs/master/rustdoc/src/kanidmd_lib/server/access/modify.rs.html
Normal file
340
docs/master/rustdoc/src/kanidmd_lib/server/access/modify.rs.html
Normal file
|
@ -0,0 +1,340 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `kanidmd/lib/src/server/access/modify.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>modify.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../../../normalize.css"><link rel="stylesheet" href="../../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../../../ayu.css" disabled><link rel="stylesheet" href="../../../../dark.css" disabled><link rel="stylesheet" href="../../../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../../../storage.js"></script><script defer src="../../../../source-script.js"></script><script defer src="../../../../source-files.js"></script><script defer src="../../../../main.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg"></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><div class="width-limiter"><nav class="sub"><a class="sub-logo-container" href="../../../../kanidmd_lib/index.html"><img class="rust-logo" src="../../../../rust-logo.svg" alt="logo"></a><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><pre class="src-line-numbers"><span id="1">1</span>
|
||||
<span id="2">2</span>
|
||||
<span id="3">3</span>
|
||||
<span id="4">4</span>
|
||||
<span id="5">5</span>
|
||||
<span id="6">6</span>
|
||||
<span id="7">7</span>
|
||||
<span id="8">8</span>
|
||||
<span id="9">9</span>
|
||||
<span id="10">10</span>
|
||||
<span id="11">11</span>
|
||||
<span id="12">12</span>
|
||||
<span id="13">13</span>
|
||||
<span id="14">14</span>
|
||||
<span id="15">15</span>
|
||||
<span id="16">16</span>
|
||||
<span id="17">17</span>
|
||||
<span id="18">18</span>
|
||||
<span id="19">19</span>
|
||||
<span id="20">20</span>
|
||||
<span id="21">21</span>
|
||||
<span id="22">22</span>
|
||||
<span id="23">23</span>
|
||||
<span id="24">24</span>
|
||||
<span id="25">25</span>
|
||||
<span id="26">26</span>
|
||||
<span id="27">27</span>
|
||||
<span id="28">28</span>
|
||||
<span id="29">29</span>
|
||||
<span id="30">30</span>
|
||||
<span id="31">31</span>
|
||||
<span id="32">32</span>
|
||||
<span id="33">33</span>
|
||||
<span id="34">34</span>
|
||||
<span id="35">35</span>
|
||||
<span id="36">36</span>
|
||||
<span id="37">37</span>
|
||||
<span id="38">38</span>
|
||||
<span id="39">39</span>
|
||||
<span id="40">40</span>
|
||||
<span id="41">41</span>
|
||||
<span id="42">42</span>
|
||||
<span id="43">43</span>
|
||||
<span id="44">44</span>
|
||||
<span id="45">45</span>
|
||||
<span id="46">46</span>
|
||||
<span id="47">47</span>
|
||||
<span id="48">48</span>
|
||||
<span id="49">49</span>
|
||||
<span id="50">50</span>
|
||||
<span id="51">51</span>
|
||||
<span id="52">52</span>
|
||||
<span id="53">53</span>
|
||||
<span id="54">54</span>
|
||||
<span id="55">55</span>
|
||||
<span id="56">56</span>
|
||||
<span id="57">57</span>
|
||||
<span id="58">58</span>
|
||||
<span id="59">59</span>
|
||||
<span id="60">60</span>
|
||||
<span id="61">61</span>
|
||||
<span id="62">62</span>
|
||||
<span id="63">63</span>
|
||||
<span id="64">64</span>
|
||||
<span id="65">65</span>
|
||||
<span id="66">66</span>
|
||||
<span id="67">67</span>
|
||||
<span id="68">68</span>
|
||||
<span id="69">69</span>
|
||||
<span id="70">70</span>
|
||||
<span id="71">71</span>
|
||||
<span id="72">72</span>
|
||||
<span id="73">73</span>
|
||||
<span id="74">74</span>
|
||||
<span id="75">75</span>
|
||||
<span id="76">76</span>
|
||||
<span id="77">77</span>
|
||||
<span id="78">78</span>
|
||||
<span id="79">79</span>
|
||||
<span id="80">80</span>
|
||||
<span id="81">81</span>
|
||||
<span id="82">82</span>
|
||||
<span id="83">83</span>
|
||||
<span id="84">84</span>
|
||||
<span id="85">85</span>
|
||||
<span id="86">86</span>
|
||||
<span id="87">87</span>
|
||||
<span id="88">88</span>
|
||||
<span id="89">89</span>
|
||||
<span id="90">90</span>
|
||||
<span id="91">91</span>
|
||||
<span id="92">92</span>
|
||||
<span id="93">93</span>
|
||||
<span id="94">94</span>
|
||||
<span id="95">95</span>
|
||||
<span id="96">96</span>
|
||||
<span id="97">97</span>
|
||||
<span id="98">98</span>
|
||||
<span id="99">99</span>
|
||||
<span id="100">100</span>
|
||||
<span id="101">101</span>
|
||||
<span id="102">102</span>
|
||||
<span id="103">103</span>
|
||||
<span id="104">104</span>
|
||||
<span id="105">105</span>
|
||||
<span id="106">106</span>
|
||||
<span id="107">107</span>
|
||||
<span id="108">108</span>
|
||||
<span id="109">109</span>
|
||||
<span id="110">110</span>
|
||||
<span id="111">111</span>
|
||||
<span id="112">112</span>
|
||||
<span id="113">113</span>
|
||||
<span id="114">114</span>
|
||||
<span id="115">115</span>
|
||||
<span id="116">116</span>
|
||||
<span id="117">117</span>
|
||||
<span id="118">118</span>
|
||||
<span id="119">119</span>
|
||||
<span id="120">120</span>
|
||||
<span id="121">121</span>
|
||||
<span id="122">122</span>
|
||||
<span id="123">123</span>
|
||||
<span id="124">124</span>
|
||||
<span id="125">125</span>
|
||||
<span id="126">126</span>
|
||||
<span id="127">127</span>
|
||||
<span id="128">128</span>
|
||||
<span id="129">129</span>
|
||||
<span id="130">130</span>
|
||||
<span id="131">131</span>
|
||||
<span id="132">132</span>
|
||||
<span id="133">133</span>
|
||||
<span id="134">134</span>
|
||||
<span id="135">135</span>
|
||||
<span id="136">136</span>
|
||||
<span id="137">137</span>
|
||||
<span id="138">138</span>
|
||||
<span id="139">139</span>
|
||||
<span id="140">140</span>
|
||||
<span id="141">141</span>
|
||||
<span id="142">142</span>
|
||||
<span id="143">143</span>
|
||||
<span id="144">144</span>
|
||||
<span id="145">145</span>
|
||||
<span id="146">146</span>
|
||||
<span id="147">147</span>
|
||||
<span id="148">148</span>
|
||||
<span id="149">149</span>
|
||||
<span id="150">150</span>
|
||||
<span id="151">151</span>
|
||||
<span id="152">152</span>
|
||||
<span id="153">153</span>
|
||||
<span id="154">154</span>
|
||||
<span id="155">155</span>
|
||||
<span id="156">156</span>
|
||||
<span id="157">157</span>
|
||||
<span id="158">158</span>
|
||||
<span id="159">159</span>
|
||||
<span id="160">160</span>
|
||||
<span id="161">161</span>
|
||||
<span id="162">162</span>
|
||||
<span id="163">163</span>
|
||||
<span id="164">164</span>
|
||||
<span id="165">165</span>
|
||||
<span id="166">166</span>
|
||||
<span id="167">167</span>
|
||||
<span id="168">168</span>
|
||||
<span id="169">169</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use </span><span class="kw">crate</span>::prelude::<span class="kw-2">*</span>;
|
||||
<span class="kw">use </span>std::collections::BTreeSet;
|
||||
|
||||
<span class="kw">use </span><span class="kw">super</span>::profiles::AccessControlModify;
|
||||
<span class="kw">use </span><span class="kw">super</span>::AccessResult;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::filter::FilterValidResolved;
|
||||
<span class="kw">use </span>std::sync::Arc;
|
||||
|
||||
<span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">enum </span>ModifyResult<<span class="lifetime">'a</span>> {
|
||||
Denied,
|
||||
Grant,
|
||||
Allow {
|
||||
pres: BTreeSet<<span class="kw-2">&</span><span class="lifetime">'a </span>str>,
|
||||
rem: BTreeSet<<span class="kw-2">&</span><span class="lifetime">'a </span>str>,
|
||||
cls: BTreeSet<<span class="kw-2">&</span><span class="lifetime">'a </span>str>,
|
||||
},
|
||||
}
|
||||
|
||||
<span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">fn </span>apply_modify_access<<span class="lifetime">'a</span>>(
|
||||
ident: <span class="kw-2">&</span>Identity,
|
||||
related_acp: <span class="kw-2">&</span><span class="lifetime">'a </span>[(<span class="kw-2">&</span>AccessControlModify, Filter<FilterValidResolved>)],
|
||||
entry: <span class="kw-2">&</span><span class="lifetime">'a </span>Arc<EntrySealedCommitted>,
|
||||
) -> ModifyResult<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>denied = <span class="bool-val">false</span>;
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>grant = <span class="bool-val">false</span>;
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>constrain_pres = BTreeSet::default();
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>allow_pres = BTreeSet::default();
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>constrain_rem = BTreeSet::default();
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>allow_rem = BTreeSet::default();
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>constrain_cls = BTreeSet::default();
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>allow_cls = BTreeSet::default();
|
||||
|
||||
<span class="comment">// run each module. These have to be broken down further due to modify
|
||||
// kind of being three operations all in one.
|
||||
|
||||
</span><span class="kw">match </span>modify_ident_test(ident) {
|
||||
AccessResult::Denied => denied = <span class="bool-val">true</span>,
|
||||
AccessResult::Grant => grant = <span class="bool-val">true</span>,
|
||||
AccessResult::Ignore => {}
|
||||
AccessResult::Constrain(<span class="kw-2">mut </span>set) => constrain_pres.append(<span class="kw-2">&mut </span>set),
|
||||
AccessResult::Allow(<span class="kw-2">mut </span>set) => allow_pres.append(<span class="kw-2">&mut </span>set),
|
||||
}
|
||||
|
||||
<span class="kw">if </span>!grant && !denied {
|
||||
<span class="comment">// Setup the acp's here
|
||||
</span><span class="kw">let </span>scoped_acp: Vec<<span class="kw-2">&</span>AccessControlModify> = related_acp
|
||||
.iter()
|
||||
.filter_map(|(acm, f_res)| {
|
||||
<span class="kw">if </span>entry.entry_match_no_index(f_res) {
|
||||
<span class="prelude-val">Some</span>(<span class="kw-2">*</span>acm)
|
||||
} <span class="kw">else </span>{
|
||||
<span class="prelude-val">None
|
||||
</span>}
|
||||
})
|
||||
.collect();
|
||||
|
||||
<span class="kw">match </span>modify_pres_test(scoped_acp.as_slice()) {
|
||||
AccessResult::Denied => denied = <span class="bool-val">true</span>,
|
||||
<span class="comment">// Can never return a unilateral grant.
|
||||
</span>AccessResult::Grant => {}
|
||||
AccessResult::Ignore => {}
|
||||
AccessResult::Constrain(<span class="kw-2">mut </span>set) => constrain_pres.append(<span class="kw-2">&mut </span>set),
|
||||
AccessResult::Allow(<span class="kw-2">mut </span>set) => allow_pres.append(<span class="kw-2">&mut </span>set),
|
||||
}
|
||||
|
||||
<span class="kw">match </span>modify_rem_test(scoped_acp.as_slice()) {
|
||||
AccessResult::Denied => denied = <span class="bool-val">true</span>,
|
||||
<span class="comment">// Can never return a unilateral grant.
|
||||
</span>AccessResult::Grant => {}
|
||||
AccessResult::Ignore => {}
|
||||
AccessResult::Constrain(<span class="kw-2">mut </span>set) => constrain_rem.append(<span class="kw-2">&mut </span>set),
|
||||
AccessResult::Allow(<span class="kw-2">mut </span>set) => allow_rem.append(<span class="kw-2">&mut </span>set),
|
||||
}
|
||||
|
||||
<span class="kw">match </span>modify_cls_test(scoped_acp.as_slice()) {
|
||||
AccessResult::Denied => denied = <span class="bool-val">true</span>,
|
||||
<span class="comment">// Can never return a unilateral grant.
|
||||
</span>AccessResult::Grant => {}
|
||||
AccessResult::Ignore => {}
|
||||
AccessResult::Constrain(<span class="kw-2">mut </span>set) => constrain_cls.append(<span class="kw-2">&mut </span>set),
|
||||
AccessResult::Allow(<span class="kw-2">mut </span>set) => allow_cls.append(<span class="kw-2">&mut </span>set),
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">if </span>denied {
|
||||
ModifyResult::Denied
|
||||
} <span class="kw">else if </span>grant {
|
||||
ModifyResult::Grant
|
||||
} <span class="kw">else </span>{
|
||||
<span class="kw">let </span>allowed_pres = <span class="kw">if </span>!constrain_pres.is_empty() {
|
||||
<span class="comment">// bit_and
|
||||
</span><span class="kw-2">&</span>constrain_pres & <span class="kw-2">&</span>allow_pres
|
||||
} <span class="kw">else </span>{
|
||||
allow_pres
|
||||
};
|
||||
|
||||
<span class="kw">let </span>allowed_rem = <span class="kw">if </span>!constrain_rem.is_empty() {
|
||||
<span class="comment">// bit_and
|
||||
</span><span class="kw-2">&</span>constrain_rem & <span class="kw-2">&</span>allow_rem
|
||||
} <span class="kw">else </span>{
|
||||
allow_rem
|
||||
};
|
||||
|
||||
<span class="kw">let </span>allowed_cls = <span class="kw">if </span>!constrain_cls.is_empty() {
|
||||
<span class="comment">// bit_and
|
||||
</span><span class="kw-2">&</span>constrain_cls & <span class="kw-2">&</span>allow_cls
|
||||
} <span class="kw">else </span>{
|
||||
allow_cls
|
||||
};
|
||||
|
||||
ModifyResult::Allow {
|
||||
pres: allowed_pres,
|
||||
rem: allowed_rem,
|
||||
cls: allowed_cls,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">fn </span>modify_ident_test<<span class="lifetime">'a</span>>(ident: <span class="kw-2">&</span>Identity) -> AccessResult<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">match </span><span class="kw-2">&</span>ident.origin {
|
||||
IdentType::Internal => {
|
||||
<span class="macro">trace!</span>(<span class="string">"Internal operation, bypassing access check"</span>);
|
||||
<span class="comment">// No need to check ACS
|
||||
</span><span class="kw">return </span>AccessResult::Grant;
|
||||
}
|
||||
IdentType::Synch(<span class="kw">_</span>) => {
|
||||
<span class="macro">security_critical!</span>(<span class="string">"Blocking sync check"</span>);
|
||||
<span class="kw">return </span>AccessResult::Denied;
|
||||
}
|
||||
IdentType::User(<span class="kw">_</span>) => {}
|
||||
};
|
||||
<span class="macro">info!</span>(event = %ident, <span class="string">"Access check for modify event"</span>);
|
||||
|
||||
<span class="kw">match </span>ident.access_scope() {
|
||||
AccessScope::IdentityOnly | AccessScope::ReadOnly | AccessScope::Synchronise => {
|
||||
<span class="macro">security_access!</span>(<span class="string">"denied ❌ - identity access scope is not permitted to modify"</span>);
|
||||
<span class="kw">return </span>AccessResult::Denied;
|
||||
}
|
||||
AccessScope::ReadWrite => {
|
||||
<span class="comment">// As you were
|
||||
</span>}
|
||||
};
|
||||
|
||||
AccessResult::Ignore
|
||||
}
|
||||
|
||||
<span class="kw">fn </span>modify_pres_test<<span class="lifetime">'a</span>>(scoped_acp: <span class="kw-2">&</span>[<span class="kw-2">&</span><span class="lifetime">'a </span>AccessControlModify]) -> AccessResult<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">let </span>allowed_pres: BTreeSet<<span class="kw-2">&</span>str> = scoped_acp
|
||||
.iter()
|
||||
.flat_map(|acp| acp.presattrs.iter().map(|v| v.as_str()))
|
||||
.collect();
|
||||
AccessResult::Allow(allowed_pres)
|
||||
}
|
||||
|
||||
<span class="kw">fn </span>modify_rem_test<<span class="lifetime">'a</span>>(scoped_acp: <span class="kw-2">&</span>[<span class="kw-2">&</span><span class="lifetime">'a </span>AccessControlModify]) -> AccessResult<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">let </span>allowed_rem: BTreeSet<<span class="kw-2">&</span>str> = scoped_acp
|
||||
.iter()
|
||||
.flat_map(|acp| acp.remattrs.iter().map(|v| v.as_str()))
|
||||
.collect();
|
||||
AccessResult::Allow(allowed_rem)
|
||||
}
|
||||
|
||||
<span class="kw">fn </span>modify_cls_test<<span class="lifetime">'a</span>>(scoped_acp: <span class="kw-2">&</span>[<span class="kw-2">&</span><span class="lifetime">'a </span>AccessControlModify]) -> AccessResult<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">let </span>allowed_classes: BTreeSet<<span class="kw-2">&</span>str> = scoped_acp
|
||||
.iter()
|
||||
.flat_map(|acp| acp.classes.iter().map(|v| v.as_str()))
|
||||
.collect();
|
||||
AccessResult::Allow(allowed_classes)
|
||||
}
|
||||
</code></pre></div>
|
||||
</section></div></main><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="kanidmd_lib" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
|
@ -0,0 +1,664 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `kanidmd/lib/src/server/access/profiles.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>profiles.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../../../normalize.css"><link rel="stylesheet" href="../../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../../../ayu.css" disabled><link rel="stylesheet" href="../../../../dark.css" disabled><link rel="stylesheet" href="../../../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../../../storage.js"></script><script defer src="../../../../source-script.js"></script><script defer src="../../../../source-files.js"></script><script defer src="../../../../main.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg"></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><div class="width-limiter"><nav class="sub"><a class="sub-logo-container" href="../../../../kanidmd_lib/index.html"><img class="rust-logo" src="../../../../rust-logo.svg" alt="logo"></a><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><pre class="src-line-numbers"><span id="1">1</span>
|
||||
<span id="2">2</span>
|
||||
<span id="3">3</span>
|
||||
<span id="4">4</span>
|
||||
<span id="5">5</span>
|
||||
<span id="6">6</span>
|
||||
<span id="7">7</span>
|
||||
<span id="8">8</span>
|
||||
<span id="9">9</span>
|
||||
<span id="10">10</span>
|
||||
<span id="11">11</span>
|
||||
<span id="12">12</span>
|
||||
<span id="13">13</span>
|
||||
<span id="14">14</span>
|
||||
<span id="15">15</span>
|
||||
<span id="16">16</span>
|
||||
<span id="17">17</span>
|
||||
<span id="18">18</span>
|
||||
<span id="19">19</span>
|
||||
<span id="20">20</span>
|
||||
<span id="21">21</span>
|
||||
<span id="22">22</span>
|
||||
<span id="23">23</span>
|
||||
<span id="24">24</span>
|
||||
<span id="25">25</span>
|
||||
<span id="26">26</span>
|
||||
<span id="27">27</span>
|
||||
<span id="28">28</span>
|
||||
<span id="29">29</span>
|
||||
<span id="30">30</span>
|
||||
<span id="31">31</span>
|
||||
<span id="32">32</span>
|
||||
<span id="33">33</span>
|
||||
<span id="34">34</span>
|
||||
<span id="35">35</span>
|
||||
<span id="36">36</span>
|
||||
<span id="37">37</span>
|
||||
<span id="38">38</span>
|
||||
<span id="39">39</span>
|
||||
<span id="40">40</span>
|
||||
<span id="41">41</span>
|
||||
<span id="42">42</span>
|
||||
<span id="43">43</span>
|
||||
<span id="44">44</span>
|
||||
<span id="45">45</span>
|
||||
<span id="46">46</span>
|
||||
<span id="47">47</span>
|
||||
<span id="48">48</span>
|
||||
<span id="49">49</span>
|
||||
<span id="50">50</span>
|
||||
<span id="51">51</span>
|
||||
<span id="52">52</span>
|
||||
<span id="53">53</span>
|
||||
<span id="54">54</span>
|
||||
<span id="55">55</span>
|
||||
<span id="56">56</span>
|
||||
<span id="57">57</span>
|
||||
<span id="58">58</span>
|
||||
<span id="59">59</span>
|
||||
<span id="60">60</span>
|
||||
<span id="61">61</span>
|
||||
<span id="62">62</span>
|
||||
<span id="63">63</span>
|
||||
<span id="64">64</span>
|
||||
<span id="65">65</span>
|
||||
<span id="66">66</span>
|
||||
<span id="67">67</span>
|
||||
<span id="68">68</span>
|
||||
<span id="69">69</span>
|
||||
<span id="70">70</span>
|
||||
<span id="71">71</span>
|
||||
<span id="72">72</span>
|
||||
<span id="73">73</span>
|
||||
<span id="74">74</span>
|
||||
<span id="75">75</span>
|
||||
<span id="76">76</span>
|
||||
<span id="77">77</span>
|
||||
<span id="78">78</span>
|
||||
<span id="79">79</span>
|
||||
<span id="80">80</span>
|
||||
<span id="81">81</span>
|
||||
<span id="82">82</span>
|
||||
<span id="83">83</span>
|
||||
<span id="84">84</span>
|
||||
<span id="85">85</span>
|
||||
<span id="86">86</span>
|
||||
<span id="87">87</span>
|
||||
<span id="88">88</span>
|
||||
<span id="89">89</span>
|
||||
<span id="90">90</span>
|
||||
<span id="91">91</span>
|
||||
<span id="92">92</span>
|
||||
<span id="93">93</span>
|
||||
<span id="94">94</span>
|
||||
<span id="95">95</span>
|
||||
<span id="96">96</span>
|
||||
<span id="97">97</span>
|
||||
<span id="98">98</span>
|
||||
<span id="99">99</span>
|
||||
<span id="100">100</span>
|
||||
<span id="101">101</span>
|
||||
<span id="102">102</span>
|
||||
<span id="103">103</span>
|
||||
<span id="104">104</span>
|
||||
<span id="105">105</span>
|
||||
<span id="106">106</span>
|
||||
<span id="107">107</span>
|
||||
<span id="108">108</span>
|
||||
<span id="109">109</span>
|
||||
<span id="110">110</span>
|
||||
<span id="111">111</span>
|
||||
<span id="112">112</span>
|
||||
<span id="113">113</span>
|
||||
<span id="114">114</span>
|
||||
<span id="115">115</span>
|
||||
<span id="116">116</span>
|
||||
<span id="117">117</span>
|
||||
<span id="118">118</span>
|
||||
<span id="119">119</span>
|
||||
<span id="120">120</span>
|
||||
<span id="121">121</span>
|
||||
<span id="122">122</span>
|
||||
<span id="123">123</span>
|
||||
<span id="124">124</span>
|
||||
<span id="125">125</span>
|
||||
<span id="126">126</span>
|
||||
<span id="127">127</span>
|
||||
<span id="128">128</span>
|
||||
<span id="129">129</span>
|
||||
<span id="130">130</span>
|
||||
<span id="131">131</span>
|
||||
<span id="132">132</span>
|
||||
<span id="133">133</span>
|
||||
<span id="134">134</span>
|
||||
<span id="135">135</span>
|
||||
<span id="136">136</span>
|
||||
<span id="137">137</span>
|
||||
<span id="138">138</span>
|
||||
<span id="139">139</span>
|
||||
<span id="140">140</span>
|
||||
<span id="141">141</span>
|
||||
<span id="142">142</span>
|
||||
<span id="143">143</span>
|
||||
<span id="144">144</span>
|
||||
<span id="145">145</span>
|
||||
<span id="146">146</span>
|
||||
<span id="147">147</span>
|
||||
<span id="148">148</span>
|
||||
<span id="149">149</span>
|
||||
<span id="150">150</span>
|
||||
<span id="151">151</span>
|
||||
<span id="152">152</span>
|
||||
<span id="153">153</span>
|
||||
<span id="154">154</span>
|
||||
<span id="155">155</span>
|
||||
<span id="156">156</span>
|
||||
<span id="157">157</span>
|
||||
<span id="158">158</span>
|
||||
<span id="159">159</span>
|
||||
<span id="160">160</span>
|
||||
<span id="161">161</span>
|
||||
<span id="162">162</span>
|
||||
<span id="163">163</span>
|
||||
<span id="164">164</span>
|
||||
<span id="165">165</span>
|
||||
<span id="166">166</span>
|
||||
<span id="167">167</span>
|
||||
<span id="168">168</span>
|
||||
<span id="169">169</span>
|
||||
<span id="170">170</span>
|
||||
<span id="171">171</span>
|
||||
<span id="172">172</span>
|
||||
<span id="173">173</span>
|
||||
<span id="174">174</span>
|
||||
<span id="175">175</span>
|
||||
<span id="176">176</span>
|
||||
<span id="177">177</span>
|
||||
<span id="178">178</span>
|
||||
<span id="179">179</span>
|
||||
<span id="180">180</span>
|
||||
<span id="181">181</span>
|
||||
<span id="182">182</span>
|
||||
<span id="183">183</span>
|
||||
<span id="184">184</span>
|
||||
<span id="185">185</span>
|
||||
<span id="186">186</span>
|
||||
<span id="187">187</span>
|
||||
<span id="188">188</span>
|
||||
<span id="189">189</span>
|
||||
<span id="190">190</span>
|
||||
<span id="191">191</span>
|
||||
<span id="192">192</span>
|
||||
<span id="193">193</span>
|
||||
<span id="194">194</span>
|
||||
<span id="195">195</span>
|
||||
<span id="196">196</span>
|
||||
<span id="197">197</span>
|
||||
<span id="198">198</span>
|
||||
<span id="199">199</span>
|
||||
<span id="200">200</span>
|
||||
<span id="201">201</span>
|
||||
<span id="202">202</span>
|
||||
<span id="203">203</span>
|
||||
<span id="204">204</span>
|
||||
<span id="205">205</span>
|
||||
<span id="206">206</span>
|
||||
<span id="207">207</span>
|
||||
<span id="208">208</span>
|
||||
<span id="209">209</span>
|
||||
<span id="210">210</span>
|
||||
<span id="211">211</span>
|
||||
<span id="212">212</span>
|
||||
<span id="213">213</span>
|
||||
<span id="214">214</span>
|
||||
<span id="215">215</span>
|
||||
<span id="216">216</span>
|
||||
<span id="217">217</span>
|
||||
<span id="218">218</span>
|
||||
<span id="219">219</span>
|
||||
<span id="220">220</span>
|
||||
<span id="221">221</span>
|
||||
<span id="222">222</span>
|
||||
<span id="223">223</span>
|
||||
<span id="224">224</span>
|
||||
<span id="225">225</span>
|
||||
<span id="226">226</span>
|
||||
<span id="227">227</span>
|
||||
<span id="228">228</span>
|
||||
<span id="229">229</span>
|
||||
<span id="230">230</span>
|
||||
<span id="231">231</span>
|
||||
<span id="232">232</span>
|
||||
<span id="233">233</span>
|
||||
<span id="234">234</span>
|
||||
<span id="235">235</span>
|
||||
<span id="236">236</span>
|
||||
<span id="237">237</span>
|
||||
<span id="238">238</span>
|
||||
<span id="239">239</span>
|
||||
<span id="240">240</span>
|
||||
<span id="241">241</span>
|
||||
<span id="242">242</span>
|
||||
<span id="243">243</span>
|
||||
<span id="244">244</span>
|
||||
<span id="245">245</span>
|
||||
<span id="246">246</span>
|
||||
<span id="247">247</span>
|
||||
<span id="248">248</span>
|
||||
<span id="249">249</span>
|
||||
<span id="250">250</span>
|
||||
<span id="251">251</span>
|
||||
<span id="252">252</span>
|
||||
<span id="253">253</span>
|
||||
<span id="254">254</span>
|
||||
<span id="255">255</span>
|
||||
<span id="256">256</span>
|
||||
<span id="257">257</span>
|
||||
<span id="258">258</span>
|
||||
<span id="259">259</span>
|
||||
<span id="260">260</span>
|
||||
<span id="261">261</span>
|
||||
<span id="262">262</span>
|
||||
<span id="263">263</span>
|
||||
<span id="264">264</span>
|
||||
<span id="265">265</span>
|
||||
<span id="266">266</span>
|
||||
<span id="267">267</span>
|
||||
<span id="268">268</span>
|
||||
<span id="269">269</span>
|
||||
<span id="270">270</span>
|
||||
<span id="271">271</span>
|
||||
<span id="272">272</span>
|
||||
<span id="273">273</span>
|
||||
<span id="274">274</span>
|
||||
<span id="275">275</span>
|
||||
<span id="276">276</span>
|
||||
<span id="277">277</span>
|
||||
<span id="278">278</span>
|
||||
<span id="279">279</span>
|
||||
<span id="280">280</span>
|
||||
<span id="281">281</span>
|
||||
<span id="282">282</span>
|
||||
<span id="283">283</span>
|
||||
<span id="284">284</span>
|
||||
<span id="285">285</span>
|
||||
<span id="286">286</span>
|
||||
<span id="287">287</span>
|
||||
<span id="288">288</span>
|
||||
<span id="289">289</span>
|
||||
<span id="290">290</span>
|
||||
<span id="291">291</span>
|
||||
<span id="292">292</span>
|
||||
<span id="293">293</span>
|
||||
<span id="294">294</span>
|
||||
<span id="295">295</span>
|
||||
<span id="296">296</span>
|
||||
<span id="297">297</span>
|
||||
<span id="298">298</span>
|
||||
<span id="299">299</span>
|
||||
<span id="300">300</span>
|
||||
<span id="301">301</span>
|
||||
<span id="302">302</span>
|
||||
<span id="303">303</span>
|
||||
<span id="304">304</span>
|
||||
<span id="305">305</span>
|
||||
<span id="306">306</span>
|
||||
<span id="307">307</span>
|
||||
<span id="308">308</span>
|
||||
<span id="309">309</span>
|
||||
<span id="310">310</span>
|
||||
<span id="311">311</span>
|
||||
<span id="312">312</span>
|
||||
<span id="313">313</span>
|
||||
<span id="314">314</span>
|
||||
<span id="315">315</span>
|
||||
<span id="316">316</span>
|
||||
<span id="317">317</span>
|
||||
<span id="318">318</span>
|
||||
<span id="319">319</span>
|
||||
<span id="320">320</span>
|
||||
<span id="321">321</span>
|
||||
<span id="322">322</span>
|
||||
<span id="323">323</span>
|
||||
<span id="324">324</span>
|
||||
<span id="325">325</span>
|
||||
<span id="326">326</span>
|
||||
<span id="327">327</span>
|
||||
<span id="328">328</span>
|
||||
<span id="329">329</span>
|
||||
<span id="330">330</span>
|
||||
<span id="331">331</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use </span><span class="kw">crate</span>::prelude::<span class="kw-2">*</span>;
|
||||
<span class="kw">use </span>std::collections::BTreeSet;
|
||||
|
||||
<span class="kw">use </span><span class="kw">crate</span>::filter::{Filter, FilterValid};
|
||||
|
||||
<span class="kw">use </span>kanidm_proto::v1::Filter <span class="kw">as </span>ProtoFilter;
|
||||
|
||||
<span class="comment">// =========================================================================
|
||||
// PARSE ENTRY TO ACP, AND ACP MANAGEMENT
|
||||
// =========================================================================
|
||||
|
||||
</span><span class="attribute">#[derive(Debug, Clone)]
|
||||
</span><span class="kw">pub struct </span>AccessControlSearch {
|
||||
<span class="kw">pub </span>acp: AccessControlProfile,
|
||||
<span class="kw">pub </span>attrs: BTreeSet<AttrString>,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>AccessControlSearch {
|
||||
<span class="kw">pub fn </span>try_from(
|
||||
qs: <span class="kw-2">&mut </span>QueryServerWriteTransaction,
|
||||
value: <span class="kw-2">&</span>Entry<EntrySealed, EntryCommitted>,
|
||||
) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>, OperationError> {
|
||||
<span class="kw">if </span>!value.attribute_equality(<span class="string">"class"</span>, <span class="kw-2">&</span>PVCLASS_ACS) {
|
||||
<span class="macro">admin_error!</span>(<span class="string">"class access_control_search not present."</span>);
|
||||
<span class="kw">return </span><span class="prelude-val">Err</span>(OperationError::InvalidAcpState(
|
||||
<span class="string">"Missing access_control_search"</span>.to_string(),
|
||||
));
|
||||
}
|
||||
|
||||
<span class="kw">let </span>attrs = value
|
||||
.get_ava_iter_iutf8(<span class="string">"acp_search_attr"</span>)
|
||||
.ok_or_else(|| {
|
||||
<span class="macro">admin_error!</span>(<span class="string">"Missing acp_search_attr"</span>);
|
||||
OperationError::InvalidAcpState(<span class="string">"Missing acp_search_attr"</span>.to_string())
|
||||
})<span class="question-mark">?
|
||||
</span>.map(AttrString::from)
|
||||
.collect();
|
||||
|
||||
<span class="kw">let </span>acp = AccessControlProfile::try_from(qs, value)<span class="question-mark">?</span>;
|
||||
|
||||
<span class="prelude-val">Ok</span>(AccessControlSearch { acp, attrs })
|
||||
}
|
||||
|
||||
<span class="attribute">#[cfg(test)]
|
||||
</span><span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">unsafe fn </span>from_raw(
|
||||
name: <span class="kw-2">&</span>str,
|
||||
uuid: Uuid,
|
||||
receiver: Uuid,
|
||||
targetscope: Filter<FilterValid>,
|
||||
attrs: <span class="kw-2">&</span>str,
|
||||
) -> <span class="self">Self </span>{
|
||||
AccessControlSearch {
|
||||
acp: AccessControlProfile {
|
||||
name: name.to_string(),
|
||||
uuid,
|
||||
receiver: <span class="prelude-val">Some</span>(receiver),
|
||||
targetscope,
|
||||
},
|
||||
attrs: attrs
|
||||
.split_whitespace()
|
||||
.map(|s| AttrString::from(s))
|
||||
.collect(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[derive(Debug, Clone)]
|
||||
</span><span class="kw">pub struct </span>AccessControlDelete {
|
||||
<span class="kw">pub </span>acp: AccessControlProfile,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>AccessControlDelete {
|
||||
<span class="kw">pub fn </span>try_from(
|
||||
qs: <span class="kw-2">&mut </span>QueryServerWriteTransaction,
|
||||
value: <span class="kw-2">&</span>Entry<EntrySealed, EntryCommitted>,
|
||||
) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>, OperationError> {
|
||||
<span class="kw">if </span>!value.attribute_equality(<span class="string">"class"</span>, <span class="kw-2">&</span>PVCLASS_ACD) {
|
||||
<span class="macro">admin_error!</span>(<span class="string">"class access_control_delete not present."</span>);
|
||||
<span class="kw">return </span><span class="prelude-val">Err</span>(OperationError::InvalidAcpState(
|
||||
<span class="string">"Missing access_control_delete"</span>.to_string(),
|
||||
));
|
||||
}
|
||||
|
||||
<span class="prelude-val">Ok</span>(AccessControlDelete {
|
||||
acp: AccessControlProfile::try_from(qs, value)<span class="question-mark">?</span>,
|
||||
})
|
||||
}
|
||||
|
||||
<span class="attribute">#[cfg(test)]
|
||||
</span><span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">unsafe fn </span>from_raw(
|
||||
name: <span class="kw-2">&</span>str,
|
||||
uuid: Uuid,
|
||||
receiver: Uuid,
|
||||
targetscope: Filter<FilterValid>,
|
||||
) -> <span class="self">Self </span>{
|
||||
AccessControlDelete {
|
||||
acp: AccessControlProfile {
|
||||
name: name.to_string(),
|
||||
uuid,
|
||||
receiver: <span class="prelude-val">Some</span>(receiver),
|
||||
targetscope,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[derive(Debug, Clone)]
|
||||
</span><span class="kw">pub struct </span>AccessControlCreate {
|
||||
<span class="kw">pub </span>acp: AccessControlProfile,
|
||||
<span class="kw">pub </span>classes: Vec<AttrString>,
|
||||
<span class="kw">pub </span>attrs: Vec<AttrString>,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>AccessControlCreate {
|
||||
<span class="kw">pub fn </span>try_from(
|
||||
qs: <span class="kw-2">&mut </span>QueryServerWriteTransaction,
|
||||
value: <span class="kw-2">&</span>Entry<EntrySealed, EntryCommitted>,
|
||||
) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>, OperationError> {
|
||||
<span class="kw">if </span>!value.attribute_equality(<span class="string">"class"</span>, <span class="kw-2">&</span>PVCLASS_ACC) {
|
||||
<span class="macro">admin_error!</span>(<span class="string">"class access_control_create not present."</span>);
|
||||
<span class="kw">return </span><span class="prelude-val">Err</span>(OperationError::InvalidAcpState(
|
||||
<span class="string">"Missing access_control_create"</span>.to_string(),
|
||||
));
|
||||
}
|
||||
|
||||
<span class="kw">let </span>attrs = value
|
||||
.get_ava_iter_iutf8(<span class="string">"acp_create_attr"</span>)
|
||||
.map(|i| i.map(AttrString::from).collect())
|
||||
.unwrap_or_else(Vec::new);
|
||||
|
||||
<span class="kw">let </span>classes = value
|
||||
.get_ava_iter_iutf8(<span class="string">"acp_create_class"</span>)
|
||||
.map(|i| i.map(AttrString::from).collect())
|
||||
.unwrap_or_else(Vec::new);
|
||||
|
||||
<span class="prelude-val">Ok</span>(AccessControlCreate {
|
||||
acp: AccessControlProfile::try_from(qs, value)<span class="question-mark">?</span>,
|
||||
classes,
|
||||
attrs,
|
||||
})
|
||||
}
|
||||
|
||||
<span class="attribute">#[cfg(test)]
|
||||
</span><span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">unsafe fn </span>from_raw(
|
||||
name: <span class="kw-2">&</span>str,
|
||||
uuid: Uuid,
|
||||
receiver: Uuid,
|
||||
targetscope: Filter<FilterValid>,
|
||||
classes: <span class="kw-2">&</span>str,
|
||||
attrs: <span class="kw-2">&</span>str,
|
||||
) -> <span class="self">Self </span>{
|
||||
AccessControlCreate {
|
||||
acp: AccessControlProfile {
|
||||
name: name.to_string(),
|
||||
uuid,
|
||||
receiver: <span class="prelude-val">Some</span>(receiver),
|
||||
targetscope,
|
||||
},
|
||||
classes: classes.split_whitespace().map(AttrString::from).collect(),
|
||||
attrs: attrs.split_whitespace().map(AttrString::from).collect(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[derive(Debug, Clone)]
|
||||
</span><span class="kw">pub struct </span>AccessControlModify {
|
||||
<span class="kw">pub </span>acp: AccessControlProfile,
|
||||
<span class="kw">pub </span>classes: Vec<AttrString>,
|
||||
<span class="kw">pub </span>presattrs: Vec<AttrString>,
|
||||
<span class="kw">pub </span>remattrs: Vec<AttrString>,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>AccessControlModify {
|
||||
<span class="kw">pub fn </span>try_from(
|
||||
qs: <span class="kw-2">&mut </span>QueryServerWriteTransaction,
|
||||
value: <span class="kw-2">&</span>Entry<EntrySealed, EntryCommitted>,
|
||||
) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>, OperationError> {
|
||||
<span class="kw">if </span>!value.attribute_equality(<span class="string">"class"</span>, <span class="kw-2">&</span>PVCLASS_ACM) {
|
||||
<span class="macro">admin_error!</span>(<span class="string">"class access_control_modify not present."</span>);
|
||||
<span class="kw">return </span><span class="prelude-val">Err</span>(OperationError::InvalidAcpState(
|
||||
<span class="string">"Missing access_control_modify"</span>.to_string(),
|
||||
));
|
||||
}
|
||||
|
||||
<span class="kw">let </span>presattrs = value
|
||||
.get_ava_iter_iutf8(<span class="string">"acp_modify_presentattr"</span>)
|
||||
.map(|i| i.map(AttrString::from).collect())
|
||||
.unwrap_or_else(Vec::new);
|
||||
|
||||
<span class="kw">let </span>remattrs = value
|
||||
.get_ava_iter_iutf8(<span class="string">"acp_modify_removedattr"</span>)
|
||||
.map(|i| i.map(AttrString::from).collect())
|
||||
.unwrap_or_else(Vec::new);
|
||||
|
||||
<span class="kw">let </span>classes = value
|
||||
.get_ava_iter_iutf8(<span class="string">"acp_modify_class"</span>)
|
||||
.map(|i| i.map(AttrString::from).collect())
|
||||
.unwrap_or_else(Vec::new);
|
||||
|
||||
<span class="prelude-val">Ok</span>(AccessControlModify {
|
||||
acp: AccessControlProfile::try_from(qs, value)<span class="question-mark">?</span>,
|
||||
classes,
|
||||
presattrs,
|
||||
remattrs,
|
||||
})
|
||||
}
|
||||
|
||||
<span class="attribute">#[cfg(test)]
|
||||
</span><span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">unsafe fn </span>from_raw(
|
||||
name: <span class="kw-2">&</span>str,
|
||||
uuid: Uuid,
|
||||
receiver: Uuid,
|
||||
targetscope: Filter<FilterValid>,
|
||||
presattrs: <span class="kw-2">&</span>str,
|
||||
remattrs: <span class="kw-2">&</span>str,
|
||||
classes: <span class="kw-2">&</span>str,
|
||||
) -> <span class="self">Self </span>{
|
||||
AccessControlModify {
|
||||
acp: AccessControlProfile {
|
||||
name: name.to_string(),
|
||||
uuid,
|
||||
receiver: <span class="prelude-val">Some</span>(receiver),
|
||||
targetscope,
|
||||
},
|
||||
classes: classes
|
||||
.split_whitespace()
|
||||
.map(|s| AttrString::from(s))
|
||||
.collect(),
|
||||
presattrs: presattrs
|
||||
.split_whitespace()
|
||||
.map(|s| AttrString::from(s))
|
||||
.collect(),
|
||||
remattrs: remattrs
|
||||
.split_whitespace()
|
||||
.map(|s| AttrString::from(s))
|
||||
.collect(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[derive(Debug, Clone)]
|
||||
</span><span class="kw">pub struct </span>AccessControlProfile {
|
||||
<span class="kw">pub </span>name: String,
|
||||
<span class="comment">// Currently we retrieve this but don't use it. We could depending on how we change
|
||||
// the acp update routine.
|
||||
</span><span class="attribute">#[allow(dead_code)]
|
||||
</span>uuid: Uuid,
|
||||
<span class="comment">// Must be
|
||||
// Group
|
||||
// === ⚠️ WARNING!!! ⚠️ ===
|
||||
// This is OPTION to allow migration from 10 -> 11. We have to do this because ACP is reloaded
|
||||
// so early in the boot phase that we can't have migrated the content of the receiver yet! As a
|
||||
// result we MUST be able to withstand some failure in the parse process. The INTENT is that
|
||||
// during early boot this will be None, and will NEVER match. Once started, the migration
|
||||
// will occur, and this will flip to Some. In a future version we can remove this!
|
||||
</span><span class="kw">pub </span>receiver: <span class="prelude-ty">Option</span><Uuid>,
|
||||
<span class="comment">// or
|
||||
// Filter
|
||||
// Group
|
||||
// Self
|
||||
// and
|
||||
// exclude
|
||||
// Group
|
||||
</span><span class="kw">pub </span>targetscope: Filter<FilterValid>,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>AccessControlProfile {
|
||||
<span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">fn </span>try_from(
|
||||
qs: <span class="kw-2">&mut </span>QueryServerWriteTransaction,
|
||||
value: <span class="kw-2">&</span>Entry<EntrySealed, EntryCommitted>,
|
||||
) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>, OperationError> {
|
||||
<span class="comment">// Assert we have class access_control_profile
|
||||
</span><span class="kw">if </span>!value.attribute_equality(<span class="string">"class"</span>, <span class="kw-2">&</span>PVCLASS_ACP) {
|
||||
<span class="macro">admin_error!</span>(<span class="string">"class access_control_profile not present."</span>);
|
||||
<span class="kw">return </span><span class="prelude-val">Err</span>(OperationError::InvalidAcpState(
|
||||
<span class="string">"Missing access_control_profile"</span>.to_string(),
|
||||
));
|
||||
}
|
||||
|
||||
<span class="comment">// copy name
|
||||
</span><span class="kw">let </span>name = value
|
||||
.get_ava_single_iname(<span class="string">"name"</span>)
|
||||
.ok_or_else(|| {
|
||||
<span class="macro">admin_error!</span>(<span class="string">"Missing name"</span>);
|
||||
OperationError::InvalidAcpState(<span class="string">"Missing name"</span>.to_string())
|
||||
})<span class="question-mark">?
|
||||
</span>.to_string();
|
||||
<span class="comment">// copy uuid
|
||||
</span><span class="kw">let </span>uuid = value.get_uuid();
|
||||
<span class="comment">// receiver, and turn to real filter
|
||||
|
||||
// === ⚠️ WARNING!!! ⚠️ ===
|
||||
// See struct ACP for details.
|
||||
</span><span class="kw">let </span>receiver = value.get_ava_single_refer(<span class="string">"acp_receiver_group"</span>);
|
||||
<span class="comment">/*
|
||||
.ok_or_else(|| {
|
||||
admin_error!("Missing acp_receiver_group");
|
||||
OperationError::InvalidAcpState("Missing acp_receiver_group".to_string())
|
||||
})?;
|
||||
*/
|
||||
|
||||
// targetscope, and turn to real filter
|
||||
</span><span class="kw">let </span>targetscope_f: ProtoFilter = value
|
||||
.get_ava_single_protofilter(<span class="string">"acp_targetscope"</span>)
|
||||
<span class="comment">// .map(|pf| pf.clone())
|
||||
</span>.cloned()
|
||||
.ok_or_else(|| {
|
||||
<span class="macro">admin_error!</span>(<span class="string">"Missing acp_targetscope"</span>);
|
||||
OperationError::InvalidAcpState(<span class="string">"Missing acp_targetscope"</span>.to_string())
|
||||
})<span class="question-mark">?</span>;
|
||||
|
||||
<span class="kw">let </span>ident = Identity::from_internal();
|
||||
|
||||
<span class="kw">let </span>targetscope_i = Filter::from_rw(<span class="kw-2">&</span>ident, <span class="kw-2">&</span>targetscope_f, qs).map_err(|e| {
|
||||
<span class="macro">admin_error!</span>(<span class="string">"Targetscope validation failed {:?}"</span>, e);
|
||||
e
|
||||
})<span class="question-mark">?</span>;
|
||||
|
||||
<span class="kw">let </span>targetscope = targetscope_i.validate(qs.get_schema()).map_err(|e| {
|
||||
<span class="macro">admin_error!</span>(<span class="string">"acp_targetscope Schema Violation {:?}"</span>, e);
|
||||
OperationError::SchemaViolation(e)
|
||||
})<span class="question-mark">?</span>;
|
||||
|
||||
<span class="prelude-val">Ok</span>(AccessControlProfile {
|
||||
name,
|
||||
uuid,
|
||||
receiver,
|
||||
targetscope,
|
||||
})
|
||||
}
|
||||
}
|
||||
</code></pre></div>
|
||||
</section></div></main><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="kanidmd_lib" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
210
docs/master/rustdoc/src/kanidmd_lib/server/access/search.rs.html
Normal file
210
docs/master/rustdoc/src/kanidmd_lib/server/access/search.rs.html
Normal file
|
@ -0,0 +1,210 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `kanidmd/lib/src/server/access/search.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>search.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../../../normalize.css"><link rel="stylesheet" href="../../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../../../ayu.css" disabled><link rel="stylesheet" href="../../../../dark.css" disabled><link rel="stylesheet" href="../../../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../../../storage.js"></script><script defer src="../../../../source-script.js"></script><script defer src="../../../../source-files.js"></script><script defer src="../../../../main.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg"></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><div class="width-limiter"><nav class="sub"><a class="sub-logo-container" href="../../../../kanidmd_lib/index.html"><img class="rust-logo" src="../../../../rust-logo.svg" alt="logo"></a><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><pre class="src-line-numbers"><span id="1">1</span>
|
||||
<span id="2">2</span>
|
||||
<span id="3">3</span>
|
||||
<span id="4">4</span>
|
||||
<span id="5">5</span>
|
||||
<span id="6">6</span>
|
||||
<span id="7">7</span>
|
||||
<span id="8">8</span>
|
||||
<span id="9">9</span>
|
||||
<span id="10">10</span>
|
||||
<span id="11">11</span>
|
||||
<span id="12">12</span>
|
||||
<span id="13">13</span>
|
||||
<span id="14">14</span>
|
||||
<span id="15">15</span>
|
||||
<span id="16">16</span>
|
||||
<span id="17">17</span>
|
||||
<span id="18">18</span>
|
||||
<span id="19">19</span>
|
||||
<span id="20">20</span>
|
||||
<span id="21">21</span>
|
||||
<span id="22">22</span>
|
||||
<span id="23">23</span>
|
||||
<span id="24">24</span>
|
||||
<span id="25">25</span>
|
||||
<span id="26">26</span>
|
||||
<span id="27">27</span>
|
||||
<span id="28">28</span>
|
||||
<span id="29">29</span>
|
||||
<span id="30">30</span>
|
||||
<span id="31">31</span>
|
||||
<span id="32">32</span>
|
||||
<span id="33">33</span>
|
||||
<span id="34">34</span>
|
||||
<span id="35">35</span>
|
||||
<span id="36">36</span>
|
||||
<span id="37">37</span>
|
||||
<span id="38">38</span>
|
||||
<span id="39">39</span>
|
||||
<span id="40">40</span>
|
||||
<span id="41">41</span>
|
||||
<span id="42">42</span>
|
||||
<span id="43">43</span>
|
||||
<span id="44">44</span>
|
||||
<span id="45">45</span>
|
||||
<span id="46">46</span>
|
||||
<span id="47">47</span>
|
||||
<span id="48">48</span>
|
||||
<span id="49">49</span>
|
||||
<span id="50">50</span>
|
||||
<span id="51">51</span>
|
||||
<span id="52">52</span>
|
||||
<span id="53">53</span>
|
||||
<span id="54">54</span>
|
||||
<span id="55">55</span>
|
||||
<span id="56">56</span>
|
||||
<span id="57">57</span>
|
||||
<span id="58">58</span>
|
||||
<span id="59">59</span>
|
||||
<span id="60">60</span>
|
||||
<span id="61">61</span>
|
||||
<span id="62">62</span>
|
||||
<span id="63">63</span>
|
||||
<span id="64">64</span>
|
||||
<span id="65">65</span>
|
||||
<span id="66">66</span>
|
||||
<span id="67">67</span>
|
||||
<span id="68">68</span>
|
||||
<span id="69">69</span>
|
||||
<span id="70">70</span>
|
||||
<span id="71">71</span>
|
||||
<span id="72">72</span>
|
||||
<span id="73">73</span>
|
||||
<span id="74">74</span>
|
||||
<span id="75">75</span>
|
||||
<span id="76">76</span>
|
||||
<span id="77">77</span>
|
||||
<span id="78">78</span>
|
||||
<span id="79">79</span>
|
||||
<span id="80">80</span>
|
||||
<span id="81">81</span>
|
||||
<span id="82">82</span>
|
||||
<span id="83">83</span>
|
||||
<span id="84">84</span>
|
||||
<span id="85">85</span>
|
||||
<span id="86">86</span>
|
||||
<span id="87">87</span>
|
||||
<span id="88">88</span>
|
||||
<span id="89">89</span>
|
||||
<span id="90">90</span>
|
||||
<span id="91">91</span>
|
||||
<span id="92">92</span>
|
||||
<span id="93">93</span>
|
||||
<span id="94">94</span>
|
||||
<span id="95">95</span>
|
||||
<span id="96">96</span>
|
||||
<span id="97">97</span>
|
||||
<span id="98">98</span>
|
||||
<span id="99">99</span>
|
||||
<span id="100">100</span>
|
||||
<span id="101">101</span>
|
||||
<span id="102">102</span>
|
||||
<span id="103">103</span>
|
||||
<span id="104">104</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use </span><span class="kw">crate</span>::prelude::<span class="kw-2">*</span>;
|
||||
<span class="kw">use </span>std::collections::BTreeSet;
|
||||
|
||||
<span class="kw">use </span><span class="kw">super</span>::profiles::AccessControlSearch;
|
||||
<span class="kw">use </span><span class="kw">super</span>::AccessResult;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::filter::FilterValidResolved;
|
||||
<span class="kw">use </span>std::sync::Arc;
|
||||
|
||||
<span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">enum </span>SearchResult<<span class="lifetime">'a</span>> {
|
||||
Denied,
|
||||
Grant,
|
||||
Allow(BTreeSet<<span class="kw-2">&</span><span class="lifetime">'a </span>str>),
|
||||
}
|
||||
|
||||
<span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">fn </span>apply_search_access<<span class="lifetime">'a</span>>(
|
||||
ident: <span class="kw-2">&</span>Identity,
|
||||
related_acp: <span class="kw-2">&</span><span class="lifetime">'a </span>[(<span class="kw-2">&</span>AccessControlSearch, Filter<FilterValidResolved>)],
|
||||
entry: <span class="kw-2">&</span><span class="lifetime">'a </span>Arc<EntrySealedCommitted>,
|
||||
) -> SearchResult<<span class="lifetime">'a</span>> {
|
||||
<span class="comment">// This could be considered "slow" due to allocs each iter with the entry. We
|
||||
// could move these out of the loop and re-use, but there are likely risks to
|
||||
// that.
|
||||
</span><span class="kw">let </span><span class="kw-2">mut </span>denied = <span class="bool-val">false</span>;
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>grant = <span class="bool-val">false</span>;
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>constrain = BTreeSet::default();
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>allow = BTreeSet::default();
|
||||
|
||||
<span class="comment">// The access control profile
|
||||
</span><span class="kw">match </span>search_filter_entry(ident, related_acp, entry) {
|
||||
AccessResult::Denied => denied = <span class="bool-val">true</span>,
|
||||
AccessResult::Grant => grant = <span class="bool-val">true</span>,
|
||||
AccessResult::Ignore => {}
|
||||
AccessResult::Constrain(<span class="kw-2">mut </span>set) => constrain.append(<span class="kw-2">&mut </span>set),
|
||||
AccessResult::Allow(<span class="kw-2">mut </span>set) => allow.append(<span class="kw-2">&mut </span>set),
|
||||
};
|
||||
|
||||
<span class="comment">// We'll add more modules later.
|
||||
|
||||
// Now finalise the decision.
|
||||
|
||||
</span><span class="kw">if </span>denied {
|
||||
SearchResult::Denied
|
||||
} <span class="kw">else if </span>grant {
|
||||
SearchResult::Grant
|
||||
} <span class="kw">else </span>{
|
||||
<span class="kw">let </span>allowed_attrs = <span class="kw">if </span>!constrain.is_empty() {
|
||||
<span class="comment">// bit_and
|
||||
</span><span class="kw-2">&</span>constrain & <span class="kw-2">&</span>allow
|
||||
} <span class="kw">else </span>{
|
||||
allow
|
||||
};
|
||||
SearchResult::Allow(allowed_attrs)
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">fn </span>search_filter_entry<<span class="lifetime">'a</span>>(
|
||||
ident: <span class="kw-2">&</span>Identity,
|
||||
related_acp: <span class="kw-2">&</span><span class="lifetime">'a </span>[(<span class="kw-2">&</span>AccessControlSearch, Filter<FilterValidResolved>)],
|
||||
entry: <span class="kw-2">&</span><span class="lifetime">'a </span>Arc<EntrySealedCommitted>,
|
||||
) -> AccessResult<<span class="lifetime">'a</span>> {
|
||||
<span class="comment">// If this is an internal search, return our working set.
|
||||
</span><span class="kw">match </span><span class="kw-2">&</span>ident.origin {
|
||||
IdentType::Internal => {
|
||||
<span class="macro">trace!</span>(<span class="string">"Internal operation, bypassing access check"</span>);
|
||||
<span class="comment">// No need to check ACS
|
||||
</span><span class="kw">return </span>AccessResult::Grant;
|
||||
}
|
||||
IdentType::Synch(<span class="kw">_</span>) => {
|
||||
<span class="macro">security_critical!</span>(<span class="string">"Blocking sync check"</span>);
|
||||
<span class="kw">return </span>AccessResult::Denied;
|
||||
}
|
||||
IdentType::User(<span class="kw">_</span>) => {}
|
||||
};
|
||||
<span class="macro">info!</span>(event = %ident, <span class="string">"Access check for search (filter) event"</span>);
|
||||
|
||||
<span class="kw">match </span>ident.access_scope() {
|
||||
AccessScope::IdentityOnly | AccessScope::Synchronise => {
|
||||
<span class="macro">security_access!</span>(<span class="string">"denied ❌ - identity access scope is not permitted to search"</span>);
|
||||
<span class="kw">return </span>AccessResult::Denied;
|
||||
}
|
||||
AccessScope::ReadOnly | AccessScope::ReadWrite => {
|
||||
<span class="comment">// As you were
|
||||
</span>}
|
||||
};
|
||||
|
||||
<span class="kw">let </span>allowed_attrs: BTreeSet<<span class="kw-2">&</span>str> = related_acp
|
||||
.iter()
|
||||
.filter_map(|(acs, f_res)| {
|
||||
<span class="comment">// if it applies
|
||||
</span><span class="kw">if </span>entry.entry_match_no_index(f_res) {
|
||||
<span class="macro">security_access!</span>(entry = <span class="question-mark">?</span>entry.get_uuid(), acs = %acs.acp.name, <span class="string">"entry matches acs"</span>);
|
||||
<span class="comment">// add search_attrs to allowed.
|
||||
</span><span class="prelude-val">Some</span>(acs.attrs.iter().map(|s| s.as_str()))
|
||||
} <span class="kw">else </span>{
|
||||
<span class="comment">// should this be `security_access`?
|
||||
</span><span class="macro">trace!</span>(entry = <span class="question-mark">?</span>entry.get_uuid(), acs = %acs.acp.name, <span class="string">"entry DOES NOT match acs"</span>);
|
||||
<span class="prelude-val">None
|
||||
</span>}
|
||||
})
|
||||
.flatten()
|
||||
.collect();
|
||||
|
||||
AccessResult::Allow(allowed_attrs)
|
||||
}
|
||||
</code></pre></div>
|
||||
</section></div></main><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="kanidmd_lib" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
|
@ -1746,6 +1746,8 @@
|
|||
<span id="1746">1746</span>
|
||||
<span id="1747">1747</span>
|
||||
<span id="1748">1748</span>
|
||||
<span id="1749">1749</span>
|
||||
<span id="1750">1750</span>
|
||||
</pre><pre class="rust"><code><span class="doccomment">//! `server` contains the query server, which is the main high level construction
|
||||
//! to coordinate queries and operations in the server.
|
||||
|
||||
|
@ -1762,7 +1764,9 @@
|
|||
<span class="kw">use </span>tracing::trace;
|
||||
|
||||
<span class="kw">use </span><span class="self">self</span>::access::{
|
||||
AccessControlCreate, AccessControlDelete, AccessControlModify, AccessControlSearch,
|
||||
profiles::{
|
||||
AccessControlCreate, AccessControlDelete, AccessControlModify, AccessControlSearch,
|
||||
},
|
||||
AccessControls, AccessControlsReadTransaction, AccessControlsTransaction,
|
||||
AccessControlsWriteTransaction,
|
||||
};
|
||||
|
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Documentation for Rustdoc"><meta name="keywords" content="rust, rustlang, rust-lang"><title>Rustdoc help</title><link rel="preload" as="font" type="font/woff2" crossorigin href="./SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="./normalize.css"><link rel="stylesheet" href="./rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="./ayu.css" disabled><link rel="stylesheet" href="./dark.css" disabled><link rel="stylesheet" href="./light.css" id="themeStyle"><script id="default-settings" ></script><script src="./storage.js"></script><script defer src="./main.js"></script><noscript><link rel="stylesheet" href="./noscript.css"></noscript><link rel="alternate icon" type="image/png" href="./favicon-16x16.png"><link rel="alternate icon" type="image/png" href="./favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="./favicon.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="./kanidm_proto/index.html"><div class="logo-container"><img class="rust-logo" src="./rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="./kanidm_proto/index.html"><div class="logo-container"><img class="rust-logo" src="./rust-logo.svg" alt="logo"></div></a><h2 class="location">Help</h2><div class="sidebar-elems"></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="./help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="./settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="./wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Rustdoc help</h1><span class="out-of-band"><a id="back" href="javascript:void(0)" onclick="history.back();">Back</a></span></div><noscript><section><p>You need to enable Javascript to use keyboard commands or search.</p><p>For more information, browse the <a href="https://doc.rust-lang.org/rustdoc/">rustdoc handbook</a>.</p></section></noscript></section></div></main><div id="rustdoc-vars" data-root-path="./" data-current-crate="kanidm_proto" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Documentation for Rustdoc"><meta name="keywords" content="rust, rustlang, rust-lang"><title>Rustdoc help</title><link rel="preload" as="font" type="font/woff2" crossorigin href="./SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="./normalize.css"><link rel="stylesheet" href="./rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="./ayu.css" disabled><link rel="stylesheet" href="./dark.css" disabled><link rel="stylesheet" href="./light.css" id="themeStyle"><script id="default-settings" ></script><script src="./storage.js"></script><script defer src="./main.js"></script><noscript><link rel="stylesheet" href="./noscript.css"></noscript><link rel="alternate icon" type="image/png" href="./favicon-16x16.png"><link rel="alternate icon" type="image/png" href="./favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="./favicon.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="./kanidmd_lib/index.html"><div class="logo-container"><img class="rust-logo" src="./rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="./kanidmd_lib/index.html"><div class="logo-container"><img class="rust-logo" src="./rust-logo.svg" alt="logo"></div></a><h2 class="location">Help</h2><div class="sidebar-elems"></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="./help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="./settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="./wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Rustdoc help</h1><span class="out-of-band"><a id="back" href="javascript:void(0)" onclick="history.back();">Back</a></span></div><noscript><section><p>You need to enable Javascript to use keyboard commands or search.</p><p>For more information, browse the <a href="https://doc.rust-lang.org/rustdoc/">rustdoc handbook</a>.</p></section></noscript></section></div></main><div id="rustdoc-vars" data-root-path="./" data-current-crate="kanidmd_lib" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `config_security_checks` fn in crate `kanidm_ipa_sync`."><meta name="keywords" content="rust, rustlang, rust-lang, config_security_checks"><title>config_security_checks in kanidm_ipa_sync - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In kanidm_ipa_sync</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="index.html">kanidm_ipa_sync</a>::<wbr><a class="fn" href="#">config_security_checks</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_ipa_sync/main.rs.html#874-909">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub(crate) fn config_security_checks(cfg_path: &<a class="struct" href="https://doc.rust-lang.org/1.66.1/std/path/struct.Path.html" title="struct std::path::Path">Path</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.66.1/std/primitive.bool.html">bool</a></code></pre></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="kanidm_ipa_sync" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `config_security_checks` fn in crate `kanidm_ipa_sync`."><meta name="keywords" content="rust, rustlang, rust-lang, config_security_checks"><title>config_security_checks in kanidm_ipa_sync - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In kanidm_ipa_sync</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="index.html">kanidm_ipa_sync</a>::<wbr><a class="fn" href="#">config_security_checks</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_ipa_sync/main.rs.html#874-912">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub(crate) fn config_security_checks(cfg_path: &<a class="struct" href="https://doc.rust-lang.org/1.66.1/std/path/struct.Path.html" title="struct std::path::Path">Path</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.66.1/std/primitive.bool.html">bool</a></code></pre></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="kanidm_ipa_sync" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
|
@ -1 +1 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `main` fn in crate `kanidm_ipa_sync`."><meta name="keywords" content="rust, rustlang, rust-lang, main"><title>main in kanidm_ipa_sync - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In kanidm_ipa_sync</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="index.html">kanidm_ipa_sync</a>::<wbr><a class="fn" href="#">main</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_ipa_sync/main.rs.html#911-971">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub(crate) fn main()</code></pre></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="kanidm_ipa_sync" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `main` fn in crate `kanidm_ipa_sync`."><meta name="keywords" content="rust, rustlang, rust-lang, main"><title>main in kanidm_ipa_sync - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../kanidm_ipa_sync/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In kanidm_ipa_sync</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="index.html">kanidm_ipa_sync</a>::<wbr><a class="fn" href="#">main</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_ipa_sync/main.rs.html#914-974">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub(crate) fn main()</code></pre></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="kanidm_ipa_sync" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.1 (90743e729 2023-01-10)" ></div></body></html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,4 +1,4 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The server configuration as processed from the startup wrapper. This controls a number of variables that determine how our backends, query server, and frontends are configured."><meta name="keywords" content="rust, rustlang, rust-lang, config"><title>kanidmd_core::config - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../normalize.css"><link rel="stylesheet" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../ayu.css" disabled><link rel="stylesheet" href="../../dark.css" disabled><link rel="stylesheet" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script defer src="../../main.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../../kanidmd_core/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../kanidmd_core/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Module config</a></h2><div class="sidebar-elems"><section><ul class="block"><li><a href="#structs">Structs</a></li><li><a href="#enums">Enums</a></li></ul></section></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Module <a href="../index.html">kanidmd_core</a>::<wbr><a class="mod" href="#">config</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../../src/kanidmd_core/config.rs.html#1-290">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The server configuration as processed from the startup wrapper. This controls a number of
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The server configuration as processed from the startup wrapper. This controls a number of variables that determine how our backends, query server, and frontends are configured."><meta name="keywords" content="rust, rustlang, rust-lang, config"><title>kanidmd_core::config - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../normalize.css"><link rel="stylesheet" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../ayu.css" disabled><link rel="stylesheet" href="../../dark.css" disabled><link rel="stylesheet" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script defer src="../../main.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../../kanidmd_core/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../kanidmd_core/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Module config</a></h2><div class="sidebar-elems"><section><ul class="block"><li><a href="#structs">Structs</a></li><li><a href="#enums">Enums</a></li></ul></section></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../wheel.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Module <a href="../index.html">kanidmd_core</a>::<wbr><a class="mod" href="#">config</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../../src/kanidmd_core/config.rs.html#1-289">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The server configuration as processed from the startup wrapper. This controls a number of
|
||||
variables that determine how our backends, query server, and frontends are configured.</p>
|
||||
<p>These components should be “per server”. Any “per domain” config should be in the system
|
||||
or domain entries that are able to be replicated.</p>
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue