Author: jra
Date: 2007-03-08 03:00:42 +0000 (Thu, 08 Mar 2007)
New Revision: 21759

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=21759

Log:
Fix the same bug in a more elegant way, strrchr_m
is an expensive call....
Jeremy.

Modified:
   branches/SAMBA_3_0/source/smbd/msdfs.c
   branches/SAMBA_3_0_25/source/smbd/msdfs.c


Changeset:
Modified: branches/SAMBA_3_0/source/smbd/msdfs.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/msdfs.c      2007-03-08 02:51:41 UTC (rev 
21758)
+++ branches/SAMBA_3_0/source/smbd/msdfs.c      2007-03-08 03:00:42 UTC (rev 
21759)
@@ -331,6 +331,7 @@
        SMB_STRUCT_STAT sbuf;
        NTSTATUS status;
        pstring reqpath;
+       pstring local_dfspath;
 
        if (!dp || !conn) {
                DEBUG(1,("resolve_dfs_path: NULL dfs_path* or NULL 
connection_struct*!\n"));
@@ -385,6 +386,12 @@
                return True;
        }
 
+       /* Prepare to test only for '/' components in the given path,
+        * so replace all '\\' characters with '/'. */
+
+       pstrcpy(local_dfspath, dfspath);
+       string_replace(local_dfspath, '\\', '/');
+
        /* redirect if any component in the path is a link */
        pstrcpy(reqpath, localpath);
        p = strrchr_m(reqpath, '/');
@@ -402,14 +409,12 @@
                        
                        if (consumedcntp) {
                                pstring buf;
-                               pstrcpy(buf, dfspath);
-                               trim_char(buf, '\0', '\\');
+                               pstrcpy(buf, local_dfspath);
+                               trim_char(buf, '\0', '/');
                                for (; consumed_level; consumed_level--) {
-                                       char *q, *q1, *q2;
-                                       /* Either '\\' or '/' may be a 
separator. */
-                                       q1 = strrchr_m(buf, '\\');
-                                       q2 = strrchr_m(buf, '/');
-                                       q = MAX(q1,q2);
+                                       char *q;
+                                       /* We made sure only '/' may be a 
separator above. */
+                                       q = strrchr_m(buf, '/');
                                        if (q) {
                                                *q = 0;
                                        }

Modified: branches/SAMBA_3_0_25/source/smbd/msdfs.c
===================================================================
--- branches/SAMBA_3_0_25/source/smbd/msdfs.c   2007-03-08 02:51:41 UTC (rev 
21758)
+++ branches/SAMBA_3_0_25/source/smbd/msdfs.c   2007-03-08 03:00:42 UTC (rev 
21759)
@@ -331,6 +331,7 @@
        SMB_STRUCT_STAT sbuf;
        NTSTATUS status;
        pstring reqpath;
+       pstring local_dfspath;
 
        if (!dp || !conn) {
                DEBUG(1,("resolve_dfs_path: NULL dfs_path* or NULL 
connection_struct*!\n"));
@@ -385,6 +386,12 @@
                return True;
        }
 
+       /* Prepare to test only for '/' components in the given path,
+        * so replace all '\\' characters with '/'. */
+
+       pstrcpy(local_dfspath, dfspath);
+       string_replace(local_dfspath, '\\', '/');
+
        /* redirect if any component in the path is a link */
        pstrcpy(reqpath, localpath);
        p = strrchr_m(reqpath, '/');
@@ -402,14 +409,12 @@
                        
                        if (consumedcntp) {
                                pstring buf;
-                               pstrcpy(buf, dfspath);
-                               trim_char(buf, '\0', '\\');
+                               pstrcpy(buf, local_dfspath);
+                               trim_char(buf, '\0', '/');
                                for (; consumed_level; consumed_level--) {
-                                       char *q, *q1, *q2;
-                                       /* Either '\\' or '/' may be a 
separator. */
-                                       q1 = strrchr_m(buf, '\\');
-                                       q2 = strrchr_m(buf, '/');
-                                       q = MAX(q1,q2);
+                                       char *q;
+                                       /* We made sure only '/' may be a 
separator above. */
+                                       q = strrchr_m(buf, '/');
                                        if (q) {
                                                *q = 0;
                                        }

Reply via email to