X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fsrc%2Fauths%2Fcram_md5.c;h=04d893c97207ac810f28ad26fe16d7c3d391a45e;hb=5976eb9983e5f88f22d55f26ddac53c23aeb7f3d;hp=28526a6329a659d67a05a773e77373b4ef1f6d0b;hpb=80fea873648ca2ab2e592999a336c59cf054ab55;p=exim.git diff --git a/src/src/auths/cram_md5.c b/src/src/auths/cram_md5.c index 28526a632..04d893c97 100644 --- a/src/src/auths/cram_md5.c +++ b/src/src/auths/cram_md5.c @@ -38,7 +38,7 @@ address can appear in the tables drtables.c. */ int auth_cram_md5_options_count = sizeof(auth_cram_md5_options)/sizeof(optionlist); -/* Default private options block for the contidion authentication method. */ +/* Default private options block for the condition authentication method. */ auth_cram_md5_options_block auth_cram_md5_option_defaults = { NULL, /* server_secret */ @@ -47,6 +47,17 @@ auth_cram_md5_options_block auth_cram_md5_option_defaults = { }; +#ifdef MACRO_PREDEF + +/* Dummy values */ +void auth_cram_md5_init(auth_instance *ablock) {} +int auth_cram_md5_server(auth_instance *ablock, uschar *data) {return 0;} +int auth_cram_md5_client(auth_instance *ablock, smtp_inblock *inblock, + smtp_outblock *outblock, int timeout, uschar *buffer, int buffsize) {return 0;} + +#else /*!MACRO_PREDEF*/ + + /************************************************* * Initialization entry point * *************************************************/ @@ -68,12 +79,14 @@ if (ob->client_secret != NULL) } } +#endif /*!MACRO_PREDEF*/ #endif /* STAND_ALONE */ +#ifndef MACRO_PREDEF /************************************************* -* Peform the CRAM-MD5 algorithm * +* Perform the CRAM-MD5 algorithm * *************************************************/ /* The CRAM-MD5 algorithm is described in RFC 2195. It computes @@ -261,9 +274,9 @@ int i; uschar digest[16]; /* If expansion of either the secret or the user name failed, return CANCELLED -or ERROR, as approriate. */ +or ERROR, as appropriate. */ -if (secret == NULL || name == NULL) +if (!secret || !name) { if (expand_string_forcedfail) { @@ -272,7 +285,7 @@ if (secret == NULL || name == NULL) } string_format(buffer, buffsize, "expansion of \"%s\" failed in " "%s authenticator: %s", - (secret == NULL)? ob->client_secret : ob->client_name, + !secret ? ob->client_secret : ob->client_name, ablock->name, expand_string_message); return ERROR; } @@ -280,9 +293,10 @@ if (secret == NULL || name == NULL) /* Initiate the authentication exchange and read the challenge, which arrives in base 64. */ -if (smtp_write_command(outblock, FALSE, "AUTH %s\r\n", ablock->public_name) < 0) +if (smtp_write_command(outblock, SCMD_FLUSH, "AUTH %s\r\n", + ablock->public_name) < 0) return FAIL_SEND; -if (smtp_read_response(inblock, (uschar *)buffer, buffsize, '3', timeout) < 0) +if (!smtp_read_response(inblock, buffer, buffsize, '3', timeout)) return FAIL; if (b64decode(buffer + 4, &challenge) < 0) @@ -299,26 +313,22 @@ compute_cram_md5(secret, challenge, digest); /* Create the response from the user name plus the CRAM-MD5 digest */ string_format(big_buffer, big_buffer_size - 36, "%s", name); -p = big_buffer; -while (*p != 0) p++; +for (p = big_buffer; *p; ) p++; *p++ = ' '; for (i = 0; i < 16; i++) - { - sprintf(CS p, "%02x", digest[i]); - p += 2; - } + p += sprintf(CS p, "%02x", digest[i]); /* Send the response, in base 64, and check the result. The response is in big_buffer, but b64encode() returns its result in working store, so calling smtp_write_command(), which uses big_buffer, is OK. */ buffer[0] = 0; -if (smtp_write_command(outblock, FALSE, "%s\r\n", b64encode(big_buffer, +if (smtp_write_command(outblock, SCMD_FLUSH, "%s\r\n", b64encode(big_buffer, p - big_buffer)) < 0) return FAIL_SEND; -return smtp_read_response(inblock, (uschar *)buffer, buffsize, '2', timeout)? - OK : FAIL; +return smtp_read_response(inblock, (uschar *)buffer, buffsize, '2', timeout) + ? OK : FAIL; } #endif /* STAND_ALONE */ @@ -348,4 +358,5 @@ return 0; #endif +#endif /*!MACRO_PREDEF*/ /* End of cram_md5.c */