1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-22 22:04:08 +03:00

s3/lib: move set_namearray() to util_namearray.c

Needed to fix circular dependencies between samba-passdb, secrets3 and
samba3util (iirc).

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
Ralph Boehme 2024-02-07 10:21:33 +01:00 committed by Stefan Metzmacher
parent 8ab29157b9
commit c4ede22db0
3 changed files with 92 additions and 63 deletions

View File

@ -792,69 +792,6 @@ bool is_in_path(const char *name,
return False;
}
/*******************************************************************
Strip a '/' separated list into an array of
name_compare_enties structures suitable for
passing to is_in_path(). We do this for
speed so we can pre-parse all the names in the list
and don't do it for each call to is_in_path().
We also check if the entry contains a wildcard to
remove a potentially expensive call to mask_match
if possible.
********************************************************************/
void set_namearray(TALLOC_CTX *mem_ctx,
const char *namelist_in,
struct name_compare_entry **_name_array)
{
struct name_compare_entry *name_array = NULL;
struct name_compare_entry *e = NULL;
char *namelist = NULL;
const char *p = NULL;
size_t num_entries;
*_name_array = NULL;
if ((namelist_in == NULL) || (namelist_in[0] == '\0')) {
return;
}
namelist = path_to_strv(mem_ctx, namelist_in);
if (namelist == NULL) {
DBG_ERR("path_to_strv failed\n");
return;
}
num_entries = strv_count(namelist);
name_array = talloc_zero_array(mem_ctx,
struct name_compare_entry,
num_entries + 1);
if (name_array == NULL) {
DBG_ERR("talloc failed\n");
TALLOC_FREE(namelist);
return;
}
namelist = talloc_reparent(mem_ctx, name_array, namelist);
e = &name_array[0];
while ((p = strv_next(namelist, p)) != NULL) {
if (*p == '\0') {
/* cope with multiple (useless) /s) */
continue;
}
e->name = p;
e->is_wild = ms_has_wild(e->name);
e++;
}
*_name_array = name_array;
return;
}
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_LOCKING

View File

@ -0,0 +1,84 @@
/*
Unix SMB/CIFS implementation.
Samba utility functions
Copyright (C) Ralph Boehme 2024
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "includes.h"
#include "lib/util/strv.h"
/*******************************************************************
Strip a '/' separated list into an array of
name_compare_enties structures suitable for
passing to is_in_path(). We do this for
speed so we can pre-parse all the names in the list
and don't do it for each call to is_in_path().
We also check if the entry contains a wildcard to
remove a potentially expensive call to mask_match
if possible.
********************************************************************/
void set_namearray(TALLOC_CTX *mem_ctx,
const char *namelist_in,
struct name_compare_entry **_name_array)
{
struct name_compare_entry *name_array = NULL;
struct name_compare_entry *e = NULL;
char *namelist = NULL;
const char *p = NULL;
size_t num_entries;
*_name_array = NULL;
if ((namelist_in == NULL) || (namelist_in[0] == '\0')) {
return;
}
namelist = path_to_strv(mem_ctx, namelist_in);
if (namelist == NULL) {
DBG_ERR("path_to_strv failed\n");
return;
}
num_entries = strv_count(namelist);
name_array = talloc_zero_array(mem_ctx,
struct name_compare_entry,
num_entries + 1);
if (name_array == NULL) {
DBG_ERR("talloc failed\n");
TALLOC_FREE(namelist);
return;
}
namelist = talloc_reparent(mem_ctx, name_array, namelist);
e = &name_array[0];
while ((p = strv_next(namelist, p)) != NULL) {
if (*p == '\0') {
/* cope with multiple (useless) /s) */
continue;
}
e->name = p;
e->is_wild = ms_has_wild(e->name);
e++;
}
*_name_array = name_array;
return;
}

View File

@ -313,6 +313,13 @@ bld.SAMBA3_SUBSYSTEM('samba3util',
iov_buf
''')
bld.SAMBA3_SUBSYSTEM('samba3-namearray',
source='''
lib/util_namearray.c
''',
deps='''
''')
if bld.env.with_ctdb:
SAMBA_CLUSTER_SUPPORT_SOURCES='''
lib/cluster_support.c
@ -742,6 +749,7 @@ bld.SAMBA3_LIBRARY('smbd_base',
GNUTLS_HELPERS
fd_handle
cli_spoolss
samba3-namearray
''' +
bld.env['dmapi_lib'] +
bld.env['legacy_quota_libs'] +