view README.md @ 56:daa2cde64601

Big big refactor. Probably should have been multiple changes. - Makes FFI safer by explicitly specifying c_int in calls. - Uses ToPrimitive/FromPrimitive to make this easier. - Pulls PamFlag variables into a bitflags! struct. - Pulls PamMessageStyle variables into an enum. - Renames ResultCode to ErrorCode. - Switches from PAM_SUCCESS to using a Result<(), ErrorCode>. - Uses thiserror to make ErrorCode into an Error. - Gets rid of pam_try! because now we have Results. - Expands some names (e.g. Conv to Conversation). - Adds more doc comments. - Returns passwords as a SecureString, to avoid unnecessarily keeping it around in memory.
author Paul Fisher <paul@pfish.zone>
date Sun, 04 May 2025 02:56:55 -0400
parents ce47901aab7a
children 2a5c83d04b93
line wrap: on
line source

# 🍳 nonstick

Nonstick lets you use PAM (Pluggable Authentication Modules) from Rust without having to deal with icky unsafe code.

## Status

It is currently very incomplete.
It only provides functionality for developing your own PAM authentication module (i.e., a backend that PAM calls to authenticate a user or do something similar).
At the moment, [Linux-PAM](https://github.com/linux-pam/linux-pam) is the only supported PAM implementation.

I will make an effort not to break APIs with development, but consider it alpha, pre-1.0 software.
While the code itself should be _secure_ and mostly safe, the API may not be completely stable.

Goals include:

- Bindings for PAM clients.
- Support for non–Linux-PAM implementations.

## Credits

This is a direct fork of [Anthony Nowell](http://anowell.com/)’s [`pam-rs`/`pam-bindings` crate](https://crates.io/crates/pam-bindings).
`pam-rs` was in turn inspired by:

- [`rust-pam` by tozny](https://github.com/tozny/rust-pam)
- [`pam_groupmap` by ndenev](https://github.com/ndenev/pam_groupmap)
- [`pam-http` by beatgammit](https://github.com/beatgammit/pam-http)