[Dovecot] critical feature from version 1 not migrated to version 2 = authentication configuration database per IP

DaLiV at apollo.lv DaLiV at apollo.lv
Mon Feb 14 16:20:25 EET 2011


Timo Sirainen wrote:
>> - another way (possible that will be more easiest, and good enough for
>> advanced configurations)  = single variable that may be set in block
>> of exact ip listener configuration , as for provided before example
>> may set variable "auth_db_suffix" = string("dc=domain1,dc=tld") for
>> definition "local mail.domain1.tld" and that variable are inserted in
>> auth block via variable inserting mechanism ...
>>
> Again not possible, because config parsing is done much earlier.
>
think for realization can take idea from that patch :
---------------------------------
--- src/auth/auth-request.c.orig 2010-12-30 11:42:54.000000000 +0200
--- src/auth/auth-request.c.orig 2010-12-30 11:42:54.000000000 +0200
@@ -1547,6 +1547,7 @@ auth_request_get_var_expand_table(const
                 { '\0', NULL, "login_user" },
                 { '\0', NULL, "login_username" },
                 { '\0', NULL, "login_domain" },
+               { 'x', NULL, NULL },
                 { '\0', NULL, NULL }
         };
         struct var_expand_table *tab;
@@ -1600,6 +1601,15 @@ auth_request_get_var_expand_table(const
                                                     auth_request);
                 }
         }
+       const char *lip2user[][2] = 
{{"127.0.0.3","dc=domain1,dc=tld1"},{"127.0.0.1","localhost"},{"127.0.0.2","dc=domain2,dc=tld2"}};
+       int arrsize=sizeof( lip2user ) / sizeof( lip2user[0]);
+       tab[18].value = ""; // default expanded to - emty string
+       int i;
+       for(i=0;i<arrsize;i++) {
+           if 
(strcmp(net_ip2addr(&auth_request->local_ip),(lip2user[i][0]))==0) {
+               tab[18].value = lip2user[i][1];
+           }
+       }
         return tab;
  }

---------------------------------
and there need only possibility to define pairs in config file for 
lip2user array initialization - then macro/variable %x will be available 
for substitution in all modules - as for ldap , as for filename-based 
parameters.
in exaple patch created static table to match lip to suffix
127.0.0.3 = "dc=domain1,dc=tld1"
127.0.0.1 = "localhost"
127.0.0.2 = "dc=domain2,dc=tld2"

how to initialize arrays from config - i'm was not explored for 
currently used coding structures

may create this array more complex = not as simple pair - but as for 
selective conversion:
%x1 lip to text1,
%x2 lip to text2,
%x3 lip to text3 ...
- then diffirent advanced configurations will be possible ...


More information about the dovecot mailing list