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; }
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; }
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; }