/*
* Copyright (c) 2005 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_setreply.c,v 1.4 2006/10/05 04:27:38 ca Exp $")
#include "sm/error.h"
#include "sm/assert.h"
#include "sm/ctype.h"
#include "pmilter.h"
#include "sm/pmfdef.h"
#include "sm/pmfapi.h"
#if MTA_USE_PMILTER
/*
** SM_PMFI_SETREPLY -- Set reply for next command
**
** Parameters:
** pmse_ctx -- pmilter/SMTP server session context
** reply -- reply text including error codes
**
** Returns:
** usual sm_error code
*/
sm_ret_T
sm_pmfi_setreply(pmse_ctx_P pmse_ctx, const char *reply_text)
{
sm_ret_T ret;
SM_IS_PMSE_CTX(pmse_ctx);
if (reply_text != NULL && *reply_text != '\0')
{
size_t len;
char c;
len = strlen(reply_text);
if (len < 5)
return sm_err_perm(EINVAL);
c = reply_text[0];
if (c != '2' && c != '3' && c != '4' && c != '5')
return sm_err_perm(EINVAL);
if (!ISDIGIT(reply_text[1]) || !ISDIGIT(reply_text[2]))
return sm_err_perm(EINVAL);
if (reply_text[len - 2] != '\r' || reply_text[len - 1] != '\n')
return sm_err_perm(EINVAL);
ret = sm_str_scopy(pmse_ctx->pmse_reply_text, reply_text);
}
else
{
sm_str_clr(pmse_ctx->pmse_reply_text);
ret = SM_SUCCESS;
}
return ret;
}
#endif /* MTA_USE_PMILTER */
syntax highlighted by Code2HTML, v. 0.9.1