svn commit: samba r5752 - in branches/SAMBA_3_0/source: include libsmb

jerry at samba.org jerry at samba.org
Fri Mar 11 17:01:31 GMT 2005


Author: jerry
Date: 2005-03-11 17:01:30 +0000 (Fri, 11 Mar 2005)
New Revision: 5752

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

Log:
implement derrell's solution for binary compatibilty in the _SMBCCTX structure; note that we break compat with 3.0.11 but are ok with earlier versions
Modified:
   branches/SAMBA_3_0/source/include/libsmb_internal.h
   branches/SAMBA_3_0/source/include/libsmbclient.h
   branches/SAMBA_3_0/source/libsmb/libsmb_cache.c
   branches/SAMBA_3_0/source/libsmb/libsmbclient.c


Changeset:
Modified: branches/SAMBA_3_0/source/include/libsmb_internal.h
===================================================================
--- branches/SAMBA_3_0/source/include/libsmb_internal.h	2005-03-11 16:31:32 UTC (rev 5751)
+++ branches/SAMBA_3_0/source/include/libsmb_internal.h	2005-03-11 17:01:30 UTC (rev 5752)
@@ -71,66 +71,6 @@
 	/** INTERNAL: open file/dir list
 	 */
 	SMBCFILE * _files;
-        /** user options selections that apply to this session
-         */
-        struct _smbc_options {
-
-                /*
-                 * 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 local master browser, for
-                 * it to have the entire browse list (the list of
-                 * workgroups/domains) from an entire network.  Since a client
-                 * never knows which local master browser will be found first,
-                 * the one which is found first and used to retrieve a browse
-                 * list may have an incomplete or empty browse list.  By
-                 * requesting the browse list from multiple local master
-                 * browsers, a more complete list can be generated.  For small
-                 * networks (few workgroups), it is recommended that this
-                 * value be set to 0, causing the browse lists from all found
-                 * local master browsers to be retrieved and merged.  For
-                 * networks with many workgroups, a suitable value for this
-                 * variable is probably somewhere around 3. (Default: 3).
-                 */
-                int browse_max_lmb_count;
-
-                /*
-                 * There is a difference in the desired return strings from
-                 * smbc_readdir() depending upon whether the filenames are to
-                 * be displayed to the user, or whether they are to be
-                 * appended to the path name passed to smbc_opendir() to call
-                 * a further smbc_ function (e.g. open the file with
-                 * smbc_open()).  In the former case, the filename should be
-                 * in "human readable" form.  In the latter case, the smbc_
-                 * functions expect a URL which must be url-encoded.  Those
-                 * functions decode the URL.  If, for example, smbc_readdir()
-                 * returned a file name of "abc%20def.txt", passing a path
-                 * with this file name attached to smbc_open() would cause
-                 * smbc_open to attempt to open the file "abc def.txt" since
-                 * the %20 is decoded into a space.
-                 *
-                 * Set this option to True if the names returned by
-                 * smbc_readdir() should be url-encoded such that they can be
-                 * passed back to another smbc_ call.  Set it to False if the
-                 * names returned by smbc_readdir() are to be presented to the
-                 * user.
-                 *
-                 * For backwards compatibility, this option defaults to False.
-                 */
-                int urlencode_readdir_entries;
-
-                /*
-                 * Some Windows versions appear to have a limit to the number
-                 * of concurrent SESSIONs and/or TREE CONNECTions.  In
-                 * one-shot programs (i.e. the program runs and then quickly
-                 * ends, thereby shutting down all connections), it is
-                 * probably reasonable to establish a new connection for each
-                 * share.  In long-running applications, the limitation can be
-                 * avoided by using only a single connection to each server,
-                 * and issuing a new TREE CONNECT when the share is accessed.
-                 */
-                int one_share_per_server;
-        } options;
 };	
 
 

Modified: branches/SAMBA_3_0/source/include/libsmbclient.h
===================================================================
--- branches/SAMBA_3_0/source/include/libsmbclient.h	2005-03-11 16:31:32 UTC (rev 5751)
+++ branches/SAMBA_3_0/source/include/libsmbclient.h	2005-03-11 17:01:30 UTC (rev 5752)
@@ -68,8 +68,6 @@
 #include <fcntl.h>
 #include <utime.h>
 
-#define SMBC_CTX_VERSION	1
-
 #define SMBC_BASE_FD        10000 /* smallest file descriptor returned */
 
 #define SMBC_WORKGROUP      1
@@ -466,19 +464,79 @@
 	 */
 	struct smbc_server_cache * server_cache;
 
