summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalph Boehme <slow@samba.org>2019-10-31 10:57:39 (GMT)
committerAndreas Schneider <asn@cryptomilk.org>2019-11-07 14:16:42 (GMT)
commit41ab92b62fbf029374b89f9d0ddf7578981f37cf (patch)
treefa511f1d5961cf2186460a0c7796aef221d51d89
parent4736623c24503b3ca09c76c9dbb134ef833b2f80 (diff)
downloadsamba-41ab92b62fbf029374b89f9d0ddf7578981f37cf.tar.gz
s3:lib: factor out talloc_sub_advanced() from talloc_sub_full()
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13745 Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
-rw-r--r--source3/include/proto.h4
-rw-r--r--source3/lib/substitute.c28
2 files changed, 27 insertions, 5 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index e453669..332a413 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -180,6 +180,10 @@ char *talloc_sub_specified(TALLOC_CTX *mem_ctx,
const char *domain,
uid_t uid,
gid_t gid);
+char *talloc_sub_advanced(TALLOC_CTX *mem_ctx,
+ const char *servicename, const char *user,
+ const char *connectpath, gid_t gid,
+ const char *str);
char *talloc_sub_full(TALLOC_CTX *mem_ctx,
const char *servicename, const char *user,
const char *connectpath, gid_t gid,
diff --git a/source3/lib/substitute.c b/source3/lib/substitute.c
index e5cd0f2..f3f2e1b 100644
--- a/source3/lib/substitute.c
+++ b/source3/lib/substitute.c
@@ -790,21 +790,19 @@ char *talloc_sub_specified(TALLOC_CTX *mem_ctx,
/****************************************************************************
****************************************************************************/
-char *talloc_sub_full(TALLOC_CTX *ctx,
+char *talloc_sub_advanced(TALLOC_CTX *ctx,
const char *servicename,
const char *user,
const char *connectpath,
gid_t gid,
- const char *smb_name,
- const char *domain_name,
const char *str)
{
- char *a_string, *ret_string;
+ char *a_string;
char *b, *p, *s;
a_string = talloc_strdup(talloc_tos(), str);
if (a_string == NULL) {
- DBG_ERR("Out of memory!\n");
+ DEBUG(0, ("talloc_sub_advanced_only: Out of memory!\n"));
return NULL;
}
@@ -858,6 +856,26 @@ char *talloc_sub_full(TALLOC_CTX *ctx,
}
}
+ return a_string;
+}
+
+char *talloc_sub_full(TALLOC_CTX *ctx,
+ const char *servicename,
+ const char *user,
+ const char *connectpath,
+ gid_t gid,
+ const char *smb_name,
+ const char *domain_name,
+ const char *str)
+{
+ char *a_string, *ret_string;
+
+ a_string = talloc_sub_advanced(ctx, servicename, user, connectpath,
+ gid, str);
+ if (a_string == NULL) {
+ return NULL;
+ }
+
ret_string = talloc_sub_basic(ctx, smb_name, domain_name, a_string);
TALLOC_FREE(a_string);
return ret_string;