MINI MINI MANI MO
<?xml version="1.0"?>
<!-- Copyright (c) 2001, 2017, Oracle and/or its affiliates.
All rights reserved.-->
<!--
NAME
kuaudit.xsl
DESCRIPTION
XSLT stylesheet for XML => DDL conversion of ku$_audit_t ADTs
NOTES
Do NOT modify this file under any circumstance. Copy the file
if you wish to use this stylesheet with an external XML/XSL parser
MODIFIED MM/DD/YY
jjanosik 01/31/17 - Bug 25459227: quote role name in audit policy
bwright 11/05/14 - Support 'audit policy by granted roles'
bwright 08/15/13 - Bug 17312600: Remove hard tabs from DP src code
sdavidso 10/18/11 - add audit policy types
(12.1 project for Simplified and Dynamic Audit
Configuration)
tbhukya 09/06/10 - Bug 10091108: Add double quotes for user name
lbarton 03/20/09 - lrg 3751805: need nl in dummy audit
lbarton 11/10/08 - ssonawan_bug-7295457: generate null pl/sql
if property=1
lbarton 11/02/05 - Bug 4715313: reformat files for use with XMLSpy
htseng 06/05/03 - bug 2992644 - need call DoParse for each AUDIT
htseng 08/02/02 - add grantee parse param
htseng 07/25/02 - add BaseNameNode
htseng 09/19/01 - Merged htseng_add_xsl_stylesheets
htseng 06/26/01 - Creation
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Import required scripts -->
<xsl:import href="kucommon.xsl"/>
<!-- Top-level parameters -->
<xsl:param name="PRETTY">1</xsl:param>
<xsl:param name="SQLTERMINATOR">1</xsl:param>
<!-- params for parse -->
<xsl:param name="PRS_DDL">0</xsl:param>
<xsl:param name="PRS_DELIM">\{]`</xsl:param>
<xsl:param name="PRS_VERB">0</xsl:param>
<xsl:param name="PRS_OBJECT_TYPE">0</xsl:param>
<xsl:param name="PRS_SCHEMA">0</xsl:param>
<xsl:param name="PRS_NAME">0</xsl:param>
<xsl:param name="PRS_GRANTEE">0</xsl:param>
<xsl:param name="PRS_GRANTOR">0</xsl:param>
<xsl:param name="PRS_BASE_OBJECT_TYPE">0</xsl:param>
<xsl:param name="PRS_BASE_OBJECT_SCHEMA">0</xsl:param>
<xsl:param name="PRS_BASE_OBJECT_NAME">0</xsl:param>
<xsl:template match="AUDIT_POLICY_T">
<!-- *******************************************************************
Template: AUDIT_POLICY_T - top-level template for audit policies.
Generates CREATE AUDIT POLICY ddl
******************************************************************** -->
<xsl:call-template name="DoParse">
<xsl:with-param name="Verb">AUDIT</xsl:with-param>
<xsl:with-param name="ObjectType">AUDIT_POLICY</xsl:with-param>
<xsl:with-param name="NameNode" select="USER_NAME"/>
<xsl:with-param name="Grantee" select="USER_NAME"/>
</xsl:call-template>
<xsl:text> CREATE AUDIT POLICY "</xsl:text>
<xsl:value-of select="SCHEMA_OBJ/NAME"/>
<xsl:text>" </xsl:text>
<!--system privileges-->
<xsl:if test="(TYPE mod 2) = 1">
<xsl:text>PRIVILEGES </xsl:text>
<xsl:for-each select="PRIVILEGE_OPTIONS/PRIVILEGE_OPTIONS_ITEM">
<xsl:value-of select="NAME"/>
<xsl:choose>
<xsl:when test="position()!=last()">
<xsl:text>,</xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:if>
<!--system actions-->
<xsl:if test="SYS_ACTION_OPTIONS/SYS_ACTION_OPTIONS_ITEM or
OBJ_ACTION_OPTIONS/OBJ_ACTION_OPTIONS_ITEM">
<xsl:text>ACTIONS </xsl:text>
<xsl:if test="SYS_ACTION_OPTIONS/SYS_ACTION_OPTIONS_ITEM ">
<xsl:for-each select="SYS_ACTION_OPTIONS/SYS_ACTION_OPTIONS_ITEM">
<xsl:value-of select="NAME"/>
<xsl:choose>
<xsl:when test="position()!=last() or
../../OBJ_ACTION_OPTIONS/OBJ_ACTION_OPTIONS_ITEM">
<xsl:text>,</xsl:text>
<xsl:if test="$PRETTY=1"/>
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:if>
<xsl:if test="OBJ_ACTION_OPTIONS/OBJ_ACTION_OPTIONS_ITEM">
<xsl:for-each select="OBJ_ACTION_OPTIONS/OBJ_ACTION_OPTIONS_ITEM">
<xsl:value-of select="NAME"/>
<xsl:text> ON </xsl:text>
<xsl:apply-templates select="AUDIT_OBJ"/>
<xsl:choose>
<xsl:when test="position()!=last()">
<xsl:text>,</xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:if>
</xsl:if>
<!--XS actions-->
<xsl:if test="XS_ACTION_OPTIONS/XS_ACTION_OPTIONS_ITEM">
<xsl:text>ACTIONS COMPONENT=XS </xsl:text>
<xsl:for-each select="XS_ACTION_OPTIONS/XS_ACTION_OPTIONS_ITEM">
<xsl:value-of select="NAME"/>
<xsl:choose>
<xsl:when test="position()!=last()">
<xsl:text>,</xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:if>
<!--OLS actions-->
<xsl:if test="OLS_ACTION_OPTIONS/OLS_ACTION_OPTIONS_ITEM">
<xsl:text>ACTIONS COMPONENT=OLS </xsl:text>
<xsl:for-each select="OLS_ACTION_OPTIONS/OLS_ACTION_OPTIONS_ITEM">
<xsl:value-of select="NAME"/>
<xsl:choose>
<xsl:when test="position()!=last()">
<xsl:text>,</xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:if>
<!--Role audits-->
<xsl:if test="ROLE_OPTIONS/ROLE_OPTIONS_ITEM">
<xsl:text>ROLES </xsl:text>
<xsl:for-each select="ROLE_OPTIONS/ROLE_OPTIONS_ITEM">
<xsl:call-template name="QuoteObject">
<xsl:with-param name="Object" select="ROLE_NAME"/>
</xsl:call-template>
<xsl:choose>
<xsl:when test="position()!=last()">
<xsl:text>,</xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:if>
<xsl:if test="CONDITION">
<xsl:text>WHEN '</xsl:text>
<xsl:call-template name="EnQuote">
<xsl:with-param name="String" select="CONDITION"/>
</xsl:call-template>
<xsl:text>' </xsl:text>
<xsl:if test="CONDITION_EVAL!=0">
<xsl:text>EVALUATE PER </xsl:text>
<xsl:choose>
<xsl:when test="CONDITION_EVAL=1">
<xsl:text> STATEMENT </xsl:text>
</xsl:when>
<xsl:when test="CONDITION_EVAL=2">
<xsl:text>SESSION </xsl:text>
</xsl:when>
<xsl:when test="CONDITION_EVAL=3">
<xsl:text>INSTANCE </xsl:text>
</xsl:when>
</xsl:choose>
</xsl:if>
</xsl:if>
<xsl:if test="HAND_PRCEDURE">
<xsl:text>HANDLER "</xsl:text>
<xsl:if test="HAND_SCHEMA">
<xsl:value-of select="HAND_SCHEMA"/>
<xsl:text>"."</xsl:text>
</xsl:if>
<xsl:value-of select="HAND_PROCEDURE"/>
<xsl:text>" </xsl:text>
</xsl:if>
<xsl:if test="$SQLTERMINATOR=1">
<xsl:text>;</xsl:text>
<!-- Terminate the SQL statement -->
</xsl:if>
<xsl:if test="$PRETTY=1">
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="AUDIT_POLICY_ENABLE_T">
<!-- *******************************************************************
Template: AUDIT_POLICY_ENABLE_T - top-level template for audit policy enables.
Generates AUDIT POLICY ddl
******************************************************************** -->
<xsl:call-template name="DoParse">
<xsl:with-param name="Verb">AUDIT</xsl:with-param>
<xsl:with-param name="ObjectType">AUDIT_POLICY_ENABLE</xsl:with-param>
<xsl:with-param name="NameNode" select="USER_NAME"/>
<xsl:with-param name="Grantee" select="USER_NAME"/>
</xsl:call-template>
<xsl:text>AUDIT POLICY "</xsl:text>
<xsl:value-of select="SCHEMA_OBJ/NAME"/>
<xsl:text>" </xsl:text>
<!-- BY <userlist> clause-->
<xsl:if test="USER">
<xsl:choose>
<xsl:when test="HOW_OPT=1">
<xsl:text>BY </xsl:text>
</xsl:when>
<xsl:when test="HOW_OPT=2">
<xsl:text>EXCEPT </xsl:text>
</xsl:when>
<xsl:when test="HOW_OPT=3">
<xsl:text>BY USERS WITH GRANTED ROLES </xsl:text>
</xsl:when>
</xsl:choose>
<xsl:call-template name="QuoteObject">
<xsl:with-param name="Object" select="USER"/>
</xsl:call-template>
<xsl:text> </xsl:text>
</xsl:if>
<xsl:choose>
<xsl:when test="WHEN_OPT=1">
<!-- 1 - on success-->
<xsl:text>WHENEVER SUCCESSFUL </xsl:text>
</xsl:when>
<xsl:when test="WHEN_OPT=2">
<!-- 2 - on not success-->
<xsl:text>WHENEVER NOT SUCCESSFUL </xsl:text>
</xsl:when>
</xsl:choose>
<xsl:if test="$SQLTERMINATOR=1">
<xsl:text>;</xsl:text>
<!-- Terminate the SQL statement -->
</xsl:if>
<xsl:if test="$PRETTY=1">
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="AUDIT_CONTEXT_T">
<!-- *******************************************************************
Template: AUDIT_CONTEXT_T - top-level template for audit contexts.
Generates AUDIT CONTEXT ddl
******************************************************************** -->
<xsl:call-template name="DoParse">
<xsl:with-param name="Verb">AUDIT</xsl:with-param>
<xsl:with-param name="ObjectType">AUDIT_CONTEXT</xsl:with-param>
<xsl:with-param name="NameNode" select="USER"/>
</xsl:call-template>
<xsl:text>AUDIT CONTEXT </xsl:text>
<xsl:if test="AUD_CONTEXT/AUD_CONTEXT_ITEM">
<xsl:for-each select="AUD_CONTEXT/AUD_CONTEXT_ITEM">
<xsl:text>NAMESPACE </xsl:text>
<!--'context namespace' name-->
<xsl:call-template name="QuoteObject">
<xsl:with-param name="Object" select="NAMESPACE"/>
</xsl:call-template>
<xsl:text> </xsl:text>
<xsl:if test="AUD_ATTR/AUD_ATTR_ITEM">
<xsl:text>ATTRIBUTES </xsl:text>
<xsl:for-each select="AUD_ATTR/AUD_ATTR_ITEM">
<!--atribute name-->
<xsl:call-template name="QuoteObject">
<xsl:with-param name="Object" select="."/>
</xsl:call-template>
<xsl:choose>
<xsl:when test="position()!=last()">
<xsl:text>,</xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:if>
<xsl:choose>
<xsl:when test="position()!=last()">
<xsl:text> </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:if>
<xsl:if test="USER">
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text> BY </xsl:text>
<xsl:call-template name="QuoteObject">
<xsl:with-param name="Object" select="USER"/>
</xsl:call-template>
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if test="$SQLTERMINATOR=1">
<xsl:text>;</xsl:text>
<!-- Terminate the SQL statement -->
</xsl:if>
<xsl:if test="$PRETTY=1">
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="AUDIT_T">
<!-- *******************************************************************
Template: AUDIT_T - top-level template for audit.
******************************************************************** -->
<xsl:call-template name="DoParse">
<xsl:with-param name="Verb">AUDIT</xsl:with-param>
<xsl:with-param name="ObjectType">AUDIT</xsl:with-param>
<xsl:with-param name="NameNode" select="USER_NAME"/>
<xsl:with-param name="Grantee" select="USER_NAME"/>
<xsl:with-param name="BaseNameNode" select="AUDIT_OPTION"/>
</xsl:call-template>
<xsl:choose>
<xsl:when test="PROPERTY=1">
<!-- "Property=1 means the audit option (or system privilege) cannot
be audited using regular AUDIT / NO AUDIT sql statements.
It has to be audited using other means,
like dedicated pl/sql api for instance."
lrg 3751805: Replace 'Rem' with double-dash -->
<xsl:text>--
-- </xsl:text>
<xsl:value-of select="AUDIT_OPTION"/>
<xsl:text>
--
BEGIN NULL; END;</xsl:text>
<xsl:if test="$SQLTERMINATOR=1">
<xsl:text>
/</xsl:text>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:if test="SUCCESS!=0">
<xsl:text> AUDIT </xsl:text>
<xsl:value-of select="AUDIT_OPTION"/>
<xsl:if test="USER_NUM!=1">
<xsl:text> BY "</xsl:text>
<xsl:value-of select="USER_NAME"/>
<xsl:text>"</xsl:text>
</xsl:if>
<xsl:if test="SUCCESS=1">
<xsl:text> BY SESSION</xsl:text>
</xsl:if>
<xsl:if test="SUCCESS=2">
<xsl:text> BY ACCESS</xsl:text>
</xsl:if>
<xsl:if test="SUCCESS!=FAILURE">
<xsl:text> WHENEVER SUCCESSFUL </xsl:text>
</xsl:if>
<xsl:if test="$SQLTERMINATOR=1">
<xsl:text>;</xsl:text>
<!-- Terminate the SQL statement -->
</xsl:if>
<xsl:if test="$PRETTY=1">
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:if>
<xsl:if test="FAILURE!=0 and SUCCESS!=FAILURE">
<xsl:text> AUDIT </xsl:text>
<xsl:value-of select="AUDIT_OPTION"/>
<xsl:if test="USER_NUM!=1">
<xsl:text> BY "</xsl:text>
<xsl:value-of select="USER_NAME"/>
<xsl:text>"</xsl:text>
</xsl:if>
<xsl:if test="FAILURE=1">
<xsl:text> BY SESSION WHENEVER NOT SUCCESSFUL </xsl:text>
</xsl:if>
<xsl:if test="FAILURE=2">
<xsl:text> BY ACCESS WHENEVER NOT SUCCESSFUL </xsl:text>
</xsl:if>
<xsl:if test="$SQLTERMINATOR=1">
<xsl:text>;</xsl:text>
<!-- Terminate the SQL statement -->
</xsl:if>
<xsl:if test="$PRETTY=1">
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
OHA YOOOO