sbuild
1.6.10
|
Authentication conversation handler for terminal devices. More...
#include <sbuild-auth-pam-conv-tty.h>
Public Types | |
enum | error_code { CTTY, TIMEOUT, TIMEOUT_PENDING, TERMIOS, CONV_TYPE } |
Error codes. More... | |
typedef custom_error< error_code > | error |
Exception type. | |
![]() | |
typedef std::vector< auth_pam_message > | message_list |
A list of messages. | |
typedef std::shared_ptr< auth_pam > | auth_ptr |
A shared pointer to an auth_pam object. | |
typedef std::weak_ptr< auth_pam > | weak_auth_ptr |
A weak pointer to an auth_pam object. | |
typedef std::shared_ptr< auth_pam_conv > | ptr |
A shared_ptr to an auth_pam_conv object. | |
Public Member Functions | |
virtual | ~auth_pam_conv_tty () |
The destructor. | |
virtual auth_ptr | get_auth () |
Get the auth object. More... | |
virtual void | set_auth (auth_ptr auth) |
Set the auth object. More... | |
virtual time_t | get_warning_timeout () |
Get the time at which the user will be warned. More... | |
virtual void | set_warning_timeout (time_t timeout) |
Set the time at which the user will be warned. More... | |
virtual time_t | get_fatal_timeout () |
Get the time at which the conversation will be terminated with an error. More... | |
virtual void | set_fatal_timeout (time_t timeout) |
Set the time at which the conversation will be terminated with an error. More... | |
virtual void | conversation (auth_pam_conv::message_list &messages) |
Hold a conversation with the user. More... | |
![]() | |
virtual | ~auth_pam_conv () |
The destructor. | |
Static Public Member Functions | |
static ptr | create (auth_ptr auth) |
Create an auth_pam_conv_tty object. More... | |
Private Member Functions | |
auth_pam_conv_tty (auth_ptr auth) | |
The constructor. More... | |
int | get_delay () |
Get the time delay before the next SIGALRM signal. More... | |
std::string | read_string (std::string message, bool echo) |
Read user input from standard input. More... | |
Private Attributes | |
weak_auth_ptr | auth |
The auth object. | |
time_t | warning_timeout |
The time to warn at. | |
time_t | fatal_timeout |
The time to end at. | |
time_t | start_time |
The time the current delay was obtained at. | |
Additional Inherited Members | |
![]() | |
auth_pam_conv () | |
The constructor. | |
Authentication conversation handler for terminal devices.
This class is an implementation of the auth_pam_conv interface, and is used to interact with the user on a terminal (TTY) interface.
In order to implement timeouts, this class uses alarm(2). This has some important implications. Global state is modified by the object, so only one may be used at once in a single process. In addition, no other part of the process may set or unset the SIGALRM handlers and the alarm(2) timer during the time PAM authentication is proceeding.
|
private |
The constructor.
auth | The authentication object this conversation handler will be associated with. |
Referenced by create().
|
virtual |
Hold a conversation with the user.
Each of the messages detailed in messages should be displayed to the user, asking for input where required. The type of message is indicated in the auth_pam_message::type field of the auth_pam_message. The auth_pam_message::response field of the auth_pam_message should be filled in if input is required.
On error, an exception will be thrown.
messages | the messages to display to the user, and responses to return to the caller. |
Implements sbuild::auth_pam_conv.
References CONV_TYPE, sbuild::DEBUG_NOTICE, sbuild::log_ctty_error(), sbuild::log_ctty_info(), sbuild::log_debug(), sbuild::auth_pam_message::MESSAGE_ERROR, sbuild::auth_pam_message::MESSAGE_INFO, sbuild::auth_pam_message::MESSAGE_PROMPT_ECHO, sbuild::auth_pam_message::MESSAGE_PROMPT_NOECHO, and read_string().
|
static |
Create an auth_pam_conv_tty object.
auth | The authentication object this conversation handler will be associated with. |
References auth_pam_conv_tty().
|
virtual |
|
private |
Get the time delay before the next SIGALRM signal.
If either the warning timeout or the fatal timeout have expired, a message to notify the user is printed to stderr. If the fatal timeout is reached, an exception is thrown.
References fatal_timeout, sbuild::log_ctty_exception_warning(), start_time, TIMEOUT, TIMEOUT_PENDING, and warning_timeout.
Referenced by read_string().
|
virtual |
Get the time at which the conversation will be terminated with an error.
Implements sbuild::auth_pam_conv.
References fatal_timeout.
|
virtual |
Get the time at which the user will be warned.
Implements sbuild::auth_pam_conv.
References warning_timeout.
|
private |
Read user input from standard input.
The prompt message is printed to prompt the user for input. If echo is true, the user input it echoed back to the terminal, but if false, echoing is suppressed using termios(3).
If the SIGALRM timer expires while waiting for input, this is handled by re-checking the delay time which will warn the user or cause the input routine to terminate if the fatal timeout has expired.
message | the message to prompt the user for input. |
echo | echo user input to screen. |
References sbuild::cctty, CTTY, sbuild::CTTY_FILENO, get_delay(), and TERMIOS.
Referenced by conversation().
|
virtual |
|
virtual |
Set the time at which the conversation will be terminated with an error.
timeout | the time to set. |
Implements sbuild::auth_pam_conv.
References fatal_timeout.
|
virtual |
Set the time at which the user will be warned.
timeout | the time to set. |
Implements sbuild::auth_pam_conv.
References warning_timeout.