On 8/23/19 7:06 PM, Gilles Chehade wrote:
> On Fri, Aug 23, 2019 at 09:03:51AM +0200, Martijn van Duren wrote:
>> Hello,
>>
>
> Hello,
>
>
>> When running processes with proc-exec any logging send over stderr is
>> not very intelligible since the process name is automatically generated
>> and results in <dynproc:%08x>, which make them hard to read.
>>
>
> Agreed
>
>
>> To clean this up I reckon we can do three things:
>> 1) Add an extra optional proc parameter that sets the name. Diff below
>> does this.
>> 2) Change the process name to match the filter name.
>> 3) Do both
>>
>> I reckon we're still early enough in the development process for us to
>> change the default processor name in proc-exec.
>>
>> Thoughts?
>>
>
> I'm unsure about 1- because it really reads cumbersome in my opinion:
>
> filter "rspamd" proc-exec proc "rspamd" "/usr/local/bin/filter-rspamd"
>
> Option 2- has my preference because it is really what you'd expect out
> of the box, it was on my todo but if you're looking into it I'd rather
> let you do it :-)
>
>
I agree.
That would be this diff.
OK?
martijn@
Index: parse.y
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/parse.y,v
retrieving revision 1.257
diff -u -p -r1.257 parse.y
--- parse.y 11 Aug 2019 17:23:12 -0000 1.257
+++ parse.y 23 Aug 2019 17:33:17 -0000
@@ -108,7 +108,6 @@ struct rule *rule;
struct processor *processor;
struct filter_config *filter_config;
static uint32_t last_dynchain_id = 1;
-static uint32_t last_dynproc_id = 1;
enum listen_options {
LO_FAMILY = 0x000001,
@@ -1598,12 +1597,6 @@ FILTER STRING PROC STRING {
}
|
FILTER STRING PROC_EXEC STRING {
- char buffer[128];
-
- do {
- (void)snprintf(buffer, sizeof buffer, "<dynproc:%08x>",
last_dynproc_id++);
- } while (dict_check(conf->sc_processors_dict, buffer));
-
if (dict_get(conf->sc_filters_dict, $2)) {
yyerror("filter already exists with that name: %s", $2);
free($2);
@@ -1617,7 +1610,7 @@ FILTER STRING PROC_EXEC STRING {
filter_config = xcalloc(1, sizeof *filter_config);
filter_config->filter_type = FILTER_TYPE_PROC;
filter_config->name = $2;
- filter_config->proc = xstrdup(buffer);
+ filter_config->proc = xstrdup($2);
dict_set(conf->sc_filters_dict, $2, filter_config);
} proc_params {
dict_set(conf->sc_processors_dict, filter_config->proc, processor);