[SCM] Samba Shared Repository - branch v3-2-test updated - release-3-2-0pre2-3369-gac4baaf

Derrell Lipman derrell at samba.org
Fri Jan 16 21:43:35 GMT 2009


The branch, v3-2-test has been updated
       via  ac4baafeb8d74bf1db7f2ce84b2bc3abdef90337 (commit)
      from  d9f66f3e3d9af9c3323029207e62391f382632e9 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit ac4baafeb8d74bf1db7f2ce84b2bc3abdef90337
Author: Derrell Lipman <derrell.lipman at unwireduniverse.com>
Date:   Fri Jan 16 16:00:41 2009 -0500

    Treat file names in POSIX-like case-sensitive fashion by default
    
    *** THIS COMMIT CAUSES A CHANGE OF DEFAULT BEHAVIOR IN libsmbclient!!! ***
    
    - libsmbclient now calls cli_set_case_sensitive() for a new CLI. By default,
      it requests case-sensitive, but the old behavior of case-insensitive can be
      requested with smbc_setOptionCaseSensitive(context, False);
    
      The change of behavior is considered a bug fix, as it was previously
      possible to accidentally overwrite a file that had the same case-insensitive
      name but a different case-sensitive name as a previously-existing file,
      while creating a new file.
    
    Derrell

-----------------------------------------------------------------------

Summary of changes:
 source/include/libsmb_internal.h |    5 +++++
 source/include/libsmbclient.h    |    9 +++++++++
 source/libsmb/libsmb_context.c   |    1 +
 source/libsmb/libsmb_server.c    |    9 ++++++++-
 source/libsmb/libsmb_setget.c    |   14 ++++++++++++++
 5 files changed, 37 insertions(+), 1 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/libsmb_internal.h b/source/include/libsmb_internal.h
index 7cf0330..307d6b2 100644
--- a/source/include/libsmb_internal.h
+++ b/source/include/libsmb_internal.h
@@ -176,6 +176,11 @@ struct SMBC_internal_data {
          */
         smbc_smb_encrypt_level                  smb_encryption_level;
 
+        /*
+         * Should we request case sensitivity of file names?
+         */
+        bool                                    case_sensitive;
+
         struct smbc_server_cache * server_cache;
 
         /* POSIX emulation functions */
diff --git a/source/include/libsmbclient.h b/source/include/libsmbclient.h
index 74d0d5c..da2e03c 100644
--- a/source/include/libsmbclient.h
+++ b/source/include/libsmbclient.h
@@ -550,6 +550,15 @@ smbc_getOptionSmbEncryptionLevel(SMBCCTX *c);
 void
 smbc_setOptionSmbEncryptionLevel(SMBCCTX *c, smbc_smb_encrypt_level level);
 
+/** Get whether to treat file names as case-sensitive. */
+smbc_bool
+smbc_getOptionCaseSensitive(SMBCCTX *c);
+
+/** Set whether to treat file names as case-sensitive. */
+void
+smbc_setOptionCaseSensitive(SMBCCTX *c, smbc_bool b);
+
+
 /**
  * Get from how many local master browsers should the list of workgroups be
  * retrieved.  It can take up to 12 minutes or longer after a server becomes a
diff --git a/source/libsmb/libsmb_context.c b/source/libsmb/libsmb_context.c
index 5e075d1..ec42b34 100644
--- a/source/libsmb/libsmb_context.c
+++ b/source/libsmb/libsmb_context.c
@@ -69,6 +69,7 @@ smbc_new_context(void)
         smbc_setOptionFullTimeNames(context, False);
         smbc_setOptionOpenShareMode(context, SMBC_SHAREMODE_DENY_NONE);
         smbc_setOptionSmbEncryptionLevel(context, SMBC_ENCRYPTLEVEL_NONE);
+        smbc_setOptionCaseSensitive(context, True);
         smbc_setOptionBrowseMaxLmbCount(context, 3);    /* # LMBs to query */
         smbc_setOptionUrlEncodeReaddirEntries(context, False);
         smbc_setOptionOneSharePerServer(context, False);
diff --git a/source/libsmb/libsmb_server.c b/source/libsmb/libsmb_server.c
index 4581d84..d374ac1 100644
--- a/source/libsmb/libsmb_server.c
+++ b/source/libsmb/libsmb_server.c
@@ -355,7 +355,14 @@ again:
 		errno = ENOMEM;
 		return NULL;
 	}
-        
+
+	/* POSIX-like - always request case-sensitivity by default. */        
+        if (smbc_getOptionCaseSensitive(context)) {
+            cli_set_case_sensitive(c, True);
+        } else {
+            cli_set_case_sensitive(c, False);
+        }
+
         if (smbc_getOptionUseKerberos(context)) {
 		c->use_kerberos = True;
 	}
diff --git a/source/libsmb/libsmb_setget.c b/source/libsmb/libsmb_setget.c
index d0823bd..bca2a80 100644
--- a/source/libsmb/libsmb_setget.c
+++ b/source/libsmb/libsmb_setget.c
@@ -193,6 +193,20 @@ smbc_setOptionSmbEncryptionLevel(SMBCCTX *c, smbc_smb_encrypt_level level)
         c->internal->smb_encryption_level = level;
 }
 
+/** Get whether to treat file names as case-sensitive. */
+smbc_bool
+smbc_getOptionCaseSensitive(SMBCCTX *c)
+{
+        return c->internal->case_sensitive;
+}
+
+/** Set whether to treat file names as case-sensitive. */
+void
+smbc_setOptionCaseSensitive(SMBCCTX *c, smbc_bool b)
+{
+        c->internal->case_sensitive = b;
+}
+
 /**
  * Get from how many local master browsers should the list of workgroups be
  * retrieved.  It can take up to 12 minutes or longer after a server becomes a


-- 
Samba Shared Repository


More information about the samba-cvs mailing list