From c9fc05a6bfdfd50231d58fe572e524108089c98d Mon Sep 17 00:00:00 2001 From: Eduardo Chappa Date: Sun, 26 Jan 2020 02:34:43 -0700 Subject: * Add support for the OAUTHBEARER authentication method in Gmail. Thanks to Alexander Perlis for suggesting it and explaining how the method works. --- alpine/imap.c | 13 +++++++------ alpine/imap.h | 2 +- imap/src/c-client/auth_ext.c | 5 +++-- imap/src/c-client/auth_gss.c | 5 +++-- imap/src/c-client/auth_log.c | 5 +++-- imap/src/c-client/auth_md5.c | 6 +++--- imap/src/c-client/auth_ntl.c | 6 +++--- imap/src/c-client/auth_oa2.c | 26 +++++++++++++++++--------- imap/src/c-client/auth_pla.c | 5 +++-- imap/src/c-client/imap4r1.c | 6 +++--- imap/src/c-client/mail.h | 13 +++++++------ imap/src/c-client/nntp.c | 4 ++-- imap/src/c-client/pop3.c | 3 ++- imap/src/c-client/smtp.c | 4 ++-- imap/src/osdep/nt/makefile.nt | 5 +++-- imap/src/osdep/nt/makefile.ntk | 6 +++--- imap/src/osdep/nt/makefile.w2k | 6 +++--- imap/src/osdep/unix/Makefile | 4 ++-- pith/pine.hlp | 13 ++++++++----- 19 files changed, 78 insertions(+), 59 deletions(-) diff --git a/alpine/imap.c b/alpine/imap.c index c5fd190..ce5626b 100644 --- a/alpine/imap.c +++ b/alpine/imap.c @@ -199,7 +199,7 @@ typedef struct auth_code_s { } AUTH_CODE_S; char * -oauth2_get_access_code(char *url, OAUTH2_S *oauth2, int *tryanother) +oauth2_get_access_code(char *url, char *method, OAUTH2_S *oauth2, int *tryanother) { char tmp[MAILTMPLEN]; char *code; @@ -218,7 +218,7 @@ oauth2_get_access_code(char *url, OAUTH2_S *oauth2, int *tryanother) so_puts(in_store, "

"); sprintf(tmp, _("

Auhtorizing Alpine Access to %s Email Services
"), oauth2->name); so_puts(in_store, tmp); - sprintf(tmp, _("

Alpine is attempting to log you into your %s account, using the XOAUTH2 method."), oauth2->name), + sprintf(tmp, _("

Alpine is attempting to log you into your %s account, using the %s method."), oauth2->name, method), so_puts(in_store, tmp); so_puts(in_store, _(" In order to do that, Alpine needs to open the following URL:")); @@ -332,7 +332,7 @@ try_wantto: return code; } -void mm_login_oauth2(NETMBX *, char *, OAUTH2_S *, long int, char *, char *); +void mm_login_oauth2(NETMBX *, char *, char *, OAUTH2_S *, long int, char *, char *); /* The purpose of this function is to report to c-client the values of the * different tokens and codes so that c-client can try to log in the user @@ -375,7 +375,8 @@ void mm_login_oauth2(NETMBX *, char *, OAUTH2_S *, long int, char *, char *); * "authenticator_method separator" code as above. */ void -mm_login_oauth2(NETMBX *mb, char *user, OAUTH2_S *login, long int trial, +mm_login_oauth2(NETMBX *mb, char *user, char *method, + OAUTH2_S *login, long int trial, char *usethisprompt, char *altuserforcache) { char *token, tmp[MAILTMPLEN]; @@ -871,8 +872,8 @@ mm_login_method_work(NETMBX *mb, char *user, void *login, long int trial, { if(method == NULL) return; - if(strucmp(method, OA2NAME) == 0) - mm_login_oauth2(mb, user, (OAUTH2_S *) login, trial, usethisprompt, altuserforcache); + if(strucmp(method, OA2NAME) == 0 || strucmp(method, BEARERNAME) == 0) + mm_login_oauth2(mb, user, method, (OAUTH2_S *) login, trial, usethisprompt, altuserforcache); } void diff --git a/alpine/imap.h b/alpine/imap.h index e2bc546..3af8825 100644 --- a/alpine/imap.h +++ b/alpine/imap.h @@ -31,7 +31,7 @@ char *pine_newsrcquery(MAILSTREAM *, char *, char *); int url_local_certdetails(char *); void pine_sslfailure(char *, char *, unsigned long); void mm_expunged_current(long unsigned int); -char *oauth2_get_access_code(char *, OAUTH2_S *, int *); +char *oauth2_get_access_code(char *, char *, OAUTH2_S *, int *); #ifdef LOCAL_PASSWD_CACHE int get_passfile_passwd(char *, char **, char *, STRLIST_S *, int); diff --git a/imap/src/c-client/auth_ext.c b/imap/src/c-client/auth_ext.c index c8c5f4a..b85f6bb 100644 --- a/imap/src/c-client/auth_ext.c +++ b/imap/src/c-client/auth_ext.c @@ -1,4 +1,5 @@ /* ======================================================================== + * Copyright 2020 Eduardo Chappa * Copyright 1988-2006 University of Washington * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -27,7 +28,7 @@ */ long auth_external_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream, unsigned long port, unsigned long *trial,char *user); char *auth_external_server (authresponse_t responder,int argc,char *argv[]); @@ -52,7 +53,7 @@ AUTHENTICATOR auth_ext = { /* secure, has full auth, hidden */ */ long auth_external_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream, unsigned long port, unsigned long *trial,char *user) { void *challenge; diff --git a/imap/src/c-client/auth_gss.c b/imap/src/c-client/auth_gss.c index 66be8cc..c6cc907 100644 --- a/imap/src/c-client/auth_gss.c +++ b/imap/src/c-client/auth_gss.c @@ -1,4 +1,5 @@ /* ======================================================================== + * Copyright 2020 Eduardo Chappa * Copyright 1988-2006 University of Washington * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,7 +30,7 @@ long auth_gssapi_valid (void); long auth_gssapi_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream, unsigned long port, unsigned long *trial,char *user); long auth_gssapi_client_work (authchallenge_t challenger,gss_buffer_desc chal, authrespond_t responder,char *service,NETMBX *mb, @@ -89,7 +90,7 @@ long auth_gssapi_valid (void) */ long auth_gssapi_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream,unsigned long port, unsigned long *trial,char *user) { gss_buffer_desc chal; diff --git a/imap/src/c-client/auth_log.c b/imap/src/c-client/auth_log.c index a54d636..9c8d76a 100644 --- a/imap/src/c-client/auth_log.c +++ b/imap/src/c-client/auth_log.c @@ -1,4 +1,5 @@ /* ======================================================================== + * Copyright 2020 Eduardo Chappa * Copyright 1988-2006 University of Washington * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -27,7 +28,7 @@ */ long auth_login_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream, unsigned long port, unsigned long *trial,char *user); char *auth_login_server (authresponse_t responder,int argc,char *argv[]); @@ -55,7 +56,7 @@ AUTHENTICATOR auth_log = { */ long auth_login_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream, unsigned long port, unsigned long *trial,char *user) { char *pwd = NIL; diff --git a/imap/src/c-client/auth_md5.c b/imap/src/c-client/auth_md5.c index d12fd29..fea9673 100644 --- a/imap/src/c-client/auth_md5.c +++ b/imap/src/c-client/auth_md5.c @@ -1,5 +1,5 @@ /* - * Copyright 2016 - Eduardo Chappa + * Copyright 2016 - 2010 Eduardo Chappa * Last Modified: August 11, 2016 */ /* ======================================================================== @@ -45,7 +45,7 @@ typedef struct { long auth_md5_valid (void); long auth_md5_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream, unsigned long port, unsigned long *trial,char *user); char *auth_md5_server (authresponse_t responder,int argc,char *argv[]); char *auth_md5_pwd (char *user); @@ -96,7 +96,7 @@ long auth_md5_valid (void) */ long auth_md5_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream, unsigned long port, unsigned long *trial,char *user) { char *pwd = NIL,hshbuf[2*MD5DIGLEN + 1]; diff --git a/imap/src/c-client/auth_ntl.c b/imap/src/c-client/auth_ntl.c index 52ae904..481ca0f 100644 --- a/imap/src/c-client/auth_ntl.c +++ b/imap/src/c-client/auth_ntl.c @@ -1,5 +1,5 @@ /* ======================================================================== - * Copyright 2018 Eduardo Chappa + * Copyright 2018-2020 Eduardo Chappa * Copyright 2015 Imagination Technologies * Copyright 1988-2008 University of Washington * @@ -25,7 +25,7 @@ #include long auth_ntlm_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream, unsigned long port, unsigned long *trial,char *user); AUTHENTICATOR auth_ntl = { /* secure, has full auth, hidden */ @@ -49,7 +49,7 @@ AUTHENTICATOR auth_ntl = { /* secure, has full auth, hidden */ */ long auth_ntlm_client (authchallenge_t challenger, authrespond_t responder, - char *service, NETMBX *mb, void *stream, + char *service, NETMBX *mb, void *stream, unsigned long port, unsigned long *trial, char *user) { tSmbNtlmAuthChallenge *challenge; diff --git a/imap/src/c-client/auth_oa2.c b/imap/src/c-client/auth_oa2.c index 7ac1cb2..bda9dd9 100644 --- a/imap/src/c-client/auth_oa2.c +++ b/imap/src/c-client/auth_oa2.c @@ -1,5 +1,5 @@ /* ======================================================================== - * Copyright 2018 Eduardo Chappa + * Copyright 2018 - 2020 Eduardo Chappa * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -12,12 +12,12 @@ */ long auth_oauth2_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream, unsigned long port, unsigned long *trial,char *user); -void mm_login_oauth2_c_client_method (NETMBX *, char *, OAUTH2_S *, unsigned long, int *); - -char *oauth2_generate_state(void); +#ifndef HTTP_OAUTH2_INCLUDED +void mm_login_oauth2_c_client_method (NETMBX *, char *, char *, OAUTH2_S *, unsigned long, int *); +#endif /* HTTP_OAUTH2_INCLUDED */ AUTHENTICATOR auth_oa2 = { AU_HIDE, /* hidden */ @@ -31,6 +31,9 @@ AUTHENTICATOR auth_oa2 = { #define OAUTH2_USER "user=" #define OAUTH2_BEARER "auth=Bearer " +#ifndef OAUTH2_GENERATE_STATE +#define OAUTH2_GENERATE_STATE +char *oauth2_generate_state(void); /* we generate something like a guid, but not care about * anything, but that it is really random. */ @@ -57,6 +60,8 @@ char *oauth2_generate_state(void) rv[36] = '\0'; return cpystr(rv); } +#endif /* OAUTH2_GENERATE_STATE */ + /* Client authenticator @@ -71,7 +76,7 @@ char *oauth2_generate_state(void) */ long auth_oauth2_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream, unsigned long port, unsigned long *trial,char *user) { char *u; @@ -145,7 +150,7 @@ long auth_oauth2_client (authchallenge_t challenger,authrespond_t responder, if(oauth2.param[OA2_RefreshToken].value) RefreshToken = cpystr(oauth2.param[OA2_RefreshToken].value); - mm_login_oauth2_c_client_method (mb, user, &oauth2, *trial, &tryanother); + mm_login_oauth2_c_client_method (mb, user, OA2NAME, &oauth2, *trial, &tryanother); /* * if we got an access token from the c_client_method call, @@ -207,6 +212,8 @@ long auth_oauth2_client (authchallenge_t challenger,authrespond_t responder, return ret; } +#ifndef HTTP_OAUTH2_INCLUDED +#define HTTP_OAUTH2_INCLUDED /* * The code above is enough to implement XOAUTH2, all one needs is the username * and access token and give it to the function above. However, normal users cannot @@ -219,7 +226,7 @@ long auth_oauth2_client (authchallenge_t challenger,authrespond_t responder, #include "json.h" void -mm_login_oauth2_c_client_method (NETMBX *mb, char *user, +mm_login_oauth2_c_client_method (NETMBX *mb, char *user, char *method, OAUTH2_S *oauth2, unsigned long trial, int *tryanother) { int i; @@ -232,7 +239,7 @@ mm_login_oauth2_c_client_method (NETMBX *mb, char *user, oauth2clientinfo_t ogci = (oauth2clientinfo_t) mail_parameters (NIL, GET_OA2CLIENTINFO, NIL); - if(ogci) (*ogci)(oauth2->name, &oauth2->param[OA2_Id].value, + if(ogci) (*ogci)(oauth2->name, method, &oauth2->param[OA2_Id].value, &oauth2->param[OA2_Secret].value); } @@ -359,3 +366,4 @@ mm_login_oauth2_c_client_method (NETMBX *mb, char *user, return; } } +#endif /* HTTP_OAUTH2_INCLUDED */ diff --git a/imap/src/c-client/auth_pla.c b/imap/src/c-client/auth_pla.c index 7888b23..6b58948 100644 --- a/imap/src/c-client/auth_pla.c +++ b/imap/src/c-client/auth_pla.c @@ -1,4 +1,5 @@ /* ======================================================================== + * Copyright 2020 Eduardo Chappa * Copyright 1988-2006 University of Washington * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -27,7 +28,7 @@ */ long auth_plain_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream, unsigned long port, unsigned long *trial,char *user); char *auth_plain_server (authresponse_t responder,int argc,char *argv[]); @@ -52,7 +53,7 @@ AUTHENTICATOR auth_pla = { */ long auth_plain_client (authchallenge_t challenger,authrespond_t responder, - char *service,NETMBX *mb,void *stream, + char *service,NETMBX *mb,void *stream, unsigned long port, unsigned long *trial,char *user) { char *u, *pwd = NIL; diff --git a/imap/src/c-client/imap4r1.c b/imap/src/c-client/imap4r1.c index 97a43a8..86354d4 100644 --- a/imap/src/c-client/imap4r1.c +++ b/imap/src/c-client/imap4r1.c @@ -1,7 +1,7 @@ /* - * Copyright 2016-2018 Eduardo Chappa + * Copyright 2016-2020 Eduardo Chappa * - * Last Edited: May 5, 2018 Eduardo Chappa + * Last Edited: Jan 26, 2020 Eduardo Chappa * */ /* ======================================================================== @@ -1180,7 +1180,7 @@ long imap_auth (MAILSTREAM *stream,NETMBX *mb,char *tmp,char *usr) /* hide client authentication responses */ if (!(at->flags & AU_SECURE)) LOCAL->sensitive = T; ok = (*at->client) (imap_challenge,imap_response,"imap",mb,stream, - &trial,usr); + net_port(LOCAL->netstream),&trial,usr); LOCAL->sensitive = NIL; /* unhide */ /* make sure have a response */ if (!(reply = &LOCAL->reply)->tag) diff --git a/imap/src/c-client/mail.h b/imap/src/c-client/mail.h index 7ca9c28..e6c0f69 100644 --- a/imap/src/c-client/mail.h +++ b/imap/src/c-client/mail.h @@ -1,7 +1,7 @@ /* * Copyright 2016-2020 Eduardo Chappa * - * Last Edited: July 21, 2018 Eduardo Chappa + * Last Edited: January 26, 2020 Eduardo Chappa * */ /* ======================================================================== @@ -1379,7 +1379,7 @@ typedef long (*authrespond_t) (void *stream,char *s,unsigned long size); typedef long (*authcheck_t) (void); typedef long (*authclient_t) (authchallenge_t challenger, authrespond_t responder,char *service,NETMBX *mb, - void *s,unsigned long *trial,char *user); + void *s, unsigned long port, unsigned long *trial,char *user); typedef char *(*authresponse_t) (void *challenge,unsigned long clen, unsigned long *rlen); typedef char *(*authserver_t) (authresponse_t responder,int argc,char *argv[]); @@ -1911,9 +1911,10 @@ int PSOUT (char *s); int PSOUTR (SIZEDTEXT *s); int PFLUSH (void); -/* XOAUTH Client-Side Support */ +/* XOAUTH2 and AUTHBEARER Client-Side Support */ #define OA2NAME "XOAUTH2" +#define BEARERNAME "OAUTHBEARER" #define OAUTH2_MAX_EQUIV (2) #define OAUTH2_TOT_EQUIV (OAUTH2_MAX_EQUIV + 2) @@ -1941,8 +1942,8 @@ typedef struct OA2_serverparam_s { } OAUTH2_SERVER_METHOD_S; typedef struct oauth2_s { - unsigned char *name; /* provider name */ - char *host[OAUTH2_TOT_EQUIV]; /* servers for which this data applies */ + unsigned char *name; /* provider name */ + char *host[OAUTH2_TOT_EQUIV]; /* servers for which this data applies */ OAUTH2_PARAM_S param[OA2_End]; /* parameters name and values for this server */ /* servers, methods and parameters to retrieve access code and tokens */ OAUTH2_SERVER_METHOD_S server_mthd[OA2_GetEnd]; @@ -1950,6 +1951,6 @@ typedef struct oauth2_s { unsigned long expiration; } OAUTH2_S; -typedef char *(*oauth2getaccesscode_t) (char *url, OAUTH2_S *, int *); +typedef char *(*oauth2getaccesscode_t) (char *, char *, OAUTH2_S *, int *); typedef void (*oauth2clientinfo_t)(char *name, char **id, char **secret); diff --git a/imap/src/c-client/nntp.c b/imap/src/c-client/nntp.c index 3fc2fe0..51d20b7 100644 --- a/imap/src/c-client/nntp.c +++ b/imap/src/c-client/nntp.c @@ -1,6 +1,6 @@ /* ======================================================================== + * Copyright 2019 - 2020 Eduardo Chappa * Copyright 2008-2011 Mark Crispin - * Copyright 2019 Eduardo Chappa * ======================================================================== */ @@ -2072,7 +2072,7 @@ long nntp_send_auth_work (SENDSTREAM *stream,NETMBX *mb,char *pwd,long flags) /* hide client authentication responses */ if (!(at->flags & AU_SECURE)) stream->sensitive = T; if ((*at->client) (nntp_challenge,nntp_response,"nntp",mb,stream, - &trial,usr)) { + net_port(stream->netstream), &trial,usr)) { if (stream->replycode == NNTPAUTHED) ret = LONGT; /* if main program requested cancellation */ else if (!trial) mm_log ("NNTP Authentication cancelled",ERROR); diff --git a/imap/src/c-client/pop3.c b/imap/src/c-client/pop3.c index 7ca07da..94df54f 100644 --- a/imap/src/c-client/pop3.c +++ b/imap/src/c-client/pop3.c @@ -1,4 +1,5 @@ /* ======================================================================== + * Copyright 2020 Eduardo Chappa * Copyright 2008-2011 Mark Crispin * ======================================================================== */ @@ -639,7 +640,7 @@ long pop3_auth (MAILSTREAM *stream,NETMBX *mb,char *pwd,char *usr) /* hide client authentication responses */ if (!(at->flags & AU_SECURE)) LOCAL->sensitive = T; if ((*at->client) (pop3_challenge,pop3_response,"pop",mb,stream, - &trial,usr) && LOCAL->response) { + net_port(LOCAL->netstream),&trial,usr) && LOCAL->response) { if (*LOCAL->response == '+') ret = LONGT; /* if main program requested cancellation */ else if (!trial) mm_log ("POP3 Authentication cancelled",ERROR); diff --git a/imap/src/c-client/smtp.c b/imap/src/c-client/smtp.c index d1c9a7c..96abd5f 100644 --- a/imap/src/c-client/smtp.c +++ b/imap/src/c-client/smtp.c @@ -1,5 +1,5 @@ /* ======================================================================== - * Copyright 2015-2018 Eduardo Chappa + * Copyright 2015-2020 Eduardo Chappa * Copyright 2008 Mark Crispin * ======================================================================== */ @@ -316,7 +316,7 @@ long smtp_auth (SENDSTREAM *stream,NETMBX *mb,char *tmp) /* hide client authentication responses */ if (!(at->flags & AU_SECURE)) stream->sensitive = T; if ((*at->client) (smtp_challenge,smtp_response,"smtp",mb,stream, - &trial,usr)) { + net_port(stream->netstream),&trial,usr)) { if (stream->replycode == SMTPAUTHED) { ESMTP.auth = NIL; /* disable authenticators */ ret = LONGT; diff --git a/imap/src/osdep/nt/makefile.nt b/imap/src/osdep/nt/makefile.nt index bf6816c..83e7482 100644 --- a/imap/src/osdep/nt/makefile.nt +++ b/imap/src/osdep/nt/makefile.nt @@ -29,7 +29,7 @@ EXTRAAUTHENTICATORS = EXTRADRIVERS = EXTRACFLAGS = -AUTHENTICATORS = ext md5 pla oa2 log +AUTHENTICATORS = ext md5 pla bea oa2 log DRIVERS = imap nntp pop3 mbx mtx tenex unix CREATEDRIVER = mbx APPENDDRIVER = unix @@ -93,7 +93,8 @@ smtp.obj: mail.h smtp.h rfc822.h misc.h osdep.h smtp.c os_nt.obj: mail.h osdep.h env_nt.h fs.h ftl.h nl.h tcp.h tcp_nt.h yunchan.h \ os_nt.c fs_nt.c ftl_nt.c nl_nt.c env_nt.c ssl_nt.c ssl_none.c \ ip_nt.c tcp_nt.c yunchan.c pmatch.c write.c \ - mailfile.h auth_md5.c auth_ntl.c auth_pla.c auth_oa2.c auth_log.c + mailfile.h auth_md5.c auth_ntl.c auth_pla.c auth_bea.c auth_oa2.c \ + auth_log.c mbxnt.obj: mail.h misc.h osdep.h mbxnt.c diff --git a/imap/src/osdep/nt/makefile.ntk b/imap/src/osdep/nt/makefile.ntk index db04475..52b68d9 100644 --- a/imap/src/osdep/nt/makefile.ntk +++ b/imap/src/osdep/nt/makefile.ntk @@ -28,7 +28,7 @@ EXTRAAUTHENTICATORS = EXTRADRIVERS = EXTRACFLAGS = -AUTHENTICATORS = ext gss md5 pla oa2 log +AUTHENTICATORS = ext gss md5 pla bea oa2 log DRIVERS = imap nntp pop3 mbx mtx tenex unix CREATEDRIVER = mbx APPENDDRIVER = unix @@ -90,8 +90,8 @@ smtp.obj: mail.h smtp.h rfc822.h misc.h osdep.h smtp.c os_ntk.obj: mail.h osdep.h env_nt.h fs.h ftl.h nl.h tcp.h tcp_nt.h yunchan.h \ os_ntk.c fs_nt.c ftl_nt.c nl_nt.c env_nt.c ssl_nt.c ssl_none.c \ ip_nt.c tcp_nt.c yunchan.c pmatch.c write.c \ - mailfile.h auth_gss.c auth_md5.c auth_ntl.c auth_pla.c auth_oa2 auth_log.c \ - kerb_mit.c + mailfile.h auth_gss.c auth_md5.c auth_ntl.c auth_pla.c auth_bea.c \ + auth_oa2 auth_log.c kerb_mit.c mbxnt.obj: mail.h misc.h osdep.h mbxnt.c diff --git a/imap/src/osdep/nt/makefile.w2k b/imap/src/osdep/nt/makefile.w2k index 2a58a29..9da6b45 100644 --- a/imap/src/osdep/nt/makefile.w2k +++ b/imap/src/osdep/nt/makefile.w2k @@ -28,7 +28,7 @@ IP=6 EXTRAAUTHENTICATORS = EXTRADRIVERS = EXTRACFLAGS = -AUTHENTICATORS = ext gss md5 pla oa2 log +AUTHENTICATORS = ext gss md5 pla bea oa2 log DRIVERS = imap nntp pop3 mbx mtx tenex unix CREATEDRIVER = mbx APPENDDRIVER = unix @@ -90,8 +90,8 @@ smtp.obj: mail.h smtp.h rfc822.h misc.h osdep.h smtp.c os_w2k.obj: mail.h osdep.h env_nt.h fs.h ftl.h nl.h tcp.h tcp_nt.h yunchan.h \ os_w2k.c fs_nt.c ftl_nt.c nl_nt.c env_nt.c ssl_w2k.c ssl_none.c \ ip_nt.c tcp_nt.c yunchan.c pmatch.c write.c \ - mailfile.h auth_gss.c auth_md5.c auth_ntl.c auth_pla.c auth_oa2.c auth_log.c \ - kerb_w2k.c + mailfile.h auth_gss.c auth_md5.c auth_ntl.c auth_pla.c auth_bea.c \ + auth_oa2.c auth_log.c kerb_w2k.c mbxnt.obj: mail.h misc.h osdep.h mbxnt.c diff --git a/imap/src/osdep/unix/Makefile b/imap/src/osdep/unix/Makefile index a30e8d5..ed33db0 100644 --- a/imap/src/osdep/unix/Makefile +++ b/imap/src/osdep/unix/Makefile @@ -140,7 +140,7 @@ RANLIB=ranlib # Standard distribution build parameters -DEFAULTAUTHENTICATORS=ext md5 pla oa2 log +DEFAULTAUTHENTICATORS=ext md5 pla bea oa2 log # # mh needs to be after any other directory format drivers (such as mx or mix) # since otherwise mh will seize any directory that is under the mh path. @@ -933,7 +933,7 @@ osdep.o:mail.h misc.h env.h fs.h ftl.h nl.h tcp.h \ gr_wait.c gr_wait4.c gr_waitp.c \ kerb_mit.c \ auth_ext.c auth_gss.c auth_log.c auth_md5.c auth_ntl.c \ - auth_oa2.c auth_pla.c \ + auth_bea.c auth_oa2.c auth_pla.c \ pmatch.c scandir.c setpgrp.c strerror.c truncate.c write.c \ memmove.c memmove2.c memset.c \ tz_bsd.c tz_nul.c tz_sv4.c \ diff --git a/pith/pine.hlp b/pith/pine.hlp index 063e145..66a4e97 100644 --- a/pith/pine.hlp +++ b/pith/pine.hlp @@ -140,7 +140,7 @@ with help text for the config screen and the composer that didn't have any reasonable place to be called from. Dummy change to get revision in pine.hlp ============= h_revision ================= -Alpine Commit 397 2020-01-25 11:48:03 +Alpine Commit 398 2020-01-26 02:34:38 ============= h_news ================= @@ -179,10 +179,13 @@ released after the release of version any problems you find with this release. New enhancements