components/pflogd/patches/001-solaris.patch
author Petr Hoffmann <petr.hoffmann@oracle.com>
Tue, 08 Mar 2016 22:31:41 -0800
changeset 5565 f678cc44b3d0
child 5826 9c90e4a8156c
permissions -rw-r--r--
PSARC/2014/291 PFLOGD: Packet Logging for PF PSARC/2014/292 FTP-PROXY: PF FTP-proxy supporting IPv4 NAT 22351416 deliver pflogd 22330374 deliver ftp-proxy
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5565
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
     1
# This patch comes from Oracle. It fixes issues preventing pflogd
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
     2
# from building and running on Solaris. Especially, we:
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
     3
# - make it read packets from Solaris-specific capture links instead
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
     4
#   of OpenBSD's pflog interfaces
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
     5
# - introduce our own pcap_pkthdr structure as the one used by
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
     6
#   upstream would result in corrupted packet dump files on Solaris
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
     7
# - use Solaris-specific random number generator
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
     8
#
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
     9
# This patch is not going to upstream, the changes are Solaris-specific.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    10
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    11
diff -Naur ORIGINAL/Makefile pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/Makefile
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    12
--- ORIGINAL/Makefile	2013-06-18 20:51:30.000000000 -0700
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    13
+++ pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/Makefile	2016-02-17 02:08:53.410106245 -0800
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    14
@@ -1,15 +1,28 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    15
 #	$OpenBSD: Makefile,v 1.9 2013/06/19 03:51:30 lteo Exp $
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    16
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    17
-CFLAGS+=-Wall -Wmissing-prototypes -Wshadow
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    18
+CFLAGS+= -m64 -errwarn
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    19
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    20
-# for pcap-int.h
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    21
-CFLAGS+=-I${.CURDIR}/../../lib/libpcap
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    22
+PROG=pflogd
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    23
+SRCS=pflogd.c privsep.c privsep_fdpass.c
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    24
+OBJS=$(SRCS:.c=.o)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    25
+MAN=pflogd.8
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    26
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    27
-LDADD+= -lpcap
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    28
-DPADD+=	${LIBPCAP}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    29
+LDADD+=-lpcap -ldladm -luutil
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    30
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    31
-PROG=	pflogd
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    32
-SRCS=	pflogd.c privsep.c privsep_fdpass.c
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    33
-MAN=	pflogd.8
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    34
+all:	$(SRCS) $(PROG)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    35
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    36
-.include <bsd.prog.mk>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    37
+install: $(PROG)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    38
+	$(INSTALL) -d $(PREFIX)/sbin
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    39
+	$(INSTALL) -m 755 $(PROG) $(PREFIX)/sbin
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    40
+	$(INSTALL) -d $(MANDIR)/man8
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    41
+	$(INSTALL) -m 644 $(MAN) $(MANDIR)/man8
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    42
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    43
+$(PROG):	$(OBJS)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    44
+	$(CC) $(CFLAGS) $(OBJS) -o $@ $(LDADD)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    45
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    46
+.c.o:
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    47
+	$(CC) $(CFLAGS) -c -o $@ $<
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    48
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    49
+clean:
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    50
+	rm -rf *.o
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    51
+	rm -rf $(PROG)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    52
diff -Naur ORIGINAL/pflogd.8 pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/pflogd.8
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    53
--- ORIGINAL/pflogd.8	2014-01-20 19:15:45.000000000 -0800
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    54
+++ pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/pflogd.8	2016-02-17 02:32:29.857912548 -0800
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    55
@@ -44,15 +44,15 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    56
 .Nm
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    57
 is a background daemon which reads packets logged by
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    58
 .Xr pf 4
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    59
-to a
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    60
-.Xr pflog 4
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    61
-interface, normally
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    62
+to a dedicated capture link interface (see
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    63
+.Xr dladm 1M
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    64
+for details), normally
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    65
 .Pa pflog0 ,
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    66
 and writes the packets to a logfile (normally
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    67
-.Pa /var/log/pflog )
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    68
-in
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    69
-.Xr tcpdump 8
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    70
-binary format.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    71
+.Pa /var/log/firewall/pflog/pflog0.pkt )
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    72
+in libpcap format (see
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    73
+.Xr PCAP 3pcap
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    74
+for details).
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    75
 These logs can be reviewed later using the
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    76
 .Fl r
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    77
 option of
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    78
@@ -63,9 +63,7 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    79
 .Nm
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    80
 closes and then re-opens the log file when it receives
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    81
 .Dv SIGHUP ,
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    82
-permitting
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    83
-.Xr newsyslog 8
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    84
-to rotate logfiles automatically.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    85
+permitting convenient log rotation.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    86
 .Dv SIGALRM
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    87
 causes
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    88
 .Nm
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    89
@@ -96,7 +94,7 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    90
 .Pp
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    91
 .Nm
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    92
 will also log the pcap statistics for the
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    93
-.Xr pflog 4
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    94
+capture link
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    95
 interface to syslog when a
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    96
 .Dv SIGUSR1
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    97
 is received.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    98
