Commit 0862853
authored
* feat: Implement session management and limits (#142)
- Add SessionConfig for configurable session limits:
- max_sessions_per_user: Limit concurrent sessions per user
- max_total_sessions: Limit total concurrent sessions
- idle_timeout: Detect idle sessions
- session_timeout: Optional maximum session duration
- Enhance SessionManager with per-user tracking:
- user_sessions HashMap for tracking sessions by username
- authenticate_session() method with per-user limit enforcement
- touch() method for updating last_activity timestamp
- get_idle_sessions() for timeout detection
- get_stats() for session statistics
- list_sessions() / list_user_sessions() for admin operations
- kill_session() / kill_user_sessions() for forced disconnect
- Add SessionError and SessionStats types
- Enhance SessionInfo with activity tracking:
- last_activity field for idle detection
- idle_secs() and is_idle() methods
- is_expired() for session timeout checks
- Integrate per-user limits in SSH handler:
- Check per-user session limits during authentication
- Reject authentication if user has too many sessions
- Update SessionManager's user tracking on auth success
- Add session config to ServerConfig:
- max_sessions_per_user field
- session_timeout_secs field
- session_config() helper method
- Comprehensive test coverage (30+ new tests)
* fix: Address security and performance review issues
- Fix HIGH: Race condition in Drop - add retry mechanism with
exponential backoff to ensure session cleanup under lock contention
- Fix MEDIUM: Add input validation for SessionConfig - clamp
max_sessions_per_user and max_total_sessions to minimum of 1
to prevent misconfiguration that could deny all connections
- Add validate() method to SessionConfig for detecting potentially
problematic configuration combinations
- Fix MEDIUM: Atomic ordering - change SessionId counter from
Ordering::Relaxed to Ordering::SeqCst for stricter ordering
guarantees and consistent logging
- Add tests for config validation and clamping behavior
* chore: finalize PR with lint fixes and documentation
- Fix code formatting issues (handler.rs, session.rs)
- Fix unused variable warning in test (s2 -> _s2)
- Add comprehensive session management documentation
- Document session_timeout configuration option
- Add session management API examples
1 parent 822b1fe commit 0862853
File tree
6 files changed
+1111
-79
lines changed- docs/architecture
- src/server
- config
6 files changed
+1111
-79
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
192 | 192 | | |
193 | 193 | | |
194 | 194 | | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
195 | 199 | | |
196 | 200 | | |
197 | 201 | | |
| |||
643 | 647 | | |
644 | 648 | | |
645 | 649 | | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
646 | 744 | | |
647 | 745 | | |
648 | 746 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
183 | 183 | | |
184 | 184 | | |
185 | 185 | | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
186 | 203 | | |
187 | 204 | | |
188 | 205 | | |
| |||
281 | 298 | | |
282 | 299 | | |
283 | 300 | | |
| 301 | + | |
| 302 | + | |
284 | 303 | | |
285 | 304 | | |
286 | 305 | | |
| |||
312 | 331 | | |
313 | 332 | | |
314 | 333 | | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
315 | 362 | | |
316 | 363 | | |
317 | 364 | | |
| |||
517 | 564 | | |
518 | 565 | | |
519 | 566 | | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
520 | 579 | | |
521 | 580 | | |
522 | 581 | | |
| |||
581 | 640 | | |
582 | 641 | | |
583 | 642 | | |
| 643 | + | |
| 644 | + | |
584 | 645 | | |
585 | 646 | | |
586 | 647 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
393 | 393 | | |
394 | 394 | | |
395 | 395 | | |
396 | | - | |
| 396 | + | |
397 | 397 | | |
398 | 398 | | |
399 | 399 | | |
| |||
405 | 405 | | |
406 | 406 | | |
407 | 407 | | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
408 | 417 | | |
409 | 418 | | |
410 | 419 | | |
| |||
473 | 482 | | |
474 | 483 | | |
475 | 484 | | |
476 | | - | |
| 485 | + | |
477 | 486 | | |
478 | 487 | | |
479 | 488 | | |
| |||
540 | 549 | | |
541 | 550 | | |
542 | 551 | | |
543 | | - | |
| 552 | + | |
544 | 553 | | |
| 554 | + | |
545 | 555 | | |
546 | 556 | | |
547 | 557 | | |
| |||
0 commit comments