//***************************************************************************
// (c) Copyright IBM Corp. 2007 All rights reserved.
//
// The following sample of source code ("Sample") is owned by International
// Business Machines Corporation or one of its subsidiaries ("IBM") and is
// copyrighted and licensed, not sold. You may use, copy, modify, and
// distribute the Sample in any form without payment to IBM, for the purpose of
// assisting you in the development of your applications.
//
// The Sample code is provided to you on an "AS IS" basis, without warranty of
// any kind. IBM HEREBY EXPRESSLY DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR
// IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do
// not allow for the exclusion or limitation of implied warranties, so the above
// limitations or exclusions may not apply to you. IBM shall not be liable for
// any damages you suffer as a result of using, copying, modifying or
// distributing the Sample, even if IBM has been advised of the possibility of
// such damages.
//***************************************************************************
//
// SOURCE FILE NAME: JCCKerberosPluginTest.java
//
// This set of sample shows
//
// 1. How to implement a JCC plugin which does Kerberos authentication
// 2. How to use this sample plugin to get a Connection.
//
// In order to implement a JCC plugin in, user needs to extend com.ibm.db2.jcc.DB2JCCPlugin
// and implement the following method:
// public abstract byte[] getTicket (String username, String password,
// byte[] returnedToken) throws org.ietf.jgss.GSSException;
//
// User also needs to implement some JGSS APIs
//
// This set of sample implements a plugin that does kerberos authentication.
// It uses Kerberos implementation in jgss package
// It corresponds to the c sample plugin IBMkrb5 in sqllib\samples\securtiy\plugins
//
// This set of samples contain the following 3 files:
//
// JCCKerberosPluginTest.java
// This file uses sample plugin JCCKerberosPlugin to get a Connection from DB2 server
//
// JCCKerberosPlugin.java
// This file implements the sample JCCKerberosPlugin.
//
// JCCSimpleGSSException.java
// used by JCCKerberosPlugin for Exception handling
// How to run this JCCKerberosPlugin sample
//
// Compile the above 3 files using javac *.java
// Run JCCKerberosPluginTest using
// java JCCKerberosPluginTest server port dbname userid password serverPrincipalName
//
// Note: To run this sample, server side plugin IBMkrb5 needs to be installed in
// the server plug-in directory on the server. Database manager configuration
// parameters SRVCON_GSSPLUGIN_LIST and SRVCON_AUTH need to set correctly
//
// None
//***************************************************************************
//
// For more information on the sample programs, see the README file.
//
// For information on developing Java applications see the Developing Java Applications book.
//
// For information on using SQL statements, see the SQL Reference.
//
// For the latest information on programming, compiling, and running DB2
// applications, visit the DB2 Information Center at
// http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp
//**************************************************************************/
public class JCCKerberosPluginTest
{
public static void main (String[] args) throws Exception
{
if(args.length != 6)
throw new Exception("Usage: program_name [server] [port] [dbname] [userid] [password] [serverPrincipalName]");
String ServerName = args[0];
int PortNumber = (new Integer(args[1])).intValue();
String DatabaseName = args[2];
String userid = args[3];
String password = args[4];
String serverPrincipalName = args[5];
String url = "jdbc:db2://" + ServerName + ":"+ PortNumber + "/" + DatabaseName ;
java.util.Properties properties = new java.util.Properties();
properties.put("user", userid);
properties.put("password", password);
properties.put("pluginName", "IBMkrb5");
properties.put("securityMechanism",
new String("" + com.ibm.db2.jcc.DB2BaseDataSource.PLUGIN_SECURITY + ""));
properties.put("plugin", new JCCKerberosPlugin( serverPrincipalName) );
java.sql.Connection con = null;
try
{
Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
}
catch ( Exception e )
{
System.out.println("Error: failed to load Db2 jcc driver.");
}
try
{
con = java.sql.DriverManager.getConnection(url, properties);
System.out.println("Connected through JCC Type 4 driver using JCCKerberosPlugin");
}
catch (Exception e)
{
System.out.println("Error occurred when getting a Connection. " + e.getMessage());
}
}
}