@@ -113,12 +111,8 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
    99
 If not specified, the default is 60 seconds.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   100
 .It Fl f Ar filename
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   101
 Log output filename.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   102
-Default is
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   103
-.Pa /var/log/pflog .
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   104
 .It Fl i Ar interface
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   105
-Specifies the
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   106
-.Xr pflog 4
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   107
-interface to use.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   108
+Specifies the capture link interface to use.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   109
 By default,
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   110
 .Nm
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   111
 will use
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   112
@@ -172,7 +166,7 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   113
 .El
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   114
 .Sh FILES
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   115
 .Bl -tag -width /var/run/pflogd.pid -compact
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   116
-.It Pa /var/log/pflog
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   117
+.It Pa /var/log/firewall/pflog/pflog0.pkt
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   118
 Default log file.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   119
 .El
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   120
 .Sh EXAMPLES
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   121
@@ -185,7 +179,7 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   122
 .Ed
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   123
 .Pp
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   124
 Log from another
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   125
-.Xr pflog 4
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   126
+capture link
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   127
 interface, excluding specific packets:
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   128
 .Bd -literal -offset indent
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   129
 # pflogd -i pflog3 -f network3.log "not (tcp and port 23)"
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   130
@@ -193,7 +187,7 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   131
 .Pp
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   132
 Display binary logs:
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   133
 .Bd -literal -offset indent
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   134
-# tcpdump -n -e -ttt -r /var/log/pflog
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   135
+# tcpdump -n -e -ttt -r /var/log/firewall/pflog/pflog3.pkt
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   136
 .Ed
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   137
 .Pp
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   138
 Display the logs in real time (this does not interfere with the
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   139
@@ -210,16 +204,18 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   140
 .Ed
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   141
 .Sh SEE ALSO
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   142
 .Xr pcap 3 ,
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   143
-.Xr pf 4 ,
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   144
-.Xr pflog 4 ,
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   145
 .Xr pf.conf 5 ,
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   146
-.Xr newsyslog 8 ,
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   147
+.Xr privileges 5 ,
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   148
+.Xr smf 5 ,
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   149
 .Xr tcpdump 8
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   150
 .Sh HISTORY
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   151
 The
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   152
 .Nm
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   153
 command appeared in
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   154
 .Ox 3.0 .
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   155
+The Solaris version is based on
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   156
+.Nm
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   157
+found in OpenBSD 5.5.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   158
 .Sh AUTHORS
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   159
 .Nm
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   160
 was written by
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   161
diff -Naur ORIGINAL/pflogd.c pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/pflogd.c
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   162
--- ORIGINAL/pflogd.c	2012-11-05 18:50:47.000000000 -0800
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   163
+++ pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/pflogd.c	2016-02-18 12:05:03.256562087 -0800
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   164
@@ -48,7 +48,15 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   165
 #include <errno.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   166
 #include <stdarg.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   167
 #include <fcntl.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   168
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   169
+#include <libdladm.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   170
+#include <libnetcfg.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   171
+#include <strings.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   172
+#include <zone.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   173
+#include <libuutil.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   174
+#else /* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   175
 #include <util.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   176
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   177
 #include "pflogd.h"
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   178
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   179
 pcap_t *hpcap;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   180
@@ -88,6 +96,34 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   181
 void  sig_hup(int);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   182
 void  usage(void);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   183
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   184
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   185
+/*
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   186
+ * setproctitle() is found in libc on OpenBSD. It allows program to update its
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   187
+ * process name. It will be an empty macro on Solaris.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   188
+ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   189
+#define	setproctitle(...)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   190
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   191
+/*
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   192
+ * __dead attribute will be an empty macro on Solaris.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   193
+ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   194
+#define	__dead
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   195
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   196
+/*
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   197
+ * We must define our own pcap_pkthdr to ensure timeval structure will be
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   198
+ * defined in 32-bit version. Not doing so will result in corrupted packet dump
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   199
+ * file produced by pflogd on Solaris.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   200
+ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   201
+typedef struct pcap_pkthdr_file {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   202
+	struct {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   203
+		uint32_t	tv_sec;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   204
+		uint32_t	tv_usec;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   205
+	} ts;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   206
+	uint32_t	caplen;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   207
+	uint32_t	len;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   208
+} pcap_pkthdr_file_t;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   209
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   210
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   211
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   212
 static int try_reset_dump(int);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   213
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   214
 /* buffer must always be greater than snaplen */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   215
@@ -191,11 +227,13 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   216
 {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   217
 	struct bpf_program bprog;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   218
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   219
-	if (pcap_compile(hpcap, &bprog, filter, PCAP_OPT_FIL, 0) < 0)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   220
+	if (pcap_compile(hpcap, &bprog, filter, PCAP_OPT_FIL, 0) < 0) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   221
 		logmsg(LOG_WARNING, "%s", pcap_geterr(hpcap));
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   222
-	else {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   223
+		logmsg(LOG_WARNING, "for filter:\n\t%s\nNo filter set.\n", filter);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   224
+	} else {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   225
 		if (pcap_setfilter(hpcap, &bprog) < 0)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   226
-			logmsg(LOG_WARNING, "%s", pcap_geterr(hpcap));
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   227
+			logmsg(LOG_WARNING, "%s\nNo filter set.\n",
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   228
+			    pcap_geterr(hpcap));
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   229
 		pcap_freecode(&bprog);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   230
 	}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   231
 }
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   232
@@ -203,6 +241,31 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   233
 int
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   234
 if_exists(char *ifname)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   235
 {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   236
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   237
+	dladm_handle_t	dlh;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   238
+	datalink_id_t	linkid;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   239
+	zoneid_t	zid = getzoneid();
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   240
+	dladm_status_t	dls;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   241
+	int		rv = 0;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   242
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   243
+	if (!dladm_valid_linkname(ifname) ||
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   244
+	    (dladm_open(&dlh) != DLADM_STATUS_OK)) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   245
+		errno = ENXIO;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   246
+		return (rv);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   247
+	}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   248
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   249
+	dls = dladm_apply_linknamefilters(dlh, ifname, &linkid, 1, &zid,
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   250
+	    DLADM_OPT_ACTIVE, zid, NULL);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   251
+	if ((dls == DLADM_STATUS_OK) && (linkid != DATALINK_INVALID_LINKID)) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   252
+		rv = 1;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   253
+	}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   254
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   255
+	dladm_close(dlh);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   256
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   257
+	errno = (rv == 1) ? 0 : ENXIO;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   258
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   259
+	return (rv);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   260
+#else /* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   261
 	int s, ret = 1;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   262
 	struct ifreq ifr;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   263
 	struct if_data ifrdat;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   264
