Sendmail 8.13.3 Programmer's Guide

Sample Program
Milter Sample Program
Chapter 570
char *p;
char host[512];
char hbuf[1024];
if (priv == NULL)
return rstat;
/* close the archive file */
if (priv->mlfi_fp != NULL && fclose(priv->mlfi_fp) == EOF)
{
/* failed; we have to wait until later */
fprintf(stderr, "Couldn’t close archive file %s: %s\n",
priv->mlfi_fname, strerror(errno));
rstat = SMFIS_TEMPFAIL;
(void) unlink(priv->mlfi_fname);
}
else if (ok)
{
/* add a header to the message announcing our presence */
if (gethostname(host, sizeof host) < 0)
snprintf(host, sizeof host, "localhost");
p = strrchr(priv->mlfi_fname, ’/’);
if (p == NULL)
p = priv->mlfi_fname;
else
p++;
snprintf(hbuf, sizeof hbuf, "%s@%s", p, host);
if (smfi_addheader(ctx, "X-Archived", hbuf) != MI_SUCCESS)
{
/* failed; we have to wait until later */
fprintf(stderr, "Couldn’t add header: X-Archived:
%s\n", hbuf);
ok = FALSE;
rstat = SMFIS_TEMPFAIL;
(void) unlink(priv->mlfi_fname);
}
}
else
{
/* message was aborted -- delete the archive file */
fprintf(stderr, "Message aborted. Removing %s\n",
priv->mlfi_fname);
rstat = SMFIS_TEMPFAIL;
(void) unlink(priv->mlfi_fname);
}