r26453: Janitorial: Don't use a static char[] in smb_readline_replacement.
authorKai Blin <kai@samba.org>
Fri, 14 Dec 2007 13:04:56 +0000 (14:04 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 21 Dec 2007 04:50:18 +0000 (05:50 +0100)
Fix up callers to free the memory returned, as that is needed if we use the
original readline function as well.

source/client/client.c
source/lib/registry/tools/regshell.c
source/lib/smbreadline/smbreadline.c
source/torture/rpc/samr.c
source/torture/smbtorture.c

index 748ee2d..65bcfee 100644 (file)
@@ -2997,16 +2997,18 @@ static int process_stdin(struct smbclient_context *ctx)
                char *the_prompt = talloc_asprintf(ctx, "smb: %s> ", ctx->remote_cur_dir);
                char *cline = smb_readline(the_prompt, readline_callback, completion_fn);
                talloc_free(the_prompt);
-                       
+
                if (!cline) break;
-               
+
                /* special case - first char is ! */
                if (*cline == '!') {
                        system(cline + 1);
                        continue;
                }
 
-               rc |= process_command_string(ctx, cline); 
+               rc |= process_command_string(ctx, cline);
+               free(cline);
+
        }
 
        return rc;
index 1c5157e..329d6ab 100644 (file)
@@ -546,12 +546,16 @@ int main(int argc, char **argv)
                                                           via readline :-( */
                line = smb_readline(prompt, NULL, reg_completion);
 
-               if (line == NULL)
+               if (line == NULL) {
+                       free(prompt);
                        break;
+               }
 
                if (line[0] != '\n') {
                        ret = W_ERROR_IS_OK(process_cmd(ctx, line));
                }
+               free(line);
+               free(prompt);
        }
        talloc_free(ctx);
 
index e5cc352..a85f335 100644 (file)
@@ -77,13 +77,18 @@ static char *smb_readline_replacement(const char *prompt, void (*callback)(void)
                                      char **(completion_fn)(const char *text, int start, int end))
 {
        fd_set fds;
-       static char line[1024];
+       char *line;
        struct timeval timeout;
        int fd = STDIN_FILENO;
        char *ret;
 
        do_debug("%s", prompt);
 
+       line = (char *)malloc(BUFSIZ);
+       if (!line) {
+               return NULL;
+       }
+
        while (1) {
                timeout.tv_sec = 5;
                timeout.tv_usec = 0;
@@ -92,7 +97,7 @@ static char *smb_readline_replacement(const char *prompt, void (*callback)(void)
                FD_SET(fd,&fds);
 
                if (sys_select_intr(fd+1,&fds,NULL,NULL,&timeout) == 1) {
-                       ret = x_fgets(line, sizeof(line), x_stdin);
+                       ret = x_fgets(line, BUFSIZ, x_stdin);
                        return ret;
                }
                if (callback)
index f8d5b70..9d6c738 100644 (file)
@@ -824,6 +824,7 @@ static bool test_SetAliasInfo(struct dcerpc_pipe *p, struct torture_context *tct
                    case ALIASINFONAME: init_lsa_String(&r.in.info->name,TEST_ALIASNAME); break;
                    case ALIASINFODESCRIPTION: init_lsa_String(&r.in.info->description,
                                "Test Description, should test I18N as well"); break;
+                   case ALIASINFOALL: printf("ALIASINFOALL ignored\n"); break;
                }
 
                status = dcerpc_samr_SetAliasInfo(p, tctx, &r);
index 6d97e9a..371ddc7 100644 (file)
@@ -500,6 +500,7 @@ void run_shell(struct torture_context *tctx)
                                run_test(tctx, argv[1]);
                        }
                }
+               free(cline);
        }
 }