[ https://issues.apache.org/jira/browse/DIRKRB-767?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Colm O hEigeartaigh reassigned DIRKRB-767: ------------------------------------------ Assignee: Colm O hEigeartaigh > data race when multi KrbClients visit KdcServer > ----------------------------------------------- > > Key: DIRKRB-767 > URL: https://issues.apache.org/jira/browse/DIRKRB-767 > Project: Directory Kerberos > Issue Type: Bug > Affects Versions: 2.0.3 > Reporter: lujie > Assignee: Colm O hEigeartaigh > Priority: Minor > Fix For: 2.1.0 > > Time Spent: 20m > Remaining Estimate: 0h > > when KDCServer started, it will run a thread to check if has a client request > in > org.apache.kerby.kerberos.kerb.transport.KdcNetwork.run() method. > *server test code:* > {code:java} > // server test code > import org.apache.kerby.kerberos.kerb.KrbException; > import org.apache.kerby.kerberos.kerb.server.SimpleKdcServer; > public class TestServer2 { > public static void main(String[] args) throws KrbException { > SimpleKdcServer simpleKdcServer = new SimpleKdcServer(); > simpleKdcServer.setKdcHost("0.0.0.0"); > simpleKdcServer.setKdcRealm("service.ws.apache.org"); > simpleKdcServer.setKdcTcpPort(12345); > simpleKdcServer.setAllowUdp(true); > simpleKdcServer.setKdcUdpPort(12346); > simpleKdcServer.init(); > // Create principals > String alice = "al...@service.ws.apache.org"; > String bob = "bob/service.ws.apache....@service.ws.apache.org"; > // simpleKdcServer.set > simpleKdcServer.createPrincipal(alice, "alice"); > simpleKdcServer.createPrincipal(bob,"bob"); > simpleKdcServer.start(); > } > } {code} > *client test Code* > {code:java} > // client test Code > import org.apache.kerby.kerberos.kerb.KrbException; > import org.apache.kerby.kerberos.kerb.client.KrbClient; > import org.apache.kerby.kerberos.kerb.client.KrbPkinitClient; > import org.apache.kerby.kerberos.kerb.type.ticket.SgtTicket; > import org.apache.kerby.kerberos.kerb.type.ticket.TgtTicket; > public class TestClient3 { > public static void main(String[] args) { > for (int i = 0; i < 10; i++) { > System.out.println(i); > new Thread(()->{ > try { > KrbClient client = new KrbClient(); > client.setKdcHost("0.0.0.0"); > client.setKdcTcpPort(12345); > client.setKdcUdpPort(12346); > client.setKdcRealm("TEST2.COM"); > client.init(); > TgtTicket tgt; > SgtTicket tkt; > tgt = client.requestTgt("al...@service.ws.apache.org", > "alice"); > tkt = client.requestSgt(tgt, > "bob/service.ws.apache....@service.ws.apache.org"); > } catch (KrbException e) { > } > }).start(); > } > } > } > {code} > *method : > org.apache.kerby.kerberos.kerb.server.preauth.pkinit.PkinitPreauth.initWith(KdcContext > kdcContext)* > *In order to make the results more visible, I inserted several lines of code, > such as {{System.out.println()}} and {{{}Thread.sleep(new > Random().nextInt(10)){}}}. Please let me know if there are any syntax errors.* > {code:java} > public void initWith(KdcContext kdcContext) { > super.initWith(kdcContext); > PkinitKdcContext tmp = new PkinitKdcContext(); > tmp.realm = kdcContext.getKdcRealm(); > String pkinitIdentity = kdcContext.getConfig().getPkinitIdentity(); > tmp.identityOpts.setIdentity(pkinitIdentity); > System.out.println("start::" +Thread.currentThread().getName()+ " > "+System.identityHashCode(pkinitContexts)+" "+ System.currentTimeMillis()); > try { > Thread.sleep(new Random().nextInt(10)); > } catch (InterruptedException e) { > throw new RuntimeException(e); > } > pkinitContexts.put(kdcContext.getKdcRealm(), tmp); > System.out.println("end::" +Thread.currentThread().getName()+ " > "+System.identityHashCode(pkinitContexts)+" "+ System.currentTimeMillis()); > }{code} > After run the server and client, we will get the part of result: > {panel} > start::pool-1-thread-6 357333366 1688116403609 > start::pool-1-thread-4 357333366 1688116403609 > end::pool-1-thread-6 357333366 1688116403610 > start::pool-1-thread-1 357333366 1688116403609 > start::pool-1-thread-9 357333366 1688116403609 > start::pool-1-thread-2 357333366 1688116403609 > start::pool-1-thread-7 357333366 1688116403609 > start::pool-1-thread-5 357333366 1688116403609 > start::pool-1-thread-3 357333366 1688116403609 > start::pool-1-thread-10 357333366 1688116403609 > start::pool-1-thread-8 357333366 1688116403609 > end::pool-1-thread-5 357333366 1688116403613 > end::pool-1-thread-2 357333366 1688116403613 > end::pool-1-thread-4 357333366 1688116403614 > end::pool-1-thread-1 357333366 1688116403614 > end::pool-1-thread-7 357333366 1688116403617 > end::pool-1-thread-10 357333366 1688116403617 > end::pool-1-thread-3 357333366 1688116403617 > end::pool-1-thread-9 357333366 1688116403619 > end::pool-1-thread-8 357333366 1688116403619 > start::pool-1-thread-10 357333366 1688116403715 > start::pool-1-thread-6 357333366 1688116403716 > start::pool-1-thread-2 357333366 1688116403716 > start::pool-1-thread-4 357333366 1688116403715 > start::pool-1-thread-8 357333366 1688116403715 > start::pool-1-thread-3 357333366 1688116403716 > start::pool-1-thread-9 357333366 1688116403715 > start::pool-1-thread-1 357333366 1688116403715 > start::pool-1-thread-5 357333366 1688116403715 > end::pool-1-thread-5 357333366 1688116403716 > start::pool-1-thread-7 357333366 1688116403716 > end::pool-1-thread-10 357333366 1688116403719 > end::pool-1-thread-2 357333366 1688116403719 > end::pool-1-thread-6 357333366 1688116403719 > end::pool-1-thread-1 357333366 1688116403721 > end::pool-1-thread-7 357333366 1688116403721 > end::pool-1-thread-8 357333366 1688116403724 > end::pool-1-thread-4 357333366 1688116403726 > end::pool-1-thread-3 357333366 1688116403726 > end::pool-1-thread-9 357333366 1688116403726 > {panel} > Different thread visits pkinitContexts object without any lock, then will > couses a data race. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@directory.apache.org For additional commands, e-mail: dev-h...@directory.apache.org