On 8/24/19 10:06 PM, Gilles Chehade wrote:
> On Sat, Aug 24, 2019 at 12:32:05PM -0700, Darren S. wrote:
>> OpenBSD 6.5 amd64
>> OpenSMTPD 6.5.0
>>
>> port [port]
>>         Listen on the given port instead of the default port 25.
>>
>> I wanted to confirm if service names are intended to be supported for
>> `listen on` option in smtpd.conf.
>>
>> These result in syntax failure:
>>
>> listen on lo port smtp
>> listen on lo port smtps
>>
>> These do not:
>>
>> listen on lo port 25
>> listen on lo port 465
>>
>> This also does not:
>>
>> listen on lo port submission
>>
>> Found it curious that `submission` may be used in place of a port
>> number but not the other service names.
>>
> 
> this is because `smtp' and `smtps` are keywords, so they must be quoted:
> 
> listen on lo port "smtp"
> 
> 
Don't know if there's interest, but considering the port argument is
non-optional and smtp and smtps are valid (and imho not unreasonable)
port names I reckon we could add them explicitly so they can be used
without quotes.

martijn@

Index: parse.y
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/parse.y,v
retrieving revision 1.258
diff -u -p -r1.258 parse.y
--- parse.y     23 Aug 2019 19:05:01 -0000      1.258
+++ parse.y     24 Aug 2019 20:14:40 -0000
@@ -1863,6 +1863,38 @@ opt_if_listen : INET4 {
                        free($2);
                        listen_opts.port = ntohs(servent->s_port);
                }
+               | PORT SMTP                     {
+                       struct servent *servent;
+
+                       if (listen_opts.options & LO_PORT) {
+                               yyerror("port already specified");
+                               YYERROR;
+                       }
+                       listen_opts.options |= LO_PORT;
+
+                       servent = getservbyname("smtp", "tcp");
+                       if (servent == NULL) {
+                               yyerror("invalid port: smtp");
+                               YYERROR;
+                       }
+                       listen_opts.port = ntohs(servent->s_port);
+               }
+               | PORT SMTPS                    {
+                       struct servent *servent;
+
+                       if (listen_opts.options & LO_PORT) {
+                               yyerror("port already specified");
+                               YYERROR;
+                       }
+                       listen_opts.options |= LO_PORT;
+
+                       servent = getservbyname("smtps", "tcp");
+                       if (servent == NULL) {
+                               yyerror("invalid port: smtps");
+                               YYERROR;
+                       }
+                       listen_opts.port = ntohs(servent->s_port);
+               }
                | PORT NUMBER                   {
                        if (listen_opts.options & LO_PORT) {
                                yyerror("port already specified");

Reply via email to