+	int flags;
+	
+        /** user options selections that apply to this session
+         */
+        struct _smbc_options {
+
+                /*
+                 * 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 local master browser, for
+                 * it to have the entire browse list (the list of
+                 * workgroups/domains) from an entire network.  Since a client
+                 * never knows which local master browser will be found first,
+                 * the one which is found first and used to retrieve a browse
+                 * list may have an incomplete or empty browse list.  By
+                 * requesting the browse list from multiple local master
+                 * browsers, a more complete list can be generated.  For small
+                 * networks (few workgroups), it is recommended that this
+                 * value be set to 0, causing the browse lists from all found
+                 * local master browsers to be retrieved and merged.  For
+                 * networks with many workgroups, a suitable value for this
+                 * variable is probably somewhere around 3. (Default: 3).
+                 */
+                int browse_max_lmb_count;
+
+                /*
+                 * There is a difference in the desired return strings from
+                 * smbc_readdir() depending upon whether the filenames are to
+                 * be displayed to the user, or whether they are to be
+                 * appended to the path name passed to smbc_opendir() to call
+                 * a further smbc_ function (e.g. open the file with
+                 * smbc_open()).  In the former case, the filename should be
+                 * in "human readable" form.  In the latter case, the smbc_
+                 * functions expect a URL which must be url-encoded.  Those
+                 * functions decode the URL.  If, for example, smbc_readdir()
+                 * returned a file name of "abc%20def.txt", passing a path
+                 * with this file name attached to smbc_open() would cause
+                 * smbc_open to attempt to open the file "abc def.txt" since
+                 * the %20 is decoded into a space.
+                 *
+                 * Set this option to True if the names returned by
+                 * smbc_readdir() should be url-encoded such that they can be
+                 * passed back to another smbc_ call.  Set it to False if the
+                 * names returned by smbc_readdir() are to be presented to the
+                 * user.
+                 *
+                 * For backwards compatibility, this option defaults to False.
+                 */
+                int urlencode_readdir_entries;
+
+                /*
+                 * Some Windows versions appear to have a limit to the number
+                 * of concurrent SESSIONs and/or TREE CONNECTions.  In
+                 * one-shot programs (i.e. the program runs and then quickly
+                 * ends, thereby shutting down all connections), it is
+                 * probably reasonable to establish a new connection for each
+                 * share.  In long-running applications, the limitation can be
+                 * avoided by using only a single connection to each server,
+                 * and issuing a new TREE CONNECT when the share is accessed.
+                 */
+                int one_share_per_server;
+        } options;
+	
 	/** INTERNAL DATA
 	 * do _NOT_ touch this from your program !
 	 */
 	struct smbc_internal_data * internal;
-
-	int flags;
 };
 
 /* Flags for SMBCCTX->flags */
 #define SMB_CTX_FLAG_USE_KERBEROS (1 << 0)
 #define SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS (1 << 1)
 #define SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON (1 << 2) /* don't try to do automatic anon login */
-#define SMBCCTX_FLAG_CTXVER (1 << 3 ) /* internal flag used to define _SMBCCTX version */
 
 /**@ingroup misc
  * Create a new SBMCCTX (a context).

Modified: branches/SAMBA_3_0/source/libsmb/libsmb_cache.c
===================================================================
--- branches/SAMBA_3_0/source/libsmb/libsmb_cache.c	2005-03-11 16:31:32 UTC (rev 5751)
+++ branches/SAMBA_3_0/source/libsmb/libsmb_cache.c	2005-03-11 17:01:30 UTC (rev 5752)
@@ -143,7 +143,7 @@
                          * a connection to the server (other than the
                          * attribute server connection) is cool.
                          */
-                        if (context->internal->options.one_share_per_server) {
+                        if (context->options.one_share_per_server) {
                                 /*
                                  * The currently connected share name
                                  * doesn't match the requested share, so

Modified: branches/SAMBA_3_0/source/libsmb/libsmbclient.c
===================================================================
--- branches/SAMBA_3_0/source/libsmb/libsmbclient.c	2005-03-11 16:31:32 UTC (rev 5751)
+++ branches/SAMBA_3_0/source/libsmb/libsmbclient.c	2005-03-11 17:01:30 UTC (rev 5752)
@@ -571,7 +571,7 @@
          * If we found a connection and we're only allowed one share per
          * server...
          */
-        if (srv && *share != '\0' && context->internal->options.one_share_per_server) {
+        if (srv && *share != '\0' && context->options.one_share_per_server) {
 
                 /*
                  * ... then if there's no current connection to the share,
@@ -1932,9 +1932,9 @@
 		}
 
                 /* Determine how many local master browsers to query */
-                max_lmb_count = (context->internal->options.browse_max_lmb_count == 0
+                max_lmb_count = (context->options.browse_max_lmb_count == 0
                                  ? INT_MAX
-                                 : context->internal->options.browse_max_lmb_count);
+                                 : context->options.browse_max_lmb_count);
 
                 pstrcpy(u_info.username, user);
                 pstrcpy(u_info.password, password);
@@ -2216,7 +2216,7 @@
                                   struct smbc_dirent *src,
                                   int max_namebuf_len)
 {
-        if (context->internal->options.urlencode_readdir_entries) {
+        if (context->options.urlencode_readdir_entries) {
 
                 /* url-encode the name.  get back remaining buffer space */
                 max_namebuf_len =
@@ -4804,8 +4804,6 @@
                 return NULL;
         }
 
-	context->flags = SMBCCTX_FLAG_CTXVER;
-
         ZERO_STRUCTP(context->internal);
 
         
@@ -4813,9 +4811,9 @@
         context->debug            = 0;
         context->timeout          = 20000; /* 20 seconds */
 
-	context->internal->options.browse_max_lmb_count      = 3;    /* # LMBs to query */
-	context->internal->options.urlencode_readdir_entries = False;/* backward compat */
-	context->internal->options.one_share_per_server      = False;/* backward compat */
+	context->options.browse_max_lmb_count      = 3;    /* # LMBs to query */
+	context->options.urlencode_readdir_entries = False;/* backward compat */
+	context->options.one_share_per_server      = False;/* backward compat */
 
         context->open                              = smbc_open_ctx;
         context->creat                             = smbc_creat_ctx;



More information about the samba-cvs mailing list