jcifs 1.2.23 from tgz
authorFelix Schumacher <p0354740@isib001.(none)>
Wed, 6 Aug 2008 14:48:05 +0000 (16:48 +0200)
committerFelix Schumacher <p0354740@isib001.(none)>
Wed, 6 Aug 2008 14:48:05 +0000 (16:48 +0200)
Sun Jul 20 22:28:40 EDT 2008
jcifs-1.2.23

Recent domain-based DFS proper broke stand-alone DFS. This has been fixed.

README.txt
build.xml
examples/10883563.doc [new file with mode: 0644]
examples/runtests.sh
src/jcifs/smb/Dfs.java

index c2b2b27..cded897 100644 (file)
@@ -1,3 +1,8 @@
+Sun Jul 20 22:28:40 EDT 2008
+jcifs-1.2.23
+
+Recent domain-based DFS proper broke stand-alone DFS. This has been fixed.
+
 Wed Jun 25 20:26:33 EDT 2008
 jcifs-1.2.22
 
index 5943d4d..ec78884 100644 (file)
--- a/build.xml
+++ b/build.xml
@@ -1,7 +1,7 @@
 <project name="jcifs" default="usage" basedir=".">
 
-    <property name="version" value="1.2.22"/>
-    <property name="reldate" value="Jun 25, 2008"/>
+    <property name="version" value="1.2.23"/>
+    <property name="reldate" value="Jul 21, 2008"/>
 
     <target name="usage">
         <echo>
diff --git a/examples/10883563.doc b/examples/10883563.doc
new file mode 100644 (file)
index 0000000..62644d9
--- /dev/null
@@ -0,0 +1,6 @@
+C:\tmp>ktpass /princ HTTP/www.foo.net@WIN.NET /ptype KRB5_NT_PRINCIPAL /desonly /pass asj7j112233hh4455 /mapuser test2\r
+Targeting domain controller: ts0.win.net\r
+Using legacy password setting method\r
+Successfully mapped HTTP/www.foo.net to test2.\r
+Key created.\r
+Account test2 has been set for DES-only encryption.
\ No newline at end of file
index fd592b3..4c83ba3 100644 (file)
@@ -2,15 +2,25 @@
 
 JAVA_HOME=/usr/local/java
 CLASSPATH=../build:.
-PROPERTIES=../../user1.prp
+PROPERTIES=../../user2.prp
 RUN="${JAVA_HOME}/bin/java -cp ${CLASSPATH} -Djcifs.properties=${PROPERTIES}"
 
-SERVER=dc1.w.net
-SHARE=tmp
-WRITE_DIR=test/
-SRC_DIR=test/Junk
-FILE1=test/Junk/10883563.doc
+#SERVER=dc1.w.net
+#SHARE=tmp
+#DIR=test
 
+# Domain-based DFS
+#SHARE=root2
+#DIR=link2/test
+
+# Stand-alone DFS
+SERVER=fs1.w.net
+SHARE=standalone
+DIR=sub1/dc1tmp/test
+
+WRITE_DIR=${DIR}/
+SRC_DIR=${DIR}/Junk
+FILE1=${DIR}/Junk/10883563.doc
 URL_SERVER=smb://${SERVER}/
 URL_SHARE=${URL_SERVER}${SHARE}/
 URL_WRITE_DIR=${URL_SHARE}${WRITE_DIR}
@@ -27,7 +37,7 @@ $RUN GetSecurity ${URL_SHARE}
 $RUN GetShareSecurity ${URL_WRITE_DIR}
 $RUN SidCrawler ${URL_WRITE_DIR} 5
 $RUN GetGroupMemberSidsFromURL ${URL_WRITE_DIR}
-$RUN InterruptTest ${URL_WRITE_DIR}${FILE1}
+$RUN InterruptTest ${URL_SHARE}${FILE1}
 $RUN AllocInfo ${URL_SHARE}
 $RUN Append ${URL_WRITE_DIR}Append.txt
 $RUN AuthListFiles smb://bogus\@${SERVER}/${SHARE}/
index 5f7700a..1c0af43 100644 (file)
@@ -203,8 +203,6 @@ public class Dfs {
         }
 
         if (dr == null && path != null) {
-            /* The referrals map is for stand-alone roots
-             */
             if (referrals != null && now > referrals.expiration) {
                 referrals = null;
             }
@@ -212,13 +210,25 @@ public class Dfs {
                 referrals = new CacheEntry(0);
             }
             String key = "\\" + domain + "\\" + root;
-            if (path.equals("\\") == false) {
-                int s1 = path.indexOf('\\', 1);
-                if (s1 > 0)
-                    path = path.substring(0, s1);
+            if (path.equals("\\") == false)
                 key += path;
+            key = key.toLowerCase();
+
+            Iterator iter = referrals.map.keySet().iterator();
+            while (iter.hasNext()) {
+                String _key = (String)iter.next();
+                int _klen = _key.length();
+                boolean match = false;
+
+                if (_klen == key.length()) {
+                    match = _key.equals(key);
+                } else if (_klen < key.length()) {
+                    match = _key.regionMatches(0, key, 0, _klen) && key.charAt(_klen) == '\\';
+                }
+
+                if (match)
+                    dr = (DfsReferral)referrals.map.get(_key);
             }
-            dr = (DfsReferral)referrals.map.get(key.toLowerCase());
         }
 
         return dr;
@@ -236,6 +246,10 @@ public class Dfs {
         share = path.substring(s1 + 1, s2);
 
         key = path.substring(0, dr.pathConsumed).toLowerCase();
+        /* Subtract the server and share from the pathConsumed so that
+         * it refects the part of the relative path consumed and not
+         * the entire path.
+         */
         dr.pathConsumed -= 1 + server.length() + 1 + share.length();
 
         if (referrals != null && (System.currentTimeMillis() + 10000) > referrals.expiration) {