| | |
| | | import java.util.ArrayList; |
| | | import java.util.LinkedList; |
| | | import java.util.List; |
| | | import java.util.Random; |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | | import java.util.concurrent.atomic.AtomicLong; |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | private final class BindUpdateStatsResultHandler |
| | | extends UpdateStatsResultHandler<BindResult> |
| | | |
| | | |
| | | private final class BindUpdateStatsResultHandler extends |
| | | UpdateStatsResultHandler<BindResult> |
| | | { |
| | | private BindUpdateStatsResultHandler(long eTime) { |
| | | super(eTime); |
| | | private BindUpdateStatsResultHandler(long startTime) |
| | | { |
| | | super(startTime); |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | | public void handleErrorResult(ErrorResultException error) { |
| | | if(error.getResult().getResultCode() != ResultCode.INVALID_CREDENTIALS) |
| | | public void handleErrorResult(ErrorResultException error) |
| | | { |
| | | super.handleErrorResult(error); |
| | | } |
| | | else |
| | | |
| | | if (error.getResult().getResultCode() == ResultCode.INVALID_CREDENTIALS) |
| | | { |
| | | failedRecentCount.getAndIncrement(); |
| | | invalidCredRecentCount.getAndIncrement(); |
| | | } |
| | | } |
| | |
| | | { |
| | | private SearchRequest sr; |
| | | private BindRequest br; |
| | | |
| | | private Object[] data; |
| | | private final char[] invalidPassword = "invalid-password".toCharArray(); |
| | | |
| | | private final ThreadLocal<Random> rng = new ThreadLocal<Random>() |
| | | { |
| | | |
| | | protected Random initialValue() |
| | | { |
| | | return new Random(); |
| | | } |
| | | |
| | | }; |
| | | |
| | | |
| | | private BindWorkerThread(final AsynchronousConnection connection, |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | private FutureResult<BindResult> performBind( |
| | | final AsynchronousConnection connection, |
| | | final Object[] data, |
| | | final AsynchronousConnection connection, final Object[] data, |
| | | final ResultHandler<? super BindResult> handler) |
| | | { |
| | | final boolean useInvalidPassword; |
| | | |
| | | // Avoid rng if possible. |
| | | switch (invalidCredPercent) |
| | | { |
| | | case 0: |
| | | useInvalidPassword = false; |
| | | break; |
| | | case 100: |
| | | useInvalidPassword = true; |
| | | break; |
| | | default: |
| | | final Random r = rng.get(); |
| | | final int p = r.nextInt(100); |
| | | useInvalidPassword = (p < invalidCredPercent); |
| | | break; |
| | | } |
| | | |
| | | if(bindRequest instanceof SimpleBindRequest) |
| | | { |
| | | SimpleBindRequest o = (SimpleBindRequest)bindRequest; |
| | |
| | | { |
| | | sbr.setName(String.format(o.getName(), data)); |
| | | } |
| | | if(successRecentCount.get() * ((float)invalidCredPercent/100) > |
| | | invalidCredRecentCount.get()) |
| | | if (useInvalidPassword) |
| | | { |
| | | sbr.setPassword("invalid-password".toCharArray()); |
| | | sbr.setPassword(invalidPassword); |
| | | } |
| | | else |
| | | { |
| | |
| | | { |
| | | if(o.getAuthenticationID() != null) |
| | | { |
| | | sbr.setAuthenticationID( |
| | | String.format(o.getAuthenticationID(), data)); |
| | | sbr.setAuthenticationID(String.format(o.getAuthenticationID(), |
| | | data)); |
| | | } |
| | | if(o.getAuthorizationID() != null) |
| | | { |
| | | sbr.setAuthorizationID( |
| | | String.format(o.getAuthorizationID(), data)); |
| | | sbr.setAuthorizationID(String.format(o.getAuthorizationID(), data)); |
| | | } |
| | | } |
| | | if(successRecentCount.get() * ((float)invalidCredPercent/100) > |
| | | invalidCredRecentCount.get()) |
| | | if (useInvalidPassword) |
| | | { |
| | | sbr.setPassword("invalid-password".toCharArray()); |
| | | sbr.setPassword(invalidPassword); |
| | | } |
| | | else |
| | | { |
| | |
| | | CRAMMD5SASLBindRequest sbr = (CRAMMD5SASLBindRequest)br; |
| | | if (data != null && o.getAuthenticationID() != null) |
| | | { |
| | | sbr.setAuthenticationID( |
| | | String.format(o.getAuthenticationID(), data)); |
| | | sbr.setAuthenticationID(String.format(o.getAuthenticationID(), data)); |
| | | } |
| | | if(successRecentCount.get() * ((float)invalidCredPercent/100) > |
| | | invalidCredRecentCount.get()) |
| | | if (useInvalidPassword) |
| | | { |
| | | sbr.setPassword("invalid-password".toCharArray()); |
| | | sbr.setPassword(invalidPassword); |
| | | } |
| | | else |
| | | { |
| | |
| | | { |
| | | if(o.getAuthenticationID() != null) |
| | | { |
| | | sbr.setAuthenticationID( |
| | | String.format(o.getAuthenticationID(), data)); |
| | | sbr.setAuthenticationID(String.format(o.getAuthenticationID(), |
| | | data)); |
| | | } |
| | | if(o.getAuthorizationID() != null) |
| | | { |
| | | sbr.setAuthorizationID( |
| | | String.format(o.getAuthorizationID(), data)); |
| | | sbr.setAuthorizationID(String.format(o.getAuthorizationID(), data)); |
| | | } |
| | | } |
| | | if(successRecentCount.get() * ((float)invalidCredPercent/100) > |
| | | invalidCredRecentCount.get()) |
| | | if (useInvalidPassword) |
| | | { |
| | | sbr.setPassword("invalid-password".toCharArray()); |
| | | sbr.setPassword(invalidPassword); |
| | | } |
| | | else |
| | | { |
| | |
| | | { |
| | | if(o.getAuthenticationID() != null) |
| | | { |
| | | sbr.setAuthenticationID( |
| | | String.format(o.getAuthenticationID(), data)); |
| | | sbr.setAuthenticationID(String.format(o.getAuthenticationID(), |
| | | data)); |
| | | } |
| | | if(o.getAuthorizationID() != null) |
| | | { |
| | | sbr.setAuthorizationID( |
| | | String.format(o.getAuthorizationID(), data)); |
| | | sbr.setAuthorizationID(String.format(o.getAuthorizationID(), data)); |
| | | } |
| | | } |
| | | if(successRecentCount.get() * ((float)invalidCredPercent/100) > |
| | | invalidCredRecentCount.get()) |
| | | if (useInvalidPassword) |
| | | { |
| | | sbr.setPassword("invalid-password".toCharArray()); |
| | | sbr.setPassword(invalidPassword); |
| | | } |
| | | else |
| | | { |