/*
 * 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: qss_rcptdel.c,v 1.1 2006/01/03 06:10:39 ca Exp $")
#include "sm/error.h"
#include "sm/assert.h"
#include "sm/qmgr.h"
#include "sm/qmgr-int.h"
#include "qmgr.h"
#include "log.h"

/*
**  QM_SS_RCPTDEL -- delete SMTPS recipient
**
**	Parameters:
**		qss_ctx -- QMGR/SMTPS context
**		qss_ta -- QMGR/SMTPS transaction
**		rcpt_pa -- recipient printable address
**		rcpt_idx -- recipient index
**
**	Returns:
**		usual sm_error code
*/

sm_ret_T
qm_ss_rcptdel(qss_ctx_P qss_ctx, qss_ta_P qss_ta, sm_str_P rcpt_pa, rcpt_idx_T rcpt_idx)
{
	qmgr_ctx_P qmgr_ctx;
	ibdb_rcpt_T ibdb_rcpt;
	sm_ret_T ret;
	qss_rcpt_P qss_rcpt;
	uint rmflags;
	rcpt_id_T rcpt_id;

	SM_IS_QSS_CTX(qss_ctx);
	qmgr_ctx = qss_ctx->qss_qmgr_ctx;
	SM_IS_QMGR_CTX(qmgr_ctx);

	sm_snprintf(rcpt_id, sizeof(rcpt_id), SMTP_RCPTID_FORMAT,
		qss_ta->qssta_id, rcpt_idx);
	qss_rcpt = (qss_rcpt_P) iqdb_lookup(qmgr_ctx->qmgr_iqdb,
					rcpt_id, SMTP_RCPTID_SIZE,
					THR_LOCK_UNLOCK);
	if (qss_rcpt == NULL)
	{
		sm_log_write(qmgr_ctx->qmgr_lctx,
			QM_LCAT_SMTPS, QM_LMOD_FROM_SMTPS, SM_LOG_DEBUG, 9,
			"sev=DBG, func=qm_ss_rcptdel, status=rcpt_not_found");
		return SM_NOTDONE;
	}

	ibdb_rcpt.ibr_ta_id = qss_ta->qssta_id;
	ibdb_rcpt.ibr_pa = rcpt_pa;
	ibdb_rcpt.ibr_idx = rcpt_idx;
	ret = ibdb_rcpt_status(qmgr_ctx->qmgr_ibdb, &ibdb_rcpt,
			IBDB_RCPT_DONE, IBDB_FL_NONE, THR_LOCK_UNLOCK);
	if (sm_is_err(ret))
		goto error;

	rmflags = QSS_DECR_RCPTS_TOT|QSS_RMFIQDB;
	ret = qss_rcpt_free(qss_ta, qss_rcpt, rmflags);
	if (sm_is_err(ret))
		goto error;

	return ret;

  error:
	sm_log_write(qmgr_ctx->qmgr_lctx,
		QM_LCAT_SMTPS, QM_LMOD_FROM_SMTPS, SM_LOG_DEBUG, 9,
		"sev=DBG, func=qm_ss_rcptdel, ret=%#x",
		ret);
	return ret;
}


syntax highlighted by Code2HTML, v. 0.9.1