summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-03-17 01:30:34 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2011-03-17 01:30:34 +0200
commit02634d3bf0932b8bde43a881d67760f38e3f9e9f (patch)
tree26a02927411ccea05859111c2db45612b6232e07
parent0ac52e06cb1cb91602ee4dc4de32f66423e96b32 (diff)
downloadmailutils-02634d3bf0932b8bde43a881d67760f38e3f9e9f.tar.gz
mailutils-02634d3bf0932b8bde43a881d67760f38e3f9e9f.tar.bz2
Bugfixes.
* comsat/action.c (action_echo): Set omit_newline. * libmailutils/mailbox/mbx_default.c: Return 0 on success. Fix memory overrun. * libproto/mailer/smtp.c (smtp_open): Protect tls-related code with #ifdef WITH_TLS. * libproto/pop/mbox.c (pop_open): Likewise. * mu/imap.c (com_connect): Likewise. * mh/mhn.c (split_args): Preserve quotes. (mhn_compose_command): Handle type arguments (%a escape). (mhn_show_command): Likewise. (store_handler): Fix call to mh_getyn. (edit_mime): Pass typeargs to mhn_compose_command. Fix test for missing filename. * mh/tests/ali.at (ali04): The test wrongly assumed that the `root' group has some members. * mh/tests/folder.at: Always sort the output from find. * mh/tests/rmf.at: Likewise. * mh/tests/mhn.at: Likewise. Filter out timestamps from the tar output produced by mhn. * tests/testsuite.at (MH_SETUP): Define moreproc. * mh/tests/mhparam.at: Account for changes in mh_profile
-rw-r--r--comsat/action.c3
-rw-r--r--libmailutils/mailbox/mbx_default.c5
-rw-r--r--libproto/mailer/smtp.c3
-rw-r--r--libproto/pop/mbox.c5
-rw-r--r--mh/mhn.c57
-rw-r--r--mh/tests/ali.at9
-rw-r--r--mh/tests/folder.at4
-rw-r--r--mh/tests/install-mh.at2
-rw-r--r--mh/tests/mhn.at35
-rw-r--r--mh/tests/mhparam.at1
-rw-r--r--mh/tests/rmf.at4
-rw-r--r--mh/tests/send.at2
-rw-r--r--mh/tests/testsuite.at1
-rw-r--r--mu/imap.c11
14 files changed, 95 insertions, 47 deletions
diff --git a/comsat/action.c b/comsat/action.c
index a5a5ff75e..81cdf2861 100644
--- a/comsat/action.c
+++ b/comsat/action.c
@@ -353,6 +353,9 @@ action_echo (struct biffrc_environ *env, size_t argc, char **argv)
omit_newline = 1;
i++;
}
+ else
+ omit_newline = 0;
+
for (;;)
{
echo_string (env->tty, argv[i]);
diff --git a/libmailutils/mailbox/mbx_default.c b/libmailutils/mailbox/mbx_default.c
index f44bbefe5..05563041d 100644
--- a/libmailutils/mailbox/mbx_default.c
+++ b/libmailutils/mailbox/mbx_default.c
@@ -136,14 +136,13 @@ mu_folder_directory ()
int
mu_construct_user_mailbox_url (char **pout, const char *name)
{
- int rc;
const char *pat = mu_mailbox_url ();
const char *env[3];
struct mu_wordsplit ws;
env[0] = "user";
env[1] = (char*) name;
- env[3] = NULL;
+ env[2] = NULL;
ws.ws_env = env;
if (mu_wordsplit (pat, &ws,
MU_WRDSF_NOSPLIT | MU_WRDSF_NOCMD |
@@ -162,7 +161,7 @@ mu_construct_user_mailbox_url (char **pout, const char *name)
mu_wordsplit_free (&ws);
if (!*pout)
return ENOMEM;
- return rc;
+ return 0;
}
/* Is this a security risk? */
diff --git a/libproto/mailer/smtp.c b/libproto/mailer/smtp.c
index e5026fe21..fdda4b653 100644
--- a/libproto/mailer/smtp.c
+++ b/libproto/mailer/smtp.c
@@ -182,6 +182,7 @@ smtp_open (mu_mailer_t mailer, int flags)
if (rc)
return rc;
+#ifdef WITH_TLS
if (!notls && mu_tls_enable &&
mu_smtp_capa_test (smtp_mailer->smtp, "STARTTLS", NULL) == 0)
{
@@ -193,7 +194,7 @@ smtp_open (mu_mailer_t mailer, int flags)
return rc;
}
}
-
+#endif
if (!noauth && mu_smtp_capa_test (smtp_mailer->smtp, "AUTH", NULL) == 0)
{
rc = mu_smtp_auth (smtp_mailer->smtp);
diff --git a/libproto/pop/mbox.c b/libproto/pop/mbox.c
index b60c66eb6..3a9102b2b 100644
--- a/libproto/pop/mbox.c
+++ b/libproto/pop/mbox.c
@@ -173,7 +173,8 @@ pop_open (mu_mailbox_t mbox, int flags)
if (status)
break;
- if (WITH_TLS && !mpd->pops &&
+#ifdef WITH_TLS
+ if (!mpd->pops &&
mu_url_sget_param (mbox->url, "notls", NULL) == MU_ERR_NOENT &&
mu_pop3_capa_test (mpd->pop3, "STLS", NULL) == 0)
{
@@ -181,7 +182,7 @@ pop_open (mu_mailbox_t mbox, int flags)
if (status)
break;
}
-
+#endif
status = mu_authority_authenticate (mbox->folder->authority);
}
while (0);
diff --git a/mh/mhn.c b/mh/mhn.c
index 0c36d72a6..cb634ca59 100644
--- a/mh/mhn.c
+++ b/mh/mhn.c
@@ -208,7 +208,8 @@ split_args (const char *argstr, size_t len, int *pargc, char ***pargv)
ws.ws_delim = ";";
if (mu_wordsplit_len (argstr, len, &ws,
- MU_WRDSF_DEFFLAGS | MU_WRDSF_DELIM | MU_WRDSF_WS))
+ (MU_WRDSF_DEFFLAGS & ~MU_WRDSF_QUOTE) |
+ MU_WRDSF_DELIM | MU_WRDSF_WS))
{
mu_error (_("cannot split line `%s': %s"), argstr,
mu_wordsplit_strerror (&ws));
@@ -629,10 +630,11 @@ _mhn_profile_get (const char *prefix, const char *type, const char *subtype,
}
char *
-mhn_compose_command (char *typestr, int *flags, char *file)
+mhn_compose_command (char *typestr, char *typeargs, int *flags, char *file)
{
const char *p, *str;
- char *type, *subtype, *typeargs;
+ char *type, *subtype, **typeargv = NULL;
+ int typeargc = 0;
struct obstack stk;
split_content (typestr, &type, &subtype);
@@ -660,7 +662,20 @@ mhn_compose_command (char *typestr, int *flags, char *file)
{
case 'a':
/* additional arguments */
- obstack_grow (&stk, typeargs, strlen (typeargs));
+ if (typeargs)
+ {
+ int i;
+
+ if (!typeargv)
+ split_args (typeargs, strlen (typeargs),
+ &typeargc, &typeargv);
+ for (i = 0; i < typeargc; i++)
+ {
+ if (i > 0)
+ obstack_1grow (&stk, ' ');
+ obstack_grow (&stk, typeargv[i], strlen (typeargv[i]));
+ }
+ }
break;
case 'F':
@@ -688,7 +703,8 @@ mhn_compose_command (char *typestr, int *flags, char *file)
free (type);
free (subtype);
-
+ mu_argcv_free (typeargc, typeargv);
+
str = obstack_finish (&stk);
p = mu_str_skip_class (str, MU_CTYPE_SPACE);
if (!*p)
@@ -755,6 +771,8 @@ mhn_show_command (mu_message_t msg, msg_part_t part, int *flags,
struct obstack stk;
mu_header_t hdr;
char *temp_cmd = NULL;
+ int typeargc = 0;
+ char **typeargv = NULL;
mu_message_get_header (msg, &hdr);
_get_content_type (hdr, &typestr, &typeargs);
@@ -824,7 +842,20 @@ mhn_show_command (mu_message_t msg, msg_part_t part, int *flags,
{
case 'a':
/* additional arguments */
- obstack_grow (&stk, typeargs, strlen (typeargs));
+ if (typeargs)
+ {
+ int i;
+
+ if (!typeargv)
+ split_args (typeargs, strlen (typeargs),
+ &typeargc, &typeargv);
+ for (i = 0; i < typeargc; i++)
+ {
+ if (i > 0)
+ obstack_1grow (&stk, ' ');
+ obstack_grow (&stk, typeargv[i], strlen (typeargv[i]));
+ }
+ }
break;
case 'e':
@@ -883,6 +914,7 @@ mhn_show_command (mu_message_t msg, msg_part_t part, int *flags,
free (type);
free (subtype);
free (temp_cmd);
+ mu_argcv_free (typeargc, typeargv);
str = obstack_finish (&stk);
p = mu_str_skip_class (str, MU_CTYPE_SPACE);
@@ -1745,12 +1777,9 @@ store_handler (mu_message_t msg, msg_part_t part, char *type, char *encoding,
if (!(mode_options & OPT_QUIET) && access (name, R_OK) == 0)
{
- char *p;
int ok;
- mu_asprintf (&p, _("File %s already exists. Rewrite"), name);
- ok = mh_getyn (p);
- free (p);
+ ok = mh_getyn (_("File %s already exists. Rewrite"), name);
if (!ok)
{
free (name);
@@ -2429,7 +2458,7 @@ edit_mime (char *cmd, struct compose_env *env, mu_message_t *msg, int level)
mu_body_t body;
mu_stream_t in, out = NULL, fstr;
char *encoding;
- char *p, *typestr;
+ char *typestr, *typeargs;
char *shell_cmd;
int flags;
@@ -2442,8 +2471,8 @@ edit_mime (char *cmd, struct compose_env *env, mu_message_t *msg, int level)
mu_rtrim_class (cmd, MU_CTYPE_SPACE);
- _get_content_type (hdr, &typestr, NULL);
- shell_cmd = mhn_compose_command (typestr, &flags, cmd);
+ _get_content_type (hdr, &typestr, &typeargs);
+ shell_cmd = mhn_compose_command (typestr, typeargs, &flags, cmd);
free (typestr);
/* Open the input stream, whatever it is */
@@ -2452,7 +2481,7 @@ edit_mime (char *cmd, struct compose_env *env, mu_message_t *msg, int level)
if (mhn_exec (&in, cmd, flags))
return 1;
}
- else if (p == cmd)
+ else if (cmd[0] == 0)
{
mu_error (_("%s:%lu: missing filename"),
input_file,
diff --git a/mh/tests/ali.at b/mh/tests/ali.at
index 36c1f4073..8b640c7ee 100644
--- a/mh/tests/ali.at
+++ b/mh/tests/ali.at
@@ -74,11 +74,10 @@ ali: mh_aliases2:2: `mh_aliases' already included at top level
])
MH_CHECK([ali: group name],[ali04 ali-group-name],[
-grep ^root: /etc/group >/dev/null || AT_SKIP_TEST
-AT_DATA([mh_aliases],[
-korzen: =root
-])
-awk -F : '$1=="root" { print $4 }' /etc/group | tr -d ' ' > expout
+awk -F : '$4!="" { print $1; print $4; exit 0 }' /etc/group > tmpout
+test -s tmpout || AT_SKIP_TEST
+sed -n '1s/.*/korzen: =&/p' tmpout > mh_aliases
+sed '1d' tmpout | tr -d ' ' > expout
ali -a ./mh_aliases korzen | tr -d ' '
],
[0],
diff --git a/mh/tests/folder.at b/mh/tests/folder.at
index f2e33142b..8d89d9e48 100644
--- a/mh/tests/folder.at
+++ b/mh/tests/folder.at
@@ -87,7 +87,7 @@ do
mv Mail/inbox/$i Mail/inbox/${i}0
done
folder -pack || exit $?
-find Mail/inbox
+find Mail/inbox | sort
],
[0],
[Mail/inbox
@@ -105,7 +105,7 @@ do
mv Mail/inbox/$i Mail/inbox/${i}0
done
folder --pack=1 || exit $?
-find Mail/inbox
+find Mail/inbox | sort
],
[0],
[Mail/inbox
diff --git a/mh/tests/install-mh.at b/mh/tests/install-mh.at
index 981e2c41a..e5be71724 100644
--- a/mh/tests/install-mh.at
+++ b/mh/tests/install-mh.at
@@ -21,7 +21,7 @@ AT_CHECK([
mkdir home
dir=`cd home; pwd`
HOME=$dir MH=$dir/mh_profile install-mh -auto || exit $?
-find home
+find home | sort
HOME=$dir MH=$dir/mh_profile install-mh -auto 2>errout
echo $?
cat errout
diff --git a/mh/tests/mhn.at b/mh/tests/mhn.at
index bd75887b6..7316b1c89 100644
--- a/mh/tests/mhn.at
+++ b/mh/tests/mhn.at
@@ -192,7 +192,7 @@ chmod +w Mail/inbox/4
echo "mhn-store-application: %%-%m%P.%s-%p" >> $MH
mhn +inbox -store 4 | remove_curdir || exit $?
-find . -name '%*'
+find . -name '%*' | sort
],
[0],
[storing message 4 part 1 as file 4.1.plain
@@ -333,7 +333,12 @@ And the mome raths outgrabe.
MH_CHECK([mhn-show type=tar],[mhn13 mhn-show-type=tar],[
MUT_MBCOPY($abs_top_srcdir/testsuite/mh/mime,[Mail/inbox])
-mhn -show 2 | sed /^X-IMAPbase/d
+AT_DATA([filter.awk],[
+/^X-IMAPbase/ { next }
+/^-rw-r--r--/ { print $1, $2, $3, $6; next }
+{ print }
+])
+mhn -show 2 | awk -f filter.awk
],
[0],
[Date: Mon, 29 Nov 2010 14:04:19 +0200
@@ -348,8 +353,8 @@ X-Envelope-Sender: gray@example.net
part 1 text/plain 15
Initial text.
--rw-r--r-- gray/staff 1418 2010-11-29 13:58 Father_William
--rw-r--r-- gray/staff 937 2010-11-29 13:58 Jabberwocky
+-rw-r--r-- gray/staff 1418 Father_William
+-rw-r--r-- gray/staff 937 Jabberwocky
])
# FIXME: What about exit code?
@@ -379,7 +384,12 @@ MH_CHECK([mhn-show- variable (with subtype)],
[mhn15 mhn-show-with-subtype],[
MUT_MBCOPY($abs_top_srcdir/testsuite/mh/mime,[Mail/inbox])
echo "mhn-show-application/x-tar: %ltar tvf '%F'" >> $MH
-mhn -show 1 | sed '/^X-IMAPbase/d;s/ *$//'
+AT_DATA([filter.awk],[
+/^X-IMAPbase/ { next }
+/^-rw-r--r--/ { print $1, $2, $3, $6; next }
+{ sub(/ *$/,""); print }
+])
+mhn -show 1 | awk -f filter.awk
],
[0],
[Date: Mon, 29 Nov 2010 14:00:03 +0200
@@ -395,15 +405,20 @@ part 1 text/plain 15
Initial text.
part 2 application/x-tar 13835
--rw-r--r-- gray/staff 1418 2010-11-29 13:58 Father_William
--rw-r--r-- gray/staff 937 2010-11-29 13:58 Jabberwocky
+-rw-r--r-- gray/staff 1418 Father_William
+-rw-r--r-- gray/staff 937 Jabberwocky
])
MH_CHECK([mhn-show- variable (without subtype)],
[mhn16 mhn-show-without-subtype],[
MUT_MBCOPY($abs_top_srcdir/testsuite/mh/mime,[Mail/inbox])
echo "mhn-show-application: %ltar tvf '%F'" >> $MH
-mhn -show 1 | sed '/^X-IMAPbase/d;s/ *$//'
+AT_DATA([filter.awk],[
+/^X-IMAPbase/ { next }
+/^-rw-r--r--/ { print $1, $2, $3, $6; next }
+{ sub(/ *$/,""); print }
+])
+mhn -show 1 | awk -f filter.awk
],
[0],
[Date: Mon, 29 Nov 2010 14:00:03 +0200
@@ -419,8 +434,8 @@ part 1 text/plain 15
Initial text.
part 2 application/x-tar 13835
--rw-r--r-- gray/staff 1418 2010-11-29 13:58 Father_William
--rw-r--r-- gray/staff 937 2010-11-29 13:58 Jabberwocky
+-rw-r--r-- gray/staff 1418 Father_William
+-rw-r--r-- gray/staff 937 Jabberwocky
])
dnl -------------------------------------------------------------------
diff --git a/mh/tests/mhparam.at b/mh/tests/mhparam.at
index 68be34949..9720dd0ea 100644
--- a/mh/tests/mhparam.at
+++ b/mh/tests/mhparam.at
@@ -27,6 +27,7 @@ mhparam -all | tr '\t' ' ' | sed 's/^Path:.*/Path: Mail/;s/^mhetcdir:.*/mhetcdir
[0],
[Path: Mail
mhetcdir: dir
+moreproc: /bin/cat
Sequence-Negation: not
Draft-Folder: Mail/drafts
Aliasfile: .mh_aliases
diff --git a/mh/tests/rmf.at b/mh/tests/rmf.at
index 726067344..34b864cc4 100644
--- a/mh/tests/rmf.at
+++ b/mh/tests/rmf.at
@@ -21,7 +21,7 @@ MUT_MBCOPY($abs_top_srcdir/testsuite/mh/mbox1,[Mail/inbox])
MUT_MBCOPY($abs_top_srcdir/testsuite/mh/teaparty,[Mail])
echo 'Current-Folder: inbox' > Mail/context
rmf +teaparty || exit $?
-find Mail -type d
+find Mail -type d | sort
],
[0],
[Mail
@@ -33,7 +33,7 @@ MUT_MBCOPY($abs_top_srcdir/testsuite/mh/mbox1,[Mail/inbox])
MUT_MBCOPY($abs_top_srcdir/testsuite/mh/teaparty,[Mail])
echo 'Current-Folder: teaparty' > Mail/context
rmf || exit $?
-find Mail -type d
+find Mail -type d | sort
],
[0],
[[[+inbox now current]]
diff --git a/mh/tests/send.at b/mh/tests/send.at
index 3d9d00086..ad5154d70 100644
--- a/mh/tests/send.at
+++ b/mh/tests/send.at
@@ -66,7 +66,7 @@ export MTA_APPEND
send ./input.1 ./input.2 || exit $?
sed 's/: Date: .*/: Date: now/' $MTA_DIAG
-find . -name ',input.[[12]]'
+find . -name ',input.[[12]]' | sort
],
[0],
[ENVELOPE FROM: mhtester@example.net
diff --git a/mh/tests/testsuite.at b/mh/tests/testsuite.at
index 556518241..36e708a8b 100644
--- a/mh/tests/testsuite.at
+++ b/mh/tests/testsuite.at
@@ -24,6 +24,7 @@ export MH
cat > $MH <<EOT
Path: $curdir/Mail
mhetcdir: $abs_top_srcdir/mh/etc
+moreproc: /bin/cat
EOT
MTSTAILOR=$curdir/mtstailor
export MTSTAILOR
diff --git a/mu/imap.c b/mu/imap.c
index bb32f1eaa..85a27a343 100644
--- a/mu/imap.c
+++ b/mu/imap.c
@@ -180,13 +180,12 @@ com_connect (int argc, char **argv)
{
if (strcmp (argv[i], "-tls") == 0)
{
- if (WITH_TLS)
+#ifdef WITH_TLS
tls = 1;
- else
- {
- mu_error ("TLS not supported");
- return 0;
- }
+#else
+ mu_error ("TLS not supported");
+ return 0;
+#endif
}
else
break;

Return to:

Send suggestions and report system problems to the System administrator.