summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/client/mount.cifs.c13
-rw-r--r--source3/lib/readline.c1
-rw-r--r--source3/modules/vfs_smb_traffic_analyzer.c1
-rw-r--r--source3/smbd/notify_inotify.c4
-rw-r--r--source3/winbindd/winbindd_dual.c2
5 files changed, 18 insertions, 3 deletions
diff --git a/source3/client/mount.cifs.c b/source3/client/mount.cifs.c
index fd8014cf9f..2a9c2b7304 100644
--- a/source3/client/mount.cifs.c
+++ b/source3/client/mount.cifs.c
@@ -441,6 +441,7 @@ static int parse_options(char ** optionsp, int * filesys_flags)
goto nocopy;
} else {
printf("username specified with no parameter\n");
+ SAFE_FREE(out);
return 1; /* needs_arg; */
}
} else {
@@ -473,6 +474,7 @@ static int parse_options(char ** optionsp, int * filesys_flags)
domain_name = check_for_domain(&value);
} else {
printf("username too long\n");
+ SAFE_FREE(out);
return 1;
}
}
@@ -488,6 +490,7 @@ static int parse_options(char ** optionsp, int * filesys_flags)
got_password = 1;
} else {
printf("password too long\n");
+ SAFE_FREE(out);
return 1;
}
} else if (strncmp(data, "sec", 3) == 0) {
@@ -505,6 +508,7 @@ static int parse_options(char ** optionsp, int * filesys_flags)
got_ip = 1;
} else {
printf("ip address too long\n");
+ SAFE_FREE(out);
return 1;
}
} else if ((strncmp(data, "unc", 3) == 0)
@@ -512,6 +516,7 @@ static int parse_options(char ** optionsp, int * filesys_flags)
|| (strncmp(data, "path", 4) == 0)) {
if (!value || !*value) {
printf("invalid path to network resource\n");
+ SAFE_FREE(out);
return 1; /* needs_arg; */
} else if(strnlen(value,5) < 5) {
printf("UNC name too short");
@@ -526,6 +531,7 @@ static int parse_options(char ** optionsp, int * filesys_flags)
got_unc = 1;
} else if (strncmp(value, "\\\\", 2) != 0) {
printf("UNC Path does not begin with // or \\\\ \n");
+ SAFE_FREE(out);
return 1;
} else {
if(got_unc)
@@ -535,6 +541,7 @@ static int parse_options(char ** optionsp, int * filesys_flags)
}
} else {
printf("CIFS: UNC name too long\n");
+ SAFE_FREE(out);
return 1;
}
} else if ((strncmp(data, "dom" /* domain */, 3) == 0)
@@ -544,12 +551,14 @@ static int parse_options(char ** optionsp, int * filesys_flags)
and "WORKGRP" etc. */
if (!value || !*value) {
printf("CIFS: invalid domain name\n");
+ SAFE_FREE(out);
return 1; /* needs_arg; */
}
if (strnlen(value, DOMAIN_SIZE+1) < DOMAIN_SIZE+1) {
got_domain = 1;
} else {
printf("domain name too long\n");
+ SAFE_FREE(out);
return 1;
}
} else if (strncmp(data, "cred", 4) == 0) {
@@ -558,10 +567,12 @@ static int parse_options(char ** optionsp, int * filesys_flags)
if(rc) {
printf("error %d (%s) opening credential file %s\n",
rc, strerror(rc), value);
+ SAFE_FREE(out);
return 1;
}
} else {
printf("invalid credential file name specified\n");
+ SAFE_FREE(out);
return 1;
}
} else if (strncmp(data, "uid", 3) == 0) {
@@ -600,6 +611,7 @@ static int parse_options(char ** optionsp, int * filesys_flags)
} else if (strcmp(data, "file_mode") == 0 || strcmp(data, "fmask")==0) {
if (!value || !*value) {
printf ("Option '%s' requires a numerical argument\n", data);
+ SAFE_FREE(out);
return 1;
}
@@ -614,6 +626,7 @@ static int parse_options(char ** optionsp, int * filesys_flags)
} else if (strcmp(data, "dir_mode") == 0 || strcmp(data, "dmask")==0) {
if (!value || !*value) {
printf ("Option '%s' requires a numerical argument\n", data);
+ SAFE_FREE(out);
return 1;
}
diff --git a/source3/lib/readline.c b/source3/lib/readline.c
index cafb5a9f62..34867aad9e 100644
--- a/source3/lib/readline.c
+++ b/source3/lib/readline.c
@@ -105,6 +105,7 @@ static char *smb_readline_replacement(const char *prompt, void (*callback)(void)
callback();
}
}
+ SAFE_FREE(line);
return NULL;
}
diff --git a/source3/modules/vfs_smb_traffic_analyzer.c b/source3/modules/vfs_smb_traffic_analyzer.c
index 9456afb811..63cc904bed 100644
--- a/source3/modules/vfs_smb_traffic_analyzer.c
+++ b/source3/modules/vfs_smb_traffic_analyzer.c
@@ -123,6 +123,7 @@ static int smb_traffic_analyzer_connect_unix_socket(vfs_handle_struct *handle,
DEBUG(1, ("smb_traffic_analyzer_connect_unix_socket: "
"Couldn't create socket, "
"make sure stad is running!\n"));
+ return -1;
}
remote.sun_family = AF_UNIX;
strlcpy(remote.sun_path, name,
diff --git a/source3/smbd/notify_inotify.c b/source3/smbd/notify_inotify.c
index fa0f0ed51d..c6c12a9cd2 100644
--- a/source3/smbd/notify_inotify.c
+++ b/source3/smbd/notify_inotify.c
@@ -243,14 +243,14 @@ static void inotify_handler(struct event_context *ev, struct fd_event *fde,
e0 = e = (struct inotify_event *)TALLOC_SIZE(in, bufsize);
if (e == NULL) return;
- if (read(in->fd, e0, bufsize) != bufsize) {
+ if (sys_read(in->fd, e0, bufsize) != bufsize) {
DEBUG(0,("Failed to read all inotify data\n"));
talloc_free(e0);
return;
}
/* we can get more than one event in the buffer */
- while (bufsize >= sizeof(*e)) {
+ while (e && (bufsize >= sizeof(*e))) {
struct inotify_event *e2 = NULL;
bufsize -= e->len + sizeof(*e);
if (bufsize >= sizeof(*e)) {
diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c
index 994c94b5be..03d1e043bf 100644
--- a/source3/winbindd/winbindd_dual.c
+++ b/source3/winbindd/winbindd_dual.c
@@ -1259,7 +1259,7 @@ static bool fork_domain_child(struct winbindd_child *child)
set_domain_online_request(child->domain);
- if (primary_domain != child->domain) {
+ if (primary_domain && (primary_domain != child->domain)) {
/* We need to talk to the primary
* domain as well as the trusted
* domain inside a trusted domain