Exemple #1
0
sfsistat clamfi_envrcpt(SMFICTX *ctx, char **argv) {
    struct CLAMFI *cf;

    if(!(cf = (struct CLAMFI *)smfi_getpriv(ctx)))
	return SMFIS_CONTINUE; /* whatever */

    if(cf->all_whitelisted)
	cf->all_whitelisted &= whitelisted(argv[0], 0);

    if(multircpt) {
	void *new_rcpt = realloc(cf->recipients, (cf->nrecipients + 1) * sizeof(*(cf->recipients)));
	unsigned int rcpt_cnt;
	if(!new_rcpt) {
	    logg("!Failed to allocate array for new recipient\n");
	    nullify(ctx, cf, CF_ANY);
	    free(cf);
	    return FailAction;
	}
	cf->recipients = new_rcpt;
	rcpt_cnt = cf->nrecipients++;
	if(!(cf->recipients[rcpt_cnt] = strdup(argv[0]))) {
	    logg("!Failed to allocate space for new recipient\n");
	    nullify(ctx, cf, CF_ANY);
	    free(cf);
	    return FailAction;
	}
    }

    return SMFIS_CONTINUE;
}
Exemple #2
0
sfsistat clamfi_envfrom(SMFICTX *ctx, char **argv) {
    struct CLAMFI *cf;
    const char *login = smfi_getsymval(ctx, "{auth_authen}");

    if(login && smtpauthed(login)) {
        logg("*Skipping scan for authenticated user %s\n", login);
        return SMFIS_ACCEPT;
    }

    if(whitelisted(argv[0], 1)) {
        logg("*Skipping scan for %s (whitelisted from)\n", argv[0]);
        return SMFIS_ACCEPT;
    }

    if(!(cf = (struct CLAMFI *)malloc(sizeof(*cf)))) {
        logg("!Failed to allocate CLAMFI struct\n");
        return FailAction;
    }
    cf->totsz = 0;
    cf->bufsz = 0;
    cf->main = cf->alt = -1;
    cf->all_whitelisted = 1;
    cf->gotbody = 0;
    cf->msg_subj = cf->msg_date = cf->msg_id = NULL;
    if(addxvirus==1) {
        cf->scanned_count = 0;
        cf->status_count = 0;
    }
    smfi_setpriv(ctx, (void *)cf);

    return SMFIS_CONTINUE;
}
Exemple #3
0
sfsistat clamfi_envrcpt(SMFICTX *ctx, char **argv) {
    struct CLAMFI *cf;

    if(!(cf = (struct CLAMFI *)smfi_getpriv(ctx)))
        return SMFIS_CONTINUE; /* whatever */

    if(cf->all_whitelisted)
        cf->all_whitelisted &= whitelisted(argv[0], 0);
    return SMFIS_CONTINUE;
}