1# LOGLEVEL.RC
2#
3# New File Created 9/13/04 -GE
4# Last updated 2/17/2011
5#
6# Synopsis:
7# Expecting input values set for:
8#
9#  SBLOG="[Shorthand Logflags]-[Log message]"
10#
11# or
12#
13#  SBLOGFLAGS="[Verbose Logflags]"
14#  SBLOG="[Log message]"
15#
16# Defaults to sending the plain log message to the log if the logflags
17# are missing. So either the old style or new style will work.
18#
19# Shorthand logflags will take precedence over the
20# Verbose logflags if both are present.
21#
22## Author's notes: to be removed from here and moved to docs/loglevel.txt
23##  Before final release to beta testing.
24##
25## Todo: add support for file entry/exit flags [EX]
26##
27## For now split the SBLOG messages into old style/new style.
28## Old style will be depriciated later.
29## see docs/loglevels.txt for instructions
30##
31## New files used by this set of procmail recipes:
32##  functions/initloglevel.rc, functions/loghandler.rc
33##  functions/loglevel.rc functions/logfile.rc
34##
35## New Internal variables used by this set of procmail recipes
36## SBLOGFLAGS, SBLOGSTYLE, SBLOGNUMBER, SBLOGTYPE, SBLOGTYPETEXT, SBLOG, SBMESSAGEID
37##
38## Existing Internal Variables used by this set of procmail recipes
39## SBDIR, SBHEADERS, ECHO, DATE, HOST, TEST, FORMAIL, LOGFILE
40##
41## User settable variables used by this set of procmail recipes
42## SBHEADERS, SBLOGFILE, SBLOGLEVEL, SBDIR, ECHO, TEST, FORMAIL, LOGFILE
43##
44##
45## "SBLOGSTYLE=(ALWAYS|BRIEF|COMPLETE|LOG)" match vs SBHEADERS set by user.
46## "Shorthand   A      B     C        L   "
47## "Verbose     ALWAYS BRIEF COMPLETE LOG "
48##
49## "SBLOGNUMBER=[0-9]" match vs SBLOGLEVEL set by user.
50##
51## "SBLOGTYPE=(RULE|STOP|PASS|NOTE|CLASS|SCORE|PATTERN|LOG)" how to output the message. As an X-SBRule:, X-SBNote:, ... etc
52## "Shorthand  R    S    P    N    C       O   T       L   "
53## "Verbose    RULE STOP PASS NOTE CLASS SCORE PATTERN LOG "
54##
55## Note: the LOG is optional and default if not specified.
56
57:0
58* SBLOGLEVELTEST ?? yes
59* SBLOGLEVEL ?? ^9$
60{
61 LOG="Entering file: loglevel.rc
62 SBLOGFLAGS=\"${SBLOGFLAGS}\"
63 SBLOG=\"${SBLOG}\"
64"
65}
66
67# Force verbose SBLOGFLAGS into shorthand form
68:0
69* ! SBLOG ?? ^^^^
70* ! SBLOGFLAGS ?? ^^^^
71* SBLOGFLAGS ?? ^[ ]*(ALWAYS|BRIEF|DEFAULT|COMPLETE|LOG)[ ]*[0-9]([ ]*(RULE|STOP|PASS|NOTE|CLASS|SCORE|PATTERN|LOG)[ ]*)?$
72* ! SBLOG ?? ^[ABDCL][0-9][RSPNCOTL]?-.+$
73{
74 :0
75 * SBLOGLEVELTEST ?? yes
76 * SBLOGLEVEL ?? ^9$
77 {
78  LOG="function 1
79"
80 }
81
82 :0
83 * SBLOGFLAGS ?? ^[ ]*\/(ALWAYS|BRIEF|DEFAULT|COMPLETE|LOG)
84 {
85  :0
86  * MATCH ?? ^ALWAYS$
87  { SBLOGTEMP="A" }
88
89  :0
90  * MATCH ?? ^BRIEF$
91  { SBLOGTEMP="B" }
92
93  :0
94  * MATCH ?? ^DEFAULT$
95  { SBLOGTEMP="D" }
96
97  :0
98  * MATCH ?? ^COMPLETE$
99  { SBLOGTEMP="C" }
100
101  :0
102  * MATCH ?? ^LOG$
103  { SBLOGTEMP="L" }
104 }
105
106 :0
107 * SBLOGFLAGS ?? ^.*\/[0-9]
108 {
109   SBLOGTEMP="${SBLOGTEMP}${MATCH}"
110 }
111
112 :0
113 * SBLOGFLAGS ?? ^[ ]*(ALWAYS|BRIEF|DEFAULT|COMPLETE|LOG)[ ]*[0-9][ ]*\/(RULE|STOP|PASS|NOTE|CLASS|SCORE)
114 {
115  :0
116  * MATCH ?? ^RULE$
117  { SBLOGTEMP="${SBLOGTEMP}R" }
118
119  :0
120  * MATCH ?? ^STOP$
121  { SBLOGTEMP="${SBLOGTEMP}S" }
122
123  :0
124  * MATCH ?? ^PASS$
125  { SBLOGTEMP="${SBLOGTEMP}P" }
126
127  :0
128  * MATCH ?? ^NOTE$
129  { SBLOGTEMP="${SBLOGTEMP}N" }
130
131  :0
132  * MATCH ?? ^CLASS$
133  { SBLOGTEMP="${SBLOGTEMP}C" }
134
135  :0
136  * MATCH ?? ^SCORE$
137  { SBLOGTEMP="${SBLOGTEMP}O" }
138
139  :0
140  * MATCH ?? ^PATTERN$
141  { SBLOGTEMP="${SBLOGTEMP}T" }
142
143  :0
144  * MATCH ?? ^LOG$
145  { SBLOGTEMP="$(SBLOGTEMP)L" }
146 }
147
148 :0 E
149 { SBLOGTEMP="${SBLOGTEMP}L" }
150
151# re-write SBLOG to shorthand form.
152 SBLOG="${SBLOGTEMP}-${SBLOG}"
153}
154
155SBLOGFLAGS=""
156
157# Get the shorthand SBLOGFLAGS from SBLOG then
158# parse SBLOGSTYLE, SBLOGNUMBER, SBLOGTYPE from SBLOGFLAGS
159# and the log message from SBLOG back into SBLOG without the flags
160#
161:0
162* ! SBLOG ?? ^^^^
163* SBLOGFLAGS ?? ^^^^
164* SBLOG ?? ^[ABDCL][0-9][RSPNCOTL]?-.+$
165{
166 :0
167 * SBLOGLEVELTEST ?? yes
168 * SBLOGLEVEL ?? ^9$
169 {
170  LOG="function 2
171"
172 }
173
174 :0
175 * SBLOG ?? ^\/[ABDCL][0-9][RSPNCOTL]?-
176 {
177  SBLOGFLAGS=${MATCH}
178  :0
179  * SBLOGFLAGS ?? ^L[0-9]-$
180  * SBLOGFLAGS ?? ^\/L[0-9]
181  {
182   SBLOGFLAGS="${MATCH}L-"
183  }
184 }
185
186 :0
187 * SBLOGLEVELTEST ?? yes
188 * SBLOGLEVEL ?? ^9$
189 {
190  LOG="Debug: SBLOGFLAGS=$SBLOGFLAGS
191"
192 }
193
194# get SBLOGSTYLE from SBLOGFLAGS
195 :0
196 * SBLOGFLAGS ?? ^\/[ABDCL]
197 { SBLOGSTYLE=${MATCH} }
198
199# get SBLOGNUMBER from SBLOGFLAGS
200 :0
201 * SBLOGFLAGS ?? ^[ABDCL]\/[0-9]
202 { SBLOGNUMBER=${MATCH} }
203
204# get SBLOGTYPE from SBLOGFLAGS
205 :0
206 * SBLOGFLAGS ?? ^[ABDCL][0-9]\/[RSPNCOTL]
207 { SBLOGTYPE=${MATCH} }
208
209# get SBLOG text from SBLOG
210 :0
211 * SBLOG ?? ^[ABDCL][0-9][RSPNCOTL]?-\/.*
212 {
213  SBLOG=${MATCH}
214 }
215}
216
217# Sanity checks
218:0
219* SBLOGSTYLE ?? ^[ABDCL]$
220* SBLOGNUMBER ?? ^[0-9]$
221* SBLOGTYPE ?? ^[RSPNCOTL]$
222* SBLOGFLAGS ?? ^[ABDCL][0-9][RSPNCOTL]?-$
223* SBLOGLEVEL ?? ^[0-9]$
224* ! SBLOG ?? ^[ABDCL][0-9][RSPNCOTL]?-
225* ! SBLOG ?? ^^^^
226{
227 :0
228 * SBLOGLEVELTEST ?? yes
229 * SBLOGLEVEL ?? ^9$
230 {
231  LOG="function 3
232"
233 }
234 :0
235 * SBLOGTYPE ?? ^R$
236 { SBLOGTYPETEXT="SBRule: " }
237
238 :0
239 * SBLOGTYPE ?? ^S$
240 { SBLOGTYPETEXT="SBStop: " }
241
242 :0
243 * SBLOGTYPE ?? ^P$
244 { SBLOGTYPETEXT="SBPass: " }
245
246 :0
247 * SBLOGTYPE ?? ^N$
248 { SBLOGTYPETEXT="SBNote: " }
249
250 :0
251 * SBLOGTYPE ?? ^C$
252 { SBLOGTYPETEXT="SBClass: " }
253
254 :0
255 * SBLOGTYPE ?? ^O$
256 { SBLOGTYPETEXT="SBScore: " }
257
258 :0
259 * SBLOGTYPE ?? ^T$
260 { SBLOGTYPETEXT="SBPattern: " }
261
262 :0
263 * SBLOGTYPE ?? ^L$
264 { SBLOGTYPETEXT="" }
265
266 :0
267 * SBLOGTYPE ?? ^[RSPNCOTL]$
268 {
269  :0
270  * SBLOGLEVELTEST ?? yes
271  * SBLOGLEVEL ?? ^9$
272  {
273   LOG="----
274SBLOGLEVEL=$SBLOGLEVEL
275SBHEADERS=$SBHEADERS
276SBLOGTYPE=$SBLOGTYPE
277SBLOGSTYLE=$SBLOGSTYLE
278Email header added
279"
280  }
281  :0 f
282  * SBLOGSTYLE ?? ^C$
283  * SBHEADERS ?? ^COMPLETE$
284  | ${FORMAIL} -A"X-${SBLOGTYPETEXT}${SBLOG}"
285
286  :0 f
287  * SBLOGSTYLE ?? ^D$
288  * SBHEADERS ?? ^DEFAULT$
289  | ${FORMAIL} -A"X-${SBLOGTYPETEXT}${SBLOG}"
290
291  :0 f
292  * SBLOGSTYLE ?? ^B$
293  * SBHEADERS ?? ^BRIEF$
294  | ${FORMAIL} -A"X-${SBLOGTYPETEXT}${SBLOG}"
295
296  :0 f
297  * SBLOGSTYLE ?? ^A$
298  * SBHEADERS ?? ^(BRIEF|COMPLETE)$
299  | ${FORMAIL} -A"X-${SBLOGTYPETEXT}${SBLOG}"
300 }
301
302 :0
303 * 1^0
304 * SBLOGSTYLE ?? ^[ABDCL]$
305 * SBLOGTYPE ?? ^[RSPNCOTL]$
306 * SBLOGLEVEL ?? ^[1-9]$
307 * SBLOGNUMBER ?? ^[1-9]$
308 * $ ${SBLOGLEVEL}^0
309 * $ -${SBLOGNUMBER}^0
310 {
311  :0
312  * SBLOGLEVELTEST ?? ^yes$
313  * SBLOGLEVEL ?? ^9$
314  {
315   LOG="
316SBLOGLEVEL=$SBLOGLEVEL
317SBHEADERS=$SBHEADERS
318SBLOGTYPE=$SBLOGTYPE
319SBLOGSTYLE=$SBLOGSTYLE
320SBLOGLEVEL=$SBLOGLEVEL
321SBLOGNUMBER=$SBLOGNUMBER
322Log entry filed:
323"
324  }
325  SBLOG="${SBLOGTYPETEXT}${SBLOG}"
326  INCLUDERC=${SBDIR}/functions/loghandler.rc
327 }
328}
329
330# Legacy support. May be deprecated. -GE
331:0 E
332* SBLOGLEVEL ?? ^[1-9]$
333{
334 :0
335 * SBLOGLEVELTEST ?? yes
336 * SBLOGLEVEL ?? ^9$
337 {
338  LOG="
339SBLOGNUMBER=\"$SBLOGNUMBER\"
340SBLOGLEVEL=\"$SBLOGLEVEL\"
341Freestyle log entry filed:
342"
343 SBLOG="Freestyle: ${SBLOG}"
344 }
345 INCLUDERC=${SBDIR}/functions/loghandler.rc
346}
347# reset these variables.
348SBLOGSTYLE=""
349SBLOGTYPE=""
350SBLOGTYPETEXT=""
351SBLOGTEMP=""
352SBLOGFLAGS=""
353SBLOGNUMBER=""
354SBLOG=""
355
356:0
357* SBLOGLEVELTEST ?? yes
358* SBLOGLEVEL ?? ^9$
359{
360 LOG="Leaving file: loglevel.rc
361"
362}
363