On 04.04.2013 04:35, Evan Hunt wrote:
Thanks certainly blows up the possibility of doing native GeoDNS at the
moment? Any chance I am overlooking a method which I could effectively
get the clients address into a MySQL query with the current 9.9.2
release?

It's not quite the same as %client%, but I suggest you take a look at
contrib/dlz/example/dlz_example.c, note the use of the clientinfo
structure in dlz_lookup(), and see if it's any use to you.  You'd have
to hack the corresponding routine in the mysql DLZ driver.

Incidentally, native GeoIP support has been added as a feature in the
9.10 release -- you'll be able to use it to specify ACLs, e.g.,
"match-clients { geoip country US; };".  I expect it to be published
in Q4 of this year.

Hmm. A positive step. I see that in 9.8 it was:

static isc_result_t
mysql_allnodes(const char *zone, void *driverarg, void *dbdata,
               dns_sdlzallnodes_t *allnodes)


and now it is:

static isc_result_t
mysql_lookup(const char *zone, const char *name, void *driverarg,
             void *dbdata, dns_sdlzlookup_t *lookup,
             dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo)

Very glad to see that it is now available in the SDLZ API, in principle. But, it is still not used: for the %client% (actually $client$) to work, the dbi->client member must set to actual string ptr, to be used by build_querystring(), which processes all $escape$'s.

For this to happen, mysql_get_resultset() should be passed 'char *client' instead of NULL, from mysql_lookup() and others, but UNUSED(clientinfo); is there.

The block under 'if (strcmp(name, "source-addr") == 0)' in contrib/dlz/example/dlz_example.c does almost the needed thing, except that it also prints port (BTW, that better be handled by isc_sockaddr_format() imported, if port really needed). So probably isc_netaddr_totext() should be used (to eliminate code duplication).

Then, note that:

1) Still allnodes() method in SDLZ don't receive 'clientinfo', but this may
   be inconsistent for DLZ users: if one answers to client with his IP addr
   on lookup, probably the same RR should to AXFR to that client.

2) The other drivers utilizing build_querystring() need also be patched to
   set proper dbi->client, that is,

   * drivers/dlz_mysql_driver.c
   * drivers/dlz_ldap_driver.c
   * drivers/dlz_postgres_driver.c
   * drivers/dlz_odbc_driver.c
   * modules/ldap/dlz_ldap_dynamic.c
   * modules/wildcard/dlz_wildcard_dynamic.c

  Fortunately, they all call *_get_results*() function with 'client' arg,
  all the same as in mysql_lookup(), so the fix is similar; may be put in
  to helper func in common file? e.g. modules/common/dlz_dbi.c or
  drivers/sdlz_helper.c (they both already duplicate build_querystring() and
  other, though).

So, as fixing NULL dereferencing segfault by adding long-awaited feature is good, could you please do that ? :-) Processing client's IP address in DLZ queries is not limited to just GeoIP.

--
Vadim Goncharov     <vgoncha...@nic.ru>           RU-Center
NET Department                            http://www.nic.ru
NET-SYS Group             phone:+7(495)737-7646  (ext.4019)
_______________________________________________
Please visit https://lists.isc.org/mailman/listinfo/bind-users to unsubscribe 
from this list

bind-users mailing list
bind-users@lists.isc.org
https://lists.isc.org/mailman/listinfo/bind-users

Reply via email to