annotate usr/src/cmd/fm/scripts/dictck.pl @ 12979:ab9ae749152f

PSARC/2009/617 Software Events Notification Parameters CLI PSARC/2009/618 snmp-notify: SNMP Notification Daemon for Software Events PSARC/2009/619 smtp-notify: Email Notification Daemon for Software Events PSARC/2010/225 fmd for non-global Solaris zones PSARC/2010/226 Solaris Instance UUID PSARC/2010/227 nvlist_nvflag(3NVPAIR) PSARC/2010/228 libfmevent additions PSARC/2010/257 sysevent_evc_setpropnvl and sysevent_evc_getpropnvl PSARC/2010/265 FMRI and FMA Event Stabilty, 'ireport' category 1 event class, and the 'sw' FMRI scheme PSARC/2010/278 FMA/SMF integration: instance state transitions PSARC/2010/279 Modelling panics within FMA PSARC/2010/290 logadm.conf upgrade 6392476 fmdump needs to pretty-print 6393375 userland ereport/ireport event generation interfaces 6445732 Add email notification agent for FMA and software events 6804168 RFE: Allow an efficient means to monitor SMF services status changes 6866661 scf_values_destroy(3SCF) will segfault if is passed NULL 6884709 Add snmp notification agent for FMA and software events 6884712 Add private interface to tap into libfmd_msg macro expansion capabilities 6897919 fmd to run in a non-global zone 6897937 fmd use of non-private doors is not safe 6900081 add a UUID to Solaris kernel image for use in crashdump identification 6914884 model panic events as a defect diagnosis in FMA 6944862 fmd_case_open_uuid, fmd_case_uuisresolved, fmd_nvl_create_defect 6944866 log legacy sysevents in fmd 6944867 enumerate svc scheme in topo 6944868 software-diagnosis and software-response fmd modules 6944870 model SMF maintenance state as a defect diagnosis in FMA 6944876 savecore runs in foreground for systems with zfs root and dedicated dump 6965796 Implement notification parameters for SMF state transitions and FMA events 6968287 SUN-FM-MIB.mib needs to be updated to reflect Oracle information 6972331 logadm.conf upgrade PSARC/2010/290
author Gavin Maltby <gavin.maltby@oracle.com>
date Fri, 30 Jul 2010 17:04:17 +1000
parents 2a58fa6611ef
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1 #!/usr/bin/perl -w
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
3 # CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
4 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
5 # The contents of this file are subject to the terms of the
6276
2a58fa6611ef 6430447 Notifications (message, SNMP trap) should be generated in response to a list.repaired event
cy152378
parents: 0
diff changeset
6 # Common Development and Distribution License (the "License").
2a58fa6611ef 6430447 Notifications (message, SNMP trap) should be generated in response to a list.repaired event
cy152378
parents: 0
diff changeset
7 # You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
8 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
10 # or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
11 # See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
12 # and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
13 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
14 # When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
16 # If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
17 # fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
18 # information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
19 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
20 # CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
21 #
12979
ab9ae749152f PSARC/2009/617 Software Events Notification Parameters CLI
Gavin Maltby <gavin.maltby@oracle.com>
parents: 6276
diff changeset
22 # Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
23 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
24 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
25 # dictck -- Sanity check a .dict file and optionally the corresponding .po file
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
26 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
27 # example: dickck FMD.dict FMD.po
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
28 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
29 # usage: dickck [-vp] [ -b buildcode ] dictfile [ pofile ]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
30 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
31 # -b specify location of "buildcode" command
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
32 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
33 # -p print a .po file template to stdout, based on dictfile given
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
34 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
35 # -v verbose, show how code is assembled
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
36 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
37 # Note: this program requires the "buildcode" program in your search path.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
38 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
39
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
40 use strict;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
41
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
42 use Getopt::Std;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
43
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
44 use vars qw($opt_b $opt_p $opt_v);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
45
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
46 my $Myname = $0; # save our name for error messages
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
47 $Myname =~ s,.*/,,;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
48
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
49 $SIG{HUP} = $SIG{INT} = $SIG{TERM} = $SIG{__DIE__} = sub {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
50 # although fatal, we prepend "WARNING:" to make sure the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
51 # commonly-used "nightly" script flags this as lint on the .dict file
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
52 die "$Myname: WARNING: @_";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
53 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
54
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
55 #
12979
ab9ae749152f PSARC/2009/617 Software Events Notification Parameters CLI
Gavin Maltby <gavin.maltby@oracle.com>
parents: 6276
diff changeset
56 # Category 1 event classes
ab9ae749152f PSARC/2009/617 Software Events Notification Parameters CLI
Gavin Maltby <gavin.maltby@oracle.com>
parents: 6276
diff changeset
57 #
ab9ae749152f PSARC/2009/617 Software Events Notification Parameters CLI
Gavin Maltby <gavin.maltby@oracle.com>
parents: 6276
diff changeset
58 my @cat1ev = qw(fault defect upset ereport list ireport);
ab9ae749152f PSARC/2009/617 Software Events Notification Parameters CLI
Gavin Maltby <gavin.maltby@oracle.com>
parents: 6276
diff changeset
59
ab9ae749152f PSARC/2009/617 Software Events Notification Parameters CLI
Gavin Maltby <gavin.maltby@oracle.com>
parents: 6276
diff changeset
60 #
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
61 # usage -- print a usage message and exit
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
62 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
63 sub usage {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
64 my $msg = shift;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
65
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
66 warn "$Myname: $msg\n" if defined($msg);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
67 warn "usage: $Myname [-pv] [ -b buildcode ] dictfile [ pofile ]\n";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
68 exit 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
69 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
70
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
71 my %keys2val;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
72 my %val2keys;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
73 my %code2val;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
74
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
75 my $buildcode = 'buildcode';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
76
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
77 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
78 # the "main" for this script...
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
79 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
80 getopts('b:pv') or usage;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
81
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
82 my $dictfile = shift;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
83 my $pofile = shift;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
84 usage unless defined($dictfile);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
85 usage if @ARGV;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
86 $buildcode = $opt_b if defined($opt_b);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
87 dodict($dictfile);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
88 dopo($pofile) if defined($pofile);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
89 exit 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
90
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
91 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
92 # dodict -- load up a .dict file, sanity checking it as we go
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
93 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
94 sub dodict {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
95 my $name = shift;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
96 my $dname;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
97 my $line = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
98 my $lhs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
99 my $rhs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
100 my %props;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
101 my $maxkey = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
102
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
103 if ($name =~ m,([^/]+)\.dict$,) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
104 $dname = $1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
105 } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
106 die "dictname \"$name\" not something.dict as expected\n";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
107 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
108
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
109 open(F, $name) or die "$name: $!\n";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
110 print "parsing \"$name\"\n" if $opt_v;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
111 while (<F>) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
112 $line++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
113 next if /^\s*#/;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
114 chomp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
115 next if /^\s*$/;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
116 die "$name:$line: first non-comment line must be FMDICT line\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
117 unless /^FMDICT:/;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
118 print "FMDICT keyword found on line $line\n" if $opt_v;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
119 s/FMDICT:\s*//;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
120 my $s = $_;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
121 while ($s =~ /^\s*([^=\s]+)(.*)$/) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
122 $lhs = $1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
123 $rhs = "";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
124 $s = $+;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
125 if ($s =~ /^\s*=\s*(.*)$/) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
126 $s = $+;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
127 die "$name:$line: property \"$lhs\" incomplete\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
128 unless $s ne "";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
129 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
130 if ($s =~ /^"((?:[^"]|\\")*)"(.*)$/) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
131 $s = $+;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
132 $rhs = $1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
133 } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
134 $s =~ /^([^\s]*)(.*)$/;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
135 $s = $+;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
136 $rhs = $1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
137 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
138 $rhs =~ s/\\(.)/dobs($1)/ge;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
139 $props{$lhs} = $rhs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
140 print "property \"$lhs\" value \"$rhs\"\n" if $opt_v;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
141 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
142 last;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
143 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
144 # check for required headers
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
145 die "$name: no version property in header\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
146 unless defined($props{'version'});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
147 die "$name: no name property in header\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
148 unless defined($props{'name'});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
149 die "$name: no maxkey property in header\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
150 unless defined($props{'maxkey'});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
151
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
152 # check version
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
153 die "$name:$line: unexpected version: \"$props{'version'}\"\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
154 unless $props{'version'} eq "1";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
155
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
156 # check name
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
157 die "$name:$line: name \"$props{'name'}\" doesn't match \"$dname\" from filename\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
158 unless $props{'name'} eq $dname;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
159
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
160 # check format of maxkey (value checked later)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
161 die "$name:$line: maxkey property must be a number\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
162 unless $props{'maxkey'} =~ /^\d+$/;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
163
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
164 # check for old bits property
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
165 die "$name: obsolete \"bits\" property found in header\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
166 if defined($props{'bits'});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
167
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
168 # parse entries
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
169 while (<F>) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
170 $line++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
171 chomp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
172 s/#.*//;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
173 next if /^\s*$/;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
174 die "$name:$line: malformed entry\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
175 unless /^([^=]+)=(\d+)$/;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
176 $lhs = $1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
177 $rhs = $2;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
178
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
179 # make sure keys are sorted
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
180 my $elhs = join(' ', sort split(/\s/, $lhs));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
181 die "$name:$line: keys not in expected format of:\n" .
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
182 " \"$elhs\"\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
183 unless $elhs eq $lhs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
184
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
185 # check for duplicate or unexpected keys
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
186 my %keys;
12979
ab9ae749152f PSARC/2009/617 Software Events Notification Parameters CLI
Gavin Maltby <gavin.maltby@oracle.com>
parents: 6276
diff changeset
187 my $cat1pat = join('|', @cat1ev);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
188 foreach my $e (split(/\s/, $lhs)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
189 die "$name:$line: unknown event type \"$e\"\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
190 unless $e =~
12979
ab9ae749152f PSARC/2009/617 Software Events Notification Parameters CLI
Gavin Maltby <gavin.maltby@oracle.com>
parents: 6276
diff changeset
191 /^($cat1pat)\..*[^.]$/;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
192 die "$name:$line: key repeated: \"$e\"\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
193 if defined($keys{$e});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
194 $keys{$e} = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
195 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
196 $maxkey = keys(%keys) if $maxkey < keys(%keys);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
197
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
198 die "$name:$line: duplicate entry for keys\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
199 if defined($keys2val{$lhs});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
200 die "$name:$line: duplicate entry for value $rhs\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
201 if defined($val2keys{$rhs});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
202 $keys2val{$lhs} = $rhs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
203 $val2keys{$rhs} = $lhs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
204
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
205 open(B, "$buildcode $dname $rhs|") or
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
206 die "can't run buildcode: $!\n";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
207 my $code = <B>;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
208 chomp $code;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
209 close(B);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
210 print "code: $code keys: $lhs\n" if $opt_v;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
211 $code2val{$code} = $rhs;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
212
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
213 if ($opt_p) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
214 print <<EOF;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
215 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
216 # code: $code
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
217 # keys: $lhs
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
218 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
219 msgid "$code.type"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
220 msgstr "XXX"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
221 msgid "$code.severity"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
222 msgstr "XXX"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
223 msgid "$code.description"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
224 msgstr "XXX"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
225 msgid "$code.response"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
226 msgstr "XXX"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
227 msgid "$code.impact"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
228 msgstr "XXX"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
229 msgid "$code.action"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
230 msgstr "XXX"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
231 EOF
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
232 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
233 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
234
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
235 print "computed maxkey: $maxkey\n" if $opt_v;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
236
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
237 # check maxkey
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
238 die "$name: maxkey too low, should be $maxkey\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
239 if $props{'maxkey'} < $maxkey;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
240
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
241 close(F);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
242 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
243
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
244 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
245 # dobs -- handle backslashed sequences
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
246 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
247 sub dobs {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
248 my $s = shift;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
249
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
250 return "\n" if $s eq 'n';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
251 return "\r" if $s eq 'r';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
252 return "\t" if $s eq 't';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
253 return $s;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
254 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
255
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
256 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
257 # dopo -- sanity check a po file
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
258 #
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
259 sub dopo {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
260 my $name = shift;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
261 my $line = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
262 my $id;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
263 my $code;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
264 my $suffix;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
265 my %ids;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
266
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
267 open(F, $name) or die "$name: $!\n";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
268 print "parsing \"$name\"\n" if $opt_v;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
269 while (<F>) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
270 $line++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
271 next if /^\s*#/;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
272 chomp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
273 next if /^\s*$/;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
274 next unless /^msgid\s*"([^"]+)"$/;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
275 $id = $1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
276 next unless $id =~
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
277 /^(.*)\.(type|severity|description|response|impact|action)$/;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
278 $code = $1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
279 $suffix = $2;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
280 die "$name:$line: no dict entry for code \"$code\"\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
281 unless defined($code2val{$code});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
282 $ids{$id} = $line;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
283 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
284 close(F);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
285
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
286 # above checks while reading in file ensured that node code was
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
287 # mentioned in .po file that didn't exist in .dict file. now
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
288 # check the other direction: make sure the full set of entries
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
289 # exist for each code in the .dict file
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
290 foreach $code (sort keys %code2val) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
291 die "$name: missing entry for \"$code.type\"\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
292 unless defined($ids{"$code.type"});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
293 die "$name: missing entry for \"$code.severity\"\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
294 unless defined($ids{"$code.severity"});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
295 die "$name: missing entry for \"$code.description\"\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
296 unless defined($ids{"$code.description"});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
297 die "$name: missing entry for \"$code.response\"\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
298 unless defined($ids{"$code.response"});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
299 die "$name: missing entry for \"$code.impact\"\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
300 unless defined($ids{"$code.impact"});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
301 die "$name: missing entry for \"$code.action\"\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
302 unless defined($ids{"$code.action"});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
303 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
304 }