if (ret)
return getnameinfo_err (ret);
- if (outlen < safe_strlen (hbuf) + safe_strlen (pbuf) + 2)
+ if (outlen < str_len (hbuf) + str_len (pbuf) + 2)
return SASL_BUFOVER;
snprintf (out, outlen, "%s;%s", hbuf, pbuf);
#endif
/* mutt_sasl_start: called before doing a SASL exchange - initialises library
- * (if neccessary). */
+ * (if necessary). */
int mutt_sasl_start (void)
{
static unsigned char sasl_init = 0;
/*** set sasl IP properties, necessary for use with krb4 ***/
/* Do we need to fail if this fails? I would assume having these unset
- * would just disable KRB4. Who wrote this code? I'm not sure how this
- * interacts with the NSS code either, since that mucks with the fd. */
+ * would just disable KRB4. Who wrote this code?
+ */
#ifndef USE_SASL2 /* with SASLv2 this all happens in sasl_client_new */
{
struct sockaddr_in local, remote;
return -1;
}
- /* we currently don't have an SSF finder for NSS (I don't know the API).
- * If someone does it'd probably be trivial to write mutt_nss_get_ssf().
- * I have a feeling more SSL code could be shared between those two files,
- * but I haven't looked into it yet, since I still don't know the APIs. */
-#if (defined(USE_SSL) || defined(USE_GNUTLS) && !defined(USE_NSS))
- if (conn->account.flags & M_ACCT_SSL) {
+ if (conn->ssf) {
#ifdef USE_SASL2 /* I'm not sure this actually has an effect, at least with SASLv2 */
debug_print (2, ("External SSF: %d\n", conn->ssf));
if (sasl_setprop (*saslconn, SASL_SSF_EXTERNAL, &(conn->ssf)) != SASL_OK)
}
#endif
}
-#endif
return 0;
}
callback = mutt_sasl_callbacks;
- callback->id = SASL_CB_AUTHNAME;
+ callback->id = SASL_CB_USER;
callback->proc = mutt_sasl_cb_authname;
callback->context = account;
callback++;
- callback->id = SASL_CB_USER;
+ callback->id = SASL_CB_AUTHNAME;
callback->proc = mutt_sasl_cb_authname;
callback->context = account;
callback++;
if (mutt_get_field (prompt, resp, sizeof (resp), 0))
return SASL_FAIL;
- interaction->len = safe_strlen (resp) + 1;
- interaction->result = safe_malloc (interaction->len);
- memcpy (interaction->result, resp, interaction->len);
+ interaction->len = str_len (resp) + 1;
+ interaction->result = mem_malloc (interaction->len);
+ memcpy ((char*) interaction->result, resp, interaction->len);
interaction++;
}
* for the read/write methods. */
void mutt_sasl_setup_conn (CONNECTION * conn, sasl_conn_t * saslconn)
{
- SASL_DATA *sasldata = (SASL_DATA *) safe_malloc (sizeof (SASL_DATA));
+ SASL_DATA *sasldata = (SASL_DATA *) mem_malloc (sizeof (SASL_DATA));
sasldata->saslconn = saslconn;
/* get ssf so we know whether we have to (en|de)code read/write */
return SASL_OK;
}
-/* mutt_sasl_cb_authname: callback to retrieve authname or user (mutt
- * doesn't distinguish, even if some SASL plugins do) from ACCOUNT */
+/* mutt_sasl_cb_authname: callback to retrieve authname or user from ACCOUNT */
static int mutt_sasl_cb_authname (void *context, int id, const char **result,
unsigned *len)
{
id == SASL_CB_AUTHNAME ? "authname" : "user",
account->host, account->port));
- if (mutt_account_getuser (account))
- return SASL_FAIL;
-
- *result = account->user;
+ if (id == SASL_CB_AUTHNAME) {
+ if (mutt_account_getlogin (account))
+ return SASL_FAIL;
+ *result = account->login;
+ } else {
+ if (mutt_account_getuser (account))
+ return SASL_FAIL;
+ *result = account->user;
+ }
if (len)
- *len = safe_strlen (*result);
+ *len = str_len (*result);
return SASL_OK;
}
return SASL_BADPARAM;
debug_print (2, ("getting password for %s@%s:%u\n",
- account->user, account->host, account->port));
+ account->login, account->host, account->port));
if (mutt_account_getpass (account))
return SASL_FAIL;
- len = safe_strlen (account->pass);
+ len = str_len (account->pass);
- *psecret = (sasl_secret_t *) safe_malloc (sizeof (sasl_secret_t) + len);
+ *psecret = (sasl_secret_t *) mem_malloc (sizeof (sasl_secret_t) + len);
(*psecret)->len = len;
- strcpy ((*psecret)->data, account->pass); /* __STRCPY_CHECKED__ */
+ strcpy ((char*) (*psecret)->data, account->pass); /* __STRCPY_CHECKED__ */
return SASL_OK;
}
/* release sasl resources */
sasl_dispose (&sasldata->saslconn);
#ifndef USE_SASL2
- FREE (&sasldata->buf);
+ mem_free (&sasldata->buf);
#endif
- FREE (&sasldata);
+ mem_free (&sasldata);
/* call underlying close */
rc = (conn->conn_close) (conn);
conn->sockdata = sasldata->sockdata;
#ifndef USE_SASL2
- FREE (&sasldata->buf);
+ mem_free (&sasldata->buf);
#endif
sasldata->bpos = 0;
sasldata->blen = 0;
rc = (sasldata->msasl_write) (conn, pbuf, plen);
#ifndef USE_SASL2
- FREE (&pbuf);
+ mem_free (&pbuf);
#endif
if (rc != plen)
goto fail;