pdsql

package
v0.0.0-...-cf0c5cd Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 19, 2020 License: Apache-2.0 Imports: 12 Imported by: 0

README

+++ title = "pdsql" description = "pdsql use powerdns generic sql as backend." weight = 10 tags = [ "plugin" , "pdsql" ] categories = [ "plugin", "external" ] date = "2017-12-09T10:26:00+08:00" repo = "https://github.com/wenerme/wps" home = "https://github.com/wenerme/wps/blob/master/coredns/plugin/pdsql/README.md" +++

pdsql

pdsql use PowerDNS generic sql as backend.

Use jinzhu/gorm to handle database, support many database as gorm dose.

Syntax

pdsql <dialect> <arg> {
    # enable debug mode
    debug [db]
    # create table for test
    auto-migrate
}

Install Driver

pdsql need db driver for dialect, to install a driver you need to add import in plugin.cfg, like

pdsql_mysql:github.com/jinzhu/gorm/dialects/mysql
pdsql_sqlite:github.com/jinzhu/gorm/dialects/sqlite

pdsql_mysql and pdsql_sqlite are meaningless, choose to prevent duplicated.

Examples

Start a server on the 1053 port, use test.db as backend.

test.:1053 {
    pdsql sqlite3 ./test.db {
        debug db
        auto-migrate
    }
}

Prepare data for test.

# Insert records for wener.test
sqlite3 ./test.db 'insert into records(name,type,content,ttl,disabled)values("wener.test","A","192.168.1.1",3600,0)'
sqlite3 ./test.db 'insert into records(name,type,content,ttl,disabled)values("wener.test","TXT","TXT Here",3600,0)'

When queried for "wener.test. A", CoreDNS will respond with:

;; QUESTION SECTION:
;wener.test.			IN	A

;; ANSWER SECTION:
wener.test.		3600	IN	A	192.168.1.1

When queried for "wener.test. ANY", CoreDNS will respond with:

;; QUESTION SECTION:
;wener.test.			IN	ANY

;; ANSWER SECTION:
wener.test.		3600	IN	A	192.168.1.1
wener.test.		3600	IN	TXT	"TXT Here"
Wildcard
# domain id 1
sqlite3 ./test.db 'insert into domains(name,type)values("example.test","NATIVE")'
sqlite3 ./test.db 'insert into records(domain_id,name,type,content,ttl,disabled)values(1,"*.example.test","A","192.168.1.1",3600,0)'

When queried for "first.example.test. A", CoreDNS will respond with:

;; QUESTION SECTION:
;first.example.test.		IN	A

;; ANSWER SECTION:
first.example.test.	3600	IN	A	192.168.1.1

TODO

  • support wildcard record

Documentation

Overview

Package whoami implements a plugin that returns details about the resolving querying it.

Index

Constants

View Source
const Name = "pdsql"

Variables

This section is empty.

Functions

func ParseSOA

func ParseSOA(rr *dns.SOA, line string) bool

func WildcardMatch

func WildcardMatch(s1, s2 string) bool

Dummy wildcard match

Types

type Domain

type Domain struct {
	ID             uint           `gorm:"primary_key"`
	Name           string         `gorm:"type:varchar(255);not null"`
	Master         sql.NullString `gorm:"type:varchar(128)"`
	LastCheck      sql.NullInt64
	Type           string `gorm:"type:varchar(6);not null"`
	NotifiedSerial sql.NullInt64
	Account        sql.NullString `gorm:"type:varchar(40)"`
}

type PowerDNSGenericSQLBackend

type PowerDNSGenericSQLBackend struct {
	*gorm.DB
	Debug bool
	Next  plugin.Handler
}

func (PowerDNSGenericSQLBackend) AutoMigrate

func (self PowerDNSGenericSQLBackend) AutoMigrate() error

func (PowerDNSGenericSQLBackend) Name

func (self PowerDNSGenericSQLBackend) Name() string

func (PowerDNSGenericSQLBackend) SearchWildcard

func (self PowerDNSGenericSQLBackend) SearchWildcard(qname string, qtype uint16) (redords []*Record, err error)

func (PowerDNSGenericSQLBackend) ServeDNS

type Record

type Record struct {
	ID        uint `gorm:"primary_key"`
	DomainId  sql.NullInt64
	Name      string `gorm:"type:varchar(255)"`
	Type      string `gorm:"type:varchar(10)"`
	Content   string `gorm:"type:varchar(64000)"`
	Ttl       uint32
	Prio      int
	ChangDate int
	Disabled  bool
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL