auditxml_jni revision 0bd81b6f8fb7804214192b87b0aa3f03fcf87c45
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User#!/usr/perl5/bin/perl -w
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User#
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# CDDL HEADER START
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User#
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# The contents of this file are subject to the terms of the
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# Common Development and Distribution License (the "License").
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# You may not use this file except in compliance with the License.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User#
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# or http://www.opensolaris.org/os/licensing.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# See the License for the specific language governing permissions
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# and limitations under the License.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User#
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# When distributing Covered Code, include this CDDL HEADER in each
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# If applicable, add the following below this CDDL HEADER, with the
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# fields enclosed by brackets "[]" replaced with your own identifying
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# information: Portions Copyright [yyyy] [name of copyright owner]
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User#
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# CDDL HEADER END
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# Use is subject to license terms.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# auditxml_jni [-d] <xml input file>
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# auditxml takes the audit record description (.xml file) and
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# generates the files needed for the Java
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Useruse auditxml;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Useruse Getopt::Std;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Useruse vars qw($opt_d);
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntuse strict;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Userour $debug = 0; # normal use is to set via the file being parsed.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # <debug set="on"/> or <debug set="off"/> or <debug/>
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # if the set attribute is omitted, debug state is toggled
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # Override with appDebug, but toggle won't do what you
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # want.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy $appDebug = 0; # used after return from "new auditxml";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy $genNotice = "
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserDO NOT EDIT. This file is auto generated by the Solaris Audit
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usersystem from adt.xml.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserSee http://opensolaris.org/os/project/audit/
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# trim leading/trailing newlines
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User$genNotice =~ s/^\n//s;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User$genNotice =~ s/\n$//s;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntmy $prog = $0; $prog =~ s|.*/||g;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Usermy $usage = "usage: $prog [-d] file.xml\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Usergetopts('d');
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User$appDebug = $opt_d;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Usermy $uniLabel = "adr";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy $xlateUniLabelInc = 0;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Userdie $usage if ($#ARGV < 0);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# where everything comes from and where it goes:
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy $templatePath = './';
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy $javaPath = $templatePath;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy $bsmBuildPath = "../libbsm";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Usermy $jniBuildPath = "$javaPath";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Usermy $buildPathJ = "$jniBuildPath/com/sun/audit";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy $buildPathJNI = "$jniBuildPath/common";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy $auditEventJ = "$buildPathJ/AuditEvent.java";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy $jniC = "$buildPathJNI/adt_jni_event.c";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Usermy $mapFile = "$jniBuildPath/common/mapfile-vers";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Usermy $doc = new auditxml ($ARGV[0]); # input XML file
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User$debug = $appDebug;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy %jniEventTable = ();
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy %externalIdNo = ();
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy %msg_list = ();
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Usermy %eventCode = ();
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserreadAuditEventFile("$bsmBuildPath/audit_event.txt");
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Usermy $event;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userwhile ($event = $doc->getNextEvent()) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my $eventId = $event->getId();
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my $idNo = $event->getIdNo();
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $externalIdNo{$eventId} = $idNo;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $super;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $omit = $event->getOmit();
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $eventType = '';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($super = $event->getSuperClass()) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $event = $super;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $eventType = 'instance';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } else {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $eventType = $event->getType();
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # c file table for translation
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User generateTableC($event, $eventId, $eventType, undef, $omit);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User}
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Userwhile (my $textList = $doc->getNextMsgId()) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User generateMsgLists($textList); # enum -> text mappings
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User}
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserprintJavaFiles($jniC, $auditEventJ, $buildPathJ, $mapFile);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userexit 0;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Usersub printJavaFiles {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $jniFile = shift;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $javaFile = shift;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my $subclassPath = shift;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my $mapFile = shift;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # warning: time_t is equated to jlong since there is no
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # way to use sys/types.h in Java code.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # java long is C long long, 64 bits.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # java int is 32 bits.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my %java_jni = ('ADT_DATE' => ['long', 'jlong'],
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User 'ADT_UINT' => ['int', 'jint'],
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User 'ADT_INT' => ['int', 'jint'],
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User 'ADT_INT32' => ['int', 'jint'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_UID' => ['int', 'jint'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_GID' => ['int', 'jint'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_UIDSTAR' => ['int[]', 'jintArray'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_GIDSTAR' => ['int[]', 'jintArray'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_CHAR' => ['String', 'jchar'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_CHARSTAR' => ['String', 'jstring'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_CHAR2STAR' => ['String[]', 'jstring'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_MSG' => ['int', 'jint'],
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User 'ADT_PID' => ['int', 'jint'],
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# ADT_PRIVSTAR omitted -- not implemented and the audit records that
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# use it must be coded to emit no java. We'll cross that bridge
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# when someone in Java land needs to generate a priv token.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_LONG' => ['int', 'jint'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_TERMIDSTAR' => ['String', 'jstring'], # hostname -> termid
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_ULONG' => ['int', 'jint'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_UINT16' => ['int', 'jint'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_UINT32' => ['int', 'jint'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_UINT32STAR' => ['int[]', 'jintArray'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# ADT_UINT32ARRAY omitted; no Java implementation yet
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_UINT64' => ['long', 'jlong'],
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User 'ADT_UINT64STAR' => ['long[]', 'jlongArray']
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User );
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $noMemory = 'gettext("Out of memory")';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # open output files
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User open (Cfile, ">$jniFile") or
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User die "can't open output file ($jniFile): $!\n";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User open (Jfile, ">$javaFile") or
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User die "can't open output file ($javaFile): $!\n";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User open (MapFile, ">$mapFile") or
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User die "can't open output file ($mapFile): $!\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # write headers
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $notice = $genNotice;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $notice =~ s/\n/\n * /gs;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $notice =~ s/\s+\n/\n/gs;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Cfile <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User/*
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User * $notice
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#include "../../libbsm/common/adt_xlate.h"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#include <jni.h>
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#include "../com/sun/audit/AuditSession.h" /* javah output */
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#include "adt_jni.h"
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User#include <stdlib.h>
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User#include <string.h>
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Userstatic char *except_class = "java/lang/Exception";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Jfile <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User/*
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User * $notice
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Userpackage com.sun.audit;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Userpublic class AuditEvent {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User protected AuditSession sh; // associated session object
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User public AuditEvent(AuditSession auSession)
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User throws Error
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User sh = auSession;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User // Manifest values: keep them in sync with generated <bsm/adt_event.h>.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User // It is generated by \$SRC/lib/libbsm/auditxml
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User public static final int ADT_SUCCESS = 0; // generated
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User public static final int ADT_FAILURE = -1; // generated
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User // See the subclasses of AuditEvent for mapping message codes
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User // to events
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $notice_map = $genNotice;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $notice_map =~ s/\n/\n# /gs;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $notice_map =~ s/\s+\n/\n/gs;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print MapFile <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User#
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# $notice_map
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User#
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserSUNWprivate_1.1 {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User global:
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User c2j_pointer;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User j2c_pointer;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User Java_com_sun_audit_AuditSession_bsmAuditOn;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User Java_com_sun_audit_AuditSession_startSession;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User Java_com_sun_audit_AuditSession_endSession;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User Java_com_sun_audit_AuditSession_dupSession;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User Java_com_sun_audit_AuditSession_getSessionId;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User Java_com_sun_audit_AuditSession_exportSessionData;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User Java_com_sun_audit_AuditSession_sessionAttr;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User# One subclass of AuditEvent per audit record...
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # generate java final int classes to line up with string/enums
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User foreach my $listName (sort keys %msg_list) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $shortName = uc $listName;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $shortName =~ s/_TEXT//;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my ($listRef, $headref) = @{$msg_list{$listName}};
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my @listValue = @$listRef;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my ($header, $enumValue, $public, $deprecated) = @$headref;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $listValue;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Jfile "\n\t// adt_$listName" . "\n\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Jfile "\tpublic static final int ADT_$shortName",
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User " = $enumValue;\n" if $enumValue;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User next unless ($#listValue >= 0);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Jfile "\t// Deprecated message list\n" if $deprecated;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User foreach $listValue (@listValue) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my ($id, $text) = split(/\s*::\s*/, $listValue);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Jfile "\t// $text\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Jfile "\tpublic static final int ADT_$shortName";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Jfile "_$id = $enumValue;\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $enumValue++;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # generate event creation and access functions and event
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # generation for both Java and JNI
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # com.sun.audit.AuditEvent_xxx.java
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User foreach my $eventId (sort keys %jniEventTable) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my ($ref1, $eventType, $allowedIds, $header) = @{$jniEventTable{$eventId}};
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $eventCode{$eventId} = -1 if ($eventType eq 'generic');
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my @entries = @$ref1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $entries = $#entries;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $root = $eventId;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $root =~ s/AUE_//;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $javaPutEvent = 'putEvent';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $putMethod = "_$root";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $putMethod =~ s/_/_1/g;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $jniPutEvent = "Java_com_sun_audit_AuditEvent$putMethod" . "_$javaPutEvent";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # the subclass file template isn't used; it may be needed to get
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # the right file header stuff in place. The subclassPath is
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # the directory that contains 'em.
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $validSfile = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User unless (open(Sfile, ">$subclassPath/AuditEvent_$root.java")) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print STDERR "can't open class file AuditEvent_$root.java: $!\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $validSfile = 0;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($eventCode{"AUE_$root"}) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($validSfile) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Sfile <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User/*
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User * $notice
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Userpackage com.sun.audit;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User// audit event: $eventId = $eventCode{"AUE_$root"}
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox Userpublic class AuditEvent_$root extends AuditEvent {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } else {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print STDERR "no event code for $eventId. Is audit_event current?\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $nativeParameterList = '';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $jniParameterList = '';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $specParameterList = '';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $jniStorageList = '';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $needCleanupTarget = 0;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $jniFreeList = '';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $haveStringDef = 0;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $haveCDef = 0;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $haveLengthDef = 0;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $haveStringArrayDef = 0;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $cntTermidDef = 0;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $jniDefine;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $needLocaleDefined = 0;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $jniADTalloc;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if (defined $header && ($header > 0) ) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine = "union union_of_events *event;\n" .
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User "\tadt_session_data_t *session;\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniADTalloc = '(union union_of_events *)adt_alloc_event';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } else {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine = "adt_event_data_t *event;\n" .
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User "\tadt_session_data_t *session;\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniADTalloc = 'adt_alloc_event';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $ref2;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User foreach $ref2 (@entries) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my ($id, $type) = @$ref2;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $jniRoot = $root . $id;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniRoot =~ s/_/_1/g; # escape unicode "_"
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $p_event;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if (defined $header && ($header > 0) ) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $p_event = "event->d$header.adt_$root.$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } else {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $p_event = "event->adt_$root.$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($type eq 'ADT_UINT32STAR') { # int array
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $needLocaleDefined = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniStorageList .= <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User /* $id */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User length = (*env)->GetArrayLength(env, $id);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $p_event =
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (int *)malloc(length * sizeof (int));
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($p_event == NULL) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User locale = I18N_SETUP;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User local_throw(env, except_class,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $noMemory);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (void) setlocale(LC_MESSAGES, locale);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User goto cleanup;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (*env)->GetIntArrayRegion(env, $id, 0, length,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (int *)$p_event);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniFreeList .= "\n\tif ($p_event != NULL)\n" .
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User "\t\tfree($p_event);\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User unless ($haveLengthDef) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $haveLengthDef = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine .= "\tint\t\t\tlength;\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $nativeParameterList .= ",\n\t int[]\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniParameterList .= ",\n jintArray\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $specParameterList .= ", jintArray";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $needCleanupTarget = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } elsif (($type eq 'ADT_UIDSTAR') ||
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User ($type eq 'ADT_GIDSTAR')) { # gid_t array
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $cType = 'uid_t';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $cType = 'gid_t' if ($type eq 'ADT_GIDSTAR');
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $needLocaleDefined = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniStorageList .= <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User /* $id */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User length = (*env)->GetArrayLength(env, $id);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $p_event =
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User ($cType *)malloc(length * sizeof ($cType));
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($p_event == NULL) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User locale = I18N_SETUP;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User local_throw(env, except_class,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $noMemory);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (void) setlocale(LC_MESSAGES, locale);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User goto cleanup;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User (*env)->GetIntArrayRegion(env, $id, 0, length,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User (int *)$p_event);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniFreeList .=
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User "\n\tif ($p_event != NULL)\n" .
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User "\t\tfree($p_event);\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User unless ($haveLengthDef) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $haveLengthDef = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine .= "\tint\t\t\tlength;\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $nativeParameterList .= ",\n\t int[]\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniParameterList .= ",\n jintArray\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $specParameterList .= ", jintArray";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $needCleanupTarget = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } elsif ($type eq 'ADT_UINT64STAR') { # long array
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $needLocaleDefined = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniStorageList .= <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User /* $id */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User length = (*env)->GetArrayLength(env, $id);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $p_event =
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (long *)malloc(length * sizeof (long long));
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($p_event == NULL) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User locale = I18N_SETUP;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User local_throw(env, except_class,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $noMemory);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (void) setlocale(LC_MESSAGES, locale);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User goto cleanup;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (*env)->GetLongArrayRegion(env, $id, 0, length,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $p_event);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniFreeList .= "\n\tif ($p_event != NULL)\n" .
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User "\t\tfree($p_event);\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User unless ($haveLengthDef) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $haveLengthDef = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine .= "\tint\t\t\tlength;\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $nativeParameterList .= ",\n\t long[]\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniParameterList .= ",\n jlongArray\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $specParameterList .= ", jlongArray";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $needCleanupTarget = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } elsif ($type eq 'ADT_CHAR') { # string in Java, char in C
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniStorageList .= <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User /* $id */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User c = (char *)(*env)->GetStringUTFChars(env, $id, NULL);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if (c == NULL)
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User goto cleanup; /* exception thrown */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $p_event = *c;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (*env)->ReleaseStringUTFChars(env, $id, c);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User # no need to free anything
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User unless ($haveCDef) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $haveCDef = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine .= "\tchar\t\t\t*c\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $nativeParameterList .= ",\n\t String\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniParameterList .= ",\n jstring\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $specParameterList .= ", jstring";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } elsif ($type eq 'ADT_CHARSTAR') {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $needLocaleDefined = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniStorageList .= <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User /* $id */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($id != NULL) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User string = (char *)(*env)->GetStringUTFChars(
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User env, $id, NULL);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if (string == NULL)
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User goto cleanup; /* exception thrown */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $p_event = strdup(string);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (*env)->ReleaseStringUTFChars(env, $id, string);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($p_event == NULL) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User locale = I18N_SETUP;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User local_throw(env, except_class,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $noMemory);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (void) setlocale(LC_MESSAGES, locale);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User goto cleanup;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniFreeList .= "\n\tif ($p_event != NULL)\n" .
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User "\t\tfree($p_event);\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User unless ($haveStringDef) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $haveStringDef = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine .= "\tchar\t\t\t*string;\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $nativeParameterList .= ",\n\t String\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniParameterList .= ",\n jstring\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $specParameterList .= ", jstring";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $needCleanupTarget = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } elsif ($type eq 'ADT_CHAR2STAR') { # array of string
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $needLocaleDefined = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniStorageList .= <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User /* $id */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User length = (*env)->GetArrayLength(env, $id);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $p_event = (char **)malloc(length
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User * sizeof (char *));
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($p_event == NULL) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User locale = I18N_SETUP;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User local_throw(env, except_class,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $noMemory);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (void) setlocale(LC_MESSAGES, locale);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User goto cleanup;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User p = $p_event;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User for (i = 0; i < length; i++) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User jString = (*env)->GetObjectArrayElement(env, $id, i);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User string = (char *)(*env)->GetStringUTFChars(
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User env, jString, NULL);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if (string == NULL)
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User goto cleanup; /* exception thrown */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User *p = strdup(string);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (*env)->ReleaseStringUTFChars(env, jString, string);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if (*p == NULL) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User locale = I18N_SETUP;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User local_throw(env, except_class,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $noMemory);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (void) setlocale(LC_MESSAGES, locale);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User while (p >= $p_event)
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User free(*p--);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User goto cleanup;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User p++;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniFreeList .=
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User "\n\tif ($p_event != NULL)\n" .
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User "\t\tfree($p_event);\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User unless ($haveStringArrayDef) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User unless ($haveStringDef) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $haveStringDef = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine .= <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User char *string;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User unless ($haveLengthDef) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $haveLengthDef = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine .= <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User int length;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $haveStringArrayDef = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine .= <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User int i;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User char **p;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User jstring jString;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $nativeParameterList .= ",\n\t String[]\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniParameterList .= ",\n jstring\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $specParameterList .= ", jstring";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $needCleanupTarget = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } elsif ($type eq 'ADT_TERMIDSTAR') {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $needLocaleDefined = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniStorageList .= <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User /* $id */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User hostname$cntTermidDef = (char *)(*env)->GetStringUTFChars(env, $id, NULL);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if (adt_load_hostname((const char *)hostname$cntTermidDef, &termid$cntTermidDef)) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User local_throw(env, except_class,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User gettext("hostname lookup failed"));
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $p_event = termid$cntTermidDef;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (*env)->ReleaseStringUTFChars(env, $id, hostname$cntTermidDef);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $jniFreeList .= "\n\tif (hostname$cntTermidDef != NULL)\n" .
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User "\t\tfree(hostname$cntTermidDef);\n";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $jniFreeList .= "\n\tif (termid$cntTermidDef != NULL)\n" .
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User "\t\tfree(termid$cntTermidDef);\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine .= "\tchar\t\t\t*hostname$cntTermidDef;\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine .= "\tadt_termid_t\t\t*termid$cntTermidDef;\n"; #djdj
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $cntTermidDef++;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my ($nativeParameter, $jniParameter) = @{$java_jni{$type}};
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $nativeParameterList .= ",\n\t $nativeParameter\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniParameterList .= ",\n $jniParameter\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $specParameterList .= ", $jniParameter";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $needCleanupTarget = 1;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } else { # all others are primitive types
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniStorageList .= "\n\t$p_event = $id;\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my ($nativeParameter, $jniParameter) = @{$java_jni{$type}};
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $nativeParameter = "$nativeParameter\t"
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if length $nativeParameter < 4; # why?
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $nativeParameterList .= ",\n\t $nativeParameter\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniParameterList .= ",\n $jniParameter\t$id";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $specParameterList .= ", $jniParameter";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($needLocaleDefined) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine .= <<EOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User char *locale;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $genericOverride = '';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $idParameter = $eventId;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $idParameter =~ s/AUE_/ADT_/;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($eventType eq 'generic') {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $genericOverride = ', jint eventId';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $idParameter = 'eventId';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniFreeList = "\tcleanup:\n" . $jniFreeList if $needCleanupTarget;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Cfile qq{/* ARGSUSED */
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserJNIEXPORT void JNICALL
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User$jniPutEvent(
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User JNIEnv *env,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User jobject self,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User jbyteArray jsession$genericOverride,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User jint status,
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User jint ret_val$jniParameterList)
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User{
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniDefine
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (void) j2c_pointer(env, jsession, (char **)&session);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User event = $jniADTalloc(session, $idParameter);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User$jniStorageList
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User (void) adt_put_event((adt_event_data_t *)event, status, ret_val);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User$jniFreeList
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User adt_free_event((adt_event_data_t *)event);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User}
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User};
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print MapFile qq{
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $jniPutEvent; };
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $overrideParameter = '';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($eventType eq 'generic') {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $overrideParameter = 'int eventId,';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my @allowed = @$allowedIds;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if (@allowed) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $i;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($validSfile) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Sfile "\t// Allowed values for eventId in putEvent:\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User for ($i = 0; $i <= $#allowed; $i++) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $idNo = $externalIdNo{$allowed[$i]};
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $allowed[$i] =~ s/AUE_/ADT_/;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Sfile "\tstatic final int $allowed[$i] = ",
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User "$idNo;\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Sfile "\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } else {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print STDERR "Generic event with no allowed instances: $eventId\n";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($validSfile) {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User print Sfile <<EOF;
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User private native void $javaPutEvent(byte[]session, $overrideParameter
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User int status, int ret_val$nativeParameterList);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User public AuditEvent_$root(AuditSession session)
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User throws Exception
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User super(session);
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox UserEOF
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $javaParameterList = '';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User foreach $ref2 (@entries) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my ($id, $type, $format, $jComment, $required) = @$ref2;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # generate java native method prototypes
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # and the corresponding C method implementation
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my $javaMethodName = "$id";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my $javaStorageName = $javaMethodName . '_val';
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my $jniMethodName = $root . $id;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my $storage;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my $enumUsage = '';
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my $jParam = @{$java_jni{$type}}[0];
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User my $comment = '';
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($required) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if ($format ne 'NULL') {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $comment = "\t// (required) formatted: $format";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } else {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $comment = "\t// required";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } else {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if ($format ne 'NULL') {
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $comment = "\t// (optional) formatted: $format";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } else {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $comment = "\t// optional";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User }
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User if (($type eq 'ADT_UINT32STAR') ||
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User ($type eq 'ADT_UIDSTAR') ||
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User ($type eq 'ADT_GIDSTAR')) { # int array
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $storage = "int[] $javaStorageName" . ($required ?
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt ' = {}' : '');
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $javaParameterList .= ",\n\t\t\t $javaStorageName";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } elsif ($type eq 'ADT_UINT64STAR') { # long array
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User $storage = "long[] $javaStorageName" . ($required ?
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User ' = {}' : '');
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $javaParameterList .= ",\n\t\t\t $javaStorageName";
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User } elsif (($type eq 'ADT_CHARSTAR') ||
9a5087bf58f651bfff841192aba5afd06760d6ceTinderbox User ($type eq 'ADT_CHAR')) { # string
$storage = "String $javaStorageName" . ($required ?
' = ""' : '');
$javaParameterList .= ",\n\t\t\t $javaStorageName";
} elsif ($type eq 'ADT_CHAR2STAR') { # array of string
$storage = "String[] $javaStorageName" . ($required ?
' = {}' : '');
$javaParameterList .= ",\n\t\t\t $javaStorageName";
} elsif ($type eq 'ADT_TERMIDSTAR') { # array of string
$storage = "String $javaStorageName" . ($required ?
' = ""' : '');
$javaParameterList .= ",\n\t\t\t $javaStorageName";
} else { # all others are primitive types
$storage = "$jParam $javaStorageName = 0";
$javaParameterList .= ",\n\t\t\t $javaStorageName";
$enumUsage = "\n\t// See $jComment in AuditEvent.java for valid values"
if $jComment;
}
print Sfile <<EOF;
$enumUsage
private $storage;$comment
public void $javaMethodName($jParam setTo)
{
$javaStorageName = setTo;
}
EOF
} # end foreach (@entries)
if ($eventType eq 'generic') {
print Sfile <<EOF;
public void putEvent(int status, int ret_val, int eventId)
{
byte[] session = super.sh.getSession();
if ((super.sh.AuditIsOn) && (super.sh.ValidSession))
$javaPutEvent(session, eventId,
status, ret_val$javaParameterList);
}
}
EOF
} else {
print Sfile <<EOF;
public void putEvent(int status, int ret_val)
{
byte[] session = super.sh.getSession();
if ((super.sh.AuditIsOn) && (super.sh.ValidSession))
$javaPutEvent(session, status, ret_val$javaParameterList);
}
}
EOF
}
close Sfile;
} # end if ($validSfile);
}
# write trailers
print Jfile <<EOF;
}
EOF
print MapFile <<EOF;
local:
*;
};
EOF
close Cfile;
close Jfile;
close MapFile;
}
sub generateTableC {
my $event = shift;
my $eventId = shift;
my $eventType = shift;
my $eventHeader = shift;
my $omit = shift;
my %tokenType = (
'acl' => 'AUT_ACL',
'arbitrary' => 'AUT_ARBITRARY',
'arg' => 'AUT_ARG',
'attr' => 'AUT_ATTR',
'command' => 'AUT_CMD',
'command_1' => 'ADT_CMD_ALT', # dummy token id
'date' => 'AUT_TEXT',
'exec_args' => 'AUT_EXEC_ARGS',
'exec_env' => 'AUT_EXEC_ENV',
'exit' => 'AUT_EXIT',
'file' => 'AUT_FILE',
'fmri' => 'AUT_FMRI',
'groups' => 'AUT_GROUPS',
# 'header' => 'AUT_HEADER', # not used
'in_addr' => 'AUT_IN_ADDR',
'tid' => 'AUT_TID',
'ipc' => 'AUT_IPC',
'ipc_perm' => 'AUT_IPC_PERM',
'iport' => 'AUT_IPORT',
'label' => 'AUT_LABEL',
'newgroups' => 'AUT_NEWGROUPS',
'opaque' => 'AUT_OPAQUE',
'path' => 'AUT_PATH',
'path_list' => '-AUT_PATH', # dummy token id
'process' => 'AUT_PROCESS',
'priv_effective' => 'ADT_AUT_PRIV_E', # dummy token id
'priv_limit' => 'ADT_AUT_PRIV_L', # dummy token id
'priv_inherit' => 'ADT_AUT_PRIV_I', # dummy token id
'return' => 'AUT_RETURN',
'seq' => 'AUT_SEQ',
'socket' => 'AUT_SOCKET',
'socket-inet' => 'AUT_SOCKET_INET',
'subject' => 'AUT_SUBJECT',
'text' => 'AUT_TEXT',
# 'trailer' => 'AUT_TRAILER', # not used
'uauth' => 'AUT_UAUTH',
'zonename' => 'AUT_ZONENAME'
);
my @xlateEntryList = ();
my @jniEntryList = ();
my $external = $event->getExternal();
my $internal = $event->getInternal();
unless ($external) {
print STDERR "No external object captured for event $eventId\n";
return;
}
unless ($internal) {
print STDERR "No internal object captured for event $eventId\n";
return;
}
my @entryRef = $internal->getEntries();
my $entryRef;
my @tokenOrder = ();
my $firstTokenIndex = 0; # djdj not used yet, djdj BUG!
# needs to be used by translate table
if ($internal->isReorder()) { # prescan the entry list to get the token order
my @inputOrder;
foreach $entryRef (@entryRef) {
my ($intEntry, $entry) = @$entryRef;
push (@inputOrder, $intEntry->getAttr('order'));
}
my $i; # walk down the inputOrder list once
my $k = 1; # discover next in line
my $l = 0; # who should point to next in line
for ($i = 0; $i <= $#inputOrder; $i++) {
my $j;
for ($j = 0; $j <= $#inputOrder; $j++) {
if ($k == $inputOrder[$j]) {
if ($k == 1) {
$firstTokenIndex = $j;
} else {
$tokenOrder[$l] = "&(selfReference[$j])";
}
$l = $j;
last;
}
}
$k++;
}
$tokenOrder[$l] = 'NULL';
}
else { # default order -- input order same as output
my $i;
my $j;
for ($i = 0; $i < $#entryRef; $i++) {
my $j = $i + 1;
$tokenOrder[$i] = "&(selfReference[$j])";
}
$tokenOrder[$#entryRef] = 'NULL';
}
my $sequence = 0;
foreach $entryRef (@entryRef) {
my ($intEntry, $entry) = @$entryRef;
my $entryId = $entry->getAttr('id');
my ($extEntry, $unusedEntry, $tokenId) =
$external->getEntry($entryId);
my $opt = $extEntry->getAttr('opt');
if ($opt eq 'none') {
if (defined ($doc->getToken($tokenId))) {
if (defined ($tokenType{$tokenId})) {
$tokenId = $tokenType{$tokenId};
}
else {
print STDERR "token id $tokenId not implemented\n";
}
}
else {
print STDERR "token = $tokenId is undefined\n";
$tokenId = 'error';
}
my ($xlate, $jni) =
formatTableEntry ('', $tokenId, $eventId, '', 0, 0, $tokenOrder[$sequence],
'NULL', '');
push (@xlateEntryList, $xlate);
push (@jniEntryList, @$jni);
}
else {
my $dataType = $extEntry->getAttr('type');
$dataType =~ s/\s+//g; # remove blanks (char * => char*)
my $enumGroup = '';
if ($dataType =~ /^msg/i) {
$enumGroup = $dataType;
$enumGroup =~ s/^msg\s*//i;
$enumGroup = 'adt_' . $enumGroup;
}
my $required = ($opt eq 'required') ? 1 : 0;
my $tsol = 0;
my $tokenId = $intEntry->getAttr('token');
my $token;
my $tokenName;
my $tokenFormat = $intEntry->getAttr('format');
if (defined ($tokenFormat)) {
$tokenFormat = "\"$tokenFormat\"";
}
else {
$tokenFormat = 'NULL';
}
if (defined ($token = $doc->getToken($tokenId))) {
$tsol = (lc $token->getUsage() eq 'tsol') ? 1 : 0;
if (defined ($tokenType{$tokenId})) {
$tokenName = $tokenType{$tokenId};
}
else {
print STDERR "token id $tokenId not implemented\n";
}
}
else {
print STDERR
"$tokenId is an unimplemented token ($entryId in $eventId)\n";
$tokenName = 'AUT_TEXT';
}
my ($xlate, $jni) =
formatTableEntry($entryId, $tokenName, $eventId, $dataType, $required,
$tsol, $tokenOrder[$sequence], $tokenFormat,
$enumGroup, (uc $omit eq 'JNI'));
push (@xlateEntryList, $xlate);
push (@jniEntryList, @$jni);
}
$sequence++;
}
$jniEventTable{$eventId} = [\@jniEntryList, $eventType,
$external->getAllowedTypes(), $eventHeader]
unless (uc $omit eq 'JNI') || ($omit eq 'always');
}
sub formatTableEntry {
my ($id, $token, $eventId, $type, $required, $tsol, $sequence, $format, $enumGroup,
$omitJNI) = @_;
# does this map belong in the xml source? (at least the defaults?)
# fill in the default value only if it is other than zero.
# base type adt name, default value
my %entryDef = ( 'au_asid_t' => ['ADT_UINT32', ''],
'uint_t' => ['ADT_UINT32', ''],
'int' => ['ADT_INT', ''],
'int32_t' => ['ADT_INT32', ''],
'uid_t' => ['ADT_UID', 'AU_NOAUDITID'],
'gid_t' => ['ADT_GID', 'AU_NOAUDITID'],
'uid_t*' => ['ADT_UIDSTAR', ''],
'gid_t*' => ['ADT_GIDSTAR', ''],
'char' => ['ADT_CHAR', ''],
'char*' => ['ADT_CHARSTAR', ''],
'char**' => ['ADT_CHAR2STAR', ''],
'long' => ['ADT_LONG', ''],
'pid_t' => ['ADT_PID', ''],
'priv_set_t*' => ['ADT_PRIVSTAR', ''],
'ulong_t' => ['ADT_ULONG', ''],
'uint16_t', => ['ADT_UINT16', ''],
'uint32_t' => ['ADT_UINT32', ''],
'uint32_t*' => ['ADT_UINT32STAR', ''],
'uint32_t[]' => ['ADT_UINT32ARRAY', ''],
'uint64_t' => ['ADT_UINT64', ''],
'uint64_t*' => ['ADT_UINT64STAR', ''],
'm_label_t*' => ['ADT_MLABELSTAR', ''],
);
my $xlateLabel = $uniLabel.$xlateUniLabelInc;
my $xlateLabelInc = 0;
my $xlateLine = '';
my @jniLine = ();
# the list handling should be a simple loop with a loop of one
# falling out naturally.
unless ($type =~ /,/) { # if list, then generate sequence of entries
my $dataType;
my $dataSize;
my $xlateLabelRef = '';
my $arraySize = '';
$arraySize = $1 if ($type =~ s/\[(\d+)\]/[]/);
my $entryType = ${$entryDef{$type}}[0];
my @xlateType = (); # for adt_xlate.c
my $typeCount = 1;
if ($entryType) {
$dataType = $entryType;
$type =~ s/([^*]+)\s*(\*+)/$1 $2/;
$type =~ s/\[\]//;
$dataSize = "sizeof ($type)";
if ($arraySize) {
$dataSize = "$arraySize * " . $dataSize;
}
$xlateLine = "{{$dataType, $dataSize}}";
push (@jniLine, [$id, $dataType, $format, $enumGroup, $required]);
} elsif ($type eq '') {
$xlateLabelRef = 'NULL';
} elsif ($type =~ /^msg/i) {
$type =~ s/^msg//i;
$dataType = 'ADT_MSG';
my $dataEnum = 'ADT_LIST_' . uc $type;
$xlateLine = "{{$dataType, $dataEnum}}";
push (@jniLine, [$id, $dataType, $format, $enumGroup, $required]);
} elsif ($type =~ /time_t/i) {
$dataType = 'ADT_DATE';
$dataSize = "sizeof (time_t)";
$xlateLine = "{{$dataType, $dataSize}}";
push (@jniLine, [$id, $dataType, $format, $enumGroup, $required]);
} elsif ($type =~ /termid/i) {
$dataType = 'ADT_TERMIDSTAR';
$dataSize = "sizeof (au_tid_addr_t *)";
$xlateLine = "{{$dataType, $dataSize}}";
push (@jniLine, [$id, $dataType, $format, $enumGroup, $required]);
} elsif ($omitJNI) {
$xlateLabelRef = 'NULL';
} else {
print STDERR "$type is not an implemented data type\n";
$xlateLabelRef = 'NULL';
}
$xlateLabelRef = '&' . $xlateLabel . '[0]'
unless $xlateLabelRef eq 'NULL';
# "EOL" is where a comma should go unless end of list
$xlateLine = "{$token,\t1,\t$xlateLabelRef,\t$sequence,\n" .
"\t\t0,\t$required,\t$tsol,\t$format}EOL";
} else { # is a list
my @type = split(/,/, $type);
my @arraySize = ();
my @id = split(/,/, $id);
my @jniId = @id;
my $dataType;
my $typeCount = ($#type + 1);
my @xlateType = ();
my @default = ();
foreach my $dtype (@type) {
my $jniId = shift @jniId;
my $id = shift @id;
my $arraySize = '';
$arraySize = $1 if ($dtype =~ s/\[(\d+)\]/[]/);
my $entryType = ${$entryDef{$dtype}}[0];
if ($entryType) {
my $type = $dtype;
$type =~ s/([^*]+)\s*(\*+)/$1 $2/;
$type =~ s/\[\]//;
my $sizeString = "sizeof";
$sizeString = "$arraySize * " . $sizeString if $arraySize;
push (@xlateType, "\{$entryType, $sizeString ($type)\}");
push (@jniLine, [$jniId, $entryType, $format, $enumGroup, $required]);
} elsif ($type =~ /^msg/i) {
$type =~ s/^msg//i;
$dataType = 'ADT_MSG';
my $dataEnum = 'ADT_LIST_' . uc $type;
push (@xlateType, "\{$dataType, $dataEnum\}};");
push (@jniLine, [$jniId, $dataType, $format, $enumGroup, $required]);
} elsif ($type =~ /time_t/i) {
$dataType = 'ADT_DATE';
push (@xlateType, "\{$entryType, sizeof ($type)\}");
push (@jniLine, [$jniId, $entryType, $format, $enumGroup, $required]);
} elsif ($type =~ /termid/i) {
$dataType = 'ADT_TERMIDSTAR';
push (@xlateType, "\{$dataType, sizeof (au_tid_addr_t *)\}");
push (@jniLine, [$jniId, $dataType, $format, $enumGroup, $required]);
} elsif ($omitJNI) {
# nothing to do.
} else {
print STDERR "$dtype is not an implemented data type\n";
}
if (${$entryDef{$dtype}}[1]) {
push (@default, $id, ${$entryDef{$dtype}}[1]);
}
}
my $xlateArray = "\[$typeCount\] =\t{" . join(",\n\t\t\t\t", @xlateType) . "};";
$xlateLine =
"{$token,\t$typeCount,\t&$xlateLabel\[0\],\t$sequence,\n" .
"\t\t0,\t$required,\t$tsol,\t$format}EOL";
}
$xlateUniLabelInc++ if $xlateLabelInc;
return ($xlateLine, \@jniLine);
}
sub generateMsgLists {
my $textList = shift;
my $textName = $textList->getId();
my $header = $textList->getHeader();
my $start = $textList->getMsgStart();
my $public = $textList->getMsgPublic();
my $deprecated = $textList->getDeprecated();
print "$textName starts at $start\n" if $debug;
my $entry;
my @entry;
while ($entry = $textList->getNextMsg()) {
if ($debug) {
my ($id, $text) = split(/\s*::\s*/, $entry);
print " $id = $text\n";
}
unshift (@entry, $entry);
}
$msg_list{$textName} =
[\@entry, [$header, $start, $public, $deprecated]];
}
sub readAuditEventFile {
my $eventListFile = shift;
open(Event, $eventListFile)
or die "can't open $eventListFile: $!\n";
while(<Event>) {
next if /^\s*#/;
next if /^\s*$/;
my ($value, $name) = split(/\s*:\s*/);
next if $value < 6000;
$eventCode{$name} = $value;
}
close Event;
}