Lines Matching +full:cancel +full:- +full:in +full:- +full:progress
10 * This software is licensed as described in the file COPYING, which
21 * SPDX-License-Identifier: curl
23 * RFC2195 CRAM-MD5 authentication
25 * RFC2831 DIGEST-MD5 authentication
28 * RFC5802 SCRAM-SHA-1 authentication
29 * RFC7677 SCRAM-SHA-256 authentication
32 * Draft LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
55 /* The last 3 #include files should be in this order */
68 { "CRAM-MD5", 8, SASL_MECH_CRAM_MD5 },
69 { "DIGEST-MD5", 10, SASL_MECH_DIGEST_MD5 },
75 { "SCRAM-SHA-1", 11, SASL_MECH_SCRAM_SHA_1 },
76 { "SCRAM-SHA-256",13, SASL_MECH_SCRAM_SHA_256 },
88 * conn [in] - The connection data.
89 * authused [in] - The authentication mechanism used.
99 Curl_auth_cleanup_gssapi(&conn->krb5); in Curl_sasl_cleanup()
106 Curl_auth_gsasl_cleanup(&conn->gsasl); in Curl_sasl_cleanup()
113 Curl_auth_cleanup_ntlm(&conn->ntlm); in Curl_sasl_cleanup()
125 * ptr [in] - The mechanism string.
126 * maxlen [in] - Maximum mechanism string length.
127 * len [out] - If not NULL, effective name length.
147 if(!ISUPPER(c) && !ISDIGIT(c) && c != '-' && c != '_') in Curl_sasl_decode_mech()
169 if(sasl->resetprefs) { in Curl_sasl_parse_url_auth_option()
170 sasl->resetprefs = FALSE; in Curl_sasl_parse_url_auth_option()
171 sasl->prefmech = SASL_AUTH_NONE; in Curl_sasl_parse_url_auth_option()
175 sasl->prefmech = SASL_AUTH_DEFAULT; in Curl_sasl_parse_url_auth_option()
179 sasl->prefmech |= mechbit; in Curl_sasl_parse_url_auth_option()
195 unsigned long auth = data->set.httpauth; in Curl_sasl_init()
197 sasl->params = params; /* Set protocol dependent parameters */ in Curl_sasl_init()
198 sasl->state = SASL_STOP; /* Not yet running */ in Curl_sasl_init()
199 sasl->curmech = NULL; /* No mechanism yet. */ in Curl_sasl_init()
200 sasl->authmechs = SASL_AUTH_NONE; /* No known authentication mechanism yet */ in Curl_sasl_init()
201 sasl->prefmech = params->defmechs; /* Default preferred mechanisms */ in Curl_sasl_init()
202 sasl->authused = SASL_AUTH_NONE; /* The authentication mechanism used */ in Curl_sasl_init()
203 sasl->resetprefs = TRUE; /* Reset prefmech upon AUTH parsing. */ in Curl_sasl_init()
204 sasl->mutual_auth = FALSE; /* No mutual authentication (GSSAPI only) */ in Curl_sasl_init()
205 sasl->force_ir = FALSE; /* Respect external option */ in Curl_sasl_init()
208 sasl->resetprefs = FALSE; in Curl_sasl_init()
209 sasl->prefmech = SASL_AUTH_NONE; in Curl_sasl_init()
211 sasl->prefmech |= SASL_MECH_PLAIN | SASL_MECH_LOGIN; in Curl_sasl_init()
213 sasl->prefmech |= SASL_MECH_DIGEST_MD5; in Curl_sasl_init()
215 sasl->prefmech |= SASL_MECH_NTLM; in Curl_sasl_init()
217 sasl->prefmech |= SASL_MECH_OAUTHBEARER | SASL_MECH_XOAUTH2; in Curl_sasl_init()
219 sasl->prefmech |= SASL_MECH_GSSAPI; in Curl_sasl_init()
250 "CANCEL", in sasl_state()
255 if(sasl->state != newstate) in sasl_state()
257 (void *)sasl, names[sasl->state], names[newstate]); in sasl_state()
262 sasl->state = newstate; in sasl_state()
271 result = sasl->params->getmessage(data, out); in get_server_message()
272 if(!result && (sasl->params->flags & SASL_FLAG_BASE64)) { in get_server_message()
293 if(sasl->params->flags & SASL_FLAG_BASE64) { in build_message()
320 if(data->state.aptr.user) in Curl_sasl_can_authenticate()
324 if(sasl->authmechs & sasl->prefmech & SASL_MECH_EXTERNAL) in Curl_sasl_can_authenticate()
336 bool force_ir, saslprogress *progress) in Curl_sasl_start() argument
339 struct connectdata *conn = data->conn; in Curl_sasl_start()
348 const char *service = data->set.str[STRING_SERVICE_NAME] ? in Curl_sasl_start()
349 data->set.str[STRING_SERVICE_NAME] : in Curl_sasl_start()
350 sasl->params->service; in Curl_sasl_start()
352 const char *oauth_bearer = data->set.str[STRING_BEARER]; in Curl_sasl_start()
358 sasl->force_ir = force_ir; /* Latch for future use */ in Curl_sasl_start()
359 sasl->authused = 0; /* No mechanism used yet */ in Curl_sasl_start()
360 enabledmechs = sasl->authmechs & sasl->prefmech; in Curl_sasl_start()
361 *progress = SASL_IDLE; in Curl_sasl_start()
365 if((enabledmechs & SASL_MECH_EXTERNAL) && !conn->passwd[0]) { in Curl_sasl_start()
368 sasl->authused = SASL_MECH_EXTERNAL; in Curl_sasl_start()
370 if(force_ir || data->set.sasl_ir) in Curl_sasl_start()
371 result = Curl_auth_create_external_message(conn->user, &resp); in Curl_sasl_start()
373 else if(data->state.aptr.user) { in Curl_sasl_start()
376 Curl_auth_user_contains_domain(conn->user)) { in Curl_sasl_start()
377 sasl->mutual_auth = FALSE; in Curl_sasl_start()
381 sasl->authused = SASL_MECH_GSSAPI; in Curl_sasl_start()
383 if(force_ir || data->set.sasl_ir) in Curl_sasl_start()
384 result = Curl_auth_create_gssapi_user_message(data, conn->user, in Curl_sasl_start()
385 conn->passwd, in Curl_sasl_start()
387 conn->host.name, in Curl_sasl_start()
388 sasl->mutual_auth, in Curl_sasl_start()
389 NULL, &conn->krb5, in Curl_sasl_start()
397 &conn->gsasl)) { in Curl_sasl_start()
399 sasl->authused = SASL_MECH_SCRAM_SHA_256; in Curl_sasl_start()
403 result = Curl_auth_gsasl_start(data, conn->user, in Curl_sasl_start()
404 conn->passwd, &conn->gsasl); in Curl_sasl_start()
405 if(result == CURLE_OK && (force_ir || data->set.sasl_ir)) in Curl_sasl_start()
406 result = Curl_auth_gsasl_token(data, &nullmsg, &conn->gsasl, &resp); in Curl_sasl_start()
410 &conn->gsasl)) { in Curl_sasl_start()
412 sasl->authused = SASL_MECH_SCRAM_SHA_1; in Curl_sasl_start()
416 result = Curl_auth_gsasl_start(data, conn->user, in Curl_sasl_start()
417 conn->passwd, &conn->gsasl); in Curl_sasl_start()
418 if(result == CURLE_OK && (force_ir || data->set.sasl_ir)) in Curl_sasl_start()
419 result = Curl_auth_gsasl_token(data, &nullmsg, &conn->gsasl, &resp); in Curl_sasl_start()
428 sasl->authused = SASL_MECH_DIGEST_MD5; in Curl_sasl_start()
433 sasl->authused = SASL_MECH_CRAM_MD5; in Curl_sasl_start()
442 sasl->authused = SASL_MECH_NTLM; in Curl_sasl_start()
444 if(force_ir || data->set.sasl_ir) in Curl_sasl_start()
446 conn->user, conn->passwd, in Curl_sasl_start()
449 &conn->ntlm, &resp); in Curl_sasl_start()
457 sasl->authused = SASL_MECH_OAUTHBEARER; in Curl_sasl_start()
459 if(force_ir || data->set.sasl_ir) in Curl_sasl_start()
460 result = Curl_auth_create_oauth_bearer_message(conn->user, in Curl_sasl_start()
469 sasl->authused = SASL_MECH_XOAUTH2; in Curl_sasl_start()
471 if(force_ir || data->set.sasl_ir) in Curl_sasl_start()
472 result = Curl_auth_create_xoauth_bearer_message(conn->user, in Curl_sasl_start()
479 sasl->authused = SASL_MECH_PLAIN; in Curl_sasl_start()
481 if(force_ir || data->set.sasl_ir) in Curl_sasl_start()
482 result = Curl_auth_create_plain_message(conn->sasl_authzid, in Curl_sasl_start()
483 conn->user, conn->passwd, in Curl_sasl_start()
490 sasl->authused = SASL_MECH_LOGIN; in Curl_sasl_start()
492 if(force_ir || data->set.sasl_ir) in Curl_sasl_start()
493 result = Curl_auth_create_login_message(conn->user, &resp); in Curl_sasl_start()
498 sasl->curmech = mech; in Curl_sasl_start()
502 if(sasl->params->maxirlen && in Curl_sasl_start()
503 strlen(mech) + Curl_bufref_len(&resp) > sasl->params->maxirlen) in Curl_sasl_start()
507 result = sasl->params->sendauth(data, mech, &resp); in Curl_sasl_start()
510 *progress = SASL_INPROGRESS; in Curl_sasl_start()
525 int code, saslprogress *progress) in Curl_sasl_continue() argument
528 struct connectdata *conn = data->conn; in Curl_sasl_continue()
535 const char *service = data->set.str[STRING_SERVICE_NAME] ? in Curl_sasl_continue()
536 data->set.str[STRING_SERVICE_NAME] : in Curl_sasl_continue()
537 sasl->params->service; in Curl_sasl_continue()
539 const char *oauth_bearer = data->set.str[STRING_BEARER]; in Curl_sasl_continue()
545 *progress = SASL_INPROGRESS; in Curl_sasl_continue()
547 if(sasl->state == SASL_FINAL) { in Curl_sasl_continue()
548 if(code != sasl->params->finalcode) in Curl_sasl_continue()
550 *progress = SASL_DONE; in Curl_sasl_continue()
555 if(sasl->state != SASL_CANCEL && sasl->state != SASL_OAUTH2_RESP && in Curl_sasl_continue()
556 code != sasl->params->contcode) { in Curl_sasl_continue()
557 *progress = SASL_DONE; in Curl_sasl_continue()
562 switch(sasl->state) { in Curl_sasl_continue()
564 *progress = SASL_DONE; in Curl_sasl_continue()
567 result = Curl_auth_create_plain_message(conn->sasl_authzid, in Curl_sasl_continue()
568 conn->user, conn->passwd, &resp); in Curl_sasl_continue()
571 result = Curl_auth_create_login_message(conn->user, &resp); in Curl_sasl_continue()
575 result = Curl_auth_create_login_message(conn->passwd, &resp); in Curl_sasl_continue()
578 result = Curl_auth_create_external_message(conn->user, &resp); in Curl_sasl_continue()
584 result = Curl_auth_gsasl_token(data, &serverdata, &conn->gsasl, &resp); in Curl_sasl_continue()
593 result = Curl_auth_create_cram_md5_message(&serverdata, conn->user, in Curl_sasl_continue()
594 conn->passwd, &resp); in Curl_sasl_continue()
600 conn->user, conn->passwd, in Curl_sasl_continue()
602 if(!result && (sasl->params->flags & SASL_FLAG_BASE64)) in Curl_sasl_continue()
612 /* Create the type-1 message */ in Curl_sasl_continue()
614 conn->user, conn->passwd, in Curl_sasl_continue()
616 &conn->ntlm, &resp); in Curl_sasl_continue()
620 /* Decode the type-2 message */ in Curl_sasl_continue()
624 &conn->ntlm); in Curl_sasl_continue()
626 result = Curl_auth_create_ntlm_type3_message(data, conn->user, in Curl_sasl_continue()
627 conn->passwd, &conn->ntlm, in Curl_sasl_continue()
634 result = Curl_auth_create_gssapi_user_message(data, conn->user, in Curl_sasl_continue()
635 conn->passwd, in Curl_sasl_continue()
637 conn->host.name, in Curl_sasl_continue()
638 sasl->mutual_auth, NULL, in Curl_sasl_continue()
639 &conn->krb5, in Curl_sasl_continue()
646 if(sasl->mutual_auth) { in Curl_sasl_continue()
651 sasl->mutual_auth, in Curl_sasl_continue()
653 &conn->krb5, in Curl_sasl_continue()
660 conn->sasl_authzid, in Curl_sasl_continue()
662 &conn->krb5, in Curl_sasl_continue()
671 conn->sasl_authzid, in Curl_sasl_continue()
673 &conn->krb5, in Curl_sasl_continue()
680 if(sasl->authused == SASL_MECH_OAUTHBEARER) { in Curl_sasl_continue()
681 result = Curl_auth_create_oauth_bearer_message(conn->user, in Curl_sasl_continue()
691 result = Curl_auth_create_xoauth_bearer_message(conn->user, in Curl_sasl_continue()
698 if(code == sasl->params->finalcode) { in Curl_sasl_continue()
700 *progress = SASL_DONE; in Curl_sasl_continue()
704 else if(code == sasl->params->contcode) { in Curl_sasl_continue()
710 *progress = SASL_DONE; in Curl_sasl_continue()
717 sasl->authmechs ^= sasl->authused; in Curl_sasl_continue()
720 return Curl_sasl_start(sasl, data, sasl->force_ir, progress); in Curl_sasl_continue()
731 /* Cancel dialog */ in Curl_sasl_continue()
732 result = sasl->params->cancelauth(data, sasl->curmech); in Curl_sasl_continue()
738 result = sasl->params->contauth(data, sasl->curmech, &resp); in Curl_sasl_continue()
742 *progress = SASL_DONE; in Curl_sasl_continue()