Пример #1
0
int     vverify_append(const char *queue_id, const char *orig_rcpt,
		              const char *recipient, const char *relay,
		              time_t entry, const char *status,
		              int rcpt_stat, const char *fmt, va_list ap)
{
    VSTRING *text = vstring_alloc(10);
    int     req_stat;

    /*
     * Impedance adaptor between bounce/defer/sent and verify_clnt.
     */
    vstring_vsprintf(text, fmt, ap);
    if (var_verify_neg_cache || rcpt_stat == DEL_RCPT_STAT_OK) {
	req_stat = verify_clnt_update(orig_rcpt, rcpt_stat,
				      "%s", vstring_str(text));
	if (req_stat == VRFY_STAT_OK && strcasecmp(recipient, orig_rcpt) != 0)
	    req_stat = verify_clnt_update(recipient, rcpt_stat,
					  "%s", vstring_str(text));
    } else {
	status = "undeliverable-but-not-cached";
	req_stat = VRFY_STAT_OK;
    }
    if (req_stat == VRFY_STAT_OK) {
	log_adhoc(queue_id, orig_rcpt, recipient, relay,
		  entry, status, "%s", vstring_str(text));
	req_stat = 0;
    } else {
	msg_warn("%s: %s service failure", queue_id, var_verify_service);
	req_stat = -1;
    }
    vstring_free(text);
    return (req_stat);
}
Пример #2
0
static void update(char *query)
{
    char   *addr;
    char   *status_text;
    char   *cp = query;

    if ((addr = mystrtok(&cp, " \t\r\n")) == 0
	|| (status_text = mystrtok(&cp, " \t\r\n")) == 0) {
	msg_warn("bad request format");
	return;
    }
    while (*cp && ISSPACE(*cp))
	cp++;
    if (*cp == 0) {
	msg_warn("bad request format");
	return;
    }
    switch (verify_clnt_update(query, atoi(status_text), cp)) {
    case VRFY_STAT_OK:
	vstream_printf("OK\n");
	vstream_fflush(VSTREAM_OUT);
	break;
    case VRFY_STAT_BAD:
	msg_warn("bad request format");
	break;
    case VRFY_STAT_FAIL:
	msg_warn("request failed");
	break;
    }
}