X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=mutt_sasl.c;h=6d1918f6a3367b79606d7bde1bdebb27431a5403;hp=e32af342e3c4b292a584e10baf43d77e8233e8fb;hb=2afa942ab1afde7acc8c8ef4670cddcbd25b1b3e;hpb=688ac22f746f785c27ac99ac86aa85a3035a3638 diff --git a/mutt_sasl.c b/mutt_sasl.c index e32af34..6d1918f 100644 --- a/mutt_sasl.c +++ b/mutt_sasl.c @@ -28,7 +28,23 @@ * a protection buffer. */ #define M_SASL_MAXBUF 65536 -#define IP_PORT_BUFLEN 1024 +typedef struct { + sasl_conn_t *saslconn; + const sasl_ssf_t *ssf; + const unsigned int *pbufsize; + + /* read buffer */ + char *buf; + unsigned blen; + unsigned int bpos; + + /* underlying socket data */ + void *sockdata; + int (*msasl_open) (CONNECTION * conn); + int (*msasl_close) (CONNECTION * conn); + int (*msasl_read) (CONNECTION * conn, char *buf, ssize_t len); + int (*msasl_write) (CONNECTION * conn, const char *buf, ssize_t count); +} SASL_DATA; static sasl_callback_t mutt_sasl_callbacks[5]; @@ -115,7 +131,7 @@ int mutt_sasl_client_new (CONNECTION * conn, sasl_conn_t ** saslconn) struct sockaddr_storage local, remote; socklen_t size; - char iplocalport[IP_PORT_BUFLEN], ipremoteport[IP_PORT_BUFLEN]; + char iplocalport[STRING], ipremoteport[STRING]; const char *service; int rc; @@ -137,14 +153,14 @@ int mutt_sasl_client_new (CONNECTION * conn, sasl_conn_t ** saslconn) size = sizeof(local); if (getsockname(conn->fd, (struct sockaddr *) &local, &size) - || iptostring(&local, iplocalport, IP_PORT_BUFLEN) != SASL_OK) + || iptostring(&local, iplocalport, STRING) != SASL_OK) { return -1; } size = sizeof(remote); if (getpeername(conn->fd, (struct sockaddr *) &remote, &size) - || iptostring(&remote, ipremoteport, IP_PORT_BUFLEN) != SASL_OK) + || iptostring(&remote, ipremoteport, STRING) != SASL_OK) { return -1; } @@ -252,8 +268,8 @@ void mutt_sasl_setup_conn (CONNECTION * conn, sasl_conn_t * saslconn) conn->conn_write = mutt_sasl_conn_write; } -void mutt_sasl_done (void) { - sasl_done (); +void mutt_sasl_shutdown(void) { + sasl_done(); } /* mutt_sasl_cb_authname: callback to retrieve authname or user from ACCOUNT */ @@ -434,9 +450,9 @@ mutt_sasl_conn_write(CONNECTION * conn, const char *buf, ssize_t len) goto fail; } - rc = (sasldata->msasl_write)(conn, pbuf, plen); + plen -= (sasldata->msasl_write)(conn, pbuf, plen); p_delete(&pbuf); - if (rc != plen) + if (plen) goto fail; len -= olen;