summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorDavid Disseldorp <ddiss@samba.org>2018-06-25 02:08:25 +0200
committerJeremy Allison <jra@samba.org>2018-07-06 20:37:20 +0200
commitc53646bccd87ef3b3133d3f7526ef85591909528 (patch)
treebdc3c38d1f2f167b989883285fe2a2964b438d2b /source3
parentce6c77d63a7e361f8c3233d7d5b439ad6796a09b (diff)
downloadsamba-c53646bccd87ef3b3133d3f7526ef85591909528.tar.gz
s3/service: convert lp_force_group() to const
set_conn_force_user_group() and change_to_user_internal() leak onto the callers' talloc stackframe. Drop the unnecessary heap allocations. Signed-off-by: David Disseldorp <ddiss@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3')
-rw-r--r--source3/smbd/service.c19
-rw-r--r--source3/smbd/uid.c3
2 files changed, 9 insertions, 13 deletions
diff --git a/source3/smbd/service.c b/source3/smbd/service.c
index 2e4a1136254..df72172d9b0 100644
--- a/source3/smbd/service.c
+++ b/source3/smbd/service.c
@@ -243,23 +243,18 @@ static NTSTATUS find_forced_group(bool force_user,
TALLOC_CTX *frame = talloc_stackframe();
struct dom_sid group_sid;
enum lsa_SidType type;
+ const char *force_group;
char *groupname;
bool user_must_be_member = False;
gid_t gid;
- groupname = lp_force_group(talloc_tos(), snum);
- if (groupname == NULL) {
- DEBUG(1, ("talloc_strdup failed\n"));
- result = NT_STATUS_NO_MEMORY;
- goto done;
- }
-
- if (groupname[0] == '+') {
- user_must_be_member = True;
- groupname += 1;
+ force_group = lp_force_group(snum);
+ if (force_group[0] == '+') {
+ user_must_be_member = true;
+ force_group += 1;
}
- groupname = talloc_string_sub(talloc_tos(), groupname,
+ groupname = talloc_string_sub(talloc_tos(), force_group,
"%S", lp_const_servicename(snum));
if (groupname == NULL) {
DEBUG(1, ("talloc_string_sub failed\n"));
@@ -427,7 +422,7 @@ NTSTATUS set_conn_force_user_group(connection_struct *conn, int snum)
* any groupid stored for the connecting user.
*/
- if (*lp_force_group(talloc_tos(), snum)) {
+ if (*lp_force_group(snum)) {
status = find_forced_group(
conn->force_user, snum, conn->session_info->unix_info->unix_name,
diff --git a/source3/smbd/uid.c b/source3/smbd/uid.c
index 9d5321cf4cc..b6a754b8cfd 100644
--- a/source3/smbd/uid.c
+++ b/source3/smbd/uid.c
@@ -335,7 +335,8 @@ static bool change_to_user_internal(connection_struct *conn,
* See if we should force group for this service. If so this overrides
* any group set in the force user code.
*/
- if((group_c = *lp_force_group(talloc_tos(), snum))) {
+ group_c = *lp_force_group(snum);
+ if (group_c != '\0') {
SMB_ASSERT(conn->force_group_gid != (gid_t)-1);