components/pflogd/patches/002-smf.patch
author yumo.liu@oracle.com <yumo.liu@oracle.com>
Fri, 13 Jan 2017 13:12:57 -0800
branchs11u3-sru
changeset 7575 2e0470f8f10d
permissions -rw-r--r--
PSARC/2014/291 PFLOGD: Packet Logging for PF 22351416 deliver pflogd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7575
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
     1
# This patch comes from Oracle. It turns the component into
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
     2
# a well-behaving SMF service. It adds code manipulating service
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
     3
# properties, service instances, and also provides security
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
     4
# in cooperation with the service manifest (especially, extra
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
     5
# privileges are dropped when not needed).
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
     6
#
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
     7
# This patch is not going to upstream, the changes are Solaris-specific.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
     8
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
     9
diff -Naur pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/Makefile pflogd-OPENBSD_5_5-OPENBSD_5_5/Makefile
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    10
--- pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/Makefile	2016-02-17 02:08:53.410106245 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    11
+++ pflogd-OPENBSD_5_5-OPENBSD_5_5/Makefile	2016-02-16 05:02:32.489035397 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    12
@@ -3,7 +3,7 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    13
 CFLAGS+= -m64 -errwarn
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    14
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    15
 PROG=pflogd
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    16
-SRCS=pflogd.c privsep.c privsep_fdpass.c
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    17
+SRCS=pflogd.c privsep.c privsep_fdpass.c smf-config.c
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    18
 OBJS=$(SRCS:.c=.o)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    19
 MAN=pflogd.8
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    20
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    21
diff -Naur pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/pflogd.8 pflogd-OPENBSD_5_5-OPENBSD_5_5/pflogd.8
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    22
--- pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/pflogd.8	2016-02-17 02:32:29.857912548 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    23
+++ pflogd-OPENBSD_5_5-OPENBSD_5_5/pflogd.8	2016-03-14 07:10:13.031600727 -0700
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    24
@@ -33,7 +33,7 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    25
 .Sh SYNOPSIS
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    26
 .Nm pflogd
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    27
 .Bk -words
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    28
-.Op Fl "Dx"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    29
+.Op Fl C Ar new-pflog-instance-name | Fl c Ar pflog-instance-name
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    30
 .Op Fl d Ar delay
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    31
 .Op Fl f Ar filename
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    32
 .Op Fl i Ar interface
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    33
@@ -60,6 +60,7 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    34
 hopefully offline in case there are bugs in the packet parsing code of
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    35
 .Xr tcpdump 8 .
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    36
 .Pp
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    37
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    38
 .Nm
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    39
 closes and then re-opens the log file when it receives
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    40
 .Dv SIGHUP ,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    41
@@ -101,22 +102,52 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    42
 .Pp
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    43
 The options are as follows:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    44
 .Bl -tag -width Ds
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    45
-.It Fl D
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    46
-Debugging mode.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    47
+.It Fl C Ar new-pflog-instance-name
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    48
+Creates a new
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    49
 .Nm
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    50
-does not disassociate from the controlling terminal.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    51
+instance with the specified name. If additional options are used to specify
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    52
+configuration, it is stored into the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    53
+.Xr smf 7
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    54
+repository. Default values are used for
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    55
+.Xr smf 7
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    56
+properties unless overriden by a command-line option. The exception is
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    57
+pflog/interface (set to equal the instance name) and pflog/logfile
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    58
+(set to a file with name equal to the instance name followed by the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    59
+.Pa .pkt
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    60
+extension located inside the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    61
+.Pa /var/log/firewall/pflog/
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    62
+directory) if the service instance name forms a valid linkname. If the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    63
+service instance name is not a valid linkname, the values must be
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    64
+given explicitly.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    65
+.It Fl c Ar pflog-instance-name
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    66
+Shows/changes the configuration of the given
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    67
+.Nm
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    68
+instance in
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    69
+.Xr smf 7
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    70
+repository. Attributes specified by additional options are placed into the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    71
+.Xr smf 7
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    72
+repository.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    73
 .It Fl d Ar delay
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    74
 Time in seconds to delay between automatic flushes of the file.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    75
 This may be specified with a value between 5 and 3600 seconds.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    76
 If not specified, the default is 60 seconds.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    77
 .It Fl f Ar filename
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    78
-Log output filename.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    79
+Log output filename. When neither
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    80
+.Fl C
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    81
+nor
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    82
+.Fl c
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    83
+is used, the default value
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    84
+.Pa pflog.pkt
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    85
+is used.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    86
 .It Fl i Ar interface
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    87
 Specifies the capture link interface to use.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    88
-By default,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    89
-.Nm
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    90
-will use
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    91
-.Pa pflog0 .
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    92
+When neither
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    93
+.Fl C
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    94
+nor
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    95
+.Fl c
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    96
+is used, the default value
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    97
+.Pa pflog0
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    98
+is assumed.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
    99
 .It Fl s Ar snaplen
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   100
 Analyze at most the first
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   101
 .Ar snaplen
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   102
@@ -124,8 +155,6 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   103
 The default of 160 is adequate for IP, ICMP, TCP, and UDP headers but may
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   104
 truncate protocol information for other protocols.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   105
 Other file parsers may desire a higher snaplen.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   106
