ssu.c revision ca103999e64da0b16bb8b30589408f1556264dce
11e9368a226272085c337e9e74b79808c16fbdbaTinderbox User * Copyright (C) 2004-2008, 2010 Internet Systems Consortium, Inc. ("ISC")
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews * Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
4a14ce5ba00ab7bc55c99ffdcf59c7a4ab902721Automatic Updater * Permission to use, copy, modify, and/or distribute this software for any
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * purpose with or without fee is hereby granted, provided that the above
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * copyright notice and this permission notice appear in all copies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * PERFORMANCE OF THIS SOFTWARE.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * $Id: ssu.c,v 1.36 2010/12/20 23:47:21 tbox Exp $
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * Principal Author: Brian Wellington
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#define SSUTABLEMAGIC ISC_MAGIC('S', 'S', 'U', 'T')
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#define VALID_SSUTABLE(table) ISC_MAGIC_VALID(table, SSUTABLEMAGIC)
11e9368a226272085c337e9e74b79808c16fbdbaTinderbox User#define SSURULEMAGIC ISC_MAGIC('S', 'S', 'U', 'R')
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews#define VALID_SSURULE(table) ISC_MAGIC_VALID(table, SSURULEMAGIC)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein unsigned int magic;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein isc_boolean_t grant; /*%< is this a grant or a deny? */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein unsigned int matchtype; /*%< which type of pattern match? */
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User dns_name_t *identity; /*%< the identity to match */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein dns_name_t *name; /*%< the name being updated */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein unsigned int ntypes; /*%< number of data types covered */
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User dns_rdatatype_t *types; /*%< the data types. Can include ANY, */
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User /*%< defaults to all but SIG,SOA,NS if NULL */
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User unsigned int magic;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userdns_ssutable_create(isc_mem_t *mctx, dns_ssutable_t **tablep) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein table = isc_mem_get(mctx, sizeof(dns_ssutable_t));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein isc_mem_put(mctx, table, sizeof(dns_ssutable_t));
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntstatic inline void
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User dns_ssurule_t *rule = ISC_LIST_HEAD(table->rules);
2b4d1b54f6ca406b8233d9e6fea9593df6dad035Tinderbox User isc_mem_put(mctx, rule->identity, sizeof(dns_name_t));
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt isc_mem_put(mctx, rule->name, sizeof(dns_name_t));
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater ISC_LIST_UNLINK(table->rules, rule, link);
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater isc_mem_put(mctx, rule, sizeof(dns_ssurule_t));
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User isc_mem_put(mctx, table, sizeof(dns_ssutable_t));
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userdns_ssutable_attach(dns_ssutable_t *source, dns_ssutable_t **targetp) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User REQUIRE(targetp != NULL && *targetp == NULL);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userdns_ssutable_detach(dns_ssutable_t **tablep) {
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userdns_ssutable_addrule(dns_ssutable_t *table, isc_boolean_t grant,
983df82baf1d7d0b668c98cf45928a19f175c6e7Tinderbox User dns_name_t *identity, unsigned int matchtype,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rule = isc_mem_get(mctx, sizeof(dns_ssurule_t));
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User rule->identity = isc_mem_get(mctx, sizeof(dns_name_t));
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User result = dns_name_dup(identity, mctx, rule->identity);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rule->name = isc_mem_get(mctx, sizeof(dns_name_t));
a1ad6695ed6f988406cf155aa26376f84f73bcb9Automatic Updater result = dns_name_dup(name, mctx, rule->name);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein memcpy(rule->types, types, ntypes * sizeof(dns_rdatatype_t));
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User ISC_LIST_INITANDAPPEND(table->rules, rule, link);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein isc_mem_put(mctx, rule->identity, sizeof(dns_name_t));
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User isc_mem_put(mctx, rule->name, sizeof(dns_name_t));
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntreverse_from_address(dns_name_t *tcpself, isc_netaddr_t *tcpaddr) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt unsigned char *ap;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt unsigned long l;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "%lu.%lu.%lu.%lu.IN-ADDR.ARPA.",
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "%x.%x.%x.%x.%x.%x.%x.%x."
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User "%x.%x.%x.%x.%x.%x.%x.%x."
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater "%x.%x.%x.%x.%x.%x.%x.%x."
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User "%x.%x.%x.%x.%x.%x.%x.%x."
6d382c9fcec316a84a237779fb64bb471b6f9d43Tinderbox User result = dns_name_fromtext(tcpself, &b, dns_rootname, 0, NULL);
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox Userstf_from_address(dns_name_t *stfself, isc_netaddr_t *tcpaddr) {
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox User char buf[sizeof("X.X.X.X.Y.Y.Y.Y.2.0.0.2.IP6.ARPA.")];
922312472e2e05ebc64993d465999c5351b83036Automatic Updater unsigned char *ap;
dec590a3deb8e87380a8bd3a77d535dba3729bf6Tinderbox User unsigned long l;
28b3569d6248168e6c00caab951521cc8141a49dAutomatic Updater result = isc_string_printf(buf, sizeof(buf),
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews "%lx.%lx.%lx.%lx.%lx.%lx.%lx.%lx"
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews "2.0.0.2.IP6.ARPA.",
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews "%x.%x.%x.%x.%x.%x.%x.%x."
c3dc968140ab7f04795acc7835e4e89ccb0c0a27Tinderbox User "%x.%x.%x.%x.IP6.ARPA.",
ad8f23aed6c75f94f238c1f23f4e17515d28eb55Tinderbox User result = dns_name_fromtext(stfself, &b, dns_rootname, 0, NULL);
e2e4d321999340802f77adaacd19c797d04b4b95Automatic Updaterdns_ssutable_checkrules(dns_ssutable_t *table, dns_name_t *signer,
0c6ada0a814f3c5417daa1654129bc2af56ed504Automatic Updater unsigned int i;
9b469e3c59015b1a4899c9d8395168126fe094fdAutomatic Updater REQUIRE(signer == NULL || dns_name_isabsolute(signer));
e2e4d321999340802f77adaacd19c797d04b4b95Automatic Updater if (dns_name_iswildcard(rule->identity)) {
case DNS_SSUMATCHTYPE_NAME:
case DNS_SSUMATCHTYPE_SELF:
case DNS_SSUMATCHTYPE_SELFSUB:
case DNS_SSUMATCHTYPE_SELFMS:
case DNS_SSUMATCHTYPE_TCPSELF:
case DNS_SSUMATCHTYPE_DLZ:
return (ISC_FALSE);
return (result);
return (ISC_R_NOMEMORY);
return (ISC_R_SUCCESS);