#!/usr/bin/perl -w # # $Id: elidesecrets,v 1.1 2005/01/31 22:49:08 dgregor Exp $ # # Copyright (c) 1997,1999,2005 Daniel J. Gregor, Jr. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # - Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # - Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials provided # with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # $formats = { '-ciscoconfig' => [ "Cisco IOS configuration file", '(enable secret 5 )(?:\S+)()', '(password 7 )(?:\S+)()', ], '(snmp-server community )(?:\S+)( \S+)', '(crypto isakmp key )(?:\S+)( address \S+)', '-slapdconf' => [ "OpenLDAP slapd.conf configuration file", '(rootpw\s+)(?:[^#]+)()', '(credentials=)(?:[^#]+)()', ], '-ldif' => [ "LDIF", '^((?i:userpassword|sambalmpassword|sambantpassword):\s*)(?:.*)()', ], }; $usage = "elidesecrets []"; $formatusage = "allowed formats:\n"; for my $f (keys(%$formats)) { $formatusage .= sprintf(" %-20s %s\n", $f, (@{$$formats{$f}})[0]); } if (@ARGV < 1) { warn("$0: you need to specify a format specifier of the input file(s)\n"); warn("$0: usage: $usage\n"); die("$0: $formatusage"); } $format = shift(@ARGV); if (!exists($$formats{$format})) { die("$0: format \"$format\" unknown."); } $regexps = $$formats{$format}; shift(@$regexps); while (<>) { chomp(); for my $f (@$regexps) { s/$f/$1$2/g; } print("$_\n"); }