You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
6.5 KiB
206 lines
6.5 KiB
diff --git a/THANKS b/THANKS
|
|
index 9613133d..1d4dfd0d 100644
|
|
--- a/THANKS
|
|
+++ b/THANKS
|
|
@@ -43,6 +43,7 @@ Erich Eckner erich dot eckner at gmx dot de
|
|
Paul Eggert eggert at cs dot ucla dot edu
|
|
Justin Ellingwood JustinEllingwood at gmail dot com
|
|
Robert Elz kre at munnari dot OZ dot AU
|
|
+Brian Evans grknight at gentoo dot org
|
|
Rich Felker dalias at libc dot org
|
|
Dr. Werner Fink werner at suse dot de
|
|
Felix Fontein felix at fontein dot de
|
|
diff --git a/mx-test.sh b/mx-test.sh
|
|
index 4a60a1b0..201b00e7 100755
|
|
--- a/mx-test.sh
|
|
+++ b/mx-test.sh
|
|
@@ -5442,12 +5442,17 @@ t_mta_aliases() {
|
|
## xxx The following are actually *expandaddr* tests!!
|
|
|
|
# May not send plain names over SMTP!
|
|
- echo | ${MAILX} ${ARGS} -Smta=smtp://laber.backe \
|
|
- -Smta-aliases=./.tali \
|
|
- -b a3 -c a2 a1 > ./.tall 2>&1
|
|
- check_exn0 3
|
|
- check 4 - "${MBOX}" '1172368381 238'
|
|
- if have_feat uistrings; then
|
|
+ mtaali=
|
|
+ if have_feat smtp; then
|
|
+ echo | ${MAILX} ${ARGS} \
|
|
+ -Smta=smtp://laber.backe -Ssmtp-auth=none \
|
|
+ -Smta-aliases=./.tali \
|
|
+ -b a3 -c a2 a1 > ./.tall 2>&1
|
|
+ check_exn0 3
|
|
+ check 4 - "${MBOX}" '1172368381 238'
|
|
+ mtaali=1
|
|
+ fi
|
|
+ if [ -n "${mtaali}" ] && have_feat uistrings; then
|
|
check 5 - .tall '771616226 179'
|
|
else
|
|
t_echoskip '5:[test unsupported]'
|
|
diff --git a/src/mx/cmd-resend.c b/src/mx/cmd-resend.c
|
|
index 488c9b78..31f20609 100644
|
|
--- a/src/mx/cmd-resend.c
|
|
+++ b/src/mx/cmd-resend.c
|
|
@@ -723,7 +723,11 @@ jleave:
|
|
|
|
static int
|
|
a_crese_resend1(void *vp, boole add_resent){
|
|
- struct mx_url url;
|
|
+#ifdef mx_HAVE_NET
|
|
+ struct mx_url url, *urlp = &url;
|
|
+#else
|
|
+ struct mx_url *urlp = NIL;
|
|
+#endif
|
|
struct header head;
|
|
struct mx_name *myto, *myrawto;
|
|
boole mta_isexe;
|
|
@@ -747,7 +751,7 @@ jedar:
|
|
goto jleave;
|
|
}
|
|
|
|
- if(!(mta_isexe = mx_sendout_mta_url(&url)))
|
|
+ if(!(mta_isexe = mx_sendout_mta_url(urlp)))
|
|
goto jleave;
|
|
mta_isexe = (mta_isexe != TRU1);
|
|
|
|
@@ -794,7 +798,7 @@ jedar:
|
|
head.h_mailx_orig_cc = lextract(hfield1("cc", mp), GCC | gf);
|
|
head.h_mailx_orig_bcc = lextract(hfield1("bcc", mp), GBCC | gf);
|
|
|
|
- if(n_resend_msg(mp, (mta_isexe ? NIL : &url), &head, add_resent
|
|
+ if(n_resend_msg(mp, (mta_isexe ? NIL : urlp), &head, add_resent
|
|
) != OKAY){
|
|
/* n_autorec_relax_gut(); XXX but is handled automatically? */
|
|
goto jleave;
|
|
diff --git a/src/mx/sendout.c b/src/mx/sendout.c
|
|
index 2b0e8bf0..c4f373c1 100644
|
|
--- a/src/mx/sendout.c
|
|
+++ b/src/mx/sendout.c
|
|
@@ -2060,9 +2060,13 @@ FL enum okay
|
|
n_mail1(enum n_mailsend_flags msf, struct header *hp, struct message *quote,
|
|
char const *quotefile)
|
|
{
|
|
- struct n_sigman sm;
|
|
+#ifdef mx_HAVE_NET
|
|
struct mx_cred_ctx cc;
|
|
- struct mx_url url;
|
|
+ struct mx_url url, *urlp = &url;
|
|
+#else
|
|
+ struct mx_url *urlp = NIL;
|
|
+#endif
|
|
+ struct n_sigman sm;
|
|
struct sendbundle sb;
|
|
struct mx_name *to;
|
|
boole dosign, mta_isexe;
|
|
@@ -2121,7 +2125,7 @@ n_mail1(enum n_mailsend_flags msf, struct header *hp, struct message *quote,
|
|
#ifndef mx_HAVE_SMIME
|
|
if (dosign) {
|
|
n_err(_("No S/MIME support compiled in\n"));
|
|
- goto jleave;
|
|
+ goto jfail_dead;
|
|
}
|
|
#endif
|
|
|
|
@@ -2139,8 +2143,8 @@ n_mail1(enum n_mailsend_flags msf, struct header *hp, struct message *quote,
|
|
* TODO header fields ONCE, call that ONCE after user editing etc. has
|
|
* TODO completed (one edit cycle) */
|
|
|
|
- if(!(mta_isexe = mx_sendout_mta_url(&url)))
|
|
- goto jleave;
|
|
+ if(!(mta_isexe = mx_sendout_mta_url(urlp)))
|
|
+ goto jfail_dead;
|
|
mta_isexe = (mta_isexe != TRU1);
|
|
|
|
/* Take the user names from the combined to and cc lists and do all the
|
|
@@ -2174,8 +2178,10 @@ n_mail1(enum n_mailsend_flags msf, struct header *hp, struct message *quote,
|
|
sb.sb_hp = hp;
|
|
sb.sb_to = to;
|
|
sb.sb_input = mtf;
|
|
- sb.sb_urlp = mta_isexe ? NIL : &url;
|
|
+ sb.sb_urlp = mta_isexe ? NIL : urlp;
|
|
+#ifdef mx_HAVE_NET
|
|
sb.sb_credp = &cc;
|
|
+#endif
|
|
|
|
if((dosign || count_nonlocal(to) > 0) &&
|
|
!_sendbundle_setup_creds(&sb, (dosign > 0))){
|
|
@@ -2728,8 +2734,10 @@ FL enum okay
|
|
n_resend_msg(struct message *mp, struct mx_url *urlp, struct header *hp,
|
|
boole add_resent)
|
|
{
|
|
- struct n_sigman sm;
|
|
+#ifdef mx_HAVE_NET
|
|
struct mx_cred_ctx cc;
|
|
+#endif
|
|
+ struct n_sigman sm;
|
|
struct sendbundle sb;
|
|
FILE * volatile ibuf, *nfo, * volatile nfi;
|
|
struct mx_fs_tmp_ctx *fstcp;
|
|
@@ -2794,7 +2802,9 @@ n_resend_msg(struct message *mp, struct mx_url *urlp, struct header *hp,
|
|
sb.sb_to = to;
|
|
sb.sb_input = nfi;
|
|
sb.sb_urlp = urlp;
|
|
+#ifdef mx_HAVE_NET
|
|
sb.sb_credp = &cc;
|
|
+#endif
|
|
|
|
if(!_sendout_error &&
|
|
count_nonlocal(to) > 0 && !_sendbundle_setup_creds(&sb, FAL0)){
|
|
diff --git a/src/mx/url.c b/src/mx/url.c
|
|
index 574e7c56..4bd55fb5 100644
|
|
--- a/src/mx/url.c
|
|
+++ b/src/mx/url.c
|
|
@@ -321,29 +321,33 @@ mx_url_parse(struct mx_url *urlp, enum cproto cproto, char const *data){
|
|
|
|
rv = FAL0;
|
|
|
|
+#ifdef mx_HAVE_TLS
|
|
+# define a_OUCH 0
|
|
+#else
|
|
+# define a_OUCH 1
|
|
+#endif
|
|
+
|
|
/* Network protocol */
|
|
#define a_PROTOX(X,Y,Z) \
|
|
urlp->url_portno = Y;\
|
|
su_mem_copy(urlp->url_proto, X "://\0", sizeof(X "://\0"));\
|
|
urlp->url_proto[sizeof(X) -1] = '\0';\
|
|
urlp->url_proto_len = sizeof(X) -1;\
|
|
- do{ Z; }while(0)
|
|
+ if(a_OUCH){ Z; }
|
|
#define a_PRIVPROTOX(X,Y,Z) \
|
|
do{ a_PROTOX(X, Y, Z); }while(0)
|
|
-#define a__IF(X,Y,Z) \
|
|
+
|
|
+#define a__IF(T,X,Y,Z) \
|
|
if(!su_cs_cmp_case_n(data, X "://", sizeof(X "://") -1)){\
|
|
+ if(a_OUCH && T)\
|
|
+ goto jeproto;\
|
|
a_PROTOX(X, Y, Z);\
|
|
data += sizeof(X "://") -1;\
|
|
goto juser;\
|
|
}
|
|
-#define a_IF(X,Y) a__IF(X, Y, (void)0)
|
|
-#ifdef mx_HAVE_TLS
|
|
-# define a_IFS(X,Y) a__IF(X, Y, urlp->url_flags |= mx_URL_TLS_REQUIRED)
|
|
-# define a_IFs(X,Y) a__IF(X, Y, urlp->url_flags |= mx_URL_TLS_OPTIONAL)
|
|
-#else
|
|
-# define a_IFS(X,Y) goto jeproto;
|
|
-# define a_IFs(X,Y) a_IF(X, Y)
|
|
-#endif
|
|
+#define a_IF(X,Y) a__IF(0, X, Y, (void)0)
|
|
+#define a_IFS(X,Y) a__IF(1, X, Y, urlp->url_flags |= mx_URL_TLS_REQUIRED)
|
|
+#define a_IFs(X,Y) a__IF(0, X, Y, urlp->url_flags |= mx_URL_TLS_OPTIONAL)
|
|
|
|
switch(cproto){
|
|
case CPROTO_CERTINFO:
|
|
@@ -413,6 +417,7 @@ mx_url_parse(struct mx_url *urlp, enum cproto cproto, char const *data){
|
|
#endif
|
|
}
|
|
|
|
+#undef a_OUCH
|
|
#undef a_PRIVPROTOX
|
|
#undef a_PROTOX
|
|
#undef a__IF
|