#
# Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0, which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception, which is available at
# https://www.gnu.org/software/classpath/license.html.
#
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
#

<!-- Security common required properties -->

<!-- harness related -->
<target name="init-report-sec-common">
        <property name="webtest.resultfile" value="${webtest.report.dir}/gtest-results.xml"/>
</target>


<!-- WSS related -->
<property name="provider.class" value="com.sun.xml.wss.provider.ServerSecurityAuthModule"/>
<property name="wss.server.provider.name" value="ServerProvider"/>
<property name="wss.client.provider.name" value="ClientProvider"/>
<property name="wss.request.auth.source" value="sender"/>
<property name="wss.response.auth.source" value="content"/>
<property name="wss.server.provider.type" value="server"/>
<property name="wss.client.provider.type" value="client"/>


<!-- cert generation -->
<property name="host.domain" value="sfbay.sun.com"/>
<property name="cert.pwd" value="restricted"/>
<property name="certdb.pwd" value="changeit"/>
<property name="cert.trust.options" value="'u,u,u'"/>
<!-- ========================================================= -->
