Download raw body.
smtpd: actually save the services supported by proc tables
for proc tables the actual services supported is known only after the
handshake. However, we still assume K_ANY for them, and it's a bit
gross. This is a step toward respecting what the actual table reported
it supports.
(this is also needed for Gilles' diff to offload authentication, since
otherwise all proc tables will hit the K_AUTH codepath.)
We could also remove K_ANY and leave the default services for the table
proc to zero at this point.
ok?
diff /home/op/w/smtpd
commit - 9e9f678fa09b2345ea7d34e8e699e6e3b1f62316
path + /home/op/w/smtpd
blob - 0ab99d7f4f490816061429b1a0c96d9cb17db4d4
file + smtpd.h
--- smtpd.h
+++ smtpd.h
@@ -356,6 +356,7 @@ struct table {
enum table_type t_type;
char t_config[PATH_MAX];
+ unsigned int t_services;
void *t_handle;
struct table_backend *t_backend;
};
blob - d24892ede645c088aaef52368cf10db7a37108bb
file + table.c
--- table.c
+++ table.c
@@ -245,6 +245,7 @@ table_create(struct smtpd *conf, const char *backend,
fatalx("table_create: backend \"%s\" does not exist", backend);
t = xcalloc(1, sizeof(*t));
+ t->t_services = tb->services;
t->t_backend = tb;
if (config) {
@@ -341,7 +342,7 @@ table_check_type(struct table *t, uint32_t mask)
int
table_check_service(struct table *t, uint32_t mask)
{
- return t->t_backend->services & mask;
+ return t->t_services & mask;
}
int
blob - e7f2a736bbd27e0c60e1f6a9d5e57cddd3a64fcd
file + table_proc.c
--- table_proc.c
+++ table_proc.c
@@ -172,6 +172,7 @@ table_proc_open(struct table *table)
if (services == 0)
fatalx("table-proc: no services registered");
+ table->t_services = services;
table->t_handle = priv;
return (1);
smtpd: actually save the services supported by proc tables