@@ -220,6 +283,7 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   265
 		err(1, "close");
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   266
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   267
 	return (ret);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   268
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   269
 }
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   270
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   271
 int
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   272
@@ -243,10 +307,15 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   273
 	cur_snaplen = snaplen = pcap_snapshot(hpcap);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   274
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   275
 	/* lock */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   276
+/*
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   277
+ * BIOCLOCK operation is not implmented on Solaris. 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   278
+ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   279
+#ifndef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   280
 	if (ioctl(pcap_fileno(hpcap), BIOCLOCK) < 0) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   281
 		logmsg(LOG_ERR, "BIOCLOCK: %s", strerror(errno));
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   282
 		return (-1);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   283
 	}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   284
+#endif	/* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   285
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   286
 	return (0);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   287
 }
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   288
@@ -371,7 +440,11 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   289
 scan_dump(FILE *fp, off_t size)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   290
 {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   291
 	struct pcap_file_header hdr;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   292
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   293
+	struct pcap_pkthdr_file	ph;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   294
+#else /* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   295
 	struct pcap_pkthdr ph;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   296
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   297
 	off_t pos;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   298
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   299
 	/*
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   300
@@ -440,13 +513,26 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   301
 dump_packet_nobuf(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   302
 {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   303
 	FILE *f = (FILE *)user;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   304
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   305
+	struct pcap_pkthdr_file	h_file;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   306
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   307
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   308
 	if (suspended) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   309
 		packets_dropped++;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   310
 		return;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   311
 	}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   312
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   313
-	if (fwrite((char *)h, sizeof(*h), 1, f) != 1) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   314
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   315
+	h_file.ts.tv_sec = (uint32_t)h->ts.tv_sec;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   316
+	h_file.ts.tv_usec = (uint32_t)h->ts.tv_usec;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   317
+	h_file.caplen = h->caplen;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   318
+	h_file.len = h->len;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   319
+	if (fwrite((char *)&h_file, sizeof (h_file), 1, f) != 1)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   320
+#else	/* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   321
+	if (fwrite((char *)h, sizeof(*h), 1, f) != 1)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   322
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   323
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   324
+	{
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   325
 		off_t pos = ftello(f);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   326
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   327
 		/* try to undo header to prevent corruption */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   328
