mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 14:35:26 +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,
|
||||
to be reported by named -v/-V. [RT #33366]
|
||||
|
||||
|
@@ -55,6 +55,7 @@
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include <sys/errno.h>
|
||||
|
||||
@@ -459,3 +460,34 @@ destroy_dbinstance(dbinstance_t *dbi) {
|
||||
/* return, and detach the memory */
|
||||
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