##
##  arpd.spec -- OpenPKG RPM Package Specification
##  Copyright (c) 2000-2025 OpenPKG Project <http://openpkg.org/>
##
##  Permission to use, copy, modify, and distribute this software for
##  any purpose with or without fee is hereby granted, provided that
##  the above copyright notice and this permission notice appear in all
##  copies.
##
##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
##  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.
##

#   package information
Name:         arpd
Summary:      Address Resolution Protocol (ARP) Reply Daemon
URL:          http://www.honeyd.org/tools.php
Vendor:       Niels Provos, Dug Song
Packager:     OpenPKG Project
Distribution: OpenPKG Community
Class:        EVAL
Group:        Mapping
License:      GNU
Version:      0.2
Release:      20080101

#   package options
%option       with_fsl  yes

#   list of sources
Source0:      http://www.citi.umich.edu/u/provos/honeyd/arpd-%{version}.tar.gz
Source1:      rc.arpd
Source2:      fsl.arpd
Patch0:       arpd.patch

#   build information
BuildPreReq:  OpenPKG, openpkg >= 20160101, libdnet, libpcap, libevent, gcc, make
PreReq:       OpenPKG, openpkg >= 20160101, libdnet, libpcap, libevent
%if "%{with_fsl}" == "yes"
BuildPreReq:  fsl
PreReq:       fsl
%endif

%description
    Arpd is an Address Resolution Protocol (ARP) daemon which replies to
    any ARP request for an IP address matching the specified destination
    network with the hardware MAC address of the own interface, but only
    after determining if another host already claims it. Any IP address
    claimed by arpd is eventually forgotten after a period of inactivity
    or after a hard timeout, and is relinquished if the real owner shows
    up. This enables a single host to claim all unassigned addresses on
    a LAN for network monitoring or simulation.

%track
    prog arpd = {
        version   = %{version}
        url       = http://www.honeyd.org/tools.php
        regex     = arpd-(__VER__)\.tar\.gz
    }

%prep
    %setup -q -n arpd
    %patch -p0
    %{l_shtool} subst \
        -e 's;LIBS=$DNETLIB;LIBS="$LIBS $DNETLIB";' \
        -e 's;CFLAGS=$DNETINC;CFLAGS="$CFLAGS $DNETINC";' \
        -e 's;net/bpf\.h;pcap-bpf.h;g' \
        configure
    %{l_shtool} subst \
        -e 's;/var/run/arpd.pid;%{l_prefix}/var/arpd/arpd.pid;' \
        arpd.c arpd.8

%build
    CC="%{l_cc}" \
    CFLAGS="%{l_cflags -O}" \
    CPPFLAGS="%{l_cppflags}" \
    LDFLAGS="%{l_ldflags} %{l_fsl_ldflags}" \
    LIBS="%{l_fsl_libs} -lpcap" \
    ./configure \
        --prefix=%{l_prefix} \
        --with-libdnet=%{l_prefix} \
        --with-libpcap=%{l_prefix} \
        --with-libevent=%{l_prefix}
    %{l_make} %{l_mflags}

%install

    #   create directories
    %{l_shtool} mkdir -f -p -m 755 \
        $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d \
        $RPM_BUILD_ROOT%{l_prefix}/var/arpd

    #   install files
    %{l_make} %{l_mflags} install DESTDIR=$RPM_BUILD_ROOT
    %{l_shtool} install -c -m 755 %{l_value -s -a} \
        %{SOURCE rc.arpd} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/

    #   install OSSP fsl configuration
    %{l_shtool} mkdir -f -p -m 755 $RPM_BUILD_ROOT%{l_prefix}/etc/fsl
    %{l_shtool} install -c -m 644 %{l_value -s -a} \
        %{SOURCE fsl.arpd} \
        $RPM_BUILD_ROOT%{l_prefix}/etc/fsl/

    #   determine file list
    %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
        %{l_files_std} \
        '%config %{l_prefix}/etc/fsl/fsl.arpd' \
        '%attr(750,%{l_susr},%{l_mgrp}) %{l_prefix}/var/arpd'

%files -f files

%clean

%pre
    #   before upgrade, save status and stop service
    [ $1 -eq 2 ] || exit 0
    eval `%{l_rc} arpd status 2>/dev/null | tee %{l_tmpfile}`
    %{l_rc} arpd stop 2>/dev/null
    exit 0

%post
    if [ $1 -eq 1 ]; then
        #   display final hints on initial installation
        ( echo "Before starting ARP daemon, please set the configuration variable"
          echo "\"arpd_if\" in $RPM_INSTALL_PREFIX/etc/rc.conf to the name of the"
          echo "used network interface."
        ) | %{l_rpmtool} msg -b -t notice
    fi
    if [ $1 -eq 2 ]; then
        #   after upgrade, restore status
        eval `cat %{l_tmpfile}`; rm -f %{l_tmpfile}
        [ ".$arpd_active" = .yes ] && %{l_rc} arpd start
    fi
    exit 0

%preun
    #   before erase, stop service and remove log files
    [ $1 -eq 0 ] || exit 0
    %{l_rc} arpd stop 2>/dev/null
    rm -f $RPM_INSTALL_PREFIX/var/arpd/*.log* >/dev/null 2>&1 || true
    exit 0

