[jcifs] ConcurrentModification exception from SmbTransport using examples/SmbCrawler

Michael B Allen mba2000 at ioplex.com
Tue Sep 30 13:08:25 EST 2003

Just a few observations;

First, SmbCrawler is single threaded so it's not clear to me where the
"ConcurrentModification" is coming from. It could be the transport thread
is calling tryClose which begins to iterate over the sessions calling
logoff() on each which instructs the sessions to issue a new request back
into the transport but it's still not clear why that would mess with any
sessions. It think Eric's patch might be right for the concurrency issue
but if it is we might as well just make tryClose() syncronized. We
couldn't do that before the last concurrency problem but now that everyone
locks on the transport object I think we can make it syncronized now. I
have to think about that some more.

Second, Gary is not using any credentials so the initial IPC$ connect
fails. The second using NtlmPasswordAuthentication.NULL credentials which

It could be that the "", "", "" credentials have special signing semantics
but it might also be that the Unable to verify signature problem is an
artifact of yet another error because I get the same message when trying
to connect with GUEST credentials which on my network has been disabled:

$ java -Djcifs.properties=../miallen.prp SmbCrawler smb://miallen2/pub/ 2
Exception in thread "main" jcifs.smb.SmbAuthException: The user account
has expired
        at jcifs.smb.SmbTransport.send(SmbTransport.java:655)
        at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:135)
        at jcifs.smb.SmbSession.send(SmbSession.java:102)
        at jcifs.smb.SmbTree.treeConnect(SmbTree.java:124)
        at jcifs.smb.SmbFile.connect(SmbFile.java:579)
        at jcifs.smb.SmbFile.connect0(SmbFile.java:549)
        at jcifs.smb.SmbFile.sendTransaction(SmbFile.java:525)
        at jcifs.smb.SmbFile.listFiles(SmbFile.java:1446)
        at jcifs.smb.SmbFile.listFiles(SmbFile.java:1422)
        at jcifs.smb.SmbFile.listFiles(SmbFile.java:1303)
        at SmbCrawler.traverse(SmbCrawler.java:21)
        at SmbCrawler.main(SmbCrawler.java:41)
Sep 29 22:42:22.172 - exception reading from socket input:
java.io.IOException: Unverifiable signature.
        at jcifs.smb.SmbTransport.verify(SmbTransport.java:542)
        at jcifs.smb.SmbTransport.run(SmbTransport.java:421)
        at java.lang.Thread.run(Thread.java:479)

Otherwise I'm still looking...


A program should be written to  model the concepts of the task it
performs rather than the physical world or a process because this
maximizes the  potential for it  to be applied  to tasks that are
conceptually similar and, more  important, to tasks that have not
yet been conceived.

More information about the jcifs mailing list