#include <sys_defs.h>
#include <events.h>
#include <mymalloc.h>
#include <vstream.h>
#include <name_mask.h>
#include <msg.h>
#include <cleanup_user.h>
#include <mail_params.h>
#include <mail_error.h>
#include <mail_proto.h>
#include "smtpd.h"
#include "smtpd_chat.h"
#include "smtpd_sasl_glue.h"
void smtpd_state_init(SMTPD_STATE *state, VSTREAM *stream)
{
state->err = CLEANUP_STAT_OK;
state->client = stream;
state->buffer = vstring_alloc(100);
state->error_count = 0;
state->error_mask = 0;
state->notify_mask = name_mask(VAR_NOTIFY_CLASSES, mail_error_masks,
var_notify_classes);
state->helo_name = 0;
state->queue_id = 0;
state->cleanup = 0;
state->dest = 0;
state->rcpt_count = 0;
state->access_denied = 0;
state->history = 0;
state->reason = 0;
state->sender = 0;
state->recipient = 0;
state->etrn_name = 0;
state->protocol = MAIL_PROTO_SMTP;
state->where = SMTPD_AFTER_CONNECT;
state->recursion = 0;
state->msg_size = 0;
state->junk_cmds = 0;
state->defer_if_permit_client = 0;
state->defer_if_permit_helo = 0;
state->defer_if_permit_sender = 0;
state->defer_if_reject.reason = 0;
state->defer_if_permit.reason = 0;
state->discard = 0;
state->expand_buf = 0;
state->tls_active = 0;
state->tls_use_tls = 0;
state->tls_enforce_tls = 0;
state->tls_info = tls_info_zero;
state->tls_auth_only = 0;
#ifdef USE_SASL_AUTH
if (SMTPD_STAND_ALONE(state))
var_smtpd_sasl_enable = 0;
if (var_smtpd_sasl_enable)
smtpd_sasl_connect(state);
#endif
smtpd_peer_init(state);
smtpd_chat_reset(state);
}
void smtpd_state_reset(SMTPD_STATE *state)
{
if (state->buffer)
vstring_free(state->buffer);
smtpd_peer_reset(state);
if (state->defer_if_permit.reason)
vstring_free(state->defer_if_permit.reason);
if (state->defer_if_reject.reason)
vstring_free(state->defer_if_reject.reason);
if (state->expand_buf)
vstring_free(state->expand_buf);
#ifdef USE_SASL_AUTH
if (var_smtpd_sasl_enable)
smtpd_sasl_disconnect(state);
#endif
}