1:
37:
38:
39: package ;
40:
41: import ;
42: import ;
43:
44: import ;
45: import ;
46: import ;
47: import ;
48: import ;
49:
50:
53: public class PlainClient
54: extends ClientMechanism
55: implements SaslClient
56: {
57: public PlainClient()
58: {
59: super(Registry.SASL_PLAIN_MECHANISM);
60: }
61:
62: protected void initMechanism() throws SaslException
63: {
64: }
65:
66: protected void resetMechanism() throws SaslException
67: {
68: }
69:
70: public boolean hasInitialResponse()
71: {
72: return true;
73: }
74:
75: public byte[] evaluateChallenge(final byte[] challenge) throws SaslException
76: {
77: try
78: {
79: final String username;
80: final char[] password;
81: Callback[] callbacks;
82: if ((! properties.containsKey(Registry.SASL_USERNAME))
83: && (! properties.containsKey(Registry.SASL_PASSWORD)))
84: {
85: callbacks = new Callback[2];
86: final NameCallback nameCB;
87: final String defaultName = System.getProperty("user.name");
88: if (defaultName == null)
89: nameCB = new NameCallback("username: ");
90: else
91: nameCB = new NameCallback("username: ", defaultName);
92: final PasswordCallback pwdCB = new PasswordCallback("password: ",
93: false);
94: callbacks[0] = nameCB;
95: callbacks[1] = pwdCB;
96: this.handler.handle(callbacks);
97: username = nameCB.getName();
98: password = pwdCB.getPassword();
99: }
100: else
101: {
102: if (properties.containsKey(Registry.SASL_USERNAME))
103: username = (String) properties.get(Registry.SASL_USERNAME);
104: else
105: {
106: callbacks = new Callback[1];
107: final NameCallback nameCB;
108: final String defaultName = System.getProperty("user.name");
109: if (defaultName == null)
110: nameCB = new NameCallback("username: ");
111: else
112: nameCB = new NameCallback("username: ", defaultName);
113: callbacks[0] = nameCB;
114: this.handler.handle(callbacks);
115: username = nameCB.getName();
116: }
117: if (properties.containsKey(Registry.SASL_PASSWORD))
118: password = ((String) properties.get(Registry.SASL_PASSWORD)).toCharArray();
119: else
120: {
121: callbacks = new Callback[1];
122: final PasswordCallback pwdCB = new PasswordCallback("password: ",
123: false);
124: callbacks[0] = pwdCB;
125: this.handler.handle(callbacks);
126: password = pwdCB.getPassword();
127: }
128: }
129: if (password == null)
130: throw new SaslException("null password supplied");
131: final StringBuffer sb = new StringBuffer();
132: if (authorizationID != null)
133: sb.append(authorizationID);
134: sb.append('\0');
135: sb.append(username);
136: sb.append('\0');
137: sb.append(password);
138: this.complete = true;
139: final byte[] response = sb.toString().getBytes("UTF-8");
140: return response;
141: }
142: catch (Exception x)
143: {
144: if (x instanceof SaslException)
145: throw (SaslException) x;
146: throw new SaslException("evaluateChallenge()", x);
147: }
148: }
149:
150: protected String getNegotiatedQOP()
151: {
152: return Registry.QOP_AUTH;
153: }
154: }