...in preparation for upcoming modifications.
return FALSE; /* Nothing for us */
}
+/***********************************************************************
+ *
+ * imap_get_message()
+ *
+ * Gets the authentication message from the response buffer.
+ */
+static void imap_get_message(char *buffer, char** outptr)
+{
+ size_t len = 0;
+ char* message = NULL;
+
+ /* Find the start of the message */
+ for(message = buffer + 2; *message == ' ' || *message == '\t'; message++)
+ ;
+
+ /* Find the end of the message */
+ for(len = strlen(message); len--;)
+ if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' &&
+ message[len] != '\t')
+ break;
+
+ /* Terminate the message */
+ if(++len) {
+ message[len] = '\0';
+ }
+
+ *outptr = message;
+}
+
/***********************************************************************
*
* state()
{
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
- char *chlg64 = data->state.buffer;
- size_t len = 0;
+ char *chlg64 = NULL;
char *rplyb64 = NULL;
+ size_t len = 0;
(void)instate; /* no use for this yet */
return CURLE_LOGIN_DENIED;
}
- /* Get the challenge */
- for(chlg64 += 2; *chlg64 == ' ' || *chlg64 == '\t'; chlg64++)
- ;
-
- /* Terminate the challenge */
- if(*chlg64 != '=') {
- for(len = strlen(chlg64); len--;)
- if(chlg64[len] != '\r' && chlg64[len] != '\n' && chlg64[len] != ' ' &&
- chlg64[len] != '\t')
- break;
-
- if(++len) {
- chlg64[len] = '\0';
- }
- }
+ /* Get the challenge message */
+ imap_get_message(data->state.buffer, &chlg64);
/* Create the response message */
result = Curl_sasl_create_cram_md5_message(data, chlg64, conn->user,
{
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
- char *chlg64 = data->state.buffer;
- size_t len = 0;
+ char *chlg64 = NULL;
char *rplyb64 = NULL;
+ size_t len = 0;
(void)instate; /* no use for this yet */
return CURLE_LOGIN_DENIED;
}
- /* Get the challenge */
- for(chlg64 += 2; *chlg64 == ' ' || *chlg64 == '\t'; chlg64++)
- ;
+ /* Get the challenge message */
+ imap_get_message(data->state.buffer, &chlg64);
/* Create the response message */
result = Curl_sasl_create_digest_md5_message(data, chlg64, conn->user,
{
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
- size_t len = 0;
+ char *type2msg = NULL;
char *type3msg = NULL;
+ size_t len = 0;
(void)instate; /* no use for this yet */
result = CURLE_LOGIN_DENIED;
}
else {
+ /* Get the challenge message */
+ imap_get_message(data->state.buffer, &type2msg);
+
/* Create the type-3 message */
- result = Curl_sasl_create_ntlm_type3_message(data,
- data->state.buffer + 2,
- conn->user, conn->passwd,
- &conn->ntlm,
+ result = Curl_sasl_create_ntlm_type3_message(data, type2msg, conn->user,
+ conn->passwd, &conn->ntlm,
&type3msg, &len);
/* Send the message */
return FALSE; /* Nothing for us */
}
+/***********************************************************************
+ *
+ * pop3_get_message()
+ *
+ * Gets the authentication message from the response buffer.
+ */
+static void pop3_get_message(char *buffer, char** outptr)
+{
+ size_t len = 0;
+ char* message = NULL;
+
+ /* Find the start of the message */
+ for(message = buffer + 2; *message == ' ' || *message == '\t'; message++)
+ ;
+
+ /* Find the end of the message */
+ for(len = strlen(message); len--;)
+ if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' &&
+ message[len] != '\t')
+ break;
+
+ /* Terminate the challenge */
+ if(++len) {
+ message[len] = '\0';
+ }
+
+ *outptr = message;
+}
+
/***********************************************************************
*
* state()
{
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
- char *chlg64 = data->state.buffer;
- size_t len = 0;
+ char *chlg64 = NULL;
char *rplyb64 = NULL;
+ size_t len = 0;
(void)instate; /* no use for this yet */
return CURLE_LOGIN_DENIED;
}
- /* Get the challenge */
- for(chlg64 += 2; *chlg64 == ' ' || *chlg64 == '\t'; chlg64++)
- ;
-
- /* Terminate the challenge */
- if(*chlg64 != '=') {
- for(len = strlen(chlg64); len--;)
- if(chlg64[len] != '\r' && chlg64[len] != '\n' && chlg64[len] != ' ' &&
- chlg64[len] != '\t')
- break;
-
- if(++len) {
- chlg64[len] = '\0';
- }
- }
+ /* Get the challenge message */
+ pop3_get_message(data->state.buffer, &chlg64);
/* Create the response message */
result = Curl_sasl_create_cram_md5_message(data, chlg64, conn->user,
{
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
- char *chlg64 = data->state.buffer;
- size_t len = 0;
+ char *chlg64 = NULL;
char *rplyb64 = NULL;
+ size_t len = 0;
(void)instate; /* no use for this yet */
return CURLE_LOGIN_DENIED;
}
- /* Get the challenge */
- for(chlg64 += 2; *chlg64 == ' ' || *chlg64 == '\t'; chlg64++)
- ;
+ /* Get the challenge message */
+ pop3_get_message(data->state.buffer, &chlg64);
/* Create the response message */
result = Curl_sasl_create_digest_md5_message(data, chlg64, conn->user,
{
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
- size_t len = 0;
+ char *type2msg = NULL;
char *type3msg = NULL;
+ size_t len = 0;
(void)instate; /* no use for this yet */
result = CURLE_LOGIN_DENIED;
}
else {
+ /* Get the type-2 message */
+ pop3_get_message(data->state.buffer, &type2msg);
+
/* Create the type-3 message */
- result = Curl_sasl_create_ntlm_type3_message(data,
- data->state.buffer + 2,
- conn->user, conn->passwd,
- &conn->ntlm,
+ result = Curl_sasl_create_ntlm_type3_message(data, type2msg, conn->user,
+ conn->passwd, &conn->ntlm,
&type3msg, &len);
/* Send the message */
/***********************************************************************
*
- * pop3_endofresp()
+ * smtp_endofresp()
*
* Checks for an ending SMTP status code at the start of the given string, but
* also detects various capabilities from the EHLO response including the
return result;
}
+/***********************************************************************
+ *
+ * smtp_get_message()
+ *
+ * Gets the authentication message from the response buffer.
+ */
+static void smtp_get_message(char *buffer, char** outptr)
+{
+ size_t len = 0;
+ char* message = NULL;
+
+ /* Find the start of the message */
+ for(message = buffer + 4; *message == ' ' || *message == '\t'; message++)
+ ;
+
+ /* Find the end of the message */
+ for(len = strlen(message); len--;)
+ if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' &&
+ message[len] != '\t')
+ break;
+
+ /* Terminate the challenge */
+ if(++len) {
+ message[len] = '\0';
+ }
+
+ *outptr = message;
+}
+
/***********************************************************************
*
* state()
{
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
- char *chlg64 = data->state.buffer;
- size_t len = 0;
+ char *chlg64 = NULL;
char *rplyb64 = NULL;
+ size_t len = 0;
(void)instate; /* no use for this yet */
return CURLE_LOGIN_DENIED;
}
- /* Get the challenge */
- for(chlg64 += 4; *chlg64 == ' ' || *chlg64 == '\t'; chlg64++)
- ;
-
- /* Terminate the challenge */
- if(*chlg64 != '=') {
- for(len = strlen(chlg64); len--;)
- if(chlg64[len] != '\r' && chlg64[len] != '\n' && chlg64[len] != ' ' &&
- chlg64[len] != '\t')
- break;
-
- if(++len) {
- chlg64[len] = '\0';
- }
- }
+ /* Get the challenge message */
+ smtp_get_message(data->state.buffer, &chlg64);
/* Create the response message */
result = Curl_sasl_create_cram_md5_message(data, chlg64, conn->user,
{
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
- char *chlg64 = data->state.buffer;
- size_t len = 0;
+ char *chlg64 = NULL;
char *rplyb64 = NULL;
+ size_t len = 0;
(void)instate; /* no use for this yet */
return CURLE_LOGIN_DENIED;
}
- /* Get the challenge */
- for(chlg64 += 4; *chlg64 == ' ' || *chlg64 == '\t'; chlg64++)
- ;
+ /* Get the challenge message */
+ smtp_get_message(data->state.buffer, &chlg64);
/* Create the response message */
result = Curl_sasl_create_digest_md5_message(data, chlg64, conn->user,
{
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
+ char *type2msg = NULL;
char *type3msg = NULL;
size_t len = 0;
result = CURLE_LOGIN_DENIED;
}
else {
+ /* Get the type-2 message */
+ smtp_get_message(data->state.buffer, &type2msg);
+
/* Create the type-3 message */
- result = Curl_sasl_create_ntlm_type3_message(data,
- data->state.buffer + 4,
- conn->user, conn->passwd,
- &conn->ntlm,
+ result = Curl_sasl_create_ntlm_type3_message(data, type2msg, conn->user,
+ conn->passwd, &conn->ntlm,
&type3msg, &len);
/* Send the message */