pf2netbsd revision 1.1
11.1Smartti#!/bin/sh
21.1Smartti#
31.1Smartti#   $NetBSD: pf2netbsd,v 1.1 2009/12/01 06:27:57 martti Exp $
41.1Smartti#
51.1Smartti# Copyright (c) 2009 The NetBSD Foundation, Inc.
61.1Smartti# All rights reserved.
71.1Smartti#
81.1Smartti# Redistribution and use in source and binary forms, with or without
91.1Smartti# modification, are permitted provided that the following conditions
101.1Smartti# are met:
111.1Smartti# 1. Redistributions of source code must retain the above copyright
121.1Smartti#    notice, this list of conditions and the following disclaimer.
131.1Smartti# 2. Redistributions in binary form must reproduce the above copyright
141.1Smartti#    notice, this list of conditions and the following disclaimer in the
151.1Smartti#    documentation and/or other materials provided with the distribution.
161.1Smartti#
171.1Smartti# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
181.1Smartti# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
191.1Smartti# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
201.1Smartti# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
211.1Smartti# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
221.1Smartti# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
231.1Smartti# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
241.1Smartti# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
251.1Smartti# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
261.1Smartti# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
271.1Smartti# POSSIBILITY OF SUCH DAMAGE.
281.1Smartti#
291.1Smartti
301.1Smarttiusage()
311.1Smartti{
321.1Smartti    cat << EOF
331.1Smartti
341.1SmarttiUsage: `basename $0` [options] srcdir dstdir
351.1Smartti
361.1Smarttiwhere
371.1Smartti
381.1Smartti-h      This help
391.1Smartti-v      Be verbose
401.1Smartti
411.1SmarttiExample:
421.1Smartti
431.1Smartti`basename $0` /tmp/openbsd-4.2 /tmp/netbsd-4.2
441.1Smartti
451.1SmarttiEOF
461.1Smartti    exit 1
471.1Smartti}
481.1Smartti
491.1Smarttiverbose()
501.1Smartti{
511.1Smartti    ${VERBOSE} && echo $*
521.1Smartti    eval $*
531.1Smartti}
541.1Smartti
551.1Smarttimklist()
561.1Smartti{
571.1Smartti    # $1 = filename
581.1Smartti
591.1Smartti    if [ -z "$1" ]; then
601.1Smartti        echo "ERROR: Not enough arguments for mklist!"
611.1Smartti        exit 1
621.1Smartti    fi
631.1Smartti    cat > $1 << EOF
641.1Smarttietc/pf.conf
651.1Smarttietc/pf.os
661.1Smarttilibexec/tftp-proxy/filter.c
671.1Smarttilibexec/tftp-proxy/filter.h
681.1Smarttilibexec/tftp-proxy/Makefile
691.1Smarttilibexec/tftp-proxy/tftp-proxy.8
701.1Smarttilibexec/tftp-proxy/tftp-proxy.c
711.1Smarttisbin/pfctl/Makefile
721.1Smarttisbin/pfctl/parse.y
731.1Smarttisbin/pfctl/pfctl.8
741.1Smarttisbin/pfctl/pfctl_altq.c
751.1Smarttisbin/pfctl/pfctl.c
761.1Smarttisbin/pfctl/pfctl.h
771.1Smarttisbin/pfctl/pfctl_optimize.c
781.1Smarttisbin/pfctl/pfctl_osfp.c
791.1Smarttisbin/pfctl/pfctl_parser.c
801.1Smarttisbin/pfctl/pfctl_parser.h
811.1Smarttisbin/pfctl/pfctl_qstats.c
821.1Smarttisbin/pfctl/pfctl_radix.c
831.1Smarttisbin/pfctl/pfctl_table.c
841.1Smarttisbin/pfctl/pf_print_state.c
851.1Smarttisbin/pflogd/Makefile
861.1Smarttisbin/pflogd/pflogd.8
871.1Smarttisbin/pflogd/pflogd.c
881.1Smarttisbin/pflogd/pflogd.h
891.1Smarttisbin/pflogd/privsep.c
901.1Smarttisbin/pflogd/privsep_fdpass.c
911.1Smarttishare/man/man4/pf.4
921.1Smarttishare/man/man4/pflog.4
931.1Smarttishare/man/man4/pfsync.4
941.1Smarttishare/man/man5/pf.conf.5
951.1Smarttishare/man/man5/pf.os.5
961.1Smarttishare/pf/ackpri
971.1Smarttishare/pf/faq-example1
981.1Smarttishare/pf/faq-example2
991.1Smarttishare/pf/faq-example3
1001.1Smarttishare/pf/Makefile
1011.1Smarttishare/pf/queue1
1021.1Smarttishare/pf/queue2
1031.1Smarttishare/pf/queue3
1041.1Smarttishare/pf/queue4
1051.1Smarttishare/pf/spamd
1061.1Smarttiusr.sbin/authpf/authpf.8
1071.1Smarttiusr.sbin/authpf/authpf.c
1081.1Smarttiusr.sbin/authpf/Makefile
1091.1Smarttiusr.sbin/authpf/pathnames.h
1101.1Smarttiusr.sbin/ftp-proxy/filter.c
1111.1Smarttiusr.sbin/ftp-proxy/filter.h
1121.1Smarttiusr.sbin/ftp-proxy/ftp-proxy.8
1131.1Smarttiusr.sbin/ftp-proxy/ftp-proxy.c
1141.1Smarttiusr.sbin/ftp-proxy/Makefile
1151.1Smarttisys/net/if.c
1161.1Smarttisys/net/if.h
1171.1Smarttisys/net/if_pflog.c
1181.1Smarttisys/net/if_pflog.h
1191.1Smarttisys/net/if_pfsync.c
1201.1Smarttisys/net/if_pfsync.h
1211.1Smarttisys/net/pf.c
1221.1Smarttisys/net/pf_if.c
1231.1Smarttisys/net/pf_ioctl.c
1241.1Smarttisys/net/pf_norm.c
1251.1Smarttisys/net/pf_osfp.c
1261.1Smarttisys/net/pf_ruleset.c
1271.1Smarttisys/net/pf_table.c
1281.1Smarttisys/net/pfvar.h
1291.1Smarttisys/netinet/tcp_subr.c
1301.1Smarttisys/netinet/tcp_var.h
1311.1SmarttiEOF
1321.1Smartti}
1331.1Smartti
1341.1Smarttiopenbsd2netbsd()
1351.1Smartti{
1361.1Smartti    # $1 = srcdir
1371.1Smartti    # $2 = dstdir
1381.1Smartti
1391.1Smartti    if [ -z "$2" ]; then
1401.1Smartti        echo "ERROR: Not enough arguments for openbsd2netbsd!"
1411.1Smartti        exit 1
1421.1Smartti    fi
1431.1Smartti    if [ -d $2/dist/pf ]; then
1441.1Smartti        echo "ERROR: $2 already exists!"
1451.1Smartti        exit 1
1461.1Smartti    fi
1471.1Smartti    if [ -d "$1/src" ]; then
1481.1Smartti        echo "ERROR: Use $1/src as the srcdir!"
1491.1Smartti        exit 1
1501.1Smartti    fi
1511.1Smartti
1521.1Smartti    cd $1 || exit 1
1531.1Smartti
1541.1Smartti    # Copy from OpenBSD
1551.1Smartti    verbose "mklist /tmp/pf.$$"
1561.1Smartti    verbose "mkdir -p $2"
1571.1Smartti    verbose "tar -c -T /tmp/pf.$$ -f- | tar -x -f- -C $2"
1581.1Smartti
1591.1Smartti    # Some files have different name/location in NetBSD
1601.1Smartti    verbose cd $2
1611.1Smartti    verbose mkdir -p dist/pf sys/dist/pf
1621.1Smartti
1631.1Smartti    verbose cd $2/sys/net
1641.1Smartti    verbose mv if.c if_compat.c
1651.1Smartti    verbose mv if.h if_compat.h
1661.1Smartti    verbose cp pf.c pf_mtag.c
1671.1Smartti    verbose cp pfvar.h pf_mtag.h
1681.1Smartti
1691.1Smartti    verbose cd $2/sys/netinet
1701.1Smartti    verbose mv tcp_subr.c tcp_rndiss.c
1711.1Smartti    verbose mv tcp_var.h tcp_rndiss.h
1721.1Smartti
1731.1Smartti    verbose cd $2
1741.1Smartti    verbose mv etc libexec sbin share usr.sbin dist/pf/
1751.1Smartti
1761.1Smartti    verbose cd $2/sys
1771.1Smartti    verbose mv net netinet dist/pf/
1781.1Smartti
1791.1Smartti    # Remove references to the OpenBSD CVS
1801.1Smartti    find $2 -name CVS | xargs rm -rf
1811.1Smartti
1821.1Smartti#   # Remove the $'s around various CVS keywords
1831.1Smartti#   find $2 -type f | \
1841.1Smartti#   while read f
1851.1Smartti#   do
1861.1Smartti#       sed -e 's/\$\(Id.*\) \$/\1/'        \
1871.1Smartti#           -e 's/\$\(Date.*\) \$/\1/'      \
1881.1Smartti#           -e 's/\$\(Header.*\) \$/\1/'    \
1891.1Smartti#           ${f} > ${f}.fixed
1901.1Smartti#       mv ${f}.fixed ${f}
1911.1Smartti#       echo "Deactivated CVS keywords from ${f}"
1921.1Smartti#   done
1931.1Smartti
1941.1Smartti    # Add the NetBSD keyword
1951.1Smartti    find $2 -type f -name '*.[chly]' | \
1961.1Smartti    grep -v -e if_compat -e tcp_rndiss | \
1971.1Smartti    while read f
1981.1Smartti    do
1991.1Smartti        sed 1q < ${f} | grep -q '\$NetBSD' || (
2001.1Smartti        cat > /tmp/pf2n.$$ <<  EOF
2011.1Smartti/*	\$NetBSD\$	*/
2021.1SmarttiEOF
2031.1Smartti        cat ${f} >> /tmp/pf2n.$$
2041.1Smartti        mv /tmp/pf2n.$$ ${f}
2051.1Smartti        )
2061.1Smartti    done
2071.1Smartti    find $2 -type f -name '*.[0-9]' | \
2081.1Smartti    while read f
2091.1Smartti    do
2101.1Smartti        sed 1q < ${f} | grep -q '\$NetBSD' || (
2111.1Smartti        cat > /tmp/pf2n.$$ <<  EOF
2121.1Smartti.\"	\$NetBSD\$
2131.1SmarttiEOF
2141.1Smartti        cat ${f} >> /tmp/pf2n.$$
2151.1Smartti        mv /tmp/pf2n.$$ ${f}
2161.1Smartti        )
2171.1Smartti    done
2181.1Smartti    find $2 -type f -name 'faq*' -o -name 'queue*' \
2191.1Smartti      -o -name 'ackpri' -o -name 'spamd' | \
2201.1Smartti    while read f
2211.1Smartti    do
2221.1Smartti        sed 1q < ${f} | grep -q '\$NetBSD' || (
2231.1Smartti        cat > /tmp/pf2n.$$ <<  EOF
2241.1Smartti# \$NetBSD\$
2251.1SmarttiEOF
2261.1Smartti        cat ${f} >> /tmp/pf2n.$$
2271.1Smartti        mv /tmp/pf2n.$$ ${f}
2281.1Smartti        )
2291.1Smartti    done
2301.1Smartti    find $2 -type f -name 'Makefile' | \
2311.1Smartti    while read f
2321.1Smartti    do
2331.1Smartti        sed 1q < ${f} | grep -q '\$NetBSD' || (
2341.1Smartti        cat > /tmp/pf2n.$$ <<  EOF
2351.1Smartti#	\$NetBSD\$
2361.1SmarttiEOF
2371.1Smartti        cat ${f} >> /tmp/pf2n.$$
2381.1Smartti        mv /tmp/pf2n.$$ ${f}
2391.1Smartti        )
2401.1Smartti    done
2411.1Smartti}
2421.1Smartti
2431.1Smartti##
2441.1Smartti## MAIN
2451.1Smartti##
2461.1SmarttiVERBOSE=false
2471.1Smartti
2481.1SmarttiARGV=`getopt hv ${*}`
2491.1Smartti[ ${?} != 0 ] && exit 1
2501.1Smarttiset -- ${ARGV}
2511.1Smarttifor i
2521.1Smarttido
2531.1Smartti    case "${i}" in
2541.1Smartti    -h)
2551.1Smartti        usage
2561.1Smartti        shift
2571.1Smartti        ;;
2581.1Smartti    -v)
2591.1Smartti        VERBOSE=true
2601.1Smartti        shift
2611.1Smartti        ;;
2621.1Smartti    --)
2631.1Smartti        shift
2641.1Smartti        ;;
2651.1Smartti    esac
2661.1Smarttidone
2671.1Smartti[ $# -ne 2 ] && usage
2681.1Smartti
2691.1Smarttiopenbsd2netbsd $1 $2
2701.1Smarttirm -f /tmp/pf.$$
2711.1Smarttiecho ""
2721.1Smarttiecho "The sources-to-be-imported are now in $2"
2731.1Smarttiecho ""
274