talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 0352d51c9008b03e063581101fa25f1c41341768
parent 5f4dd422f5690319509ed04e9454b3cf4bb96330
Author: Oliver Lowe <o@olowe.co>
Date:   Thu, 28 Aug 2025 14:58:02 +1000

Drop APOP, and in-house MD5

MD5 is broken, and don't want to rely on an in-house md5 thing to
protect against running multiple instances of this app running at the
same time. Not sure whether APOP is even commonly supported
especially since most connections will be tunneled through TLS.

While here delete windows icon

Diffstat:
Dclaws-mail.ico | 0
Msrc/common/Makefile.am | 2--
Dsrc/common/md5.c | 493-------------------------------------------------------------------------------
Dsrc/common/md5.h | 33---------------------------------
Msrc/common/smtp.c | 81++++++-------------------------------------------------------------------------
Msrc/common/smtp.h | 4++--
Msrc/common/tests/Makefile.am | 4----
Dsrc/common/tests/md5_test.c | 258-------------------------------------------------------------------------------
Msrc/imap.c | 27---------------------------
Msrc/inc.c | 2--
Msrc/main.c | 47+++++++++++------------------------------------
Msrc/oauth2.c | 1-
Msrc/pop.c | 57---------------------------------------------------------
Msrc/pop.h | 1-
Msrc/prefs_account.c | 5-----
Msrc/prefs_account.h | 1-
16 files changed, 19 insertions(+), 997 deletions(-)