@@ -520,9 +606,32 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   329
 dump_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   330
 {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   331
 	FILE *f = (FILE *)user;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   332
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   333
+	struct pcap_pkthdr_file	h_file;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   334
+	size_t len = sizeof (h_file) + h->caplen;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   335
+#else	/* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   336
 	size_t len = sizeof(*h) + h->caplen;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   337
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   338
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   339
-	if (len < sizeof(*h) || h->caplen > (size_t)cur_snaplen) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   340
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   341
+	/*
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   342
+	 * Member ts is struct timeval defined in sys/time.h. Solaris uses
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   343
+	 * 64-bit version for tv_sec, tv_usec. 64-bit members are not
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   344
+	 * compatible with pcap file format, hence we must convert them to
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   345
+	 * 32-bits.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   346
+	 */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   347
+	h_file.ts.tv_sec = (uint32_t)h->ts.tv_sec;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   348
+	h_file.ts.tv_usec = (uint32_t)h->ts.tv_usec;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   349
+	h_file.caplen = h->caplen;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   350
+	h_file.len = h->len;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   351
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   352
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   353
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   354
+	if (len < sizeof(h_file) || h_file.caplen > (size_t)cur_snaplen)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   355
+#else	/* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   356
+	if (len < sizeof(*h) || h->caplen > (size_t)cur_snaplen)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   357
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   358
+	{
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   359
 		logmsg(LOG_NOTICE, "invalid size %zu (%d/%d), packet dropped",
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   360
 		       len, cur_snaplen, snaplen);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   361
 		packets_dropped++;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   362
@@ -548,8 +657,13 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   363
 	}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   364
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   365
  append:
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   366
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   367
+	(void) memcpy(bufpos, &h_file, sizeof (h_file));
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   368
+	(void) memcpy(bufpos + sizeof (h_file), sp, h->caplen);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   369
+#else	/* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   370
 	memcpy(bufpos, h, sizeof(*h));
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   371
 	memcpy(bufpos + sizeof(*h), sp, h->caplen);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   372
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   373
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   374
 	bufpos += len;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   375
 	bufleft -= len;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   376
@@ -611,7 +725,6 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   377
 		default:
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   378
 			usage();
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   379
 		}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   380
-
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   381
 	}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   382
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   383
 	log_debug = Debug;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   384
