auditxml revision 5114d1ad03211a84d5722382609b1c7f8552e216
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# CDDL HEADER START
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# The contents of this file are subject to the terms of the
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# Common Development and Distribution License (the "License").
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek# You may not use this file except in compliance with the License.
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# or http://www.opensolaris.org/os/licensing.
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# See the License for the specific language governing permissions
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# and limitations under the License.
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# When distributing Covered Code, include this CDDL HEADER in each
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# If applicable, add the following below this CDDL HEADER, with the
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# fields enclosed by brackets "[]" replaced with your own identifying
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# information: Portions Copyright [yyyy] [name of copyright owner]
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# CDDL HEADER END
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek# Use is subject to license terms.
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek# ident "%Z%%M% %I% %E% SMI"
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# auditxml [-d] <xml input file>
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering# auditxml takes the audit record description (.xml file) and
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek# generates the files needed for the C audit api.
143bfdaf0b890fa7acadf02d1eafacaef1b696bdHolger Hans Peter Freytherour $debug = 0; # normal use is to set via the file being parsed.
143bfdaf0b890fa7acadf02d1eafacaef1b696bdHolger Hans Peter Freyther # <debug set="on"/> or <debug set="off"/> or <debug/>
143bfdaf0b890fa7acadf02d1eafacaef1b696bdHolger Hans Peter Freyther # if the set attribute is omitted, debug state is toggled
143bfdaf0b890fa7acadf02d1eafacaef1b696bdHolger Hans Peter Freyther # Override with appDebug, but toggle won't do what you
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmekmy $appDebug = 0; # used after return from "new auditxml";
7fd1b19bc9e9f5574f2877936b8ac267c7706947Harald HoyerDO NOT EDIT. This file is auto generated by the Solaris Audit
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-SzmekSee http://opensolaris.org/os/project/audit/
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek# trim leading/trailing newlines
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmekmy $prog = $0; $prog =~ s|.*/||g;
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmekmy $usage = "usage: $prog [-d] file.xml\n";
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek# where everything comes from and where it goes:
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmekmy $xlateFile = "$bsmBuildPath/adt_xlate.c";
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmekmy $headerFile = "$bsmBuildPath/adt_event_N.h";
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmekmy $doc = new auditxml ($ARGV[0]); # input XML file
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmekwhile ($event = $doc->getNextEvent()) {
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek my $eventHeader = $event->getHeader();
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek $externalIdNo{$eventId} = $idNo;
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek addHeader($eventHeader) if defined ($eventHeader);
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek if ($super = $event->getSuperClass()) {
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek $eventType = $event->getType();
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek generateAPIFile($event, $eventId, $eventType, $eventHeader, $idNo)
143bfdaf0b890fa7acadf02d1eafacaef1b696bdHolger Hans Peter Freyther generateTableC($event, $eventId, $eventType, $eventHeader, $omit);
143bfdaf0b890fa7acadf02d1eafacaef1b696bdHolger Hans Peter Freytherwhile ($textList = $doc->getNextMsgId()) {
143bfdaf0b890fa7acadf02d1eafacaef1b696bdHolger Hans Peter Freyther generateMsgLists($textList); # enum -> text mappings
c7332b0844e28d9b70c3c763b929f105c1056fe8Zbigniew Jędrzejewski-SzmekprintAPIFile($headerFile, $doc);
c7332b0844e28d9b70c3c763b929f105c1056fe8Zbigniew Jędrzejewski-Szmek unless (open(Cfile, ">$file")) {
c7332b0844e28d9b70c3c763b929f105c1056fe8Zbigniew Jędrzejewski-Szmek print STDERR "can't open output file ($file): $!\n";
4b8268f843b0da1cfe1995d93a0b1f95faccc454Zbigniew Jędrzejewski-Szmek#include <bsm/libbsm.h>
4b8268f843b0da1cfe1995d93a0b1f95faccc454Zbigniew Jędrzejewski-Szmek#include <adt_xlate.h>
4b8268f843b0da1cfe1995d93a0b1f95faccc454Zbigniew Jędrzejewski-Szmek#include <libintl.h>
c7332b0844e28d9b70c3c763b929f105c1056fe8Zbigniew Jędrzejewski-Szmek print Cfile "#ifndef _PRAUDIT\n";
c7332b0844e28d9b70c3c763b929f105c1056fe8Zbigniew Jędrzejewski-Szmek print Cfile "/* Internal data type definitions */\n\n";
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek print Cfile "static $extDef\n";
d4205751d4643c272059a3728045929dd0e5e800Lennart Poettering print Cfile "\n/* External event structure to internal event structure */\n\n";
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek foreach my $eventId (sort keys %xlateEventTable) {
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek my ($ref1, $eventType, $firstToken, $eventHeader) =
844ec79b3c2f246114ea316ebe1f36044bdb688eZbigniew Jędrzejewski-Szmek my $externalName = $nameTranslation{$eventId};
$entry =~ s/selfReference/$structName/;
my $firstEvent = 1;
$firstEvent = 0;
my @preloads = @{$xlateDefault{$id}};
my $fieldName = shift @preloads;
my $listName;
my @listName;
my $listValue;
my $listLength = $#listValue + 1;
my $ffirst = 1;
$ffirst = 0;
my $ffirst = 1;
$ffirst = 0;
my $file = shift;
my $xmlDoc = shift;
my @Hfile;
my $notice = $genNotice;
my $shortName = uc $listName;
$shortName =~ s/_TEXT//;
my $listValue;
my $j = $#listValue;
my $externalId = $eventId;
$externalId =~ s/AUE_/ADT_/;
my $entry;
$entry =~ s/termid/adt_termid_t/;
$outputState[$header] = 0;
$outputState[$header] = 1;
my $elementName = $eventId;
$elementName =~ s/^AUE_/adt_/;
$elementName =~ s/_t$//;
my $event = shift;
my $eventId = shift;
my $eventType = shift;
my $eventHeader = shift;
my $omit = shift;
my $entryRef;
my @inputOrder;
$firstTokenIndex = $j;
last;
my $sequence = 0;
$enumGroup =~ s/^msg\s*//i;
my $tsol = 0;
my $token;
my $tokenName;
print STDERR
$sequence++;
my $xlateLabelInc = 0;
my $dataType;
my $dataSize;
my $entryType = ${$entryDef{$type}}[0];
my $typeCount = 1;
$type =~ s/\[\]//;
$xlateLabelInc = 1;
@list = @{$xlateDefault{$eventId}};
$xlateDefault{$eventId} = \@list;
my $dataType;
my $entryType = ${$entryDef{$dtype}}[0];
$type =~ s/\[\]//;
$xlateLabelInc = 1;
@list = @{$xlateDefault{$eventId}};
$xlateDefault{$eventId} = \@list;
my $event = shift;
my $eventId = shift;
my $eventType = shift;
my $eventHeader = shift;
my $idNo = shift;
print STDERR
$#id = $#type;
$#type = $#id;
$eventExtra{$eventId} = [$eventHeader, $idNo];
my $textList = shift;
my $entry;
my @entry;
[\@entry, [$header, $start, $public, $deprecated]];
my $header_index = shift;
# $header = 0 is a special case; it is for adt_event.h
# $header > 0 creates adt_event_N.h, where N = $header
my $header;
$HfileName[$header] = $tmp[$#tmp];
my @Hfile = @_;
my $header;