/* **************************************************************************
* $OpenLDAP: /com/novell/sasl/client/ResponseAuth.java,v 1.3 2005/01/17 15:00:54 sunilk Exp $
*
* Copyright (C) 2002 Novell, Inc. All Rights Reserved.
*
* THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND
* TREATIES. USE, MODIFICATION, AND REDISTRIBUTION OF THIS WORK IS SUBJECT
* TO VERSION 2.0.1 OF THE OPENLDAP PUBLIC LICENSE, A COPY OF WHICH IS
* AVAILABLE AT HTTP://WWW.OPENLDAP.ORG/LICENSE.HTML OR IN THE FILE "LICENSE"
* IN THE TOP-LEVEL DIRECTORY OF THE DISTRIBUTION. ANY USE OR EXPLOITATION
* OF THIS WORK OTHER THAN AS AUTHORIZED IN VERSION 2.0.1 OF THE OPENLDAP
* PUBLIC LICENSE, OR OTHER PRIOR WRITTEN CONSENT FROM NOVELL, COULD SUBJECT
* THE PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
******************************************************************************/
package com.novell.sasl.client;
import java.util.*;
import org.apache.harmony.javax.security.sasl.*;
/**
* Implements the ResponseAuth class used by the DigestMD5SaslClient mechanism
*/
class ResponseAuth
{
private String m_responseValue;
ResponseAuth(
byte[] responseAuth)
throws SaslException
{
m_responseValue = null;
DirectiveList dirList = new DirectiveList(responseAuth);
try
{
dirList.parseDirectives();
checkSemantics(dirList);
}
catch (SaslException e)
{
}
}
/**
* Checks the semantics of the directives in the directive list as parsed
* from the digest challenge byte array.
*
* @param dirList the list of directives parsed from the digest challenge
*
* @exception SaslException If a semantic error occurs
*/
void checkSemantics(
DirectiveList dirList) throws SaslException
{
Iterator directives = dirList.getIterator();
ParsedDirective directive;
String name;
while (directives.hasNext())
{
directive = (ParsedDirective)directives.next();
name = directive.getName();
if (name.equals("rspauth"))
m_responseValue = directive.getValue();
}
/* post semantic check */
if (m_responseValue == null)
throw new SaslException("Missing response-auth directive.");
}
/**
* returns the ResponseValue
*
* @return the ResponseValue as a String.
*/
public String getResponseValue()
{
return m_responseValue;
}
}