@@ -658,12 +771,25 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   385
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   386
 	setproctitle("[initializing]");
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   387
 	/* Process is now unprivileged and inside a chroot */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   388
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   389
+	/*
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   390
+	 * We have to use sigset() on Solaris, since signal() resets sig.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   391
+	 * handler to default as soon as particular signal is delivered.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   392
+	 */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   393
+	sigset(SIGTERM, sig_close);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   394
+	sigset(SIGINT, sig_close);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   395
+	sigset(SIGQUIT, sig_close);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   396
+	sigset(SIGALRM, sig_alrm);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   397
+	sigset(SIGUSR1, sig_usr1);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   398
+	sigset(SIGHUP, sig_hup);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   399
+#else /* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   400
 	signal(SIGTERM, sig_close);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   401
 	signal(SIGINT, sig_close);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   402
 	signal(SIGQUIT, sig_close);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   403
 	signal(SIGALRM, sig_alrm);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   404
 	signal(SIGUSR1, sig_usr1);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   405
 	signal(SIGHUP, sig_hup);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   406
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   407
 	alarm(delay);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   408
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   409
 	buffer = malloc(PFLOGD_BUFSIZE);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   410
@@ -696,7 +822,7 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   411
 				ret = -1;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   412
 				break;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   413
 			}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   414
-			logmsg(LOG_NOTICE, "%s", pcap_geterr(hpcap));
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   415
+			logmsg(LOG_NOTICE, "pcap says: %s", pcap_geterr(hpcap));
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   416
 		}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   417
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   418
 		if (gotsig_close)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   419
diff -Naur ORIGINAL/pflogd.h pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/pflogd.h
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   420
--- ORIGINAL/pflogd.h	2010-09-20 22:56:58.000000000 -0700
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   421
+++ pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/pflogd.h	2016-02-18 12:08:42.414919276 -0800
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   422
@@ -16,7 +16,11 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   423
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   424
  */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   425
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   426
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   427
+#include <limits.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   428
+#else /* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   429
 #include <sys/limits.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   430
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   431
 #include <pcap.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   432
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   433
 #define DEF_SNAPLEN 160		/* pfloghdr + ip hdr + proto hdr fit usually */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   434
@@ -25,7 +29,12 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   435
 #define PCAP_OPT_FIL 1		/* filter optimization */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   436
 #define FLUSH_DELAY 60		/* flush delay */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   437
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   438
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   439
+#define	PFLOGD_LOG_DIR		"/var/log/firewall/pflog"
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   440
+#define PFLOGD_LOG_FILE		"pflog.pkt"
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   441
+#else /* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   442
 #define PFLOGD_LOG_FILE		"/var/log/pflog"
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   443
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   444
 #define PFLOGD_DEFAULT_IF	"pflog0"
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   445
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   446
 #define PFLOGD_MAXSNAPLEN	INT_MAX
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   447
diff -Naur ORIGINAL/privsep.c pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/privsep.c
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   448
--- ORIGINAL/privsep.c	2013-09-13 01:49:17.000000000 -0700
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   449
+++ pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/privsep.c	2016-02-18 12:07:34.219667793 -0800
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   450
@@ -28,8 +28,6 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   451
 #include <errno.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   452
 #include <fcntl.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   453
 #include <limits.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   454
-#include <pcap.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   455
-#include <pcap-int.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   456
 #include <pwd.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   457
 #include <signal.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   458
 #include <stdio.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   459
@@ -38,6 +36,34 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   460
 #include <syslog.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   461
 #include <unistd.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   462
 #include "pflogd.h"
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   463
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   464
+#include <priv.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   465
+#include <stdlib.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   466
+#include <sys/types.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   467
+#include <time.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   468
+#include <sys/random.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   469
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   470
+/*
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   471
+ * It's better to include these after other header files.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   472
+ * pcap-int.h defines strlcpy() as macro if it is undefined.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   473
+ * In our case strlcpy() comes from string.h.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   474
+ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   475
+#define	HAVE_SNPRINTF	1
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   476
+#include <pcap.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   477
+#include <pcap-int.h>
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   478
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   479
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   480
+#define	_NSIG	27
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   481
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   482
+/*
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   483
+ * setproctitle() is found in libc on OpenBSD. It allows program to update its
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   484
+ * process name. It will empty macro on Solaris.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   485
+ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   486
+#define	setproctitle(...)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   487
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   488
+#else /* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   489
+#define	PFLOGD_USER	"_pflogd"
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   490
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   491
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   492
 enum cmd_types {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   493
 	PRIV_SET_SNAPLEN,	/* set the snaplength */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   494
