source: trunk/dns.sql@ 321

Last change on this file since 321 was 306, checked in by Kris Deugau, 13 years ago

/trunk

Fix addition of default NS records for reverse zones done in r300
See #26

File size: 9.4 KB
RevLine 
[50]1-- these lines could be run as a superuser. alter database name, username, password, group as appropriate.
2-- make sure to alter dnsdb.conf to match
3-- CREATE GROUP dnsdb;
4-- CREATE USER dnsdb WITH UNENCRYPTED PASSWORD 'secret' IN GROUP dnsdb;
5-- CREATE DATABASE dnsdb OWNED BY dnsdb;
6-- SET SESSION AUTHORIZATION 'dnsdb';
7
[212]8-- need a handy place to put eg a DB version identifier - useful for auto-upgrading a DB
9CREATE TABLE misc (
10 misc_id serial NOT NULL,
11 key text DEFAULT '' NOT NULL,
[215]12 value text DEFAULT '' NOT NULL
[212]13);
14
15COPY misc (misc_id, key, value) FROM stdin;
161 dbversion 1.0
17\.
18
[50]19CREATE TABLE default_records (
20 record_id serial NOT NULL,
21 group_id integer DEFAULT 1 NOT NULL,
[130]22 host text DEFAULT '' NOT NULL,
[50]23 "type" integer DEFAULT 1 NOT NULL,
[130]24 val text DEFAULT '' NOT NULL,
[50]25 distance integer DEFAULT 0 NOT NULL,
26 weight integer DEFAULT 0 NOT NULL,
27 port integer DEFAULT 0 NOT NULL,
28 ttl integer DEFAULT 86400 NOT NULL,
[130]29 description text
[50]30);
31
32-- default records for the default group
33COPY default_records (record_id, group_id, host, "type", val, distance, weight, port, ttl, description) FROM stdin;
341 1 ns1.example.com:hostmaster.DOMAIN 6 10800:3600:604800:5400 0 0 0 86400 \N
352 1 DOMAIN 2 ns2.example.com 0 0 0 7200 \N
363 1 DOMAIN 2 ns1.example.com 0 0 0 7200 \N
374 1 DOMAIN 1 10.0.0.4 0 0 0 7200 \N
385 1 DOMAIN 15 mx1.example.com 10 0 0 7200 \N
396 1 www.DOMAIN 5 DOMAIN 0 0 0 10800 \N
407 1 DOMAIN 16 "v=spf1 a mx -all" 0 0 0 10800 \N
41\.
42
[224]43CREATE TABLE default_rev_records (
44 record_id serial NOT NULL,
45 group_id integer DEFAULT 1 NOT NULL,
46 host text DEFAULT '' NOT NULL,
47 "type" integer DEFAULT 1 NOT NULL,
48 val text DEFAULT '' NOT NULL,
49 ttl integer DEFAULT 86400 NOT NULL,
50 description text
51);
52
[249]53COPY default_rev_records (record_id, group_id, host, "type", val, ttl, description) FROM stdin;
[224]541 1 hostmaster.ADMINDOMAIN:ns1.ADMINDOMAIN 6 3600:900:1048576:2560 3600
552 1 unused-%r.ADMINDOMAIN 65283 ZONE 3600
[306]563 1 ZONE 2 ns2.example.com 7200 \N
574 1 ZONE 2 ns1.example.com 7200 \N
[224]58\.
59
[85]60CREATE TABLE domains (
61 domain_id serial NOT NULL,
62 "domain" character varying(80) NOT NULL,
63 group_id integer DEFAULT 1 NOT NULL,
64 description character varying(255) DEFAULT ''::character varying NOT NULL,
65 status integer DEFAULT 1 NOT NULL,
66 zserial integer,
67 sertype character(1) DEFAULT 'D'::bpchar
68);
69
[224]70CREATE TABLE revzones (
71 rdns_id serial NOT NULL,
72 revnet cidr NOT NULL,
73 group_id integer DEFAULT 1 NOT NULL,
74 description character varying(255) DEFAULT ''::character varying NOT NULL,
75 status integer DEFAULT 1 NOT NULL,
76 zserial integer,
77 sertype character(1) DEFAULT 'D'::bpchar
78);
79
[85]80CREATE TABLE groups (
81 group_id serial NOT NULL,
82 parent_group_id integer DEFAULT 1 NOT NULL,
83 group_name character varying(255) DEFAULT ''::character varying NOT NULL,
84 permission_id integer DEFAULT 1 NOT NULL,
85 inherit_perm boolean DEFAULT true NOT NULL
86);
87
88-- Provide a basic default group
[86]89COPY groups (group_id, parent_group_id, permission_id, group_name) FROM stdin;
[85]901 1 1 default
91\.
92
[91]93-- entry is text due to possible long entries from AXFR - a domain with "many"
94-- odd records will overflow varchar(200)
[85]95CREATE TABLE log (
[89]96 log_id serial NOT NULL,
[85]97 domain_id integer,
[224]98 rdns_id integer,
[85]99 user_id integer,
100 group_id integer,
101 email character varying(60),
102 name character varying(60),
[91]103 entry text,
[85]104 stamp timestamp with time zone DEFAULT now()
105);
106
107CREATE TABLE permissions (
108 permission_id serial NOT NULL,
109 "admin" boolean DEFAULT false NOT NULL,
110 self_edit boolean DEFAULT false NOT NULL,
111 group_create boolean DEFAULT false NOT NULL,
112 group_edit boolean DEFAULT false NOT NULL,
113 group_delete boolean DEFAULT false NOT NULL,
114 user_create boolean DEFAULT false NOT NULL,
115 user_edit boolean DEFAULT false NOT NULL,
116 user_delete boolean DEFAULT false NOT NULL,
117 domain_create boolean DEFAULT false NOT NULL,
118 domain_edit boolean DEFAULT false NOT NULL,
119 domain_delete boolean DEFAULT false NOT NULL,
120 record_create boolean DEFAULT false NOT NULL,
121 record_edit boolean DEFAULT false NOT NULL,
122 record_delete boolean DEFAULT false NOT NULL,
[86]123 user_id integer UNIQUE,
124 group_id integer UNIQUE
[85]125);
126
127-- Need *two* basic permissions; one for the initial group, one for the default admin user
[86]128COPY permissions (permission_id, admin, self_edit, group_create, group_edit, group_delete, user_create, user_edit, user_delete, domain_create, domain_edit, domain_delete, record_create, record_edit, record_delete, user_id, group_id) FROM stdin;
[89]1291 f f f f f f f f t t t t t t \N 1
[86]1302 t f f f f f f f f f f f f f 1 \N
[85]131\.
132
[224]133-- rdns_id defaults to 0 since many records will not have an associated rDNS entry.
[50]134CREATE TABLE records (
[224]135 domain_id integer NOT NULL DEFAULT 0,
136 rdns_id integer NOT NULL DEFAULT 0,
[50]137 record_id serial NOT NULL,
[130]138 host text DEFAULT '' NOT NULL,
[50]139 "type" integer DEFAULT 1 NOT NULL,
[130]140 val text DEFAULT '' NOT NULL,
[50]141 distance integer DEFAULT 0 NOT NULL,
142 weight integer DEFAULT 0 NOT NULL,
143 port integer DEFAULT 0 NOT NULL,
[85]144 ttl integer DEFAULT 7200 NOT NULL,
[130]145 description text
[50]146);
147
148CREATE TABLE rectypes (
149 val integer NOT NULL,
[224]150 name character varying(20) NOT NULL,
[50]151 stdflag integer DEFAULT 1 NOT NULL,
[102]152 listorder integer DEFAULT 255 NOT NULL,
153 alphaorder integer DEFAULT 32768 NOT NULL
[50]154);
155
156-- Types are required. NB: these are vaguely read-only too
[85]157-- data from http://www.iana.org/assignments/dns-parameters
[102]158COPY rectypes (val, name, stdflag, listorder, alphaorder) FROM stdin;
1591 A 1 1 1
[300]1602 NS 2 9 37
[224]1613 MD 5 255 29
1624 MF 5 255 30
[300]1635 CNAME 2 11 9
[224]1646 SOA 0 0 53
1657 MB 5 255 28
1668 MG 5 255 31
1679 MR 5 255 33
16810 NULL 5 255 43
16911 WKS 5 255 64
[300]17012 PTR 3 5 46
[224]17113 HINFO 5 255 18
17214 MINFO 5 255 32
[300]17315 MX 1 10 34
17416 TXT 1 12 60
[224]17517 RP 4 255 48
17618 AFSDB 5 255 4
17719 X25 5 255 65
17820 ISDN 5 255 21
17921 RT 5 255 50
18022 NSAP 5 255 38
18123 NSAP-PTR 5 255 39
18224 SIG 5 255 51
18325 KEY 5 255 23
18426 PX 5 255 47
18527 GPOS 5 255 17
18628 AAAA 1 3 3
18729 LOC 5 255 25
18830 NXT 5 255 44
18931 EID 5 255 15
19032 NIMLOC 5 255 36
[300]19133 SRV 1 13 55
[224]19234 ATMA 5 255 6
19335 NAPTR 5 255 35
19436 KX 5 255 24
19537 CERT 5 255 8
19638 A6 5 3 2
19739 DNAME 5 255 12
19840 SINK 5 255 52
19941 OPT 5 255 45
20042 APL 5 255 5
20143 DS 5 255 14
20244 SSHFP 5 255 56
20345 IPSECKEY 5 255 20
20446 RRSIG 5 255 49
20547 NSEC 5 255 40
20648 DNSKEY 5 255 13
20749 DHCID 5 255 10
20850 NSEC3 5 255 41
20951 NSEC3PARAM 5 255 42
21055 HIP 5 255 19
21199 SPF 5 255 54
212100 UINFO 5 255 62
213101 UID 5 255 61
214102 GID 5 255 16
215103 UNSPEC 5 255 63
216249 TKEY 5 255 58
217250 TSIG 5 255 59
218251 IXFR 5 255 22
219252 AXFR 5 255 7
220253 MAILB 5 255 27
221254 MAILA 5 255 26
22232768 TA 5 255 57
22332769 DLV 5 255 11
[50]224\.
225
[224]226-- Custom types (ab)using the "Private use" range from 65280 to 65534
227COPY rectypes (val, name, stdflag, listorder, alphaorder) FROM stdin;
22865280 A+PTR 2 2 2
22965281 AAAA+PTR 2 4 4
[300]23065282 PTR template 3 6 2
23165283 A+PTR template 3 7 2
23265284 AAAA+PTR template 8 13 2
[224]233\.
234
[50]235CREATE TABLE users (
236 user_id serial NOT NULL,
237 group_id integer DEFAULT 1 NOT NULL,
238 username character varying(60) NOT NULL,
239 "password" character varying(34) NOT NULL,
[85]240 firstname character varying(60),
241 lastname character varying(60),
[50]242 phone character varying(15),
243 "type" character(1) DEFAULT 'S'::bpchar NOT NULL,
244 status integer DEFAULT 1 NOT NULL,
[85]245 permission_id integer DEFAULT 1 NOT NULL,
246 inherit_perm boolean DEFAULT true NOT NULL
[50]247);
248
249-- create initial default user? may be better to create an "initialize" script or something
[86]250COPY users (user_id, group_id, username, "password", firstname, lastname, phone, "type", status, permission_id, inherit_perm) FROM stdin;
[89]2511 1 admin $1$PfEBUv9d$wV2/UG4gmKk08DLmdE8/d. Initial User \N S 1 2 f
[50]252\.
253
254--
255-- contraints. add these here so initial data doesn't get added strangely.
256--
257
258-- primary keys
[65]259ALTER TABLE ONLY permissions
260 ADD CONSTRAINT permissions_permission_id_key UNIQUE (permission_id);
261
[50]262ALTER TABLE ONLY groups
263 ADD CONSTRAINT groups_group_id_key UNIQUE (group_id);
264
265ALTER TABLE ONLY domains
266 ADD CONSTRAINT domains_pkey PRIMARY KEY ("domain");
267
268ALTER TABLE ONLY domains
269 ADD CONSTRAINT domains_domain_id_key UNIQUE (domain_id);
270
271ALTER TABLE ONLY default_records
272 ADD CONSTRAINT default_records_pkey PRIMARY KEY (record_id);
273
274ALTER TABLE ONLY records
275 ADD CONSTRAINT records_pkey PRIMARY KEY (record_id);
276
277ALTER TABLE ONLY rectypes
278 ADD CONSTRAINT rectypes_pkey PRIMARY KEY (val, name);
279
280ALTER TABLE ONLY users
281 ADD CONSTRAINT users_pkey PRIMARY KEY (username);
282
283ALTER TABLE ONLY users
284 ADD CONSTRAINT uidu UNIQUE (user_id);
285
286-- foreign keys
[65]287-- fixme: permissions FK refs
[50]288ALTER TABLE ONLY domains
289 ADD CONSTRAINT "$1" FOREIGN KEY (group_id) REFERENCES groups(group_id);
290
291ALTER TABLE ONLY default_records
292 ADD CONSTRAINT "$1" FOREIGN KEY (group_id) REFERENCES groups(group_id);
293
294ALTER TABLE ONLY users
295 ADD CONSTRAINT "$1" FOREIGN KEY (group_id) REFERENCES groups(group_id);
296
297ALTER TABLE ONLY groups
298 ADD CONSTRAINT group_parent FOREIGN KEY (parent_group_id) REFERENCES groups(group_id);
[86]299
300-- set starting sequence numbers, since we've inserted data before they're active
[224]301SELECT pg_catalog.setval('misc_misc_id_seq', 2, false);
302SELECT pg_catalog.setval('default_records_record_id_seq', 8, false);
[300]303SELECT pg_catalog.setval('default_rev_records_record_id_seq', 5, false);
[86]304SELECT pg_catalog.setval('domains_domain_id_seq', 1, false);
[224]305SELECT pg_catalog.setval('groups_group_id_seq', 2, false);
306SELECT pg_catalog.setval('permissions_permission_id_seq', 3, false);
[86]307SELECT pg_catalog.setval('records_record_id_seq', 1, false);
308SELECT pg_catalog.setval('users_user_id_seq', 2, false);
Note: See TracBrowser for help on using the repository browser.