package mit.krb4.example ;

public class Client
{

	public static void main( String[] args )
	{
		try
		{
			if( 3 == args.length )
			{
				String kerberosName = args[ 0 ] ; // this is the "chuck" part of "chuck.root"
				String kerberosInst = "" ; // this is the ".root" part of "chuck.root"
				String kerberosPassword = args[ 1 ] ;
				String service = "rcmd" ; // this is the kerberos default service
				String serverName = args[ 2 ] ; // e.g blue-goose

				char[] password = new char[ kerberosPassword.length() ] ;
				kerberosPassword.getChars( 0 , kerberosPassword.length() , password , 0 ) ;

				mit.krb4.Authenticate authenticate
					= new mit.krb4.Authenticate() ;
				krb4.lib.Krb4Creds creds
					= authenticate.getUserCredentials
					( kerberosName
					, kerberosInst
					, password 
					) ;
				byte[] ticket
					= authenticate.getServiceTicket
					( creds 
					, service
					, serverName
					, kerberosName 
					, kerberosInst
					) ;
				String ticketFilename = new String( serverName + ".ticket" ) ;
				setBytes( ticketFilename , ticket ) ;
				System.out.println( "Ticket written to: " + ticketFilename ) ;
			}
			else
			{
				System.out.println( "Usage: java mit.krb4.example.Client kerberosName kerberosPassword serverName " ) ;
			}
		}
		catch( Throwable ex )
		{
			ex.printStackTrace() ;
		}
	}

	private static void setBytes( String filename , byte[] bytes )
	throws Throwable
	{
		java.io.FileOutputStream out = new java.io.FileOutputStream( filename ) ;
		for( int i = 0 ; bytes.length != i ; i ++ )
		{
			out.write( bytes[ i ] ) ;
		}
		out.close() ;
	}
}
