mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-03 08:05:21 +00:00
[master] mysql DLZ module
3569. [contrib] Ported mysql DLZ driver to dynamically-loadable module, and added multithread support. [RT #33394]
This commit is contained in:
3
CHANGES
3
CHANGES
@@ -1,3 +1,6 @@
|
|||||||
|
3569. [contrib] Ported mysql DLZ driver to dynamically-loadable
|
||||||
|
module, and added multithread support. [RT #33394]
|
||||||
|
|
||||||
3568. [cleanup] Add a product description line to the version file,
|
3568. [cleanup] Add a product description line to the version file,
|
||||||
to be reported by named -v/-V. [RT #33366]
|
to be reported by named -v/-V. [RT #33366]
|
||||||
|
|
||||||
|
@@ -55,6 +55,7 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#include <sys/errno.h>
|
#include <sys/errno.h>
|
||||||
|
|
||||||
@@ -459,3 +460,34 @@ destroy_dbinstance(dbinstance_t *dbi) {
|
|||||||
/* return, and detach the memory */
|
/* return, and detach the memory */
|
||||||
free(dbi);
|
free(dbi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
get_parameter_value(const char *input, const char* key) {
|
||||||
|
int keylen;
|
||||||
|
char *keystart;
|
||||||
|
char value[255];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (key == NULL || input == NULL || *input == '\0')
|
||||||
|
return (NULL);
|
||||||
|
|
||||||
|
keylen = strlen(key);
|
||||||
|
|
||||||
|
if (keylen < 1)
|
||||||
|
return (NULL);
|
||||||
|
|
||||||
|
keystart = strstr(input, key);
|
||||||
|
|
||||||
|
if (keystart == NULL)
|
||||||
|
return (NULL);
|
||||||
|
|
||||||
|
for (i = 0; i < 255; i++) {
|
||||||
|
value[i] = keystart[keylen + i];
|
||||||
|
if (isspace(value[i]) || value[i] == '\0') {
|
||||||
|
value[i] = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (strdup(value));
|
||||||
|
}
|
||||||
|
21
contrib/dlz/modules/mysql/Makefile
Normal file
21
contrib/dlz/modules/mysql/Makefile
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
prefix = /usr
|
||||||
|
libdir = $(prefix)/lib/bind9
|
||||||
|
|
||||||
|
CFLAGS=-fPIC -g -I../include
|
||||||
|
MYSQL_LIBS=-lmysqlclient
|
||||||
|
|
||||||
|
all: dlz_mysql_dynamic.so
|
||||||
|
|
||||||
|
dlz_dbi.o: ../common/dlz_dbi.c
|
||||||
|
$(CC) $(CFLAGS) -c ../common/dlz_dbi.c
|
||||||
|
|
||||||
|
dlz_mysql_dynamic.so: dlz_mysql_dynamic.c dlz_dbi.o
|
||||||
|
$(CC) $(CFLAGS) -shared -o dlz_mysql_dynamic.so \
|
||||||
|
dlz_mysql_dynamic.c dlz_dbi.o $(MYSQL_LIBS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f dlz_mysql_dynamic.so *.o
|
||||||
|
|
||||||
|
install: dlz_mysql_dynamic.so
|
||||||
|
mkdir -p $(DESTDIR)$(libdir)
|
||||||
|
install dlz_mysql_dynamic.so $(DESTDIR)$(libdir)
|
1113
contrib/dlz/modules/mysql/dlz_mysql_dynamic.c
Normal file
1113
contrib/dlz/modules/mysql/dlz_mysql_dynamic.c
Normal file
File diff suppressed because it is too large
Load Diff
7
contrib/dlz/modules/mysql/testing/README
Normal file
7
contrib/dlz/modules/mysql/testing/README
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
These files were used for testing on Ubuntu Linux using MySQL
|
||||||
|
|
||||||
|
- Install MySQL: sudo apt-get install mysql-server
|
||||||
|
- Run "mysql --user=USER --password=PASSWORD < dlz.schema" to set up database
|
||||||
|
- Run "mysql --user=USER --password=PASSWORD < dlz.data" to populate it
|
||||||
|
- update named.conf with correct USER and PASSWORD
|
||||||
|
|
11
contrib/dlz/modules/mysql/testing/dlz.data
Normal file
11
contrib/dlz/modules/mysql/testing/dlz.data
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
use BindDB;
|
||||||
|
INSERT INTO `records` (`id`, `zone`, `ttl`, `type`, `host`, `mx_priority`, `data`, `primary_ns`, `resp_contact`, `serial`, `refresh`, `retry`, `expire`, `minimum`) VALUES
|
||||||
|
('', 'example.com', 86400, 'SOA', '@', NULL, NULL, 'ns1.example.com.', 'info.example.com.', 2011043001, 10800, 7200, 604800, 86400),
|
||||||
|
('', 'example.com', 86400, 'NS', '@', NULL, 'ns1.example.com.', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||||
|
('', 'example.com', 86400, 'NS', '@', NULL, 'ns2.example.com.', NULL, NULL, NULL, NULL, NULL, NULL, NULL), ('', 'example.com', 86400, 'MX', '@',
|
||||||
|
10, 'mail.example.com.', NULL, NULL, NULL, NULL, NULL, NULL, NULL), ('', 'example.com', 86400, 'A', '@', NULL, '192.168.0.2', NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL), ('', 'example.com', 86400, 'CNAME', 'www', NULL, '@', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||||
|
('', 'example.com', 86400, 'A', 'ns1', NULL, '192.168.0.111', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||||
|
('', 'example.com', 86400, 'A', 'ns2', NULL, '192.168.0.222', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||||
|
('', 'example.com', 86400, 'A', 'mail', NULL, '192.168.0.3', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||||
|
('', 'example.com', 86400, 'TXT', '@', NULL, 'v=spf1 ip:192.168.0.3 ~all', NULL, NULL, NULL, NULL, NULL, NULL, NULL)
|
30
contrib/dlz/modules/mysql/testing/dlz.schema
Normal file
30
contrib/dlz/modules/mysql/testing/dlz.schema
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
CREATE DATABASE `BindDB` DEFAULT CHARACTER SET latin1;
|
||||||
|
USE `BindDB`;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `records` (
|
||||||
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`zone` varchar(255) NOT NULL,
|
||||||
|
`ttl` int(11) NOT NULL DEFAULT '86400',
|
||||||
|
`type` varchar(255) NOT NULL,
|
||||||
|
`host` varchar(255) NOT NULL DEFAULT '@',
|
||||||
|
`mx_priority` int(11) DEFAULT NULL,
|
||||||
|
`data` text,
|
||||||
|
`primary_ns` varchar(255) DEFAULT NULL,
|
||||||
|
`resp_contact` varchar(255) DEFAULT NULL,
|
||||||
|
`serial` bigint(20) DEFAULT NULL,
|
||||||
|
`refresh` int(11) DEFAULT NULL,
|
||||||
|
`retry` int(11) DEFAULT NULL,
|
||||||
|
`expire` int(11) DEFAULT NULL,
|
||||||
|
`minimum` int(11) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `type` (`type`),
|
||||||
|
KEY `host` (`host`),
|
||||||
|
KEY `zone` (`zone`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `xfr` (
|
||||||
|
`zone` varchar(255) NOT NULL,
|
||||||
|
`client` varchar(255) NOT NULL,
|
||||||
|
KEY `zone` (`zone`),
|
||||||
|
KEY `client` (`client`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
49
contrib/dlz/modules/mysql/testing/named.conf
Normal file
49
contrib/dlz/modules/mysql/testing/named.conf
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
* AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||||
|
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
controls { };
|
||||||
|
|
||||||
|
options {
|
||||||
|
directory ".";
|
||||||
|
port 5300;
|
||||||
|
pid-file "named.pid";
|
||||||
|
session-keyfile "session.key";
|
||||||
|
listen-on { any; };
|
||||||
|
listen-on-v6 { none; };
|
||||||
|
recursion no;
|
||||||
|
};
|
||||||
|
|
||||||
|
key rndc_key {
|
||||||
|
secret "1234abcd8765";
|
||||||
|
algorithm hmac-md5;
|
||||||
|
};
|
||||||
|
|
||||||
|
controls {
|
||||||
|
inet 127.0.0.1 port 9953 allow { any; } keys { rndc_key; };
|
||||||
|
};
|
||||||
|
|
||||||
|
dlz "test" {
|
||||||
|
database "dlopen ../dlz_mysql_dynamic.so
|
||||||
|
{
|
||||||
|
host=127.0.0.1 port=3306 socket=/tmp/mysql.sock
|
||||||
|
dbname=BindDB user=USER pass=PASSWORD threads=2
|
||||||
|
}
|
||||||
|
{SELECT zone FROM records WHERE zone = '$zone$'}
|
||||||
|
{SELECT ttl, type, mx_priority, IF(type = 'TXT', CONCAT('\"',data,'\"'), data) AS data FROM records WHERE zone = '$zone$' AND host = '$record$' AND type <> 'SOA' AND type <> 'NS'}
|
||||||
|
{SELECT ttl, type, data, primary_ns, resp_contact, serial, refresh, retry, expire, minimum FROM records WHERE zone = '$zone$' AND (type = 'SOA' OR type='NS')}
|
||||||
|
{SELECT ttl, type, host, mx_priority, IF(type = 'TXT', CONCAT('\"',data,'\"'), data) AS data, resp_contact, serial, refresh, retry, expire, minimum FROM records WHERE zone = '$zone$' AND type <> 'SOA' AND type <> 'NS'}
|
||||||
|
{SELECT zone FROM xfr where zone='$zone$' AND client = '$client$'}";
|
||||||
|
};
|
Reference in New Issue
Block a user