Mercurial > crates > nonstick
comparison src/handle.rs @ 174:9e4ce1631bd3
Dramatically expand documentation.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Tue, 29 Jul 2025 18:58:27 -0400 |
| parents | e27c5c667a5a |
| children |
comparison
equal
deleted
inserted
replaced
| 173:46e8ce5cd5d1 | 174:9e4ce1631bd3 |
|---|---|
| 48 fn username(&mut self, prompt: Option<&OsStr>) -> Result<OsString>; | 48 fn username(&mut self, prompt: Option<&OsStr>) -> Result<OsString>; |
| 49 | 49 |
| 50 /// The contents of the environment to set for the logged-in user. | 50 /// The contents of the environment to set for the logged-in user. |
| 51 /// | 51 /// |
| 52 /// # References | 52 /// # References |
| 53 /// | |
| 54 #[doc = linklist!(pam_getenv: adg, mwg, _std)] | 53 #[doc = linklist!(pam_getenv: adg, mwg, _std)] |
| 55 /// | 54 /// |
| 56 #[doc = stdlinks!(3 pam_getenv)] | 55 #[doc = stdlinks!(3 pam_getenv)] |
| 57 #[doc = guide!(adg: "adg-interface-by-app-expected.html#adg-pam_getenv")] | 56 #[doc = guide!(adg: "adg-interface-by-app-expected.html#adg-pam_getenv")] |
| 58 #[doc = guide!(mwg: "mwg-expected-by-module-item.html#adg-pam_getenv")] | 57 #[doc = guide!(mwg: "mwg-expected-by-module-item.html#adg-pam_getenv")] |
| 59 fn environ(&self) -> impl EnvironMap; | 58 fn environ(&self) -> impl EnvironMap; |
| 60 | 59 |
| 61 /// A writable map of the environment to set for the logged-in user. | 60 /// A writable map of the environment to set for the logged-in user. |
| 62 /// | 61 /// |
| 63 /// # References | 62 /// # References |
| 64 /// | |
| 65 #[doc = linklist!(pam_putenv: adg, mwg, _std)] | 63 #[doc = linklist!(pam_putenv: adg, mwg, _std)] |
| 66 /// | 64 /// |
| 67 #[doc = stdlinks!(3 pam_putenv)] | 65 #[doc = stdlinks!(3 pam_putenv)] |
| 68 #[doc = guide!(adg: "adg-interface-by-app-expected.html#adg-pam_putenv")] | 66 #[doc = guide!(adg: "adg-interface-by-app-expected.html#adg-pam_putenv")] |
| 69 #[doc = guide!(mwg: "mwg-expected-by-module-item.html#adg-pam_putenv")] | 67 #[doc = guide!(mwg: "mwg-expected-by-module-item.html#adg-pam_putenv")] |
| 74 /// Certain Items should not be accessed by a PAM application; | 72 /// Certain Items should not be accessed by a PAM application; |
| 75 /// those are available directly on [`ModuleClient`] for use | 73 /// those are available directly on [`ModuleClient`] for use |
| 76 /// by PAM modules only. | 74 /// by PAM modules only. |
| 77 /// | 75 /// |
| 78 /// # References | 76 /// # References |
| 79 /// | |
| 80 #[doc = linklist!(pam_get_item: mwg, adg, _std)] | 77 #[doc = linklist!(pam_get_item: mwg, adg, _std)] |
| 81 /// | 78 /// |
| 82 #[doc = guide!(adg: "adg-interface-by-app-expected.html#adg-pam_get_item")] | 79 #[doc = guide!(adg: "adg-interface-by-app-expected.html#adg-pam_get_item")] |
| 83 #[doc = guide!(mwg: "mwg-expected-by-module-item.html#mwg-pam_get_item")] | 80 #[doc = guide!(mwg: "mwg-expected-by-module-item.html#mwg-pam_get_item")] |
| 84 #[doc = stdlinks!(3 pam_get_item)] | 81 #[doc = stdlinks!(3 pam_get_item)] |
| 85 fn items(&self) -> impl Items; | 82 fn items(&self) -> impl Items; |
| 86 | 83 |
| 87 /// Read-write access to PAM Items. | 84 /// Read-write access to PAM Items. |
| 88 /// | 85 /// |
| 89 /// # References | 86 /// # References |
| 90 /// | |
| 91 #[doc = linklist!(pam_set_item: mwg, adg, _std)] | 87 #[doc = linklist!(pam_set_item: mwg, adg, _std)] |
| 92 /// | 88 /// |
| 93 #[doc = guide!(adg: "adg-interface-by-app-expected.html#adg-pam_set_item")] | 89 #[doc = guide!(adg: "adg-interface-by-app-expected.html#adg-pam_set_item")] |
| 94 #[doc = guide!(mwg: "mwg-expected-by-module-item.html#mwg-pam_set_item")] | 90 #[doc = guide!(mwg: "mwg-expected-by-module-item.html#mwg-pam_set_item")] |
| 95 #[doc = stdlinks!(3 pam_set_item)] | 91 #[doc = stdlinks!(3 pam_set_item)] |
| 163 /// [`pam_authtok_get` module][pam_authtok_get]. On Sun, this function | 159 /// [`pam_authtok_get` module][pam_authtok_get]. On Sun, this function |
| 164 /// is exactly equivalent to [`Self::authtok_item`], in that it only | 160 /// is exactly equivalent to [`Self::authtok_item`], in that it only |
| 165 /// retrieves the existing item. | 161 /// retrieves the existing item. |
| 166 /// | 162 /// |
| 167 /// # References | 163 /// # References |
| 168 /// | |
| 169 #[doc = linklist!(pam_get_authtok: man7, manbsd)] | 164 #[doc = linklist!(pam_get_authtok: man7, manbsd)] |
| 170 /// | 165 /// |
| 171 /// # Example | 166 /// # Example |
| 172 /// | 167 /// |
| 173 /// ```no_run | 168 /// ```no_run |
| 188 /// Retrieves the user's old authentication token when changing passwords. | 183 /// Retrieves the user's old authentication token when changing passwords. |
| 189 /// | 184 /// |
| 190 /// This should only be used by a *password-change* module. | 185 /// This should only be used by a *password-change* module. |
| 191 /// | 186 /// |
| 192 /// # References | 187 /// # References |
| 193 /// | |
| 194 #[doc = linklist!(pam_get_authtok: man7, manbsd)] | 188 #[doc = linklist!(pam_get_authtok: man7, manbsd)] |
| 195 /// | 189 /// |
| 196 /// # Example | 190 /// # Example |
| 197 /// | 191 /// |
| 198 /// ```no_run | 192 /// ```no_run |
| 203 /// // Get the user's password using a custom prompt. | 197 /// // Get the user's password using a custom prompt. |
| 204 /// let pass = handle.old_authtok(Some("Reveal your secrets!".as_ref()))?; | 198 /// let pass = handle.old_authtok(Some("Reveal your secrets!".as_ref()))?; |
| 205 /// Ok(()) | 199 /// Ok(()) |
| 206 /// # } | 200 /// # } |
| 207 /// ``` | 201 /// ``` |
| 208 /// | |
| 209 #[doc = stdlinks!(3 pam_get_authtok)] | 202 #[doc = stdlinks!(3 pam_get_authtok)] |
| 210 fn old_authtok(&mut self, prompt: Option<&OsStr>) -> Result<OsString>; | 203 fn old_authtok(&mut self, prompt: Option<&OsStr>) -> Result<OsString>; |
| 211 | 204 |
| 212 /// Gets an item of module-specific data stored over the transaction. | 205 /// Gets an item of module-specific data stored over the transaction. |
| 213 /// | 206 /// |
| 227 /// let nothing_data: Option<&PathBuf> = client.get_module_data("this does not exist"); | 220 /// let nothing_data: Option<&PathBuf> = client.get_module_data("this does not exist"); |
| 228 /// # } | 221 /// # } |
| 229 /// ``` | 222 /// ``` |
| 230 /// | 223 /// |
| 231 /// # References | 224 /// # References |
| 232 /// | |
| 233 #[doc = linklist!(pam_get_data: mwg, _std)] | 225 #[doc = linklist!(pam_get_data: mwg, _std)] |
| 234 /// | 226 /// |
| 235 #[doc = guide!(mwg: "mwg-expected-by-module-item.html#mwg-pam_get_data")] | 227 #[doc = guide!(mwg: "mwg-expected-by-module-item.html#mwg-pam_get_data")] |
| 236 #[doc = stdlinks!(3 pam_get_data)] | 228 #[doc = stdlinks!(3 pam_get_data)] |
| 237 | 229 |
| 280 /// // Later, in a pam_session_start call: | 272 /// // Later, in a pam_session_start call: |
| 281 /// fn start_session(client: &mut impl ModuleClient) -> Result<()> { | 273 /// fn start_session(client: &mut impl ModuleClient) -> Result<()> { |
| 282 /// match client.get_module_data::<u64>("TOKEN_ID") { | 274 /// match client.get_module_data::<u64>("TOKEN_ID") { |
| 283 /// Some(&tid) => { | 275 /// Some(&tid) => { |
| 284 /// // This will execute and tid will be 0x0fa1afe10000beef. | 276 /// // This will execute and tid will be 0x0fa1afe10000beef. |
| 285 /// }, | 277 /// } |
| 286 /// None => { /* This will not execute. */ }, | 278 /// None => { /* This will not execute. */ } |
| 287 /// } | 279 /// } |
| 288 /// Ok(()) | 280 /// Ok(()) |
| 289 /// } | 281 /// } |
| 290 /// ``` | 282 /// ``` |
| 291 /// | 283 /// |
| 303 /// fn in_pam_module_b(client: &mut impl ModuleClient) -> Result<()> { | 295 /// fn in_pam_module_b(client: &mut impl ModuleClient) -> Result<()> { |
| 304 /// match client.get_module_data::<String>("value") { | 296 /// match client.get_module_data::<String>("value") { |
| 305 /// Some(value) => { | 297 /// Some(value) => { |
| 306 /// // This will match, because pam_module_a's data | 298 /// // This will match, because pam_module_a's data |
| 307 /// // is completely unrelated to pam_module_b's data. | 299 /// // is completely unrelated to pam_module_b's data. |
| 308 /// }, | 300 /// } |
| 309 /// None => { | 301 /// None => { |
| 310 /// // This branch will execute. | 302 /// // This branch will execute. |
| 311 /// }, | 303 /// } |
| 312 /// } | 304 /// } |
| 313 /// // ... | 305 /// // ... |
| 314 /// # Ok(()) | 306 /// # Ok(()) |
| 315 /// } | 307 /// } |
| 316 /// ``` | 308 /// ``` |
| 347 /// | 339 /// |
| 348 /// While LibPAM offers a way to customize the action taken on cleanup, | 340 /// While LibPAM offers a way to customize the action taken on cleanup, |
| 349 /// we do not (yet) offer this. | 341 /// we do not (yet) offer this. |
| 350 /// | 342 /// |
| 351 /// # References | 343 /// # References |
| 352 /// | |
| 353 #[doc = linklist!(pam_set_data: mwg, _std)] | 344 #[doc = linklist!(pam_set_data: mwg, _std)] |
| 354 /// | 345 /// |
| 355 #[doc = guide!(mwg: "mwg-expected-by-module-item.html#mwg-pam_set_data")] | 346 #[doc = guide!(mwg: "mwg-expected-by-module-item.html#mwg-pam_set_data")] |
| 356 #[doc = stdlinks!(3 pam_set_data)] | 347 #[doc = stdlinks!(3 pam_set_data)] |
| 357 fn set_module_data<T: 'static>(&mut self, key: &str, data: T) -> Result<()>; | 348 fn set_module_data<T: 'static>(&mut self, key: &str, data: T) -> Result<()>; |
