--- libspamc.c 2004-08-27 10:37:43.000000000 -0600 +++ libspamc.c.new 2005-06-15 14:38:10.000000000 -0600 @@ -805,7 +805,7 @@ return EX_PROTOCOL; } -int message_filter(struct transport *tp, const char *username, +int message_filter(struct transport *tp, const char *username, const char *userprefs, int flags, struct message *m) { char buf[8192]; @@ -880,6 +880,18 @@ strcat(buf + len, "\r\n"); len += strlen(buf + len); } + if (userprefs != NULL) { + if (strlen(userprefs) + 8 >= (bufsiz - len)) { + free(m->out); + m->out = m->msg; + m->out_len = m->msg_len; + return EX_OSERR; + } + strcpy(buf + len, "UserPrefs: "); + strcat(buf + len, userprefs); + strcat(buf + len, "\r\n"); + len += strlen(buf + len); + } if ((m->msg_len > 9999999) || ((len + 27) >= (bufsiz - len))) { free(m->out); m->out = m->msg; @@ -1048,7 +1060,7 @@ } -int message_process(struct transport *trans, char *username, int max_size, +int message_process(struct transport *trans, char *username, char *userprefs, int max_size, int in_fd, int out_fd, const int flags) { int ret; @@ -1060,7 +1072,7 @@ ret = message_read(in_fd, flags, &m); if (ret != EX_OK) goto FAIL; - ret = message_filter(trans, username, flags, &m); + ret = message_filter(trans, username, userprefs, flags, &m); if (ret != EX_OK) goto FAIL; if (message_write(out_fd, &m) < 0) @@ -1097,7 +1109,7 @@ } /* Aug 14, 2002 bj: Obsolete! */ -int process_message(struct transport *tp, char *username, int max_size, +int process_message(struct transport *tp, char *username, char *userprefs, int max_size, int in_fd, int out_fd, const int my_check_only, const int my_safe_fallback) { @@ -1109,7 +1121,7 @@ if (my_safe_fallback) flags |= SPAMC_SAFE_FALLBACK; - return message_process(tp, username, max_size, in_fd, out_fd, flags); + return message_process(tp, username, userprefs, max_size, in_fd, out_fd, flags); } /*