1/* **************************************************************************
2 * $OpenLDAP: /com/novell/sasl/client/ResponseAuth.java,v 1.3 2005/01/17 15:00:54 sunilk Exp $
3 *
4 * Copyright (C) 2002 Novell, Inc. All Rights Reserved.
5 *
6 * THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND
7 * TREATIES. USE, MODIFICATION, AND REDISTRIBUTION OF THIS WORK IS SUBJECT
8 * TO VERSION 2.0.1 OF THE OPENLDAP PUBLIC LICENSE, A COPY OF WHICH IS
9 * AVAILABLE AT HTTP://WWW.OPENLDAP.ORG/LICENSE.HTML OR IN THE FILE "LICENSE"
10 * IN THE TOP-LEVEL DIRECTORY OF THE DISTRIBUTION. ANY USE OR EXPLOITATION
11 * OF THIS WORK OTHER THAN AS AUTHORIZED IN VERSION 2.0.1 OF THE OPENLDAP
12 * PUBLIC LICENSE, OR OTHER PRIOR WRITTEN CONSENT FROM NOVELL, COULD SUBJECT
13 * THE PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
14 ******************************************************************************/
15package com.novell.sasl.client;
16
17import java.util.*;
18import org.apache.harmony.javax.security.sasl.*;
19
20/**
21 * Implements the ResponseAuth class used by the DigestMD5SaslClient mechanism
22 */
23class ResponseAuth
24{
25
26    private String m_responseValue;
27
28    ResponseAuth(
29        byte[] responseAuth)
30            throws SaslException
31    {
32        m_responseValue = null;
33
34        DirectiveList dirList = new DirectiveList(responseAuth);
35        try
36        {
37            dirList.parseDirectives();
38            checkSemantics(dirList);
39        }
40        catch (SaslException e)
41        {
42        }
43    }
44
45    /**
46     * Checks the semantics of the directives in the directive list as parsed
47     * from the digest challenge byte array.
48     *
49     * @param dirList  the list of directives parsed from the digest challenge
50     *
51     * @exception SaslException   If a semantic error occurs
52     */
53    void checkSemantics(
54        DirectiveList dirList) throws SaslException
55    {
56        Iterator        directives = dirList.getIterator();
57        ParsedDirective directive;
58        String          name;
59
60        while (directives.hasNext())
61        {
62            directive = (ParsedDirective)directives.next();
63            name = directive.getName();
64            if (name.equals("rspauth"))
65                m_responseValue = directive.getValue();
66        }
67
68        /* post semantic check */
69        if (m_responseValue == null)
70            throw new SaslException("Missing response-auth directive.");
71    }
72
73    /**
74     * returns the ResponseValue
75     *
76     * @return the ResponseValue as a String.
77     */
78    public String getResponseValue()
79    {
80        return m_responseValue;
81    }
82}
83
84