/*
* Copyright (c) 2006 Sendmail, Inc. and its suppliers.
* All rights reserved.
*
* By using this file, you agree to the terms and conditions set
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*/
#include "sm/generic.h"
SM_RCSID("@(#)$Id: pmilter_mailmod.c,v 1.5 2006/10/05 04:27:38 ca Exp $")
#include "sm/error.h"
#include "sm/assert.h"
#include "pmilter.h"
#include "sm/pmfdef.h"
#include "sm/pmfapi.h"
#include "sm/pmilter.h"
#if MTA_USE_PMILTER
/*
** SM_PMFI_MAIL_RPLC -- Replace MAIL address
**
** Parameters:
** pmse_ctx -- pmilter/SMTP server session context
** mail_pa -- new MAIL address (rfc 2821 format)
** args -- ESMTP parameters for MAIL
** (currently ignored)
**
** Returns:
** usual sm_error code
*/
sm_ret_T
sm_pmfi_mail_rplc(pmse_ctx_P pmse_ctx, const char *mail_pa, char *args)
{
size_t len;
SM_IS_PMSE_CTX(pmse_ctx);
if (NULL == mail_pa)
return sm_error_perm(SM_EM_PMILTER, EINVAL);
if (!SM_IS_FLAG(pmse_ctx->pmse_pmss_ctx->pmss_pmcap,
SM_SCAP_PM_MAILMOD))
return sm_error_perm(SM_EM_PMILTER, SM_E_PR_ERR);
if (pmse_ctx->pmse_state != PMSE_ST_DOT)
return sm_error_perm(SM_EM_PMILTER, SM_E_PR_ERR);
len = strlen(mail_pa);
if (len < 2 || len > MAXADDRLEN)
return sm_error_perm(SM_EM_PMILTER, EINVAL);
if (mail_pa[0] != '<' || mail_pa[len - 1] != '>')
return sm_error_perm(SM_EM_PMILTER, EINVAL);
/* do a full syntax check here?? */
pmse_ctx->pmse_mail_new = sm_str_scpyn0(NULL, mail_pa, len + 1,
len + 2);
if (NULL == pmse_ctx->pmse_mail_new)
return sm_error_temp(SM_EM_PMILTER, ENOMEM);
return SM_SUCCESS;
}
#endif /* MTA_USE_PMILTER */
syntax highlighted by Code2HTML, v. 0.9.1