From: Felix Schumacher Date: Wed, 6 Aug 2008 14:30:36 +0000 (+0200) Subject: jcifs-1.1.10 from tgz X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=d952cbe712df1647fdc1650e472669ade22c8946;p=jcifs_without_docs.git jcifs-1.1.10 from tgz Sun Apr 17 22:37:04 EDT 2005 jcifs-1.1.10 released The getChallengeForDomain code has been rewritten. It has been considerably simplified. It will now rotate through the first jcifs.netbios.lookupRespLimit domain controllers rather than try to grow and shrink the list depending on load. The lookupRespLimit property default has been reduced to 3. The timeout value for rebuilting the DC list has been increased from 20 minutes to 10 hours. This is calculated by multiplying jcifs.netvios.cachePolicy by 60 but the default in the SmbSession class is 60 * 10 meaning 10 minutes so 10 * 60 is 10 hours. Finally the NtlmChallenge class is now Serializeable for servers that are pedantic about what can be stored in a session. --- diff --git a/README.txt b/README.txt index 5feae4a..dc3683f 100644 --- a/README.txt +++ b/README.txt @@ -1,3 +1,17 @@ +Sun Apr 17 22:37:04 EDT 2005 +jcifs-1.1.10 released + +The getChallengeForDomain code has been rewritten. It has been considerably +simplified. It will now rotate through the first +jcifs.netbios.lookupRespLimit domain controllers rather than try to grow +and shrink the list depending on load. The lookupRespLimit property default +has been reduced to 3. The timeout value for rebuilting the DC list has +been increased from 20 minutes to 10 hours. This is calculated by +multiplying jcifs.netvios.cachePolicy by 60 but the default in the +SmbSession class is 60 * 10 meaning 10 minutes so 10 * 60 is 10 hours. +Finally the NtlmChallenge class is now Serializeable for servers that are +pedantic about what can be stored in a session. + Thu Feb 10 22:29:12 EST 2005 jcifs-1.1.8 released diff --git a/build.xml b/build.xml index e86087c..1d956ca 100644 --- a/build.xml +++ b/build.xml @@ -1,7 +1,7 @@ - - + + diff --git a/examples/AllocInfo.class b/examples/AllocInfo.class deleted file mode 100644 index d052675..0000000 Binary files a/examples/AllocInfo.class and /dev/null differ diff --git a/examples/Append.class b/examples/Append.class deleted file mode 100644 index d21f774..0000000 Binary files a/examples/Append.class and /dev/null differ diff --git a/examples/AuthListFiles.class b/examples/AuthListFiles.class deleted file mode 100644 index 851ae58..0000000 Binary files a/examples/AuthListFiles.class and /dev/null differ diff --git a/examples/CallNamedPipe.class b/examples/CallNamedPipe.class deleted file mode 100644 index 56a01f5..0000000 Binary files a/examples/CallNamedPipe.class and /dev/null differ diff --git a/examples/CopyTo.class b/examples/CopyTo.class deleted file mode 100644 index 1eec536..0000000 Binary files a/examples/CopyTo.class and /dev/null differ diff --git a/examples/CreateFile.class b/examples/CreateFile.class deleted file mode 100644 index 9ae7ab1..0000000 Binary files a/examples/CreateFile.class and /dev/null differ diff --git a/examples/Delete.class b/examples/Delete.class deleted file mode 100644 index b52be49..0000000 Binary files a/examples/Delete.class and /dev/null differ diff --git a/examples/Equals.class b/examples/Equals.class deleted file mode 100644 index c80c85f..0000000 Binary files a/examples/Equals.class and /dev/null differ diff --git a/examples/Exists.class b/examples/Exists.class deleted file mode 100644 index 9f03ca4..0000000 Binary files a/examples/Exists.class and /dev/null differ diff --git a/examples/FileInfo.class b/examples/FileInfo.class deleted file mode 100644 index d877f51..0000000 Binary files a/examples/FileInfo.class and /dev/null differ diff --git a/examples/FileOps.class b/examples/FileOps.class deleted file mode 100644 index 9a0e176..0000000 Binary files a/examples/FileOps.class and /dev/null differ diff --git a/examples/FilterFiles$BigFileFilter.class b/examples/FilterFiles$BigFileFilter.class deleted file mode 100644 index 1cd1710..0000000 Binary files a/examples/FilterFiles$BigFileFilter.class and /dev/null differ diff --git a/examples/FilterFiles$ShortFilenameFilter.class b/examples/FilterFiles$ShortFilenameFilter.class deleted file mode 100644 index 9260f70..0000000 Binary files a/examples/FilterFiles$ShortFilenameFilter.class and /dev/null differ diff --git a/examples/FilterFiles.class b/examples/FilterFiles.class deleted file mode 100644 index 12a853d..0000000 Binary files a/examples/FilterFiles.class and /dev/null differ diff --git a/examples/Format.class b/examples/Format.class deleted file mode 100644 index 998801f..0000000 Binary files a/examples/Format.class and /dev/null differ diff --git a/examples/Get.class b/examples/Get.class deleted file mode 100644 index 8192c4a..0000000 Binary files a/examples/Get.class and /dev/null differ diff --git a/examples/GetDate.class b/examples/GetDate.class deleted file mode 100644 index 8a82eaa..0000000 Binary files a/examples/GetDate.class and /dev/null differ diff --git a/examples/GetDfsPath.class b/examples/GetDfsPath.class deleted file mode 100644 index 751b59a..0000000 Binary files a/examples/GetDfsPath.class and /dev/null differ diff --git a/examples/GetType.class b/examples/GetType.class deleted file mode 100644 index 1028177..0000000 Binary files a/examples/GetType.class and /dev/null differ diff --git a/examples/GetURL.class b/examples/GetURL.class deleted file mode 100644 index e473c42..0000000 Binary files a/examples/GetURL.class and /dev/null differ diff --git a/examples/GrowWrite.class b/examples/GrowWrite.class deleted file mode 100644 index bb1d8f6..0000000 Binary files a/examples/GrowWrite.class and /dev/null differ diff --git a/examples/HttpURL.class b/examples/HttpURL.class deleted file mode 100644 index 55faf3c..0000000 Binary files a/examples/HttpURL.class and /dev/null differ diff --git a/examples/Interleave$IThread.class b/examples/Interleave$IThread.class deleted file mode 100644 index 12d7d51..0000000 Binary files a/examples/Interleave$IThread.class and /dev/null differ diff --git a/examples/Interleave.class b/examples/Interleave.class deleted file mode 100644 index 4ea28d5..0000000 Binary files a/examples/Interleave.class and /dev/null differ diff --git a/examples/IsDir.class b/examples/IsDir.class deleted file mode 100644 index 712a60e..0000000 Binary files a/examples/IsDir.class and /dev/null differ diff --git a/examples/Length.class b/examples/Length.class deleted file mode 100644 index b096ceb..0000000 Binary files a/examples/Length.class and /dev/null differ diff --git a/examples/List.class b/examples/List.class deleted file mode 100644 index 2d2e7b0..0000000 Binary files a/examples/List.class and /dev/null differ diff --git a/examples/ListFiles.class b/examples/ListFiles.class deleted file mode 100644 index 190cd04..0000000 Binary files a/examples/ListFiles.class and /dev/null differ diff --git a/examples/ListTypes.class b/examples/ListTypes.class deleted file mode 100644 index 6da499c..0000000 Binary files a/examples/ListTypes.class and /dev/null differ diff --git a/examples/Mkdir.class b/examples/Mkdir.class deleted file mode 100644 index 4c96536..0000000 Binary files a/examples/Mkdir.class and /dev/null differ diff --git a/examples/NodeStatus.class b/examples/NodeStatus.class deleted file mode 100644 index 12e8052..0000000 Binary files a/examples/NodeStatus.class and /dev/null differ diff --git a/examples/OpenExclusive.class b/examples/OpenExclusive.class deleted file mode 100644 index 1802220..0000000 Binary files a/examples/OpenExclusive.class and /dev/null differ diff --git a/examples/PeekNamedPipe$ReceiverThread.class b/examples/PeekNamedPipe$ReceiverThread.class deleted file mode 100644 index 642652c..0000000 Binary files a/examples/PeekNamedPipe$ReceiverThread.class and /dev/null differ diff --git a/examples/PeekNamedPipe.class b/examples/PeekNamedPipe.class deleted file mode 100644 index 3cebbd0..0000000 Binary files a/examples/PeekNamedPipe.class and /dev/null differ diff --git a/examples/PipeTalk$ReceiverThread.class b/examples/PipeTalk$ReceiverThread.class deleted file mode 100644 index d05ca7a..0000000 Binary files a/examples/PipeTalk$ReceiverThread.class and /dev/null differ diff --git a/examples/PipeTalk.class b/examples/PipeTalk.class deleted file mode 100644 index ccad890..0000000 Binary files a/examples/PipeTalk.class and /dev/null differ diff --git a/examples/Put.class b/examples/Put.class deleted file mode 100644 index 43b1e70..0000000 Binary files a/examples/Put.class and /dev/null differ diff --git a/examples/Query.class b/examples/Query.class deleted file mode 100644 index 0112790..0000000 Binary files a/examples/Query.class and /dev/null differ diff --git a/examples/RenameTo.class b/examples/RenameTo.class deleted file mode 100644 index c169e35..0000000 Binary files a/examples/RenameTo.class and /dev/null differ diff --git a/examples/SetAttrs.class b/examples/SetAttrs.class deleted file mode 100644 index d36bada..0000000 Binary files a/examples/SetAttrs.class and /dev/null differ diff --git a/examples/SetTime.class b/examples/SetTime.class deleted file mode 100644 index 79b5e36..0000000 Binary files a/examples/SetTime.class and /dev/null differ diff --git a/examples/SlowRead.class b/examples/SlowRead.class deleted file mode 100644 index de72174..0000000 Binary files a/examples/SlowRead.class and /dev/null differ diff --git a/examples/SlowWrite.class b/examples/SlowWrite.class deleted file mode 100644 index 84a1cff..0000000 Binary files a/examples/SlowWrite.class and /dev/null differ diff --git a/examples/SmbCrawler.class b/examples/SmbCrawler.class deleted file mode 100644 index 7b303b6..0000000 Binary files a/examples/SmbCrawler.class and /dev/null differ diff --git a/examples/SmbShell.class b/examples/SmbShell.class deleted file mode 100644 index b9096fa..0000000 Binary files a/examples/SmbShell.class and /dev/null differ diff --git a/examples/SmbTableFile.class b/examples/SmbTableFile.class deleted file mode 100644 index c1bfe46..0000000 Binary files a/examples/SmbTableFile.class and /dev/null differ diff --git a/examples/SmbTableFileRecord.class b/examples/SmbTableFileRecord.class deleted file mode 100644 index b5d68ff..0000000 Binary files a/examples/SmbTableFileRecord.class and /dev/null differ diff --git a/examples/T2Crawler$CrawlerThread.class b/examples/T2Crawler$CrawlerThread.class deleted file mode 100644 index 0b40e5c..0000000 Binary files a/examples/T2Crawler$CrawlerThread.class and /dev/null differ diff --git a/examples/T2Crawler$Semaphore.class b/examples/T2Crawler$Semaphore.class deleted file mode 100644 index af3b771..0000000 Binary files a/examples/T2Crawler$Semaphore.class and /dev/null differ diff --git a/examples/T2Crawler.class b/examples/T2Crawler.class deleted file mode 100644 index ffb3192..0000000 Binary files a/examples/T2Crawler.class and /dev/null differ diff --git a/examples/TestRandomAccess$TestRecord.class b/examples/TestRandomAccess$TestRecord.class deleted file mode 100644 index 872eb31..0000000 Binary files a/examples/TestRandomAccess$TestRecord.class and /dev/null differ diff --git a/examples/TestRandomAccess.class b/examples/TestRandomAccess.class deleted file mode 100644 index 5fdf0df..0000000 Binary files a/examples/TestRandomAccess.class and /dev/null differ diff --git a/examples/TestSmbURL.class b/examples/TestSmbURL.class deleted file mode 100644 index d73dd32..0000000 Binary files a/examples/TestSmbURL.class and /dev/null differ diff --git a/examples/TestUnicode.class b/examples/TestUnicode.class deleted file mode 100644 index 92304e8..0000000 Binary files a/examples/TestUnicode.class and /dev/null differ diff --git a/examples/ThreadedNbtQuery$QThread.class b/examples/ThreadedNbtQuery$QThread.class deleted file mode 100644 index 1259b6d..0000000 Binary files a/examples/ThreadedNbtQuery$QThread.class and /dev/null differ diff --git a/examples/ThreadedNbtQuery.class b/examples/ThreadedNbtQuery.class deleted file mode 100644 index 0d21e06..0000000 Binary files a/examples/ThreadedNbtQuery.class and /dev/null differ diff --git a/examples/ThreadedSmbCrawler$DirEntry.class b/examples/ThreadedSmbCrawler$DirEntry.class deleted file mode 100644 index f849d93..0000000 Binary files a/examples/ThreadedSmbCrawler$DirEntry.class and /dev/null differ diff --git a/examples/ThreadedSmbCrawler$SmbCrawlerThread.class b/examples/ThreadedSmbCrawler$SmbCrawlerThread.class deleted file mode 100644 index a95e988..0000000 Binary files a/examples/ThreadedSmbCrawler$SmbCrawlerThread.class and /dev/null differ diff --git a/examples/ThreadedSmbCrawler.class b/examples/ThreadedSmbCrawler.class deleted file mode 100644 index e0747bf..0000000 Binary files a/examples/ThreadedSmbCrawler.class and /dev/null differ diff --git a/examples/ThreadedUniQuery$QThread.class b/examples/ThreadedUniQuery$QThread.class deleted file mode 100644 index 02d02e0..0000000 Binary files a/examples/ThreadedUniQuery$QThread.class and /dev/null differ diff --git a/examples/ThreadedUniQuery.class b/examples/ThreadedUniQuery.class deleted file mode 100644 index 08632f7..0000000 Binary files a/examples/ThreadedUniQuery.class and /dev/null differ diff --git a/examples/Torture1.class b/examples/Torture1.class deleted file mode 100644 index 72d5f77..0000000 Binary files a/examples/Torture1.class and /dev/null differ diff --git a/examples/Torture2.class b/examples/Torture2.class deleted file mode 100644 index e688b4f..0000000 Binary files a/examples/Torture2.class and /dev/null differ diff --git a/examples/TortureTest5.class b/examples/TortureTest5.class deleted file mode 100644 index cadf7c2..0000000 Binary files a/examples/TortureTest5.class and /dev/null differ diff --git a/examples/TransactNamedPipe.class b/examples/TransactNamedPipe.class deleted file mode 100644 index 76f861c..0000000 Binary files a/examples/TransactNamedPipe.class and /dev/null differ diff --git a/examples/URLTest.class b/examples/URLTest.class deleted file mode 100644 index 5263435..0000000 Binary files a/examples/URLTest.class and /dev/null differ diff --git a/examples/VerifyGuest.class b/examples/VerifyGuest.class deleted file mode 100644 index 6a8ce08..0000000 Binary files a/examples/VerifyGuest.class and /dev/null differ diff --git a/examples/VerifyIO.class b/examples/VerifyIO.class deleted file mode 100644 index 1168477..0000000 Binary files a/examples/VerifyIO.class and /dev/null differ diff --git a/examples/VerifyReads.class b/examples/VerifyReads.class deleted file mode 100644 index ff0d0a1..0000000 Binary files a/examples/VerifyReads.class and /dev/null differ diff --git a/examples/Worker.class b/examples/Worker.class deleted file mode 100644 index 25fa3b2..0000000 Binary files a/examples/Worker.class and /dev/null differ diff --git a/examples/m31_gendler_big.jpg b/examples/m31_gendler_big.jpg deleted file mode 100644 index bcbb749..0000000 Binary files a/examples/m31_gendler_big.jpg and /dev/null differ diff --git a/src/jcifs/smb/NtlmChallenge.java b/src/jcifs/smb/NtlmChallenge.java index c5c0874..0d9ce62 100644 --- a/src/jcifs/smb/NtlmChallenge.java +++ b/src/jcifs/smb/NtlmChallenge.java @@ -18,10 +18,11 @@ package jcifs.smb; -import jcifs.UniAddress; +import java.io.Serializable; import jcifs.util.Hexdump; +import jcifs.UniAddress; -public final class NtlmChallenge { +public final class NtlmChallenge implements Serializable { public byte[] challenge; public UniAddress dc; diff --git a/src/jcifs/smb/SmbSession.java b/src/jcifs/smb/SmbSession.java index 5ef8431..dc5dd15 100644 --- a/src/jcifs/smb/SmbSession.java +++ b/src/jcifs/smb/SmbSession.java @@ -52,104 +52,79 @@ changed without changing init parameters or reinitializing the webapp. public final class SmbSession { - private static final String LOGON_SHARE = Config.getProperty( "jcifs.smb.client.logonShare", null ); - private static final int LOOKUP_RESP_LIMIT = jcifs.Config.getInt( "jcifs.netbios.lookupRespLimit", 5 ); - private static final String DOMAIN = Config.getProperty("jcifs.smb.client.domain", null); - private static final String USERNAME = Config.getProperty("jcifs.smb.client.username", null); - private static final int CACHE_POLICY = Config.getInt( "jcifs.netbios.cachePolicy", 1200 ); + private static final String LOGON_SHARE = + Config.getProperty( "jcifs.smb.client.logonShare", null ); + private static final int LOOKUP_RESP_LIMIT = + Config.getInt( "jcifs.netbios.lookupRespLimit", 3 ); + private static final String DOMAIN = + Config.getProperty("jcifs.smb.client.domain", null); + private static final String USERNAME = + Config.getProperty("jcifs.smb.client.username", null); + private static final int CACHE_POLICY = + Config.getInt( "jcifs.netbios.cachePolicy", 60 * 10 ) * 60; /* 10 hours */ - static long dc_list_expiration; static NbtAddress[] dc_list = null; - static int dc_list_index; /* always less than dc_list_range */ - static int dc_list_range = 1; /* always less than LOOKUP_RESP_LIMIT */ - - static void incr_dc_list_range() { - if( dc_list_range < LOOKUP_RESP_LIMIT && - dc_list_range < dc_list.length ) { - dc_list_range++; + static long dc_list_expiration; + static int dc_list_counter; + + private static NtlmChallenge interrogate( NbtAddress addr ) throws SmbException { + UniAddress dc = new UniAddress( addr ); + SmbTransport trans = SmbTransport.getSmbTransport( dc, 0 ); + if (USERNAME == null) { + trans.negotiate(); + if (SmbTransport.log.level > 2) + SmbTransport.log.println( + "Default credentials (jcifs.smb.client.username/password)" + + " not specified. SMB signing may not work propertly." + + " Skipping DC interrogation." ); + } else { + SmbSession ssn = trans.getSmbSession( NtlmPasswordAuthentication.DEFAULT ); + ssn.getSmbTree( LOGON_SHARE, null ).treeConnect( null, null ); } + return new NtlmChallenge( trans.server.encryptionKey, dc ); } public static NtlmChallenge getChallengeForDomain() throws SmbException, UnknownHostException { - int starting_index; - if( DOMAIN == null ) { throw new SmbException( "A domain was not specified" ); } -synchronized( DOMAIN ) { - if( dc_list_expiration < System.currentTimeMillis() ) { - dc_list_expiration = System.currentTimeMillis() + CACHE_POLICY * 1000L; - - if( SmbTransport.log.level > 2 ) { - SmbTransport.log.println( (new java.util.Date()) + - ": LOGON_SHARE=" + LOGON_SHARE + - ",LOOKUP_RESP_LIMIT=" + LOOKUP_RESP_LIMIT + - ",DOMAIN=" + DOMAIN + - ",USERNAME=" + USERNAME + - ",CACHE_POLICY=" + CACHE_POLICY + - ",dc_list.length=" + (dc_list == null ? 0 : dc_list.length) + - ",dc_list_range=" + dc_list_range + - ",dc_list_index=" + dc_list_index ); - } - - NbtAddress[] new_dc_list = NbtAddress.getAllByName( DOMAIN, 0x1C, null, null ); - if( new_dc_list == null) { - dc_list_expiration = System.currentTimeMillis() + 10000; /* 10sec */ - throw new UnknownHostException( DOMAIN ); - } else if( new_dc_list.length >= dc_list_range ) { - dc_list = new_dc_list; - } - if( dc_list_range > 1 ) { - dc_list_range /= 2; /* shrink dc_list_range */ + synchronized (DOMAIN) { + long now = System.currentTimeMillis(); + if (dc_list_expiration < now) { + dc_list_expiration = now + CACHE_POLICY * 1000L; + NbtAddress[] list = NbtAddress.getAllByName( DOMAIN, 0x1C, null, null ); + if (list != null && list.length > 0) { + dc_list = list; + } else { /* keep using the old list */ + dc_list_expiration = now + 1000 * 60 * 15; /* 15 min */ + if (SmbTransport.log.level > 1) { + SmbTransport.log.println( "Failed to retrieve DC list from WINS" ); + } + } } - } - starting_index = dc_list_index; - do { - if( dc_list_index == dc_list_range ) { - dc_list_index = 0; - } - NbtAddress addr = dc_list[dc_list_index]; - if( addr != null ) { - try { - UniAddress dc = new UniAddress( addr ); - SmbTransport trans = SmbTransport.getSmbTransport( dc, 0 ); - if( USERNAME == null ) { - if( SmbTransport.log.level > 2 ) - SmbTransport.log.println( - "Default credentials (jcifs.smb.client.username/password)" + - " not specified. SMB signing may not work propertly." + - " Skipping DC interrogation." ); - trans.negotiate(); - } else { - trans.getSmbSession( NtlmPasswordAuthentication.DEFAULT ).getSmbTree( - LOGON_SHARE, null ).treeConnect( null, null ); + int max = Math.min( dc_list.length, LOOKUP_RESP_LIMIT ); + for (int j = 0; j < max; j++) { + int i = dc_list_counter++ % max; + if (dc_list[i] != null) { + try { + return interrogate( dc_list[i] ); + } catch (SmbException se) { + if (SmbTransport.log.level > 1) + SmbTransport.log.println( "Failed validate DC: " + dc_list[i] + + ": " + se.getMessage() ); } -synchronized( trans ) { - if( trans.sessions.size() > (trans.SSN_LIMIT / 10)) { - incr_dc_list_range(); - } -} - dc_list_index++; - return new NtlmChallenge( trans.server.encryptionKey, dc ); - } catch( SmbException se ) { - if( SmbTransport.log.level > 1 ) - SmbTransport.log.println( "Failed validate DC: " + addr + - ": " + se.getMessage() ); + dc_list[i] = null; } - dc_list[dc_list_index] = null; /* dc no good */ - incr_dc_list_range(); } - dc_list_index++; - } while( dc_list_index != starting_index ); -} - dc_list_expiration = System.currentTimeMillis() + 10000; /* 10sec */ + dc_list_expiration = now + 1000 * 60 * 15; /* 15 min */ + } + throw new UnknownHostException( "Failed to negotiate with a suitable domain controller for " + DOMAIN ); } - public static byte[] getChallenge( UniAddress dc ) throws SmbException, UnknownHostException { return getChallenge(dc, 0);