Author: tridge
Date: 2007-05-14 01:04:01 +0000 (Mon, 14 May 2007)
New Revision: 22834

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

Log:

fixed a memory leak in the torture_open_connection() code, and removed
the duplicate handling of the unclist. This now exposes a function
torture_get_conn_index() which can be used by tests to work out which
host to talk to using the unclist. I will be using that as part of a
set of tests for clustered Samba that need to do auto-reconnect (to
allow testing of cluster node failure)

Modified:
   branches/SAMBA_4_0/source/torture/util_smb.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/util_smb.c
===================================================================
--- branches/SAMBA_4_0/source/torture/util_smb.c        2007-05-14 01:01:05 UTC 
(rev 22833)
+++ branches/SAMBA_4_0/source/torture/util_smb.c        2007-05-14 01:04:01 UTC 
(rev 22834)
@@ -486,71 +486,66 @@
        return True;
 }
 
-_PUBLIC_ bool torture_open_connection(struct smbcli_state **c, int conn_index)
+_PUBLIC_ bool torture_get_conn_index(int conn_index,
+                                    TALLOC_CTX *mem_ctx,
+                                    char **host, char **share)
 {
-       const char *host = lp_parm_string(-1, "torture", "host");
-       const char *share = lp_parm_string(-1, "torture", "share");
        char **unc_list = NULL;
        int num_unc_names = 0;
        const char *p;
+
+       (*host) = talloc_strdup(mem_ctx, lp_parm_string(-1, "torture", "host"));
+       (*share) = talloc_strdup(mem_ctx, lp_parm_string(-1, "torture", 
"share"));
        
        p = lp_parm_string(-1, "torture", "unclist");
-       if (p) {
-               char *h, *s;
-               unc_list = file_lines_load(p, &num_unc_names, NULL);
-               if (!unc_list || num_unc_names <= 0) {
-                       printf("Failed to load unc names list from '%s'\n", p);
-                       exit(1);
-               }
+       if (!p) {
+               return True;
+       }
 
-               if (!smbcli_parse_unc(unc_list[conn_index % num_unc_names],
-                                     NULL, &h, &s)) {
-                       printf("Failed to parse UNC name %s\n",
-                              unc_list[conn_index % num_unc_names]);
-                       exit(1);
-               }
-               host = h;
-               share = s;
+       unc_list = file_lines_load(p, &num_unc_names, NULL);
+       if (!unc_list || num_unc_names <= 0) {
+               DEBUG(0,("Failed to load unc names list from '%s'\n", p));
+               return False;
        }
 
-       return torture_open_connection_share(NULL, c, host, share, NULL);
+       if (!smbcli_parse_unc(unc_list[conn_index % num_unc_names],
+                             mem_ctx, host, share)) {
+               DEBUG(0, ("Failed to parse UNC name %s\n",
+                         unc_list[conn_index % num_unc_names]));
+               return False;
+       }
+
+       talloc_free(unc_list);
+       return True;
 }
 
+
+
 _PUBLIC_ bool torture_open_connection_ev(struct smbcli_state **c,
                                         int conn_index,
                                         struct event_context *ev)
 {
-       const char *host = lp_parm_string(-1, "torture", "host");
-       const char *share = lp_parm_string(-1, "torture", "share");
-       char **unc_list = NULL;
-       int num_unc_names = 0;
-       const char *p;
-       
-       p = lp_parm_string(-1, "torture", "unclist");
-       if (p) {
-               char *h, *s;
-               unc_list = file_lines_load(p, &num_unc_names, NULL);
-               if (!unc_list || num_unc_names <= 0) {
-                       printf("Failed to load unc names list from '%s'\n", p);
-                       exit(1);
-               }
+       char *host, *share;
+       bool ret;
 
-               if (!smbcli_parse_unc(unc_list[conn_index % num_unc_names],
-                                     NULL, &h, &s)) {
-                       printf("Failed to parse UNC name %s\n",
-                              unc_list[conn_index % num_unc_names]);
-                       exit(1);
-               }
-               host = h;
-               share = s;
+       if (!torture_get_conn_index(conn_index, ev, &host, &share)) {
+               return False;
        }
 
+       ret = torture_open_connection_share(NULL, c, host, share, ev);
+       talloc_free(host);
+       talloc_free(share);
 
-       return torture_open_connection_share(NULL, c, host, share, ev);
+       return ret;
 }
 
+_PUBLIC_ bool torture_open_connection(struct smbcli_state **c, int conn_index)
+{
+       return torture_open_connection_ev(c, conn_index, NULL);
+}
 
 
+
 _PUBLIC_ bool torture_close_connection(struct smbcli_state *c)
 {
        bool ret = True;

Reply via email to