147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/* -*- Mode: C; tab-width: 4 -*- 247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * 347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * Copyright (c) 2006 Apple Computer, Inc. All rights reserved. 447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * 547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * Licensed under the Apache License, Version 2.0 (the "License"); 647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * you may not use this file except in compliance with the License. 747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * You may obtain a copy of the License at 847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * 947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * http://www.apache.org/licenses/LICENSE-2.0 1047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * 1147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * Unless required by applicable law or agreed to in writing, software 1247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * distributed under the License is distributed on an "AS IS" BASIS, 1347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * See the License for the specific language governing permissions and 1547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * limitations under the License. 1647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt */ 1747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 1847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%{ 1947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#include <stdio.h> 2047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#include <stdlib.h> 2147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#include <string.h> 2247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#include "mDNSEmbeddedAPI.h" 2347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#include "DebugServices.h" 2447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#include "dnsextd.h" 2547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 2647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid yyerror( const char* error ); 2747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltint yylex(void); 2847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 2947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 3047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalttypedef struct StringListElem 3147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 3247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char * string; 3347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt struct StringListElem * next; 3447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} StringListElem; 3547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 3647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 3747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalttypedef struct OptionsInfo 3847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 3947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char server_address[ 256 ]; 4047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int server_port; 4147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char source_address[ 256 ]; 4247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int source_port; 4347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int private_port; 4447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int llq_port; 4547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} OptionsInfo; 4647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 4747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 4847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalttypedef struct ZoneInfo 4947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 5047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char name[ 256 ]; 5147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char certificate_name[ 256 ]; 5247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char allow_clients_file[ 256 ]; 5347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char allow_clients[ 256 ]; 5447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char key[ 256 ]; 5547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} ZoneInfo; 5647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 5747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 5847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalttypedef struct KeySpec 5947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 6047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char name[ 256 ]; 6147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char algorithm[ 256 ]; 6247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char secret[ 256 ]; 6347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt struct KeySpec * next; 6447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} KeySpec; 6547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 6647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 6747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalttypedef struct ZoneSpec 6847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 6947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char name[ 256 ]; 7047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DNSZoneSpecType type; 7147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt StringListElem * allowUpdate; 7247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt StringListElem * allowQuery; 7347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char key[ 256 ]; 7447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt struct ZoneSpec * next; 7547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} ZoneSpec; 7647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 7747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 7847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic StringListElem * g_stringList = NULL; 7947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic KeySpec * g_keys; 8047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic ZoneSpec * g_zones; 8147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic ZoneSpec g_zoneSpec; 8247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic const char * g_filename; 8347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 8447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define YYPARSE_PARAM context 8547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 8647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid 8747e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltSetupOptions 8847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( 8947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OptionsInfo * info, 9047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt void * context 9147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ); 9247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 9347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%} 9447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 9547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%union 9647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 9747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int number; 9847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char * string; 9947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 10047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 10147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token OPTIONS 10247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token LISTEN_ON 10347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token NAMESERVER 10447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token PORT 10547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token ADDRESS 10647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token LLQ 10747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token PUBLIC 10847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token PRIVATE 10947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token ALLOWUPDATE 11047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token ALLOWQUERY 11147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token KEY 11247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token ALGORITHM 11347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token SECRET 11447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token ISSUER 11547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token SERIAL 11647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token ZONE 11747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token TYPE 11847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token ALLOW 11947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token OBRACE 12047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token EBRACE 12147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token SEMICOLON 12247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token IN 12347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token <string> DOTTED_DECIMAL_ADDRESS 12447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token <string> WILDCARD 12547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token <string> DOMAINNAME 12647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token <string> HOSTNAME 12747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token <string> QUOTEDSTRING 12847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%token <number> NUMBER 12947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 13047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%type <string> addressstatement 13147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%type <string> networkaddress 13247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 13347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%% 13447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 13547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltcommands: 13647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 13747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt commands command SEMICOLON 13847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 13947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 14047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 14147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltcommand: 14247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt options_set 14347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 14447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zone_set 14547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 14647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt key_set 14747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 14847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 14947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 15047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltoptions_set: 15147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OPTIONS optionscontent 15247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 15347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // SetupOptions( &g_optionsInfo, context ); 15447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 15547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 15647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 15747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltoptionscontent: 15847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OBRACE optionsstatements EBRACE 15947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 16047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 16147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltoptionsstatements: 16247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 16347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt optionsstatements optionsstatement SEMICOLON 16447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 16547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 16647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 16747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltoptionsstatement: 16847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt statements 16947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 17047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt LISTEN_ON addresscontent 17147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 17247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 17347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 17447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt LISTEN_ON PORT NUMBER addresscontent 17547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 17647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 17747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 17847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt NAMESERVER ADDRESS networkaddress 17947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 18047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 18147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 18247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt NAMESERVER ADDRESS networkaddress PORT NUMBER 18347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 18447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 18547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 18647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt PRIVATE PORT NUMBER 18747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 18847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( ( DaemonInfo* ) context )->private_port = mDNSOpaque16fromIntVal( $3 ); 18947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 19047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 19147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt LLQ PORT NUMBER 19247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 19347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( ( DaemonInfo* ) context )->llq_port = mDNSOpaque16fromIntVal( $3 ); 19447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 19547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 19647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 19747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltkey_set: 19847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt KEY QUOTEDSTRING OBRACE SECRET QUOTEDSTRING SEMICOLON EBRACE 19947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 20047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt KeySpec * keySpec; 20147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 20247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt keySpec = ( KeySpec* ) malloc( sizeof( KeySpec ) ); 20347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 20447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ( !keySpec ) 20547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 20647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt LogMsg("ERROR: memory allocation failure"); 20747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt YYABORT; 20847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 20947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 21047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt strncpy( keySpec->name, $2, sizeof( keySpec->name ) ); 21147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt strncpy( keySpec->secret, $5, sizeof( keySpec->secret ) ); 21247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 21347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt keySpec->next = g_keys; 21447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt g_keys = keySpec; 21547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 21647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 21747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 21847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltzone_set: 21947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ZONE QUOTEDSTRING zonecontent 22047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 22147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ZoneSpec * zoneSpec; 22247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 22347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zoneSpec = ( ZoneSpec* ) malloc( sizeof( ZoneSpec ) ); 22447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 22547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ( !zoneSpec ) 22647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 22747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt LogMsg("ERROR: memory allocation failure"); 22847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt YYABORT; 22947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 23047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 23147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt strncpy( zoneSpec->name, $2, sizeof( zoneSpec->name ) ); 23247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zoneSpec->type = g_zoneSpec.type; 23347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt strcpy( zoneSpec->key, g_zoneSpec.key ); 23447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zoneSpec->allowUpdate = g_zoneSpec.allowUpdate; 23547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zoneSpec->allowQuery = g_zoneSpec.allowQuery; 23647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 23747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zoneSpec->next = g_zones; 23847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt g_zones = zoneSpec; 23947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 24047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 24147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ZONE QUOTEDSTRING IN zonecontent 24247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 24347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ZoneSpec * zoneSpec; 24447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 24547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zoneSpec = ( ZoneSpec* ) malloc( sizeof( ZoneSpec ) ); 24647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 24747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ( !zoneSpec ) 24847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 24947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt LogMsg("ERROR: memory allocation failure"); 25047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt YYABORT; 25147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 25247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 25347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt strncpy( zoneSpec->name, $2, sizeof( zoneSpec->name ) ); 25447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zoneSpec->type = g_zoneSpec.type; 25547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt strcpy( zoneSpec->key, g_zoneSpec.key ); 25647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zoneSpec->allowUpdate = g_zoneSpec.allowUpdate; 25747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zoneSpec->allowQuery = g_zoneSpec.allowQuery; 25847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 25947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zoneSpec->next = g_zones; 26047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt g_zones = zoneSpec; 26147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 26247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 26347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 26447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltzonecontent: 26547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OBRACE zonestatements EBRACE 26647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 26747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltzonestatements: 26847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 26947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zonestatements zonestatement SEMICOLON 27047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 27147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 27247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltzonestatement: 27347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt TYPE PUBLIC 27447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 27547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt g_zoneSpec.type = kDNSZonePublic; 27647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 27747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 27847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt TYPE PRIVATE 27947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 28047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt g_zoneSpec.type = kDNSZonePrivate; 28147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 28247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 28347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ALLOWUPDATE keycontent 28447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 28547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt g_zoneSpec.allowUpdate = g_stringList; 28647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt g_stringList = NULL; 28747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 28847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 28947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ALLOWQUERY keycontent 29047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 29147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt g_zoneSpec.allowQuery = g_stringList; 29247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt g_stringList = NULL; 29347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 29447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 29547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 29647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltaddresscontent: 29747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OBRACE addressstatements EBRACE 29847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 29947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 30047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 30147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltaddressstatements: 30247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 30347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt addressstatements addressstatement SEMICOLON 30447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 30547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 30647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 30747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 30847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltaddressstatement: 30947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DOTTED_DECIMAL_ADDRESS 31047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 31147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 31247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 31347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 31447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 31547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltkeycontent: 31647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OBRACE keystatements EBRACE 31747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 31847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 31947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 32047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltkeystatements: 32147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 32247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt keystatements keystatement SEMICOLON 32347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 32447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 32547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 32647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 32747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltkeystatement: 32847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt KEY DOMAINNAME 32947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 33047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt StringListElem * elem; 33147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 33247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt elem = ( StringListElem* ) malloc( sizeof( StringListElem ) ); 33347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 33447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ( !elem ) 33547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 33647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt LogMsg("ERROR: memory allocation failure"); 33747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt YYABORT; 33847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 33947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 34047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt elem->string = $2; 34147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 34247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt elem->next = g_stringList; 34347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt g_stringList = elem; 34447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 34547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 34647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 34747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 34847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltnetworkaddress: 34947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DOTTED_DECIMAL_ADDRESS 35047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 35147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt HOSTNAME 35247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 35347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt WILDCARD 35447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 35547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 35647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltblock: 35747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OBRACE zonestatements EBRACE SEMICOLON 35847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 35947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 36047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatements: 36147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 36247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt statements statement 36347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ; 36447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 36547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatement: 36647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt block 36747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 36847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt $<string>$ = NULL; 36947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 37047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt | 37147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt QUOTEDSTRING 37247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 37347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt $<string>$ = $1; 37447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 37547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt%% 37647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 37747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltint yywrap(void); 37847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 37947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltextern int yylineno; 38047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 38147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid yyerror( const char *str ) 38247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 38347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt fprintf( stderr,"%s:%d: error: %s\n", g_filename, yylineno, str ); 38447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 38547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 38647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltint yywrap() 38747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 38847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return 1; 38947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 39047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 39147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 39247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltint 39347e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltParseConfig 39447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( 39547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DaemonInfo * d, 39647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * file 39747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ) 39847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 39947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt extern FILE * yyin; 40047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DNSZone * zone; 40147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DomainAuthInfo * key; 40247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt KeySpec * keySpec; 40347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ZoneSpec * zoneSpec; 40447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int err = 0; 40547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 40647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt g_filename = file; 40747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 40847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Tear down the current zone specifiers 40947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 41047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zone = d->zones; 41147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 41247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while ( zone ) 41347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 41447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DNSZone * next = zone->next; 41547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 41647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt key = zone->updateKeys; 41747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 41847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while ( key ) 41947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 42047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DomainAuthInfo * nextKey = key->next; 42147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 42247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt free( key ); 42347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 42447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt key = nextKey; 42547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 42647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 42747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt key = zone->queryKeys; 42847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 42947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while ( key ) 43047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 43147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DomainAuthInfo * nextKey = key->next; 43247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 43347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt free( key ); 43447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 43547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt key = nextKey; 43647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 43747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 43847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt free( zone ); 43947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 44047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zone = next; 44147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 44247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 44347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt d->zones = NULL; 44447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 44547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt yyin = fopen( file, "r" ); 44647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( yyin, exit, err = 0 ); 44747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 44847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = yyparse( ( void* ) d ); 44947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( !err, exit, err = 1 ); 45047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 45147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for ( zoneSpec = g_zones; zoneSpec; zoneSpec = zoneSpec->next ) 45247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 45347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt StringListElem * elem; 45447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt mDNSu8 * ok; 45547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 45647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zone = ( DNSZone* ) malloc( sizeof( DNSZone ) ); 45747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( zone, exit, err = 1 ); 45847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt memset( zone, 0, sizeof( DNSZone ) ); 45947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 46047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zone->next = d->zones; 46147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt d->zones = zone; 46247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 46347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Fill in the domainname 46447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 46547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ok = MakeDomainNameFromDNSNameString( &zone->name, zoneSpec->name ); 46647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( ok, exit, err = 1 ); 46747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 46847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Fill in the type 46947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 47047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zone->type = zoneSpec->type; 47147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 47247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Fill in the allow-update keys 47347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 47447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for ( elem = zoneSpec->allowUpdate; elem; elem = elem->next ) 47547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 47647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt mDNSBool found = mDNSfalse; 47747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 47847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for ( keySpec = g_keys; keySpec; keySpec = keySpec->next ) 47947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 48047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ( strcmp( elem->string, keySpec->name ) == 0 ) 48147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 48247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DomainAuthInfo * authInfo = malloc( sizeof( DomainAuthInfo ) ); 48347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt mDNSs32 keylen; 48447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( authInfo, exit, err = 1 ); 48547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt memset( authInfo, 0, sizeof( DomainAuthInfo ) ); 48647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 48747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ok = MakeDomainNameFromDNSNameString( &authInfo->keyname, keySpec->name ); 48847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (!ok) { free(authInfo); err = 1; goto exit; } 48947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 49047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt keylen = DNSDigest_ConstructHMACKeyfromBase64( authInfo, keySpec->secret ); 49147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (keylen < 0) { free(authInfo); err = 1; goto exit; } 49247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 49347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt authInfo->next = zone->updateKeys; 49447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zone->updateKeys = authInfo; 49547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 49647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt found = mDNStrue; 49747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 49847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 49947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 50047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 50147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 50247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Log this 50347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( found, exit, err = 1 ); 50447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 50547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 50647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Fill in the allow-query keys 50747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 50847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for ( elem = zoneSpec->allowQuery; elem; elem = elem->next ) 50947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 51047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt mDNSBool found = mDNSfalse; 51147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 51247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for ( keySpec = g_keys; keySpec; keySpec = keySpec->next ) 51347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 51447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ( strcmp( elem->string, keySpec->name ) == 0 ) 51547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 51647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DomainAuthInfo * authInfo = malloc( sizeof( DomainAuthInfo ) ); 51747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt mDNSs32 keylen; 51847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( authInfo, exit, err = 1 ); 51947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt memset( authInfo, 0, sizeof( DomainAuthInfo ) ); 52047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 52147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ok = MakeDomainNameFromDNSNameString( &authInfo->keyname, keySpec->name ); 52247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (!ok) { free(authInfo); err = 1; goto exit; } 52347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 52447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt keylen = DNSDigest_ConstructHMACKeyfromBase64( authInfo, keySpec->secret ); 52547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (keylen < 0) { free(authInfo); err = 1; goto exit; } 52647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 52747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt authInfo->next = zone->queryKeys; 52847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt zone->queryKeys = authInfo; 52947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 53047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt found = mDNStrue; 53147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 53247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 53347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 53447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 53547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 53647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Log this 53747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( found, exit, err = 1 ); 53847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 53947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 54047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 54147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltexit: 54247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 54347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return err; 54447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 54547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 54647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 54747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid 54847e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltSetupOptions 54947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( 55047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OptionsInfo * info, 55147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt void * context 55247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ) 55347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 55447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DaemonInfo * d = ( DaemonInfo* ) context; 55547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 55647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ( strlen( info->source_address ) ) 55747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 55847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inet_pton( AF_INET, info->source_address, &d->addr.sin_addr ); 55947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 56047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 56147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ( info->source_port ) 56247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 56347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt d->addr.sin_port = htons( ( mDNSu16 ) info->source_port ); 56447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 56547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 56647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ( strlen( info->server_address ) ) 56747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 56847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inet_pton( AF_INET, info->server_address, &d->ns_addr.sin_addr ); 56947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 57047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 57147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ( info->server_port ) 57247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 57347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt d->ns_addr.sin_port = htons( ( mDNSu16 ) info->server_port ); 57447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 57547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 57647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ( info->private_port ) 57747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 57847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt d->private_port = mDNSOpaque16fromIntVal( info->private_port ); 57947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 58047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 58147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ( info->llq_port ) 58247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 58347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt d->llq_port = mDNSOpaque16fromIntVal( info->llq_port ); 58447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 58547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 586