source: trunk/dns.sql@ 337

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

/trunk

Clean up several bugs in handling of NS records in revzones:

  • bad substitutions on new record
  • bad substitutions on zone add
  • funny-looking display and info/log messages
File size: 9.4 KB
Line 
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
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,
12 value text DEFAULT '' NOT NULL
13);
14
15COPY misc (misc_id, key, value) FROM stdin;
161 dbversion 1.0
17\.
18
19CREATE TABLE default_records (
20 record_id serial NOT NULL,
21 group_id integer DEFAULT 1 NOT NULL,
22 host text DEFAULT '' NOT NULL,
23 "type" integer DEFAULT 1 NOT NULL,
24 val text DEFAULT '' NOT NULL,
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,
29 description text
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
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
53COPY default_rev_records (record_id, group_id, host, "type", val, ttl, description) FROM stdin;
541 1 hostmaster.ADMINDOMAIN:ns1.ADMINDOMAIN 6 3600:900:1048576:2560 3600
552 1 unused-%r.ADMINDOMAIN 65283 ZONE 3600
563 1 ns2.example.com 2 ZONE 7200 \N
574 1 ns1.example.com 2 ZONE 7200 \N
58\.
59
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
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
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
89COPY groups (group_id, parent_group_id, permission_id, group_name) FROM stdin;
901 1 1 default
91\.
92
93-- entry is text due to possible long entries from AXFR - a domain with "many"
94-- odd records will overflow varchar(200)
95CREATE TABLE log (
96 log_id serial NOT NULL,
97 domain_id integer,
98 rdns_id integer,
99 user_id integer,
100 group_id integer,
101 email character varying(60),
102 name character varying(60),
103 entry text,
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,
123 user_id integer UNIQUE,
124 group_id integer UNIQUE
125);
126
127-- Need *two* basic permissions; one for the initial group, one for the default admin user
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;
1291 f f f f f f f f t t t t t t \N 1
1302 t f f f f f f f f f f f f f 1 \N
131\.
132
133-- rdns_id defaults to 0 since many records will not have an associated rDNS entry.
134CREATE TABLE records (
135 domain_id integer NOT NULL DEFAULT 0,
136 rdns_id integer NOT NULL DEFAULT 0,
137 record_id serial NOT NULL,
138 host text DEFAULT '' NOT NULL,
139 "type" integer DEFAULT 1 NOT NULL,
140 val text DEFAULT '' NOT NULL,
141 distance integer DEFAULT 0 NOT NULL,
142 weight integer DEFAULT 0 NOT NULL,
143 port integer DEFAULT 0 NOT NULL,
144 ttl integer DEFAULT 7200 NOT NULL,
145 description text
146);
147
148CREATE TABLE rectypes (
149 val integer NOT NULL,
150 name character varying(20) NOT NULL,
151 stdflag integer DEFAULT 1 NOT NULL,
152 listorder integer DEFAULT 255 NOT NULL,
153 alphaorder integer DEFAULT 32768 NOT NULL
154);
155
156-- Types are required. NB: these are vaguely read-only too
157-- data from http://www.iana.org/assignments/dns-parameters
158COPY rectypes (val, name, stdflag, listorder, alphaorder) FROM stdin;
1591 A 1 1 1
1602 NS 2 9 37
1613 MD 5 255 29
1624 MF 5 255 30
1635 CNAME 2 11 9
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
17012 PTR 3 5 46
17113 HINFO 5 255 18
17214 MINFO 5 255 32
17315 MX 1 10 34
17416 TXT 1 12 60
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
19133 SRV 1 13 55
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
224\.
225
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
23065282 PTR template 3 6 2
23165283 A+PTR template 3 7 2
23265284 AAAA+PTR template 8 13 2
233\.
234
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,
240 firstname character varying(60),
241 lastname character varying(60),
242 phone character varying(15),
243 "type" character(1) DEFAULT 'S'::bpchar NOT NULL,
244 status integer DEFAULT 1 NOT NULL,
245 permission_id integer DEFAULT 1 NOT NULL,
246 inherit_perm boolean DEFAULT true NOT NULL
247);
248
249-- create initial default user? may be better to create an "initialize" script or something
250COPY users (user_id, group_id, username, "password", firstname, lastname, phone, "type", status, permission_id, inherit_perm) FROM stdin;
2511 1 admin $1$PfEBUv9d$wV2/UG4gmKk08DLmdE8/d. Initial User \N S 1 2 f
252\.
253
254--
255-- contraints. add these here so initial data doesn't get added strangely.
256--
257
258-- primary keys
259ALTER TABLE ONLY permissions
260 ADD CONSTRAINT permissions_permission_id_key UNIQUE (permission_id);
261
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
287-- fixme: permissions FK refs
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);
299
300-- set starting sequence numbers, since we've inserted data before they're active
301SELECT pg_catalog.setval('misc_misc_id_seq', 2, false);
302SELECT pg_catalog.setval('default_records_record_id_seq', 8, false);
303SELECT pg_catalog.setval('default_rev_records_record_id_seq', 5, false);
304SELECT pg_catalog.setval('domains_domain_id_seq', 1, false);
305SELECT pg_catalog.setval('groups_group_id_seq', 2, false);
306SELECT pg_catalog.setval('permissions_permission_id_seq', 3, false);
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.