Home | History | Annotate | Line # | Download | only in pf
pf2netbsd revision 1.1
      1 #!/bin/sh
      2 #
      3 #   $NetBSD: pf2netbsd,v 1.1 2009/12/01 06:27:57 martti Exp $
      4 #
      5 # Copyright (c) 2009 The NetBSD Foundation, Inc.
      6 # All rights reserved.
      7 #
      8 # Redistribution and use in source and binary forms, with or without
      9 # modification, are permitted provided that the following conditions
     10 # are met:
     11 # 1. Redistributions of source code must retain the above copyright
     12 #    notice, this list of conditions and the following disclaimer.
     13 # 2. Redistributions in binary form must reproduce the above copyright
     14 #    notice, this list of conditions and the following disclaimer in the
     15 #    documentation and/or other materials provided with the distribution.
     16 #
     17 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     18 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     19 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     20 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     21 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     22 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     23 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     24 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     25 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     26 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     27 # POSSIBILITY OF SUCH DAMAGE.
     28 #
     29 
     30 usage()
     31 {
     32     cat << EOF
     33 
     34 Usage: `basename $0` [options] srcdir dstdir
     35 
     36 where
     37 
     38 -h      This help
     39 -v      Be verbose
     40 
     41 Example:
     42 
     43 `basename $0` /tmp/openbsd-4.2 /tmp/netbsd-4.2
     44 
     45 EOF
     46     exit 1
     47 }
     48 
     49 verbose()
     50 {
     51     ${VERBOSE} && echo $*
     52     eval $*
     53 }
     54 
     55 mklist()
     56 {
     57     # $1 = filename
     58 
     59     if [ -z "$1" ]; then
     60         echo "ERROR: Not enough arguments for mklist!"
     61         exit 1
     62     fi
     63     cat > $1 << EOF
     64 etc/pf.conf
     65 etc/pf.os
     66 libexec/tftp-proxy/filter.c
     67 libexec/tftp-proxy/filter.h
     68 libexec/tftp-proxy/Makefile
     69 libexec/tftp-proxy/tftp-proxy.8
     70 libexec/tftp-proxy/tftp-proxy.c
     71 sbin/pfctl/Makefile
     72 sbin/pfctl/parse.y
     73 sbin/pfctl/pfctl.8
     74 sbin/pfctl/pfctl_altq.c
     75 sbin/pfctl/pfctl.c
     76 sbin/pfctl/pfctl.h
     77 sbin/pfctl/pfctl_optimize.c
     78 sbin/pfctl/pfctl_osfp.c
     79 sbin/pfctl/pfctl_parser.c
     80 sbin/pfctl/pfctl_parser.h
     81 sbin/pfctl/pfctl_qstats.c
     82 sbin/pfctl/pfctl_radix.c
     83 sbin/pfctl/pfctl_table.c
     84 sbin/pfctl/pf_print_state.c
     85 sbin/pflogd/Makefile
     86 sbin/pflogd/pflogd.8
     87 sbin/pflogd/pflogd.c
     88 sbin/pflogd/pflogd.h
     89 sbin/pflogd/privsep.c
     90 sbin/pflogd/privsep_fdpass.c
     91 share/man/man4/pf.4
     92 share/man/man4/pflog.4
     93 share/man/man4/pfsync.4
     94 share/man/man5/pf.conf.5
     95 share/man/man5/pf.os.5
     96 share/pf/ackpri
     97 share/pf/faq-example1
     98 share/pf/faq-example2
     99 share/pf/faq-example3
    100 share/pf/Makefile
    101 share/pf/queue1
    102 share/pf/queue2
    103 share/pf/queue3
    104 share/pf/queue4
    105 share/pf/spamd
    106 usr.sbin/authpf/authpf.8
    107 usr.sbin/authpf/authpf.c
    108 usr.sbin/authpf/Makefile
    109 usr.sbin/authpf/pathnames.h
    110 usr.sbin/ftp-proxy/filter.c
    111 usr.sbin/ftp-proxy/filter.h
    112 usr.sbin/ftp-proxy/ftp-proxy.8
    113 usr.sbin/ftp-proxy/ftp-proxy.c
    114 usr.sbin/ftp-proxy/Makefile
    115 sys/net/if.c
    116 sys/net/if.h
    117 sys/net/if_pflog.c
    118 sys/net/if_pflog.h
    119 sys/net/if_pfsync.c
    120 sys/net/if_pfsync.h
    121 sys/net/pf.c
    122 sys/net/pf_if.c
    123 sys/net/pf_ioctl.c
    124 sys/net/pf_norm.c
    125 sys/net/pf_osfp.c
    126 sys/net/pf_ruleset.c
    127 sys/net/pf_table.c
    128 sys/net/pfvar.h
    129 sys/netinet/tcp_subr.c
    130 sys/netinet/tcp_var.h
    131 EOF
    132 }
    133 
    134 openbsd2netbsd()
    135 {
    136     # $1 = srcdir
    137     # $2 = dstdir
    138 
    139     if [ -z "$2" ]; then
    140         echo "ERROR: Not enough arguments for openbsd2netbsd!"
    141         exit 1
    142     fi
    143     if [ -d $2/dist/pf ]; then
    144         echo "ERROR: $2 already exists!"
    145         exit 1
    146     fi
    147     if [ -d "$1/src" ]; then
    148         echo "ERROR: Use $1/src as the srcdir!"
    149         exit 1
    150     fi
    151 
    152     cd $1 || exit 1
    153 
    154     # Copy from OpenBSD
    155     verbose "mklist /tmp/pf.$$"
    156     verbose "mkdir -p $2"
    157     verbose "tar -c -T /tmp/pf.$$ -f- | tar -x -f- -C $2"
    158 
    159     # Some files have different name/location in NetBSD
    160     verbose cd $2
    161     verbose mkdir -p dist/pf sys/dist/pf
    162 
    163     verbose cd $2/sys/net
    164     verbose mv if.c if_compat.c
    165     verbose mv if.h if_compat.h
    166     verbose cp pf.c pf_mtag.c
    167     verbose cp pfvar.h pf_mtag.h
    168 
    169     verbose cd $2/sys/netinet
    170     verbose mv tcp_subr.c tcp_rndiss.c
    171     verbose mv tcp_var.h tcp_rndiss.h
    172 
    173     verbose cd $2
    174     verbose mv etc libexec sbin share usr.sbin dist/pf/
    175 
    176     verbose cd $2/sys
    177     verbose mv net netinet dist/pf/
    178 
    179     # Remove references to the OpenBSD CVS
    180     find $2 -name CVS | xargs rm -rf
    181 
    182 #   # Remove the $'s around various CVS keywords
    183 #   find $2 -type f | \
    184 #   while read f
    185 #   do
    186 #       sed -e 's/\$\(Id.*\) \$/\1/'        \
    187 #           -e 's/\$\(Date.*\) \$/\1/'      \
    188 #           -e 's/\$\(Header.*\) \$/\1/'    \
    189 #           ${f} > ${f}.fixed
    190 #       mv ${f}.fixed ${f}
    191 #       echo "Deactivated CVS keywords from ${f}"
    192 #   done
    193 
    194     # Add the NetBSD keyword
    195     find $2 -type f -name '*.[chly]' | \
    196     grep -v -e if_compat -e tcp_rndiss | \
    197     while read f
    198     do
    199         sed 1q < ${f} | grep -q '\$NetBSD' || (
    200         cat > /tmp/pf2n.$$ <<  EOF
    201 /*	\$NetBSD\$	*/
    202 EOF
    203         cat ${f} >> /tmp/pf2n.$$
    204         mv /tmp/pf2n.$$ ${f}
    205         )
    206     done
    207     find $2 -type f -name '*.[0-9]' | \
    208     while read f
    209     do
    210         sed 1q < ${f} | grep -q '\$NetBSD' || (
    211         cat > /tmp/pf2n.$$ <<  EOF
    212 .\"	\$NetBSD\$
    213 EOF
    214         cat ${f} >> /tmp/pf2n.$$
    215         mv /tmp/pf2n.$$ ${f}
    216         )
    217     done
    218     find $2 -type f -name 'faq*' -o -name 'queue*' \
    219       -o -name 'ackpri' -o -name 'spamd' | \
    220     while read f
    221     do
    222         sed 1q < ${f} | grep -q '\$NetBSD' || (
    223         cat > /tmp/pf2n.$$ <<  EOF
    224 # \$NetBSD\$
    225 EOF
    226         cat ${f} >> /tmp/pf2n.$$
    227         mv /tmp/pf2n.$$ ${f}
    228         )
    229     done
    230     find $2 -type f -name 'Makefile' | \
    231     while read f
    232     do
    233         sed 1q < ${f} | grep -q '\$NetBSD' || (
    234         cat > /tmp/pf2n.$$ <<  EOF
    235 #	\$NetBSD\$
    236 EOF
    237         cat ${f} >> /tmp/pf2n.$$
    238         mv /tmp/pf2n.$$ ${f}
    239         )
    240     done
    241 }
    242 
    243 ##
    244 ## MAIN
    245 ##
    246 VERBOSE=false
    247 
    248 ARGV=`getopt hv ${*}`
    249 [ ${?} != 0 ] && exit 1
    250 set -- ${ARGV}
    251 for i
    252 do
    253     case "${i}" in
    254     -h)
    255         usage
    256         shift
    257         ;;
    258     -v)
    259         VERBOSE=true
    260         shift
    261         ;;
    262     --)
    263         shift
    264         ;;
    265     esac
    266 done
    267 [ $# -ne 2 ] && usage
    268 
    269 openbsd2netbsd $1 $2
    270 rm -f /tmp/pf.$$
    271 echo ""
    272 echo "The sources-to-be-imported are now in $2"
    273 echo ""
    274