source: trunk/dns.sql@ 377

Last change on this file since 377 was 375, checked in by Kris Deugau, 12 years ago

/trunk

Checkpoint adding locations/views. See #10.

  • Tweak new locations table again with an internal serial for sorting and finding the "highest" previous location
  • Complete "Add location" stub
  • Fill in initial display page for "Edit location"
  • Tweak location add/edit/update template a little, add new comments field to match new field in table
  • Tweak location import so we don't end up with great long space-free fields similar to what can't be avoided with TXT (usually SPF/DomainKeys) records
  • Fill in addLoc() stub
  • Add getLoc()
  • Tweak location export to strip commas and whitespace properly
File size: 10.5 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;
[347]161 dbversion 1.2
[212]17\.
18
[370]19CREATE TABLE locations (
20 location character varying (4) PRIMARY KEY,
[375]21 loc_id serial UNIQUE,
[370]22 group_id integer NOT NULL DEFAULT 1,
23 iplist text NOT NULL DEFAULT '',
[375]24 description character varying(40) NOT NULL DEFAULT '',
25 comments text NOT NULL DEFAULT ''
[370]26);
27
[50]28CREATE TABLE default_records (
29 record_id serial NOT NULL,
30 group_id integer DEFAULT 1 NOT NULL,
[130]31 host text DEFAULT '' NOT NULL,
[50]32 "type" integer DEFAULT 1 NOT NULL,
[130]33 val text DEFAULT '' NOT NULL,
[50]34 distance integer DEFAULT 0 NOT NULL,
35 weight integer DEFAULT 0 NOT NULL,
36 port integer DEFAULT 0 NOT NULL,
37 ttl integer DEFAULT 86400 NOT NULL,
[130]38 description text
[50]39);
40
41-- default records for the default group
42COPY default_records (record_id, group_id, host, "type", val, distance, weight, port, ttl, description) FROM stdin;
431 1 ns1.example.com:hostmaster.DOMAIN 6 10800:3600:604800:5400 0 0 0 86400 \N
442 1 DOMAIN 2 ns2.example.com 0 0 0 7200 \N
453 1 DOMAIN 2 ns1.example.com 0 0 0 7200 \N
464 1 DOMAIN 1 10.0.0.4 0 0 0 7200 \N
475 1 DOMAIN 15 mx1.example.com 10 0 0 7200 \N
486 1 www.DOMAIN 5 DOMAIN 0 0 0 10800 \N
497 1 DOMAIN 16 "v=spf1 a mx -all" 0 0 0 10800 \N
50\.
51
[224]52CREATE TABLE default_rev_records (
53 record_id serial NOT NULL,
54 group_id integer DEFAULT 1 NOT NULL,
55 host text DEFAULT '' NOT NULL,
56 "type" integer DEFAULT 1 NOT NULL,
57 val text DEFAULT '' NOT NULL,
58 ttl integer DEFAULT 86400 NOT NULL,
59 description text
60);
61
[249]62COPY default_rev_records (record_id, group_id, host, "type", val, ttl, description) FROM stdin;
[224]631 1 hostmaster.ADMINDOMAIN:ns1.ADMINDOMAIN 6 3600:900:1048576:2560 3600
642 1 unused-%r.ADMINDOMAIN 65283 ZONE 3600
[328]653 1 ns2.example.com 2 ZONE 7200 \N
664 1 ns1.example.com 2 ZONE 7200 \N
[224]67\.
68
[85]69CREATE TABLE domains (
70 domain_id serial NOT NULL,
[347]71 "domain" character varying(80) NOT NULL PRIMARY KEY,
[85]72 group_id integer DEFAULT 1 NOT NULL,
73 description character varying(255) DEFAULT ''::character varying NOT NULL,
74 status integer DEFAULT 1 NOT NULL,
75 zserial integer,
[366]76 sertype character(1) DEFAULT 'D'::bpchar,
[370]77 changed boolean DEFAULT true NOT NULL,
78 default_location character varying (4) DEFAULT '' NOT NULL
[85]79);
80
[224]81CREATE TABLE revzones (
82 rdns_id serial NOT NULL,
[347]83 revnet cidr NOT NULL PRIMARY KEY,
[224]84 group_id integer DEFAULT 1 NOT NULL,
85 description character varying(255) DEFAULT ''::character varying NOT NULL,
86 status integer DEFAULT 1 NOT NULL,
87 zserial integer,
[366]88 sertype character(1) DEFAULT 'D'::bpchar,
[370]89 changed boolean DEFAULT true NOT NULL,
90 default_location character varying (4) DEFAULT '' NOT NULL
[224]91);
92
[85]93CREATE TABLE groups (
94 group_id serial NOT NULL,
95 parent_group_id integer DEFAULT 1 NOT NULL,
96 group_name character varying(255) DEFAULT ''::character varying NOT NULL,
97 permission_id integer DEFAULT 1 NOT NULL,
98 inherit_perm boolean DEFAULT true NOT NULL
99);
100
101-- Provide a basic default group
[86]102COPY groups (group_id, parent_group_id, permission_id, group_name) FROM stdin;
[85]1031 1 1 default
104\.
105
[91]106-- entry is text due to possible long entries from AXFR - a domain with "many"
107-- odd records will overflow varchar(200)
[85]108CREATE TABLE log (
[89]109 log_id serial NOT NULL,
[85]110 domain_id integer,
[224]111 rdns_id integer,
[85]112 user_id integer,
113 group_id integer,
114 email character varying(60),
115 name character varying(60),
[91]116 entry text,
[85]117 stamp timestamp with time zone DEFAULT now()
118);
119
120CREATE TABLE permissions (
121 permission_id serial NOT NULL,
122 "admin" boolean DEFAULT false NOT NULL,
123 self_edit boolean DEFAULT false NOT NULL,
124 group_create boolean DEFAULT false NOT NULL,
125 group_edit boolean DEFAULT false NOT NULL,
126 group_delete boolean DEFAULT false NOT NULL,
127 user_create boolean DEFAULT false NOT NULL,
128 user_edit boolean DEFAULT false NOT NULL,
129 user_delete boolean DEFAULT false NOT NULL,
130 domain_create boolean DEFAULT false NOT NULL,
131 domain_edit boolean DEFAULT false NOT NULL,
132 domain_delete boolean DEFAULT false NOT NULL,
133 record_create boolean DEFAULT false NOT NULL,
134 record_edit boolean DEFAULT false NOT NULL,
135 record_delete boolean DEFAULT false NOT NULL,
[370]136 location_create boolean DEFAULT false NOT NULL,
137 location_edit boolean DEFAULT false NOT NULL,
138 location_delete boolean DEFAULT false NOT NULL,
139 location_view boolean DEFAULT false NOT NULL,
[86]140 user_id integer UNIQUE,
141 group_id integer UNIQUE
[85]142);
143
144-- Need *two* basic permissions; one for the initial group, one for the default admin user
[86]145COPY 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;
[370]1461 f f f f f f f f t t t t t t f f f f \N 1
1472 t f f f f f f f f f f f f f f f f f 1 \N
[85]148\.
149
[224]150-- rdns_id defaults to 0 since many records will not have an associated rDNS entry.
[50]151CREATE TABLE records (
[224]152 domain_id integer NOT NULL DEFAULT 0,
153 rdns_id integer NOT NULL DEFAULT 0,
[50]154 record_id serial NOT NULL,
[130]155 host text DEFAULT '' NOT NULL,
[50]156 "type" integer DEFAULT 1 NOT NULL,
[130]157 val text DEFAULT '' NOT NULL,
[50]158 distance integer DEFAULT 0 NOT NULL,
159 weight integer DEFAULT 0 NOT NULL,
160 port integer DEFAULT 0 NOT NULL,
[85]161 ttl integer DEFAULT 7200 NOT NULL,
[370]162 description text,
163 default_location character varying (4) DEFAULT '' NOT NULL
[50]164);
165
166CREATE TABLE rectypes (
167 val integer NOT NULL,
[224]168 name character varying(20) NOT NULL,
[50]169 stdflag integer DEFAULT 1 NOT NULL,
[102]170 listorder integer DEFAULT 255 NOT NULL,
171 alphaorder integer DEFAULT 32768 NOT NULL
[50]172);
173
174-- Types are required. NB: these are vaguely read-only too
[85]175-- data from http://www.iana.org/assignments/dns-parameters
[102]176COPY rectypes (val, name, stdflag, listorder, alphaorder) FROM stdin;
1771 A 1 1 1
[300]1782 NS 2 9 37
[224]1793 MD 5 255 29
1804 MF 5 255 30
[300]1815 CNAME 2 11 9
[224]1826 SOA 0 0 53
1837 MB 5 255 28
1848 MG 5 255 31
1859 MR 5 255 33
18610 NULL 5 255 43
18711 WKS 5 255 64
[300]18812 PTR 3 5 46
[224]18913 HINFO 5 255 18
19014 MINFO 5 255 32
[300]19115 MX 1 10 34
[351]19216 TXT 2 12 60
[224]19317 RP 4 255 48
19418 AFSDB 5 255 4
19519 X25 5 255 65
19620 ISDN 5 255 21
19721 RT 5 255 50
19822 NSAP 5 255 38
19923 NSAP-PTR 5 255 39
20024 SIG 5 255 51
20125 KEY 5 255 23
20226 PX 5 255 47
20327 GPOS 5 255 17
20428 AAAA 1 3 3
20529 LOC 5 255 25
20630 NXT 5 255 44
20731 EID 5 255 15
20832 NIMLOC 5 255 36
[300]20933 SRV 1 13 55
[224]21034 ATMA 5 255 6
21135 NAPTR 5 255 35
21236 KX 5 255 24
21337 CERT 5 255 8
21438 A6 5 3 2
21539 DNAME 5 255 12
21640 SINK 5 255 52
21741 OPT 5 255 45
21842 APL 5 255 5
21943 DS 5 255 14
22044 SSHFP 5 255 56
22145 IPSECKEY 5 255 20
22246 RRSIG 5 255 49
22347 NSEC 5 255 40
22448 DNSKEY 5 255 13
22549 DHCID 5 255 10
22650 NSEC3 5 255 41
22751 NSEC3PARAM 5 255 42
22855 HIP 5 255 19
22999 SPF 5 255 54
230100 UINFO 5 255 62
231101 UID 5 255 61
232102 GID 5 255 16
233103 UNSPEC 5 255 63
234249 TKEY 5 255 58
235250 TSIG 5 255 59
236251 IXFR 5 255 22
237252 AXFR 5 255 7
238253 MAILB 5 255 27
239254 MAILA 5 255 26
24032768 TA 5 255 57
24132769 DLV 5 255 11
[50]242\.
243
[224]244-- Custom types (ab)using the "Private use" range from 65280 to 65534
245COPY rectypes (val, name, stdflag, listorder, alphaorder) FROM stdin;
24665280 A+PTR 2 2 2
24765281 AAAA+PTR 2 4 4
[300]24865282 PTR template 3 6 2
[342]24965283 A+PTR template 2 7 2
[300]25065284 AAAA+PTR template 8 13 2
[342]25165285 Delegation 2 8 2
[224]252\.
253
[50]254CREATE TABLE users (
255 user_id serial NOT NULL,
256 group_id integer DEFAULT 1 NOT NULL,
257 username character varying(60) NOT NULL,
258 "password" character varying(34) NOT NULL,
[85]259 firstname character varying(60),
260 lastname character varying(60),
[50]261 phone character varying(15),
262 "type" character(1) DEFAULT 'S'::bpchar NOT NULL,
263 status integer DEFAULT 1 NOT NULL,
[85]264 permission_id integer DEFAULT 1 NOT NULL,
265 inherit_perm boolean DEFAULT true NOT NULL
[50]266);
267
268-- create initial default user? may be better to create an "initialize" script or something
[86]269COPY users (user_id, group_id, username, "password", firstname, lastname, phone, "type", status, permission_id, inherit_perm) FROM stdin;
[89]2701 1 admin $1$PfEBUv9d$wV2/UG4gmKk08DLmdE8/d. Initial User \N S 1 2 f
[50]271\.
272
273--
274-- contraints. add these here so initial data doesn't get added strangely.
275--
276
277-- primary keys
[65]278ALTER TABLE ONLY permissions
279 ADD CONSTRAINT permissions_permission_id_key UNIQUE (permission_id);
280
[50]281ALTER TABLE ONLY groups
282 ADD CONSTRAINT groups_group_id_key UNIQUE (group_id);
283
284ALTER TABLE ONLY domains
285 ADD CONSTRAINT domains_pkey PRIMARY KEY ("domain");
286
287ALTER TABLE ONLY domains
288 ADD CONSTRAINT domains_domain_id_key UNIQUE (domain_id);
289
290ALTER TABLE ONLY default_records
291 ADD CONSTRAINT default_records_pkey PRIMARY KEY (record_id);
292
293ALTER TABLE ONLY records
294 ADD CONSTRAINT records_pkey PRIMARY KEY (record_id);
295
296ALTER TABLE ONLY rectypes
297 ADD CONSTRAINT rectypes_pkey PRIMARY KEY (val, name);
298
299ALTER TABLE ONLY users
300 ADD CONSTRAINT users_pkey PRIMARY KEY (username);
301
302ALTER TABLE ONLY users
303 ADD CONSTRAINT uidu UNIQUE (user_id);
304
305-- foreign keys
[65]306-- fixme: permissions FK refs
[370]307ALTER TABLE ONLY locations
308 ADD CONSTRAINT "locations_group_id_fkey" FOREIGN KEY (group_id) REFERENCES groups(group_id);
309
[50]310ALTER TABLE ONLY domains
311 ADD CONSTRAINT "$1" FOREIGN KEY (group_id) REFERENCES groups(group_id);
312
[369]313ALTER TABLE ONLY revzones
314 ADD CONSTRAINT "$1" FOREIGN KEY (group_id) REFERENCES groups(group_id);
315
[50]316ALTER TABLE ONLY default_records
317 ADD CONSTRAINT "$1" FOREIGN KEY (group_id) REFERENCES groups(group_id);
318
319ALTER TABLE ONLY users
320 ADD CONSTRAINT "$1" FOREIGN KEY (group_id) REFERENCES groups(group_id);
321
322ALTER TABLE ONLY groups
323 ADD CONSTRAINT group_parent FOREIGN KEY (parent_group_id) REFERENCES groups(group_id);
[86]324
325-- set starting sequence numbers, since we've inserted data before they're active
[224]326SELECT pg_catalog.setval('misc_misc_id_seq', 2, false);
327SELECT pg_catalog.setval('default_records_record_id_seq', 8, false);
[300]328SELECT pg_catalog.setval('default_rev_records_record_id_seq', 5, false);
[86]329SELECT pg_catalog.setval('domains_domain_id_seq', 1, false);
[224]330SELECT pg_catalog.setval('groups_group_id_seq', 2, false);
331SELECT pg_catalog.setval('permissions_permission_id_seq', 3, false);
[86]332SELECT pg_catalog.setval('records_record_id_seq', 1, false);
333SELECT pg_catalog.setval('users_user_id_seq', 2, false);
Note: See TracBrowser for help on using the repository browser.