mirror of
https://github.com/samba-team/samba.git
synced 2025-03-12 20:58:37 +03:00
vfs_virusfilter: Allocate separate memory for config char*
Instead of using only the pointer to the configuration char* from the global configuration, vfs_virusfilter now allocates its own memory and copies the char* from the global configuration. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14606 Signed-off-by: Arne Kreddig <arne@kreddig.net> Reviewed-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Thu Jan 7 19:25:38 UTC 2021 on sn-devel-184 (cherry picked from commit 2f21d1b0ac8526508161de73290f67858b2fe668)
This commit is contained in:
parent
578c5805ac
commit
6adf361906
@ -196,6 +196,14 @@ static int virusfilter_vfs_connect(
|
||||
struct virusfilter_config *config = NULL;
|
||||
const char *exclude_files = NULL;
|
||||
const char *temp_quarantine_dir_mode = NULL;
|
||||
const char *infected_file_command = NULL;
|
||||
const char *scan_error_command = NULL;
|
||||
const char *quarantine_dir = NULL;
|
||||
const char *quarantine_prefix = NULL;
|
||||
const char *quarantine_suffix = NULL;
|
||||
const char *rename_prefix = NULL;
|
||||
const char *rename_suffix = NULL;
|
||||
const char *socket_path = NULL;
|
||||
char *sret = NULL;
|
||||
char *tmp = NULL;
|
||||
enum virusfilter_scanner_enum backend;
|
||||
@ -253,11 +261,21 @@ static int virusfilter_vfs_connect(
|
||||
snum, "virusfilter", "infected file action",
|
||||
virusfilter_actions, VIRUSFILTER_ACTION_DO_NOTHING);
|
||||
|
||||
config->infected_file_command = lp_parm_const_string(
|
||||
infected_file_command = lp_parm_const_string(
|
||||
snum, "virusfilter", "infected file command", NULL);
|
||||
config->infected_file_command = talloc_strdup(config, infected_file_command);
|
||||
if (config->infected_file_command == NULL) {
|
||||
DBG_ERR("virusfilter-vfs: out of memory!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
config->scan_error_command = lp_parm_const_string(
|
||||
scan_error_command = lp_parm_const_string(
|
||||
snum, "virusfilter", "scan error command", NULL);
|
||||
config->scan_error_command = talloc_strdup(config, scan_error_command);
|
||||
if (config->scan_error_command == NULL) {
|
||||
DBG_ERR("virusfilter-vfs: out of memory!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
config->block_access_on_error = lp_parm_bool(
|
||||
snum, "virusfilter", "block access on error", false);
|
||||
@ -265,9 +283,14 @@ static int virusfilter_vfs_connect(
|
||||
tmp = talloc_asprintf(config, "%s/.quarantine",
|
||||
handle->conn->connectpath);
|
||||
|
||||
config->quarantine_dir = lp_parm_const_string(
|
||||
quarantine_dir = lp_parm_const_string(
|
||||
snum, "virusfilter", "quarantine directory",
|
||||
tmp ? tmp : "/tmp/.quarantine");
|
||||
config->quarantine_dir = talloc_strdup(config, quarantine_dir);
|
||||
if (config->quarantine_dir == NULL) {
|
||||
DBG_ERR("virusfilter-vfs: out of memory!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (tmp != config->quarantine_dir) {
|
||||
TALLOC_FREE(tmp);
|
||||
@ -281,13 +304,23 @@ static int virusfilter_vfs_connect(
|
||||
config->quarantine_dir_mode = mode;
|
||||
}
|
||||
|
||||
config->quarantine_prefix = lp_parm_const_string(
|
||||
quarantine_prefix = lp_parm_const_string(
|
||||
snum, "virusfilter", "quarantine prefix",
|
||||
VIRUSFILTER_DEFAULT_QUARANTINE_PREFIX);
|
||||
config->quarantine_prefix = talloc_strdup(config, quarantine_prefix);
|
||||
if (config->quarantine_prefix == NULL) {
|
||||
DBG_ERR("virusfilter-vfs: out of memory!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
config->quarantine_suffix = lp_parm_const_string(
|
||||
quarantine_suffix = lp_parm_const_string(
|
||||
snum, "virusfilter", "quarantine suffix",
|
||||
VIRUSFILTER_DEFAULT_QUARANTINE_SUFFIX);
|
||||
config->quarantine_suffix = talloc_strdup(config, quarantine_suffix);
|
||||
if (config->quarantine_suffix == NULL) {
|
||||
DBG_ERR("virusfilter-vfs: out of memory!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Make sure prefixes and suffixes do not contain directory
|
||||
@ -318,13 +351,23 @@ static int virusfilter_vfs_connect(
|
||||
config->quarantine_keep_name = lp_parm_bool(
|
||||
snum, "virusfilter", "quarantine keep name", true);
|
||||
|
||||
config->rename_prefix = lp_parm_const_string(
|
||||
rename_prefix = lp_parm_const_string(
|
||||
snum, "virusfilter", "rename prefix",
|
||||
VIRUSFILTER_DEFAULT_RENAME_PREFIX);
|
||||
config->rename_prefix = talloc_strdup(config, rename_prefix);
|
||||
if (config->rename_prefix == NULL) {
|
||||
DBG_ERR("virusfilter-vfs: out of memory!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
config->rename_suffix = lp_parm_const_string(
|
||||
rename_suffix = lp_parm_const_string(
|
||||
snum, "virusfilter", "rename suffix",
|
||||
VIRUSFILTER_DEFAULT_RENAME_SUFFIX);
|
||||
config->rename_suffix = talloc_strdup(config, rename_suffix);
|
||||
if (config->rename_suffix == NULL) {
|
||||
DBG_ERR("virusfilter-vfs: out of memory!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Make sure prefixes and suffixes do not contain directory
|
||||
@ -361,15 +404,20 @@ static int virusfilter_vfs_connect(
|
||||
config->scan_error_close_errno = lp_parm_int(
|
||||
snum, "virusfilter", "scan error errno on close", 0);
|
||||
|
||||
config->socket_path = lp_parm_const_string(
|
||||
socket_path = lp_parm_const_string(
|
||||
snum, "virusfilter", "socket path", NULL);
|
||||
config->socket_path = talloc_strdup(config, socket_path);
|
||||
if (config->socket_path == NULL) {
|
||||
DBG_ERR("virusfilter-vfs: out of memory!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* canonicalize socket_path */
|
||||
if (config->socket_path != NULL && config->socket_path[0] != '/') {
|
||||
DBG_ERR("socket path must be an absolute path. "
|
||||
"Using backend default\n");
|
||||
config->socket_path = NULL;
|
||||
}
|
||||
}
|
||||
if (config->socket_path != NULL) {
|
||||
canonicalize_absolute_path(handle,
|
||||
config->socket_path);
|
||||
|
Loading…
x
Reference in New Issue
Block a user