SASL authentication support. More...
#include "config.h"#include <errno.h>#include <netdb.h>#include <sasl/sasl.h>#include <stdbool.h>#include <stddef.h>#include <stdint.h>#include <stdio.h>#include <string.h>#include <sys/socket.h>#include <sys/types.h>#include "mutt/lib.h"#include "mutt.h"#include "sasl.h"#include "editor/lib.h"#include "history/lib.h"#include "connaccount.h"#include "connection.h"#include "globals.h"
Include dependency graph for sasl.c:Go to the source code of this file.
Data Structures | |
| struct | SaslSockData |
| SASL authentication API -. More... | |
Macros | |
| #define | MUTT_SASL_MAXBUF 65536 |
| #define | IP_PORT_BUFLEN (NI_MAXHOST + NI_MAXSERV) |
Functions | |
| bool | sasl_auth_validator (const char *authenticator) |
| Validate an auth method against Cyrus SASL methods. | |
| static int | getnameinfo_err (int rc) |
| Convert a getaddrinfo() error code into an SASL error code. | |
| static int | iptostring (const struct sockaddr *addr, socklen_t addrlen, char *out, unsigned int outlen) |
| Convert IP Address to string. | |
| static int | mutt_sasl_cb_log (void *context, int priority, const char *message) |
| Callback to log SASL messages. | |
| int | mutt_sasl_start (void) |
| Initialise SASL library. | |
| static int | mutt_sasl_cb_authname (void *context, int id, const char **result, unsigned int *len) |
| Callback to retrieve authname or user from ConnAccount. | |
| static int | mutt_sasl_cb_pass (sasl_conn_t *conn, void *context, int id, sasl_secret_t **psecret) |
| SASL callback function to get password. | |
| static sasl_callback_t * | mutt_sasl_get_callbacks (struct ConnAccount *cac) |
| Get the SASL callback functions. | |
| static int | mutt_sasl_conn_open (struct Connection *conn) |
| Empty wrapper for underlying open function - Implements Connection::open() -. | |
| static int | mutt_sasl_conn_close (struct Connection *conn) |
| Close SASL connection - Implements Connection::close() -. | |
| static int | mutt_sasl_conn_read (struct Connection *conn, char *buf, size_t count) |
| Read data from an SASL connection - Implements Connection::read() -. | |
| static int | mutt_sasl_conn_write (struct Connection *conn, const char *buf, size_t count) |
| Write to an SASL connection - Implements Connection::write() -. | |
| static int | mutt_sasl_conn_poll (struct Connection *conn, time_t wait_secs) |
| Check if any data is waiting on a socket - Implements Connection::poll() -. | |
| int | mutt_sasl_client_new (struct Connection *conn, sasl_conn_t **saslconn) |
| Wrapper for sasl_client_new() | |
| int | mutt_sasl_interact (sasl_interact_t *interaction) |
| Perform an SASL interaction with the user. | |
| void | mutt_sasl_setup_conn (struct Connection *conn, sasl_conn_t *saslconn) |
| Set up an SASL connection. | |
| void | mutt_sasl_cleanup (void) |
| Invoke when processing is complete. | |
Variables | |
| static const char *const | SaslAuthenticators [] |
| Authentication methods supported by Cyrus SASL. | |
| static sasl_callback_t | MuttSaslCallbacks [5] |
| SASL callback functions, e.g. mutt_sasl_cb_authname(), mutt_sasl_cb_pass() | |
| static sasl_secret_t * | SecretPtr = NULL |
| SASL secret, to store the password. | |
SASL authentication support.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
Definition in file sasl.c.
| bool sasl_auth_validator | ( | const char * | authenticator | ) |
Validate an auth method against Cyrus SASL methods.
| authenticator | Name of the authenticator to validate |
| true | Argument matches an accepted auth method |
Definition at line 136 of file sasl.c.
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Convert a getaddrinfo() error code into an SASL error code.
| rc | getaddrinfo() error code, e.g. EAI_AGAIN |
| num | SASL error code, e.g. SASL_FAIL |
Definition at line 153 of file sasl.c.
Here is the caller graph for this function:
|
static |
Convert IP Address to string.
| addr | IP address |
| addrlen | Size of addr struct |
| out | Buffer for result |
| outlen | Length of buffer |
| num | SASL error code, e.g. SASL_BADPARAM |
utility function, copied from sasl2 sample code
Definition at line 207 of file sasl.c.
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Callback to log SASL messages.
| context | Supplied context, always NULL |
| priority | Debug level |
| message | Message |
| num | SASL_OK, always |
Definition at line 240 of file sasl.c.
Here is the caller graph for this function:| int mutt_sasl_start | ( | void | ) |
Initialise SASL library.
| num | SASL error code, e.g. SASL_OK |
Call before doing an SASL exchange (initialises library if necessary).
Definition at line 277 of file sasl.c.
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Callback to retrieve authname or user from ConnAccount.
| [in] | context | ConnAccount |
| [in] | id | Field to get. SASL_CB_USER or SASL_CB_AUTHNAME |
| [out] | result | Resulting string |
| [out] | len | Length of result |
| num | SASL error code, e.g. SASL_FAIL |
Definition at line 317 of file sasl.c.
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
SASL callback function to get password.
| [in] | conn | Connection to a server |
| [in] | context | ConnAccount |
| [in] | id | SASL_CB_PASS |
| [out] | psecret | SASL secret |
| num | SASL error code, e.g SASL_FAIL |
Definition at line 361 of file sasl.c.
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Get the SASL callback functions.
| cac | ConnAccount to associate with callbacks |
| ptr | Array of callback functions |
Definition at line 389 of file sasl.c.
Here is the call graph for this function:
Here is the caller graph for this function:| int mutt_sasl_client_new | ( | struct Connection * | conn, |
| sasl_conn_t ** | saslconn ) |
Wrapper for sasl_client_new()
| [in] | conn | Connection to a server |
| [out] | saslconn | SASL connection |
| 0 | Success |
| -1 | Error |
which also sets various security properties. If this turns out to be fine for POP too we can probably stop exporting mutt_sasl_get_callbacks().
Definition at line 606 of file sasl.c.
Here is the call graph for this function:
Here is the caller graph for this function:| int mutt_sasl_interact | ( | sasl_interact_t * | interaction | ) |
Perform an SASL interaction with the user.
| interaction | Details of interaction |
| num | SASL error code: SASL_OK or SASL_FAIL |
An example interaction might be asking the user for a password.
Definition at line 704 of file sasl.c.
Here is the call graph for this function:
Here is the caller graph for this function:| void mutt_sasl_setup_conn | ( | struct Connection * | conn, |
| sasl_conn_t * | saslconn ) |
Set up an SASL connection.
| conn | Connection to a server |
| saslconn | SASL connection |
Replace connection methods, sockdata with SASL wrappers, for protection layers. Also get ssf, as a fastpath for the read/write methods.
Definition at line 741 of file sasl.c.
Here is the call graph for this function:
Here is the caller graph for this function:| void mutt_sasl_cleanup | ( | void | ) |
Invoke when processing is complete.
This is a cleanup function, used to free all memory used by the library. Invoke when processing is complete.
Definition at line 786 of file sasl.c.
Here is the caller graph for this function:
|
static |
Authentication methods supported by Cyrus SASL.
Definition at line 106 of file sasl.c.
|
static |
SASL callback functions, e.g. mutt_sasl_cb_authname(), mutt_sasl_cb_pass()