@@ -67,7 +93,9 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   495
 {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   496
 	int i, fd, socks[2], cmd;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   497
 	int snaplen, ret, olderrno;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   498
+#ifndef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   499
 	struct passwd *pw;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   500
+#endif	/* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   501
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   502
 	for (i = 1; i < _NSIG; i++)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   503
 		signal(i, SIG_DFL);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   504
@@ -76,16 +104,19 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   505
 	if (socketpair(AF_LOCAL, SOCK_STREAM, PF_UNSPEC, socks) == -1)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   506
 		err(1, "socketpair() failed");
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   507
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   508
+#ifndef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   509
 	pw = getpwnam("_pflogd");
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   510
 	if (pw == NULL)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   511
 		errx(1, "unknown user _pflogd");
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   512
 	endpwent();
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   513
+#endif	/* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   514
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   515
 	child_pid = fork();
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   516
 	if (child_pid < 0)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   517
 		err(1, "fork() failed");
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   518
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   519
 	if (!child_pid) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   520
+#ifndef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   521
 		gid_t gidset[1];
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   522
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   523
 		/* Child - drop privileges and return */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   524
@@ -101,6 +132,8 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   525
 			err(1, "setgroups() failed");
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   526
 		if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) == -1)
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   527
 			err(1, "setresuid() failed");
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   528
+#endif	/* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   529
+
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   530
 		close(socks[0]);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   531
 		priv_fd = socks[1];
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   532
 		return 0;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   533
@@ -108,19 +141,34 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   534
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   535
 	/* Father */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   536
 	/* Pass ALRM/TERM/HUP/INT/QUIT through to child, and accept CHLD */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   537
+#ifdef	_SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   538
+	/*
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   539
+	 * We have to use sigset() on Solaris, since signal() resets sig.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   540
+	 * handler to default as soon as particular signal is delivered.
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   541
+	 */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   542
+	sigset(SIGALRM, sig_pass_to_chld);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   543
+	sigset(SIGTERM, sig_pass_to_chld);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   544
+	sigset(SIGHUP,  sig_pass_to_chld);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   545
+	sigset(SIGINT,  sig_pass_to_chld);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   546
+	sigset(SIGQUIT,  sig_pass_to_chld);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   547
+	sigset(SIGCHLD, sig_chld);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   548
+#else /* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   549
 	signal(SIGALRM, sig_pass_to_chld);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   550
 	signal(SIGTERM, sig_pass_to_chld);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   551
 	signal(SIGHUP,  sig_pass_to_chld);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   552
 	signal(SIGINT,  sig_pass_to_chld);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   553
 	signal(SIGQUIT,  sig_pass_to_chld);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   554
 	signal(SIGCHLD, sig_chld);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   555
+#endif	/* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   556
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   557
 	setproctitle("[priv]");
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   558
 	close(socks[1]);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   559
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   560
 	while (!gotsig_chld) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   561
-		if (may_read(socks[0], &cmd, sizeof(int)))
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   562
+		if (may_read(socks[0], &cmd, sizeof(int))) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   563
+			logmsg(LOG_ERR, "may_read: fails\n");
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   564
 			break;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   565
+		}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   566
 		switch (cmd) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   567
 		case PRIV_SET_SNAPLEN:
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   568
 			logmsg(LOG_DEBUG,
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   569
@@ -192,9 +240,20 @@
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   570
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   571
 	for (;;) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   572
 		int fd;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   573
+#ifdef _SOLARIS_
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   574
+		uint32_t rand;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   575
 
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   576
+		if (getrandom(&rand, sizeof (rand), GRND_NONBLOCK) !=
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   577
+		    sizeof (rand)) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   578
+			logmsg(LOG_ERR, "getrandom() failed");
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   579
+			return 1;
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   580
+		}
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   581
+		len = snprintf(ren, sizeof(ren), "%s.bad.%08x",
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   582
+		    name, rand);
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   583
+#else /* !_SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   584
 		len = snprintf(ren, sizeof(ren), "%s.bad.%08x",
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   585
 		    name, arc4random());
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   586
+#endif /* _SOLARIS_ */
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   587
 		if (len >= sizeof(ren)) {
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   588
 			logmsg(LOG_ERR, "[priv] new name too long");
f678cc44b3d0 PSARC/2014/291 PFLOGD: Packet Logging for PF
Petr Hoffmann <petr.hoffmann@oracle.com>
parents:
diff changeset
   589
 			return (1);