Skip to content

Commit 6c3fd02

Browse files
committed
Encrypted ticket and removed clear when JDBC is closed
1 parent 3b81ea8 commit 6c3fd02

File tree

4 files changed

+20
-36
lines changed

4 files changed

+20
-36
lines changed

src/main/java/com/ibm/as400/access/AS400.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -389,23 +389,19 @@ public class AS400 implements Serializable, AutoCloseable
389389
private boolean forcePrompt_ = false;
390390
private int validateSignonTimeOut_ = 0;
391391

392-
private byte[] kerbTicket_;
392+
private transient CredentialVault kerbTicket_;
393393

394394
// Prefix used to indicate that the password contains a base64-encoded Kerberos token.
395395
public static final String KERBEROS_PREFIX = "_KERBEROSAUTH_";
396396
public static final char[] KERBEROS_PREFIX_CHARS = KERBEROS_PREFIX.toCharArray();
397397

398398
private void setKerbTicket(byte[] ticket) {
399-
this.kerbTicket_ = ticket.clone();
400-
}
401-
402-
private byte[] getKerbTicket() {
403-
return this.kerbTicket_;
399+
this.kerbTicket_ = new PasswordVault(ticket);
404400
}
405401

406402
public void clearKerbTicket() {
407-
if (this.kerbTicket_ != null)
408-
CredentialVault.clearArray(kerbTicket_);
403+
if (!this.kerbTicket_.isEmpty())
404+
this.kerbTicket_.empty();
409405
}
410406

411407
// Determines if the password contains a Kerberos token
@@ -1851,8 +1847,8 @@ private synchronized void chooseImpl()
18511847
}
18521848

18531849
// If kerbTicket_ has been set, make sure the impl knows about it.
1854-
if (kerbTicket_ != null)
1855-
impl_.setKerbTicket(kerbTicket_);
1850+
if (!kerbTicket_.isEmpty())
1851+
impl_.setKerbTicket(kerbTicket_.getClearCredential());
18561852

18571853
if (!propertiesFrozen_)
18581854
{
@@ -5506,9 +5502,9 @@ synchronized void signon(boolean keepConnection) throws AS400SecurityException,
55065502
// Try for Kerberos.
55075503
byte[] newBytes = null;
55085504

5509-
if (kerbTicket_ != null && kerbTicket_.length > 0) {
5505+
if (!kerbTicket_.isEmpty() && kerbTicket_.getClearCredential().length > 0) {
55105506
if (Trace.traceOn_) Trace.log(Trace.DIAGNOSTIC, "Using injected Kerberos ticket.");
5511-
newBytes = kerbTicket_.clone();
5507+
newBytes = kerbTicket_.getClearCredential();
55125508
} else {
55135509
// Fall back to generating the token normally
55145510
newBytes = (gssCredential_ == null)

src/main/java/com/ibm/as400/access/AS400ImplProxy.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ public SignonInfo skipSignon(String systemName, boolean systemNameLocal, String
371371

372372

373373
private int bidiStringType = BidiStringType.DEFAULT;
374-
private byte[] kerbTicket_;
374+
private CredentialVault kerbTicket_;
375375

376376
/**
377377
* Sets bidi string type of the connection.
@@ -408,11 +408,7 @@ public void setAdditionalAuthenticationFactor(char[] additionalAuthFactor) {
408408

409409
@Override
410410
public void setKerbTicket(byte[] ticket) {
411-
this.kerbTicket_ = ticket;
412-
}
413-
414-
private byte[] getKerbTicket() {
415-
return this.kerbTicket_;
411+
this.kerbTicket_ = new PasswordVault(ticket);
416412
}
417413

418414
}

src/main/java/com/ibm/as400/access/AS400ImplRemote.java

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ public class AS400ImplRemote implements AS400Impl
189189
private static final String CLASSNAME = "com.ibm.as400.access.AS400ImplRemote";
190190

191191
// GSS Token, for Kerberos.
192-
private byte[] kerbTicket_;
192+
private CredentialVault kerbTicket_;
193193

194194
static {
195195
if (Trace.traceOn_)
@@ -669,8 +669,8 @@ public int createUserHandle() throws AS400SecurityException, IOException
669669
try
670670
{
671671
byte[] authenticationBytes;
672-
if (this.kerbTicket_ != null){
673-
authenticationBytes = this.kerbTicket_;
672+
if (!this.kerbTicket_.isEmpty()){
673+
authenticationBytes = this.kerbTicket_.getClearCredential();
674674
} else {
675675
authenticationBytes = (gssCredential_ == null)
676676
? TokenManager.getGSSToken(systemName_, gssName_)
@@ -1023,8 +1023,8 @@ public void generateProfileToken(ProfileTokenCredential profileToken, String use
10231023
case AS400.AUTHENTICATION_SCHEME_GSS_TOKEN:
10241024
try
10251025
{
1026-
if (this.kerbTicket_ != null){
1027-
authenticationBytes = this.kerbTicket_;
1026+
if (!this.kerbTicket_.isEmpty()){
1027+
authenticationBytes = this.kerbTicket_.getClearCredential();
10281028
} else {
10291029
authenticationBytes = (gssCredential_ == null)
10301030
? TokenManager.getGSSToken(systemName_, gssName)
@@ -1849,8 +1849,8 @@ byte[] getPassword(byte[] clientSeed, byte[] serverSeed) throws AS400SecurityExc
18491849
if (credType == AS400.AUTHENTICATION_SCHEME_GSS_TOKEN)
18501850
{
18511851
try {
1852-
if (kerbTicket_ != null)
1853-
return kerbTicket_;
1852+
if (!kerbTicket_.isEmpty())
1853+
return kerbTicket_.getClearCredential();
18541854
return (gssCredential_ == null)
18551855
? TokenManager.getGSSToken(systemName_, gssName_)
18561856
: TokenManager2.getGSSToken(systemName_, gssCredential_);
@@ -2229,8 +2229,8 @@ private byte[] getDdmEncryptedPassword(byte[] sharedPrivateKey, byte[] serverSee
22292229
if (credType == AS400.AUTHENTICATION_SCHEME_GSS_TOKEN)
22302230
{
22312231
try {
2232-
if (kerbTicket_ != null)
2233-
return kerbTicket_;
2232+
if (!kerbTicket_.isEmpty())
2233+
return kerbTicket_.getClearCredential();
22342234
return (gssCredential_ == null)
22352235
? TokenManager.getGSSToken(systemName_, gssName_)
22362236
: TokenManager2.getGSSToken(systemName_, gssCredential_);
@@ -5420,11 +5420,7 @@ public String getLocalIPAddress() {
54205420

54215421
@Override
54225422
public void setKerbTicket(byte[] ticket) {
5423-
this.kerbTicket_ = ticket;
5424-
}
5425-
5426-
private byte[] getKerbTicket() {
5427-
return this.kerbTicket_;
5423+
this.kerbTicket_ = new PasswordVault(ticket);
54285424
}
54295425

54305426
}

src/main/java/com/ibm/as400/access/AS400JDBCConnectionImpl.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -592,10 +592,6 @@ public void close ()
592592

593593

594594
as400_.disconnectServer (server_);
595-
// Clear the sensitive auth token via the public AS400 object
596-
if (as400PublicClassObj_ != null) {
597-
as400PublicClassObj_.clearKerbTicket();
598-
}
599595

600596
server_ = null;
601597
}

0 commit comments

Comments
 (0)