diff --git a/claws-mail.ico b/claws-mail.ico Binary files differ. diff --git a/src/common/Makefile.am b/src/common/Makefile.am @@ -20,7 +20,6 @@ libclawscommon_la_SOURCES = $(arch_sources) \ file-utils.c \ hooks.c \ log.c \ - md5.c \ mgutils.c \ passcrypt.c \ prefs.c \ @@ -49,7 +48,6 @@ clawscommoninclude_HEADERS = $(arch_headers) \ defs.h \ hooks.h \ log.h \ - md5.h \ mgutils.h \ passcrypt.h \ prefs.h \ diff --git a/src/common/md5.c b/src/common/md5.c @@ -1,493 +0,0 @@ -/* md5.c - MD5 Message-Digest Algorithm - * Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc. - * - * according to the definition of MD5 in RFC 1321 from April 1992. - * NOTE: This is *not* the same file as the one from glibc. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 3, or (at your option) any - * later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ -/* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. */ -/* heavily modified for GnuPG by <werner.koch@guug.de> */ -/* modified again for Sylpheed by <wk@gnupg.org> 2001-02-11 */ - - -/* Test values: - * "" D4 1D 8C D9 8F 00 B2 04 E9 80 09 98 EC F8 42 7E - * "a" 0C C1 75 B9 C0 F1 B6 A8 31 C3 99 E2 69 77 26 61 - * "abc 90 01 50 98 3C D2 4F B0 D6 96 3F 7D 28 E1 7F 72 - * "message digest" F9 6B 69 7D 7C B7 93 8D 52 5A 2F 31 AA F1 61 D0 - */ - -#include <config.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <assert.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <unistd.h> - -#include <glib.h> -#include <glib/gstdio.h> - -#include "md5.h" - -/**************** - * Rotate a 32 bit integer by n bytes - */ -#if defined(__GNUC__) && defined(__i386__) -static inline guint32 -rol( guint32 x, int n) -{ - __asm__("roll %%cl,%0" - :"=r" (x) - :"0" (x),"c" (n)); - return x; -} -#else -#define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) ) -#endif - -typedef struct { - guint32 A,B,C,D; - guint32 nblocks; - unsigned char buf[64]; - int count; - int finalized; -} MD5_CONTEXT; - -static void -md5_init(MD5_CONTEXT *ctx) -{ - ctx->A = 0x67452301; - ctx->B = 0xefcdab89; - ctx->C = 0x98badcfe; - ctx->D = 0x10325476; - - ctx->nblocks = 0; - ctx->count = 0; - ctx->finalized = 0; -} - -/* These are the four functions used in the four steps of the MD5 algorithm - and defined in the RFC 1321. The first function is a little bit optimized - (as found in Colin Plumbs public domain implementation). */ -/* #define FF(b, c, d) ((b & c) | (~b & d)) */ -#define FF(b, c, d) (d ^ (b & (c ^ d))) -#define FG(b, c, d) FF (d, b, c) -#define FH(b, c, d) (b ^ c ^ d) -#define FI(b, c, d) (c ^ (b | ~d)) - - -/**************** - * transform n*64 bytes - */ -static void -transform(MD5_CONTEXT *ctx, const unsigned char *data) -{ - guint32 correct_words[16]; - guint32 A = ctx->A; - guint32 B = ctx->B; - guint32 C = ctx->C; - guint32 D = ctx->D; - guint32 *cwp = correct_words; - -#ifdef BIG_ENDIAN_HOST - { - int i; - unsigned char *p2; - const unsigned char *p1; - - for (i = 0, p1 = data, p2 = (unsigned char*)correct_words; - i < 16; i++, p2 += 4) { - p2[3] = *p1++; - p2[2] = *p1++; - p2[1] = *p1++; - p2[0] = *p1++; - } - } -#else - memcpy(correct_words, data, 64); -#endif - - -#define OP(a, b, c, d, s, T) \ - do { \ - a += FF (b, c, d) + (*cwp++) + T; \ - a = rol(a, s); \ - a += b; \ - } while (0) - - /* Before we start, one word about the strange constants. - They are defined in RFC 1321 as - - T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64 - */ - - /* Round 1. */ - OP (A, B, C, D, 7, 0xd76aa478); - OP (D, A, B, C, 12, 0xe8c7b756); - OP (C, D, A, B, 17, 0x242070db); - OP (B, C, D, A, 22, 0xc1bdceee); - OP (A, B, C, D, 7, 0xf57c0faf); - OP (D, A, B, C, 12, 0x4787c62a); - OP (C, D, A, B, 17, 0xa8304613); - OP (B, C, D, A, 22, 0xfd469501); - OP (A, B, C, D, 7, 0x698098d8); - OP (D, A, B, C, 12, 0x8b44f7af); - OP (C, D, A, B, 17, 0xffff5bb1); - OP (B, C, D, A, 22, 0x895cd7be); - OP (A, B, C, D, 7, 0x6b901122); - OP (D, A, B, C, 12, 0xfd987193); - OP (C, D, A, B, 17, 0xa679438e); - OP (B, C, D, A, 22, 0x49b40821); - -#undef OP -#define OP(f, a, b, c, d, k, s, T) \ - do { \ - a += f (b, c, d) + correct_words[k] + T; \ - a = rol(a, s); \ - a += b; \ - } while (0) - - /* Round 2. */ - OP (FG, A, B, C, D, 1, 5, 0xf61e2562); - OP (FG, D, A, B, C, 6, 9, 0xc040b340); - OP (FG, C, D, A, B, 11, 14, 0x265e5a51); - OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa); - OP (FG, A, B, C, D, 5, 5, 0xd62f105d); - OP (FG, D, A, B, C, 10, 9, 0x02441453); - OP (FG, C, D, A, B, 15, 14, 0xd8a1e681); - OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8); - OP (FG, A, B, C, D, 9, 5, 0x21e1cde6); - OP (FG, D, A, B, C, 14, 9, 0xc33707d6); - OP (FG, C, D, A, B, 3, 14, 0xf4d50d87); - OP (FG, B, C, D, A, 8, 20, 0x455a14ed); - OP (FG, A, B, C, D, 13, 5, 0xa9e3e905); - OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8); - OP (FG, C, D, A, B, 7, 14, 0x676f02d9); - OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a); - - /* Round 3. */ - OP (FH, A, B, C, D, 5, 4, 0xfffa3942); - OP (FH, D, A, B, C, 8, 11, 0x8771f681); - OP (FH, C, D, A, B, 11, 16, 0x6d9d6122); - OP (FH, B, C, D, A, 14, 23, 0xfde5380c); - OP (FH, A, B, C, D, 1, 4, 0xa4beea44); - OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9); - OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60); - OP (FH, B, C, D, A, 10, 23, 0xbebfbc70); - OP (FH, A, B, C, D, 13, 4, 0x289b7ec6); - OP (FH, D, A, B, C, 0, 11, 0xeaa127fa); - OP (FH, C, D, A, B, 3, 16, 0xd4ef3085); - OP (FH, B, C, D, A, 6, 23, 0x04881d05); - OP (FH, A, B, C, D, 9, 4, 0xd9d4d039); - OP (FH, D, A, B, C, 12, 11, 0xe6db99e5); - OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8); - OP (FH, B, C, D, A, 2, 23, 0xc4ac5665); - - /* Round 4. */ - OP (FI, A, B, C, D, 0, 6, 0xf4292244); - OP (FI, D, A, B, C, 7, 10, 0x432aff97); - OP (FI, C, D, A, B, 14, 15, 0xab9423a7); - OP (FI, B, C, D, A, 5, 21, 0xfc93a039); - OP (FI, A, B, C, D, 12, 6, 0x655b59c3); - OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92); - OP (FI, C, D, A, B, 10, 15, 0xffeff47d); - OP (FI, B, C, D, A, 1, 21, 0x85845dd1); - OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f); - OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0); - OP (FI, C, D, A, B, 6, 15, 0xa3014314); - OP (FI, B, C, D, A, 13, 21, 0x4e0811a1); - OP (FI, A, B, C, D, 4, 6, 0xf7537e82); - OP (FI, D, A, B, C, 11, 10, 0xbd3af235); - OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb); - OP (FI, B, C, D, A, 9, 21, 0xeb86d391); - - /* Put checksum in context given as argument. */ - ctx->A += A; - ctx->B += B; - ctx->C += C; - ctx->D += D; -} - - - -/* The routine updates the message-digest context to - * account for the presence of each of the characters inBuf[0..inLen-1] - * in the message whose digest is being computed. - */ -static void -md5_update(MD5_CONTEXT *hd, const unsigned char *inbuf, size_t inlen) -{ - if (hd->count == 64) { /* flush the buffer */ - transform( hd, hd->buf ); - hd->count = 0; - hd->nblocks++; - } - if (!inbuf) - return; - if (hd->count) { - for (; inlen && hd->count < 64; inlen--) - hd->buf[hd->count++] = *inbuf++; - md5_update(hd, NULL, 0); - if (!inlen) - return; - } - - while (inlen >= 64) { - transform(hd, inbuf); - hd->count = 0; - hd->nblocks++; - inlen -= 64; - inbuf += 64; - } - - for (; inlen && hd->count < 64; inlen--) - hd->buf[hd->count++] = *inbuf++; -} - - - -/* The routine final terminates the message-digest computation and - * ends with the desired message digest in mdContext->digest[0...15]. - * The handle is prepared for a new MD5 cycle. - * Returns 16 bytes representing the digest. - */ - -static void -do_final(MD5_CONTEXT *hd) -{ - guint32 t, msb, lsb; - unsigned char *p; - - md5_update(hd, NULL, 0); /* flush */ - - msb = 0; - t = hd->nblocks; - if ((lsb = t << 6) < t) /* multiply by 64 to make a byte count */ - msb++; - msb += t >> 26; - t = lsb; - if ((lsb = t + hd->count) < t) /* add the count */ - msb++; - t = lsb; - if ((lsb = t << 3) < t) /* multiply by 8 to make a bit count */ - msb++; - msb += t >> 29; - - if (hd->count < 56) { /* enough room */ - hd->buf[hd->count++] = 0x80; /* pad */ - while(hd->count < 56) - hd->buf[hd->count++] = 0; /* pad */ - } else { /* need one extra block */ - hd->buf[hd->count++] = 0x80; /* pad character */ - while (hd->count < 64) - hd->buf[hd->count++] = 0; - md5_update(hd, NULL, 0); /* flush */ - memset(hd->buf, 0, 56); /* fill next block with zeroes */ - } - - /* append the 64 bit count */ - hd->buf[56] = lsb ; - hd->buf[57] = lsb >> 8; - hd->buf[58] = lsb >> 16; - hd->buf[59] = lsb >> 24; - hd->buf[60] = msb ; - hd->buf[61] = msb >> 8; - hd->buf[62] = msb >> 16; - hd->buf[63] = msb >> 24; - transform(hd, hd->buf); - - p = hd->buf; -#ifdef BIG_ENDIAN_HOST -#define X(a) do { *p++ = hd->a ; *p++ = hd->a >> 8; \ - *p++ = hd->a >> 16; *p++ = hd->a >> 24; } while(0) -#else /* little endian */ - /*#define X(a) do { *(guint32*)p = hd->##a ; p += 4; } while(0)*/ - /* Unixware's cpp doesn't like the above construct so we do it his way: - * (reported by Allan Clark) */ -#define X(a) do { *(guint32*)p = (*hd).a ; p += 4; } while(0) -#endif - X(A); - X(B); - X(C); - X(D); -#undef X - hd->finalized = 1; -} - -static void -md5_final(unsigned char *digest, MD5_CONTEXT *ctx) -{ - if (!ctx->finalized) - do_final(ctx); - memcpy(digest, ctx->buf, 16); -} - -/* - * Creates a MD5 digest in hex fomrat (lowercase letters) from the - * string S. hextdigest but be buffer of at lease 33 bytes! - */ -static void -md5_hex_digest_binary(char *hexdigest, const unsigned char *s, size_t len) -{ - int i; - MD5_CONTEXT context; - unsigned char digest[16]; - - md5_init(&context); - md5_update(&context, s, len); - md5_final(digest, &context); - - for (i = 0; i < 16; i++) - sprintf(hexdigest + 2 * i, "%02x", digest[i]); -} - -int -md5_hex_digest_file(char *hexdigest, const unsigned char *file) -{ - int READ_BLOCK_SIZE=4096; - int len; - char *buf = malloc(READ_BLOCK_SIZE); /* alloc the first block */ - char *lastp = buf; /* point to the start of the buffer */ - size_t total = 0; /* total length read */ - int num_alloc = 1; /* number of blocks allocated */ - int fd = g_open(file, O_RDONLY, 0); - - if (fd == -1) { - FILE_OP_ERROR(file, "open"); - free(buf); - return -1; - } - - while ((len = read(fd, lastp, READ_BLOCK_SIZE)) > 0) { /* read one block (which is allocated) */ - total += len; /* update the total length */ - num_alloc++; /* increase number of allocs */ - buf = realloc(buf, READ_BLOCK_SIZE*num_alloc); /* allocate one more block for next read */ - lastp = buf+total; /* point to the end of read stuff to buf */ - } - - close(fd); - md5_hex_digest_binary(hexdigest, buf, total); - free(buf); - // printf("%s %s\n", hexdigest, file); - return 0; -} - -/* - * Creates a MD5 digest in hex fomrat (lowercase letters) from the - * string S. hextdigest but be buffer of at lease 33 bytes! - */ -void -md5_hex_digest(char *hexdigest, const unsigned char *s) -{ - g_return_if_fail(hexdigest != NULL); - g_return_if_fail(s != NULL); - md5_hex_digest_binary(hexdigest, s, strlen(s)); -} - -/* -** Function: md5_hmac -** taken from the file rfc2104.txt -** written by Martin Schaaf <mascha@ma-scha.de> -*/ -static void -md5_hmac(unsigned char *digest, - const unsigned char* text, int text_len, - const unsigned char* key, int key_len) -{ - MD5_CONTEXT context; - unsigned char k_ipad[64]; /* inner padding - - * key XORd with ipad - */ - unsigned char k_opad[64]; /* outer padding - - * key XORd with opad - */ - /* unsigned char tk[16]; */ - int i; - - /* start out by storing key in pads */ - memset(k_ipad, 0, sizeof k_ipad); - memset(k_opad, 0, sizeof k_opad); - if (key_len > 64) { - /* if key is longer than 64 bytes reset it to key=MD5(key) */ - MD5_CONTEXT tctx; - - md5_init(&tctx); - md5_update(&tctx, key, key_len); - md5_final(k_ipad, &tctx); - md5_final(k_opad, &tctx); - } else { - memcpy(k_ipad, key, key_len); - memcpy(k_opad, key, key_len); - } - - /* - * the HMAC_MD5 transform looks like: - * - * MD5(K XOR opad, MD5(K XOR ipad, text)) - * - * where K is an n byte key - * ipad is the byte 0x36 repeated 64 times - * opad is the byte 0x5c repeated 64 times - * and text is the data being protected - */ - - - /* XOR key with ipad and opad values */ - for (i = 0; i < 64; i++) { - k_ipad[i] ^= 0x36; - k_opad[i] ^= 0x5c; - } - - /* - * perform inner MD5 - */ - md5_init(&context); /* init context for 1st - * pass */ - md5_update(&context, k_ipad, 64); /* start with inner pad */ - md5_update(&context, text, text_len); /* then text of datagram */ - md5_final(digest, &context); /* finish up 1st pass */ - /* - * perform outer MD5 - */ - md5_init(&context); /* init context for 2nd - * pass */ - md5_update(&context, k_opad, 64); /* start with outer pad */ - md5_update(&context, digest, 16); /* then results of 1st - * hash */ - md5_final(digest, &context); /* finish up 2nd pass */ -} - - -void -md5_hex_hmac(char *hexdigest, - const unsigned char* text, int text_len, - const unsigned char* key, int key_len) -{ - unsigned char digest[16]; - int i; - - g_return_if_fail(key != NULL); - g_return_if_fail(key_len >= 0); - g_return_if_fail(text != NULL); - g_return_if_fail(text_len >= 0); - g_return_if_fail(hexdigest != NULL); - - md5_hmac(digest, text, text_len, key, key_len); - for (i = 0; i < 16; i++) - sprintf(hexdigest + 2 * i, "%02x", digest[i]); -} diff --git a/src/common/md5.h b/src/common/md5.h @@ -1,33 +0,0 @@ -/* md5.h - MD5 Message-Digest Algorithm - * Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc. - * - * according to the definition of MD5 in RFC 1321 from April 1992. - * NOTE: This is *not* the same file as the one from glibc - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 3, or (at your option) any - * later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef _MD5_HDR_ -#define _MD5_HDR_ - -#include "utils.h" - -void md5_hex_digest(char *hexdigest, const unsigned char *s); -int md5_hex_digest_file(char *hexdigest, const unsigned char *file); -void md5_hex_hmac(char *hexdigest, - const unsigned char* text, int text_len, - const unsigned char* key, int key_len); - -#endif /* _MD5_HDR_ */ - diff --git a/src/common/smtp.c b/src/common/smtp.c @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * */ #ifdef HAVE_CONFIG_H @@ -33,7 +33,6 @@ #include <string.h> #include "smtp.h" -#include "md5.h" #include "utils.h" #include "log.h" @@ -46,7 +45,6 @@ static gint smtp_starttls(SMTPSession *session); #ifdef USE_OAUTH2 static gint smtp_auth_oauth2(SMTPSession *session); #endif -static gint smtp_auth_cram_md5(SMTPSession *session); static gint smtp_auth_login(SMTPSession *session); static gint smtp_auth_plain(SMTPSession *session); @@ -131,12 +129,12 @@ gint smtp_from(SMTPSession *session) cm_return_val_if_fail(session->from != NULL, SM_ERROR); session->state = SMTP_FROM; - + if (session->is_esmtp && (session->esmtp_flags & ESMTP_SIZE)!=0) mail_size = g_strdup_printf(" SIZE=%d", session->send_data_len); else mail_size = g_strdup(""); - + if (strchr(session->from, '<')) g_snprintf(buf, sizeof(buf), "MAIL FROM:%s%s", session->from, @@ -160,13 +158,7 @@ static gint smtp_auth(SMTPSession *session) cm_return_val_if_fail(session->user != NULL, SM_ERROR); session->state = SMTP_AUTH; - - if ((session->forced_auth_type == SMTPAUTH_CRAM_MD5 - || session->forced_auth_type == 0) - && - (session->avail_auth_type & SMTPAUTH_CRAM_MD5) != 0) - smtp_auth_cram_md5(session); - else if ((session->forced_auth_type == SMTPAUTH_LOGIN + if ((session->forced_auth_type == SMTPAUTH_LOGIN || session->forced_auth_type == 0) && (session->avail_auth_type & SMTPAUTH_LOGIN) != 0) @@ -218,45 +210,6 @@ static gint smtp_auth_recv(SMTPSession *session, const gchar *msg) log_print(LOG_PROTOCOL, "ESMTP> *\n"); } break; - case SMTPAUTH_CRAM_MD5: - session->state = SMTP_AUTH_CRAM_MD5; - - if (!strncmp(msg, "334 ", 4)) { - gchar *response; - gchar *response64; - gchar *challenge; - gsize challengelen; - guchar hexdigest[33]; - - challenge = g_base64_decode_zero(msg + 4, &challengelen); - log_print(LOG_PROTOCOL, "ESMTP< [Decoded: %s]\n", challenge); - - g_snprintf(buf, sizeof(buf), "%s", session->pass); - md5_hex_hmac(hexdigest, challenge, challengelen, - buf, strlen(session->pass)); - g_free(challenge); - - response = g_strdup_printf - ("%s %s", session->user, hexdigest); - log_print(LOG_PROTOCOL, "ESMTP> [Encoded: %s]\n", response); - - response64 = g_base64_encode(response, strlen(response)); - g_free(response); - - if (session_send_msg(SESSION(session), response64) < 0) { - g_free(response64); - return SM_ERROR; - } - log_print(LOG_PROTOCOL, "ESMTP> %s\n", response64); - g_free(response64); - } else { - /* Server rejects AUTH */ - if (session_send_msg(SESSION(session), "*") < 0) - return SM_ERROR; - log_print(LOG_PROTOCOL, "ESMTP> *\n"); - } - break; - case SMTPAUTH_DIGEST_MD5: default: /* stop smtp_auth when no correct authtype */ if (session_send_msg(SESSION(session), "*") < 0) @@ -321,10 +274,6 @@ static gint smtp_ehlo_recv(SMTPSession *session, const gchar *msg) session->avail_auth_type |= SMTPAUTH_PLAIN; if (strcasestr(p, "LOGIN")) session->avail_auth_type |= SMTPAUTH_LOGIN; - if (strcasestr(p, "CRAM-MD5")) - session->avail_auth_type |= SMTPAUTH_CRAM_MD5; - if (strcasestr(p, "DIGEST-MD5")) - session->avail_auth_type |= SMTPAUTH_DIGEST_MD5; #ifdef USE_GNUTLS if (strcasestr(p, "XOAUTH2")) session->avail_auth_type |= SMTPAUTH_OAUTH2; @@ -363,18 +312,6 @@ static gint smtp_starttls(SMTPSession *session) } #endif -static gint smtp_auth_cram_md5(SMTPSession *session) -{ - session->state = SMTP_AUTH; - session->auth_type = SMTPAUTH_CRAM_MD5; - - if (session_send_msg(SESSION(session), "AUTH CRAM-MD5") < 0) - return SM_ERROR; - log_print(LOG_PROTOCOL, "ESMTP> AUTH CRAM-MD5\n"); - - return SM_OK; -} - static gint smtp_auth_plain(SMTPSession *session) { gchar buf[MESSAGEBUFSIZE], *b64buf, *out; @@ -539,7 +476,7 @@ static gint smtp_session_recv_msg(Session *session, const gchar *msg) SMTPSession *smtp_session = SMTP_SESSION(session); gboolean cont = FALSE; gint ret = 0; - + if (strlen(msg) < 4) { log_warning(LOG_PROTOCOL, _("bad SMTP response\n")); return -1; @@ -555,9 +492,6 @@ static gint smtp_session_recv_msg(Session *session, const gchar *msg) #ifdef USE_GNUTLS case SMTP_AUTH_OAUTH2: #endif - case SMTP_AUTH_CRAM_MD5: - log_print(LOG_PROTOCOL, "ESMTP< %s\n", msg); - break; default: log_print(LOG_PROTOCOL, "SMTP< %s\n", msg); break; @@ -626,7 +560,7 @@ static gint smtp_session_recv_msg(Session *session, const gchar *msg) if (cont == TRUE) break; if (smtp_session->max_message_size > 0 - && smtp_session->max_message_size < + && smtp_session->max_message_size < smtp_session->send_data_len) { log_warning(LOG_PROTOCOL, _("Message is too big " "(Maximum size is %s)\n"), @@ -680,9 +614,6 @@ static gint smtp_session_recv_msg(Session *session, const gchar *msg) #ifdef USE_GNUTLS case SMTP_AUTH_OAUTH2: #endif - case SMTP_AUTH_CRAM_MD5: - ret = smtp_from(smtp_session); - break; case SMTP_FROM: if (smtp_session->cur_to) ret = smtp_rcpt(smtp_session); diff --git a/src/common/smtp.h b/src/common/smtp.h @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * */ #ifndef __SMTP_H__ @@ -113,7 +113,7 @@ struct _SMTPSession gchar *error_msg; gboolean is_esmtp; ESMTPFlag esmtp_flags; - + void *dialog; #ifdef USE_GNUTLS diff --git a/src/common/tests/Makefile.am b/src/common/tests/Makefile.am @@ -17,10 +17,6 @@ TEST_PROGS += codeconv_test codeconv_test_SOURCES = codeconv_test.c codeconv_test_LDADD = $(common_ldadd) ../codeconv.o ../utils.o ../quoted-printable.o ../unmime.o ../file-utils.o -TEST_PROGS += md5_test -md5_test_SOURCES = md5_test.c -md5_test_LDADD = $(common_ldadd) ../md5.o - TEST_PROGS += pkcs5_pbkdf2_test pkcs5_pbkdf2_test_SOURCES = pkcs5_pbkdf2_test.c pkcs5_pbkdf2_test_LDADD = $(common_ldadd) ../pkcs5_pbkdf2.o diff --git a/src/common/tests/md5_test.c b/src/common/tests/md5_test.c @@ -1,258 +0,0 @@ -#include "config.h" - -#include <glib.h> - -#include <common/md5.h> - -struct td_digest { - gchar *input; - gchar *expected_output; -}; - -struct td_digest td_rfc1321_1 = { "", "d41d8cd98f00b204e9800998ecf8427e" }; -struct td_digest td_rfc1321_2 = { "a", "0cc175b9c0f1b6a831c399e269772661" }; -struct td_digest td_rfc1321_3 = { "abc", "900150983cd24fb0d6963f7d28e17f72" }; -struct td_digest td_rfc1321_4 = { "message digest", "f96b697d7cb7938d525a2f31aaf161d0" }; -struct td_digest td_rfc1321_5 = { "abcdefghijklmnopqrstuvwxyz", "c3fcd3d76192e4007dfb496cca67e13b" }; -struct td_digest td_rfc1321_6 = { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", "d174ab98d277d9f5a5611c2c9f419d9f" }; -struct td_digest td_rfc1321_7 = { "12345678901234567890123456789012345678901234567890123456789012345678901234567890", "57edf4a22be3c955ac49da2e2107b67a" }; - -struct td_hmac { - gchar *key; - int key_len; - gchar *data; - int data_len; - gchar *expected_output; -}; - -struct td_hmac td_hmac_null_key = { - NULL, 50, - "", 0, - "" -}; -struct td_hmac td_hmac_negative_key_length = { - "", -1, - "", 0, - "" -}; -struct td_hmac td_hmac_null_data = { - "", 0, - NULL, 50, - "" -}; -struct td_hmac td_hmac_negative_data_length = { - "abc", 3, - "", -1, - "", -}; - -struct td_hmac td_rfc2202_1 = { - "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 16, - "Hi There", 8, - "9294727a3638bb1c13f48ef8158bfc9d" -}; -struct td_hmac td_rfc2202_2 = { - "Jefe", 4, - "what do ya want for nothing?", 28, - "750c783e6ab0b503eaa86e310a5db738" -}; -struct td_hmac td_rfc2202_3 = { - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 16, - "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50, - "56be34521d144c88dbb8c733f0e8b3f6" -}; -struct td_hmac td_rfc2202_4 = { - "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25, - "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", 50, - "697eaf0aca3a3aea3a75164746ffaa79" -}; -struct td_hmac td_rfc2202_5 = { - "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 16, - "Test With Truncation", 20, - "56461ef2342edc00f9bab995690efd4c" -}; -struct td_hmac td_rfc2202_6 = { - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80, - "Test Using Larger Than Block-Size Key - Hash Key First", 54, - "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd" -}; -struct td_hmac td_rfc2202_7 = { - "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80, - "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", 73, - "6f630fad67cda0ee1fb1f562db3aa53e" -}; - -static void -test_md5_hex_digest_null_input(void) -{ - char outbuf[33]; - - outbuf[0] = '\0'; - - if (!g_test_undefined()) - return; - - if (g_test_subprocess()) { - md5_hex_digest(outbuf, NULL); - return; - } - - g_test_trap_subprocess(NULL, 0, 0); - g_test_trap_assert_failed(); - g_test_trap_assert_stderr("*CRITICAL*md5_hex_digest: assertion*failed*"); - g_assert_cmpint(outbuf[0], ==, '\0'); -} - -static void -test_md5_hex_digest_null_output(void) -{ - if (!g_test_undefined()) - return; - - if (g_test_subprocess()) { - md5_hex_digest(NULL, ""); - return; - } - - g_test_trap_subprocess(NULL, 0, 0); - g_test_trap_assert_failed(); - g_test_trap_assert_stderr("*CRITICAL*md5_hex_digest: assertion*failed*"); -} - -static void -test_md5_hex_digest(gconstpointer user_data) -{ - char outbuf[33]; - struct td_digest *data = (struct td_digest *)user_data; - - md5_hex_digest(outbuf, data->input); - - g_assert_cmpint(outbuf[32], ==, '\0'); - g_assert_cmpstr(outbuf, ==, data->expected_output); -} - -static void -test_md5_hex_hmac_null_output(void) -{ - if (!g_test_undefined()) - return; - - if (g_test_subprocess()) { - md5_hex_hmac(NULL, "", 0, "", 0); - return; - } - - g_test_trap_subprocess(NULL, 0, 0); - g_test_trap_assert_failed(); - g_test_trap_assert_stderr("*CRITICAL*md5_hex_hmac: assertion*failed*"); -} - -/* We expect all test cases using this function to fail with - * failed assertion */ -static void -test_md5_hex_hmac_fails(gconstpointer user_data) -{ - char outbuf[33]; - struct td_hmac *data = (struct td_hmac *)user_data; - - if (!g_test_undefined()) - return; - - if (g_test_subprocess()) { - md5_hex_hmac(outbuf, - data->data, data->data_len, - data->key, data->key_len); - return; - } - - g_test_trap_subprocess(NULL, 0, 0); - g_test_trap_assert_failed(); - g_test_trap_assert_stderr("*CRITICAL*md5_hex_hmac: assertion*failed*"); -} - -static void -test_md5_hex_hmac(gconstpointer user_data) -{ - char outbuf[33]; - struct td_hmac *data = (struct td_hmac *)user_data; - - md5_hex_hmac(outbuf, - data->data, data->data_len, - data->key, data->key_len); - - g_assert_cmpint(outbuf[32], ==, '\0'); - g_assert_cmpstr(outbuf, ==, data->expected_output); -} - - -int -main(int argc, char *argv[]) -{ - g_test_init(&argc, &argv, NULL); - - g_test_add_func("/common/md5/hex_digest/null_input", - test_md5_hex_digest_null_input); - g_test_add_func("/common/md5/hex_digest/null_output", - test_md5_hex_digest_null_output); - - g_test_add_data_func("/common/md5/hex_digest/rfc1321_1", - &td_rfc1321_1, - test_md5_hex_digest); - g_test_add_data_func("/common/md5/hex_digest/rfc1321_2", - &td_rfc1321_2, - test_md5_hex_digest); - g_test_add_data_func("/common/md5/hex_digest/rfc1321_3", - &td_rfc1321_3, - test_md5_hex_digest); - g_test_add_data_func("/common/md5/hex_digest/rfc1321_4", - &td_rfc1321_4, - test_md5_hex_digest); - g_test_add_data_func("/common/md5/hex_digest/rfc1321_5", - &td_rfc1321_5, - test_md5_hex_digest); - g_test_add_data_func("/common/md5/hex_digest/rfc1321_6", - &td_rfc1321_6, - test_md5_hex_digest); - g_test_add_data_func("/common/md5/hex_digest/rfc1321_7", - &td_rfc1321_7, - test_md5_hex_digest); - - g_test_add_data_func("/common/md5/hex_hmac/null_key", - &td_hmac_null_key, - test_md5_hex_hmac_fails); - g_test_add_data_func("/common/md5/hex_hmac/negative_key_length", - &td_hmac_negative_key_length, - test_md5_hex_hmac_fails); - g_test_add_data_func("/common/md5/hex_hmac/null_data", - &td_hmac_null_data, - test_md5_hex_hmac_fails); - g_test_add_data_func("/common/md5/hex_hmac/negative_data_length", - &td_hmac_negative_data_length, - test_md5_hex_hmac_fails); - g_test_add_func("/common/md5/hex_hmac/null_output", - test_md5_hex_hmac_null_output); - - g_test_add_data_func("/common/md5/hex_hmac/rfc2202_1", - &td_rfc2202_1, - test_md5_hex_hmac); - g_test_add_data_func("/common/md5/hex_hmac/rfc2202_2", - &td_rfc2202_2, - test_md5_hex_hmac); - g_test_add_data_func("/common/md5/hex_hmac/rfc2202_3", - &td_rfc2202_3, - test_md5_hex_hmac); - g_test_add_data_func("/common/md5/hex_hmac/rfc2202_4", - &td_rfc2202_4, - test_md5_hex_hmac); - g_test_add_data_func("/common/md5/hex_hmac/rfc2202_5", - &td_rfc2202_5, - test_md5_hex_hmac); - g_test_add_data_func("/common/md5/hex_hmac/rfc2202_6", - &td_rfc2202_6, - test_md5_hex_hmac); - g_test_add_data_func("/common/md5/hex_hmac/rfc2202_7", - &td_rfc2202_7, - test_md5_hex_hmac); - - return g_test_run(); -} diff --git a/src/imap.c b/src/imap.c @@ -53,7 +53,6 @@ #include "procheader.h" #include "prefs_account.h" #include "codeconv.h" -#include "md5.h" #include "utils.h" #include "prefs_common.h" #include "inputdialog.h" @@ -881,12 +880,6 @@ static gint imap_auth(IMAPSession *session, const gchar *user, const gchar *pass case IMAP_AUTH_ANON: ok = imap_cmd_login(session, user, pass, "ANONYMOUS"); break; - case IMAP_AUTH_CRAM_MD5: - ok = imap_cmd_login(session, user, pass, "CRAM-MD5"); - break; - case IMAP_AUTH_DIGEST_MD5: - ok = imap_cmd_login(session, user, pass, "DIGEST-MD5"); - break; case IMAP_AUTH_SCRAM_SHA1: ok = imap_cmd_login(session, user, pass, "SCRAM-SHA-1"); break; @@ -922,8 +915,6 @@ static gint imap_auth(IMAPSession *session, const gchar *user, const gchar *pass default: debug_print("capabilities:\n" "\t ANONYMOUS %d\n" - "\t CRAM-MD5 %d\n" - "\t DIGEST-MD5 %d\n" "\t SCRAM-SHA-1 %d\n" "\t SCRAM-SHA-224 %d\n" "\t SCRAM-SHA-256 %d\n" @@ -936,8 +927,6 @@ static gint imap_auth(IMAPSession *session, const gchar *user, const gchar *pass "\t LOGIN %d\n" "\t GSSAPI %d\n", imap_has_capability(session, "ANONYMOUS"), - imap_has_capability(session, "CRAM-MD5"), - imap_has_capability(session, "DIGEST-MD5"), imap_has_capability(session, "SCRAM-SHA-1"), imap_has_capability(session, "SCRAM-SHA-224"), imap_has_capability(session, "SCRAM-SHA-256"), @@ -949,10 +938,6 @@ static gint imap_auth(IMAPSession *session, const gchar *user, const gchar *pass #endif imap_has_capability(session, "LOGIN"), imap_has_capability(session, "GSSAPI")); - if (imap_has_capability(session, "CRAM-MD5")) - ok = imap_cmd_login(session, user, pass, "CRAM-MD5"); - if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "DIGEST-MD5")) - ok = imap_cmd_login(session, user, pass, "DIGEST-MD5"); if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "SCRAM-SHA-512")) ok = imap_cmd_login(session, user, pass, "SCRAM-SHA-512"); if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "SCRAM-SHA-384")) @@ -980,18 +965,6 @@ static gint imap_auth(IMAPSession *session, const gchar *user, const gchar *pass if (ok == MAILIMAP_NO_ERROR) session->authenticated = TRUE; else { - if (type == IMAP_AUTH_CRAM_MD5) { - ext_info = _("\n\nCRAM-MD5 logins only work if libetpan has been " - "compiled with SASL support and the " - "CRAM-MD5 SASL plugin is installed."); - } - - if (type == IMAP_AUTH_DIGEST_MD5) { - ext_info = _("\n\nDIGEST-MD5 logins only work if libetpan has been " - "compiled with SASL support and the " - "DIGEST-MD5 SASL plugin is installed."); - } - if (type == IMAP_AUTH_SCRAM_SHA1) { ext_info = _("\n\nSCRAM-SHA-1 logins only work if libetpan has been " "compiled with SASL support and the " diff --git a/src/inc.c b/src/inc.c @@ -974,7 +974,6 @@ static void inc_progress_dialog_set_label(IncProgressDialog *inc_dialog, break; case POP3_GETAUTH_USER: case POP3_GETAUTH_PASS: - case POP3_GETAUTH_APOP: progress_dialog_set_label(dialog, _("Authenticating...")); statusbar_pop_all(); statusbar_print_all(_("Retrieving messages from %s (%s)..."), @@ -1130,7 +1129,6 @@ static gint inc_recv_message(Session *session, const gchar *msg, gpointer data) switch (POP3_SESSION(session)->state) { case POP3_GETAUTH_USER: case POP3_GETAUTH_PASS: - case POP3_GETAUTH_APOP: case POP3_GETRANGE_STAT: case POP3_GETRANGE_LAST: case POP3_GETRANGE_UIDL: diff --git a/src/main.c b/src/main.c @@ -74,7 +74,6 @@ #include "inc.h" #include "imap.h" #include "send_message.h" -#include "md5.h" #include "import.h" #include "manage_window.h" #include "alertpanel.h" @@ -1294,47 +1293,23 @@ gboolean claws_is_starting(void) return sc_starting; } -#ifdef G_OS_UNIX gchar *claws_get_socket_name(void) { - static gchar *filename = NULL; - gchar *socket_dir = NULL; - gchar md5sum[33]; - - if (filename == NULL) { - GStatBuf st; - gint stat_ok; - - socket_dir = g_strdup_printf("%s%cclaws-mail", - g_get_user_runtime_dir(), G_DIR_SEPARATOR); - stat_ok = g_stat(socket_dir, &st); - if (stat_ok < 0 && errno != ENOENT) { - g_print("Error stat'ing socket_dir %s: %s\n", - socket_dir, g_strerror(errno)); - } else if (stat_ok == 0 && S_ISSOCK(st.st_mode)) { - /* old versions used a sock in $TMPDIR/claws-mail-$UID */ - debug_print("Using legacy socket %s\n", socket_dir); - filename = g_strdup(socket_dir); - g_free(socket_dir); - return filename; - } - - if (!is_dir_exist(socket_dir) && make_dir(socket_dir) < 0) { - g_print("Error creating socket_dir %s: %s\n", - socket_dir, g_strerror(errno)); - } - - md5_hex_digest(md5sum, get_rc_dir()); - - filename = g_strdup_printf("%s%c%s", socket_dir, G_DIR_SEPARATOR, - md5sum); - g_free(socket_dir); - debug_print("Using control socket %s\n", filename); + char *dir = g_strdup_printf("%s/claws-mail", g_get_user_runtime_dir()); + stat sb; + int ok = g_stat(socket_dir, &sb); + if (ok < 0 && errno != ENOENT) { + g_print("stat %s: %s\n", dir, g_strerror(errno)); } + if (!is_dir_exist(dir) && make_dir(dir) < 0) { + g_print("create %s: %s\n", dir, g_strerror(errno)); + } + char *filename = g_strdup_printf("%s/control.sock", dir) + g_free(dir); + debug_print("Using control socket %s\n", filename); return filename; } -#endif static gint prohibit_duplicate_launch(int *argc, char ***argv) { diff --git a/src/oauth2.c b/src/oauth2.c @@ -38,7 +38,6 @@ #include "imap.h" #include "oauth2.h" -#include "md5.h" #include "utils.h" #include "log.h" #include "time.h" diff --git a/src/pop.c b/src/pop.c @@ -32,7 +32,6 @@ #include <errno.h> #include "pop.h" -#include "md5.h" #include "partial_download.h" #include "prefs_account.h" #include "utils.h" @@ -49,7 +48,6 @@ static gint pop3_greeting_recv (Pop3Session *session, const gchar *msg); static gint pop3_getauth_user_send (Pop3Session *session); static gint pop3_getauth_pass_send (Pop3Session *session); -static gint pop3_getauth_apop_send (Pop3Session *session); #ifdef USE_GNUTLS static gint pop3_stls_send (Pop3Session *session); static gint pop3_stls_recv (Pop3Session *session); @@ -141,46 +139,6 @@ static gint pop3_getauth_pass_send(Pop3Session *session) return PS_SUCCESS; } -static gint pop3_getauth_apop_send(Pop3Session *session) -{ - gchar *start, *end; - gchar *apop_str; - gchar md5sum[33]; - - cm_return_val_if_fail(session->user != NULL, -1); - cm_return_val_if_fail(session->pass != NULL, -1); - - session->state = POP3_GETAUTH_APOP; - - if ((start = strchr(session->greeting, '<')) == NULL) { - log_error(LOG_PROTOCOL, _("Required APOP timestamp not found " - "in greeting\n")); - session->error_val = PS_PROTOCOL; - return -1; - } - - if ((end = strchr(start, '>')) == NULL || end == start + 1) { - log_error(LOG_PROTOCOL, _("Timestamp syntax error in greeting\n")); - session->error_val = PS_PROTOCOL; - return -1; - } - *(end + 1) = '\0'; - - if (!is_ascii_str(start)) { - log_error(LOG_PROTOCOL, _("Timestamp syntax error in greeting (not ASCII)\n")); - session->error_val = PS_PROTOCOL; - return -1; - } - - apop_str = g_strconcat(start, session->pass, NULL); - md5_hex_digest(md5sum, apop_str); - g_free(apop_str); - - pop3_gen_send(session, "APOP %s %s", session->user, md5sum); - - return PS_SUCCESS; -} - #ifdef USE_OAUTH2 static gint pop3_getauth_oauth2_send_generic(Pop3Session *session) { @@ -461,14 +419,6 @@ static gint pop3_retr_recv(Pop3Session *session, const gchar *data, guint len) return PS_SUCCESS; } -static gint pop3_top_send(Pop3Session *session, gint max_size) -{ - gint num_lines = (max_size*1024)/82; /* consider lines to be 80 chars */ - session->state = POP3_TOP; - pop3_gen_send(session, "TOP %d %d", session->cur_msg, num_lines); - return PS_SUCCESS; -} - static gint pop3_top_recv(Pop3Session *session, const gchar *data, guint len) { gchar *file; @@ -954,7 +904,6 @@ static Pop3ErrorValue pop3_ok(Pop3Session *session, const gchar *msg) #endif case POP3_GETAUTH_USER: case POP3_GETAUTH_PASS: - case POP3_GETAUTH_APOP: log_error(LOG_PROTOCOL, _("error occurred on authentication\n")); ok = PS_AUTHFAIL; break; @@ -1020,17 +969,12 @@ static gint pop3_session_recv_msg(Session *session, const gchar *msg) val = pop3_getauth_oauth2_send(pop3_session); else #endif - if (pop3_session->ac_prefs->use_pop_auth && pop3_session->ac_prefs->pop_auth_type == POPAUTH_APOP) - val = pop3_getauth_apop_send(pop3_session); - else val = pop3_getauth_user_send(pop3_session); break; #ifdef USE_GNUTLS case POP3_STLS: if (pop3_stls_recv(pop3_session) != PS_SUCCESS) return -1; - if (pop3_session->ac_prefs->use_pop_auth && pop3_session->ac_prefs->pop_auth_type == POPAUTH_APOP) - val = pop3_getauth_apop_send(pop3_session); #ifdef USE_OAUTH2 else if (pop3_session->ac_prefs->use_pop_auth && pop3_session->ac_prefs->pop_auth_type == POPAUTH_OAUTH2) val = pop3_getauth_oauth2_send(pop3_session); @@ -1048,7 +992,6 @@ static gint pop3_session_recv_msg(Session *session, const gchar *msg) break; #endif case POP3_GETAUTH_PASS: - case POP3_GETAUTH_APOP: #ifdef USE_OAUTH2 case POP3_GETAUTH_OAUTH2: #endif diff --git a/src/pop.h b/src/pop.h @@ -52,7 +52,6 @@ typedef enum { POP3_GETAUTH_USER, POP3_GETAUTH_USER_PHASE2, POP3_GETAUTH_PASS, - POP3_GETAUTH_APOP, POP3_GETAUTH_OAUTH2, POP3_GETRANGE_STAT, POP3_GETRANGE_LAST, diff --git a/src/prefs_account.c b/src/prefs_account.c @@ -1473,7 +1473,6 @@ static void receive_create_widget_func(PrefsPage * _page, COMBOBOX_ADD (menu2, _("Select"), 0); COMBOBOX_ADD (menu2, NULL, 0); - COMBOBOX_ADD (menu2, "APOP", POPAUTH_APOP); COMBOBOX_ADD (menu2, "OAuth2", POPAUTH_OAUTH2); #ifndef USE_OAUTH2 gtk_list_store_set(menu2, &iter, COMBOBOX_SENS, FALSE, -1); @@ -1587,10 +1586,8 @@ static void receive_create_widget_func(PrefsPage * _page, COMBOBOX_ADD (menu, _("Automatic"), 0); COMBOBOX_ADD (menu, NULL, 0); COMBOBOX_ADD (menu, _("Plain text"), IMAP_AUTH_PLAINTEXT); - COMBOBOX_ADD (menu, "CRAM-MD5", IMAP_AUTH_CRAM_MD5); COMBOBOX_ADD (menu, "ANONYMOUS", IMAP_AUTH_ANON); COMBOBOX_ADD (menu, "GSSAPI", IMAP_AUTH_GSSAPI); - COMBOBOX_ADD (menu, "DIGEST-MD5", IMAP_AUTH_DIGEST_MD5); COMBOBOX_ADD (menu, "SCRAM-SHA-1", IMAP_AUTH_SCRAM_SHA1); COMBOBOX_ADD (menu, "SCRAM-SHA-224", IMAP_AUTH_SCRAM_SHA224); COMBOBOX_ADD (menu, "SCRAM-SHA-256", IMAP_AUTH_SCRAM_SHA256); @@ -1859,12 +1856,10 @@ static void send_create_widget_func(PrefsPage * _page, COMBOBOX_ADD (menu, NULL, 0); COMBOBOX_ADD (menu, "PLAIN", SMTPAUTH_PLAIN); COMBOBOX_ADD (menu, "LOGIN", SMTPAUTH_LOGIN); - COMBOBOX_ADD (menu, "CRAM-MD5", SMTPAUTH_CRAM_MD5); COMBOBOX_ADD (menu, "OAUTH2", SMTPAUTH_OAUTH2); #ifndef USE_OAUTH2 gtk_list_store_set(menu, &iter, COMBOBOX_SENS, FALSE, -1); #endif - COMBOBOX_ADD (menu, "DIGEST-MD5", SMTPAUTH_DIGEST_MD5); gtk_list_store_set(menu, &iter, COMBOBOX_SENS, FALSE, -1); PACK_SPACER(vbox4, vbox_spc, VSPACING_NARROW_2); diff --git a/src/prefs_account.h b/src/prefs_account.h @@ -43,7 +43,6 @@ typedef enum { typedef enum { - POPAUTH_APOP = 1 << 0, POPAUTH_OAUTH2 = 1 << 1 } POPAuthType;