1*00b67f09SDavid van Moolenbroek /* $NetBSD: zkt.c,v 1.1.1.1 2015/07/08 15:37:48 christos Exp $ */
2*00b67f09SDavid van Moolenbroek
3*00b67f09SDavid van Moolenbroek /*****************************************************************
4*00b67f09SDavid van Moolenbroek **
5*00b67f09SDavid van Moolenbroek ** @(#) zkt.c -- A library for managing a list of dns zone files.
6*00b67f09SDavid van Moolenbroek **
7*00b67f09SDavid van Moolenbroek ** Copyright (c) 2005 - 2008, Holger Zuleger HZnet. All rights reserved.
8*00b67f09SDavid van Moolenbroek **
9*00b67f09SDavid van Moolenbroek ** This software is open source.
10*00b67f09SDavid van Moolenbroek **
11*00b67f09SDavid van Moolenbroek ** Redistribution and use in source and binary forms, with or without
12*00b67f09SDavid van Moolenbroek ** modification, are permitted provided that the following conditions
13*00b67f09SDavid van Moolenbroek ** are met:
14*00b67f09SDavid van Moolenbroek **
15*00b67f09SDavid van Moolenbroek ** Redistributions of source code must retain the above copyright notice,
16*00b67f09SDavid van Moolenbroek ** this list of conditions and the following disclaimer.
17*00b67f09SDavid van Moolenbroek **
18*00b67f09SDavid van Moolenbroek ** Redistributions in binary form must reproduce the above copyright notice,
19*00b67f09SDavid van Moolenbroek ** this list of conditions and the following disclaimer in the documentation
20*00b67f09SDavid van Moolenbroek ** and/or other materials provided with the distribution.
21*00b67f09SDavid van Moolenbroek **
22*00b67f09SDavid van Moolenbroek ** Neither the name of Holger Zuleger HZnet nor the names of its contributors may
23*00b67f09SDavid van Moolenbroek ** be used to endorse or promote products derived from this software without
24*00b67f09SDavid van Moolenbroek ** specific prior written permission.
25*00b67f09SDavid van Moolenbroek **
26*00b67f09SDavid van Moolenbroek ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27*00b67f09SDavid van Moolenbroek ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28*00b67f09SDavid van Moolenbroek ** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29*00b67f09SDavid van Moolenbroek ** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
30*00b67f09SDavid van Moolenbroek ** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31*00b67f09SDavid van Moolenbroek ** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32*00b67f09SDavid van Moolenbroek ** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33*00b67f09SDavid van Moolenbroek ** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34*00b67f09SDavid van Moolenbroek ** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35*00b67f09SDavid van Moolenbroek ** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36*00b67f09SDavid van Moolenbroek ** POSSIBILITY OF SUCH DAMAGE.
37*00b67f09SDavid van Moolenbroek **
38*00b67f09SDavid van Moolenbroek *****************************************************************/
39*00b67f09SDavid van Moolenbroek # include <stdio.h>
40*00b67f09SDavid van Moolenbroek # include <string.h>
41*00b67f09SDavid van Moolenbroek #ifdef HAVE_CONFIG_H
42*00b67f09SDavid van Moolenbroek # include <config.h>
43*00b67f09SDavid van Moolenbroek #endif
44*00b67f09SDavid van Moolenbroek # include "config_zkt.h"
45*00b67f09SDavid van Moolenbroek # include "dki.h"
46*00b67f09SDavid van Moolenbroek # include "misc.h"
47*00b67f09SDavid van Moolenbroek # include "strlist.h"
48*00b67f09SDavid van Moolenbroek # include "zconf.h"
49*00b67f09SDavid van Moolenbroek # include "domaincmp.h"
50*00b67f09SDavid van Moolenbroek # include "tcap.h"
51*00b67f09SDavid van Moolenbroek #define extern
52*00b67f09SDavid van Moolenbroek # include "zkt.h"
53*00b67f09SDavid van Moolenbroek #undef extern
54*00b67f09SDavid van Moolenbroek
55*00b67f09SDavid van Moolenbroek extern char *labellist;
56*00b67f09SDavid van Moolenbroek extern int headerflag;
57*00b67f09SDavid van Moolenbroek extern int timeflag;
58*00b67f09SDavid van Moolenbroek extern int exptimeflag;
59*00b67f09SDavid van Moolenbroek extern int lifetime;
60*00b67f09SDavid van Moolenbroek extern int ageflag;
61*00b67f09SDavid van Moolenbroek extern int lifetimeflag;
62*00b67f09SDavid van Moolenbroek extern int kskflag;
63*00b67f09SDavid van Moolenbroek extern int zskflag;
64*00b67f09SDavid van Moolenbroek extern int pathflag;
65*00b67f09SDavid van Moolenbroek extern int ljustflag;
66*00b67f09SDavid van Moolenbroek
67*00b67f09SDavid van Moolenbroek static void printkeyinfo (const dki_t *dkp, const char *oldpath);
68*00b67f09SDavid van Moolenbroek
printkeyinfo(const dki_t * dkp,const char * oldpath)69*00b67f09SDavid van Moolenbroek static void printkeyinfo (const dki_t *dkp, const char *oldpath)
70*00b67f09SDavid van Moolenbroek {
71*00b67f09SDavid van Moolenbroek time_t currtime;
72*00b67f09SDavid van Moolenbroek
73*00b67f09SDavid van Moolenbroek if ( dkp == NULL ) /* print headline */
74*00b67f09SDavid van Moolenbroek {
75*00b67f09SDavid van Moolenbroek if ( headerflag )
76*00b67f09SDavid van Moolenbroek {
77*00b67f09SDavid van Moolenbroek tc_attr (stdout, TC_BOLD, 1);
78*00b67f09SDavid van Moolenbroek printf ("%-33.33s %5s %3s %3.3s %-7s", "Keyname",
79*00b67f09SDavid van Moolenbroek "Tag", "Typ", "Status", "Algorit");
80*00b67f09SDavid van Moolenbroek if ( timeflag )
81*00b67f09SDavid van Moolenbroek printf (" %-20s", "Generation Time");
82*00b67f09SDavid van Moolenbroek if ( exptimeflag )
83*00b67f09SDavid van Moolenbroek printf (" %-20s", "Expiration Time");
84*00b67f09SDavid van Moolenbroek if ( ageflag )
85*00b67f09SDavid van Moolenbroek printf (" %16s", "Age");
86*00b67f09SDavid van Moolenbroek if ( lifetimeflag )
87*00b67f09SDavid van Moolenbroek printf (" %4s", "LfTm");
88*00b67f09SDavid van Moolenbroek tc_attr (stdout, TC_BOLD, 0);
89*00b67f09SDavid van Moolenbroek putchar ('\n');
90*00b67f09SDavid van Moolenbroek }
91*00b67f09SDavid van Moolenbroek return;
92*00b67f09SDavid van Moolenbroek }
93*00b67f09SDavid van Moolenbroek time (&currtime);
94*00b67f09SDavid van Moolenbroek
95*00b67f09SDavid van Moolenbroek /* TODO: use next line if dname is dynamically allocated */
96*00b67f09SDavid van Moolenbroek /* if ( pathflag && dkp->dname && strcmp (oldpath, dkp->dname) != 0 ) */
97*00b67f09SDavid van Moolenbroek if ( pathflag && strcmp (oldpath, dkp->dname) != 0 )
98*00b67f09SDavid van Moolenbroek printf ("%s/\n", dkp->dname);
99*00b67f09SDavid van Moolenbroek
100*00b67f09SDavid van Moolenbroek if ( (kskflag && dki_isksk (dkp)) || (zskflag && !dki_isksk (dkp)) )
101*00b67f09SDavid van Moolenbroek {
102*00b67f09SDavid van Moolenbroek int color;
103*00b67f09SDavid van Moolenbroek
104*00b67f09SDavid van Moolenbroek if ( ljustflag )
105*00b67f09SDavid van Moolenbroek printf ("%-33.33s ", dkp->name);
106*00b67f09SDavid van Moolenbroek else
107*00b67f09SDavid van Moolenbroek printf ("%33.33s ", dkp->name);
108*00b67f09SDavid van Moolenbroek printf ("%05d ", dkp->tag);
109*00b67f09SDavid van Moolenbroek printf ("%3s ", dki_isksk (dkp) ? "KSK" : "ZSK");
110*00b67f09SDavid van Moolenbroek
111*00b67f09SDavid van Moolenbroek if ( dkp->status == DKI_ACT )
112*00b67f09SDavid van Moolenbroek color = TC_GREEN;
113*00b67f09SDavid van Moolenbroek else if ( dkp->status == DKI_PUB )
114*00b67f09SDavid van Moolenbroek color = TC_BLUE;
115*00b67f09SDavid van Moolenbroek else if ( dkp->status == DKI_DEP )
116*00b67f09SDavid van Moolenbroek color = TC_RED;
117*00b67f09SDavid van Moolenbroek else
118*00b67f09SDavid van Moolenbroek color = TC_BLACK;
119*00b67f09SDavid van Moolenbroek tc_attr (stdout, color, 1);
120*00b67f09SDavid van Moolenbroek printf ("%-3.3s ", dki_statusstr (dkp) );
121*00b67f09SDavid van Moolenbroek tc_attr (stdout, color, 0);
122*00b67f09SDavid van Moolenbroek
123*00b67f09SDavid van Moolenbroek printf ("%-7s", dki_algo2sstr(dkp->algo));
124*00b67f09SDavid van Moolenbroek
125*00b67f09SDavid van Moolenbroek if ( currtime < dkp->time + dkp->lifetime )
126*00b67f09SDavid van Moolenbroek color = TC_GREEN;
127*00b67f09SDavid van Moolenbroek else
128*00b67f09SDavid van Moolenbroek color = TC_BOLD|TC_RED;
129*00b67f09SDavid van Moolenbroek tc_attr (stdout, color, 1);
130*00b67f09SDavid van Moolenbroek
131*00b67f09SDavid van Moolenbroek if ( timeflag )
132*00b67f09SDavid van Moolenbroek printf (" %-20s", time2str (dkp->gentime ? dkp->gentime: dkp->time, 's'));
133*00b67f09SDavid van Moolenbroek if ( exptimeflag )
134*00b67f09SDavid van Moolenbroek printf (" %-20s", time2str (dkp->exptime, 's'));
135*00b67f09SDavid van Moolenbroek if ( ageflag )
136*00b67f09SDavid van Moolenbroek printf (" %16s", age2str (dki_age (dkp, currtime)));
137*00b67f09SDavid van Moolenbroek if ( lifetimeflag && dkp->lifetime )
138*00b67f09SDavid van Moolenbroek {
139*00b67f09SDavid van Moolenbroek if ( dkp->status == 'a' )
140*00b67f09SDavid van Moolenbroek printf ("%c", (currtime < dkp->time + dkp->lifetime) ? '<' : '!');
141*00b67f09SDavid van Moolenbroek else
142*00b67f09SDavid van Moolenbroek putchar (' ');
143*00b67f09SDavid van Moolenbroek printf ("%hdd", dki_lifetimedays (dkp));
144*00b67f09SDavid van Moolenbroek }
145*00b67f09SDavid van Moolenbroek tc_attr (stdout, color, 0);
146*00b67f09SDavid van Moolenbroek putchar ('\n');
147*00b67f09SDavid van Moolenbroek }
148*00b67f09SDavid van Moolenbroek }
149*00b67f09SDavid van Moolenbroek
150*00b67f09SDavid van Moolenbroek #if defined(USE_TREE) && USE_TREE
list_key(const dki_t ** nodep,const VISIT which,int depth)151*00b67f09SDavid van Moolenbroek static void list_key (const dki_t **nodep, const VISIT which, int depth)
152*00b67f09SDavid van Moolenbroek {
153*00b67f09SDavid van Moolenbroek const dki_t *dkp;
154*00b67f09SDavid van Moolenbroek static const char *oldpath = "";
155*00b67f09SDavid van Moolenbroek
156*00b67f09SDavid van Moolenbroek if ( nodep == NULL )
157*00b67f09SDavid van Moolenbroek return;
158*00b67f09SDavid van Moolenbroek //fprintf (stderr, "listkey %d %d %s\n", which, depth, dkp->name);
159*00b67f09SDavid van Moolenbroek
160*00b67f09SDavid van Moolenbroek if ( which == INORDER || which == LEAF )
161*00b67f09SDavid van Moolenbroek {
162*00b67f09SDavid van Moolenbroek dkp = *nodep;
163*00b67f09SDavid van Moolenbroek while ( dkp ) /* loop through list */
164*00b67f09SDavid van Moolenbroek {
165*00b67f09SDavid van Moolenbroek if ( labellist == NULL || isinlist (dkp->name, labellist) )
166*00b67f09SDavid van Moolenbroek printkeyinfo (dkp, oldpath); /* print entry */
167*00b67f09SDavid van Moolenbroek oldpath = dkp->dname;
168*00b67f09SDavid van Moolenbroek dkp = dkp->next;
169*00b67f09SDavid van Moolenbroek }
170*00b67f09SDavid van Moolenbroek }
171*00b67f09SDavid van Moolenbroek }
172*00b67f09SDavid van Moolenbroek #endif
173*00b67f09SDavid van Moolenbroek
zkt_list_keys(const dki_t * data)174*00b67f09SDavid van Moolenbroek void zkt_list_keys (const dki_t *data)
175*00b67f09SDavid van Moolenbroek {
176*00b67f09SDavid van Moolenbroek #if ! defined(USE_TREE) || !USE_TREE
177*00b67f09SDavid van Moolenbroek const dki_t *dkp;
178*00b67f09SDavid van Moolenbroek const char *oldpath;
179*00b67f09SDavid van Moolenbroek #endif
180*00b67f09SDavid van Moolenbroek
181*00b67f09SDavid van Moolenbroek if ( data ) /* print headline if list is not empty */
182*00b67f09SDavid van Moolenbroek printkeyinfo (NULL, "");
183*00b67f09SDavid van Moolenbroek
184*00b67f09SDavid van Moolenbroek #if defined(USE_TREE) && USE_TREE
185*00b67f09SDavid van Moolenbroek twalk (data, list_key);
186*00b67f09SDavid van Moolenbroek #else
187*00b67f09SDavid van Moolenbroek oldpath = "";
188*00b67f09SDavid van Moolenbroek for ( dkp = data; dkp; dkp = dkp->next ) /* loop through list */
189*00b67f09SDavid van Moolenbroek {
190*00b67f09SDavid van Moolenbroek if ( labellist == NULL || isinlist (dkp->name, labellist) )
191*00b67f09SDavid van Moolenbroek printkeyinfo (dkp, oldpath); /* print entry */
192*00b67f09SDavid van Moolenbroek oldpath = dkp->dname;
193*00b67f09SDavid van Moolenbroek }
194*00b67f09SDavid van Moolenbroek #endif
195*00b67f09SDavid van Moolenbroek }
196*00b67f09SDavid van Moolenbroek
197*00b67f09SDavid van Moolenbroek #if defined(USE_TREE) && USE_TREE
198*00b67f09SDavid van Moolenbroek # if 0
199*00b67f09SDavid van Moolenbroek static void list_trustedkey (const dki_t **nodep, const VISIT which, int depth)
200*00b67f09SDavid van Moolenbroek {
201*00b67f09SDavid van Moolenbroek const dki_t *dkp;
202*00b67f09SDavid van Moolenbroek
203*00b67f09SDavid van Moolenbroek if ( nodep == NULL )
204*00b67f09SDavid van Moolenbroek return;
205*00b67f09SDavid van Moolenbroek
206*00b67f09SDavid van Moolenbroek dkp = *nodep;
207*00b67f09SDavid van Moolenbroek if ( which == INORDER || which == LEAF )
208*00b67f09SDavid van Moolenbroek {
209*00b67f09SDavid van Moolenbroek // fprintf (stderr, "list_trustedkey order=%d(pre=0,in=1,post=2,leaf=3) depth=%d %s\n", which, depth, dkp->name);
210*00b67f09SDavid van Moolenbroek /* loop through list */
211*00b67f09SDavid van Moolenbroek while ( dkp )
212*00b67f09SDavid van Moolenbroek {
213*00b67f09SDavid van Moolenbroek if ( (dki_isksk (dkp) || zskflag) &&
214*00b67f09SDavid van Moolenbroek (labellist == NULL || isinlist (dkp->name, labellist)) )
215*00b67f09SDavid van Moolenbroek dki_prt_trustedkey (dkp, stdout);
216*00b67f09SDavid van Moolenbroek dkp = dkp->next;
217*00b67f09SDavid van Moolenbroek }
218*00b67f09SDavid van Moolenbroek }
219*00b67f09SDavid van Moolenbroek }
220*00b67f09SDavid van Moolenbroek # else
221*00b67f09SDavid van Moolenbroek const dki_t *parent;
list_trustedkey(const dki_t ** nodep,const VISIT which,int depth)222*00b67f09SDavid van Moolenbroek static void list_trustedkey (const dki_t **nodep, const VISIT which, int depth)
223*00b67f09SDavid van Moolenbroek {
224*00b67f09SDavid van Moolenbroek const dki_t *dkp;
225*00b67f09SDavid van Moolenbroek
226*00b67f09SDavid van Moolenbroek if ( nodep == NULL )
227*00b67f09SDavid van Moolenbroek return;
228*00b67f09SDavid van Moolenbroek
229*00b67f09SDavid van Moolenbroek dkp = *nodep;
230*00b67f09SDavid van Moolenbroek if ( which == INORDER || which == LEAF )
231*00b67f09SDavid van Moolenbroek {
232*00b67f09SDavid van Moolenbroek // fprintf (stderr, "list_trustedkey order=%d(pre=0,in=1,post=2,leaf=3) depth=%d %s\n", which, depth, dkp->name);
233*00b67f09SDavid van Moolenbroek if ( labellist && !isinlist (dkp->name, labellist) )
234*00b67f09SDavid van Moolenbroek return;
235*00b67f09SDavid van Moolenbroek
236*00b67f09SDavid van Moolenbroek if ( parent == NULL || !issubdomain (dkp->name, parent->name) )
237*00b67f09SDavid van Moolenbroek {
238*00b67f09SDavid van Moolenbroek parent = dkp;
239*00b67f09SDavid van Moolenbroek /* loop through list */
240*00b67f09SDavid van Moolenbroek while ( dkp )
241*00b67f09SDavid van Moolenbroek {
242*00b67f09SDavid van Moolenbroek if ( (dki_isksk (dkp) || zskflag) )
243*00b67f09SDavid van Moolenbroek dki_prt_trustedkey (dkp, stdout);
244*00b67f09SDavid van Moolenbroek dkp = dkp->next;
245*00b67f09SDavid van Moolenbroek }
246*00b67f09SDavid van Moolenbroek }
247*00b67f09SDavid van Moolenbroek }
248*00b67f09SDavid van Moolenbroek }
list_managedkey(const dki_t ** nodep,const VISIT which,int depth)249*00b67f09SDavid van Moolenbroek static void list_managedkey (const dki_t **nodep, const VISIT which, int depth)
250*00b67f09SDavid van Moolenbroek {
251*00b67f09SDavid van Moolenbroek const dki_t *dkp;
252*00b67f09SDavid van Moolenbroek
253*00b67f09SDavid van Moolenbroek if ( nodep == NULL )
254*00b67f09SDavid van Moolenbroek return;
255*00b67f09SDavid van Moolenbroek
256*00b67f09SDavid van Moolenbroek dkp = *nodep;
257*00b67f09SDavid van Moolenbroek if ( which == INORDER || which == LEAF )
258*00b67f09SDavid van Moolenbroek {
259*00b67f09SDavid van Moolenbroek // fprintf (stderr, "list_trustedkey order=%d(pre=0,in=1,post=2,leaf=3) depth=%d %s\n", which, depth, dkp->name);
260*00b67f09SDavid van Moolenbroek if ( labellist && !isinlist (dkp->name, labellist) )
261*00b67f09SDavid van Moolenbroek return;
262*00b67f09SDavid van Moolenbroek
263*00b67f09SDavid van Moolenbroek if ( parent == NULL || !issubdomain (dkp->name, parent->name) )
264*00b67f09SDavid van Moolenbroek {
265*00b67f09SDavid van Moolenbroek const dki_t *dkp_head = NULL;
266*00b67f09SDavid van Moolenbroek const dki_t *standby = NULL;
267*00b67f09SDavid van Moolenbroek
268*00b67f09SDavid van Moolenbroek parent = dkp;
269*00b67f09SDavid van Moolenbroek
270*00b67f09SDavid van Moolenbroek dkp_head = dkp;
271*00b67f09SDavid van Moolenbroek /* look for a standby key */
272*00b67f09SDavid van Moolenbroek for ( dkp = dkp_head; dkp; dkp = dkp->next )
273*00b67f09SDavid van Moolenbroek if ( dki_isksk (dkp) && dki_ispublished (dkp) )
274*00b67f09SDavid van Moolenbroek standby = dkp;
275*00b67f09SDavid van Moolenbroek
276*00b67f09SDavid van Moolenbroek if ( !standby ) /* no standby key found ? */
277*00b67f09SDavid van Moolenbroek return;
278*00b67f09SDavid van Moolenbroek
279*00b67f09SDavid van Moolenbroek /* print all non-standby ksk */
280*00b67f09SDavid van Moolenbroek for ( dkp = dkp_head; dkp; dkp = dkp->next )
281*00b67f09SDavid van Moolenbroek if ( dki_isksk (dkp) && dkp != standby )
282*00b67f09SDavid van Moolenbroek dki_prt_managedkey (dkp, stdout);
283*00b67f09SDavid van Moolenbroek }
284*00b67f09SDavid van Moolenbroek }
285*00b67f09SDavid van Moolenbroek }
286*00b67f09SDavid van Moolenbroek # endif
287*00b67f09SDavid van Moolenbroek #endif
288*00b67f09SDavid van Moolenbroek
zkt_list_trustedkeys(const dki_t * data)289*00b67f09SDavid van Moolenbroek void zkt_list_trustedkeys (const dki_t *data)
290*00b67f09SDavid van Moolenbroek {
291*00b67f09SDavid van Moolenbroek
292*00b67f09SDavid van Moolenbroek /* print headline if list is not empty */
293*00b67f09SDavid van Moolenbroek if ( data && headerflag )
294*00b67f09SDavid van Moolenbroek printf ("trusted-keys {\n");
295*00b67f09SDavid van Moolenbroek
296*00b67f09SDavid van Moolenbroek #if defined(USE_TREE) && USE_TREE
297*00b67f09SDavid van Moolenbroek twalk (data, list_trustedkey);
298*00b67f09SDavid van Moolenbroek #else
299*00b67f09SDavid van Moolenbroek for ( dkp = data; dkp; dkp = dkp->next ) /* loop through list */
300*00b67f09SDavid van Moolenbroek if ( (dki_isksk (dkp) || zskflag) &&
301*00b67f09SDavid van Moolenbroek (labellist == NULL || isinlist (dkp->name, labellist)) )
302*00b67f09SDavid van Moolenbroek dki_prt_trustedkey (dkp, stdout);
303*00b67f09SDavid van Moolenbroek #endif
304*00b67f09SDavid van Moolenbroek
305*00b67f09SDavid van Moolenbroek /* print end of trusted-key section */
306*00b67f09SDavid van Moolenbroek if ( data && headerflag )
307*00b67f09SDavid van Moolenbroek printf ("};\n");
308*00b67f09SDavid van Moolenbroek }
309*00b67f09SDavid van Moolenbroek
zkt_list_managedkeys(const dki_t * data)310*00b67f09SDavid van Moolenbroek void zkt_list_managedkeys (const dki_t *data)
311*00b67f09SDavid van Moolenbroek {
312*00b67f09SDavid van Moolenbroek
313*00b67f09SDavid van Moolenbroek /* print headline if list is not empty */
314*00b67f09SDavid van Moolenbroek if ( data && headerflag )
315*00b67f09SDavid van Moolenbroek printf ("managed-keys {\n");
316*00b67f09SDavid van Moolenbroek
317*00b67f09SDavid van Moolenbroek #if defined(USE_TREE) && USE_TREE
318*00b67f09SDavid van Moolenbroek twalk (data, list_managedkey);
319*00b67f09SDavid van Moolenbroek #else
320*00b67f09SDavid van Moolenbroek for ( dkp = data; dkp; dkp = dkp->next ) /* loop through list */
321*00b67f09SDavid van Moolenbroek if ( (dki_isksk (dkp) || zskflag) &&
322*00b67f09SDavid van Moolenbroek (labellist == NULL || isinlist (dkp->name, labellist)) )
323*00b67f09SDavid van Moolenbroek dki_prt_managedkey (dkp, stdout);
324*00b67f09SDavid van Moolenbroek #endif
325*00b67f09SDavid van Moolenbroek
326*00b67f09SDavid van Moolenbroek /* print end of trusted-key section */
327*00b67f09SDavid van Moolenbroek if ( data && headerflag )
328*00b67f09SDavid van Moolenbroek printf ("};\n");
329*00b67f09SDavid van Moolenbroek }
330*00b67f09SDavid van Moolenbroek
331*00b67f09SDavid van Moolenbroek #if defined(USE_TREE) && USE_TREE
list_dnskey(const dki_t ** nodep,const VISIT which,int depth)332*00b67f09SDavid van Moolenbroek static void list_dnskey (const dki_t **nodep, const VISIT which, int depth)
333*00b67f09SDavid van Moolenbroek {
334*00b67f09SDavid van Moolenbroek const dki_t *dkp;
335*00b67f09SDavid van Moolenbroek int ksk;
336*00b67f09SDavid van Moolenbroek
337*00b67f09SDavid van Moolenbroek if ( nodep == NULL )
338*00b67f09SDavid van Moolenbroek return;
339*00b67f09SDavid van Moolenbroek
340*00b67f09SDavid van Moolenbroek if ( which == INORDER || which == LEAF )
341*00b67f09SDavid van Moolenbroek for ( dkp = *nodep; dkp; dkp = dkp->next )
342*00b67f09SDavid van Moolenbroek {
343*00b67f09SDavid van Moolenbroek ksk = dki_isksk (dkp);
344*00b67f09SDavid van Moolenbroek if ( (ksk && !kskflag) || (!ksk && !zskflag) )
345*00b67f09SDavid van Moolenbroek continue;
346*00b67f09SDavid van Moolenbroek
347*00b67f09SDavid van Moolenbroek if ( labellist == NULL || isinlist (dkp->name, labellist) )
348*00b67f09SDavid van Moolenbroek {
349*00b67f09SDavid van Moolenbroek if ( headerflag )
350*00b67f09SDavid van Moolenbroek dki_prt_comment (dkp, stdout);
351*00b67f09SDavid van Moolenbroek dki_prt_dnskey (dkp, stdout);
352*00b67f09SDavid van Moolenbroek }
353*00b67f09SDavid van Moolenbroek }
354*00b67f09SDavid van Moolenbroek }
355*00b67f09SDavid van Moolenbroek #endif
356*00b67f09SDavid van Moolenbroek
zkt_list_dnskeys(const dki_t * data)357*00b67f09SDavid van Moolenbroek void zkt_list_dnskeys (const dki_t *data)
358*00b67f09SDavid van Moolenbroek {
359*00b67f09SDavid van Moolenbroek #if defined(USE_TREE) && USE_TREE
360*00b67f09SDavid van Moolenbroek twalk (data, list_dnskey);
361*00b67f09SDavid van Moolenbroek #else
362*00b67f09SDavid van Moolenbroek const dki_t *dkp;
363*00b67f09SDavid van Moolenbroek int ksk;
364*00b67f09SDavid van Moolenbroek
365*00b67f09SDavid van Moolenbroek for ( dkp = data; dkp; dkp = dkp->next )
366*00b67f09SDavid van Moolenbroek {
367*00b67f09SDavid van Moolenbroek ksk = dki_isksk (dkp);
368*00b67f09SDavid van Moolenbroek if ( (ksk && !kskflag) || (!ksk && !zskflag) )
369*00b67f09SDavid van Moolenbroek continue;
370*00b67f09SDavid van Moolenbroek
371*00b67f09SDavid van Moolenbroek if ( labellist == NULL || isinlist (dkp->name, labellist) )
372*00b67f09SDavid van Moolenbroek {
373*00b67f09SDavid van Moolenbroek if ( headerflag )
374*00b67f09SDavid van Moolenbroek dki_prt_comment (dkp, stdout);
375*00b67f09SDavid van Moolenbroek dki_prt_dnskey (dkp, stdout);
376*00b67f09SDavid van Moolenbroek }
377*00b67f09SDavid van Moolenbroek }
378*00b67f09SDavid van Moolenbroek #endif
379*00b67f09SDavid van Moolenbroek }
380*00b67f09SDavid van Moolenbroek
381*00b67f09SDavid van Moolenbroek #if defined(USE_TREE) && USE_TREE
set_keylifetime(const dki_t ** nodep,const VISIT which,int depth)382*00b67f09SDavid van Moolenbroek static void set_keylifetime (const dki_t **nodep, const VISIT which, int depth)
383*00b67f09SDavid van Moolenbroek {
384*00b67f09SDavid van Moolenbroek const dki_t *dkp;
385*00b67f09SDavid van Moolenbroek int ksk;
386*00b67f09SDavid van Moolenbroek
387*00b67f09SDavid van Moolenbroek if ( nodep == NULL )
388*00b67f09SDavid van Moolenbroek return;
389*00b67f09SDavid van Moolenbroek
390*00b67f09SDavid van Moolenbroek if ( which == INORDER || which == LEAF )
391*00b67f09SDavid van Moolenbroek for ( dkp = *nodep; dkp; dkp = dkp->next )
392*00b67f09SDavid van Moolenbroek {
393*00b67f09SDavid van Moolenbroek ksk = dki_isksk (dkp);
394*00b67f09SDavid van Moolenbroek if ( (ksk && !kskflag) || (!ksk && !zskflag) )
395*00b67f09SDavid van Moolenbroek continue;
396*00b67f09SDavid van Moolenbroek
397*00b67f09SDavid van Moolenbroek if ( labellist == NULL || isinlist (dkp->name, labellist) )
398*00b67f09SDavid van Moolenbroek dki_setlifetime ((dki_t *)dkp, lifetime);
399*00b67f09SDavid van Moolenbroek }
400*00b67f09SDavid van Moolenbroek }
401*00b67f09SDavid van Moolenbroek #endif
402*00b67f09SDavid van Moolenbroek
zkt_setkeylifetime(dki_t * data)403*00b67f09SDavid van Moolenbroek void zkt_setkeylifetime (dki_t *data)
404*00b67f09SDavid van Moolenbroek {
405*00b67f09SDavid van Moolenbroek #if defined(USE_TREE) && USE_TREE
406*00b67f09SDavid van Moolenbroek twalk (data, set_keylifetime);
407*00b67f09SDavid van Moolenbroek #else
408*00b67f09SDavid van Moolenbroek dki_t *dkp;
409*00b67f09SDavid van Moolenbroek int ksk;
410*00b67f09SDavid van Moolenbroek
411*00b67f09SDavid van Moolenbroek for ( dkp = data; dkp; dkp = dkp->next )
412*00b67f09SDavid van Moolenbroek {
413*00b67f09SDavid van Moolenbroek ksk = dki_isksk (dkp);
414*00b67f09SDavid van Moolenbroek if ( (ksk && !kskflag) || (!ksk && !zskflag) )
415*00b67f09SDavid van Moolenbroek continue;
416*00b67f09SDavid van Moolenbroek
417*00b67f09SDavid van Moolenbroek if ( labellist == NULL || isinlist (dkp->name, labellist) )
418*00b67f09SDavid van Moolenbroek {
419*00b67f09SDavid van Moolenbroek dki_setlifetime (dkp, lifetime);
420*00b67f09SDavid van Moolenbroek }
421*00b67f09SDavid van Moolenbroek }
422*00b67f09SDavid van Moolenbroek #endif
423*00b67f09SDavid van Moolenbroek }
424*00b67f09SDavid van Moolenbroek
425*00b67f09SDavid van Moolenbroek
426*00b67f09SDavid van Moolenbroek #if defined(USE_TREE) && USE_TREE
427*00b67f09SDavid van Moolenbroek static const dki_t *searchresult;
428*00b67f09SDavid van Moolenbroek static int searchitem;
tag_search(const dki_t ** nodep,const VISIT which,int depth)429*00b67f09SDavid van Moolenbroek static void tag_search (const dki_t **nodep, const VISIT which, int depth)
430*00b67f09SDavid van Moolenbroek {
431*00b67f09SDavid van Moolenbroek const dki_t *dkp;
432*00b67f09SDavid van Moolenbroek
433*00b67f09SDavid van Moolenbroek if ( nodep == NULL )
434*00b67f09SDavid van Moolenbroek return;
435*00b67f09SDavid van Moolenbroek
436*00b67f09SDavid van Moolenbroek if ( which == PREORDER || which == LEAF )
437*00b67f09SDavid van Moolenbroek for ( dkp = *nodep; dkp; dkp = dkp->next )
438*00b67f09SDavid van Moolenbroek {
439*00b67f09SDavid van Moolenbroek if ( dkp->tag == searchitem )
440*00b67f09SDavid van Moolenbroek {
441*00b67f09SDavid van Moolenbroek if ( searchresult == NULL )
442*00b67f09SDavid van Moolenbroek searchresult = dkp;
443*00b67f09SDavid van Moolenbroek else
444*00b67f09SDavid van Moolenbroek searchitem = 0;
445*00b67f09SDavid van Moolenbroek }
446*00b67f09SDavid van Moolenbroek }
447*00b67f09SDavid van Moolenbroek }
448*00b67f09SDavid van Moolenbroek #endif
zkt_search(const dki_t * data,int searchtag,const char * keyname)449*00b67f09SDavid van Moolenbroek const dki_t *zkt_search (const dki_t *data, int searchtag, const char *keyname)
450*00b67f09SDavid van Moolenbroek {
451*00b67f09SDavid van Moolenbroek const dki_t *dkp = NULL;
452*00b67f09SDavid van Moolenbroek
453*00b67f09SDavid van Moolenbroek #if defined(USE_TREE) && USE_TREE
454*00b67f09SDavid van Moolenbroek if ( keyname == NULL || *keyname == '\0' )
455*00b67f09SDavid van Moolenbroek {
456*00b67f09SDavid van Moolenbroek searchresult = NULL;
457*00b67f09SDavid van Moolenbroek searchitem = searchtag;
458*00b67f09SDavid van Moolenbroek twalk (data, tag_search);
459*00b67f09SDavid van Moolenbroek if ( searchresult != NULL && searchitem == 0 )
460*00b67f09SDavid van Moolenbroek dkp = (void *)01;
461*00b67f09SDavid van Moolenbroek else
462*00b67f09SDavid van Moolenbroek dkp = searchresult;
463*00b67f09SDavid van Moolenbroek }
464*00b67f09SDavid van Moolenbroek else
465*00b67f09SDavid van Moolenbroek dkp = (dki_t*)dki_tsearch (data, searchtag, keyname);
466*00b67f09SDavid van Moolenbroek #else
467*00b67f09SDavid van Moolenbroek dkp = (dki_t*)dki_search (data, searchtag, keyname);
468*00b67f09SDavid van Moolenbroek #endif
469*00b67f09SDavid van Moolenbroek return dkp;
470*00b67f09SDavid van Moolenbroek }
471*00b67f09SDavid van Moolenbroek
472