Annotation of embedaddon/curl/lib/vauth/cleartext.c, revision 1.1
1.1 ! misho 1: /***************************************************************************
! 2: * _ _ ____ _
! 3: * Project ___| | | | _ \| |
! 4: * / __| | | | |_) | |
! 5: * | (__| |_| | _ <| |___
! 6: * \___|\___/|_| \_\_____|
! 7: *
! 8: * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
! 9: *
! 10: * This software is licensed as described in the file COPYING, which
! 11: * you should have received as part of this distribution. The terms
! 12: * are also available at https://curl.haxx.se/docs/copyright.html.
! 13: *
! 14: * You may opt to use, copy, modify, merge, publish, distribute and/or sell
! 15: * copies of the Software, and permit persons to whom the Software is
! 16: * furnished to do so, under the terms of the COPYING file.
! 17: *
! 18: * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
! 19: * KIND, either express or implied.
! 20: *
! 21: * RFC4616 PLAIN authentication
! 22: * Draft LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
! 23: *
! 24: ***************************************************************************/
! 25:
! 26: #include "curl_setup.h"
! 27:
! 28: #if !defined(CURL_DISABLE_IMAP) || !defined(CURL_DISABLE_SMTP) || \
! 29: !defined(CURL_DISABLE_POP3)
! 30:
! 31: #include <curl/curl.h>
! 32: #include "urldata.h"
! 33:
! 34: #include "vauth/vauth.h"
! 35: #include "curl_base64.h"
! 36: #include "curl_md5.h"
! 37: #include "warnless.h"
! 38: #include "strtok.h"
! 39: #include "sendf.h"
! 40: #include "curl_printf.h"
! 41:
! 42: /* The last #include files should be: */
! 43: #include "curl_memory.h"
! 44: #include "memdebug.h"
! 45:
! 46: /*
! 47: * Curl_auth_create_plain_message()
! 48: *
! 49: * This is used to generate an already encoded PLAIN message ready
! 50: * for sending to the recipient.
! 51: *
! 52: * Parameters:
! 53: *
! 54: * data [in] - The session handle.
! 55: * authzid [in] - The authorization identity.
! 56: * authcid [in] - The authentication identity.
! 57: * passwd [in] - The password.
! 58: * outptr [in/out] - The address where a pointer to newly allocated memory
! 59: * holding the result will be stored upon completion.
! 60: * outlen [out] - The length of the output message.
! 61: *
! 62: * Returns CURLE_OK on success.
! 63: */
! 64: CURLcode Curl_auth_create_plain_message(struct Curl_easy *data,
! 65: const char *authzid,
! 66: const char *authcid,
! 67: const char *passwd,
! 68: char **outptr, size_t *outlen)
! 69: {
! 70: CURLcode result;
! 71: char *plainauth;
! 72: size_t zlen;
! 73: size_t clen;
! 74: size_t plen;
! 75: size_t plainlen;
! 76:
! 77: *outlen = 0;
! 78: *outptr = NULL;
! 79: zlen = (authzid == NULL ? 0 : strlen(authzid));
! 80: clen = strlen(authcid);
! 81: plen = strlen(passwd);
! 82:
! 83: /* Compute binary message length. Check for overflows. */
! 84: if(((zlen + clen) > SIZE_T_MAX/4) || (plen > (SIZE_T_MAX/2 - 2)))
! 85: return CURLE_OUT_OF_MEMORY;
! 86: plainlen = zlen + clen + plen + 2;
! 87:
! 88: plainauth = malloc(plainlen);
! 89: if(!plainauth)
! 90: return CURLE_OUT_OF_MEMORY;
! 91:
! 92: /* Calculate the reply */
! 93: if(zlen != 0)
! 94: memcpy(plainauth, authzid, zlen);
! 95: plainauth[zlen] = '\0';
! 96: memcpy(plainauth + zlen + 1, authcid, clen);
! 97: plainauth[zlen + clen + 1] = '\0';
! 98: memcpy(plainauth + zlen + clen + 2, passwd, plen);
! 99:
! 100: /* Base64 encode the reply */
! 101: result = Curl_base64_encode(data, plainauth, plainlen, outptr, outlen);
! 102: free(plainauth);
! 103:
! 104: return result;
! 105: }
! 106:
! 107: /*
! 108: * Curl_auth_create_login_message()
! 109: *
! 110: * This is used to generate an already encoded LOGIN message containing the
! 111: * user name or password ready for sending to the recipient.
! 112: *
! 113: * Parameters:
! 114: *
! 115: * data [in] - The session handle.
! 116: * valuep [in] - The user name or user's password.
! 117: * outptr [in/out] - The address where a pointer to newly allocated memory
! 118: * holding the result will be stored upon completion.
! 119: * outlen [out] - The length of the output message.
! 120: *
! 121: * Returns CURLE_OK on success.
! 122: */
! 123: CURLcode Curl_auth_create_login_message(struct Curl_easy *data,
! 124: const char *valuep, char **outptr,
! 125: size_t *outlen)
! 126: {
! 127: size_t vlen = strlen(valuep);
! 128:
! 129: if(!vlen) {
! 130: /* Calculate an empty reply */
! 131: *outptr = strdup("=");
! 132: if(*outptr) {
! 133: *outlen = (size_t) 1;
! 134: return CURLE_OK;
! 135: }
! 136:
! 137: *outlen = 0;
! 138: return CURLE_OUT_OF_MEMORY;
! 139: }
! 140:
! 141: /* Base64 encode the value */
! 142: return Curl_base64_encode(data, valuep, vlen, outptr, outlen);
! 143: }
! 144:
! 145: /*
! 146: * Curl_auth_create_external_message()
! 147: *
! 148: * This is used to generate an already encoded EXTERNAL message containing
! 149: * the user name ready for sending to the recipient.
! 150: *
! 151: * Parameters:
! 152: *
! 153: * data [in] - The session handle.
! 154: * user [in] - The user name.
! 155: * outptr [in/out] - The address where a pointer to newly allocated memory
! 156: * holding the result will be stored upon completion.
! 157: * outlen [out] - The length of the output message.
! 158: *
! 159: * Returns CURLE_OK on success.
! 160: */
! 161: CURLcode Curl_auth_create_external_message(struct Curl_easy *data,
! 162: const char *user, char **outptr,
! 163: size_t *outlen)
! 164: {
! 165: /* This is the same formatting as the login message */
! 166: return Curl_auth_create_login_message(data, user, outptr, outlen);
! 167: }
! 168:
! 169: #endif /* if no users */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>