Skip to content

Commit 5c13575

Browse files
namsicjhpark816
authored andcommitted
INTERNAL: Handle SaslClient on AuthThread
1 parent fa44194 commit 5c13575

File tree

7 files changed

+31
-64
lines changed

7 files changed

+31
-64
lines changed

src/main/java/net/spy/memcached/OperationFactory.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@
1818

1919
import java.util.Collection;
2020
import java.util.List;
21-
import java.util.Map;
2221

23-
import javax.security.auth.callback.CallbackHandler;
22+
import javax.security.sasl.SaslClient;
2423

2524
import net.spy.memcached.collection.Attributes;
2625
import net.spy.memcached.collection.BTreeFindPosition;
@@ -230,15 +229,12 @@ CASOperation cas(StoreType t, String key, long casId, int flags,
230229
/**
231230
* Create a new sasl auth operation.
232231
*/
233-
SASLAuthOperation saslAuth(String[] mech, String serverName,
234-
Map<String, ?> props, CallbackHandler cbh, OperationCallback cb);
232+
SASLAuthOperation saslAuth(SaslClient sc, OperationCallback cb);
235233

236234
/**
237235
* Create a new sasl step operation.
238236
*/
239-
SASLStepOperation saslStep(String[] mech, byte[] challenge,
240-
String serverName, Map<String, ?> props, CallbackHandler cbh,
241-
OperationCallback cb);
237+
SASLStepOperation saslStep(SaslClient sc, byte[] challenge, OperationCallback cb);
242238

243239
/**
244240
* Set item attributes

src/main/java/net/spy/memcached/auth/AuthThread.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import java.util.concurrent.atomic.AtomicBoolean;
55
import java.util.concurrent.atomic.AtomicReference;
66

7+
import javax.security.sasl.Sasl;
8+
import javax.security.sasl.SaslClient;
9+
710
import net.spy.memcached.KeyUtil;
811
import net.spy.memcached.MemcachedConnection;
912
import net.spy.memcached.MemcachedNode;
@@ -19,13 +22,20 @@ public class AuthThread extends SpyThread {
1922
private final AuthDescriptor authDescriptor;
2023
private final OperationFactory opFact;
2124
private final MemcachedNode node;
25+
private final SaslClient sc;
2226

2327
public AuthThread(MemcachedConnection c, OperationFactory o,
2428
AuthDescriptor a, MemcachedNode n) {
2529
conn = c;
2630
opFact = o;
2731
authDescriptor = a;
2832
node = n;
33+
try {
34+
sc = Sasl.createSaslClient(authDescriptor.getMechs(), null,
35+
"memcached", node.getSocketAddress().toString(), null, authDescriptor.getCallback());
36+
} catch (Exception e) {
37+
throw new RuntimeException("Can't create SaslClient", e);
38+
}
2939
}
3040

3141
@Override
@@ -89,15 +99,9 @@ public void complete() {
8999

90100
private Operation buildOperation(OperationStatus st, OperationCallback cb) {
91101
if (st == null) {
92-
return opFact.saslAuth(authDescriptor.getMechs(),
93-
node.getSocketAddress().toString(), null,
94-
authDescriptor.getCallback(), cb);
102+
return opFact.saslAuth(sc, cb);
95103
} else {
96-
return opFact.saslStep(authDescriptor.getMechs(),
97-
KeyUtil.getKeyBytes(st.getMessage()),
98-
node.getSocketAddress().toString(), null,
99-
authDescriptor.getCallback(), cb);
104+
return opFact.saslStep(sc, KeyUtil.getKeyBytes(st.getMessage()), cb);
100105
}
101-
102106
}
103107
}

src/main/java/net/spy/memcached/protocol/ascii/AsciiOperationFactory.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
package net.spy.memcached.protocol.ascii;
1818

1919
import java.util.Collection;
20-
import java.util.Map;
2120

22-
import javax.security.auth.callback.CallbackHandler;
21+
import javax.security.sasl.SaslClient;
2322

2423
import net.spy.memcached.collection.Attributes;
2524
import net.spy.memcached.collection.BTreeFindPosition;
@@ -147,15 +146,11 @@ public SASLMechsOperation saslMechs(OperationCallback cb) {
147146
throw new UnsupportedOperationException();
148147
}
149148

150-
public SASLStepOperation saslStep(String[] mech, byte[] challenge,
151-
String serverName, Map<String, ?> props, CallbackHandler cbh,
152-
OperationCallback cb) {
149+
public SASLStepOperation saslStep(SaslClient sc, byte[] challenge, OperationCallback cb) {
153150
throw new UnsupportedOperationException();
154151
}
155152

156-
public SASLAuthOperation saslAuth(String[] mech, String serverName,
157-
Map<String, ?> props, CallbackHandler cbh,
158-
OperationCallback cb) {
153+
public SASLAuthOperation saslAuth(SaslClient sc, OperationCallback cb) {
159154
throw new UnsupportedOperationException();
160155
}
161156

src/main/java/net/spy/memcached/protocol/binary/BinaryOperationFactory.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
package net.spy.memcached.protocol.binary;
1818

1919
import java.util.Collection;
20-
import java.util.Map;
2120

22-
import javax.security.auth.callback.CallbackHandler;
21+
import javax.security.sasl.SaslClient;
2322

2423
import net.spy.memcached.collection.Attributes;
2524
import net.spy.memcached.collection.BTreeFindPosition;
@@ -147,21 +146,16 @@ public ConcatenationOperation cat(ConcatenationType catType, long casId,
147146
return new ConcatenationOperationImpl(catType, key, data, casId, cb);
148147
}
149148

150-
public SASLAuthOperation saslAuth(String[] mech, String serverName,
151-
Map<String, ?> props, CallbackHandler cbh,
152-
OperationCallback cb) {
153-
return new SASLAuthOperationImpl(mech, serverName, props, cbh, cb);
149+
public SASLAuthOperation saslAuth(SaslClient sc, OperationCallback cb) {
150+
return new SASLAuthOperationImpl(sc, cb);
154151
}
155152

156153
public SASLMechsOperation saslMechs(OperationCallback cb) {
157154
return new SASLMechsOperationImpl(cb);
158155
}
159156

160-
public SASLStepOperation saslStep(String[] mech, byte[] challenge,
161-
String serverName, Map<String, ?> props, CallbackHandler cbh,
162-
OperationCallback cb) {
163-
return new SASLStepOperationImpl(mech, challenge, serverName,
164-
props, cbh, cb);
157+
public SASLStepOperation saslStep(SaslClient sc, byte[] challenge, OperationCallback cb) {
158+
return new SASLStepOperationImpl(sc, challenge, cb);
165159
}
166160

167161
//// UNSUPPORTED ////

src/main/java/net/spy/memcached/protocol/binary/SASLAuthOperationImpl.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@
1717
*/
1818
package net.spy.memcached.protocol.binary;
1919

20-
import java.util.Map;
21-
22-
import javax.security.auth.callback.CallbackHandler;
2320
import javax.security.sasl.SaslClient;
2421
import javax.security.sasl.SaslException;
2522

@@ -31,9 +28,8 @@ public class SASLAuthOperationImpl extends SASLBaseOperationImpl
3128

3229
private final static int CMD = 0x21;
3330

34-
public SASLAuthOperationImpl(String[] m, String s,
35-
Map<String, ?> p, CallbackHandler h, OperationCallback c) {
36-
super(CMD, m, EMPTY_BYTES, s, p, h, c);
31+
public SASLAuthOperationImpl(SaslClient sc, OperationCallback cb) {
32+
super(CMD, sc, EMPTY_BYTES, cb);
3733
}
3834

3935
@Override

src/main/java/net/spy/memcached/protocol/binary/SASLBaseOperationImpl.java

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package net.spy.memcached.protocol.binary;
22

33
import java.io.IOException;
4-
import java.util.Map;
5-
6-
import javax.security.auth.callback.CallbackHandler;
7-
import javax.security.sasl.Sasl;
84
import javax.security.sasl.SaslClient;
95
import javax.security.sasl.SaslException;
106

@@ -17,29 +13,19 @@ public abstract class SASLBaseOperationImpl extends OperationImpl {
1713

1814
private static final int SASL_CONTINUE = 0x21;
1915

20-
protected final String[] mech;
16+
protected final SaslClient sc;
2117
protected final byte[] challenge;
22-
protected final String serverName;
23-
protected final Map<String, ?> props;
24-
protected final CallbackHandler cbh;
2518

26-
public SASLBaseOperationImpl(int c, String[] m, byte[] ch,
27-
String s, Map<String, ?> p, CallbackHandler h,
19+
public SASLBaseOperationImpl(int c, SaslClient sc, byte[] challenge,
2820
OperationCallback cb) {
2921
super(c, generateOpaque(), cb);
30-
mech = m;
31-
challenge = ch;
32-
serverName = s;
33-
props = p;
34-
cbh = h;
22+
this.sc = sc;
23+
this.challenge = challenge;
3524
}
3625

3726
@Override
3827
public void initialize() {
3928
try {
40-
SaslClient sc = Sasl.createSaslClient(mech, null,
41-
"memcached", serverName, props, cbh);
42-
4329
byte[] response = buildResponse(sc);
4430
String mechanism = sc.getMechanismName();
4531

src/main/java/net/spy/memcached/protocol/binary/SASLStepOperationImpl.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@
1717
*/
1818
package net.spy.memcached.protocol.binary;
1919

20-
import java.util.Map;
21-
22-
import javax.security.auth.callback.CallbackHandler;
2320
import javax.security.sasl.SaslClient;
2421
import javax.security.sasl.SaslException;
2522

@@ -31,9 +28,8 @@ public class SASLStepOperationImpl extends SASLBaseOperationImpl
3128

3229
private final static int CMD = 0x22;
3330

34-
public SASLStepOperationImpl(String[] m, byte[] ch, String s,
35-
Map<String, ?> p, CallbackHandler h, OperationCallback c) {
36-
super(CMD, m, ch, s, p, h, c);
31+
public SASLStepOperationImpl(SaslClient sc, byte[] challenge, OperationCallback cb) {
32+
super(CMD, sc, challenge, cb);
3733
}
3834

3935
@Override

0 commit comments

Comments
 (0)