--- spamc.c 2004-08-27 10:37:42.000000000 -0600 +++ spamc.c 2005-06-15 14:38:30.000000000 -0600 @@ -161,6 +161,7 @@ usg(" -h Print this help message and exit.\n"); usg(" -V Print spamc version and exit.\n"); usg(" -f (Now default, ignored.)\n"); + usg(" -z path Specify a Path to the user_prefs directory.\n"); usg("\n"); } @@ -173,13 +174,13 @@ */ int read_args(int argc, char **argv, - int *max_size, char **username, + int *max_size, char **username, char **userprefs, struct transport *ptrn) { #ifndef _WIN32 - const char *opts = "-BcrRd:e:fyp:t:s:u:xSHU:ElhV"; + const char *opts = "-BcrRd:e:fyp:t:s:u:z:xSHU:ElhV"; #else - const char *opts = "-BcrRd:fyp:t:s:u:xSHElhV"; + const char *opts = "-BcrRd:fyp:t:s:u:z:xSHElhV"; #endif int opt; int ret = EX_OK; @@ -280,6 +281,11 @@ *username = optarg; break; } + case 'z': + { + *userprefs = optarg; + break; + } #ifndef _WIN32 case 'U': { @@ -455,6 +461,7 @@ { int max_size; char *username; + char *userprefs; struct transport trans; struct message m; int out_fd = -1; @@ -476,7 +483,8 @@ /* Now parse the command line arguments. First, set the defaults. */ max_size = 250 * 1024; username = NULL; - if ((ret = read_args(argc, argv, &max_size, &username, &trans)) != EX_OK) { + userprefs = NULL; + if ((ret = read_args(argc, argv, &max_size, &username, &userprefs, &trans)) != EX_OK) { if (ret == EX_TEMPFAIL ) ret = EX_OK; goto finish; @@ -518,8 +526,9 @@ if (ret == EX_OK) { - ret = message_filter(&trans, username, flags, &m); + ret = message_filter(&trans, username, userprefs, flags, &m); free(username); username = NULL; + free(userprefs); userprefs = NULL; if (ret == EX_OK) { get_output_fd(&out_fd); @@ -543,6 +552,7 @@ } } free(username); + free(userprefs); /* FAIL: */ get_output_fd(&out_fd);