From: Wayne M. <te...@us...> - 2005-03-11 23:53:08
|
Update of /cvsroot/dnssec-tools/dnssec-tools/tools/modules In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26376 Modified Files: keyrec.pm Log Message: Added keyrec_del(), which deletes a keyrec from a keyrec file. Index: keyrec.pm =================================================================== RCS file: /cvsroot/dnssec-tools/dnssec-tools/tools/modules/keyrec.pm,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** keyrec.pm 21 Feb 2005 19:38:32 -0000 1.17 --- keyrec.pm 11 Mar 2005 23:52:59 -0000 1.18 *************** *** 1,4 **** # ! # Copyright 2004 Sparta, inc. All rights reserved. See the COPYING # file distributed with this software for details # --- 1,4 ---- # ! # Copyright 2005 Sparta, inc. All rights reserved. See the COPYING # file distributed with this software for details # *************** *** 52,56 **** our @EXPORT = qw(keyrec_read keyrec_names keyrec_fullrec keyrec_recval ! keyrec_setval keyrec_add keyrec_newkeyrec keyrec_keyfields keyrec_zonefields keyrec_init keyrec_discard keyrec_close keyrec_write --- 52,56 ---- our @EXPORT = qw(keyrec_read keyrec_names keyrec_fullrec keyrec_recval ! keyrec_setval keyrec_add keyrec_del keyrec_newkeyrec keyrec_keyfields keyrec_zonefields keyrec_init keyrec_discard keyrec_close keyrec_write *************** *** 456,460 **** } - #-------------------------------------------------------------------------- # --- 456,459 ---- *************** *** 600,603 **** --- 599,705 ---- #-------------------------------------------------------------------------- # + # Routine: keyrec_del() + # + # Purpose: Deletes a keyrec and fields from %keyrecs and $keyreclines. + # + sub keyrec_del + { + my $krname = shift; # Name of keyrec we're creating. + + my %keyrec; # Keyrec to be deleted. + my $krr; # Keyrec reference. + my $krtype; # Keyrec's type. + + my $ind; # Index into keyreclines. + my $krind; # Index to keyrec's first line. + my $line; # Keyrec line from @keyreclines. + my $lkey; # Keyrec line's key. + my $lval; # Keyrec line's value. + my $len; # Length of array slice to delete. + + # + # Don't allow empty keyrec names. + # + return(-1) if($krname eq ""); + + # + # Get a copy of the keyrec from the keyrec hash and then delete + # the original. + # + $krr = $keyrecs{$krname}; + %keyrec = %$krr; + delete $keyrecs{$krname}; + + # + # Get the keyrec's type. + # + $krtype = "zone"; + $krtype = "key" if($keyrec{'keyrec_type'} ne "zone"); + + # + # Find the index of the first line for this keyrec in the + # list of file lines. + # + for($ind = 0;$ind < $keyreclen; $ind++) + { + $line = $keyreclines[$ind]; + + $line =~ /\s*(\S+)\s+(\S+)/; + $lkey = $1; + $lval = $2; + + $lval =~ s/"//g; + + last if(($lkey eq $krtype) && ($lval eq $krname)); + } + $krind = $ind; + + # + # If we didn't find a keyrec with this name, return failure. + # + return(-1) if($ind == $keyreclen); + + # + # Find the beginning of the next keyrec. + # + for($ind = $krind+1;$ind < $keyreclen; $ind++) + { + $line = $keyreclines[$ind]; + + $line =~ /\s*(\S+)\s+(\S+)/; + $lkey = $1; + $lval = $2; + + last if(($lkey eq "zone") || ($lkey eq "key")); + } + $ind--; + + # + # Find the end of the previous keyrec (the one to be deleted.) + # + while($ind > $krind) + { + last if($keyreclines[$ind] ne "\n"); + $ind--; + } + + # + # Delete the keyrec from @keyreclines. + # + $len = $ind - $krind + 1; + splice(@keyreclines,$krind,$len); + $keyreclen -= $len; + + # + # Tell the world (or at least the module) that the file has + # been modified. + # + $modified = 1; + keyrec_write(); + return(0); + } + + #-------------------------------------------------------------------------- + # # Routine: keyrec_newkeyrec() # *************** *** 787,790 **** --- 889,895 ---- keyrec_add("key","Kportrigh.com.+005+12345",\%keydata); + keyrec_del("portrigh.com"); + keyrec_del("Kportrigh.com.+005+12345"); + keyrec_setval("zone","portrigh.com","zonefile","db.portrigh.com"); *************** *** 834,843 **** I<keyrec> file. If a I<keyrec> file is no longer wanted to be open, yet the contents should not be saved, I<keyrec_discard()> gets rid of the data closes ! the file handle B<without> saving any modified data. =head1 KEYREC INTERFACES ! The following are the user interfaces to the I<Net::DNS::SEC::Tools::keyrec> ! module. =head2 I<keyrec_add(keyrec_type,keyrec_name,fields)> --- 939,947 ---- I<keyrec> file. If a I<keyrec> file is no longer wanted to be open, yet the contents should not be saved, I<keyrec_discard()> gets rid of the data closes ! and the file handle B<without> saving any modified data. =head1 KEYREC INTERFACES ! The interfaces to the I<Net::DNS::SEC::Tools::keyrec> module are given below. =head2 I<keyrec_add(keyrec_type,keyrec_name,fields)> *************** *** 873,877 **** 0 success ! -1 invalid krtype =head2 I<keyrec_close()> --- 977,996 ---- 0 success ! -1 invalid I<krtype> ! ! =head2 I<keyrec_del(keyrec_name)> ! ! This routine deletes a I<keyrec> from the I<keyrec> file and the internal ! representation of the file contents. The I<keyrec> is deleted from both ! the I<%keyrecs> hash table and the I<@keyreclines> array. ! ! Only the I<keyrec> itself is deleted from the file. Any associated comments ! and blank lines surrounding it are left intact. ! ! Return values are: ! ! 0 successful I<keyrec> deletion ! ! -1 invalid I<krtype> (empty string or unknown name) =head2 I<keyrec_close()> |