
Rust RADIUS
Pure (as far as this code goes) implementation of RADIUS in Rust
Rationale behind this project:
1. I am getting in love with Rust and would love to use it in my day-to-day job.
2. There are a number of small projects involving RADIUS, where I can start using Rust
3. However there were no good RADIUS implementations in Rust
4. ????
5. Profit - now there is one, so I can try to push Rust internally in my team ^_^
Installation
```
[dependencies]
radius-rust = "0.4.2"
OR if you are planning to build Async RADIUS Client/Server
[dependencies]
radius-rust = { version = "0.4.2", features = ["async-radius"] }
```
Tests
- Project has some tests, that require RADIUS Server running, so:
cargo run --example sync_radius_server &
OR
cargo run --example async_radius_server --all-features &
OR
- You can spin up any other RADIUS server of your choice
cargo test --verbose
or cargo test --all-features --verbose
Contributing
Would you love to contribute to this project? I'd really appreciate your input!
- Raise an issue, if you believe some functionality is missing, something is broken and etc
- Create a PR, if you already sorted out some issues yourself. Please ensure to submit PR to development branch
Minimum Supported Version of Rust (MSVR)
As far as I can tell from Github Action
1. 1.43.0
when you use default
feature (sync only)
2. 1.46.0
when you use async-radius
feature (async & sync)
Prior to 18/09/2021 MSVR was:
1. 1.42.0
when you use default
feature (sync only)
2. 1.43.0
when you use async-radius
feature (async & sync)
so there is a chance everything would be working for you and it just Github Action having some issues
Benchmarks
- To run benchmarks, you need to have RADIUS Server running, so
cargo run --example sync_radius_server &
OR
cargo run --example async_radius_server --all-features &
- Then run
cargo +nightly bench
or cargo +nightly bench --all-features
- Run locally on Mac Mini (2018, RAM: 32 GB 2667 MHz DDR4, CPU: 3.2 GHz Intel Core i7)
- Present here only as a comparison between different RADIUS Client/Server implementations, that crate offers (basically just for myself to see if it worth adding features like async and etc)
- Results:
```
- RADIUS Client against RADIUS Server
test testacctclientwresponseagainstserver ... bench: 106,383 ns/iter (+/- 4,014)
test testacctclientworesponseagainstserver ... bench: 106,075 ns/iter (+/- 10,151)
test testauthclientwresponseagainstserver ... bench: 100,156 ns/iter (+/- 5,719)
test testauthclientworesponseagainstserver ... bench: 100,470 ns/iter (+/- 4,690)
test testcoaclientwresponseagainstserver ... bench: 79,086 ns/iter (+/- 37,158)
test testcoaclientworesponseagainstserver ... bench: 78,813 ns/iter (+/- 6,330)
- Async RADIUS Client against RADIUS Server
test testasyncacctclientwresponseagainstserver ... bench: 120,529 ns/iter (+/- 6,305)
test testasyncacctclientworesponseagainstserver ... bench: 120,881 ns/iter (+/- 5,505)
test testasyncauthclientwresponseagainstserver ... bench: 113,678 ns/iter (+/- 6,219)
test testasyncauthclientworesponseagainstserver ... bench: 113,324 ns/iter (+/- 8,135)
test testasynccoaclientwresponseagainstserver ... bench: 93,113 ns/iter (+/- 12,394)
test testasynccoaclientworesponseagainstserver ... bench: 92,298 ns/iter (+/- 10,021)
- RADIUS Client against Async RADIUS Server
test testacctclientwresponseagainstserver ... bench: 116,303 ns/iter (+/- 22,485)
test testacctclientworesponseagainstserver ... bench: 115,774 ns/iter (+/- 5,040)
test testauthclientwresponseagainstserver ... bench: 110,263 ns/iter (+/- 4,067)
test testauthclientworesponseagainstserver ... bench: 109,771 ns/iter (+/- 3,831)
test testcoaclientwresponseagainstserver ... bench: 87,650 ns/iter (+/- 25,813)
test testcoaclientworesponseagainstserver ... bench: 84,563 ns/iter (+/- 2,856)
- Async RADIUS Client against Async RADIUS Server
test testasyncacctclientwresponseagainstserver ... bench: 129,056 ns/iter (+/- 6,221)
test testasyncacctclientworesponseagainstserver ... bench: 127,969 ns/iter (+/- 7,174)
test testasyncauthclientwresponseagainstserver ... bench: 127,812 ns/iter (+/- 37,821)
test testasyncauthclientworesponseagainstserver ... bench: 124,807 ns/iter (+/- 12,565)
test testasynccoaclientwresponseagainstserver ... bench: 96,329 ns/iter (+/- 6,898)
test testasynccoaclientworesponseagainstserver ... bench: 97,011 ns/iter (+/- 10,322)
```
Notes
- All works happens on development branch, so if you feel that project is abandoned, check out development branch or raise an issue
- Main core functionality is completed, but there is a chance that I've missed something here and there because it is not needed for my projects yet. If this is the case, raise an issue or PR and I'll see what could be done to get it resolved
- Big thanks to pyrad and radius-rust-client projects, which helped me to start this project
- Value of Message-Authenticator RadiusAttribute won't be validated, because in RADIUS dictionary it has string type, however it is not valid ASCII string (Message-Authenticator is a HMAC-MD5 hash)