From 522986bb8b0153d268faa72d313010d92938c4d0 Mon Sep 17 00:00:00 2001 From: Felix Schumacher Date: Wed, 6 Aug 2008 16:44:25 +0200 Subject: [PATCH] jcifs-1.2.18e from tgz Wed Feb 6 00:05:42 EST 2008 jcifs-1.2.18e released The SID.getServerSid() method could fail with NetApp servers due to a "generic" mask values. The mask has been changed to 0x00000001 which corresponds to an LsaOpenPolicy mask of POLICY_VIEW_LOCAL_INFORMATION. The LsaPolicyHandle class would not throw an error if the LsarOpenPolicy2 call failed. This has been fixed. The SmbFile constructor could inappropriately URL decode the authority component of SMB URLs. The NTLM HTTP Filter documentation has been updated. An Invalid state: 4 error has been fixed. A NetBIOS name service issue caused by Jetdirect printers has been fixed. An ArrayIndexOutOfBounds exception in the SmbException class has been fixed. A NullPointerException in SmbSession.getChallengeForDomain() has been fixed. A NullPointerException in NbtAddress related to hosts without adequate localhost address configuration has been fixed. An ArrayIndexOutOfBounds exception could be thrown if a server requires NTLMv2. This exception has been replaced with a more informative one. The SmbSessionSetup constructor will now compare the challenge and encryptionKey using Arrays.equals instead of == to satisfy unforseen use-cases that otherwise trigger an NT_STATUS_ACCESS_VIOLATION. If a share was unshared while JCIFS was in the middle of reading files from it, the transport could enter an error state from which it could not immediately recover if the share was restored. A small change to SmbTransport.doRecv() fixes this problem. Tue Jun 26 16:11:31 EDT 2007 The DCERPC bind did not exactly mimic Windows which uses SMB_COM_{WRITE,READ}_ANDX. We were using TransactNmPipe throughout which could result in an 'Incorrect function' error when querying the LSA on a NetApp server. JCIFS now implements the bind exactly like Windows to help ensure compatibility with other servers. A minor performance flaw in the DCERPC code was found and fixed. --- README.txt | 73 ++-- build.xml | 4 +- examples/AclCrawler.class | Bin 1544 -> 0 bytes examples/AllocInfo.class | Bin 546 -> 0 bytes examples/Append.class | Bin 1021 -> 0 bytes examples/AuthListFiles.class | Bin 1971 -> 0 bytes examples/CallNamedPipe.class | Bin 1431 -> 0 bytes examples/CopyTo.class | Bin 445 -> 0 bytes examples/CountPerms.class | Bin 2932 -> 0 bytes examples/CreateFile.class | Bin 425 -> 0 bytes examples/Delete.class | Bin 404 -> 0 bytes examples/Equals.class | Bin 636 -> 0 bytes examples/Exists.class | Bin 762 -> 0 bytes examples/FileInfo.class | Bin 4248 -> 0 bytes examples/FileOps.class | Bin 7889 -> 0 bytes examples/FilterFiles$BigFileFilter.class | Bin 502 -> 0 bytes examples/FilterFiles$ShortFilenameFilter.class | Bin 524 -> 0 bytes examples/FilterFiles.class | Bin 1325 -> 0 bytes examples/Format.class | Bin 8247 -> 0 bytes examples/Get.class | Bin 1313 -> 0 bytes examples/GetDate.class | Bin 831 -> 0 bytes examples/GetDfsPath.class | Bin 552 -> 0 bytes examples/GetGroupMemberSidsFromURL.class | Bin 1663 -> 0 bytes examples/GetLocalGroupMemberSidsFromURL.java | 34 ++ examples/GetSecurity.class | Bin 651 -> 0 bytes examples/GetServerSidFromURL.java | 20 + examples/GetShareSecurity.class | Bin 801 -> 0 bytes examples/GetType.class | Bin 1590 -> 0 bytes examples/GetURL.class | Bin 784 -> 0 bytes examples/GrowWrite.class | Bin 1066 -> 0 bytes examples/HttpURL.class | Bin 633 -> 0 bytes examples/Interleave$IThread.class | Bin 940 -> 0 bytes examples/Interleave.class | Bin 990 -> 0 bytes examples/InterruptTest.class | Bin 1239 -> 0 bytes examples/IsDir.class | Bin 533 -> 0 bytes examples/LargeListFiles.class | Bin 1427 -> 0 bytes examples/Length.class | Bin 749 -> 0 bytes examples/List.class | Bin 977 -> 0 bytes examples/ListACL.class | Bin 1420 -> 0 bytes examples/ListFiles.class | Bin 1016 -> 0 bytes examples/ListTypes.class | Bin 1366 -> 0 bytes examples/Mkdir.class | Bin 395 -> 0 bytes examples/NodeStatus.class | Bin 598 -> 0 bytes examples/OpenExclusive.class | Bin 779 -> 0 bytes examples/PeekNamedPipe$ReceiverThread.class | Bin 1229 -> 0 bytes examples/PeekNamedPipe.class | Bin 1282 -> 0 bytes examples/PipeTalk$ReceiverThread.class | Bin 823 -> 0 bytes examples/PipeTalk.class | Bin 1391 -> 0 bytes examples/Put.class | Bin 1305 -> 0 bytes examples/Query.class | Bin 796 -> 0 bytes examples/RenameTo.class | Bin 451 -> 0 bytes examples/SetAttrs.class | Bin 760 -> 0 bytes examples/SetTime.class | Bin 479 -> 0 bytes examples/SidCacheTest.class | Bin 919 -> 0 bytes examples/SidCrawler.class | Bin 1932 -> 0 bytes examples/SidLookup.class | Bin 1338 -> 0 bytes examples/SlowRead.class | Bin 680 -> 0 bytes examples/SlowWrite.class | Bin 820 -> 0 bytes examples/SmbCrawler.class | Bin 1468 -> 0 bytes examples/SmbShell.class | Bin 4776 -> 0 bytes examples/SmbTableFile.class | Bin 2375 -> 0 bytes examples/SmbTableFileRecord.class | Bin 345 -> 0 bytes examples/SmbThreadTest.class | Bin 3481 -> 0 bytes examples/T2Crawler$CrawlerThread.class | Bin 1328 -> 0 bytes examples/T2Crawler$Semaphore.class | Bin 742 -> 0 bytes examples/T2Crawler.class | Bin 1540 -> 0 bytes examples/TestRandomAccess$TestRecord.class | Bin 2092 -> 0 bytes examples/TestRandomAccess.class | Bin 1885 -> 0 bytes examples/TestSmbURL.class | Bin 4023 -> 0 bytes examples/TestUnicode.class | Bin 1907 -> 0 bytes examples/ThreadedNbtQuery$QThread.class | Bin 985 -> 0 bytes examples/ThreadedNbtQuery.class | Bin 719 -> 0 bytes examples/ThreadedSmbCrawler$DirEntry.class | Bin 502 -> 0 bytes examples/ThreadedSmbCrawler$SmbCrawlerThread.class | Bin 2087 -> 0 bytes examples/ThreadedSmbCrawler.class | Bin 1909 -> 0 bytes examples/ThreadedUniQuery$QThread.class | Bin 1167 -> 0 bytes examples/ThreadedUniQuery.class | Bin 873 -> 0 bytes examples/Torture1.class | Bin 3005 -> 0 bytes examples/Torture2.class | Bin 3481 -> 0 bytes examples/TortureTest5.class | Bin 924 -> 0 bytes examples/TransactNamedPipe.class | Bin 1439 -> 0 bytes examples/URLTest.class | Bin 1616 -> 0 bytes examples/VerifyGuest.class | Bin 1442 -> 0 bytes examples/VerifyIO.class | Bin 2139 -> 0 bytes examples/VerifyReads.class | Bin 2215 -> 0 bytes examples/Worker.class | Bin 451 -> 0 bytes src/jcifs/dcerpc/msrpc/LsaPolicyHandle.java | 4 + ...licy2.java => MsrpcQueryInformationPolicy.java} | 4 +- src/jcifs/netbios/NameServiceClient.java | 17 +- .../netbios/NameServiceClient.java-2008-02-05 | 431 ++++++++++++++++++++ src/jcifs/netbios/NbtAddress.java | 9 + src/jcifs/smb/.SmbConstants.java.swp | Bin 16384 -> 0 bytes src/jcifs/smb/DosError.java | 4 +- src/jcifs/smb/Handler.java | 47 +-- src/jcifs/smb/NtlmPasswordAuthentication.java | 42 ++ src/jcifs/smb/NtlmPasswordAuthentication.java.orig | 441 +++++++++++++++++++++ src/jcifs/smb/SID.java | 7 +- src/jcifs/smb/SigningDigest.java | 4 +- src/jcifs/smb/SmbComSessionSetupAndX.java | 4 +- src/jcifs/smb/SmbConstants.java | 1 + src/jcifs/smb/SmbException.java | 14 +- src/jcifs/smb/SmbSession.java | 17 +- src/jcifs/smb/SmbSession.java.orig | 327 +++++++++++++++ src/jcifs/smb/SmbTransport.java | 12 +- src/jcifs/util/transport/Transport.java | 2 +- 105 files changed, 1406 insertions(+), 112 deletions(-) delete mode 100644 examples/AclCrawler.class delete mode 100644 examples/AllocInfo.class delete mode 100644 examples/Append.class delete mode 100644 examples/AuthListFiles.class delete mode 100644 examples/CallNamedPipe.class delete mode 100644 examples/CopyTo.class delete mode 100644 examples/CountPerms.class delete mode 100644 examples/CreateFile.class delete mode 100644 examples/Delete.class delete mode 100644 examples/Equals.class delete mode 100644 examples/Exists.class delete mode 100644 examples/FileInfo.class delete mode 100644 examples/FileOps.class delete mode 100644 examples/FilterFiles$BigFileFilter.class delete mode 100644 examples/FilterFiles$ShortFilenameFilter.class delete mode 100644 examples/FilterFiles.class delete mode 100644 examples/Format.class delete mode 100644 examples/Get.class delete mode 100644 examples/GetDate.class delete mode 100644 examples/GetDfsPath.class delete mode 100644 examples/GetGroupMemberSidsFromURL.class create mode 100644 examples/GetLocalGroupMemberSidsFromURL.java delete mode 100644 examples/GetSecurity.class create mode 100644 examples/GetServerSidFromURL.java delete mode 100644 examples/GetShareSecurity.class delete mode 100644 examples/GetType.class delete mode 100644 examples/GetURL.class delete mode 100644 examples/GrowWrite.class delete mode 100644 examples/HttpURL.class delete mode 100644 examples/Interleave$IThread.class delete mode 100644 examples/Interleave.class delete mode 100644 examples/InterruptTest.class delete mode 100644 examples/IsDir.class delete mode 100644 examples/LargeListFiles.class delete mode 100644 examples/Length.class delete mode 100644 examples/List.class delete mode 100644 examples/ListACL.class delete mode 100644 examples/ListFiles.class delete mode 100644 examples/ListTypes.class delete mode 100644 examples/Mkdir.class delete mode 100644 examples/NodeStatus.class delete mode 100644 examples/OpenExclusive.class delete mode 100644 examples/PeekNamedPipe$ReceiverThread.class delete mode 100644 examples/PeekNamedPipe.class delete mode 100644 examples/PipeTalk$ReceiverThread.class delete mode 100644 examples/PipeTalk.class delete mode 100644 examples/Put.class delete mode 100644 examples/Query.class delete mode 100644 examples/RenameTo.class delete mode 100644 examples/SetAttrs.class delete mode 100644 examples/SetTime.class delete mode 100644 examples/SidCacheTest.class delete mode 100644 examples/SidCrawler.class delete mode 100644 examples/SidLookup.class delete mode 100644 examples/SlowRead.class delete mode 100644 examples/SlowWrite.class delete mode 100644 examples/SmbCrawler.class delete mode 100644 examples/SmbShell.class delete mode 100644 examples/SmbTableFile.class delete mode 100644 examples/SmbTableFileRecord.class delete mode 100644 examples/SmbThreadTest.class delete mode 100644 examples/T2Crawler$CrawlerThread.class delete mode 100644 examples/T2Crawler$Semaphore.class delete mode 100644 examples/T2Crawler.class delete mode 100644 examples/TestRandomAccess$TestRecord.class delete mode 100644 examples/TestRandomAccess.class delete mode 100644 examples/TestSmbURL.class delete mode 100644 examples/TestUnicode.class delete mode 100644 examples/ThreadedNbtQuery$QThread.class delete mode 100644 examples/ThreadedNbtQuery.class delete mode 100644 examples/ThreadedSmbCrawler$DirEntry.class delete mode 100644 examples/ThreadedSmbCrawler$SmbCrawlerThread.class delete mode 100644 examples/ThreadedSmbCrawler.class delete mode 100644 examples/ThreadedUniQuery$QThread.class delete mode 100644 examples/ThreadedUniQuery.class delete mode 100644 examples/Torture1.class delete mode 100644 examples/Torture2.class delete mode 100644 examples/TortureTest5.class delete mode 100644 examples/TransactNamedPipe.class delete mode 100644 examples/URLTest.class delete mode 100644 examples/VerifyGuest.class delete mode 100644 examples/VerifyIO.class delete mode 100644 examples/VerifyReads.class delete mode 100644 examples/Worker.class rename src/jcifs/dcerpc/msrpc/{MsrpcQueryInformationPolicy2.java => MsrpcQueryInformationPolicy.java} (87%) create mode 100644 src/jcifs/netbios/NameServiceClient.java-2008-02-05 delete mode 100644 src/jcifs/smb/.SmbConstants.java.swp create mode 100644 src/jcifs/smb/NtlmPasswordAuthentication.java.orig create mode 100644 src/jcifs/smb/SmbSession.java.orig diff --git a/README.txt b/README.txt index 15693fc..68fc403 100644 --- a/README.txt +++ b/README.txt @@ -1,34 +1,44 @@ -Wed Aug 15 12:47:55 EDT 2007 -jcifs-1.2.17 released +Wed Feb 6 00:05:42 EST 2008 +jcifs-1.2.18e released -A try/catch that was accedentally added in a previous release has been -removed. +The SID.getServerSid() method could fail with NetApp servers due to a +"generic" mask values. The mask has been changed to 0x00000001 which +corresponds to an LsaOpenPolicy mask of POLICY_VIEW_LOCAL_INFORMATION. -Thu Aug 2 12:00:00 EDT 2007 -jcifs-1.2.16 released +The LsaPolicyHandle class would not throw an error if the LsarOpenPolicy2 +call failed. This has been fixed. -With this release, JCIFS now supports domain-based DFS. With -domain-based DFS, clients access DFS roots under the DNS domain name -like \\example.com\dfs\foo so that users do not need to remember server -names. However, for clients to work with these DFS roots they have to -be prepared to connect to each domain controller as necessary to find -the target share and successfully authenticate. JCIFS now includes this -retry logic. JCIFS will also do something that it seems even Windows -clients do not do - if you list the shares of a domain (e.g. (new -SmbFile("smb://example.com/")).listFiles()), JCIFS will build a merged -list of all shares on all domain controllers. +The SmbFile constructor could inappropriately URL decode the authority +component of SMB URLs. -Note that these changes are fairly significant. Whenever JCIFS tries to -connect to a server this new logic is used. So if anyone notices anything -out of the ordinary please report it to the JCIFS mailaing list. +The NTLM HTTP Filter documentation has been updated. -Mon Jul 16 13:26:26 EDT 2007 -jcifs-1.2.15 released +An Invalid state: 4 error has been fixed. -This release includes some significant changes. Most of these changes -are related to NetApp compatibility. The changes in this release are: +A NetBIOS name service issue caused by Jetdirect printers has been fixed. -An SMB signing failure related to DFS has been fixed. +An ArrayIndexOutOfBounds exception in the SmbException class has been +fixed. + +A NullPointerException in SmbSession.getChallengeForDomain() has been +fixed. + +A NullPointerException in NbtAddress related to hosts without adequate +localhost address configuration has been fixed. + +An ArrayIndexOutOfBounds exception could be thrown if a server requires +NTLMv2. This exception has been replaced with a more informative one. + +The SmbSessionSetup constructor will now compare the challenge and +encryptionKey using Arrays.equals instead of == to satisfy unforseen +use-cases that otherwise trigger an NT_STATUS_ACCESS_VIOLATION. + +If a share was unshared while JCIFS was in the middle of reading files +from it, the transport could enter an error state from which it could +not immediately recover if the share was restored. A small change to +SmbTransport.doRecv() fixes this problem. + +Tue Jun 26 16:11:31 EDT 2007 The DCERPC bind did not exactly mimic Windows which uses SMB_COM_{WRITE,READ}_ANDX. We were using TransactNmPipe throughout which @@ -36,21 +46,6 @@ could result in an 'Incorrect function' error when querying the LSA on a NetApp server. JCIFS now implements the bind exactly like Windows to help ensure compatibility with other servers. -Other changes related to NetApp compatibility include falling back to -SamrConnect2 if an DCERPC_FAULT_OP_RNG_ERROR error occurs, more closely -mimicing the SMB_COM_NT_CREATE_ANDX "extended" response, adjusting various -RPC handle operation access masks, uncommenting some padding code that -was commented out for what appeared to be a NetWare problem, disabling -some logic to used port 139 if the jcifs.netbios.hostname was set and -finally adding code to include LsarQosInfo structures in the MSRPC bind. - -Some new error code information has been added. - -Constants for common SIDs have been added to the SID class. - -The SID.getGroupMemberSids() method will now return an empty SID array -if the SID is not of type SID_TYPE_DOM_GRP or SID_TYPE_ALIAS. - A minor performance flaw in the DCERPC code was found and fixed. Wed Jun 20 13:09:10 EDT 2007 diff --git a/build.xml b/build.xml index 78468f7..cc52003 100644 --- a/build.xml +++ b/build.xml @@ -1,7 +1,7 @@ - - + + diff --git a/examples/AclCrawler.class b/examples/AclCrawler.class deleted file mode 100644 index c12c07abcf5f4a857dd244f0fd5b5f2fe17ec42b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1544 zcmZ`(OHUhD6#gzAd+cF&IdzBw0n+qgn}-upoCaJP7o60MffNG?ftHSk!5Q!a&5To` zN>!z1(^b}VQwdc?-BcoKOw>p$yXcQ<`i))eqNp0p+qo9~+CBBL z!f>}_q!he`Puz$ze$2Y&v_j#wf;;$BM#gpfOvYXJOjgF6fWM^e%^JJTBLR^S@FmT% z=}ZeqkxX=j%S>g{5a`O9Wn;ct${W^_mM>D{cP#C(VcFdFMzY(wxn;-gQa+w5YX=YjAd}J-Vtv%M_MXg+j=N!u{7p9^sG8P1sT%~I1h8u&h zDZMyjX4ifTPU#3ma|*c6@i{NNOTQMx4XsF zLVnxO9f5(ms%$v%Ijy)=u}a3~@?y4`+-b^ne*dHOMBJVRil*(j1lw*aqU^;R-8%!C zdty6ANx)O75<1jq9oe|YzB%lkp_Qgi5zndxR`_W+6#u0GxVxu zI!^?GXY)zTq#4><55hLJ5~YDMkEV3puMpNJqmp zc;-C`Y4lJ05|Tzw4)D`+NTVTXyasP$@lAR?317$;_R_jeYuFp|(JcSF`V(?U4hFv6 z$91j>*LFGu+iOrMcbv+d4Y})7?xsw?8hW1k#Nq3M23T+(oiTUYFKyOv?hwkPH|(t; z^i-nL`VkAffS+;5A5^2%EreN24~q)Iix3p_(j!cwE@GGzCeV)*|5JA{fE)>3Bbhp_ zJ0#L3S>KSF?-9ih^nJz?`xs&Tt3(*XuZZI}#`~Q=zX(x$q%cb40LdS2(8>Gjt&=?- zJMkW%>p9K`duzBLy+k-Bjlaaj8_8p^tZsZj%t;Rg##~A2iZLM|9WrVMLkMKq2cJkdyG z6viC0l-p6O>4{^h$k~10kGzxcHri5T6B!r`BXv*S##S7-mL0eXsSf5i=1nYM(Zmv# zIaW-pVvQlw)nFLzwQ%m%g_khodZlhB4Ef^!-To4=ALB#>iR4hmcgIa3?1tl!DSEKepL_q}8F)jneR?pxcv`Ar5uE-)jTFcV3|a>$o28x6 z-nY>Kd!m5Bq&59j)Cf3;EKwA62RcPS;T5T?4Q;yvt?~?gvyHws(mie#8lgCG`jIDv PATrzaSEfKP;GGr diff --git a/examples/Append.class b/examples/Append.class deleted file mode 100644 index 584b1f0bb9f08f382465a0009eadf91b7b5def5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1021 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 G3yHs6ZCU34 diff --git a/examples/CopyTo.class b/examples/CopyTo.class deleted file mode 100644 index 1eec53621b9c646345d616c77e9c75d7cc68ba4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445 zcmZutO;3YB5Pb_26wrQI{HPwh(P~QKRbxyVJ)s_GOpGT$Y?c&gfExW-UTmU?KfoVl zoW(>Ay2;MWzMVJk?S6i}eE=AtuR}#!Lq~^%t_T|%dKxSS^@OLqJY|sW!3~2l&h8_I zrpwdlYLNs{KJkMYAxh%&l)43}UpRM49!sud_xivg1;qV)_4 xWXikmkZyax%ZrV z&$;`YedT|=_m{f>da)eBVVrA5KhCR2Yq+3cO2b7BpVaWIhEHjj)?jMLXvk{FX%HIn z8fG+H(qPGbvr=3Rp$7#iigId8QEEmRS5!D5bmCkH6}VEXYM7Jbb0N&*s)kR?U7wMY z&r0ocA#QzM?tejw7gf9@y+0p9H@=`^LHc|#1RuVn;mgwU6%Ak2@HGuz*YFJu-;`0m zrQzie$8U%59eh{C_vE49m*NL1eyBhzn)Ab=>|Ro!BssOK#b>O7s3>TqI&3*2>y{i# zE~s1>6|SkEZACk0xtESQS?&#&g;TUD6{}<)FI8=q?oCrXuWfyO%q+@N9+(=LHRsGk z!L(-*Dc7;=nE?gCLCdz>AqD4Z|Hs*@Em0+aG?IKc~7dgXySPU00E!#F`4Hb+pM)R`2`=e_Xxt3dR^bMAkUD6>_axZPQ6iJ7u zBd&NBZxXZYY@s)5vU=SOi;kNTs=d{UIV1X`>&+7#WYnSPAQ_mG3>?z&XCzhJ(y@fP zS3xq#>oa+=q>c%R-G&w$&&-mZ3ifzN*}_eXnuR>OMC8t%9$5oz6-tkC8&-WW+1t$p ztKzP3epjrU4A?>{1uZkeJ?fIJnW`&U%&lbihE!Jj*;lGEp-6*itlb0&?vm!hERyC% z1MesY&LAqc0As)qtS_sskx=qvvGQ$u@5! z^}LZh_eN6P8~L(%Bi{s$ety}FQ1EeT*APGx$7*~TN<19?YiJ2g9N&a5?KAwTwBHD% z(g7owN(T)!l~xTcmDY^rR5~0qLX@hpgHkhe%4Va5GGw$;?l9UYbt6pKVzg7X8U|&X z@jz+`JL8>8h%7R&f=^KHVj94sOfC!^21(~FRAfT*n^c0~B>c z>v)8FB3(Io*z0Jgzp=ne?U!lo zuQjrb$w{n+?*72$9O7Q^jzAp*p^?PC1;0{z@7+bhxf^fe9{kg+WYlmZx6eL;f;j#tn{du!olUtMWH`{*&eS zH_P@GOY=5&-NQKE!Gy9Chm?nq!Wbh4S+sFx0r}{y6z~|cklpug{0@532bOVALPrpM zhr47Q#=~t~*xAJ*_U48jUO_V<(ex3`|E}Y(>eeU&XH8wbb$rOH$G(Lo7H)Cf**HX$ z=o4G>*kEHUY1_Y@?TM9r(muVN!-pFVySKAF*|2r2+18uAAFV`TlC6H8wMet=FA%9I zR^}qB@htz&BZq0c2$T3{@FueO4_E#N;bH4%ZBL__NS|pS%l$t70rB|Vz;(3UM4#~# zJI;R_ABp=Pzm2B{@1Q^3xr~9)p16;99$e36kN1{Xtk^8`x=ixf=pX_2^1se*T-gv& L!CA&=!sPz}=AOTe diff --git a/examples/CreateFile.class b/examples/CreateFile.class deleted file mode 100644 index 9ae7ab11a0b5817a43e89af2a332bbbbdde7e860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 425 zcmZXQ%}T>S6otrHPesnKKN>k3qs;xS#TT;fJb}`Qls$ovYVaER`(s%Elh)u&B#e zTuU8xXQkk3Ev7o%g^dowD2e5B2l;=YBg+ zb$q^S2AzZN9d(iGB+evOn75OD+EMSd86H2l><7JU+f2F`hbu7E?dY@2&!W(8N1*|RVNpi8J7O25vX|oR{R%1`zp&- zL=TcaX)1$$o%o-4y_}a+LA3ju{%Ki2UYMpHy?JubKvQ9jrP7qbRpG&Z+D_=OcTzvX z3dZ<;<|~25!R7jlS&b-&BaJ(VYX$<(xt5Ef#i0pIa>TTLfenlJ_5r2ihP87Ct5t-y y2|wJxZr);quvtL4NtCx39kMQv7mz%D6jgH9C~1|MPdQWEv3cq={~5+5%sv9)o`Tx| diff --git a/examples/Exists.class b/examples/Exists.class deleted file mode 100644 index 9f03ca417afe4374e04737b4e28b539767d3f8c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmZuv+iuf95IvhXUdJ&sy(CbeB`G&2EpaLERKx?Qybu9W5K_yNoouR&;&l{nQ27+T zfM<9}Br5R%d=z3fmKv4Rl4oaU=FFKn+CP7P{RYs&a~IdK$#Kg?4!4cDQ^XdwIqtf! zv1v@rLEW4?F7DyJg9jWBIUX_CFQk(CB}3kCd}6R(Cq2Qi(w0iRo5YbAe+;7`MXWfK zilOR%ZV$pQVK5BUY0%MQsZI|K&^l1P(KB8(4dl5jKiT*6~Pi`wl3iuon&G&Z1|0(I;zO_xJ*bAjST%zp^j_x zO3ar7NrW=lRl04_$>=OJXJ9|bVOS$;&x3gsv5pObm{JXkJfMA!+;KC1Fhjn*JB9TP z^`9u5!#AyjK H4mbY+w@9e8 diff --git a/examples/FileInfo.class b/examples/FileInfo.class deleted file mode 100644 index fbdcf1118793d4167e624a715c705037cca2b12d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4248 zcmaJ@3wRV)75?weX6I&EAZ!T`!egPdgizRml-4Ch(mWs`At4)}3lx}SCz}cT2)h$V zDz?<(quMG}tXj1qKCrb_ptwO|)B32|+G?vlqm z-v69)|9kGtKl|vLr$zxR#=pJT0z*Zg#7-|%S_ z1CzrCO0gSzR1A7C35LWF`|J5af$zj#iFa|r4LozB#6BL}B=K(cH}m9viT9{@FOT2n zMF8*Ts<%jdfM-6)5w}X*#)A(@e3<0}`VW52|=b#kT}XIwS23VS$UbwDf7a zwP0LJ#)4rpZ6sqW1UxlH(lA#FC{+tK3b^Z1QC(nSi;>jV4J5ksbf?x8rx|xbGm-*R zs?Jk|6TJ>pG-xiQH-Eq6JH=G(sck7J?*BQ^QDcO@+%w&AnhV25=En=oV zXa>VZqCc+JYo^|qN+&dvc(=9&qtW2dP@uOrlt_d!nShn|9f3+KZ@@I-!PRL!mP#91 zvQCTZ$*7hVm|NU#Q#`K6w0LbgHjvPhW`V1~?179H(?fwgtw7B{I=(Vclj=8;QGJja zGpVoJ=*a{#iLPKc(Zz8-d>0Qh_3x?pz7IdZBR)KeAF6oFhsW_F>QZs#T%)fU=;_gk zl0RVo%v25t1$_81o>1|m4?h8IsSrVdW@$C(h_u(l#>_h_8 zfSB3K$j|XKC;ozAN@&qCW@{>H^cZ?H6cCtD>>qdBhi5o`8-D4-v-p*xrjc1=M5B6= zYd(kPx#q7Oa3El0xG@a>2G8daBU5jr^=>nj9%AITMT9ojt7UrmVPoWXIKw4>pHF12 z8eq7$)_@{9e+ ziBL{E)k>P2^XCE*AJa!4Uc%GFfP(9d%+AKNu7~@zZi~Uo7Lq@8CdZBDYJbV+)TNRp zt&oYMSal7m>I72w=um9bZf~DU86Jh;qPM*0yd?M z9D{%GL7v4w=@HKp4C~zk1P_H&yjtw3)z3h?o=${(c#RY6r!UAF z$^x{#uC29|gvGjVY-(u;N5Y*Ag_(7=tqt|t+nd@O1bkLZdq>l{&V~+wan>;0(6Nz6 z-rQ(SZ3jh8um+pjI@Yf4Xxq?Es*`_>#}H}j>Z7NSl%&Ybp#bGo=jtLWn#{kW0+Xv2 zoEsxB|2&!J#&NAl#g&`rv}3FVvR_MQND7JAc_}o})-(JN)_aO0%|`OkJIO& z#F8u`ly6v4H-jW%lsaam+=;BXz)C7TTdZ%yH794*7pj>wzpD8HX%i{UsdDt;qIhbN zr^o)B%yV{;U&iyWAi6RydDgm{dELzySl5#iKsqvq=uwrt%2`$DL@TSBE>Oiw>}}nn zuF`;Yj;hd|^$yaz#J84;Jt4!D10$%>l&z;aiw0C`A{#>0jLria1ICCrbhM;0Rn1 zzcLJW$UTCR$S^#ilIqct!x%pTHR6}UD1ESc)N=^cBk)G5m8HWN7gG7YLe0Wg?WT$G zAy0M5(vz5Q^$|>Qgn0<%*$Q_>Nfr}lL{`>R-a~|l_iL5|Z3HmM4w9W9J56?$hzH14 zk?kPcM|OzpA+j@o%S|?qtez}Nc7W_C*|TJCQ0*CHHDp`K_L4nw9AzVzM0@l5FUn$a zg@=ff&!RkwDMyqZ2R_xtr)5!*#~U5^bQ`a9#zPML z4hO!1@j}0A-r8@`=ZL-9uC=mwcB0vVzhg|TRp->2<%q4dYh6?9E#7qCbv9m4-tH}) zbKng&-dH?4j5_euHonGz-{ruYY`ocl-%#OkXR$VWfXNt#a=K2#bW~s-W}uqnY&m9OHD+TyN#AvtizqI^PRvIN3vdPt1${k*8;ivp z1jRfo5w%z<>ak2{xI#p6rML}Oi313U`>;YB#ns|*tQ1dRm3SGo;uX}n#-rX`#QGvN0;+Lht_o DEBq}Z diff --git a/examples/FileOps.class b/examples/FileOps.class deleted file mode 100644 index 9a0e1763e78839b8fafb72ce489ab1bd13b3c75d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7889 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 diff --git a/examples/FilterFiles$BigFileFilter.class b/examples/FilterFiles$BigFileFilter.class deleted file mode 100644 index 1cd17108333b57ce2b83c8736afbee6a13dc3a44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmZWlJx>Bb5Pbs&i{~Mr2%@4C7N80D12h&AO*BLcjD_9Zx#E%IFt>;ChgjR%*w|=d z;ScafiL(%mV6pS@=DpdO`TTnS0MJCuL>h}GmQYMF0MKY8P!gyJtP;|De(1;hgk-&O zK`>f_D@n+;{ZO6``>u@69XDVk?RcKNjR~cCyXX1W%2s{X?)2RwKajhPOM-cLuNnRz zR03<9cLu}Ale$jGvx{Y<6V>cFcaDV&<^`ZPQhoOvG zfuodE++BCH11Id-XKqh=JZAadkUzajQw#^*U9%ukx=nnDdJ zJ}p7;Q4{=lAxFp|$R bvIQ(KVz4;Jf;`6w6tKeHWGsbcl#%%cAGc|K diff --git a/examples/FilterFiles$ShortFilenameFilter.class b/examples/FilterFiles$ShortFilenameFilter.class deleted file mode 100644 index 0b43d229219ae075fa3b0769e1e764433163dbfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmZutO;5r=6r81ng;D`U@dFVLCW0~a2VlGqO-P6yYCL#r>k1|9*0ja=d%Sq@;zbh= z{s4cJ@hv7=qK9VQo6fv_^FBV`-U0NmV?amEz%o`iRyo!=HW&&=zVy>$2CdV*WY7oE zwP2`@d@0Ump)2AG#|?-nIG!hNQ-)4wH1+(O#7aWfvP1XO4@7@7b?zK1aOBvs)7Y2e ze)o#OIJs9IKavT@CiQkSi#?$n3^jsO#HvYp%5I_n&aq{piEWM+LpvkcvnNrUDz$V% zHG;eh^?zA&D5Z!8fs-U6p_hJ_J9nqTqY%wM5wcSo3x9t?EKK^2Nq3=z#_42!zac|8 zvody}(a9O|bpITEl#jY1RV_kBm_K+0d!~Y+G#4mRi42sR$IOK@;GD#69+ z9T9i!!0D+35i=6*;Xe1AbrUxyU|vEGCPX~o^dYw_a4sfc5lj47=Hep}k2!rJVudSL z1*{2JXXswh@*7$~rN5aYnj0w3Lh{y zR*Q!!Lr+38)MQ1^sO5bnQy`5)S2Tmc7kZO8R^BSnf@0*ODXXj*`4|tB*575-lBE?5 zQ@{qvsbZy^<=0SfZ=)nGnA1F5#wf-Z`i`?&&WxIRCYsVS+{_J|4E~mY@wT=`T5TPB z8f>OrE1EoQBZPrP_yt=6;xe}JR7L_jGLqP(&f42rspN7TMi!K@hi5XLBPC-WDFH8J z9AHz%ON?>bD{42G?kYTbzso_gqHGrl#A+K6V+D(Rm&}BDr5UpZk z<<2qt_i6@bi5Ehd&S-%aHV}$mPIYl(Ahi8oD=o@3dd~c31LF%z=M9oZi87+jNDb^O zF%08$^7l$gdhs&cxQSaNbNAn*=_2~64qG~6pQ*u~sKb%2!MRh1i>Q#SLrif8;Si#p!^GPV!3a?gaSnoUn7(%|qCtp%0m#-lN&o-= diff --git a/examples/Format.class b/examples/Format.class deleted file mode 100644 index 998801f08ea5a024e8b0cd951e24fb65205ec37a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8247 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 D`vG*p diff --git a/examples/GetGroupMemberSidsFromURL.class b/examples/GetGroupMemberSidsFromURL.class deleted file mode 100644 index 5334b1f1bcb6dda5893b599144a71ba4bd527690..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1663 zcmZ`(%~u;$6#qRk$xMcUlt8E>Ev9}ZK#4^~oghjfU|L8pp&(SPlkf;blT4hC+U$Fd zdso^eo331x;|ZSj9F7ZD{t>QR>HnbKmlTk%oRjk7tIr0}*%!VMV{DnfWikaq=nPsXG;-&gSgJ`BS^S|u_ixQ_&x7D+yq@rjBkMulxg za5ojq3Smw`M#!WzFt1=ioSzC!R>3V9w`D9cgr=;zFFb*uY&GUugIeU&*+q;cHNnC6qO63XTi1C3+n^4aQA>Yl}M?Dx%~zEQYRlLc7g8cCmLOc=UXeQwI8_=* zB+rI0XyhVFm#v0L01O>^xxDN1Tt=+?Y3C6C#y6|(smphOPbW91^lTwBvyv~|%dh1! z1u9)!FRo;0`2)63peUZ*c_3sl8x3CHWEeXS$1^x}mWcX|c=nv-HmYXxFjJJScj_rI z+&(Ak|E_cKrl+$f5bb~@Q;C&kgWfHD6S87P*|Vd3(IUOCSLk~teqCVV9TR@5=0>F!x(z8X8H@#W>0lR6btx8{FhY8$1meL_ zF@gwgpbt}|okc%xk?(z6MjbkSzz}wE1wWDZ<uZ#Q#aYf6)xyqKpy&ouGe`_%4k6 E2aF(-aR2}S diff --git a/examples/GetLocalGroupMemberSidsFromURL.java b/examples/GetLocalGroupMemberSidsFromURL.java new file mode 100644 index 0000000..0a546ed --- /dev/null +++ b/examples/GetLocalGroupMemberSidsFromURL.java @@ -0,0 +1,34 @@ +import java.util.*; +import jcifs.smb.*; + +public class GetLocalGroupMemberSidsFromURL { + + public static void main( String[] argv ) throws Exception { + if (argv.length < 1) { + System.err.println("usage: GetLocalGroupMemberSidsFromURL "); + System.exit(1); + } + + SmbFile file = new SmbFile(argv[0]); + String server = file.getServer(); + NtlmPasswordAuthentication auth = (NtlmPasswordAuthentication)file.getPrincipal(); + ACE[] security = file.getSecurity(true); + + SID serverSid = SID.getServerSid(server, auth); + + for (int ai = 0; ai < security.length; ai++) { + ACE ace = security[ai]; + SID sid = ace.getSID(); + + if (sid.getType() == SID.SID_TYPE_ALIAS && serverSid.equals(sid.getDomainSid())) { + System.out.println(sid.toString() + " (" + sid.toDisplayString() + ") members:"); + + SID[] mems = sid.getGroupMemberSids(server, auth, SID.SID_FLAG_RESOLVE_SIDS); + for (int mi = 0; mi < mems.length; mi++) { + SID mem = mems[mi]; + System.out.println(" " + mem.getType() + " " + mem.toDisplayString()); + } + } + } + } +} diff --git a/examples/GetSecurity.class b/examples/GetSecurity.class deleted file mode 100644 index 0f1b2d2c0ac5be6e6f59e3f6de1054a65f6dd808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmZuu-A)rh6#k~W?Ue0eTcIdO#iHo;Cv3uP4GAIWO+}M61mtRW9h+&oyQDica_^IH z!!=x#M3X*%ui`s^XCSsTx|==c%$fOq_RO#AA7cQUXjz!UB1gqS21`0Tn!{r(TUfyp z3#+JdJmpwp$i0@aRND-OQ$JuZcazV8q1chJ*dIoL7<}}DK6T8=LpkvVD@TURhTO>+eEov~eQjn7cIM7CAk8X-3V|8B7Jo8ME$72*Uq3FlEJ1Itux UP;Qc5iFQmI@eC0M1j5S^xk5 diff --git a/examples/GetServerSidFromURL.java b/examples/GetServerSidFromURL.java new file mode 100644 index 0000000..b55678e --- /dev/null +++ b/examples/GetServerSidFromURL.java @@ -0,0 +1,20 @@ +import java.util.*; +import jcifs.smb.*; + +public class GetServerSidFromURL { + + public static void main( String[] argv ) throws Exception { + if (argv.length < 1) { + System.err.println("usage: GetServerSidFromURL "); + System.exit(1); + } + + SmbFile file = new SmbFile(argv[0]); + String server = file.getServer(); + NtlmPasswordAuthentication auth = (NtlmPasswordAuthentication)file.getPrincipal(); + + SID serverSid = SID.getServerSid(server, auth); + + System.out.println(serverSid); + } +} diff --git a/examples/GetShareSecurity.class b/examples/GetShareSecurity.class deleted file mode 100644 index 6d0f992ed5babe632767b6628a2b51976f9cea61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 801 zcmZ`%%Wl&^6g?BCapJnKloSdCn)0ZVrZuFy234x6f{;?EWI!rq3}PL(={sRBYRUVaN-jK*iSycxq$69s z$V-mbRSgqUm=>7pw7gfb9s5n&@tZ0^U96a}P}Wf~v5KldevrSkFC*WJW7TF;$C}Bp zS9I7W?%=LK?oa(q6E&0tX3sY!G@}2w*^#Y8V15LhO+nJuzbBn-pBsh+tmkFwayG~I z&Tf6IlXDy=(x=E_kNpb6!d__aQ@?~NO4nz?kjFSIpdYEAF2$c3>mZO#!r>PXxL}q4 zW-BnMxc=50B~0=MQBMjihH36I^oq2CcA|0u@regg=bjmW8giIJo+&EyJ zRJ7U&w8m<>kM!PWOyo0t=-O7Xdintc`qg5sk1Vlwn)vwhyNbxsQ}M>$|KmmsY6H3% n(pDS{Eb>$$wnn=_`gL;JCfA3&eM)sxZIfaE^C&IGV diff --git a/examples/GetType.class b/examples/GetType.class deleted file mode 100644 index 10281774ee27857489d830931fc89880a9781ad1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1590 zcmZ`(%XS+@5WQ_ZW+YE+d15*7BS8j|$WO&iaKLtgACVpTB}F4UOdbeH9{Y?Vjf^x3 zWX~65&juD*a99vHG6x@$Jzv0r6)V01xGmXHg3Y3;yQ`~iSKX?a-~RsPC4g~k2Qi44 zf~!HaVM3}&1=kc@55kX_iVx&ECDje7J`BQ#i2y#rbN~^|1Tl-7Qr!yD_OXngQ!y_s z3n~_6$ZZvI1xqTHRoqdLP_d$7RmGZ$bp;y=k^(;W>AqDJIQw92FZU!DE9RWtnBi7z zXLm-xKWjU-drQC*9oiD`E|#|~fzCDCu{LU@yj98M@5H^YR+WiA@t$0dQTy@I_{ja5tem{H10KY4Li zLmGxaUn}c$&2jCL_4+C1)4FVyv{2jGu`0aSbRIk9FPuo#sywj^Rz$Ke9np}%rc_%R z?%@*!riS}?py6G-r{JN6NAlfAxTN7zWHo$-oPc0h9(P$}WQWOBBev53DhRZd$ZY7p zNsz#dnTltZ5^Hh8G&1pZfsTgdUNXJ9oK9|%q4tKsh^M#WX+k$ocjnXa4->6m{F{V6t-4l;36*OsC)`A}%dr&a z*CmXVD>0y1=G$hLvoD>B9NVr!tx~ZZH^b>!w~IxaUE{#7aIU$Rz|o;o2AdyG1434` zax&ASdijw@D1g9uIY-=ixaVk7U*_ooSHaacd;sx7!|@8WziC7OQ4I0prmJ`cFV7Gi zhiEg0J(CCUtc}#+{f_^IY2~OB63PkqS2M^&h58*ctpy+BH0r_wp!8+OxpuKv5GcV9FFj+?@w{?VmM%Mye z^l2Y=gVqhdXG#sLy}p;<;4(dqk~(`H$8fhUwP_3{%lB7^bRUG|Z4+f5-R{9j!u|%~uFJM))?2{|hRm BS>gZy diff --git a/examples/GetURL.class b/examples/GetURL.class deleted file mode 100644 index e473c4234680bd4195f19a4bd706e806072d5028..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 784 zcmZ`%U2hUW6g|T(EG%20A3*&;Y5iI#uv!&AYWh%8l?1C1HEH^^z?4k0%#vlX>We?c zN1ye98Z|!p;7{>KsCP;%HqlLH?#!8c&OLi)zW@C66+jhtOw3@>#7UeoaN2~1Giu74 zIE!-$6tHAs8Rz4;pyEXZUovpnfXxuQE2Ie588o~2oI$VqUCxkd3dy%d{WcGtx^0gT zz3&RikhOQ3d+rO@@m$$+T45k$Z%q-+&6gcM2!$_)28y(A`Jb~3+J%&ucdtw;!pw(}ap9ik& zdORT9{?A|g11_lxWQZYW7bjW5cN%gq3MU6^e`+6xsij2gGDPj2jbh`N=hiFoK#H0_ zBIlVS)yLHCf2jTiliYqFLh89evWB%d=^GiEouF zW5l*=dgLt@KftJH8GVfSyI((OGnW{{ERT_#7AnCc$v8b-lUyaK*bH*C%2UZAS*c+G V>&Rk*&;`oW$ykO)mevvEegi@YrN;mO diff --git a/examples/GrowWrite.class b/examples/GrowWrite.class deleted file mode 100644 index 2d0ecbbdb7adb105f6fe39fa920f86420aeee9db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1066 zcmZ`&TT|0e5dKcvG;IjBqi7o`Grh5={Fpp_Ssl0uj^>Et5vsN=8j z&7YtT>5Mo&_~@fQNZivZD3^!q$$tCop8a-{AHTkQ1CYg23EdbLF(M&^t0JyRh~Ro0 zH=s%w#Ta*Qax>1|2@zQd9T?^&7sD-n-sWbKhwq4(5^mLGu(u3`#ENMdtA1TKoOMmF5fZ6urp1s}H&=GG*IKTo zS=+gi=a|-Zo+nC+Zz@K^GwBKu_sB2VzEd%lOrCsU*|GPYJEmu3d9sX4$S|aKD`wTr zxph5Ps_UG|1NRyFPX*R|ui<-iouSn^>4AucGNzFiF(YFZb28@fNXBDiWGwLF>62Y9 z_|>Z6$SB|mL)W0b?-}l(=V+Eou(6fpkwqCxSmqU|i}+E~49VkaYx=HH@ff;~p(E)G zz3SQHNfUljZEJ4-R4(nio>8Yw*gnTAMN?S_x=wv2n|l6HK_%@4PlQD zn?Y1J7mCFeQmy&!4k0aKjaC`e8V$qRVo=oL=&7#T oP0;}6N>NUnAk`B>M#k*P&pCbiF0^70Ql~)&Y73={@tybbUU3li@o z76tMjw9)pXfLGo+6!7=bmJ*n(X`{aOlZMKE#ElLSKZ&&wm@EIT9mgke)QL?ys@qJP zcGWcopZ_#f*Xq>tB$jxtr~Ry{zG&AR?pxda`MtK|T0;aVNGyj~L4kJzI-_jF0(ZCS z!kWZ-hz)E?ltXNxA|Qt(0>zPnZ;fNsv;s3D=uwE{ZtA06w3nJA-4-Zis;zrgW%Z=N zVf(RZbyP;Y{QR3%hxkxj_4%s*)YSiyJ)xIrpPEV!^*W6XXp^N`Do(2Zv_6ITysj(i z(Bmg^9v(=Gv5ay4RQKgTe^Fozd0Jo=%wv@ch*NF^UNGhdpvRV%m}HA9{X{g!ymX1& vHN0PLRlMB`_!XaVtagU{_BrH;Wg7l~%j58QaxHRjk%&+BDXwYmbC|gY)Ln?_ diff --git a/examples/Interleave$IThread.class b/examples/Interleave$IThread.class deleted file mode 100644 index 12d7d518f0f6cd2c90b47ec5bc33810f853897ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmZuw>rN9v6#k|ccDs%gS}tk@sv`D+UGJBIpb$+6O)+U>!q06xt&7{;W_Omzd-x9i z#%OCK@d11&;~5K7t=Y_(nRETVb7p`1{PrC{3EKwJSWF;=C4)pZfor&~;f8@Y7L{gM zoo?z_QTr_eIpj4I3~&^cSk-Y`L&?AtObvH6JYa~1zQd5J99V~z=~!;ZtV!Q?J8KLR z>$Ypl4Tjm=xHm^i495&+IUXXT;StAUJYkso7tdDMZVR8|DasscSZ7F-vw^gHDOw!QP}Z=) zv59$xg@dNu4$Pq2Fl*h0D!doUUMPu}u)3<`JjZinh+#R~@?64|9+i9fzA1Xr_FRq^ z3egsIXM}orr~a0*v>3GW6W?)N;cq)u5Qu@+tX@yJlzR1lGa8E+c99b6(i_hCjQiiEsd7&N zacGS3rsD-_cE2?>X*J)~eXB_tW7HR9>G`GUl`>j1PLdH?)N0aPqEmtHN@ElTV1?or zM2_jkaGB&Jq9k?1kf6^X?G9N^7c0d+CdYk~=e{4IE1&6OssZexNz>% diff --git a/examples/Interleave.class b/examples/Interleave.class deleted file mode 100644 index 4ea28d5eba64f4be5eaca725540d8e871debccda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 990 zcmZ`&-EI<55dIDP zdZV}X0*sA)0Iz%&A3&WWv76dyaTNZa#yN2s>mmyp= zEz_$p1ohlY25Gh5<_ys_)8fwuy(V`yjAoZSQqM3ghJ^llZQIx}N?pV1lp3C6TAhjr zR3E=_&g!wD=QK1V`(Z$DJ-Wc6d=lYnVY?Mp?rR++;`#U&hB|+NP7S z2E8$5%6Ch{Z7j>Uqv0;@F~ofA{9$2<|9L$cY;AEzLj_eTuVi}Sc%MosdOcf14J(4j zvW5qU6Jb9m!=#_J&G6m49iD zx@kPN0ClOsasA}}PWjghq8;uqD7N9aoXk_g>NH-%wz)-PFPxP3*j3|}5zVAt&z=5P z@%rP@GtB76aTFhNJ;U*k#U#C8@dZFw#7QQ|%93WJL-`Td9vv9YkyHr=1R)`W2+rdI z*#iEF9<@Zeoj(ZeLi>zBEI5R;mzT<45UM7>A^a>@OC@))R7mY3ytxl~a|9(HEDsTh zsU%WEoQY|47~<>*6O9i+_VM?RaZt37B3$&Z>!;7A42|x*NNbeD1ZEMXJxm}&R+ct# n4o^w1(>lJw0^X2rVUf@vrqn-TK1=5SQkW*Kk}pinh(Y-SS{&k1 diff --git a/examples/InterruptTest.class b/examples/InterruptTest.class deleted file mode 100644 index 8daf42647c4922ac81a451b3a204e15b691b899a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1239 zcmZuw$x;(h6g@A4oit6rFb|>#N)r;II3eN$PRLM}p(xQR%OFrp%iv>Y;W z7*&u}q2Q2$!z$u(9*g4$j>d3I#c`aF#_=fQ@F%{@NGBCcsA$2sf>SDkGFTfXw;}i< zcc&Gc5eNrvK_EGI&vUx&H1inubmRuHEG$FPfVNsuX%V$ATsT&ngUI8mTfKs z#TC zXnOvrWT>GJ0~&gOsRSzK0SdS~q)-WgW^RkBK9sJ@tt6XIZYEx9dH8ngV5X~1HkJ4#t zrhnaW{AnYQ+YWvB5Ao^iJd%xKkN*gnd*b&H(Vx&*Y!a^Z)174s>1jMo zfRWIJ-7G4JK?F?3DoC=R^qJ3_pf{yU%Ua3t>D>_*TPr9Fm$o|`o#C_y1o6tZ$ bO;tV_<{o9Jb7toK0A z$tYhl$VdL2!;q1au!Vc|hS6v73stH-c1uhP*pOe2Bz^n}#&5kRnN)L^Bl0R4+?6M}7=5 EpQ1W!HUIzs diff --git a/examples/LargeListFiles.class b/examples/LargeListFiles.class deleted file mode 100644 index 83f6e764484a8e477439a771f19e6c454684a716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1427 zcmZ`&Yg5xu5IwgIq>Z82qM(9O#7A3d>-$wiMZs6WM-jz$S}&bAP0A#xqkl)g`b9?z zBQyR0f0TM|D;5MkB)NBY&+a+9o1eeF{{WD~s|b#Tf#1Ik3?UaqAM#Ng#|a%L4RqsF z1gF*ajDa}Ls?#|G=W#*BT#TTgF5?C-mvl_1n9Dk@7|e1?8LukKq>8zwpw}aqQs3za zZs@ov&{e57+(1Cw66hYcT|1Z%2&dBX0@}6uYbnrMv|TydaLUq~v&uDE`cuU>)>|uI zv)pRF6nM5RIhO6J z_@|pwrss9sCZtqvconHq2=o;#uPTeSAE>*ZQ#?pMV`3PiCidfijyoobm|@cYNlrEv z7p12{lf)!V%;K(zd$@1n0q*N4nV7>v6Y~l^-0-ccyqMfrFgZ>|4X-v~n0TaOA7eov zzDcYq@=zeQ5pCiLo|<@u=L+2-@PY!9i%Ltm-9KtPMERzt4&@#fA@Hc3mTZn^v$LI$PM4+PwJ6hP$zt}8& z%4=rEhPFfY@L$)7ixG1OhY@O3y-8e%$kZ2ft)hEj8G0hpM0BhPgP$gLG?{hbD>UsD z>4ZNqR-nTtPE83Mp|&IRC`CsRMGEP^`9IR8(^JX(&_1B|3wjc|8~BArn5i zj6`u2eXP7|W(B(^$FfcIKjLXbp6ep3CI&j(vLw>Pp2S{q>!)j9VsMRRZ>Lo`$^-@| ncn{_7CBY%Kd_P4GlUNdYN>cn5_8fjw&C5G8< zOSU673VgR2_&QAosvI>N+t{H>|CaeMY`4Y0#xCj%Q(IA`HzuvfsA9v#OC8y>v5!|A zuWh_Rm8MGzGn6K5$9`9|VutyN>v!)AW#{4f{vc?6i((PbjfF#^DW~}|bWi9qV!9IH z1qW2x>-UAaWY~F#@m`U1I*m)m8ZYFKVc9vX{y#Y%hv^O&7M%NeM3+wacXtfDuY2t& ztYM0tkNz^CwWCCGmaG*z8J*eM2<$s4409xNW2b=v=CME!oq7b5GVC$XKNkibe%Okhtqr(qD9qli3huz)gICe>M_{}JgKJpKhdIi}_S diff --git a/examples/List.class b/examples/List.class deleted file mode 100644 index 2d2e7b08a66648b4b896ef14a2f5274f3fc33b7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 977 zcmZ`%T~8B16g|^!nRZ!hDYS|ODSp7VV5?O?0YN?!o2n!wCd8+0nUZO`+oroE`tC3B z#bC)S-*Q`> zT1~VWSlYldtQ*+CbB;{|TUa!(jid_iPzUK6o$IEhb4lD~2-vP7ERq`45JRkY_UlSr zR4Fvp3tcHQNse5#NzGXrKwq-IC$ zb_>a7exGLR(S(I%uhKnPt(I_(7#0S#($`&gNR$`$n%!Gs7&kM0JYsYe|6PzF)KcXc z_$4;z>Qm;6{`{*tDYN+BUCdyNeqZ$jKoXH8d!1HOgp4qhJp=np4#N$yL){=En7~a+ zQPfjt2os*1BXF1v7S0eXeSx+)?<2ILk(UQBySEe a><|_a$3DsJkl++CHPSLk-xT=)-1-HFZrCmW diff --git a/examples/ListACL.class b/examples/ListACL.class deleted file mode 100644 index 6c591f9ecbd8267830601810ec891ea11ee95dff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1420 zcmZux$x;(h6g`iGbkj6b7-TRKN0JZ;;sgQFFljIhnt&osozSG3O1e`?$AZ0k|ACDg zH@FB@QpH;R5LfyO>V2IV(pBl(@0@$?ySe9e|NQ&y6u=l12`+eA;Dt}bs02T53K)~n zi~zrlbLJL@CnVg)9RYVGw8A6e9*_4WOk#>ZO^FEd#k7bS9v^UUR>VWTcqAgkXOFAazx9Sq4~%dm&&+=VF6EMgt5%f zpU){tHRvv-xMy|JM5y1*W*Iq)~%>{@EMALCzlGj*~v5GYr>saP_&jdV| z5k-ueJlo-1es@>RGIYAF%QT9O2i-C@uqoh$jF;Fd@Hs91W_r6lF6w04uii@ zJLftqx=Xs6O|05t*=U9yzRlTlOXu7)7PMR@r5qF;r&&;A++*v72r~?M!snHh9r;{% zHaDL3r&ZN(hIU%lIE~A=NUu7-n!xy5KzBE-Tof6_X5TT`5j`+U1soP=Lkq6pDoNZ# zgkYy{0`SLoYCnYh6-`cC0rsO4G;jHA6UT5wMhg&DY_l%^=^?&?)DYMr3!1>?xr4oU*S(UTCE3FOdU{$iWghR3Sgw z*yn$f)sf7h(;AEe0@@*>0}=-5GdBzwBWS}op_7DeP+k^Y_yi}upc_BXgI|>M8-2J& Q73?(H>-4)p&rKNl4?-A8f&c&j diff --git a/examples/ListFiles.class b/examples/ListFiles.class deleted file mode 100644 index 190cd04937335adbb5df56ded607edfc81d21ed9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1016 zcmZ`%T~8B16g|^!JMFU2QfLuDEq<{rNEMYTMUf&Pq@YQO3Gr!LresKW+jO@E-u)%M z_^gSGk%S-MyMIT$(*~-5yUE-$bI+Z7?%DnE>-!0S8LaC_BF!MaZsE2NSW_S`__9aSGSzKT-j?$XRn|N^_7FFXnL~YxEyn| zFE`q)s#uk(c%UR*PeFG^6&pxlgkf;MDr;`ewJW)@T~TS3$a6d~@D%d~3Rp1k3?wdf zzGtyrtBDo^OB-0k3j<3i8dye=Y!^#nj(V1(8yw7W); zQ4D2|z&;aT7^OAbJwy~&F-9ed`V|@?6c3LP*vSTGj}R<7nfwND)e-g{bK#xncK4OVD(NZBFgNejx v!B9_L7CH%uqL1Df44SMT4ruCeVrn#wn)Ev10B-yNI27Y6 diff --git a/examples/ListTypes.class b/examples/ListTypes.class deleted file mode 100644 index 6da499c26338051f421be1fb68940bc31fb66f58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1366 zcmZ`(OK%fb6#lL=&WxSO%ZW`xN^736Lx|h7B`u*8CrpBaU$sqA3sGd7Ni>mXY}sQ3 z>vq>omzBC}rLw40i7uQz5UWZ^Y$|ohs=uW0-ImCe&^ity60T`$$x)50x*wi z7;j@nMIwvUA3CswJIAvR2ov z+-sZNdFia<7~T;W-)UG|-Bj1Er^xuOQ9x10=P0Tu=_td{QNeZQxKXJVja#dktWmC(D@N|7jtv+BWB$fwp>%DnRJdNe zDKPA-%0_9!C{fn;;{#J6~| zZrpObQoj%g*j<6peoGkn;Bnl5w3w44UT0=8JTB#xj?Q+~^&F1c4t=%@A+X8cM zD(Fy+{;=q$ZkuktX7ff&CX$EDXrQ?*|4zN=z^kbRf^AudA4y&)?@$@ap1#Q&I-STI z4!vK&bYlH~cX1rk{Qb!%03q)vzwc5y##L|)&hA1yAQ6c3JLoGBqT>m=&{W)k0*&k7 zp9oZE2NrfQko^rx`fMM;3kq4>TnrAJSEK5b^5_RV{1voRtGm!5p+3S>N>p9wV~Dg5 zy^rBN#mLXh_YI*EvXnFtAhLu)Y!b|iIx$ArM4Y%wTqeF^qR40;WB0Kv>9|K1C5?D= zPSOdF9+z~|qcKUN9vzZ2M*6iX?mv@3_6p}g`ZyAKi#5lBeN07;zNmiepjThw2&)KT zi0>$LL@~@(k79<^u3;SCVglb`65k_+A8Gp&rtk}n;sLFG=KvnEyMOUSkJ;(JaT5RF aG@jD`UnE74|BfdaU14WV5vR!mIP)CDo+{=5 diff --git a/examples/Mkdir.class b/examples/Mkdir.class deleted file mode 100644 index 4c965368798ed52c717b94e557951c048460a523..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 395 zcmZut%Syvg5Ir|fjp@tU`T!U1Vipa!RosZKsxBgexJuGkZftH!l8V3O#)5($;75rw zS(uF%?mW(%Gc(Nh&&L;l2@V`s7}(f$pkc^n$HvIUSim}yO4jEBx_5jpU|bZlRG>GN zD!p0daa!I*@q!Q|kE9Y9dymsBdWnKXq~<|bmr~77S?FB8Ch4-4g{o}qQXUqoGD)u_ zi=FG|nJgzPbYWvdV2~y9sS2t*4#GTU78mwh>~qy@_yYZQ)NP!lNi8sJp}&a&Bk%vM z%$x_~2qqnXp9aATklm#0kh~yo`fG?c3TRcbRs-rp*@8wW^DiJd&MSkGevn>jo~F^>|SOOz#E z2xJd+pv`*$tG;_8kUk3gN}$lzf$EG$o{ElL&nJ=|xjGOi)lb_)_uO@SHyAiw6X{@Z zkQC-We($L>qr)JUc*%P=97jF%NhigH4q3a#HRHIMRNIhPl6YmKf~rK##ui>nY}lQo68illJYiE872IcNoXhocHOduL0%2HU9zF7Gd@G* zOi_l*bKSjg$RowDG>2yL8M@8$EnbAoly_B}>;+l&DIE`XbM=u+C89uk(Q0dN>h$1@ zeA?#Jw0|V^zhsIh42E`j`J|jk{kEJn-1@8cEKH*zI|kDMwiyahoMvRXuKE9*NDS6+ ziTu@{0rCh{S{LZlpq1 z7=`_<35uQXu#ZrBw|Ru}X{b}4wL>)Lg6zDU2ZtUmQJFGUC|)JC>!jBsosS89N}_g2 T$}1AHL`;k1U7>%OVgvO*bd0WV diff --git a/examples/PeekNamedPipe$ReceiverThread.class b/examples/PeekNamedPipe$ReceiverThread.class deleted file mode 100644 index 642652c682f0c96ff5bda82d82ddc310113e85d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1229 zcmZ`(TT|0O6#lliq#;l!1*)J{1x*W5M8yk;S_CattQ0TEQ)sskNz+W5GCHHb!x^7^ z>oblNMjhYvZ}>mNvn@i4nwgwUzH`}gzH@ee{QCS2z$lg#9E0XZ7*Qc&3WhNvzApGl z8<#Pr;3CGoWK2)nu0pCy5-uxHp$TzC#)Md}3UN)iUzc!0K{qBPOeyHWO&QY?ZcCV9 za2XauPwJ(@JzOkSecrI<&d{ktkB7z|m z1301LIQk{rRWXY>6(?~@!aWuDLFu%OMab4LMSKbKDjp!E;vp6odh0cry0sRkf(&ad zQOW0dNyQ_iY5PMzfjm~Rh>VIQJYncO>M3%el)De{*;iR^J4Vq`@eD%@DpeNA6E)>^ zo|EvLVW6d?!9||s#wIbbPTb}gI*tNr(z1AI#?;GYUT(?Zk4t0w)+RCd59+ToOPn;P z|GMn(0x60Wr@75(;^VN*2Z5Vl2FVsirWlX?RyT1uDO%_)o1EL!Z*5-u`gGgo7S-0T zC8LeuX!2;VPeV2GuW0`_mz`pxeGDP(@30im(_qxAtt6sUzC>#>DH00QE66x{c4Mie zXKBvbTbe>$4bx!*-1O3ni324DuD;Tk(dwc%g419)Lthj0FOXnt2Q1bZ`YLb36&v1$ zdy7zpvqA?C$## z?g*+k#2)V+T)Zg=#B^=gg!zeB&Ud+G!c^_QcOaMboOkb#UVo85Fsv{ TBOe#eBSEV|k;1rzJCJ_^pdb?z diff --git a/examples/PeekNamedPipe.class b/examples/PeekNamedPipe.class deleted file mode 100644 index dcbf77f938134b1067962f9de976353c19b6b439..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1282 zcmZ`(OIOoC6#k|(NgKmcUKMH-woKr=r3aRWPMsnxXCq&vJ8z z7oTnxxv|Ee#Vv~$=e7;o<~D;oZCa)?%TS|-ml*tW`8Cc^pD-<+Eafs3XJod?hKN zW`Pfi1RBnvgYs=<&2>9s=Q5F0E^~ZD?9OVqiCY?OBgW8Km7%-3C~toUa96`T?kTvhA&v(c9wI?S^IcQHBMnI`XjsH!1y3}j@KnPyENNKAa}8;cx3&rZ zL&FIR3z;pRbr{Z`xQ@vXjQvemTrk$Q!JXrR<5r>M5S`q}(T*Oj#F+VrXJd+?-5aw| zay&upo*?gzi24oTR5}4dvK^yH*gfT>_H2g}3ZMAjE&l;hskJ&GiKHSil2V)@;N&a% zU}*k>&8wQ~OUp_k*_83v%ciqQm;Zyh@Cs!n7Gisjkgs14uaZ2P%hVGbZ{<|otD@@hCaMkE+(~e2LnQa><-Z^sg#x#zFFN$O->iE;R>VUTO4;qa&C!KcYFzR8z=VRy zcG9YgMnegfHD&Ga?_LCei1@|A>r~ zJcOL?KY$YThx{%AhX|$*phl%nIO9S~k1M|Sm~K%T)DH-UBp0<&IV3mLxu|~!c^_Q^ zA=yQPi^h;tZyS#t&rQb#KfQyzBnDb~PP*1=WV_2dG<^?9OiAgw^#x7>?8nYAwDvS{uK3t}`4_6SPQ6-;DS=$l# E1?;&hKmY&$ diff --git a/examples/PipeTalk$ReceiverThread.class b/examples/PipeTalk$ReceiverThread.class deleted file mode 100644 index d05ca7abfe4675034196f2d913cc5ae601d02b54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmZuvU2hUW6g{&G46MV4E!9%1)>;)73$0rG!1&Nc6B1$@Atu_Vg^qRGWg*LMqrb+- zKGz6M)c6DZ0sb8I&I$#M4|8Ycew=&mnfdwiY0ZrmcTNu zbF3KPxMAQXZgJ!d7$|TQIZ6zg?J~^O53D1rYE;ffUjlWq~!U3(R1aU{8S6;}rw2z46Tbg>0A@#3A)Ld73TaMN5%l=<| z$0d_i6ZuGnKX}pn?q-3Mo96qz@5>G;(GC1*^>=8DiTa!hYc-|S8U9oP1MjJHN4?+Z zEvCe%s=9QT(eSPIVbinPBy@Z{HkRmrBP2;=}fyuD~mZWT%c2h?#eS` zo`RW~?AQ1Jnpqq`KOrv(s$z(cO_DVTJw<3~ip(Q7!Z<)I#Hg6&C+M`aAtJ8_h-x3O z_z|%$;IEWdg`%g350N{T2vMbm*tJ$v({ zH_mbx-jnzI0sanuhghAk3@&r1p02K{{_5+h`tj@AcK`!e)DcFPhHf1J7*a%}=+V%t zLq(qy{Tc>z)S{~vQJmFr4(H|eLI{I8E@DWkFX_09D{>ptF^myua8-(H(tcFxMm1d5 zaD$h5(j1Slpy4sc z6FlX3hUXk6G8|cXNoWTML&F{iQ<)W!br}xrsdlN5eEm&VLh{wNEZp6k6Lzue5}Crx z(}@wO`dEdi?_ijr-S0D1c70CmJ}3W)^xB5-M>q*Waa^-R*nR1w-Z-ux6ao3#E&l;h z&2@i3Dv@e|Q6VLWEVodt4u<9(Z2p?re`%$TsAwv9oO#QAL6`r7y2vAXy+WBF??IcU z8r&w2vfYK|Q!{8qX_S*G{VOU_5h8BmZ(P|DK_jw272I5TP)gFzCvo<=WVuw+im?!v z9M(F*O$vKiLJk_0w^hwzQP|XLM~t!UxAdi6Elq-|WOD^apabnR7UUNIldVDWIPE%U zWwa_i8(?4Qhv5WCIWa(kB8U)m{7EtkRLp-?G{A>V1kyb<=hY3=BzrvsCrBuhn^4nz z8_;6GaL_|&6Se6L=rLs-2R!ifkQVriJ1ts+{sn_!#Y0_84XaJ{9u9tjx`w`WG*r|c z8vDblhb9k)!b**Y=C!TwVWma;=%HnPZEL;HLuwmrn-Xd=YNzzJs~<tby~QBj(Xe}uA@Ty{$#9yo?xgUl<& diff --git a/examples/Put.class b/examples/Put.class deleted file mode 100644 index 43b1e70341208fcacc74bd7a284c56d66ae3f921..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1305 zcmaJ=*-{fh6g|y^^kf``00|B3iWoPqQ-Kn=62t6x4!3gfBO3VBY-g!H0;DM$B2dwBsoUqI;J5c zm6QgKgBlLuutbhX^=O3DV;aUWA;ocy6B@cOEX7F`lX5-PNxA7$zDVt~iZdF{;+%@} zQlFA>(=y?VOgO`Ff#V`W_>}G1{uu_vOk8IOO;<{Sp(|^f0691mTNl7g2R_i{M5SF7OjSRz3Tiin3|INw3EJs$y9OiW_ zU{S{vT-A}o62~geENaL~; zw;6Q96UB;K@(jy2IPU1Ui+j}cY%?%LMjiK&k<~8iuw+SvIAG}BD7;Wu6Gei0H=th} z(izNu^UPO;KW{liYM+^Ccaamywz1Tl&~K%4Pdr~ZG>2lnRuitjWIJNcE|+buc@K!` z5V2lj=rot75@}i=)ohGq~tv!SfXe{s^r!7ukgGxMKhTQ+E)v-}6tkz+lU9cMBLB0%*k zt=mmdv0U*4c3}s-TKRQ=$$Lz4H)%t(GFm%_8(?o}!?1^BxCJ7Dz1T+~*&Z2D~B6Uvg-)tM*?&<5T08H&yO^q&c8!sA`~_7K|L8(#?|CNIDnQP=g+WXbRew6 zcz{hYHOB9ct8bxq?+LK^#kbEC6%UDt2tfh1kX%PszJczT8X(%!6QDO9=|i6rAl}nY zT1<^9U&>Fl7Wxibo0b8x1lSf}Fd1O`Xn>)Orl!zM$B$4G8v02Z*i6lJAxU@&QB0x- oGw8)E`slUw)2kRj3ES`-+wqc^dPN-Wrwkz?=K%dC?K_b84vTaoE&u=k diff --git a/examples/Query.class b/examples/Query.class deleted file mode 100644 index 01127902eeeddc354dcf26ba0f34fa2aab2d6296..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 796 zcmZuv*>2N76g`v8i8C~%Z9-WJ6lihM5JTA>3P`jnPiX;#MHNquJ&C6B64_(ad=@;U z2qa#S_zQjnxI;ukLu}2xGk5Mecbo4&KYs<#!b1~hux#QyE@*MFgiBa4aM?s2%SBw# z`l=SICa&SS_PJqT&A>WC;gJlbdcu&k>TeiwJCP?CDs35x{WR!`_?6T3$&w2k88XzY zckM&xy<_`M*ta_>mSKNO1I^tdR}7Sl!oba?GJ(z~ZQ* z!Lfm+fm@u4u!(${c{}a(M9ffj9p4w;z7vSY9Jg_YV^ag~a@@mxjt6KmDUM!M?q0|>@d#K|utXnfGZBJvis98N3Cu-*;MTRA- z{y+9qW}RW8L_l4SQp&G7_Lh2BJ>!VvvZjm#JF9AE2?Nbn!lx= zW@a!3I*v~RtnbYW-S&d!_nc0WE}-vRW|bx=gZM$>_TmJTa6+BQ0b;-OSBKO&g!&Nab0N$v!p z=1V0mrg13JVGvHZV#R?}gpPabkAug+n*?g)4f0f~(Sas9r%#c1$Yr838>@UCB-1n! zXHt`^S3(7`7$$wqt-wZ!&=^PZKJ&6T^agRL8}-Fn1?$)#lzu3L`aCMKeFr}+bHlC>1BYlKaNX$+Tu){3%wcWnE}6yV{u+IxuuK>Q*`Sw yESQ`(-(cMI%>5Zme-14T&v*A;U@ayzxf?80W~mPIyF9nb6^kb?^R6*AQ2zqjFuwT36#fPlW?8pfT0yNv=}lo#*5W@)NQ}{h1gpuKCXK&#af(aWh3w8Y^>uuM z`lA?|^Z|S*;~6TFT6eND=X~>>`~3X%;}Sp%&kdNklfzxy)3I*gJ~lY21~PcS@z4NA z&A=wM6tc~+!?DYd?f9WDyA0`iP12L8UB#b#8k?u^AXdvGB%6P>Q@}-nf+)}nCR*>g-Y@&_^ z!)6k@L-C@v;M6*C;3d(xTkCulrzh^X%VC*l;t4}(H1LmOn+UcOc*?nQMi(15E_&fK zk(8it1I2mD(K2DRFTHi&2s(!&8!gqZ=v%pmzH_;LMeuVg6mT^iUp}^Iye3G8a*07 zd^G^yOQeWtn)P1eklw;AdNJxtfjG$1ULdVXC!;fC&A`q`pwem2&cQTtC}EXM6!jPy zEud{(X1>DwhSX~M9NO6hGDlXrJwvvC0e;k+L4Rv$?PBpea@}V29LCb`7WBFIEWOY? d$puPlof6wtqa|&RqOTD{qxiS!FO!@?`*H3)_spI5ua`FfT{P3!MoB|CjRY#v?5R|s^Z6mOeGOF&HHNJ-5s0|Q zkThCD2IV3gafYlV0)DgbT|OT;?u-z{cSOKYG48FY^XQl}CzzOaJQu;_R1(vdPac1W zMHoaH4k)+7#oXgpLXvfx#{=Q>uB7TnBg2rNdSV=zk?)$e@5(+|IMh+ck&a_D7_=W6 zLvEva>rS~BGZZ(_uQWs1`2Ts?36Cu&im$_w7z;jH@7t$EqrbRf^jkwTk)jWjCjnXp z8L~QMb@Gh7+FpS@Q^2r8c54kPMA=1_D6+K&6$<&rN9v6#k~SS(XLLr6>YI5p|2TYw?0|6KU`V!AnwNg8tfWr#MY_x7nQ3&z$dkv%mlR`~{$dEfZsy<+yDkfjJZN$ZKn1fUG+lizYZ` z4cyiGo)-5F*aiv)mbCZ4L=g`;N*oSDW?cqSZ89Y7!Uu*_C9DgEkv$oRw;jJGqJ6j4 zqDabjWxz0Lf7)xhUtFi<28T{nMKU;C(~aiNktfgLg^tXEv` zv)C80D(QX;W^=rCVC(0bl79Qh?g{OFCVFk}=^8aJEJB@~j2w7c~ zH!QrssupVu>0(_iZ!oZVf^jr211}P8Oee2ngJaXeOOzR`i-Q5QtoVnhc%y#I+*Eh3iu`pLJeuV*( zbmJ6>gQev136iV)2U1&8Jk>>d)gXKOg1wUdj?5|e!3m79fiBGaoakb3%p!9#o$uL0 z{jhd@of{^W B%fkQw diff --git a/examples/SidCrawler.class b/examples/SidCrawler.class deleted file mode 100644 index ba712c5bb68b92891f7c88d749a1c6830f02c121..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1932 zcmb7F+fy5L6#kZ6Hd&T(DWQa0DXldGN?K}Zo1|z1RHINRp;e&TZjvP|quAdLm<9SR_1HQ1BGbWPC26Au-2gIVQoA)3zq{qO~eP zic3(6rjfT2MJ=UEa0cRo&$vw#(!4cK8+rY4IhWMU1udDS#2q#AhBZzQ%hWb>vqagY z!1P+mSSf`{xnwAjOFlBPdc=lNrnXXaWEAox8D9`Krx|$(9f9TPHElx+Wwm@Jl(6VO z6B%Tfi^PqlvNacufCxoN6v}2w7oZF%VWcNaZ8NKzBLYFi6%5E&Qn8HZGQL#t6<(+q z#Hfm^xTfMIsPi7Kt4JcHA`OCcyz4twURlvivNP1LVg(r)t11kv3H@~yS>#j%F(l!l zZD|xj@!6Bigavbw!YT?Vs(6Lx5(dg8Eu)9~>*4lC$xhkKj`v5?g8Ok9riv0Qk>N>F zBJ}GLTF>z*9@Zs{^#8A)jIxRiY)WXU=RBKS(^GWYXN&T>6`IkqD+M#Br=QMGpX7C% ztzDy2(o;x@?UJSEBsdCX;`ypIB|CF=Ls_P-9+7 zD04}4$RJzfTvJJC%;;7^PnBuBP3XYV8NG)SQ*4)i3L=IY#9T55g4w1>B|md#nN?Tj6|$p&w&vk}i*dPX$8r>Jp?dHs)I`44fr zTcTD@)+)w1?BYKh(11=clRQC8AXgVWVge!Iecm3x$rIr3+JkiTBRpb@ z?4g0XqpJePE*~WXxVBLhXrlQAuFV8);hh6gg9_4F10_muAI@O+uW;3EFTlZySE!F+0(S^L#`@l6eebhQVTK%`o2czrw8~A^>J|g3w$Byr;^%GatKjm_km`VL N`$^$?n+gs1;9sHyplkpD diff --git a/examples/SidLookup.class b/examples/SidLookup.class deleted file mode 100644 index 69d110372133bc55c799653f644d9979d36e80e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1338 zcmZuw+fv$46kSJ<1dKPlwAI>TZz76ZL@M4|udOXrTd1wmrvQ=0Lc);5>Sy#9`rZe9 zz?nMZd;O?R_aOpO$PC$MueI07*=KF8|Ng!LFoVw?+{c6)eoTr8crb-&0YMKsF(V?x zW0;c>0Z|V;m=H0`V~jI%d^IN`&XeaN=6OtTa6!Z(PnJY1^SC171&=QUtO{6Ta4o5t zYOXLi{FD0(&UHPfF!Ux>P1&)E8Ks<-GX+ANMOoDthW%fXNAj^8D#%(slrqbzmS5yT z&*n*1DVeIS83NWRPw7@Ut8A%U+>=ssNnQVDm1ekD!WbS1*pRS^Ertclkn_rduU_O! z1tY<^U^Ehp#1ipDEIuEOQeMimB3*@2rap&k^He>wN6wklkRlfsYuhx#3_^()70C7> ze|y)3vSR3kW3qU$O+~Wd$&Ohl?#YJnT`%WWE%U3QnQB(%<5Ha-hi*|bF1b`vv>d~9 zo6RO$PGFlyrx$C!F%0@!>!_mF)HhV4RFF??52?2sbE<<+qcZB>ZdKO5&~?j7nzbei zX}p`g!#GCizs#QwFh1+_en{CEMMkkRZ~=Bk3kDy(T~*KlHwhn+gi2WtoU{V216R(U zkj~NJbyVOyyF}+fz!ANGD>>yASOwxa+?VhiT%gMRhAWD5PrFE(qv>h+cGIgs^dRW0{ZxLM-&*2m0{~ WUi`rT9+SdJ_w2N76g?B$nZ|Y7K%26(2Fengg%~PP35xnq1X8N72vI??x-!H5@Y$!%$a-7J#*&AuP@&Lbg*i|!a0ufCQ7)V!o>=fux!G{ zC4*9EZ0?)5j4SGJh2tv6HHPv7naE;;L30`}8T5x~Uogz|WFnr9;y`5Eeh?9&$G%J$ z7MS*7R0;41H(gJ(fPf zXlwQu<(h84TGJQ6Kcn*D_s`ZC=7hga%%FdozA6cuCrLJms#B*nA$JM6hXsnDu8daX J6|GBH`~#!^i536= diff --git a/examples/SlowWrite.class b/examples/SlowWrite.class deleted file mode 100644 index 84a1cff484d7700e25d019e2dce9178aade0620c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 820 zcmZ`%U2hUW6g|VTEG#Rn6zWF-TR#`5Q0r%n*3{6p#;o3z^2N#@==cg~q}=gxfp`Slxs3bu4CprGN3jtG`DtZ2BZLq#Eu zYtmnr=7uykbwsf&%`J&FRpQgA4|Eh!lBu$WRSmZpVw<*Wizf_|K}p!uH%iLxt8&Z!+%k z=e8uLnvQqyW^4;ykz@lIWEt|quH6f&!KhPhjye*#I}!dw(5c)SNl=wx{-he!a57b& z^m=^Epbog>cm~#RN1Am5cX7|aeLOJm5RWu$7I+#{MJ~BybUzh$5ka{+>eq=?sxpNm-vlX((Gc^&{5GGelc6sI4htX)Q!N7a|ct zpCTE;2yrfh)ECTuh_Fw;ew0I;KUOM0qcb%mNh=MV9yN&#ino!%4(4!~cB53y63raN H5#)aZo}IER diff --git a/examples/SmbCrawler.class b/examples/SmbCrawler.class deleted file mode 100644 index efdb5e3d1189da5fb1bd03d7f2bd3cae5464a4a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1468 zcmaJ>OLyB;5dLl~TehO6v0LYXLoqE6TZv;xAwV1oBx%9Lc~GYTr@Ula2@1AsB&DSL zF4%R+q36&Ao2=L_YWv>^h@wDb-ga#Nl7NyaW;eJkw(6F^>5}bO zE4$6A<*u961~pONHE&w3M{zV$+Ns%FUfyd~^W|psirugZU2pC3UX9px%kflPAzIV4 z9f6U|jna;J)66$aXFFf^UEA3%WH(fND4>;FyKc>r7z|6aMc4ekVY$=NLC5p>NJk12 zI*Pce;$s~pEE71*pNbV7t5{=zr_mR7x3(--$0xYPI@3}p>sZHiDQ)QZ6rbs+U`@xS z)V+xF0%y7)b}L_8eOv~e=XBh_=PJI?@g=^J2|vzJrgu&t-p7V~!L)`?(ps(VST$eZ zTvz2-ety|(Y_;5`Rlk0%)DthrqDxedHk6Ugi8XA`mrQw*(=18tYr_*k%eOq=Y6^r} zy9}KSdcXqL*Z`kxu*_zmr|urLK)5Z9=*4FDw~m8jw%e9d7ntfb2+AyE`+S0iFxnI5 z|Bb@4%_G(xYi7MX#k9FT+>bLr)({SO5S3 diff --git a/examples/SmbShell.class b/examples/SmbShell.class deleted file mode 100644 index b9096fac954c71d971b4356c1bcb2b86bb6a73e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4776 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 diff --git a/examples/SmbTableFileRecord.class b/examples/SmbTableFileRecord.class deleted file mode 100644 index b5d68ff5a3f77908b2ac677eace17e10bfd0ad09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 345 zcmZWk%SyvQ6g{_jX{`34)s+i()kX6G6*rrC7whO z#m${_&*Ki~Jhu1IRg!7d2zE1N?&_#6l8A|)pWOrWSQ20_xbTP^BA(`4 oV!Z diff --git a/examples/SmbThreadTest.class b/examples/SmbThreadTest.class deleted file mode 100644 index 6acf867429631a2690927fa5b5ed34c710cd3ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3481 zcma)8TU1on8U8kNm@|w=(UCzBG?1!+fe|GJ6%a+m1_Pr4TG3WK%pCBTx!{>IiZ-pL zf%Iz9Ha4kgY7={*ZF&P_z>wPXmb5lan)IpdTc5gC`_Q$zR#u-%zkO!7iFS2n&Hne< z`@jF+|DU<@pVw{!*n~fNaS&(oumhG{l5(--lJepl&dc3^7nQgmmy0Ssp2y=SRD8k< z4QD<0q@u0vW(z!UNqyX7hl2i($^PMd^MM@%TGkbH7WO^im!PQlr9AElC<`9 zsq?xA-;nfW4_;Am!;44oO%J~1!M9a>N17Uz%XeqA)p${!k^Y`M|Gw1os@%Ph;W%;S zvWg#Mxs~^&TR+S^iKk!A9=raQ-3W&9BLPoLAJ}K~+ouIYi$IPU5pbofsDQ8ajDAk9 zj_UEg>JHm7<9+o4ik_0J8(YtW&E8~nGS*WavZJv>dNO%FVMUsFYs76ctlMTHPJVCF z)-Ai+He&`29H4G1P77JxDcg)zx9jmpB1Yak+epr^YVlO8J82}7RFf3YvfHd8^_*e# zB$86)aRGOO88_`lft}_5pIeIqYiX%C%HZ}UBGj4RYQ~LFD%N9IoqA7{Cm!3H{Z}UKyiIfhj__2&M73W$mH7^ZYhHe|3r%57=M{2n{xmh1#x=FFZ z@)L_Wq$W>8IGPRD+mT3FVMBVrjMA5k`c7tXlhm%^6if{r=+tloM>QP6VGZp#tl}pc zMlh=3BRHmE3^z55BQ3CIuBucgi#Z#Uh6zm4ue;selj`j?EP>pPrsld*4Y%-`hAF(R z;iq_A#cd5g!y6iYj$a6@n-dPDqR~SMGj1E!tO+J7bf{UwNpx%YB_=ie3cqGmO8Jp{ zs=0+XS#!tCTN-{N9gl#~uXHq;&&R}#vKj6$2$vLX^~D? zseapt%#&TQAQdvlGM(?vm~y&emR-ijOn*#f^A`Rfpq3f~rd?VtAK#VS&2@YJ?aiuJHsXc?5r3-2-d0FH4rR9%G%V+Soh7&j@u-r+4f_@2Sa zOd{fjUEQWfdlOd7h#YBeosDdPOvi~1&1PTHAA zc4i*0Y?(Wr6qZ*I(z8=zrgbRE>^WnE?fS*u&c;<-e*AyjE-{n)Op7WK)&;sB zHwJ9NJ7bH}ec4=K)P9fk67nb?*8a?f-GiO_b*E^P2B%B z*Lhp;y}E<%QScoNIkUJzjxC3BnmLpM&7quNq#oJl4ki8_%8qa-d(xpCDx_}y*fkL7 z;qEY8kZ;4Xzyw5~Y8*L%%5k^?YsaAk{K`0T1Cwx%LmeTLK$z<~s9e`TK{4`Bf@N5X zl{_uN11RN}uY4HDk?M0ix?g&*z^zDjaduD#17LSHBXxeFJ|9`jr~0uFW0As%vN&#p=LK z=&e9jz?%nlkgeme=%p7!{K9ZX*xQg(q**_|PcUQ^5x1)Fd_zP2!cCBJAfv@NJ{NB{GQZ zvyS_fk{j4Eg&keNfV+5kJSAf0T&kdY4&dj=mCAiG-@+5(K zi5Y#0z#Md7rO^E#=U;pVRCG|)R}|+{{nr&J`4Z= diff --git a/examples/T2Crawler$CrawlerThread.class b/examples/T2Crawler$CrawlerThread.class deleted file mode 100644 index 0b40e5c09c71acea9cbb8349b52233d2a2d69853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1328 zcmZux-%}G;6#i}!Sa-Ps3IT14)i$lk5{SiLEg)JEN;E2%Xv80#*(BR$A-iFAH@3X@ zk7)bQhrTd<)G=|UopJiy7a#inlzw+Z1679M+2@;lN_0{aHur46-0{vm#2~y_- z2KEyXq8GQlux^J=m5_PIbHW9I%jpA{Lo)B*9-xxXJYc1Z%^JB6u{`@u%dOac$*MGX z68BpkZCZhhVzcE}ZADUGuvgZ!Qb!_%jKmpyBr$Ys@?nxA}Lh+&}8kYBMZt43fC3BjdL`m_ukBkOV z9`CVC?KPoP_id{taP%#Ict6>Hkdgi1UgxNVRbzNE-5rYP^}Ce~yBf}A9tmhpu;gxq z+mUAU`+eJOKBHdAbUyQL2pg$pOi9XF8B1p#AJR5~1LTU^L1?>7-)wO-liid~Gq>tH zURVrSoXhd(O7s6?lG{?C1{-=Ped;yf1UDR?#Wa1EFcjg7p;g^1`Bs%x2x9b}EI7?? zE6IU!p(TfmSxB+Bjk+6K&|v87Xj<_7pVQS?HL`Q7N|wbp9C7?o5mNS2?o7^-k}3E0Gr?mAn*iyO)s}Dx*V6Ug=1i*8&@rB~A5M zAk&HmW2589!!uiSh`>QbU~7Rach#93595SJ z?o#ZvqevyKk(^A_L}2qj{(b*cg@(gjNX>^oPIP3tMuuN{i42L!MzPVKF3DTCpu`h* z`598Y*fgVib^>rZ#z2O*k4^6HGI}xB0o%2o5ViU>QnmCo((~ntdBJM1GR?I}?jGYJ zV;@^f1e;wY>=Ls|DBTiD*vB@4Tf#BvDG~~`lOITD2G*a!H~6&~GT)Kw)MvO?n91_l?I#>oJ3~+F*mQCPzGCLk}oV P5qQ97p2ayH?GxZ1A<28) diff --git a/examples/T2Crawler.class b/examples/T2Crawler.class deleted file mode 100644 index 4176b41fa421024452f436fb9435a32dd0139b4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1540 zcmZuxU2_vv7=BK($tKIv(AK0zS_xVqS)|d3ph+o83KFSMNTme4*(AsI)a)kiZlLvR z{OF*g7u>=ydcjSZVY~oll8&9}jW_Ba@ZSjUNis=`z1ef#_dM_Oe(yj3{jmjL64y1v za7e{r4FgE1NNP}ENa08buj8mjn3NRXke@f@Yg)xy8gv|!pSM*U*AT`D`TUMFc{hlR zw90BEOsP1jVH&42MDd=A_Zjx)9P?(CJM&8pH!BQ!-nO}utD3IMU4~GBTV{Q!=5U6< zl(2<2%`lpnT{dr+sj6u&rV5@T?8R(8pS;4L%J&~jOP>ZV+)lqy&yiIfjH zhLIk8q8GY+n$d9vXH|Tl;~erTKGbm@vpPP)1sxaVXHN2t_RV(`Mp9hTaam$U`pNgQ z(ow)^9rKdtW8@jmPsAlGesrcC>15rh)w$yd?w+)SS*>!LRP}hzU3{t{oay+K-LT?b zyB97=6{^|Nv@oNfvYL@yx+V4D#B7f% z+wNYdDqK(2l6n+PB&j>k7dgAbPhr*dxJ7_3tGU$|RrUTZU zp`gR%LHS=CibnVZ2jrOKK0=)$=^;>MFl4phD2vhN2 z!K3)kC mexz)E!Z3cO41U?>X#f+17{F`TPvV#{6g?x2HPWa7V-VOFFd`(#WAFmT3pNHU;ULE>L56^{Y8e|j@(3iEC1l?h z$Ocpjs#2x5yzr8$NL1w^mAvMoQaQIJj4=;7=k)DG=ia&9|Ni&qUjTY>-^L4=3L%P@ z1x^Yi1*QdF5ttD;C2(5cjKEoeS8bd_N?=ytyuby4*90yKToRZQcwOKPfj0%-5_ntS z9f7n!Mj$JY6L1CQEnK$oE(#Ww4EW{;3>b4F4p2;rI7pEcF-VaTaY$f@qqvA+ff0_T zMT}BR8Su{!^iw6Y;+btTi|K3WzCzkt=u1^fd2eCNKwv!YF7ju7M3R zdCxt)yp(ZEv*}EMk*?U>WHObEC#RWU0QcD@VZz^AK$7IqzaU<(q zspN}Z*@DN#Ik&Mm;9gx$7s>`Au~o;O$t=3r%2+q6V5f@9rK~F_anY<>uAEDIx#H6C zY}PH8dnF}>5sWJA!HWtnVXs0A-3ktR6!wYQk6wj7QT-TDIDmr+gE*uxgkcLsg)6wK zP(oRuBCsrQP2f6iDBQ$*3b*jS!Uywb?8uo9&l6J0$}NzZdj@j|*>c3H7|3X|ZMZd+a0bIpxg z7PI;Ja$k8V)5qzRLK{%4S95s1l&`px#bUut^Anh{Ir%c7M)YQd^+eKJ3C|S01=%+JblX&+nC840o03>q??@DvbrYGfgajMMoS$WnKJ(R^ zO{w>l+;ncmDtnWi5Y#bklmXt0RtcQ<%J~J)%}qX;;5`Y+MAJW)^1^Ify|g)_&ub*c zMXatRi*$B+s*xP0c&YS>&D0p7b6XZaNsJ+0GreD@wK>+ks+(6XTkF~eU=C~VB;TAU zpDQ5DA6uFT>1xevY|ZR#&1`SY>~PI&a?R{>&1`ke>~_s;cybF2xiQ4U97V~7M4iVl zey1=nMzrB0Zia~nBO@3m%JSRrV?8+`%bm^|e9rb7{LYRVOebR2cuu6HhJX_Z)L=Og ztA?PnC0Ikq*=pBdJMG~b!cND!8r0K&8^SuC+0K9KKnUCT51rVA?Huhu7k07?T}*iw z(~2^M-8jM$#aSMMYJyJ1*{^gao-g${f52DAI$?hu>xIoGx74vg#(^eVb+pPjSjR@; zP#tZ;b{(69!*y&HR&_+4+C2cpKiZ2RpPE+Iyq&MjE*gyS!RhCFGs5q2j8D!lN%Et#kQ diff --git a/examples/TestRandomAccess.class b/examples/TestRandomAccess.class deleted file mode 100644 index 5fdf0df9107f3751a4db7fa389686693f6abec6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1885 zcmaJ?%~u;$6#qRk`CyzDk`h`9l>w_J;Ufa2RszUZ(O^ump;VxLOp=#mAejj>6H?vi z#-+>dT(oXH$6b3g@yIzG-FS{J^j~n}!o4dO9`8#IB@O6X+?RLf-rxOrzjyP?Ki?k# z7)Mn`2-BUoj#quSA>%d7$cSOqi#eCyKRoRA(;B8F&HeH770<%g>XcYM%**iLbuSit zSd`I)B_Wmt(25r~W%OX$hgGq^A;gxv1GTw;4RMx}iJs46aaklR;WGvz(zT zp&L9|DW$o!p{0wYkxH6wF!Y9Y61&=g7A?fy2I6~?i5t2CCl&6hrPI`;61$W#Rm#LgvQX{j(WAVC+bFlt9Hf8 zX&J8SwrZD5li-T_9#`|CQzF$g^)6LPH~P^mtHY{_4;ckna0NM0MQ?j|mMXa%w;0Yj zR>jC@4$rENsVc~$AcU@97kdo;-He{Iqjo7Br62-dKo^B5DKKC%crCN4XJ^Q_jC}@X zDX@e-U`>qk{fbt!L#j2YhSfPTvEc~#ih=`-GIY1sPpXqlZ>4v6#$mW{qI!Cr&lsjY zvK?L`vT%z^3O1>ro6&XRfkSNIS}Ar6^Q@ZEFAJk0kti5Cn?wGS@NvW8dC@jsS+i_T z$NzAPGYp2dm*T1Ta(r!da839jQ#^Zv>oi=w8+{ilxB7JC0s9a`+!h5uGnH%(i zM$bSCpMq=NJ9VQ!6#t*EKF4gnB8HyOX*=?tJtJJ=ge^&@SXw8FR_S#wR-6Ji9Gz%J z4>8uLN7UXDXNsoHF@%?Cri#@8Mx-AlIYy@;+8OQcNFD4k{a`eI0h!DI7bLjRi6~y7 zGnumoH22)JUx^&Kzl8Dx9RXJj(&LCU`5oMIhwyAk-GT0FG@kuaD}L$6fVT&}fZT)U z0_W;DpB(T!#KIxEwj!>{K)1_}PwVg}B5vV+T^b2WpVbg}f(wV}*{UNL=&j*mP^#fl z4Sf{oD?A#I9%AJXmjwco>gb=51YVyM=x(45Bu2(+xYC00JYkG|gTWS*oyd`=HUHy` z)Z>gqC3OtVNPSW>xo+EZqU@6gN7v1^d&>HG>ebH@d*vN&uOfDfdU>u#}C-UPblJ7l<*r&{7$3kPwe9_ nnoNJgW|wfl22jNWMUm+0Ch3}{=ywOMAws)MIuG4^7@hwD&9l>; diff --git a/examples/TestSmbURL.class b/examples/TestSmbURL.class deleted file mode 100644 index d73dd32109fdd266a18d48408d6ee058fc5ce8ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4023 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 b++kygvnkwV4-sLHsnW@5GpY?b?K}Sgu#l8% diff --git a/examples/ThreadedNbtQuery$QThread.class b/examples/ThreadedNbtQuery$QThread.class deleted file mode 100644 index 1259b6d9a113331270ab8fbd7ba417e24fd6b023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 985 zcmZ`&ZBNrs7(E>u?P_IXFdT|H5oK(+`Hl`mVG(0oh-8b#kKKB~;?^$hopJxbf8uA1 z4x))az#nBir2=8YH21mpKCkCF&+YF&KYjryVqM2LX5vWVvQBX&j;qM3xTYh9nLsle zoUUt_3-%j2Zem_X4htIcDhfKru&AP_;*Nr-W448YRCU+8jds}!09%9MBBRp0RFK2yedQw;h z%2-mdY+wax6;BMT;wif*XD!!Z?TM3Q&p$OqN7}Aq;8{>_O+jW5+1ysBQJ@~5jF*lh zyh_XTec>xeo@6}ojrDBNvQC+5Jzt78>2SM}41`qLZs|2?mLyx4ZIZ3-2)TJUi^<%= zFx~9K>~w^~)Qe|LV<;kIiitJph7&zv;B;wL?gT(u99U+zX>a=_N63cl`X$b2&9Xe< zv(-4^t@lEJ#j^qYCzcQrhZSnlY<{SFW|Ol>4zi6b-|aY`x5CATKpEkhM4Fl@p7Oj0 z8a=-cC13cC$R2MBE>MnPgi=Ekaeg|r8BG6+`%GI9S3SVUS44jz_HG}e`99P>v{am; z5513b`EQ6Ez<4|CbN<-p3$$vXkHj8x0~Ktra)@A-)k7Q!{)|b?vzH3dZ?Kma?B*5w Uh~Of9BDjRx+yj(J+(HT3UsNIClK=n! diff --git a/examples/ThreadedNbtQuery.class b/examples/ThreadedNbtQuery.class deleted file mode 100644 index 0d21e06d432f3c9789b79273e15c32b6966e3133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmZuuO-~b16g{t<>9pfi5NzdRfGP4(hGa@unV@VC5|aicB_@V+@!Gz?kj@)2^J-+T ze}s)|SU{q&Kfs^j&Oe~u2S}xH7Wck;=G@Qo{nwX1fB-8t3Md!w1QU5o+L*$$1=og& z8Es}Q%vtaltiAoCMDPxS^GZsQY;}2>ij*PuJd~l@WXM)m-ZB_laYrzW)I%wDdr?ay z`@Gd9#E5t(8Oqgz`Z0gcYh5l6YYmlz@^C{Z+S?!6;zWh9Of6I>Zp6K$Ep|ekT)Js4 zI=d~k*AvNUpldjAP_!`b;3*aut}$1VOXew6N%43Cj!?1u|pVOBm;V{~OGD_J!;B&rn`zA;uv7du>0Ul7%Nh&@?ZKi32S(Gq`8F=u?uVEg~NYYL6FR_R*VjDE-IF0p~-Wg)+ M3N~RTZE7R`2klg!EdT%j diff --git a/examples/ThreadedSmbCrawler$DirEntry.class b/examples/ThreadedSmbCrawler$DirEntry.class deleted file mode 100644 index f849d9333078bf17b127329a034dcf574826e198..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmZut%TB^j5Iw`IP^(};Q4yakuo&vnMB@fEAtAbexNqszUQ&v=EgC+{1u=2q2l!FO zDH|8CxMv>soSBpP`ThC^(8i&T94ZB5v6aAf0#yyW8ukfkPbxyWHyX<4$d1OY-5AxFA$|178Wp6CM*g%6SijVs4>73u9lza>(3k8Or#E&}yzC zuh`W+dm>~y6HgF|JsFCJ>DU!&;J5*I^!{Y3h9YrAs4lN>kDNEhzy|6D)?gUWkT+0( zuHk@CTNX5KrMe4aH6!HzQ==P(LUjTsibO;xB~$Id3193-cO-@}AFG-8G?xeBh;N$X zYp40~c19!y7|p~I2av9b&0b}q>$lQu|7doYmSt4K1bTB&yo4yK4Fv5TyTzg Z-U(|@QAUGxCjX>3uW{6wnZ*wFfIn)YYTy6> diff --git a/examples/ThreadedSmbCrawler$SmbCrawlerThread.class b/examples/ThreadedSmbCrawler$SmbCrawlerThread.class deleted file mode 100644 index a95e9889a839633e48c36eba7eae1c8252aaba18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2087 zcmaJ@OK%fb6#lMXW19(q5EIO!q&ylYF*rP$mH?rU1QOyTfI}WUTE_MynZzEaGh;%! zV!@)@vV*S5#!`1sFjbL~ib$2(6@Q@XuDYmHiA_cN-Em$eR!8!jd(S!dJKwqI+&lj5 z-A@Yuj^e8@K13pfMzkq77KXPnIUd3ZoDAb*w9C;aeme6}-h}ZfPDy=-g3}??pi{oi zh4C5AOV0}uqAQ4QDSJY=h)Z(R8%7^4ORxSg{gV=5Kw=Fl7z$%At|+(~#s^YfQ!p&x zvC{&(lGEB;HnKyZDi_L-(`b>%eM)@>DO+)|N2R)MZ!0+TAHq{hHBGi~IfVg@+{ zc@-uKax$ynOBEKl*pXbCP*iajb1Lp3F0jK*#3&^ChI;O0^jXI!m@4MiO>T+SOace1 zFki1v#VD|?ifVn!R=w&rV+kl(!%7;q!%eO#QK^yv}whg z(fwI&(-eb{C^s-UoiQftgq=?(n6zvm`fT5%6bR+WUfRiIXRP^V)rG;lcCWjFAF_2P zshg8BmXBN{H*I!SH?soq*al{m19W;L+4s)WhNM&Twxj3CUbo0TQh{Opuka8$T&8Pz z^8XM1O6LEAzt%+?P*{&yiJ9Xmi)^I33del57&cp-MJUL&Z>@TWt8A0I7hWyPji`#u z+6T;nV@wdV)+Ld0w9L$~rDb$ph>g4%0S|vXt$f$XGYx@{IIifM5aYa=vtzvDq-Uh% zB}7Z>3wT;y!8`sEz8CO6r9q&D@38CCgb)`o5yUIYJw+(AL5#ONhvzv0;{&f(MrA0E zu=g2)j}eG3Jzde(BUHwg((>;sb8i{y&!|bZKF8L_2*#I6%Rh3B@6HeI1i``h(vd}4 zYs=U+P+7EHI%hk*?Y{Ugcogx)7oOlDO@4yadE5OF|Gp>KAr*By%BUZG;1{LkKjRVK z@ecnpCQ3upU&hWd8l>Fy2;CLnz<5VsmHsQ#xH(1rGMX>@645etkFGeDu_qc>Dq%~9 zLK#&SO9*$ksQVuH7|mD%^u3npWSLIX=Pr;k8eA;Bdy`ys8d&pT{saoem!hG?)-v{& z-hGd)+~EBfV-XtB>&kvycjXu_Ua9{Tf8#CXTm0k7`&bqp>=nDkVG(0-V&aIDeD;eI z{8SOgmHnbkO3^8LML+%e#gLRMC4cPpOBtZ)X!~u+oHryt=F>w;(q7yg7McfqEa7&CZng>V7)5E_3XDRDAsv*NO95+&?fPVq1 Ch4!BS diff --git a/examples/ThreadedSmbCrawler.class b/examples/ThreadedSmbCrawler.class deleted file mode 100644 index e0747bfca524f037270da760ebfedae290f289e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1909 zcmZ`)TUQ%Z6#j->CX8b#;id#?YD*2F5=E=E!PXY222-d8Thn@*B!@5|Gl?^k0_}@- zdHElG@yQ1-1ePrO1N;#_``~X-zcWJ#G?=w=_L;rU-upY>-h1Yce|~!mU>XlJOyEi{ zM(~bYuBx~u<(!In4bi}|pyIlUcQt5uPeU(q(z2-GedJZ#(9nk^4Ph+H75>Cks|- z&M`LX!dY2!gi%qT=WJUzb9KXYg{vSoZ#oOM=WHoBvC(kWO}iSLq)o{wP%EaBH(gJ` zaK2{TGcqmDtY`A3y)G(JpJfQk*qj$lZ%u(_x2ywq)$>y_(7@fmw{F1;iUUfWz5)YxxSy64peA`M$0LS>!u7m62KFc4s+A;-a1~ztd5tF)>-^C zsrA`7bR!)ZyrN+6IF@uw;k<%Gckr_v{`+fXbJfkbRw={e5{^t-kqdXLsH#}gVdA2K zGsgt#01k}Oucl*N!mi830%@6Uxkgo7N_GcGveLe#}@AEn0$)l zB)$H`(|eNfU;}=?Lz5 zRLya0%0qQ}hsCBTW2JoL{T)_vwkN8R@mSMvT*1euuJmLUINedB*%UVKeEvB8x~4Ly zCBY?9i>HHq)O`pK30{I)+{KBjq1glz zg&rYE5lQT!uSjGk3;xqg8~xuX$`Akkd2lTL#1Qule=|l>{K#klqI1LnPF)xd(YP4n zd`)ma#UZ(X4P2(2$NfXddhr&q2IM^8H>QXF%jw6_N9g+*1M$H&hQhlT-or>S9hymp zXLj*iIwIE{JfG*0J&cmEM0~7`@u@aW4dMl>jnnZL`P{}C`gaH$Wdh(Uu3r=0L&Whd ztN0z3@cki3F=R2z3(0zoQ_5c?^b5{*0!4jwf@t5Sv4{71i89Vz9~c2VpMG! zg^SjW6=ZESU)(m;JdG#R zI0X#SUG&fqF#2dqNVd>NOGBC~^qPgIuIW#F0eg9ZmeCqKVK0dqT2J6hjDCW2OhDQc zk{twhFRG2)71CbCz*(qo@Yb!x5AdG_OVki>;>m8j8rnRmzEJQzhEJhH&|W+|MKJLZ zlJ^v$7f0}~kJS)<$Jo)YAI(v^&Z7`ALxo0;O0ykJf+odgLd-s#< z#aHLUW;F5v{3yQp1=Mo~jzMgbbME=w^XH!5J@?1&uYCX}9;nc8DS^wl5=TbGRa{eW zU4@LS5IG?hRNTO#5H}SpDabP@8(Z&uZnYS+b=T$oYS#(^9x%in*{&T{7@~S%n?YLj zTAU$SwO#(K=QOy#Wi`5lNRDN@40HNUwPU@vN?prsmujJJyX_Sbs6O3m^4-w(+(3a& zcFpVgO}=J};Pjw4Z@qNwjUM;+O_4)G5-9}*4F-w~Cs=mUGwWIo&+eR+rfJsebp^LH z+=j_8KN+()Y*rL7HI$Ija7UC{)=4fk-LAvGCB(5SWNjSg>y46`HXw8JsS+I|pn zhxqe)Ax!lpzGsUx`g&m-IZV+Ii7x`WYotg{la(XQNXy1C*dZ+#W=N{! z21xYBkiaZ1kS*LlksT%d*67Oz&^{wF6Fq`-X!O5Bu0|hcjQ#=UikWYaUmKb7F=Dk3 z5%%%V&*4_Gm?1qn*1j!sgc!-`|Zuz>S4-bpMWjXXU9on|Ocmu%o6 ril~r&Lc>v|2eV1~745viGWm)=Xo{(Wi?ohlp7Mwe89kdRoJ0ICpwPp4 diff --git a/examples/Torture1.class b/examples/Torture1.class deleted file mode 100644 index 72d5f777eb6ed9e5e3e098e7ba72333240edf417..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3005 zcma)8X?GJ<7=DH}nMoK>LJNe=B8cf47THq31x3LUz*cGzg*2I#!6XxACP3YA-}fE& zea8hc5qge(@%TYM`b|H{NBs}#^UkDAO5!=5oZRKP_r3SM&-=Xh&d-0J{T@IM&W5oG z$q?3JXBYwOl47@t8>H@+Vj#@18$;NGK@B&BF@(JW->hMu)VFB3HH`f@pduB52|=5jP-a}ibte)G{oXD z6^|=uD%b@DbNUXYj-=v6*UZLu*;c`@UDI%S6$Ce$dDGpjAR22trG1Zr<}FsnP;fz? znKzQf+^}H}q=vIZ)U=f=q-?g@X`VJmoVb%4j`!z=x0+d_w*e%}g|9i5HVUq3rt#rya0zJmE#BR}dMtoOs8|AB%?h2EZwzT_((xZ?MTrv zY}xrdxR7$3qn4dfu&l~r(#_^}RR*psx(AKCYo=2YQQ`FC^Y-MzN916$YPWL^db(+? z#U{C@E~%qLJTA+9Lgh`&a_n?Z(as9YFuaXV6$IM4yEl`P&+xg5lRCb@>pH%a*ncHb z_!_4aOy6P^#s;jmjFtB!V>oWx7D_j3xN_b`xuIaL2b)%0gtjeTD7w_3k;-wo33r%V zI=;ba1=>JGhT__l^ncK@Z!>J^eXFA+o|L8d4rdfxSPlKo;X{<0g4tDQGCR1D>0CXb zM=v|}DhOpw#}$_xNs)HuNL}7BrA7@m=?62`UY|t@VvX}vE{PgRdg)fmZD#)ZP6T7u?)ttXk&~*Hq7Vig`KHibHP2tPG2FR~* zxR}b4f+>snZ1%R3reLa2F!GdbSEJqPDDjhz&TFnUxrd)xo)_DBHN>{pQ#oljojzA? z)-eUk|JSD6ZbO5Kb5^GgyN^ zunt?fN;5gWmi2YC@);c@qhTU{b)3eu$ovu(^m(m?Z0+z`i`YtzWARXDS9ci~B~%Y> zBT8b$Xo)lfUh`sU28I8~(x_U-vVaJ)=s&0vC4|%Ul>F{Aq;5gwbwRq*v4B+DROHn!t9`uI_kMUd3j&ZCX>MCPH zvb%%?|GnL(vGFHpQvFc%e>oEb47`S0(285>|9)JG0~AAwA{b^8rqN69tG*~a0qDz) Fe*p#1{rms` diff --git a/examples/Torture2.class b/examples/Torture2.class deleted file mode 100644 index e688b4fdf5889f72d13f241b8bd9351ed75e4239..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3481 zcma)8X?q)26@EvStnqlfL|)=Jbs|$Yl@%|EL*2wqT#|Hiu-$-Fr%o3#md4Jwl13ek zN(^nGP@t@Z5(+6a0kfE;P*PIa)UCtX^6(e<1AO7>2R=i2kH(VaNCCXu^_+9xv%L4t zU;q8)27m$lMZ-xv7{rVQAI{Wa7!OG^tFbv7#KRhbctrLdmF6*NJ|@jM5isg7hj~KiUsMqQ$#J3dq=N&txpk-n)Zp~*0v#Ghk z>D1i4R?-|*;B##SwMVVA<&G)1Jup71TJnG~0-11mkupV>lG)}Z99}wP_t{24Je~L>AI_4=}UH@nJ zIrrVAOx67$exc)4{E{MRBUM#I$FK03g3hFwUU1J>KV%ud)^Sx%>M~pw$z0B@YAcA> zb^Hd`bi9Grg2?Mw#hQY>amO^M;aWF?@LPexL!zLql$qjwdch0c zn=HHVQw-la-l99jLI@wtICjQ#T+7UcC5&S_-o}Q4)?^ z8Sm(LSBkA6X3|+HiKOYWa+|jbC|0mbU#oCa7}As>O$p10KOS?8IF;+I?A^sOE3oe@ z@g%LRD^8G=?U7!xr-FgRxL~?dEDVMt(p$+d1(E8^z46KrSY;keFJ)abMI@#}3bc8K z8Pn4qaET{xqFN)9G1CbJebpSTK;tordb=ZME3uY#RoC_ySS0lJbLn#-d`aFZwN_RF zaBT``hNLE}~#O&acbqA})Z-%m6Ir3=F* zHwkt_+>5Ti?7i^2Rl}0z;$&-ASef;P3&ld6mu$A|eMCHyn zN5|nu4g0R>DwOCte6#ykQS%1;g>heD9JopW1*h1CC=O_B>(LAyx1a$Z=8B*DLHx-vdIWo4e_LQEkNQ>UBmSsNcKP#YcrKu(&7mE6gt$}BF4W?U>+)y~wQ(%c9Ou!V$4&}$aG_(n`mRd#jxu!_m()9{ z-gyQ4%TC{2roMTiAStQTQ-uq+yu3}T>wjqNq1K*@m$v!2w@hc#&pmmBi+;+ubZR&C zyRYD`GN2!*RPPS1;Z`meO%&%PGd(oZW3J)0R_wcYc^jHYrMaFmG%_xk>7|+8>SkD5 zHzu#Q%#4gZGb@Nrm3hNlie6u+p97lbpQM;GuS9(#zGI~lO=CC9u@jB#ThPVdJ^VHg z<1j~KxRur3gQu|%&*OHyg?#j=hGTvTyM#fnbEWr}<~?c1)? zRiIbgo>vzewq%*Ax}M+jL{)VCVonxlAdZBANyJoS4P3!h6*&WWTvKt~Kmj)toE~-Z zhuOeQBoxF)Th&*duo?=CzjH|XDFa2B;2#yr|HhE#xRY^u1?sj;)~2Lm$MU4s z5_Nx7DjpjkD!x^JUG=Owl?-=%%VWi%mMhO9BzA1MN^fSicu_Ro2SDMVu(UxA3PH~_ z|4an<0lIkr#ms&}V4o{iM>{#dMi3&02A$qBNDSjPhH=Rc2$~-eI7FzA@E#(iY#-`A zQ9zV=CWc%|ga?dKW{$HCX%nnKLlS4nC2M&{w5+ZipZ`jt;9AN&dXHo_^#$5$lb$#X99ZLMJe X>zp^SgvVGW8tk91g=2>Q0nGjeodCTk diff --git a/examples/TransactNamedPipe.class b/examples/TransactNamedPipe.class deleted file mode 100644 index faea61554bb7a4bbd15435ce8ab69057432b78b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1439 zcmaJ>SyK~15dJ3FWS3=?5J?~+81V`T5Jf=^h#Z0h5zycf@u*EQq?SrHsm;dY$$#R5 z4?g%{l}9aA#?p6xl-NU%EG1>C(mgYMOn+bZ?62S7egGK3a}`k}WDF@7R^h>j7uea6 zkyPQwh>Qy=6rnGwP%$dRB_S>g^H>|kaYe>e6#*m^ToXDa#Ds!Lp|7i$!VMMEm{Bo{ zF$HrXA8q`&DOMz=aZ|>;j0Fb&q+uHN6oWT5_<%v0s}wjx$FgDam3leHt#v(Dq7$jC z8zw_Iwz0gWztEE<-7F?Ewq=;b2@$ByzsmEfZB)#fj9awNRO(iqFBl>?yl&}cP0!ma zdYKp2j4B@yNi>|o0K-5lVY*b}MZGj*73*bg+WR>f#&oM#OGPJZq$nqCR_iuZ&h;`wkK3|Zw_T?2R^HgG zCF#OsrkvZaT%=5ESi)@$%ebRq1*1OmI-3o9d&@|ZdZ`YKrxa4NmyeWvxDgakTS1p zHm5FmD|G@E+P`#-#%`~L6z|uoRT=??p+m6jRq7hoW=ANlHnd>iZ&Ef~&_^zR-{&**3%kljXS zFzDb|NOsT_4AII#*g<#1m+*?So`|3PBM1DCAL2jUbnhKU6vYSzFd9Jurxl!uAcV6l&b49; z=M`LtK*6Yri>xm(bD6Cx5sc%iiffEqS8;>&O%=CT-)4^q6?gbyQpFVOyDFwxCso{I zeP2b2^#c_%tSRFd9x6yHcqGtr)v_(`x*_kaF(UO-jrp_nMyG$-8my$AS7Hg zEL)%__AIq(yfqR9!_Fr%o@?3paSn`3uH|IOvmCpuV3wXUPQ}g1DT{-(`PtN*EPJCI zs^K^W6=XEbVUW05I$L@Pa$;_t#e#yz8lGU0O8#H(cEvQME6}d%x>4~~9M|&RUC}i> z#WM}hv83SzmK40y@Cx(3AGzwfNrz!S14|9)ic|I&&HjUy9Jhw%u*`|+CAeJeDjD7i z2bhfkZz|HQ9U|X|>bfgU_Fbu?m9nI!nGT~?4V7!2bZw(xI&P8C)w-{)munqn^fd|s z%2p!rlP*&J_Xnfi#4_-6P6`ht9jZD-t%OMOAhHz7q^g0*X zz|ozt+(Rb~rTU#4N7=8yrcC&0b1cC*uAlf!iU=_8MQhO9?F->WMRK(LJOmJ{_6ZfF@-e2NP zuj@t9N1lft;2-ecsPAl^lG>nqG4suLeCK<=oj?Bi{TRS9supIkXkiJ<7RKS^D7|Cg zT?+$PG_j)h_q64GEq!3&GOp<5Lw#H|aaHeYCa!7aM+UB2$m52An&a?J~dDh$X-){imwaw7w2~bGItvLQee2G0$EP{stmW?sz*)6 zQ&B81Q7j$SR6TMczv@){>W1>v(Q(;8fyJ1qZ3!TK~Bwo3UyH zk$_ccBwL$72J#Hom}~jW02$ZC|nIY@PL@Srw$-Ukmj4k#^V<80%&}!D-_g%n6M4 z+?Va)?XNnHuUyZQ!HT01v(|ZBV5(Pa&7|rGyxq-Gjy-?NjiR3#;r^{8{!Rw5s=2x| zBw@edv)4(aZIVctTAQ`K;`NN7x2rR%S8c-&@F2Kxew9E%>-dsH2| z7-t;Fxa|5Qf4n%~<3#obn#wqi4!E##m)b* z4yRcvv0M9oJ9KNryLw8!-V5|<^e?h@YV1kV|9dX@191Rm_+IF*AA+Yju5a;lj=SJK zu+WBhMuD@&HQP}lr-zcVc0EQ02KVqe`fe_?&|ju7Bd=uoFJ}wcrQ=^w{0*5S4D7a% z%^NM4ONH!83pq+HSS<|xk`+(?{*z8E*j?A9;}*{3hv+py!*G7&h5zVNn59cCj6F-y zD0qCLI`~##6G@JUEUtqX!5K_p2&>$0@U)ImD85rV!p9hXK!JW2QAA&QmkpR{&I?Bv z-^~}=n0SuYQu*u=CU^5w`RV-YZJcZ44H~+A8Djf@v#dVJ&P-vRrwlV`Tnm)@aOodg Cs#M_s diff --git a/examples/VerifyIO.class b/examples/VerifyIO.class deleted file mode 100644 index 116847762843f2e9755c32aeddc8c3c92652e248..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2139 zcmah~OM4Sl7=BNabf)7#n?MV_08=g{jcL;Ya!CQPh0@eE#fFQa-X_VUos!JNWCBza z?{{$J#*GU%Y?VdAV|;L>3x9!sK=-cPiQhL#+wm#Sd+3OYIJih>|} zcd~a7NnVjp5Gff~IqI51@h?kAOSrC}A2SO2u*AbF5?)oX4;OfNO~&gyzriuOgbYI? z-{+9!RgOXCBp5RC?6xdpML`5JGE8<_m2pExfxU_{ED5%Rl0f@u(=wg20>1F@RRRB$ zoihYF=S<5;R*M;L&Ljgn*9Rz<>_6kDoNY|m3;xn@x}E#6;hCMxLGaxCSPO>23AF)1m#TFx4rTwvQ( zqip8a5(}eTRK*FL6i~eYRFqNS4XU}@yRlGp2nZ!M^dj$91qQZsld%5db56xg+){BH zYZBg4aR+Zpct^!uysP3puD#1!!V@j9XG?M~0)Z3r)rzB)%Jxk&XJ~n9PqXt{YJO6? zvN%`KbStOjjEZAgI#a3T%(9Vn?DCq5_u;7c03Q-*>(wW#`Mgm!a*KwZGs*&?^$n)2 zY2=e=>v0~YoAD|>!KVUkaZSZ%%;H^UF}S4>6%#nE;&Xf<(C1ciQ!Q34$1EBf z$1kv#%WDP0T6R_{TF%xi+tG@;lU<2x`LQ!x?@LlZG(UbuK*Ur$k8}SM#hw&!go5wk zKB-HyZwScix)A8v1hkM@CC&tPY??gaB+_(JFOsTuhFc=`Fft*~O_F74d#$XZbBQ$H5-3$~f~FcC zGbJvu6HySJ;;eye!LD!}*Ib}`VSDuZjj9nSv{tB! ziV(J80NXKyE{xM7eu^yT(TxOpki>4BAy01QEMX)qw=muzTYz?^T#SUPvxTvX@CF%K zDDEGL*07@mEXu%kGB83*!2YDEn{oAQk}-r1N;yEV_7aGFv>GH>`|0m>fM5*~l*5=r z*aN8pFObEhO)OCy(I$M6$ARzANu@%&YS`_6gx&`F(hc;dBfcYb4Aik_?%5jlrssdf z@8s6NzH}WLfgKF(r=f-eH5_c<5K}#r9C?JpappM8Tn>Nz4MrP?P(C**M41M8vxaDh z=0VqqJ}65aqd#++mTSa+giFMl0X~{spP{(Fmq3oWfy_vlO2oV+#yx36oWu3ntih2- zuW`f2sNn}s4sB98O()8~|8~UajK_%9qd16T7$IR!6R8WN!Yib_43T=DPWK@ZTE`TA XAr1V6i})Keq7Abi$_4F$C_n!%lMwB@ diff --git a/examples/VerifyReads.class b/examples/VerifyReads.class deleted file mode 100644 index ff0d0a12c12ea000be6786cf562b5825c7495fe6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2215 zcmZ`)S##4?6#i}^N4BDn4F?Pa#9GG*Hl#EZ2SS>J#o!Q1SZV@oW&1i2Sdx+CB<{Y@ zy@mFXJoJHKhQ|(_Vlz!AkA3J&r!#$N|3Lpn>A8+WOal)(chS*zzw@1QkAD02=OqA9 ze5W9SqXF!~urRME@MA=nQH7RcVs=c%aTzBR1aMTClYS%=?7=CqI4wMq3dV6p>`e%B zR($%Z*gNOPq!`c3xS(JIF3Py1AcWV%A|+;*#cWE=3L$5MM&W*WdIyPyh ztM8Y+^SU)1oAeyRnjWm4qa2&h5Fx|1Tp8D7T&JT=-LM$C!c%L%=^;V#49cWkbTV83 zGqhdgj*%;!<9gPO3Qj6wFjeeDR7EfPR9LW86mUbui#Q;R&7jt^r_-v-I(j3;T#h>` z9JnM_OofM{idkV|n3FNDqJ+0pye+Wb!MiG6!hnkR@IFNlB{5ZefDakAtdSyN6^b5d zz;z-S!$%Ao>$yx6y{Fz2;g4}s#V7bw#b+>Oe6HdPe9167UUWUpEpQUMq|uQYWrk-w z+bL;zJEIF#wJ?uPM>WbsJQg!cS=+oaSai7)FX*m2Y?U&5_a90his^-d+oR>|eBPeR zYUz^Z&2Wv1#W0Je<~jN-cU(QMWkv1C_)5jsm{ai$_Q|-V;x@izXs%0xh-)9!$eP$0 zcAqEYg6_@Kh#Nes8Lnp8o~EzzC&{Cf+0~>>q_0tA3|p&P7WZP~dOl}6CeL0tmwZx0 z44o@lCMMSGR?}Oz+ZYyA+r;M$*P|@c@-joqH22Qx4!68od4+qPu5|i>gr~&=3Te7TuOrsGC`lwO{&@TE1-35`&`-9b`jJA`j}|o3 zTBTiTPc@JuHIPv6uh`IAhO~gT2#vlnnrM(O{U558K-$oWc5EaI(Txa#_^<=;(L3Pp z?gdB>7U54VB9N*;=_{kTLnT9iEi{y|u7cLMz;9`bmeDrgqiOpc4AamN_csnmK`G>4 zx{KS9kUuE(KOd)C%9hc2Q)2fY{}J>__i$B!28sRpj$j#GcaV$-CVg}uMYM=Y>F$PK;$Phl(9KAAbpRHkRq0iL8*)__aFZg3Y5_uQp(u6s>CUh5!ghc zZl;*GB8+V$>2}1i6T{ez)AT#MLE{{~xkb5Lpe){_9R5JrTcZ5^PTqe~3jQMP4iZum zDfluD(O)}`!DTh6^Gem!B_d0{yJ-Cp+d8x|wo8w&BO>)b!p@;Z>`HZ4usgYkJ*h}z ze+4g$lho}C%iiIdcW+-uPdACQN3q zEVlIGVTXP5c4pq&@1M^v06lEGkZ4s)+E*?HUvZ_;D&?LWVzA%ha|K> zJG_gYqW&aGZu)1>BmJ1gX~JIVC{E(+SfJKjNOrFTil^zAx_THV`XYZAYBPw26EX#p zC&aFO 0) { + response.wait( timeout ); + + /* JetDirect printer can respond to regular broadcast query + * with node status so we need to check to make sure that + * the record type matches the question type and if not, + * loop around and try again. + */ + if (response.received && request.questionType == response.recordType) + return; - if (response.received) - return; + response.received = false; + timeout -= System.currentTimeMillis() - start; + } } catch( InterruptedException ie ) { } finally { diff --git a/src/jcifs/netbios/NameServiceClient.java-2008-02-05 b/src/jcifs/netbios/NameServiceClient.java-2008-02-05 new file mode 100644 index 0000000..00f4d3a --- /dev/null +++ b/src/jcifs/netbios/NameServiceClient.java-2008-02-05 @@ -0,0 +1,431 @@ +/* jcifs smb client library in Java + * Copyright (C) 2000 "Michael B. Allen" + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package jcifs.netbios; + +import java.net.*; +import java.io.IOException; +import java.io.InterruptedIOException; +import java.util.HashMap; +import java.util.StringTokenizer; +import jcifs.Config; +import jcifs.util.Hexdump; +import jcifs.util.LogStream; + +class NameServiceClient implements Runnable { + + static final int DEFAULT_SO_TIMEOUT = 5000; + static final int DEFAULT_RCV_BUF_SIZE = 576; + static final int DEFAULT_SND_BUF_SIZE = 576; + static final int NAME_SERVICE_UDP_PORT = 137; + static final int DEFAULT_RETRY_COUNT = 2; + static final int DEFAULT_RETRY_TIMEOUT = 3000; + + static final int RESOLVER_LMHOSTS = 1; + static final int RESOLVER_BCAST = 2; + static final int RESOLVER_WINS = 3; + + private static final int SND_BUF_SIZE = Config.getInt( "jcifs.netbios.snd_buf_size", DEFAULT_SND_BUF_SIZE ); + private static final int RCV_BUF_SIZE = Config.getInt( "jcifs.netbios.rcv_buf_size", DEFAULT_RCV_BUF_SIZE ); + private static final int SO_TIMEOUT = Config.getInt( "jcifs.netbios.soTimeout", DEFAULT_SO_TIMEOUT ); + private static final int RETRY_COUNT = Config.getInt( "jcifs.netbios.retryCount", DEFAULT_RETRY_COUNT ); + private static final int RETRY_TIMEOUT = Config.getInt( "jcifs.netbios.retryTimeout", DEFAULT_RETRY_TIMEOUT); + private static final int LPORT = Config.getInt( "jcifs.netbios.lport", 0 ); + private static final InetAddress LADDR = Config.getInetAddress( "jcifs.netbios.laddr", null ); + private static final String RO = Config.getProperty( "jcifs.resolveOrder" ); + + private static LogStream log = LogStream.getInstance(); + + private final Object LOCK = new Object(); + + private int lport, closeTimeout; + private byte[] snd_buf, rcv_buf; + private DatagramSocket socket; + private DatagramPacket in, out; + private HashMap responseTable = new HashMap(); + private Thread thread; + private int nextNameTrnId = 0; + private int[] resolveOrder; + + InetAddress laddr, baddr; + + NameServiceClient() { + this( LPORT, LADDR ); + } + NameServiceClient( int lport, InetAddress laddr ) { + this.lport = lport; + this.laddr = laddr; + + try { + baddr = Config.getInetAddress( "jcifs.netbios.baddr", + InetAddress.getByName( "255.255.255.255" )); + } catch( UnknownHostException uhe ) { + } + + snd_buf = new byte[SND_BUF_SIZE]; + rcv_buf = new byte[RCV_BUF_SIZE]; + out = new DatagramPacket( snd_buf, SND_BUF_SIZE, baddr, NAME_SERVICE_UDP_PORT ); + in = new DatagramPacket( rcv_buf, RCV_BUF_SIZE ); + + if( RO == null || RO.length() == 0 ) { + + /* No resolveOrder has been specified, use the + * default which is LMHOSTS,WINS,BCAST,DNS or just + * LMHOSTS,BCAST,DNS if jcifs.netbios.wins has not + * been specified. + */ + + if( NbtAddress.getWINSAddress() == null ) { + resolveOrder = new int[2]; + resolveOrder[0] = RESOLVER_LMHOSTS; + resolveOrder[1] = RESOLVER_BCAST; + } else { + resolveOrder = new int[3]; + resolveOrder[0] = RESOLVER_LMHOSTS; + resolveOrder[1] = RESOLVER_WINS; + resolveOrder[2] = RESOLVER_BCAST; + } + } else { + int[] tmp = new int[3]; + StringTokenizer st = new StringTokenizer( RO, "," ); + int i = 0; + while( st.hasMoreTokens() ) { + String s = st.nextToken().trim(); + if( s.equalsIgnoreCase( "LMHOSTS" )) { + tmp[i++] = RESOLVER_LMHOSTS; + } else if( s.equalsIgnoreCase( "WINS" )) { + if( NbtAddress.getWINSAddress() == null ) { + if( log.level > 1 ) { + log.println( "NetBIOS resolveOrder specifies WINS however the " + + "jcifs.netbios.wins property has not been set" ); + } + continue; + } + tmp[i++] = RESOLVER_WINS; + } else if( s.equalsIgnoreCase( "BCAST" )) { + tmp[i++] = RESOLVER_BCAST; + } else if( s.equalsIgnoreCase( "DNS" )) { + ; // skip + } else if( log.level > 1 ) { + log.println( "unknown resolver method: " + s ); + } + } + resolveOrder = new int[i]; + System.arraycopy( tmp, 0, resolveOrder, 0, i ); + } + } + + int getNextNameTrnId() { + if(( ++nextNameTrnId & 0xFFFF ) == 0 ) { + nextNameTrnId = 1; + } + return nextNameTrnId; + } + void ensureOpen( int timeout ) throws IOException { + closeTimeout = 0; + if( SO_TIMEOUT != 0 ) { + closeTimeout = Math.max( SO_TIMEOUT, timeout ); + } + // If socket is still good, the new closeTimeout will + // be ignored; see tryClose comment. + if( socket == null ) { + socket = new DatagramSocket( lport, laddr ); + thread = new Thread( this, "JCIFS-NameServiceClient" ); + thread.setDaemon( true ); + thread.start(); + } + } + void tryClose() { + synchronized( LOCK ) { + + /* Yes, there is the potential to drop packets + * because we might close the socket during a + * request. However the chances are slim and the + * retry code should ensure the overall request + * is serviced. The alternative complicates things + * more than I think is worth it. + */ + + if( socket != null ) { + socket.close(); + socket = null; + } + thread = null; + responseTable.clear(); + } + } + public void run() { + int nameTrnId; + NameServicePacket response; + + try { + while( thread == Thread.currentThread() ) { + in.setLength( RCV_BUF_SIZE ); + + socket.setSoTimeout( closeTimeout ); + socket.receive( in ); + + if( log.level > 3 ) + log.println( "NetBIOS: new data read from socket" ); + + nameTrnId = NameServicePacket.readNameTrnId( rcv_buf, 0 ); + response = (NameServicePacket)responseTable.get( new Integer( nameTrnId )); + if( response == null || response.received ) { + continue; + } + synchronized( response ) { + response.readWireFormat( rcv_buf, 0 ); + response.received = true; + + if( log.level > 3 ) { + log.println( response ); + Hexdump.hexdump( log, rcv_buf, 0, in.getLength() ); + } + + response.notify(); + } + } + } catch(SocketTimeoutException ste) { + } catch( Exception ex ) { + if( log.level > 2 ) + ex.printStackTrace( log ); + } finally { + tryClose(); + } + } + void send( NameServicePacket request, NameServicePacket response, + int timeout ) throws IOException { + Integer nid = null; + int max = NbtAddress.NBNS.length; + + if (max == 0) + max = 1; /* No WINs, try only bcast addr */ + + synchronized( response ) { + while (max-- > 0) { + try { + synchronized( LOCK ) { + request.nameTrnId = getNextNameTrnId(); + nid = new Integer( request.nameTrnId ); + + out.setAddress( request.addr ); + out.setLength( request.writeWireFormat( snd_buf, 0 )); + response.received = false; + + responseTable.put( nid, response ); + ensureOpen( timeout + 1000 ); + socket.send( out ); + + if( log.level > 3 ) { + log.println( request ); + Hexdump.hexdump( log, snd_buf, 0, out.getLength() ); + } + } + + response.wait( timeout ); + + if (response.received) + return; + + } catch( InterruptedException ie ) { + } finally { + responseTable.remove( nid ); + } + + if (NbtAddress.isWINS( request.addr ) == false) + break; + + /* Message was sent to WINS but + * failed to receive response. + * Try a different WINS server. + */ + if (request.addr == NbtAddress.getWINSAddress()) + NbtAddress.switchWINS(); + request.addr = NbtAddress.getWINSAddress(); + } + } + } + + NbtAddress[] getAllByName( Name name, InetAddress addr ) + throws UnknownHostException { + int n; + NameQueryRequest request = new NameQueryRequest( name ); + NameQueryResponse response = new NameQueryResponse(); + + request.addr = addr != null ? addr : NbtAddress.getWINSAddress(); + request.isBroadcast = request.addr == null; + + if( request.isBroadcast ) { + request.addr = baddr; + n = RETRY_COUNT; + } else { + request.isBroadcast = false; + n = 1; + } + + do { + try { + send( request, response, RETRY_TIMEOUT ); + } catch( IOException ioe ) { + if( log.level > 1 ) + ioe.printStackTrace( log ); + throw new UnknownHostException( name.name ); + } + + if( response.received && response.resultCode == 0 ) { + return response.addrEntry; + } + } while( --n > 0 && request.isBroadcast ); + + throw new UnknownHostException( name.name ); + } + NbtAddress getByName( Name name, InetAddress addr ) + throws UnknownHostException { + int n; + NameQueryRequest request = new NameQueryRequest( name ); + NameQueryResponse response = new NameQueryResponse(); + + if( addr != null ) { /* UniAddress calls always use this + * because it specifies addr + */ + request.addr = addr; /* if addr ends with 255 flag it bcast */ + request.isBroadcast = (addr.getAddress()[3] == (byte)0xFF); + + n = RETRY_COUNT; + do { + try { + send( request, response, RETRY_TIMEOUT ); + } catch( IOException ioe ) { + if( log.level > 1 ) + ioe.printStackTrace( log ); + throw new UnknownHostException( name.name ); + } + + if( response.received && response.resultCode == 0 ) { + int last = response.addrEntry.length - 1; + response.addrEntry[last].hostName.srcHashCode = addr.hashCode(); + return response.addrEntry[last]; + } + } while( --n > 0 && request.isBroadcast ); + + throw new UnknownHostException( name.name ); + } + + /* If a target address to query was not specified explicitly + * with the addr parameter we fall into this resolveOrder routine. + */ + + for( int i = 0; i < resolveOrder.length; i++ ) { + try { + switch( resolveOrder[i] ) { + case RESOLVER_LMHOSTS: + NbtAddress ans = Lmhosts.getByName( name ); + if( ans != null ) { + ans.hostName.srcHashCode = 0; // just has to be different + // from other methods + return ans; + } + break; + case RESOLVER_WINS: + case RESOLVER_BCAST: + if( resolveOrder[i] == RESOLVER_WINS && + name.name != NbtAddress.MASTER_BROWSER_NAME && + name.hexCode != 0x1d ) { + request.addr = NbtAddress.getWINSAddress(); + request.isBroadcast = false; + } else { + request.addr = baddr; + request.isBroadcast = true; + } + + n = RETRY_COUNT; + while( n-- > 0 ) { + try { + send( request, response, RETRY_TIMEOUT ); + } catch( IOException ioe ) { + if( log.level > 1 ) + ioe.printStackTrace( log ); + throw new UnknownHostException( name.name ); + } + if( response.received && response.resultCode == 0 ) { + +/* Before we return, in anticipation of this address being cached we must + * augment the addresses name's hashCode to distinguish those resolved by + * Lmhosts, WINS, or BCAST. Otherwise a failed query from say WINS would + * get pulled out of the cache for a BCAST on the same name. + */ + response.addrEntry[0].hostName.srcHashCode = + request.addr.hashCode(); + return response.addrEntry[0]; + } else if( resolveOrder[i] == RESOLVER_WINS ) { + /* If WINS reports negative, no point in retry + */ + break; + } + } + break; + } + } catch( IOException ioe ) { + } + } + throw new UnknownHostException( name.name ); + } + NbtAddress[] getNodeStatus( NbtAddress addr ) throws UnknownHostException { + int n, srcHashCode; + NodeStatusRequest request; + NodeStatusResponse response; + + response = new NodeStatusResponse( addr ); + request = new NodeStatusRequest( + new Name( NbtAddress.ANY_HOSTS_NAME, 0x00, null)); + request.addr = addr.getInetAddress(); + + n = RETRY_COUNT; + while( n-- > 0 ) { + try { + send( request, response, RETRY_TIMEOUT ); + } catch( IOException ioe ) { + if( log.level > 1 ) + ioe.printStackTrace( log ); + throw new UnknownHostException( addr.toString() ); + } + if( response.received && response.resultCode == 0 ) { + + /* For name queries resolved by different sources (e.g. WINS, + * BCAST, Node Status) we need to augment the hashcode generated + * for the addresses hostname or failed lookups for one type will + * be cached and cause other types to fail even though they may + * not be the authority for the name. For example, if a WINS lookup + * for FOO fails and caches unknownAddress for FOO, a subsequent + * lookup for FOO using BCAST should not fail because of that + * name cached from WINS. + * + * So, here we apply the source addresses hashCode to each name to + * make them specific to who resolved the name. + */ + + srcHashCode = request.addr.hashCode(); + for( int i = 0; i < response.addressArray.length; i++ ) { + response.addressArray[i].hostName.srcHashCode = srcHashCode; + } + return response.addressArray; + } + } + throw new UnknownHostException( addr.hostName.name ); + } +} diff --git a/src/jcifs/netbios/NbtAddress.java b/src/jcifs/netbios/NbtAddress.java index ae4e82f..558a49d 100644 --- a/src/jcifs/netbios/NbtAddress.java +++ b/src/jcifs/netbios/NbtAddress.java @@ -186,6 +186,15 @@ public final class NbtAddress { try { localInetAddress = InetAddress.getLocalHost(); } catch( UnknownHostException uhe ) { + /* Java cannot determine the localhost. This is basically a config + * issue on the host. There's not much we can do about it. Just + * to suppress NPEs that would result we can create a possibly bogus + * address. Pretty sure the below cannot actually thrown a UHE tho. + */ + try { + localInetAddress = InetAddress.getByName("127.0.0.1"); + } catch( UnknownHostException ignored ) { + } } } diff --git a/src/jcifs/smb/.SmbConstants.java.swp b/src/jcifs/smb/.SmbConstants.java.swp deleted file mode 100644 index c8e299934bed46bf2b9bf476210a4ee600fe0cdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeHNO>f*p7#=84K3ZBpaH)h$5Rj^9vzsO%Qk6=M*PEDn?Zx({NiUXn*PA-owbQjX zOf2@aeP2gJF2hyw>C=ovWl2T-1|y_#%+M3#EI&I%96{ZWN+07}x*NlFd^1F>Gz1t8x*AFZ=@CzH(ww0rjJz@+n2KLRs zVRCZ1RD6EoIqs<^>-&~s4H*NB0mcAhfHA-rU<@z@7z2!f{|5uX)&X)GUAZ5Sfcs+H z#&rhwug3pBfWMCdAH@I1A9gVY7z2y}#sFi0F~AsL3@`>51B?O20AqkL@E>8oYDJFD z(}O?W|I-@4A4drJ9k>B}4qOA?1l|D71M9$PU;#J;{PZ{>*MSSbY2YYu1o-hVA#Vf6 zfX@yQA^J5b_DI3y8oIz%M9fd<^sf9ykpAi~`62NoIqv$T7o4|yKIdCq zJoY)O;ceT;BXNA;5I9Xpx>kpC+<@Z^Lo<0zSe8~qs(*ni?o1a?5qh8AxGZU+V5r(! z)VP$}ctw@#)lhM$xj3JvSzpr)u}UpRjc4*2FH7aJsO&YK&TFiRd|6dwxEyINMU6pb z28S7J34F~gSM<>8@E=N9saVY7fyyX`S&@|TP$cqVI#)(kg)=6vluhb9m85oxFqF|z zYDX4VMA?)iQ>{^PJ(4NT=gH^>Z`AdZ(?jP%JH?qi8LcM3t*UB>CSQ}lMYpZ5;R4A6o3Mwk2 z@n=(I;@BFSJXA(el@Z4VV;aT|p}vj@Rb+lipC0cMZ9KfFv-8;j80#1t=b=2kp*m*n zs-q@qRmlh=(v&KuxGD;D!~p#{)`6JL3Y^#vP1IF+1wy>BtecXOoKVz{oXHgH5LXRR zDT`%OhXa~qteJ|qq#6=$NU9PABM8ZuC<8tQqPn!CU<$ym5k}$w$O@V}{h(=7S_Bs< zIAm@UQ-o48J~N4s3Vzq zByLGO4W9FJHD)sUH0A`Ma6f-A4pMXUv7Q`O8RjaP6>l~4_tIVRFT zqsk1KGzA{CNCGcQ=OXb~LuSTF(V&Y+J)>h92UlKb!F@r*a%wKtD-}^QYbxzZOhW8K zF*hj8MD91wBEpequ@ux5`XurpHzdY0&7OUF7llv>ytFW8;rCc=*@={J}S$MXy4JwI@^Qa?6#Bj`#+x7AZuWalunS9VtK-|$6zy0dxJNB1M!5Qn zb|c>s1iB3$`h#9SUp-AAHBGFfb|YqJq!+%k?tNU5`M!#+P&L!%7S*-AN8LQi*TPM=H_Oymhgc{Vz?K$x#CP|E+v;Fd{RwA zs)}lzI(2e3d&@Jl5wESIVvxF9Z;~Unz|oZ}pRIWCW@cv55-!`lw$-#bWU}Gs?c8NN z>C(aDqU0Ur^;5$i@%4M5A2^+Y;dJeDo@*x`VPFd*qnmsf%E^wqX}4s@58%X>)!ek! z?bsHw(5 z1B?O20AqkLz!+c*Fa{U{{|W=IkDp0#;52%c>xaior7p{+fif-%%wcW8wJ*{m>9ECQ zSS>^;Au1bY)fDIvd_^#odUa8x^@O+rimG3D<>Sh(UAzF@wq?t$S}v*=6B~k5 z(I--C7=uzM-YTG)EAvW~$IAs0o4aS5Dy_olyMADI?_31 diff --git a/src/jcifs/smb/DosError.java b/src/jcifs/smb/DosError.java index f3c78fe..6735297 100644 --- a/src/jcifs/smb/DosError.java +++ b/src/jcifs/smb/DosError.java @@ -59,7 +59,7 @@ public interface DosError { { 0x08bf0002, 0xC0000193 }, { 0x08c00002, 0xC0000070 }, { 0x08c10002, 0xC000006f }, - { 0x08c20002, 0xC0000071 } + { 0x08c20002, 0xC0000071 }, }; /* These aren't really used by jCIFS -- the map above is used @@ -104,7 +104,7 @@ public interface DosError { "This user account has expired.", "The user is not allowed to log on from this workstation.", "The user is not allowed to log on at this time.", - "The password of this user has expired." + "The password of this user has expired.", }; } diff --git a/src/jcifs/smb/Handler.java b/src/jcifs/smb/Handler.java index 1f89e4b..bb75090 100644 --- a/src/jcifs/smb/Handler.java +++ b/src/jcifs/smb/Handler.java @@ -23,50 +23,12 @@ import java.net.URLConnection; import java.net.URLStreamHandler; import java.io.IOException; import java.io.UnsupportedEncodingException; - import java.io.PrintStream; public class Handler extends URLStreamHandler { static final URLStreamHandler SMB_HANDLER = new Handler(); - static String unescape( String str ) throws NumberFormatException, UnsupportedEncodingException { - char ch; - int i, j, state, len; - char[] out; - byte[] b = new byte[1]; - - if( str == null ) { - return null; - } - - len = str.length(); - out = new char[len]; - state = 0; - for( i = j = 0; i < len; i++ ) { - switch( state ) { - case 0: - ch = str.charAt( i ); - if( ch == '%' ) { - state = 1; - } else { - out[j++] = ch; - } - break; - case 1: - /* Get ASCII hex value and convert to platform dependant - * encoding like EBCDIC perhaps - */ - b[0] = (byte)(Integer.parseInt( str.substring( i, i + 2 ), 16 ) & 0xFF); - out[j++] = (new String( b, 0, 1, "ASCII" )).charAt( 0 ); - i++; - state = 0; - } - } - - return new String( out, 0, j ); - } - protected int getDefaultPort() { return SmbConstants.DEFAULT_PORT; } @@ -75,7 +37,7 @@ public class Handler extends URLStreamHandler { } protected void parseURL( URL u, String spec, int start, int limit ) { String host = u.getHost(); - String userinfo, path, ref; + String path, ref; int port; if( spec.equals( "smb://" )) { @@ -87,13 +49,8 @@ public class Handler extends URLStreamHandler { limit += 2; } super.parseURL( u, spec, start, limit ); - userinfo = u.getUserInfo(); path = u.getPath(); ref = u.getRef(); - try { - userinfo = unescape( userinfo ); - } catch( UnsupportedEncodingException uee ) { - } if (ref != null) { path += '#' + ref; } @@ -102,7 +59,7 @@ public class Handler extends URLStreamHandler { port = getDefaultPort(); } setURL( u, "smb", u.getHost(), port, - u.getAuthority(), userinfo, + u.getAuthority(), u.getUserInfo(), path, u.getQuery(), null ); } } diff --git a/src/jcifs/smb/NtlmPasswordAuthentication.java b/src/jcifs/smb/NtlmPasswordAuthentication.java index 73c26e9..7a9b22c 100644 --- a/src/jcifs/smb/NtlmPasswordAuthentication.java +++ b/src/jcifs/smb/NtlmPasswordAuthentication.java @@ -183,6 +183,10 @@ public final class NtlmPasswordAuthentication implements Principal, Serializable domain = username = password = null; if( userInfo != null ) { + try { + userInfo = unescape( userInfo ); + } catch( UnsupportedEncodingException uee ) { + } int i, u, end; char c; @@ -437,5 +441,43 @@ public final class NtlmPasswordAuthentication implements Principal, Serializable public String toString() { return getName(); } + + static String unescape( String str ) throws NumberFormatException, UnsupportedEncodingException { + char ch; + int i, j, state, len; + char[] out; + byte[] b = new byte[1]; + + if( str == null ) { + return null; + } + + len = str.length(); + out = new char[len]; + state = 0; + for( i = j = 0; i < len; i++ ) { + switch( state ) { + case 0: + ch = str.charAt( i ); + if( ch == '%' ) { + state = 1; + } else { + out[j++] = ch; + } + break; + case 1: + /* Get ASCII hex value and convert to platform dependant + * encoding like EBCDIC perhaps + */ + b[0] = (byte)(Integer.parseInt( str.substring( i, i + 2 ), 16 ) & 0xFF); + out[j++] = (new String( b, 0, 1, "ASCII" )).charAt( 0 ); + i++; + state = 0; + } + } + + return new String( out, 0, j ); + } + } diff --git a/src/jcifs/smb/NtlmPasswordAuthentication.java.orig b/src/jcifs/smb/NtlmPasswordAuthentication.java.orig new file mode 100644 index 0000000..73c26e9 --- /dev/null +++ b/src/jcifs/smb/NtlmPasswordAuthentication.java.orig @@ -0,0 +1,441 @@ +/* jcifs smb client library in Java + * Copyright (C) 2002 "Michael B. Allen" + * "Eric Glass" + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package jcifs.smb; + +import java.io.UnsupportedEncodingException; +import java.io.Serializable; +import java.security.Principal; +import java.util.Random; +import java.util.Arrays; +import jcifs.Config; +import jcifs.util.*; + +/** + * This class stores and encrypts NTLM user credentials. The default + * credentials are retrieved from the jcifs.smb.client.domain, + * jcifs.smb.client.username, and jcifs.smb.client.password + * properties. + *