-.It Fl x
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   107
-Check the integrity of an existing log file, and return.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   108
 .It Ar expression
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   109
 Selects which packets will be dumped, using the regular language of
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   110
 .Xr tcpdump 8 .
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   111
@@ -164,11 +193,59 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   112
 The direction was outbound.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   113
 .El
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   114
 .El
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   115
-.Sh FILES
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   116
-.Bl -tag -width /var/run/pflogd.pid -compact
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   117
-.It Pa /var/log/firewall/pflog/pflog0.pkt
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   118
-Default log file.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   119
+.Sh SOLARIS
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   120
+The
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   121
+.Nm
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   122
+daemon must be started as an
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   123
+.Xr smf 7
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   124
+service with the following FMRI:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   125
+.Bd -literal -offset indent
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   126
+svc:/network/firewall/pflog
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   127
+.Ed
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   128
+.Pp
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   129
+Command line options described above are set via the following
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   130
+.Xr smf 7
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   131
+properties.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   132
+.Bl -tag -width "pflog/interface" -offset 3n -compact
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   133
+.It pflog/delay
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   134
+Automatic flush interval.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   135
+The default value is 60.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   136
+Used as the argument for the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   137
+.Fl d
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   138
+option.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   139
+.It pflog/filter
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   140
+Packet filter expression in
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   141
+.Xr tcpdump 8
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   142
+format.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   143
+No expression is defined by default.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   144
+.It pflog/interface
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   145
+The capture link name from which to read packets.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   146
+Used as the argument for the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   147
+.Fl i
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   148
+option.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   149
+.It pflog/logfile
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   150
+Path to the logfile (for security reasons, only paths starting by the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   151
+.Pa /var/log/firewall/
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   152
+directory are allowed.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   153
+Used as the argument for the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   154
+.Fl f
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   155
+option.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   156
+.It pflog/snaplen
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   157
+An upper bound on how many bytes from each packet to analyze.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   158
+The default value is 160.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   159
+Used as the argument for the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   160
+.Fl s
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   161
+option.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   162
 .El
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   163
+.Pp
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   164
+The start method creates a (temporal) capture link the particular
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   165
+instance is using.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   166
+.Pp
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   167
+The refresh method sends
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   168
+.Dv SIGHUP
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   169
+to
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   170
+.Nm
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   171
+owned by particular service instance.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   172
 .Sh EXAMPLES
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   173
 Log specific TCP packets to a different log file with a large snaplen
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   174
 (useful with a
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   175
@@ -202,6 +279,32 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   176
 .Bd -literal -offset indent
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   177
 # tcpdump -n -e -ttt -i pflog0 inbound and action block and on wi0
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   178
 .Ed
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   179
+.Sh SECURITY
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   180
+The
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   181
+.Nm
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   182
+daemon is a privilege-aware application which runs as the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   183
+.Dq daemon
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   184
+user possessing
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   185
+.Sy PRIV_NET_OBSERVABILITY
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   186
+privilege that is required for using
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   187
+.Xr bpf 7d
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   188
+to read packets. See
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   189
+.Xr privileges 7
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   190
+for details.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   191
+The service start method uses
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   192
+.Xr dladm 8
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   193
+to create capture link if it does not exist already.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   194
+.Pp
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   195
+To configure the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   196
+.Nm
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   197
+service one has to obtain the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   198
+.Sy solaris.smf.value.network.firewall
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   199
+authorization.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   200
+To manage the service (disable/enable/refresh) one must have the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   201
+.Sy solaris.smf.manage.network.firewall
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   202
+authorization.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   203
+Both authorizations are granted through the Network Firewall Management profile.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   204
+To create new service instances, you need the solaris.smf.modify authorization.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   205
 .Sh SEE ALSO
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   206
 .Xr pcap 3 ,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   207
 .Xr pf.conf 5 ,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   208
diff -Naur pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/pflogd.c pflogd-OPENBSD_5_5-OPENBSD_5_5/pflogd.c
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   209
--- pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/pflogd.c	2016-02-18 12:05:03.256562087 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   210
+++ pflogd-OPENBSD_5_5-OPENBSD_5_5/pflogd.c	2016-02-18 12:01:49.900876863 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   211
@@ -54,6 +54,7 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   212
 #include <strings.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   213
 #include <zone.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   214
 #include <libuutil.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   215
+#include "smf-config.h"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   216
 #else /* !_SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   217
 #include <util.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   218
 #endif	/* _SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   219
@@ -63,7 +64,7 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   220
 static FILE *dpcap;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   221
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   222
 int Debug = 0;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   223
-static int snaplen = DEF_SNAPLEN;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   224
+static int64_t snaplen = DEF_SNAPLEN;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   225
 static int cur_snaplen = DEF_SNAPLEN;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   226
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   227
 volatile sig_atomic_t gotsig_close, gotsig_alrm, gotsig_hup, gotsig_usr1;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   228
@@ -75,7 +76,7 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   229
 char errbuf[PCAP_ERRBUF_SIZE];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   230
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   231
 int log_debug = 0;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   232
-unsigned int delay = FLUSH_DELAY;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   233
+int64_t delay = FLUSH_DELAY;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   234
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   235
 char *copy_argv(char * const *);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   236
 void  dump_packet(u_char *, const struct pcap_pkthdr *, const u_char *);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   237
@@ -124,6 +125,15 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   238
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   239
 #endif	/* _SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   240
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   241
+#ifdef	_SOLARIS_
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   242
+#define	PFLOGD_GETOPTS	"c:C:Dd:f:i:s:"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   243
+#define	CFG_SETFLAG(_flags_, _f_)	((_flags_) |= (_f_))
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   244
+#define	SKIP_CHK(_x_)	((_x_) == NULL)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   245
+#else /* !_SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   246
+#define	PFLOGD_GETOPTS	"Dxd:f:i:s:"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   247
+#define	CFG_SETFLAG(_flags_, _f_)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   248
+#define	SKIP_CHK(_x_)	(1)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   249
+#endif	/* _SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   250
 static int try_reset_dump(int);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   251
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   252
 /* buffer must always be greater than snaplen */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   253
@@ -290,6 +300,8 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   254
 init_pcap(void)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   255
 {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   256
 	hpcap = pcap_open_live(interface, snaplen, 1, PCAP_TO_MS, errbuf);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   257
+	DROP_PRIV(PRIV_NET_OBSERVABILITY);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   258
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   259
 	if (hpcap == NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   260
 		logmsg(LOG_ERR, "Failed to initialize: %s", errbuf);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   261
 		return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   262
@@ -690,12 +702,20 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   263
 	int ch, np, ret, Xflag = 0;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   264
 	pcap_handler phandler = dump_packet;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   265
 	const char *errstr = NULL;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   266
+#ifdef	_SOLARIS_
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   267
+	unsigned int	create = 0;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   268
+	unsigned int	cfg_flags = 0;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   269
+	const char	*smf_instance = NULL;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   270
+#endif	/* _SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   271
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   272
+	DROP_PRIV(PRIV_SYS_IP_CONFIG);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   273
+	DROP_PRIV(PRIV_PROC_EXEC);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   274
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   275
 	ret = 0;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   276
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   277
 	closefrom(STDERR_FILENO + 1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   278
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   279
-	while ((ch = getopt(argc, argv, "Dxd:f:i:s:")) != -1) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   280
+	while ((ch = getopt(argc, argv, PFLOGD_GETOPTS)) != -1) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   281
 		switch (ch) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   282
 		case 'D':
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   283
 			Debug = 1;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   284
@@ -704,12 +724,15 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   285
 			delay = strtonum(optarg, 5, 60*60, &errstr);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   286
 			if (errstr)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   287
 				usage();
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   288
+			CFG_SETFLAG(cfg_flags, SMF_CFG_DELAY_SET);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   289
 			break;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   290
 		case 'f':
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   291
 			filename = optarg;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   292
+			CFG_SETFLAG(cfg_flags, SMF_CFG_LOGFILE_SET);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   293
 			break;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   294
 		case 'i':
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   295
 			interface = optarg;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   296
+			CFG_SETFLAG(cfg_flags, SMF_CFG_INTERFACE_SET);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   297
 			break;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   298
 		case 's':
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   299
 			snaplen = strtonum(optarg, 0, PFLOGD_MAXSNAPLEN,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   300
@@ -718,10 +741,27 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   301
 				snaplen = DEF_SNAPLEN;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   302
 			if (errstr)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   303
 				snaplen = PFLOGD_MAXSNAPLEN;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   304
+			CFG_SETFLAG(cfg_flags, SMF_CFG_SNAPLEN_SET);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   305
 			break;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   306
+#ifndef	_SOLARIS_
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   307
+		/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   308
+		 * This option requires a special securing on Solaris as
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   309
+		 * pflogd will be started manually in the case it is used.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   310
+		 * Also, some polishing is needed so that the response
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   311
+		 * from 'pflogd -x' is shown to the user and not put into
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   312
+		 * a logfile.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   313
+		 */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   314
 		case 'x':
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   315
 			Xflag++;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   316
 			break;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   317
+#endif /* !_SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   318
+#ifdef	_SOLARIS_
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   319
+		case 'C': 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   320
+			create = 1;	/* FALLTHRU */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   321
+		case 'c':
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   322
+			smf_instance = optarg;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   323
+			break;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   324
+#endif	/* _SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   325
 		default:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   326
 			usage();
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   327
 		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   328
@@ -732,14 +772,14 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   329
 	argv += optind;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   330
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   331
 	/* does interface exist */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   332
-	if (!if_exists(interface)) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   333
+	if (SKIP_CHK(smf_instance) && !if_exists(interface)) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   334
 		warn("Failed to initialize: %s", interface);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   335
 		logmsg(LOG_ERR, "Failed to initialize: %s", interface);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   336
 		logmsg(LOG_ERR, "Exiting, init failure");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   337
 		exit(1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   338
 	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   339
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   340
-	if (!Debug) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   341
+	if (SKIP_CHK(smf_instance) && !Debug) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   342
 		openlog("pflogd", LOG_PID | LOG_CONS, LOG_DAEMON);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   343
 		if (daemon(0, 0)) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   344
 			logmsg(LOG_WARNING, "Failed to become daemon: %s",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   345
@@ -757,6 +797,31 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   346
 			logmsg(LOG_NOTICE, "Failed to form filter expression");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   347
 	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   348
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   349
+#ifdef	_SOLARIS_
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   350
+	if (smf_instance != NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   351
+		if (filter != NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   352
+			CFG_SETFLAG(cfg_flags, SMF_CFG_EXPRESSION_SET);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   353
+		} else {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   354
+			filter = "";
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   355
+		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   356
+		if ((cfg_flags == 0) && (create == 0)) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   357
+			if (smf_print_pflogcfg(smf_instance)) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   358
+				exit (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   359
+			}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   360
+		} else {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   361
+			smf_pflogd_cfg.cfg_set = cfg_flags;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   362
+			smf_pflogd_cfg.cfg_expression = strdup(filter);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   363
+			smf_pflogd_cfg.cfg_interface = strdup(interface);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   364
+			smf_pflogd_cfg.cfg_logfile = strdup(filename);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   365
+			smf_pflogd_cfg.cfg_delay = delay;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   366
+			smf_pflogd_cfg.cfg_snaplen = snaplen;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   367
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   368
+			smf_write_pflogcfg(smf_instance, create);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   369
+		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   370
+		exit(0);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   371
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   372
+#endif	/* _SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   373
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   374
 	/* initialize pcap before dropping privileges */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   375
 	if (init_pcap()) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   376
 		logmsg(LOG_ERR, "Exiting, init failure");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   377
@@ -768,7 +833,6 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   378
 		logmsg(LOG_ERR, "unable to privsep");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   379
 		exit(1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   380
 	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   381
-
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   382
 	setproctitle("[initializing]");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   383
 	/* Process is now unprivileged and inside a chroot */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   384
 #ifdef	_SOLARIS_
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   385
diff -Naur pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/pflogd.h pflogd-OPENBSD_5_5-OPENBSD_5_5/pflogd.h
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   386
--- pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/pflogd.h	2016-02-18 12:08:42.414919276 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   387
+++ pflogd-OPENBSD_5_5-OPENBSD_5_5/pflogd.h	2016-02-18 12:09:18.796727948 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   388
@@ -18,6 +18,8 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   389
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   390
 #ifdef	_SOLARIS_
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   391
 #include <limits.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   392
+#include <sys/types.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   393
+#include <priv.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   394
 #else /* !_SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   395
 #include <sys/limits.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   396
 #endif	/* _SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   397
@@ -55,3 +57,27 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   398
 int  receive_fd(int);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   399
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   400
 extern int Debug;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   401
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   402
+#ifdef _SOLARIS_
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   403
+#define DROP_PRIV(priv)                                         \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   404
+	do {                                                    \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   405
+		if (priv_set(PRIV_OFF, PRIV_PERMITTED, (priv),  \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   406
+		    NULL) != 0) {                               \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   407
+			fprintf(stderr,                         \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   408
+			    "Unable to drop privileges.\n");    \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   409
+			exit (-1);                              \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   410
+		}                                               \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   411
+	} while (0)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   412
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   413
+#define DROP_PFLAG(flag)				\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   414
+	do {						\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   415
+		if (setpflags((flag), 0) != 0) {	\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   416
+			fprintf(stderr,			\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   417
+			    "Unable to drop pflag.\n");	\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   418
+			exit (-1);			\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   419
+		}					\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   420
+} while (0)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   421
+#else /* !_SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   422
+#define DROP_PRIV(priv)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   423
+#define DROP_PFLAG(flag)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   424
+#endif /* _SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   425
diff -Naur pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/privsep.c pflogd-OPENBSD_5_5-OPENBSD_5_5/privsep.c
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   426
--- pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/privsep.c	2016-02-18 12:07:34.219667793 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   427
+++ pflogd-OPENBSD_5_5-OPENBSD_5_5/privsep.c	2016-02-18 11:55:14.949135348 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   428
@@ -112,6 +112,7 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   429
 #endif	/* !_SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   430
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   431
 	child_pid = fork();
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   432
+	DROP_PRIV(PRIV_PROC_FORK);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   433
 	if (child_pid < 0)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   434
 		err(1, "fork() failed");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   435
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   436
@@ -133,6 +134,7 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   437
 		if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) == -1)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   438
 			err(1, "setresuid() failed");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   439
 #endif	/* !_SOLARIS_ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   440
+		DROP_PFLAG(PRIV_XPOLICY);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   441
 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   442
 		close(socks[0]);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   443
 		priv_fd = socks[1];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   444
diff -Naur pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/smf-config.c pflogd-OPENBSD_5_5-OPENBSD_5_5/smf-config.c
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   445
--- pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/smf-config.c	1969-12-31 16:00:00.000000000 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   446
+++ pflogd-OPENBSD_5_5-OPENBSD_5_5/smf-config.c	2016-02-24 08:24:57.408744180 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   447
@@ -0,0 +1,713 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   448
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   449
+ * CDDL HEADER START
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   450
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   451
+ * The contents of this file are subject to the terms of the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   452
+ * Common Development and Distribution License (the "License").
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   453
+ * You may not use this file except in compliance with the License.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   454
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   455
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   456
+ * or http://www.opensolaris.org/os/licensing.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   457
+ * See the License for the specific language governing permissions
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   458
+ * and limitations under the License.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   459
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   460
+ * When distributing Covered Code, include this CDDL HEADER in each
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   461
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   462
+ * If applicable, add the following below this CDDL HEADER, with the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   463
+ * fields enclosed by brackets "[]" replaced with your own identifying
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   464
+ * information: Portions Copyright [yyyy] [name of copyright owner]
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   465
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   466
+ * CDDL HEADER END
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   467
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   468
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   469
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   470
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   471
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   472
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   473
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   474
+#include <string.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   475
+#include <strings.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   476
+#include <stdlib.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   477
+#include <err.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   478
+#include <stdarg.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   479
+#include <stdio.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   480
+#include <libscf.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   481
+#include <stddef.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   482
+#include <libscf_priv.h>
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   483
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   484
+#include "pflogd.h"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   485
+#include "smf-config.h"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   486
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   487
+#define	PFLOGD_PG	"pflog"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   488
+#define PFLOGD_PROP_VALUE_AUTH	"value_authorization"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   489
+#define PFLOGD_PROP_ACTION_AUTH	"action_authorization"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   490
+#define PFLOGD_VALUE_AUTH	"solaris.smf.value.network.firewall"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   491
+#define PFLOGD_MANAGE_AUTH	"solaris.smf.manage.network.firewall"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   492
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   493
+#define	SKIP_PROP(_pv_)		\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   494
+	((strcmp((_pv_)->pv_prop, "action_authorization") == 0) || \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   495
+	(strcmp((_pv_)->pv_prop, "value_authorization") == 0))
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   496
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   497
+#define	STRIP_SVC(_x_)	((_x_) + (sizeof ("svc:/") - 1))
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   498
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   499
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   500
+ * smf_pflogd_cfg
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   501
+ * FTP proxy configuration container.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   502
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   503
+smf_pflogd_cfg_t	smf_pflogd_cfg;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   504
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   505
+#define	SMF_OPT_OPTIONAL	0
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   506
+#define	SMF_OPT_MANDATORY	1
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   507
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   508
+ * X-macro table.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   509
+ * Columns are as follows:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   510
+ * 	value key/index 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   511
+ *	SMF property name name
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   512
+ *	member in smf_pflogd_cfg_t structure
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   513
+ *	function which converts ASCIIZ to member type in smf_pflogd_cfg_t
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   514
+ *	function which converts member in smf_pflogd_cfg_t to ASCIIZ
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   515
+ *	optional/mandatory status
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   516
+ *      property type
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   517
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   518
+#define	X_CFG_PROPS	\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   519
+	X(SMF_LOGFILE, "logfile", cfg_logfile, nop_in, nop_out,		\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   520
+	    SMF_OPT_MANDATORY, SCF_TYPE_ASTRING)			\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   521
+	X(SMF_SNAPLEN, "snaplen", cfg_snaplen, int_in, int_out,		\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   522
+	    SMF_OPT_MANDATORY, SCF_TYPE_INTEGER)			\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   523
+	X(SMF_INTERFACE, "interface", cfg_interface, nop_in, nop_out,	\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   524
+	    SMF_OPT_MANDATORY, SCF_TYPE_ASTRING)			\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   525
+	X(SMF_DELAY, "delay",	cfg_delay, int_in, int_out,		\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   526
+	    SMF_OPT_OPTIONAL, SCF_TYPE_INTEGER)				\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   527
+	X(SMF_EXPRESSION, "filter", cfg_expression, nop_in, nop_out,	\
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   528
+	    SMF_OPT_OPTIONAL, SCF_TYPE_ASTRING)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   529
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   530
+static void nop_in(void *, void *);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   531
+static void nop_out(void *, void *);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   532
+static void int_in(void *, void *);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   533
+static void int_out(void *, void *);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   534
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   535
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   536
+ * smf_keys
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   537
+ * Keys (indexes) to `smf_propnames` dictionary.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   538
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   539
+#define	X(_const_, _propname_, _decl_, _conv_in_, _conv_out_, _mandatory_, \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   540
+    _type_) _const_,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   541
+enum smf_keys {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   542
+	X_CFG_PROPS
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   543
+	SMF_CFG_PROP_COUNT
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   544
+};
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   545
+#undef	X
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   546
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   547
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   548
+ * smf_propnames
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   549
+ * It's an array (dictionary), which translates property code (SMF_*) to
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   550
+ * property value name found `ftp-proxy` property group.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   551
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   552
+#define	X(_const_, _propname_, _decl_, _conv_in_, _conv_out_, _mandatory_, \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   553
+    _type_) _propname_,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   554
+static const char *smf_propnames[] = {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   555
+	X_CFG_PROPS
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   556
+	NULL
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   557
+};
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   558
+#undef	X
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   559
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   560
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   561
+ * smf_cfg_offsets
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   562
+ * Table of smf_pflogd_cfg_t members.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   563
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   564
+#define	X(_const_, _propname_, _decl_, _conv_in_, _conv_out_, _mandatory_, \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   565
+    _type_) offsetof(smf_pflogd_cfg_t, _decl_),
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   566
+static size_t smf_cfg_offsets[] = {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   567
+	X_CFG_PROPS
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   568
+	sizeof (smf_pflogd_cfg_t)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   569
+};
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   570
+#undef	X
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   571
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   572
+typedef void(*conv_in_f)(void *, void *);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   573
+typedef void(*conv_out_f)(void *, void *);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   574
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   575
+ * smf_convert_in
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   576
+ * Table of conversion functions, which convert particular smf_pflogd_cfg_t
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   577
+ * member into ASCIIZ.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   578
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   579
+#define	X(_const_, _propname_, _decl_, _conv_in_, _conv_out_, _mandatory_, \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   580
+    _type_) _conv_in_,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   581
+static conv_in_f smf_conv_in[] = {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   582
+	X_CFG_PROPS
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   583
+	NULL
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   584
+};
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   585
+#undef	X
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   586
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   587
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   588
+ * smf_conv_out
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   589
+ * Table of conversion functions, which convert ASCIIZ fetched from smf(5)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   590
+ * repository to member of smf_pflogd_cfg_t structure.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   591
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   592
+#define	X(_const_, _propname_, _decl_, _conv_in_, _conv_out_, _mandatory_, \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   593
+    _type_) _conv_out_,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   594
+static conv_out_f smf_conv_out[] = {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   595
+	X_CFG_PROPS
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   596
+	NULL
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   597
+};
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   598
+#undef	X
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   599
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   600
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   601
+ * smf_mandatory
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   602
+ * Table marks configuration parameters, which must be defined by admin,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   603
+ * before the service is enabled for the first time.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   604
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   605
+#define	X(_const_, _propname_, _decl_, _conv_in_, _conv_out_, _mandatory_, \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   606
+    _type_) _mandatory_,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   607
+static int smf_mandatory[] = {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   608
+	X_CFG_PROPS
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   609
+	0
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   610
+};
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   611
+#undef	X
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   612
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   613
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   614
+ * smf_type
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   615
+ * Table of types of SMF properties.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   616
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   617
+#define	X(_const_, _propname_, _decl_, _conv_in_, _conv_out_, _mandatory_, \
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   618
+    _type_) _type_,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   619
+static int smf_type[] = {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   620
+	X_CFG_PROPS
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   621
+	0
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   622
+};
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   623
+#undef	X
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   624
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   625
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   626
+ * pflogd property group properties
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   627
+ * +1 for NULL termination.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   628
+ * +1 for value_authorization
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   629
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   630
+static scf_propvec_t	prop_vec[SMF_CFG_PROP_COUNT + 1 + 1];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   631
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   632
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   633
+ * general property group properties
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   634
+ * +1 for NULL termination.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   635
+ * +2 for value_authorization/action_authorization
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   636
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   637
+static scf_propvec_t	gen_prop_vec[1 + 2];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   638
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   639
+static int atexit_set = 0;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   640
+static int complete_pflogdcfg(const char *);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   641
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   642
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   643
+ * nop_in()
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   644
+ * Dummy conversion ASCIIZ to ASCIIZ, no allocation happens. Used when
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   645
+ * configuration is from smf(5).
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   646
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   647
+static void
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   648
+nop_in(void *asciiz, void *result)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   649
+{
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   650
+	*((char **)result) = (char *)asciiz;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   651
+}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   652
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   653
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   654
+ * nop_out()
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   655
+ * Dummy conversion ASCIIZ to ASCIIZ, function allocates memory for result by
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   656
+ * strdup(3C). Used when configuration is written to smf(5) repository.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   657
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   658
+static void
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   659
+nop_out(void *asciiz, void *val)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   660
+{
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   661
+	*((char **)asciiz) = strdup(*(char **)val);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   662
+}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   663
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   664
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   665
+ * int_in()
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   666
+ * Dummy conversion of int64_t. No allocation happens. Used when reading
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   667
+ * values from smf.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   668
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   669
+static void
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   670
+int_in(void *in, void *out) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   671
+	*((int64_t *)out) = *((int64_t *)in);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   672
+}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   673
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   674
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   675
+ * int_out()
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   676
+ * Dummy conversion of int64_t, storing into a newly allocated memory.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   677
+ * Used when storing values to smf repository.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   678
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   679
+static void
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   680
+int_out(void *out, void *in) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   681
+	int64_t **out_ = (int64_t **)out;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   682
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   683
+	*out_ = malloc(sizeof (int64_t));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   684
+	if (*out_ != NULL)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   685
+		**out_ = *((int64_t *)in);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   686
+}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   687
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   688
+static void
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   689
+clear_prop_vec2(scf_propvec_t *prop_vec_ptr, int count)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   690
+{
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   691
+	while (count--) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   692
+		prop_vec_ptr->pv_prop = NULL;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   693
+		prop_vec_ptr->pv_desc = NULL;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   694
+		prop_vec_ptr->pv_type = 0;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   695
+		prop_vec_ptr->pv_aux = 0;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   696
+		prop_vec_ptr->pv_mval = 0;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   697
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   698
+		if (prop_vec_ptr->pv_ptr != NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   699
+			free(prop_vec_ptr->pv_ptr);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   700
+			prop_vec_ptr->pv_ptr = NULL;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   701
+		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   702
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   703
+		prop_vec_ptr++;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   704
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   705
+}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   706
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   707
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   708
+ * clear_prop_vec()
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   709
+ * Function clears global variables `prop_vec` and `gen_prop_vec`,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   710
+ * which are vectors of properties.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   711
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   712
+static void
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   713
+clear_prop_vec()
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   714
+{
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   715
+	clear_prop_vec2(prop_vec,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   716
+	    sizeof (prop_vec) / sizeof (scf_propvec_t));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   717
+	clear_prop_vec2(gen_prop_vec,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   718
+	    sizeof (gen_prop_vec) / sizeof (scf_propvec_t));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   719
+}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   720
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   721
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   722
+ * cfg_to_prop_vec()
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   723
+ * Function converts smf_pflogd_cfg global variable, which holds configuration
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   724
+ * parsed from command line arguments, to prop_vec, which is a smf(5) friendly
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   725
+ * representation of pflogd configuration. 
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   726
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   727
+ * Additionally, it populates gen_prop_vec to specify needed authorizations.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   728
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   729
+ * Returns 0 on success, -1 on out of memory error.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   730
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   731
+static int
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   732
+cfg_to_prop_vec(void)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   733
+{
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   734
+	int		cfg_bit = 1;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   735
+	int		i;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   736
+	scf_propvec_t	*prop_vec_ptr = prop_vec;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   737
+	conv_out_f	conv_func;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   738
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   739
+	clear_prop_vec();
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   740
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   741
+	for (i = 0; i < SMF_CFG_PROP_COUNT; i++) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   742
+		if ((smf_pflogd_cfg.cfg_set & cfg_bit) != 0) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   743
+			prop_vec_ptr->pv_prop = smf_propnames[i];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   744
+			conv_func = smf_conv_out[i];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   745
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   746
+			conv_func(&prop_vec_ptr->pv_ptr,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   747
+			    ((char *)&smf_pflogd_cfg + smf_cfg_offsets[i]));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   748
+			if (prop_vec_ptr->pv_ptr == NULL)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   749
+				return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   750
+			prop_vec_ptr->pv_type = smf_type[i];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   751
+			prop_vec_ptr++;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   752
+		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   753
+		cfg_bit = cfg_bit << 1;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   754
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   755
+	prop_vec_ptr->pv_type = SCF_TYPE_ASTRING;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   756
+	prop_vec_ptr->pv_prop = PFLOGD_PROP_VALUE_AUTH;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   757
+	prop_vec_ptr->pv_ptr = strdup(PFLOGD_VALUE_AUTH);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   758
+	prop_vec_ptr++;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   759
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   760
+	gen_prop_vec[0].pv_type = SCF_TYPE_ASTRING;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   761
+	gen_prop_vec[0].pv_prop = PFLOGD_PROP_VALUE_AUTH;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   762
+	gen_prop_vec[0].pv_ptr = strdup(PFLOGD_MANAGE_AUTH);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   763
+	gen_prop_vec[1].pv_type = SCF_TYPE_ASTRING;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   764
+	gen_prop_vec[1].pv_prop = PFLOGD_PROP_ACTION_AUTH;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   765
+	gen_prop_vec[1].pv_ptr = strdup(PFLOGD_MANAGE_AUTH);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   766
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   767
+	return (0);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   768
+}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   769
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   770
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   771
+ * prop_vec_to_cfg()
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   772
+ * Converts global variable `prop_vec` to `smf_pflogd_cfg` global variable,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   773
+ * which is understood by main().
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   774
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   775
+static void
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   776
+prop_vec_to_cfg(void)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   777
+{
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   778
+	int		i;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   779
+	scf_propvec_t	*prop_vec_ptr = prop_vec;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   780
+	conv_in_f	conv_func;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   781
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   782
+	for (i = 0; i < SMF_CFG_PROP_COUNT; i++, prop_vec_ptr++) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   783
+		if (SKIP_PROP(prop_vec_ptr)) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   784
+			/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   785
+			 * We have `hidden` properties: action/value smf
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   786
+			 * authorization. Those two are not kept in
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   787
+			 * smf_ftp_cfg.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   788
+			 *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   789
+			 * So we must to skip to next property in vector
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   790
+			 * without letting for loop to advance its counter, so
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   791
+			 * we compensate here by doing `i--`.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   792
+			 */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   793
+			i--;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   794
+			continue;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   795
+		};
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   796
+		conv_func = smf_conv_in[i];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   797
+		conv_func(prop_vec_ptr->pv_ptr,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   798
+		    ((char *)&smf_pflogd_cfg + smf_cfg_offsets[i]));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   799
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   800
+}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   801
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   802
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   803
+ * smf_print_pflogcfg()
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   804
+ * Function loads pflogdcfg from smf(5) repository and prints configuration to
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   805
+ * standard output. We use `scf_simple_prop_get(3SCF)`.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   806
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   807
+ * Returns 0 on success, -1 on error.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   808
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   809
+int
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   810
+smf_print_pflogcfg(const char *smf_instance)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   811
+{
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   812
+	scf_simple_prop_t	*prop;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   813
+	char			*propval;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   814
+	int			i;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   815
+	scf_propvec_t		*prop_vec_ptr = prop_vec;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   816
+	int			cfg_undefined = 0;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   817
+	char			*fmri;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   818
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   819
+	if (atexit_set == 0) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   820
+		atexit(clear_prop_vec);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   821
+		bzero(&smf_pflogd_cfg, sizeof (smf_pflogd_cfg_t));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   822
+		atexit_set = 1;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   823
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   824
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   825
+	(void) asprintf(&fmri, "%s:%s", BASE_FMRI, smf_instance);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   826
+	if (fmri == NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   827
+		fprintf(stderr, "Out of memory.\n");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   828
+		return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   829
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   830
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   831
+	clear_prop_vec();
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   832
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   833
+	for (i = 0; i < SMF_CFG_PROP_COUNT; i++) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   834
+		prop = scf_simple_prop_get(NULL, fmri, PFLOGD_PG,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   835
+		    smf_propnames[i]);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   836
+		prop_vec_ptr->pv_prop = smf_propnames[i];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   837
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   838
+		if (prop == NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   839
+			/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   840
+			 * Property not defined, so we create a kind of
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   841
+			 * 'placeholder' with empty value.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   842
+			 *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   843
+			 * calloc() works well for both astring and integer.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   844
+			 */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   845
+			prop_vec_ptr->pv_type = smf_type[i];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   846
+			prop_vec_ptr->pv_ptr = calloc(1, sizeof (int64_t));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   847
+			cfg_undefined |= smf_mandatory[i];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   848
+		} else {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   849
+			prop_vec_ptr->pv_type = scf_simple_prop_type(prop);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   850
+			if (prop_vec_ptr->pv_type == -1) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   851
+				free(fmri);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   852
+				fprintf(stderr,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   853
+				    "Failed to get property type.\n");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   854
+				return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   855
+			}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   856
+			if (prop_vec_ptr->pv_type != smf_type[i]) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   857
+				free(fmri);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   858
+				fprintf(stderr,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   859
+				    "Property %s has unexpected type.\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   860
+				    smf_propnames[i]);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   861
+				return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   862
+			}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   863
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   864
+			if (smf_type[i] == SCF_TYPE_ASTRING) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   865
+				char	*propval;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   866
+				propval = scf_simple_prop_next_astring(prop);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   867
+				if (propval == NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   868
+					propval = "";
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   869
+				}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   870
+				prop_vec_ptr->pv_ptr = strdup(propval);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   871
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   872
+				if (propval[0] == 0) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   873
+					cfg_undefined |= smf_mandatory[i];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   874
+				}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   875
+			} else {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   876
+				/* smf_type[i] == SCF_TYPE_INTEGER */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   877
+				int64_t	*propval;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   878
+				int64_t propval_;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   879
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   880
+				propval = scf_simple_prop_next_integer(prop);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   881
+				propval_ = (propval == NULL) ? (0) : (*propval);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   882
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   883
+				prop_vec_ptr->pv_ptr = malloc(sizeof (int64_t));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   884
+				if (prop_vec_ptr->pv_ptr != NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   885
+					*((int64_t *)prop_vec_ptr->pv_ptr) =
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   886
+					    propval_;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   887
+				}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   888
+				if (propval_ == 0) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   889
+					cfg_undefined |= smf_mandatory[i];
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   890
+				}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   891
+			}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   892
+			scf_simple_prop_free(prop);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   893
+		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   894
+		if (prop_vec_ptr->pv_ptr == NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   895
+			free(fmri);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   896
+			fprintf(stderr, "Out of memory.\n");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   897
+			return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   898
+		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   899
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   900
+		prop_vec_ptr++;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   901
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   902
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   903
+	printf("PF pflogd configuration:\n");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   904
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   905
+	prop_vec_ptr = prop_vec;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   906
+	for (i = 0; i < SMF_CFG_PROP_COUNT; i++) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   907
+		if (smf_type[i] == SCF_TYPE_ASTRING) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   908
+			const char *val = (const char *)prop_vec_ptr->pv_ptr;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   909
+			printf("\t- %s:\n\t\t%s\n", prop_vec_ptr->pv_prop,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   910
+			    ((val[0] == '\0') ?  "?? undefined ??" : val));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   911
+		} else {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   912
+			/* smf_type[i] == SCF_TYPE_INTEGER */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   913
+			int64_t val = *((int64_t *)prop_vec_ptr->pv_ptr);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   914
+			if (val == 0) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   915
+				printf("\t- %s:\n\t\t%s\n", prop_vec_ptr->pv_prop,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   916
+			    	    "?? undefined ??");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   917
+			} else {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   918
+				printf("\t- %s:\n\t\t%d\n", prop_vec_ptr->pv_prop,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   919
+			    	    (int)val);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   920
+			}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   921
+		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   922
+		prop_vec_ptr++;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   923
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   924
+	if (cfg_undefined) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   925
+		printf("\n\nConfiguration for %s is incomplete."
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   926
+		    " Service will not run.\n\n", fmri);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   927
+	} else {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   928
+		prop_vec_to_cfg();
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   929
+		printf(
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   930
+		    "\n\n%s service is being launched using cmd line below\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   931
+		    fmri);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   932
+		printf("pflogd -d %d -i %s -s %d -f %s %s\n\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   933
+		    (int)smf_pflogd_cfg.cfg_delay, smf_pflogd_cfg.cfg_interface,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   934
+		    (int)smf_pflogd_cfg.cfg_snaplen, smf_pflogd_cfg.cfg_logfile,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   935
+		    smf_pflogd_cfg.cfg_expression);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   936
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   937
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   938
+	free(fmri);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   939
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   940
+	return (0);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   941
+}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   942
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   943
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   944
+ * smf_create_pflogd_instance()
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   945
+ * Function creates a new instance in smf(5) repository.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   946
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   947
+static int
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   948
+smf_create_pflogd_instance(const char *smf_instance)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   949
+{
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   950
+	scf_handle_t	*h_scf = NULL;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   951
+	scf_scope_t	*scp_scf = NULL;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   952
+	scf_service_t	*svc_scf = NULL;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   953
+	scf_instance_t	*sin_scf = NULL;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   954
+	int	rv = -1;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   955
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   956
+ 	h_scf = scf_handle_create(SCF_VERSION);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   957
+	if ((h_scf == NULL) || (scf_handle_bind(h_scf) == -1)) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   958
+		(void) fprintf(stderr, "scf_handle_bind() failed - %s\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   959
+		    scf_strerror(scf_error()));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   960
+		if (h_scf != NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   961
+			scf_handle_destroy(h_scf);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   962
+		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   963
+		return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   964
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   965
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   966
+	if ((scp_scf = scf_scope_create(h_scf)) == NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   967
+		(void) fprintf(stderr, "could not create scope - %s\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   968
+		    scf_strerror(scf_error()));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   969
+		goto unbind;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   970
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   971
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   972
+	if (scf_handle_get_local_scope(h_scf, scp_scf) != 0) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   973
+		(void) fprintf(stderr, "could not get scope - %s\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   974
+		    scf_strerror(scf_error()));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   975
+		goto scope_destroy;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   976
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   977
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   978
+	if ((svc_scf = scf_service_create(h_scf)) == NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   979
+		(void) fprintf(stderr, "could not create service - %s\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   980
+		    scf_strerror(scf_error()));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   981
+		goto scope_destroy;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   982
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   983
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   984
+	if ((sin_scf = scf_instance_create(h_scf)) == NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   985
+		(void) fprintf(stderr, "could not get instance handle - %s\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   986
+		    scf_strerror(scf_error()));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   987
+		goto service_destroy;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   988
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   989
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   990
+	if (scf_scope_get_service(scp_scf, STRIP_SVC(BASE_FMRI), svc_scf) !=
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   991
+	    SCF_SUCCESS) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   992
+		(void) fprintf(stderr, "could not select service (%s)\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   993
+		    scf_strerror(scf_error()));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   994
+		goto instance_destroy;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   995
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   996
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   997
+	if (scf_service_add_instance(svc_scf, smf_instance, sin_scf) != 0) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   998
+		(void) fprintf(stderr, "could not add %s instance - %s\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
   999
+		    smf_instance, scf_strerror(scf_error()));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1000
+		goto instance_destroy;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1001
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1002
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1003
+	if (scf_instance_add_pg(sin_scf, "general", "framework", 0,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1004
+	    NULL) != SCF_SUCCESS) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1005
+		(void) fprintf(stderr,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1006
+		    "could not create property group - %s\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1007
+		    scf_strerror(scf_error()));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1008
+		goto instance_delete;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1009
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1010
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1011
+	if (scf_instance_add_pg(sin_scf, PFLOGD_PG, "application", 0,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1012
+	    NULL) != SCF_SUCCESS) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1013
+		(void) fprintf(stderr,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1014
+		    "could not create property group - %s\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1015
+		    scf_strerror(scf_error()));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1016
+		goto instance_delete;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1017
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1018
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1019
+	rv = 0;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1020
+	goto instance_destroy;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1021
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1022
+instance_delete:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1023
+	if (scf_instance_delete(sin_scf) != 0) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1024
+		fprintf(stderr, "Can't delete the newly created instance:");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1025
+		fprintf(stderr, "\t%s\n", scf_strerror(scf_error()));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1026
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1027
+instance_destroy:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1028
+	scf_instance_destroy(sin_scf);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1029
+service_destroy:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1030
+	scf_service_destroy(svc_scf);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1031
+scope_destroy:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1032
+	scf_scope_destroy(scp_scf);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1033
+unbind:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1034
+	scf_handle_unbind(h_scf);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1035
+	scf_handle_destroy(h_scf);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1036
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1037
+	return (rv);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1038
+}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1039
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1040
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1041
+ * smf_write_pflogcfg()
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1042
+ * Function writes pflogd configuration to smf(5) repository.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1043
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1044
+int
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1045
+smf_write_pflogcfg(const char *smf_instance, int create)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1046
+{
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1047
+	int	i;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1048
+	scf_propvec_t
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1049
+		*bad_prop_vec = NULL;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1050
+	char	*fmri;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1051
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1052
+	if (atexit_set == 0) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1053
+		atexit(clear_prop_vec);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1054
+		bzero(prop_vec, sizeof (prop_vec));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1055
+		atexit_set = 1;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1056
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1057
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1058
+	if (create && (complete_pflogdcfg(smf_instance) != 0)) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1059
+		fprintf(stderr, "Out of memory.\n");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1060
+		return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1061
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1062
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1063
+	if (cfg_to_prop_vec() != 0) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1064
+		fprintf(stderr, "Out of memory.\n");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1065
+		return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1066
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1067
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1068
+	(void) asprintf(&fmri, "%s:%s", BASE_FMRI, smf_instance);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1069
+	if (fmri == NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1070
+		fprintf(stderr, "Out of memory.\n");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1071
+		return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1072
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1073
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1074
+	if (create) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1075
+		if (smf_create_pflogd_instance(smf_instance) != 0) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1076
+			free(fmri);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1077
+			return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1078
+		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1079
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1080
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1081
+	if (create && (scf_write_propvec(fmri, "general", gen_prop_vec,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1082
+	    &bad_prop_vec) != SCF_SUCCESS)) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1083
+		fprintf(stderr, "Can't update %s configuration:", fmri);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1084
+		fprintf(stderr, "\t%s\n", scf_strerror(scf_error()));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1085
+		if (bad_prop_vec != NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1086
+			fprintf(stderr, "Could not set %s\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1087
+			    bad_prop_vec->pv_prop);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1088
+		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1089
+		free(fmri);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1090
+		exit(1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1091
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1092
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1093
+	bad_prop_vec = NULL;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1094
+	if (scf_write_propvec(fmri, PFLOGD_PG, prop_vec, &bad_prop_vec)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1095
+	    != SCF_SUCCESS) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1096
+		fprintf(stderr, "Can't update %s configuration:", fmri);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1097
+		fprintf(stderr, "\t%s\n", scf_strerror(scf_error()));
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1098
+		if (bad_prop_vec != NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1099
+			fprintf(stderr, "Could not set %s\n",
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1100
+			    bad_prop_vec->pv_prop);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1101
+		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1102
+		free(fmri);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1103
+		exit(1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1104
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1105
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1106
+	free(fmri);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1107
+	return (0);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1108
+}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1109
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1110
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1111
+ * complete_pflogdcfg()
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1112
+ * Function sets default values to properties, which are unset/undefined when
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1113
+ * new smf(5) instance is being created.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1114
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1115
+ * Returns 0 on success, -1 on out of memory error.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1116
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1117
+static int
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1118
+complete_pflogdcfg(const char *smf_instance)
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1119
+{
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1120
+	int	i;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1121
+	int	f = 1;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1122
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1123
+	for (i = 0; i < SMF_CFG_PROP_COUNT; i++) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1124
+		if ((smf_pflogd_cfg.cfg_set & f) == 0) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1125
+			switch (i) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1126
+			case SMF_LOGFILE:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1127
+				(void) asprintf(&smf_pflogd_cfg.cfg_logfile,
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1128
+				    "%s/%s", PFLOGD_LOG_DIR, smf_instance);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1129
+				if (smf_pflogd_cfg.cfg_logfile == NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1130
+					return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1131
+				}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1132
+				smf_pflogd_cfg.cfg_set |= SMF_CFG_LOGFILE_SET;	
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1133
+				break;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1134
+			case SMF_INTERFACE:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1135
+				smf_pflogd_cfg.cfg_interface = strdup(smf_instance);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1136
+				if (smf_pflogd_cfg.cfg_interface == NULL) {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1137
+					return (-1);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1138
+				}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1139
+				smf_pflogd_cfg.cfg_set |= SMF_CFG_INTERFACE_SET;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1140
+				break;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1141
+			case SMF_SNAPLEN:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1142
+				smf_pflogd_cfg.cfg_snaplen = DEF_SNAPLEN;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1143
+				smf_pflogd_cfg.cfg_set |= SMF_CFG_SNAPLEN_SET;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1144
+				break;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1145
+			case SMF_DELAY:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1146
+				smf_pflogd_cfg.cfg_delay = FLUSH_DELAY;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1147
+				smf_pflogd_cfg.cfg_set |= SMF_CFG_DELAY_SET;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1148
+				break;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1149
+			case SMF_EXPRESSION:
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1150
+				smf_pflogd_cfg.cfg_expression = strdup("");
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1151
+				smf_pflogd_cfg.cfg_set |= SMF_CFG_EXPRESSION_SET;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1152
+				break;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1153
+			default: ;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1154
+			}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1155
+		}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1156
+		f = f << 1;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1157
+	}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1158
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1159
+	return (0);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1160
+}
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1161
diff -Naur pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/smf-config.h pflogd-OPENBSD_5_5-OPENBSD_5_5/smf-config.h
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1162
--- pflogd-OPENBSD_5_5-OPENBSD_5_5.pre-smf/smf-config.h	1969-12-31 16:00:00.000000000 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1163
+++ pflogd-OPENBSD_5_5-OPENBSD_5_5/smf-config.h	2016-02-17 01:17:14.520118386 -0800
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1164
@@ -0,0 +1,53 @@
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1165
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1166
+ * CDDL HEADER START
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1167
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1168
+ * The contents of this file are subject to the terms of the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1169
+ * Common Development and Distribution License (the "License").
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1170
+ * You may not use this file except in compliance with the License.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1171
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1172
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1173
+ * or http://www.opensolaris.org/os/licensing.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1174
+ * See the License for the specific language governing permissions
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1175
+ * and limitations under the License.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1176
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1177
+ * When distributing Covered Code, include this CDDL HEADER in each
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1178
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1179
+ * If applicable, add the following below this CDDL HEADER, with the
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1180
+ * fields enclosed by brackets "[]" replaced with your own identifying
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1181
+ * information: Portions Copyright [yyyy] [name of copyright owner]
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1182
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1183
+ * CDDL HEADER END
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1184
+ *
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1185
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1186
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1187
+/*
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1188
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1189
+ */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1190
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1191
+#ifndef	_SMF_CONFIG_H_
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1192
+#define	_SMF_CONFIG_H_
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1193
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1194
+#define	BASE_FMRI		"svc:/network/firewall/pflog"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1195
+#define	DEFAULT_INSTANCE	"pflog0"
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1196
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1197
+#define	SMF_CFG_LOGFILE_SET	0x00000001
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1198
+#define	SMF_CFG_SNAPLEN_SET	0x00000002
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1199
+#define	SMF_CFG_INTERFACE_SET	0x00000004
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1200
+#define	SMF_CFG_DELAY_SET	0x00000008
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1201
+#define	SMF_CFG_EXPRESSION_SET	0x00000010
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1202
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1203
+typedef struct smf_pflogd_cfg {
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1204
+	unsigned int	cfg_set;	/* SMF_CFG_*_SET bit field */
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1205
+	char		*cfg_logfile;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1206
+	int64_t		cfg_snaplen;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1207
+	char 		*cfg_interface;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1208
+	int64_t		cfg_delay;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1209
+	char		*cfg_expression;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1210
+} smf_pflogd_cfg_t;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1211
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1212
+extern smf_pflogd_cfg_t	smf_pflogd_cfg;
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1213
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1214
+extern int smf_print_pflogcfg(const char *);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1215
+extern int smf_write_pflogcfg(const char *, int);
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1216
+
2e0470f8f10d PSARC/2014/291 PFLOGD: Packet Logging for PF
yumo.liu@oracle.com <yumo.liu@oracle.com>
parents:
diff changeset
  1217
+#endif	/* !_SMF_CONFIG_H_ */