aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2007-10-12 11:15:54 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2007-10-12 11:15:54 +0000
commitf7b0a392067280312b1a4e7a3b9254f008560ab5 (patch)
tree1d4d4a3216aae7ecf37e53445cfb0b54cfa19e1d
parentabba405eb603deaf69e31701464d8fdeb3aa1f2c (diff)
downloadmailfromd-f7b0a392067280312b1a4e7a3b9254f008560ab5.tar.gz
mailfromd-f7b0a392067280312b1a4e7a3b9254f008560ab5.tar.bz2
* src/mtasim.c (_def_read): Return 0 if zero bytes were read
(get_input_line): Fix counting of input bytes. (smtp): Fix checking for returns from process_data_reply. * gacopyz/server.c (srv_format_macros): Do not add trailing zero to the packet. git-svn-id: file:///svnroot/mailfromd/trunk@1515 7a8a7f39-df28-0410-adc6-e0d955640f24
-rw-r--r--gacopyz/server.c3
-rw-r--r--src/mtasim.c31
2 files changed, 19 insertions, 15 deletions
diff --git a/gacopyz/server.c b/gacopyz/server.c
index 9187f10d..401854b2 100644
--- a/gacopyz/server.c
+++ b/gacopyz/server.c
@@ -164,7 +164,7 @@ srv_format_macros(gacopyz_srv_t srv, unsigned char cmd, size_t *psize)
{
size_t i;
char *p;
- size_t size = macro_size(srv) + 2;
+ size_t size = macro_size(srv) + 1;
struct gacopyz_macro_def *def;
srv_ensure_space(srv, size);
@@ -188,7 +188,6 @@ srv_format_macros(gacopyz_srv_t srv, unsigned char cmd, size_t *psize)
memcpy(p, def->value, len);
p += len;
}
- *p = 0;
*psize = size;
}
diff --git a/src/mtasim.c b/src/mtasim.c
index debdc13f..228e832f 100644
--- a/src/mtasim.c
+++ b/src/mtasim.c
@@ -774,8 +774,8 @@ static int
_def_read (void *sd, char *data, size_t size, size_t * nbytes)
{
int n = read ((int) sd, data, size);
- if (n != size)
- return errno ? errno : -1;
+ if (n && n != size)
+ return errno;
if (nbytes)
*nbytes = n;
return 0;
@@ -1037,14 +1037,13 @@ get_input_line (char *buf, size_t bufsize)
if (buf[i] == '\n')
{
if (buf[i-1] == '\r')
- {
- i--;
- buf[i] = '\n';
- }
+ buf[i-1] = '\n';
+ else
+ i++;
break;
}
}
- buf[++i] = 0;
+ buf[i] = 0;
return i;
}
@@ -1598,7 +1597,7 @@ smtp (void)
char **argv;
int kw, len;
- if (get_input_line (buf, sizeof buf) < 0)
+ if (get_input_line (buf, sizeof buf) <= 0)
{
state = STATE_QUIT;
continue;
@@ -1851,8 +1850,7 @@ smtp (void)
if (gsrv)
{
int rc = gacopyz_srv_eom (gsrv, NULL, 0);
- if (process_data_reply ("cmd", "eom", rc, &state, &datareply))
- continue;
+ process_data_reply ("cmd", "eom", rc, &state, &datareply);
/* FIXME: Clear macro table, except for the entries from
command line */
gacopyz_srv_clear_macros (gsrv);
@@ -1890,8 +1888,7 @@ smtp (void)
int rc;
rc = gacopyz_srv_eom (gsrv, body_buf, body_level);
- if (process_data_reply ("cmd", "eom", rc, &state, &datareply))
- continue;
+ process_data_reply ("cmd", "eom", rc, &state, &datareply);
/* FIXME: Clear macro table, except for the entries from
command line */
gacopyz_srv_clear_macros (gsrv);
@@ -1925,7 +1922,15 @@ smtp (void)
body_level = 0;
if (process_data_reply ("cmd", "data", rc,
&state, &datareply))
- break;
+ {
+ if (datareply)
+ {
+ smtp_send_string (datareply, 0);
+ free (datareply);
+ datareply = 0;
+ }
+ }
+ break;
}
}
}

Return to:

Send suggestions and report system problems to the System administrator.