+ * Read jCIFS Exceptions and + * NtlmAuthenticator for related information. + */ + +public final class NtlmPasswordAuthentication implements Principal, Serializable { + + private static final int LM_COMPATIBILITY = + Config.getInt("jcifs.smb.lmCompatibility", 0); + + private static final Random RANDOM = new Random(); + + private static LogStream log = LogStream.getInstance(); + + // KGS!@#$% + private static final byte[] S8 = { + (byte)0x4b, (byte)0x47, (byte)0x53, (byte)0x21, + (byte)0x40, (byte)0x23, (byte)0x24, (byte)0x25 + }; + private static void E( byte[] key, byte[] data, byte[] e ) { + byte[] key7 = new byte[7]; + byte[] e8 = new byte[8]; + + for( int i = 0; i < key.length / 7; i++ ) { + System.arraycopy( key, i * 7, key7, 0, 7 ); + DES des = new DES( key7 ); + des.encrypt( data, e8 ); + System.arraycopy( e8, 0, e, i * 8, 8 ); + } + } + + static String DEFAULT_DOMAIN; + static String DEFAULT_USERNAME; + static String DEFAULT_PASSWORD; + static final String BLANK = ""; + + static void initDefaults() { + if (DEFAULT_DOMAIN != null) return; + DEFAULT_DOMAIN = Config.getProperty("jcifs.smb.client.domain", "?"); + DEFAULT_USERNAME = Config.getProperty("jcifs.smb.client.username", "GUEST"); + DEFAULT_PASSWORD = Config.getProperty("jcifs.smb.client.password", BLANK); + } + +/** + * Generate the ANSI DES hash for the password associated with these credentials. + */ + static public byte[] getPreNTLMResponse( String password, byte[] challenge ) { + byte[] p14 = new byte[14]; + byte[] p21 = new byte[21]; + byte[] p24 = new byte[24]; + byte[] passwordBytes; + try { + passwordBytes = password.toUpperCase().getBytes( ServerMessageBlock.OEM_ENCODING ); + } catch( UnsupportedEncodingException uee ) { + throw new RuntimeException("Try setting jcifs.encoding=US-ASCII", uee); + } + int passwordLength = passwordBytes.length; + + // Only encrypt the first 14 bytes of the password for Pre 0.12 NT LM + if( passwordLength > 14) { + passwordLength = 14; + } + System.arraycopy( passwordBytes, 0, p14, 0, passwordLength ); + E( p14, S8, p21); + E( p21, challenge, p24); + return p24; + } +/** + * Generate the Unicode MD4 hash for the password associated with these credentials. + */ + static public byte[] getNTLMResponse( String password, byte[] challenge ) { + byte[] uni = null; + byte[] p21 = new byte[21]; + byte[] p24 = new byte[24]; + + try { + uni = password.getBytes( "UnicodeLittleUnmarked" ); + } catch( UnsupportedEncodingException uee ) { + if( log.level > 0 ) + uee.printStackTrace( log ); + } + MD4 md4 = new MD4(); + md4.update( uni ); + try { + md4.digest(p21, 0, 16); + } catch (Exception ex) { + if( log.level > 0 ) + ex.printStackTrace( log ); + } + E( p21, challenge, p24 ); + return p24; + } + + /** + * Creates the LMv2 response for the supplied information. + * + * @param domain The domain in which the username exists. + * @param user The username. + * @param password The user's password. + * @param challenge The server challenge. + * @param clientChallenge The client challenge (nonce). + */ + public static byte[] getLMv2Response(String domain, String user, + String password, byte[] challenge, byte[] clientChallenge) { + try { + byte[] hash = new byte[16]; + byte[] response = new byte[24]; + MD4 md4 = new MD4(); + md4.update(password.getBytes("UnicodeLittleUnmarked")); + HMACT64 hmac = new HMACT64(md4.digest()); + hmac.update(user.toUpperCase().getBytes("UnicodeLittleUnmarked")); + hmac.update(domain.toUpperCase().getBytes("UnicodeLittleUnmarked")); + hmac = new HMACT64(hmac.digest()); + hmac.update(challenge); + hmac.update(clientChallenge); + hmac.digest(response, 0, 16); + System.arraycopy(clientChallenge, 0, response, 16, 8); + return response; + } catch (Exception ex) { + if( log.level > 0 ) + ex.printStackTrace( log ); + return null; + } + } + + static final NtlmPasswordAuthentication NULL = + new NtlmPasswordAuthentication( "", "", "" ); + static final NtlmPasswordAuthentication GUEST = + new NtlmPasswordAuthentication( "?", "GUEST", "" ); + static final NtlmPasswordAuthentication DEFAULT = + new NtlmPasswordAuthentication( null ); + + String domain; + String username; + String password; + byte[] ansiHash; + byte[] unicodeHash; + boolean hashesExternal = false; + byte[] clientChallenge = null; + byte[] challenge = null; + +/** + * Create an NtlmPasswordAuthentication object from the userinfo + * component of an SMB URL like "domain;user:pass". This constructor + * is used internally be jCIFS when parsing SMB URLs. + */ + + public NtlmPasswordAuthentication( String userInfo ) { + domain = username = password = null; + + if( userInfo != null ) { + int i, u, end; + char c; + + end = userInfo.length(); + for( i = 0, u = 0; i < end; i++ ) { + c = userInfo.charAt( i ); + if( c == ';' ) { + domain = userInfo.substring( 0, i ); + u = i + 1; + } else if( c == ':' ) { + password = userInfo.substring( i + 1 ); + break; + } + } + username = userInfo.substring( u, i ); + } + + initDefaults(); + + if( domain == null ) this.domain = DEFAULT_DOMAIN; + if( username == null ) this.username = DEFAULT_USERNAME; + if( password == null ) this.password = DEFAULT_PASSWORD; + } +/** + * Create an NtlmPasswordAuthentication object from a + * domain, username, and password. Parameters that are null + * will be substituted with jcifs.smb.client.domain, + * jcifs.smb.client.username, jcifs.smb.client.password + * property values. + */ + public NtlmPasswordAuthentication( String domain, String username, String password ) { + this.domain = domain; + this.username = username; + this.password = password; + + initDefaults(); + + if( domain == null ) this.domain = DEFAULT_DOMAIN; + if( username == null ) this.username = DEFAULT_USERNAME; + if( password == null ) this.password = DEFAULT_PASSWORD; + } +/** + * Create an NtlmPasswordAuthentication object with raw password + * hashes. This is used exclusively by the jcifs.http.NtlmSsp + * class which is in turn used by NTLM HTTP authentication functionality. + */ + public NtlmPasswordAuthentication( String domain, String username, + byte[] challenge, byte[] ansiHash, byte[] unicodeHash ) { + if( domain == null || username == null || + ansiHash == null || unicodeHash == null ) { + throw new IllegalArgumentException( "External credentials cannot be null" ); + } + this.domain = domain; + this.username = username; + this.password = null; + this.challenge = challenge; + this.ansiHash = ansiHash; + this.unicodeHash = unicodeHash; + hashesExternal = true; + } + +/** + * Returns the domain. + */ + public String getDomain() { + return domain; + } +/** + * Returns the username. + */ + public String getUsername() { + return username; + } +/** + * Returns the password in plain text or null if the raw password + * hashes were used to construct this NtlmPasswordAuthentication + * object which will be the case when NTLM HTTP Authentication is + * used. There is no way to retrieve a users password in plain text unless + * it is supplied by the user at runtime. + */ + public String getPassword() { + return password; + } +/** + * Return the domain and username in the format: + * domain\\username. This is equivalent to toString(). + */ + public String getName() { + boolean d = domain.length() > 0 && domain.equals( "?" ) == false; + return d ? domain + "\\" + username : username; + } + +/** + * Computes the 24 byte ANSI password hash given the 8 byte server challenge. + */ + public byte[] getAnsiHash( byte[] challenge ) { + if( hashesExternal ) { + return ansiHash; + } + switch (LM_COMPATIBILITY) { + case 0: + case 1: + return getPreNTLMResponse( password, challenge ); + case 2: + return getNTLMResponse( password, challenge ); + case 3: + case 4: + case 5: + if( clientChallenge == null ) { + clientChallenge = new byte[8]; + RANDOM.nextBytes( clientChallenge ); + } + return getLMv2Response(domain, username, password, challenge, + clientChallenge); + default: + return getPreNTLMResponse( password, challenge ); + } + } +/** + * Computes the 24 byte Unicode password hash given the 8 byte server challenge. + */ + public byte[] getUnicodeHash( byte[] challenge ) { + if( hashesExternal ) { + return unicodeHash; + } + switch (LM_COMPATIBILITY) { + case 0: + case 1: + case 2: + return getNTLMResponse( password, challenge ); + case 3: + case 4: + case 5: + /* + if( clientChallenge == null ) { + clientChallenge = new byte[8]; + RANDOM.nextBytes( clientChallenge ); + } + return getNTLMv2Response(domain, username, password, null, + challenge, clientChallenge); + */ + return new byte[0]; + default: + return getNTLMResponse( password, challenge ); + } + } + + /** + * Returns the effective user session key. + * + * @param challenge The server challenge. + * @return A byte[] containing the effective user session key, + * used in SMB MAC signing and NTLMSSP signing and sealing. + */ + public byte[] getUserSessionKey(byte[] challenge) { + if (hashesExternal) return null; + byte[] key = new byte[16]; + try { + getUserSessionKey(challenge, key, 0); + } catch (Exception ex) { + if( log.level > 0 ) + ex.printStackTrace( log ); + } + return key; + } + + /** + * Calculates the effective user session key. + * + * @param challenge The server challenge. + * @param dest The destination array in which the user session key will be + * placed. + * @param offset The offset in the destination array at which the + * session key will start. + */ + void getUserSessionKey(byte[] challenge, byte[] dest, int offset) + throws Exception { + if (hashesExternal) return; + MD4 md4 = new MD4(); + md4.update(password.getBytes("UnicodeLittleUnmarked")); + switch (LM_COMPATIBILITY) { + case 0: + case 1: + case 2: + md4.update(md4.digest()); + md4.digest(dest, offset, 16); + break; + case 3: + case 4: + case 5: + if( clientChallenge == null ) { + clientChallenge = new byte[8]; + RANDOM.nextBytes( clientChallenge ); + } + + HMACT64 hmac = new HMACT64(md4.digest()); + hmac.update(username.toUpperCase().getBytes( + "UnicodeLittleUnmarked")); + hmac.update(domain.toUpperCase().getBytes( + "UnicodeLittleUnmarked")); + byte[] ntlmv2Hash = hmac.digest(); + hmac = new HMACT64(ntlmv2Hash); + hmac.update(challenge); + hmac.update(clientChallenge); + HMACT64 userKey = new HMACT64(ntlmv2Hash); + userKey.update(hmac.digest()); + userKey.digest(dest, offset, 16); + break; + default: + md4.update(md4.digest()); + md4.digest(dest, offset, 16); + break; + } + } + +/** + * Compares two NtlmPasswordAuthentication objects for + * equality. Two NtlmPasswordAuthentication objects are equal if + * their caseless domain and username fields are equal and either both hashes are external and they are equal or both internally supplied passwords are equal. If one NtlmPasswordAuthentication object has external hashes (meaning negotiated via NTLM HTTP Authentication) and the other does not they will not be equal. This is technically not correct however the server 8 byte challage would be required to compute and compare the password hashes but that it not available with this method. + */ + public boolean equals( Object obj ) { + if( obj instanceof NtlmPasswordAuthentication ) { + NtlmPasswordAuthentication ntlm = (NtlmPasswordAuthentication)obj; + if( ntlm.domain.toUpperCase().equals( domain.toUpperCase() ) && + ntlm.username.toUpperCase().equals( username.toUpperCase() )) { + if( hashesExternal && ntlm.hashesExternal ) { + return Arrays.equals( ansiHash, ntlm.ansiHash ) && + Arrays.equals( unicodeHash, ntlm.unicodeHash ); + /* This still isn't quite right. If one npa object does not have external + * hashes and the other does then they will not be considered equal even + * though they may be. + */ + } else if( !hashesExternal && password.equals( ntlm.password )) { + return true; + } + } + } + return false; + } + + +/** + * Return the upcased username hash code. + */ + public int hashCode() { + return getName().toUpperCase().hashCode(); + } +/** + * Return the domain and username in the format: + * domain\\username. This is equivalent to getName(). + */ + public String toString() { + return getName(); + } +} + diff --git a/src/jcifs/smb/SID.java b/src/jcifs/smb/SID.java index 5b98f31..8be869c 100644 --- a/src/jcifs/smb/SID.java +++ b/src/jcifs/smb/SID.java @@ -187,13 +187,14 @@ public class SID extends rpc.sid_t { DcerpcHandle handle = null; LsaPolicyHandle policyHandle = null; lsarpc.LsarDomainInfo info = new lsarpc.LsarDomainInfo(); - MsrpcQueryInformationPolicy2 rpc; + MsrpcQueryInformationPolicy rpc; try { handle = DcerpcHandle.getHandle("ncacn_np:" + server + "[\\PIPE\\lsarpc]", auth); - policyHandle = new LsaPolicyHandle(handle, null, 0x02000000); - rpc = new MsrpcQueryInformationPolicy2(policyHandle, + // NetApp doesn't like the 'generic' access mask values + policyHandle = new LsaPolicyHandle(handle, null, 0x00000001); + rpc = new MsrpcQueryInformationPolicy(policyHandle, (short)lsarpc.POLICY_INFO_ACCOUNT_DOMAIN, info); handle.sendrecv(rpc); diff --git a/src/jcifs/smb/SigningDigest.java b/src/jcifs/smb/SigningDigest.java index 2c7c7bc..ae32161 100644 --- a/src/jcifs/smb/SigningDigest.java +++ b/src/jcifs/smb/SigningDigest.java @@ -11,9 +11,7 @@ import jcifs.util.Hexdump; * To filter 0 len updates and for debugging */ -public class SigningDigest { - - private static final int LM_COMPATIBILITY = Config.getInt( "jcifs.smb.lmCompatibility", 0); +public class SigningDigest implements SmbConstants { static LogStream log = LogStream.getInstance(); diff --git a/src/jcifs/smb/SmbComSessionSetupAndX.java b/src/jcifs/smb/SmbComSessionSetupAndX.java index 125511b..99b3b51 100644 --- a/src/jcifs/smb/SmbComSessionSetupAndX.java +++ b/src/jcifs/smb/SmbComSessionSetupAndX.java @@ -18,6 +18,7 @@ package jcifs.smb; +import java.util.Arrays; import jcifs.Config; class SmbComSessionSetupAndX extends AndXServerMessageBlock { @@ -40,7 +41,8 @@ class SmbComSessionSetupAndX extends AndXServerMessageBlock { command = SMB_COM_SESSION_SETUP_ANDX; this.session = session; this.auth = session.auth; - if( auth.hashesExternal && auth.challenge != session.transport.server.encryptionKey ) { + if( auth.hashesExternal && + Arrays.equals(auth.challenge, session.transport.server.encryptionKey) == false ) { throw new SmbAuthException( SmbException.NT_STATUS_ACCESS_VIOLATION ); } } diff --git a/src/jcifs/smb/SmbConstants.java b/src/jcifs/smb/SmbConstants.java index 80a816e..439b634 100644 --- a/src/jcifs/smb/SmbConstants.java +++ b/src/jcifs/smb/SmbConstants.java @@ -29,6 +29,7 @@ interface SmbConstants { static final boolean USE_EXTSEC = Config.getBoolean( "jcifs.smb.client.useExtendedSecurity", false ); static final String NETBIOS_HOSTNAME = Config.getProperty( "jcifs.netbios.hostname", null ); + static final int LM_COMPATIBILITY = Config.getInt( "jcifs.smb.lmCompatibility", 0); static final int FLAGS_NONE = 0x00; static final int FLAGS_LOCK_AND_READ_WRITE_AND_UNLOCK = 0x01; diff --git a/src/jcifs/smb/SmbException.java b/src/jcifs/smb/SmbException.java index 090f193..08c140c 100644 --- a/src/jcifs/smb/SmbException.java +++ b/src/jcifs/smb/SmbException.java @@ -42,11 +42,17 @@ public class SmbException extends IOException implements NtStatus, DosError, Win static String getMessageByCode( int errcode ) { if(( errcode & 0xC0000000 ) == 0xC0000000 ) { int min = 0; - int max = NT_STATUS_CODES.length; + int max = NT_STATUS_CODES.length - 1; while( max >= min ) { int mid = (min + max) / 2; + /* Note there's a signedness error here because 0xC0000000 based values are + * negative so it with NT_STATUS_SUCCESS (0) the binary search will not be + * performed properly. The effect is that the code at index 1 is never found + * (NT_STATUS_UNSUCCESSFUL). We should just factor out NT_STATUS_SUCCESS + * as a special case (which it is). + */ if( errcode > NT_STATUS_CODES[mid] ) { min = mid + 1; } else if( errcode < NT_STATUS_CODES[mid] ) { @@ -57,7 +63,7 @@ public class SmbException extends IOException implements NtStatus, DosError, Win } } else { int min = 0; - int max = DOS_ERROR_CODES.length; + int max = DOS_ERROR_CODES.length - 1; while( max >= min ) { int mid = (min + max) / 2; @@ -79,7 +85,7 @@ public class SmbException extends IOException implements NtStatus, DosError, Win return errcode; } else { int min = 0; - int max = DOS_ERROR_CODES.length; + int max = DOS_ERROR_CODES.length - 1; while( max >= min ) { int mid = (min + max) / 2; @@ -98,7 +104,7 @@ public class SmbException extends IOException implements NtStatus, DosError, Win } static String getMessageByWinerrCode( int errcode ) { int min = 0; - int max = WINERR_CODES.length; + int max = WINERR_CODES.length - 1; while( max >= min ) { int mid = (min + max) / 2; diff --git a/src/jcifs/smb/SmbSession.java b/src/jcifs/smb/SmbSession.java index 1dca19a..71f1399 100644 --- a/src/jcifs/smb/SmbSession.java +++ b/src/jcifs/smb/SmbSession.java @@ -94,8 +94,8 @@ int retry = 1; do { if (dc_list_expiration < now) { - dc_list_expiration = now + CACHE_POLICY * 1000L; NbtAddress[] list = NbtAddress.getAllByName( DOMAIN, 0x1C, null, null ); + dc_list_expiration = now + CACHE_POLICY * 1000L; if (list != null && list.length > 0) { dc_list = list; } else { /* keep using the old list */ @@ -239,9 +239,10 @@ do { transport.send( request, response ); } } -int x = 0; void sessionSetup( ServerMessageBlock andx, ServerMessageBlock andxResponse ) throws SmbException { + SmbException ex = null; + synchronized( transport() ) { if( sessionSetup ) { return; @@ -274,7 +275,14 @@ synchronized( transport() ) { } request.auth = auth; - transport.send( request, response ); + + try { + transport.send( request, response ); + } catch (SmbAuthException sae) { + throw sae; + } catch (SmbException se) { + ex = se; + } if( response.isLoggedInAsGuest && "GUEST".equalsIgnoreCase( auth.username ) == false) { @@ -288,6 +296,9 @@ synchronized( transport() ) { /* success - install the signing digest */ transport.digest = request.digest; } + + if (ex != null) + throw ex; } } void logoff( boolean inError ) { diff --git a/src/jcifs/smb/SmbSession.java.orig b/src/jcifs/smb/SmbSession.java.orig new file mode 100644 index 0000000..1dca19a --- /dev/null +++ b/src/jcifs/smb/SmbSession.java.orig @@ -0,0 +1,327 @@ +/* jcifs smb client library in Java + * Copyright (C) 2000 "Michael B. Allen" + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package jcifs.smb; + +import java.util.Vector; +import java.util.Enumeration; +import java.net.InetAddress; +import java.net.UnknownHostException; +import jcifs.Config; +import jcifs.UniAddress; +import jcifs.netbios.NbtAddress; + +/** + * The class represents a user's session established with an SMB/CIFS + * server. This class is used internally to the jCIFS library however + * applications may wish to authenticate aribrary user credentials + * with the logon method. It is noteworthy that jCIFS does not + * support DCE/RPC at this time and therefore does not use the NETLOGON + * procedure. Instead, it simply performs a "tree connect" to IPC$ using + * the supplied credentials. This is only a subset of the NETLOGON procedure + * but is achives the same effect. + +Note that it is possible to change the resource against which clients +are authenticated to be something other than IPC$ using the +jcifs.smb.client.logonShare property. This can be used to +provide simple group based access control. For example, one could setup +the NTLM HTTP Filter with the jcifs.smb.client.domainController +init parameter set to the name of the server used for authentication. On +that host, create a share called JCIFSAUTH and adjust the access control +list for that share to permit only the clients that should have access to +the target website. Finally, set the jcifs.smb.client.logonShare +to JCIFSAUTH. This should restrict access to only those clients that have +access to the JCIFSAUTH share. The access control on that share can be +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 = + 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 NbtAddress[] dc_list = null; + 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.connect(); + if (SmbTransport.log.level >= 3) + 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 { + if( DOMAIN == null ) { + throw new SmbException( "A domain was not specified" ); + } + synchronized (DOMAIN) { + long now = System.currentTimeMillis(); +int retry = 1; + +do { + 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 >= 2) { + SmbTransport.log.println( "Failed to retrieve DC list from WINS" ); + } + } + } + + 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 >= 2) { + SmbTransport.log.println( "Failed validate DC: " + dc_list[i] ); + if (SmbTransport.log.level > 2) + se.printStackTrace( SmbTransport.log ); + } + } + dc_list[i] = null; + } + } + +/* No DCs found, for retieval of list by expiring it and retry. + */ + dc_list_expiration = 0; +} while (retry-- > 0); + + 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); + } + + public static byte[] getChallenge( UniAddress dc, int port ) + throws SmbException, UnknownHostException { + SmbTransport trans = SmbTransport.getSmbTransport( dc, port ); + trans.connect(); + return trans.server.encryptionKey; + } +/** + * Authenticate arbitrary credentials represented by the + * NtlmPasswordAuthentication object against the domain controller + * specified by the UniAddress parameter. If the credentials are + * not accepted, an SmbAuthException will be thrown. If an error + * occurs an SmbException will be thrown. If the credentials are + * valid, the method will return without throwing an exception. See the + * last FAQ question. + * + * See also the jcifs.smb.client.logonShare property. + */ + public static void logon( UniAddress dc, + NtlmPasswordAuthentication auth ) throws SmbException { + logon(dc, 0, auth); + } + + public static void logon( UniAddress dc, int port, + NtlmPasswordAuthentication auth ) throws SmbException { + SmbTree tree = SmbTransport.getSmbTransport( dc, port ).getSmbSession( auth ).getSmbTree( LOGON_SHARE, null ); + if( LOGON_SHARE == null ) { + tree.treeConnect( null, null ); + } else { + Trans2FindFirst2 req = new Trans2FindFirst2( "\\", "*", SmbFile.ATTR_DIRECTORY ); + Trans2FindFirst2Response resp = new Trans2FindFirst2Response(); + tree.send( req, resp ); + } + } + + private int uid; + private Vector trees; + private boolean sessionSetup; + // Transport parameters allows trans to be removed from CONNECTIONS + private UniAddress address; + private int port, localPort; + private InetAddress localAddr; + + SmbTransport transport = null; + NtlmPasswordAuthentication auth; + long expiration; + + SmbSession( UniAddress address, int port, + InetAddress localAddr, int localPort, + NtlmPasswordAuthentication auth ) { + this.address = address; + this.port = port; + this.localAddr = localAddr; + this.localPort = localPort; + this.auth = auth; + trees = new Vector(); + } + + synchronized SmbTree getSmbTree( String share, String service ) { + SmbTree t; + + if( share == null ) { + share = "IPC$"; + } + for( Enumeration e = trees.elements(); e.hasMoreElements(); ) { + t = (SmbTree)e.nextElement(); + if( t.matches( share, service )) { + return t; + } + } + t = new SmbTree( this, share, service ); + trees.addElement( t ); + return t; + } + boolean matches( NtlmPasswordAuthentication auth ) { + return this.auth == auth || this.auth.equals( auth ); + } + synchronized SmbTransport transport() { + if( transport == null ) { + transport = SmbTransport.getSmbTransport( address, port, localAddr, localPort ); + } + return transport; + } + void send( ServerMessageBlock request, + ServerMessageBlock response ) throws SmbException { + if( response != null ) { + response.received = false; + } + + synchronized(transport.setupDiscoLock) { + expiration = System.currentTimeMillis() + SmbTransport.SO_TIMEOUT; + sessionSetup( request, response ); + if( response != null && response.received ) { + return; + } + request.uid = uid; + request.auth = auth; + transport.send( request, response ); + } + } +int x = 0; + void sessionSetup( ServerMessageBlock andx, + ServerMessageBlock andxResponse ) throws SmbException { +synchronized( transport() ) { + if( sessionSetup ) { + return; + } + + transport.connect(); + + /* + * Session Setup And X Request / Response + */ + + if( transport.log.level >= 4 ) + transport.log.println( "sessionSetup: accountName=" + auth.username + ",primaryDomain=" + auth.domain ); + + SmbComSessionSetupAndX request = new SmbComSessionSetupAndX( this, andx ); + SmbComSessionSetupAndXResponse response = new SmbComSessionSetupAndXResponse( andxResponse ); + + /* Create SMB signature digest if necessary + * Only the first SMB_COM_SESSION_SETUP_ANX with non-null or + * blank password initializes signing. + */ + if (transport.isSignatureSetupRequired( auth )) { + if( auth.hashesExternal && NtlmPasswordAuthentication.DEFAULT_PASSWORD != NtlmPasswordAuthentication.BLANK ) { + /* preauthentication + */ + transport.getSmbSession( NtlmPasswordAuthentication.DEFAULT ).getSmbTree( LOGON_SHARE, null ).treeConnect( null, null ); + } else { + request.digest = new SigningDigest( transport, auth ); + } + } + + request.auth = auth; + transport.send( request, response ); + + if( response.isLoggedInAsGuest && + "GUEST".equalsIgnoreCase( auth.username ) == false) { + throw new SmbAuthException( NtStatus.NT_STATUS_LOGON_FAILURE ); + } + + uid = response.uid; + sessionSetup = true; + + if( request.digest != null ) { + /* success - install the signing digest */ + transport.digest = request.digest; + } +} + } + void logoff( boolean inError ) { +synchronized( transport() ) { + if( sessionSetup == false ) { + return; + } + + for( Enumeration e = trees.elements(); e.hasMoreElements(); ) { + SmbTree t = (SmbTree)e.nextElement(); + t.treeDisconnect( inError ); + } + + if( !inError && transport.server.security != ServerMessageBlock.SECURITY_SHARE ) { + + /* + * Logoff And X Request / Response + */ + + SmbComLogoffAndX request = new SmbComLogoffAndX( null ); + request.uid = uid; + try { + transport.send( request, null ); + } catch( SmbException se ) { + } + } + + sessionSetup = false; +} + } + public String toString() { + return "SmbSession[accountName=" + auth.username + + ",primaryDomain=" + auth.domain + + ",uid=" + uid + + ",sessionSetup=" + sessionSetup + "]"; + } +} diff --git a/src/jcifs/smb/SmbTransport.java b/src/jcifs/smb/SmbTransport.java index 208b941..32ad4da 100644 --- a/src/jcifs/smb/SmbTransport.java +++ b/src/jcifs/smb/SmbTransport.java @@ -160,7 +160,7 @@ public class SmbTransport extends Transport implements SmbConstants { try { connect( RESPONSE_TIMEOUT ); } catch( IOException ioe ) { - throw new SmbException( "", ioe ); + throw new SmbException( ioe.getMessage(), ioe ); } return (capabilities & cap) == cap; } @@ -286,7 +286,7 @@ public class SmbTransport extends Transport implements SmbConstants { try { super.connect( RESPONSE_TIMEOUT ); } catch( TransportException te ) { - throw new SmbException( "", te ); + throw new SmbException( te.getMessage(), te ); } } protected void doConnect() throws IOException { @@ -308,6 +308,9 @@ public class SmbTransport extends Transport implements SmbConstants { if( resp.dialectIndex > 10 ) { throw new SmbException( "This client does not support the negotiated dialect." ); } + if (server.encryptionKeyLength != 8 && LM_COMPATIBILITY == 0) { + throw new SmbException("Encryption key length is not 8 as expected. This could indicate that the server requires NTLMv2. JCIFS does not fully support NTLMv2 but you can try setting jcifs.smb.lmCompatibility = 3."); + } /* Adjust negotiated values */ @@ -442,7 +445,8 @@ public class SmbTransport extends Transport implements SmbConstants { if (size < (HEADER_LENGTH + 1) || (4 + size) > rcv_buf_size ) { throw new IOException( "Invalid payload size: " + size ); } - if (resp.command == ServerMessageBlock.SMB_COM_READ_ANDX) { + int errorCode = Encdec.dec_uint32le( BUF, 9 ) & 0xFFFFFFFF; + if (resp.command == ServerMessageBlock.SMB_COM_READ_ANDX && errorCode == 0) { SmbComReadAndXResponse r = (SmbComReadAndXResponse)resp; int off = HEADER_LENGTH; /* WordCount thru dataOffset always 27 */ @@ -608,7 +612,7 @@ public class SmbTransport extends Transport implements SmbConstants { } catch( SmbException se ) { throw se; } catch( IOException ioe ) { - throw new SmbException( "", ioe ); + throw new SmbException( ioe.getMessage(), ioe ); } checkStatus( request, response ); diff --git a/src/jcifs/util/transport/Transport.java b/src/jcifs/util/transport/Transport.java index 934549b..e244384 100644 --- a/src/jcifs/util/transport/Transport.java +++ b/src/jcifs/util/transport/Transport.java @@ -193,7 +193,7 @@ public abstract class Transport implements Runnable { } finally { /* This guarantees that we leave in a valid state */ - if (state != 0 && state != 3) { + if (state != 0 && state != 3 && state != 4) { if (log.level >= 1) log.println("Invalid state: " + state); state = 0; -- 2.11.0