The branch, master has been updated via 9ed7555 nsswitch: Remove fallback setting of WINBINDD_SOCKET_DIR via f580a7c libcli: Add warning about flow control changing macros in ntstatus.h via 0b8213a Remove all uses of the NT_STATUS_NOT_OK_RETURN_AND_FREE macro from the codebase. via 856c74e Remove NT_STATUS_IS_ERR_RETURN macro from the codebase. via 4c9e0d5 Remove NT_STATUS_IS_OK_RETURN macro from the codebase. via d2beff5 Remove the remaining uses of the macro NT_STATUS_HAVE_NO_MEMORY_AND_FREE in the codebase. via 952bc3c Remove a number of NT_STATUS_HAVE_NO_MEMORY_AND_FREE macros from the codebase. via 1f60aa8 winbind4: Remove unused winbind_get_idmap irpc operation via 13affa6 auth4: Remove unused wbc_context via 5f7b8e4 ntvfs_unixuid: No wbc_context required via 65c6daf ntvfs_posix: No wbc_context required via 2122163 dcesrv_unixinfo: No wbc_context required via 0aa080b unixuid: Use the tevent_context from the ntvfs_context via d0dc6db pvfs: Use the tevent_context from the ntvfs_context via aa048f6 auth4: Do not generate just a temporary wbc_context via b2c1394 auth4: auth_session_info_fill_unix only needs a tevent_context via 6edf7a3 auth4: security_token_to_unix_token only needs a tevent_context via dcf29a8 libwbclient4: Remove unused composite-based functions via eb8f4b8 source4: Use wbc_xids_to_sids via 53b7665 libwbclient4: Add wbc_xids_to_sids via 7289d1c source4: Use wbc_sids_to_xids via 22dabda libwbclient4: Add wbc_sids_to_xids from 7a53bb9 rpc_server: change unsupported pipe error
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 9ed7555c82b4c7c14e12ab08483707e68080e152 Author: Andrew Bartlett <abart...@samba.org> Date: Wed Feb 19 11:39:46 2014 +1300 nsswitch: Remove fallback setting of WINBINDD_SOCKET_DIR This is the original cause of the wbc NT_STATUS_OBJECT_NAME_NOT_FOUND issues in recent git master, as the build was able to progress without the correct path being set as an override. Andrew Bartlett Change-Id: I1dbc7350695756356e869199b589eb781eb5c673 Signed-off-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> Autobuild-User(master): Andreas Schneider <a...@cryptomilk.org> Autobuild-Date(master): Wed Mar 5 18:34:48 CET 2014 on sn-devel-104 commit f580a7c4ffe6ba5e414cc6382e28751aab77277f Author: Andrew Bartlett <abart...@samba.org> Date: Tue Mar 4 14:11:09 2014 +1300 libcli: Add warning about flow control changing macros in ntstatus.h Change-Id: I49fec82e55b6bc59d5c0f157df90005f7d891c66 Signed-off-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 0b8213ae1cd0129b7a50cf7ba3605512a990520f Author: Garming Sam <garm...@catalyst.net.nz> Date: Fri Feb 14 18:04:22 2014 +1300 Remove all uses of the NT_STATUS_NOT_OK_RETURN_AND_FREE macro from the codebase. Following the current coding guidelines, it is considered bad practice to return from within a macro and change control flow as they look like normal function calls. Change-Id: I421e169275fe323e2b019c6cc5d386289aec07f7 Signed-off-by: Garming Sam <garm...@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 856c74e013eaa53902479b771e6c0cf1fea67745 Author: Garming Sam <garm...@catalyst.net.nz> Date: Fri Feb 14 17:46:40 2014 +1300 Remove NT_STATUS_IS_ERR_RETURN macro from the codebase. Following the current coding guidelines, it is considered bad practice to return from within a macro and change control flow as they look like normal function calls. Change-Id: I39b07b3a799331a5faa968629aa95b836cb78600 Signed-off-by: Garming Sam <garm...@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 4c9e0d5addd626769123299b593ec937ee52a0b5 Author: Garming Sam <garm...@catalyst.net.nz> Date: Fri Feb 14 17:43:25 2014 +1300 Remove NT_STATUS_IS_OK_RETURN macro from the codebase. Following the current coding guidelines, it is considered bad practice to return from within a macro and change control flow as they look like normal function calls. Change-Id: I27e7597f4078f0a6c96b5dadd12454fffe33e6b2 Signed-off-by: Garming Sam <garm...@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit d2beff59ecd50ef2e77684bd0043c3d943a3b245 Author: Garming Sam <garm...@catalyst.net.nz> Date: Thu Feb 13 18:08:56 2014 +1300 Remove the remaining uses of the macro NT_STATUS_HAVE_NO_MEMORY_AND_FREE in the codebase. Following the current coding guidelines, it is considered bad practice to return from within a macro and change control flow as they look like normal function calls. Change-Id: Id1b540cde127395a7b27385a7c0fe79f3a145c73 Signed-off-by: Garming Sam <garm...@catalyst.net.nz> Reviewed-by: Jeremy Allison <j...@samba.org> Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 952bc3cad05467959ba5aa08682d754bd80d543b Author: Garming Sam <garm...@catalyst.net.nz> Date: Thu Feb 13 17:51:11 2014 +1300 Remove a number of NT_STATUS_HAVE_NO_MEMORY_AND_FREE macros from the codebase. Following the current coding guidelines, it is considered bad practice to return from within a macro and change control flow as they look like normal function calls. Change-Id: I133eb5a699757ae57b87d3bd3ebbcf5b556b0268 Signed-off-by: Garming Sam <garm...@catalyst.net.nz> Reviewed-by: Jeremy Allison <j...@samba.org> Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 1f60aa8ec2e685517235aadbc11324d3b4a1a74d Author: Volker Lendecke <v...@samba.org> Date: Tue Feb 4 10:22:25 2014 +0000 winbind4: Remove unused winbind_get_idmap irpc operation Change-Id: Ia5e62d30b277f8a7074d451cfb8675eee8e9d21f Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 13affa61093d34a8c1bb33f400968f0eb6f5d019 Author: Volker Lendecke <v...@samba.org> Date: Tue Feb 4 10:18:48 2014 +0000 auth4: Remove unused wbc_context Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: I07d9f7d8028429564d91da39f8d1e73cc13a646c Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 5f7b8e42cfeb3e6d2651f14db63b07b884c839d3 Author: Volker Lendecke <v...@samba.org> Date: Mon Feb 3 21:36:25 2014 +0100 ntvfs_unixuid: No wbc_context required Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: I46f5d719005f3ac940482773404702368bbcfa4f Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 65c6daf1a54a94c0dfb4409f7d9919ff88e23627 Author: Volker Lendecke <v...@samba.org> Date: Mon Feb 3 21:35:05 2014 +0100 ntvfs_posix: No wbc_context required Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: Ibce7b25740cc14b0a60ad856f6b18c33115ea6fa Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 212216362b6b9635be5423613e527ce2c95a8f9f Author: Volker Lendecke <v...@samba.org> Date: Mon Feb 3 21:33:21 2014 +0100 dcesrv_unixinfo: No wbc_context required Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: I58f01cf754e6f9a7715c0319a43ec87d8e5df194 Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 0aa080b0f7c4950d29187c2f531e1018d545d007 Author: Volker Lendecke <v...@samba.org> Date: Sun Feb 2 15:54:53 2014 +0100 unixuid: Use the tevent_context from the ntvfs_context Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: I4edb0ee4cefdc2f1b309202c9ec70c7c7bbac0b8 Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit d0dc6dbb2b24f70a0ceb9595054ecaf12852c5d5 Author: Volker Lendecke <v...@samba.org> Date: Sun Feb 2 15:53:25 2014 +0100 pvfs: Use the tevent_context from the ntvfs_context Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: Idb3ad8047d5161dd06800df611ea2a9cac84ecaa Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit aa048f6e16ef380622d453cb3286a1f6da73734a Author: Volker Lendecke <v...@samba.org> Date: Sun Feb 2 15:50:08 2014 +0100 auth4: Do not generate just a temporary wbc_context Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: I16e116d7f1fdaf165e1239c10723c51f3828126d Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit b2c1394e049852e0e879964dde9b011f66ed22b6 Author: Volker Lendecke <v...@samba.org> Date: Sun Feb 2 15:48:03 2014 +0100 auth4: auth_session_info_fill_unix only needs a tevent_context Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: Id453d68f57bd1dd15aa5778b317d258a6132d3d6 Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 6edf7a3746de4367f62796c967891b425a09de52 Author: Volker Lendecke <v...@samba.org> Date: Sun Feb 2 15:45:47 2014 +0100 auth4: security_token_to_unix_token only needs a tevent_context Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: I27e5b38fcd3ac899c55c0632ea5d92fad686d9b1 Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit dcf29a88bad40b4d22a71838d301e8a51a04d9e4 Author: Volker Lendecke <v...@samba.org> Date: Sun Feb 2 15:45:13 2014 +0100 libwbclient4: Remove unused composite-based functions Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: Iff6169e35f7a82e31c42df7b2d30d122b5f67451 Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit eb8f4b846fe2d1ebf7e5a6adc0622aefe54993cb Author: Volker Lendecke <v...@samba.org> Date: Sun Feb 2 15:35:02 2014 +0100 source4: Use wbc_xids_to_sids Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: Ib1b1a7fcd881510e3fb4e5da29391e3d9392fa17 Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 53b7665fc2dc4db911e6245132b8f5799e63e3e9 Author: Volker Lendecke <v...@samba.org> Date: Sat Feb 1 20:46:28 2014 +0100 libwbclient4: Add wbc_xids_to_sids Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: Ibb67f6aabd9a3fbd023ff9ec1a34d82ae599177c Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 7289d1c30b23bbc8552820aad7ec7f6740c305b4 Author: Volker Lendecke <v...@samba.org> Date: Thu Jan 30 20:12:07 2014 +0000 source4: Use wbc_sids_to_xids Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: I86ea6587c436247ce66207c517f9c8d567ecac1d Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit 22dabda4c64b9b6704b5411c1fb943f09033e9ab Author: Volker Lendecke <v...@samba.org> Date: Thu Jan 30 19:05:09 2014 +0000 libwbclient4: Add wbc_sids_to_xids Signed-off-by: Volker Lendecke <v...@samba.org> Change-Id: I79f4b87a14e7074970bd024626e5838a4461cc2e Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> ----------------------------------------------------------------------- Summary of changes: auth/auth_sam_reply.c | 15 +- dfs_server/dfs_server_ad.c | 40 ++- libcli/util/ntstatus.h | 8 + libgpo/gpo_util.c | 40 ++- nsswitch/winbind_struct_protocol.h | 14 +- source3/auth/auth_samba4.c | 10 +- source3/auth/user_info.c | 55 +++- source3/passdb/pdb_samba_dsdb.c | 30 ++- source3/wscript_build | 1 + source4/auth/auth.h | 1 - source4/auth/ntlm/auth.c | 12 +- source4/auth/sam.c | 92 ++++-- source4/auth/session.c | 50 +++- source4/auth/unix_token.c | 12 +- source4/dsdb/common/util_groups.c | 5 +- source4/dsdb/kcc/kcc_topology.c | 143 ++++++-- source4/dsdb/repl/drepl_out_helpers.c | 20 +- source4/ldap_server/ldap_extended.c | 4 +- source4/lib/policy/gp_filesys.c | 30 ++- source4/lib/policy/gp_ldap.c | 165 +++++++-- source4/lib/policy/gp_manage.c | 55 +++- source4/libcli/wbclient/wbclient.c | 455 ++++++++++++++++++------- source4/libcli/wbclient/wbclient.h | 32 +-- source4/libcli/wbclient/wscript_build | 2 +- source4/libnet/libnet_samsync_ldb.c | 15 +- source4/librpc/idl/winbind.idl | 24 +-- source4/ntvfs/posix/pvfs_acl.c | 53 ++-- source4/ntvfs/posix/pvfs_acl_nfs4.c | 14 +- source4/ntvfs/posix/vfs_posix.c | 7 - source4/ntvfs/posix/vfs_posix.h | 1 - source4/ntvfs/unixuid/vfs_unixuid.c | 12 +- source4/rpc_server/lsa/dcesrv_lsa.c | 40 ++- source4/rpc_server/unixinfo/dcesrv_unixinfo.c | 52 +--- source4/smbd/service_stream.c | 5 +- source4/torture/util_smb.c | 5 +- source4/winbind/wb_irpc.c | 72 ---- source4/wrepl_server/wrepl_in_call.c | 10 +- source4/wrepl_server/wrepl_in_connection.c | 4 +- 38 files changed, 1061 insertions(+), 544 deletions(-) Changeset truncated at 500 lines: diff --git a/auth/auth_sam_reply.c b/auth/auth_sam_reply.c index 00e04b9..4ede02c 100644 --- a/auth/auth_sam_reply.c +++ b/auth/auth_sam_reply.c @@ -154,7 +154,10 @@ NTSTATUS auth_convert_user_info_dc_saminfo3(TALLOC_CTX *mem_ctx, sam3->sids = talloc_array(sam, struct netr_SidAttr, user_info_dc->num_sids); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(sam3->sids, sam3); + if (sam3->sids == NULL) { + TALLOC_FREE(sam3); + return NT_STATUS_NO_MEMORY; + } /* We don't put the user and group SIDs in there */ for (i=2; i<user_info_dc->num_sids; i++) { @@ -162,7 +165,10 @@ NTSTATUS auth_convert_user_info_dc_saminfo3(TALLOC_CTX *mem_ctx, continue; } sam3->sids[sam3->sidcount].sid = dom_sid_dup(sam3->sids, &user_info_dc->sids[i]); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(sam3->sids[sam3->sidcount].sid, sam3); + if (sam3->sids[sam3->sidcount].sid == NULL) { + TALLOC_FREE(sam3); + return NT_STATUS_NO_MEMORY; + } sam3->sids[sam3->sidcount].attributes = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED; sam3->sidcount += 1; @@ -429,7 +435,10 @@ NTSTATUS make_user_info_dc_pac(TALLOC_CTX *mem_ctx, sidcount = user_info_dc->num_sids + pac_logon_info->res_groups.count; user_info_dc->sids = talloc_realloc(user_info_dc, user_info_dc->sids, struct dom_sid, sidcount); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info_dc->sids, user_info_dc); + if (user_info_dc->sids == NULL) { + TALLOC_FREE(user_info_dc); + return NT_STATUS_NO_MEMORY; + } for (i = 0; pac_logon_info->res_group_dom_sid && i < pac_logon_info->res_groups.count; i++) { user_info_dc->sids[user_info_dc->num_sids] = *pac_logon_info->res_group_dom_sid; diff --git a/dfs_server/dfs_server_ad.c b/dfs_server/dfs_server_ad.c index 062eb49..504ab79 100644 --- a/dfs_server/dfs_server_ad.c +++ b/dfs_server/dfs_server_ad.c @@ -198,11 +198,17 @@ static NTSTATUS get_dcs_insite(TALLOC_CTX *ctx, struct ldb_context *ldb, * Search all the object of class server in this site */ dc_list = talloc_array(r, const char *, r->count); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(dc_list, r); + if (dc_list == NULL) { + TALLOC_FREE(r); + return NT_STATUS_NO_MEMORY; + } /* TODO put some random here in the order */ list->names = talloc_realloc(list, list->names, const char *, list->count + r->count); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(list->names, r); + if (list->names == NULL) { + TALLOC_FREE(r); + return NT_STATUS_NO_MEMORY; + } for (i = 0; i<r->count; i++) { struct ldb_dn *dn; @@ -230,7 +236,10 @@ static NTSTATUS get_dcs_insite(TALLOC_CTX *ctx, struct ldb_context *ldb, } list->names[list->count] = talloc_strdup(list->names, dns); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(list->names[list->count], r); + if (list->names[list->count] == NULL) { + TALLOC_FREE(r); + return NT_STATUS_NO_MEMORY; + } } else { char *tmp; const char *aname = ldb_msg_find_attr_as_string(msg, "sAMAccountName", NULL); @@ -242,7 +251,10 @@ static NTSTATUS get_dcs_insite(TALLOC_CTX *ctx, struct ldb_context *ldb, } tmp = talloc_strdup(list->names, aname); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(tmp, r); + if (tmp == NULL) { + TALLOC_FREE(r); + return NT_STATUS_NO_MEMORY; + } /* Netbios name is also the sAMAccountName for computer but without the final $ */ @@ -335,10 +347,16 @@ static NTSTATUS get_dcs(TALLOC_CTX *ctx, struct ldb_context *ldb, sitedn = r->msgs[0]->dn; set_list = talloc_realloc(subctx, set_list, struct dc_set *, current_pos+1); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(set_list, subctx); + if (set_list == NULL) { + TALLOC_FREE(subctx); + return NT_STATUS_NO_MEMORY; + } set_list[current_pos] = talloc(set_list, struct dc_set); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(set_list[current_pos], subctx); + if (set_list[current_pos] == NULL) { + TALLOC_FREE(subctx); + return NT_STATUS_NO_MEMORY; + } set_list[current_pos]->names = NULL; set_list[current_pos]->count = 0; @@ -384,10 +402,16 @@ static NTSTATUS get_dcs(TALLOC_CTX *ctx, struct ldb_context *ldb, */ set_list = talloc_realloc(subctx, set_list, struct dc_set *, current_pos+2); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(set_list, subctx); + if (set_list == NULL) { + TALLOC_FREE(subctx); + return NT_STATUS_NO_MEMORY; + } set_list[current_pos] = talloc(ctx, struct dc_set); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(set_list[current_pos], subctx); + if (set_list[current_pos] == NULL) { + TALLOC_FREE(subctx); + return NT_STATUS_NO_MEMORY; + } set_list[current_pos]->names = NULL; set_list[current_pos]->count = 0; diff --git a/libcli/util/ntstatus.h b/libcli/util/ntstatus.h index 22be74a..5407da0 100644 --- a/libcli/util/ntstatus.h +++ b/libcli/util/ntstatus.h @@ -674,6 +674,14 @@ NTSTATUS nt_status_string_to_code(const char *nt_status_str); #define NT_STATUS_IS_ERR(x) (unlikely((NT_STATUS_V(x) & 0xc0000000) == 0xc0000000)) #define NT_STATUS_EQUAL(x,y) (NT_STATUS_V(x) == NT_STATUS_V(y)) +/* + * These macros (with the embedded return) are considered poor coding + * style per README.Coding + * + * Please do not use them in new code, and do not rely on them in + * projects external to Samba as they will go away at some point. + */ + #define NT_STATUS_HAVE_NO_MEMORY(x) do { \ if (unlikely(!(x))) { \ return NT_STATUS_NO_MEMORY;\ diff --git a/libgpo/gpo_util.c b/libgpo/gpo_util.c index b846d3d..5b801c4 100644 --- a/libgpo/gpo_util.c +++ b/libgpo/gpo_util.c @@ -726,34 +726,58 @@ NTSTATUS gpo_copy(TALLOC_CTX *mem_ctx, gpo->version = gpo_src->version; gpo->ds_path = talloc_strdup(gpo, gpo_src->ds_path); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(gpo->ds_path, gpo); + if (gpo->ds_path == NULL) { + TALLOC_FREE(gpo); + return NT_STATUS_NO_MEMORY; + } gpo->file_sys_path = talloc_strdup(gpo, gpo_src->file_sys_path); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(gpo->file_sys_path, gpo); + if (gpo->file_sys_path == NULL) { + TALLOC_FREE(gpo); + return NT_STATUS_NO_MEMORY; + } gpo->display_name = talloc_strdup(gpo, gpo_src->display_name); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(gpo->display_name, gpo); + if (gpo->display_name == NULL) { + TALLOC_FREE(gpo); + return NT_STATUS_NO_MEMORY; + } gpo->name = talloc_strdup(gpo, gpo_src->name); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(gpo->name, gpo); + if (gpo->name == NULL) { + TALLOC_FREE(gpo); + return NT_STATUS_NO_MEMORY; + } gpo->link = talloc_strdup(gpo, gpo_src->link); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(gpo->link, gpo); + if (gpo->link == NULL) { + TALLOC_FREE(gpo); + return NT_STATUS_NO_MEMORY; + } gpo->link_type = gpo_src->link_type; if (gpo_src->user_extensions) { gpo->user_extensions = talloc_strdup(gpo, gpo_src->user_extensions); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(gpo->user_extensions, gpo); + if (gpo->user_extensions == NULL) { + TALLOC_FREE(gpo); + return NT_STATUS_NO_MEMORY; + } } if (gpo_src->machine_extensions) { gpo->machine_extensions = talloc_strdup(gpo, gpo_src->machine_extensions); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(gpo->machine_extensions, gpo); + if (gpo->machine_extensions == NULL) { + TALLOC_FREE(gpo); + return NT_STATUS_NO_MEMORY; + } } gpo->security_descriptor = dup_sec_desc(gpo, gpo_src->security_descriptor); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(gpo->security_descriptor, gpo); + if (gpo->security_descriptor == NULL) { + TALLOC_FREE(gpo); + return NT_STATUS_NO_MEMORY; + } gpo->next = gpo->prev = NULL; diff --git a/nsswitch/winbind_struct_protocol.h b/nsswitch/winbind_struct_protocol.h index 69728b6..fc7aa6c 100644 --- a/nsswitch/winbind_struct_protocol.h +++ b/nsswitch/winbind_struct_protocol.h @@ -25,12 +25,16 @@ typedef char fstring[FSTRING_LEN]; #define WINBINDD_SOCKET_NAME "pipe" /* Name of PF_UNIX socket */ -/* Let the build environment override the public winbindd socket location. This - * is needed for launchd support -- jpeach. +/* We let the build environment set the public winbindd socket + * location. Therefore we no longer set + * + * #define WINBINDD_SOCKET_DIR "/tmp/.winbindd" + * + * A number of different distributions set different paths, and so it + * needs to come from configure in Samba. External users of this header will + * need to know where the path is on their system by some other + * mechanism. */ -#ifndef WINBINDD_SOCKET_DIR -#define WINBINDD_SOCKET_DIR "/tmp/.winbindd" /* Name of PF_UNIX dir */ -#endif /* * when compiled with socket_wrapper support diff --git a/source3/auth/auth_samba4.c b/source3/auth/auth_samba4.c index 901acf9..0350fec 100644 --- a/source3/auth/auth_samba4.c +++ b/source3/auth/auth_samba4.c @@ -125,10 +125,16 @@ static NTSTATUS check_samba4_security(const struct auth_context *auth_context, NT_STATUS_NOT_OK_RETURN(nt_status); nt_status = auth_context_set_challenge(auth4_context, auth_context->challenge.data, "auth_samba4"); - NT_STATUS_NOT_OK_RETURN_AND_FREE(nt_status, auth4_context); + if (!NT_STATUS_IS_OK(nt_status)) { + TALLOC_FREE(auth4_context); + return nt_status; + } nt_status = auth_check_password(auth4_context, auth4_context, user_info, &user_info_dc); - NT_STATUS_NOT_OK_RETURN_AND_FREE(nt_status, auth4_context); + if (!NT_STATUS_IS_OK(nt_status)) { + TALLOC_FREE(auth4_context); + return nt_status; + } nt_status = auth_convert_user_info_dc_saminfo3(mem_ctx, user_info_dc, diff --git a/source3/auth/user_info.c b/source3/auth/user_info.c index 6b98412..61367f9 100644 --- a/source3/auth/user_info.c +++ b/source3/auth/user_info.c @@ -72,36 +72,63 @@ NTSTATUS make_user_info(struct auth_usersupplied_info **ret_user_info, DEBUG(5,("making strings for %s's user_info struct\n", internal_username)); user_info->client.account_name = talloc_strdup(user_info, smb_name); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info->client.account_name, user_info); + if (user_info->client.account_name == NULL) { + TALLOC_FREE(user_info); + return NT_STATUS_NO_MEMORY; + } user_info->mapped.account_name = talloc_strdup(user_info, internal_username); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info->mapped.account_name, user_info); + if (user_info->mapped.account_name == NULL) { + TALLOC_FREE(user_info); + return NT_STATUS_NO_MEMORY; + } user_info->mapped.domain_name = talloc_strdup(user_info, domain); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info->mapped.domain_name, user_info); + if (user_info->mapped.domain_name == NULL) { + TALLOC_FREE(user_info); + return NT_STATUS_NO_MEMORY; + } user_info->client.domain_name = talloc_strdup(user_info, client_domain); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info->client.domain_name, user_info); + if (user_info->client.domain_name == NULL) { + TALLOC_FREE(user_info); + return NT_STATUS_NO_MEMORY; + } user_info->workstation_name = talloc_strdup(user_info, workstation_name); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info->workstation_name, user_info); + if (user_info->workstation_name == NULL) { + TALLOC_FREE(user_info); + return NT_STATUS_NO_MEMORY; + } user_info->remote_host = tsocket_address_copy(remote_address, user_info); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info->remote_host, user_info); + if (user_info->remote_host == NULL) { + TALLOC_FREE(user_info); + return NT_STATUS_NO_MEMORY; + } DEBUG(5,("making blobs for %s's user_info struct\n", internal_username)); if (lm_pwd && lm_pwd->data) { user_info->password.response.lanman = data_blob_talloc(user_info, lm_pwd->data, lm_pwd->length); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info->password.response.lanman.data, user_info); + if (user_info->password.response.lanman.data == NULL) { + TALLOC_FREE(user_info); + return NT_STATUS_NO_MEMORY; + } } if (nt_pwd && nt_pwd->data) { user_info->password.response.nt = data_blob_talloc(user_info, nt_pwd->data, nt_pwd->length); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info->password.response.nt.data, user_info); + if (user_info->password.response.nt.data == NULL) { + TALLOC_FREE(user_info); + return NT_STATUS_NO_MEMORY; + } } if (lm_interactive_pwd) { user_info->password.hash.lanman = talloc(user_info, struct samr_Password); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info->password.hash.lanman, user_info); + if (user_info->password.hash.lanman == NULL) { + TALLOC_FREE(user_info); + return NT_STATUS_NO_MEMORY; + } memcpy(user_info->password.hash.lanman->hash, lm_interactive_pwd->hash, sizeof(user_info->password.hash.lanman->hash)); talloc_set_destructor(user_info->password.hash.lanman, clear_samr_Password); @@ -109,7 +136,10 @@ NTSTATUS make_user_info(struct auth_usersupplied_info **ret_user_info, if (nt_interactive_pwd) { user_info->password.hash.nt = talloc(user_info, struct samr_Password); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info->password.hash.nt, user_info); + if (user_info->password.hash.nt == NULL) { + TALLOC_FREE(user_info); + return NT_STATUS_NO_MEMORY; + } memcpy(user_info->password.hash.nt->hash, nt_interactive_pwd->hash, sizeof(user_info->password.hash.nt->hash)); talloc_set_destructor(user_info->password.hash.nt, clear_samr_Password); @@ -117,7 +147,10 @@ NTSTATUS make_user_info(struct auth_usersupplied_info **ret_user_info, if (plaintext_password) { user_info->password.plaintext = talloc_strdup(user_info, plaintext_password); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info->password.plaintext, user_info); + if (user_info->password.plaintext == NULL) { + TALLOC_FREE(user_info); + return NT_STATUS_NO_MEMORY; + } talloc_set_destructor(user_info->password.plaintext, clear_string); } diff --git a/source3/passdb/pdb_samba_dsdb.c b/source3/passdb/pdb_samba_dsdb.c index 3fc266c..dee20ef 100644 --- a/source3/passdb/pdb_samba_dsdb.c +++ b/source3/passdb/pdb_samba_dsdb.c @@ -1172,7 +1172,10 @@ static NTSTATUS pdb_samba_dsdb_enum_group_members(struct pdb_methods *m, } *pmembers = members = talloc_array(mem_ctx, uint32_t, num_sids); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(*pmembers, tmp_ctx); + if (*pmembers == NULL) { + TALLOC_FREE(tmp_ctx); + return NT_STATUS_NO_MEMORY; + } num_members = 0; for (i = 0; i < num_sids; i++) { @@ -1392,7 +1395,10 @@ static NTSTATUS pdb_samba_dsdb_mod_groupmem_by_sid(struct pdb_methods *m, TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx); NT_STATUS_HAVE_NO_MEMORY(tmp_ctx); msg = ldb_msg_new(tmp_ctx); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(msg, tmp_ctx); + if (msg == NULL) { + TALLOC_FREE(tmp_ctx); + return NT_STATUS_NO_MEMORY; + } msg->dn = ldb_dn_new_fmt(msg, state->ldb, "<SID=%s>", dom_sid_string(tmp_ctx, groupsid)); if (!msg->dn || !ldb_dn_validate(msg->dn)) { @@ -1441,9 +1447,15 @@ static NTSTATUS pdb_samba_dsdb_mod_groupmem(struct pdb_methods *m, dom_sid = samdb_domain_sid(state->ldb); groupsid = dom_sid_add_rid(tmp_ctx, dom_sid, grouprid); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(groupsid, tmp_ctx); + if (groupsid == NULL) { + TALLOC_FREE(tmp_ctx); + return NT_STATUS_NO_MEMORY; + } membersid = dom_sid_add_rid(tmp_ctx, dom_sid, memberrid); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(membersid, tmp_ctx); + if (membersid == NULL) { + TALLOC_FREE(tmp_ctx); + return NT_STATUS_NO_MEMORY; + } status = pdb_samba_dsdb_mod_groupmem_by_sid(m, tmp_ctx, groupsid, membersid, mod_op); talloc_free(tmp_ctx); return status; @@ -1708,10 +1720,16 @@ static NTSTATUS pdb_samba_dsdb_enum_alias_memberships(struct pdb_methods *m, for (i = 0; i < num_members; i++) { sid_string = dom_sid_string(tmp_ctx, &members[i]); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(sid_string, tmp_ctx); + if (sid_string == NULL) { + TALLOC_FREE(tmp_ctx); + return NT_STATUS_NO_MEMORY; + } sid_dn = talloc_asprintf(tmp_ctx, "<SID=%s>", sid_string); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(sid_dn, tmp_ctx); + if (sid_dn == NULL) { + TALLOC_FREE(tmp_ctx); + return NT_STATUS_NO_MEMORY; + } sid_blob = data_blob_string_const(sid_dn); diff --git a/source3/wscript_build b/source3/wscript_build index 9d3071a..ad83318 100755 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -1231,6 +1231,7 @@ bld.SAMBA3_BINARY('smbtorture' + bld.env.suffix3, NDR_OPEN_FILES idmap ''', + cflags='-DWINBINDD_SOCKET_DIR=\"%s\"' % bld.env.WINBINDD_SOCKET_DIR, install=False) bld.SAMBA3_BINARY('smbconftort', diff --git a/source4/auth/auth.h b/source4/auth/auth.h index 503bae9..129f58d 100644 --- a/source4/auth/auth.h +++ b/source4/auth/auth.h @@ -97,7 +97,6 @@ struct auth_critical_sizes { const struct auth_usersupplied_info *user_info_in, const struct auth_usersupplied_info **user_info_encrypted); -struct wbc_context; #include "auth/session.h" #include "auth/unix_token_proto.h" #include "auth/system_session_proto.h" diff --git a/source4/auth/ntlm/auth.c b/source4/auth/ntlm/auth.c index 263dc80..ccfd20a 100644 --- a/source4/auth/ntlm/auth.c +++ b/source4/auth/ntlm/auth.c @@ -461,20 +461,12 @@ static NTSTATUS auth_generate_session_info_wrapper(struct auth4_context *auth_co if ((session_info_flags & AUTH_SESSION_INFO_UNIX_TOKEN) && NT_STATUS_IS_OK(status)) { - struct wbc_context *wbc_ctx = wbc_init(auth_context, - auth_context->msg_ctx, - auth_context->event_ctx); - if (!wbc_ctx) { - TALLOC_FREE(*session_info); - DEBUG(1, ("Cannot contact winbind to provide unix token\n")); - return NT_STATUS_INVALID_SERVER_STATE; - } - status = auth_session_info_fill_unix(wbc_ctx, auth_context->lp_ctx, + status = auth_session_info_fill_unix(auth_context->event_ctx, + auth_context->lp_ctx, original_user_name, *session_info); if (!NT_STATUS_IS_OK(status)) { TALLOC_FREE(*session_info); } - TALLOC_FREE(wbc_ctx); } return status; } diff --git a/source4/auth/sam.c b/source4/auth/sam.c index 767e44c..ac19862 100644 --- a/source4/auth/sam.c +++ b/source4/auth/sam.c @@ -298,15 +298,24 @@ _PUBLIC_ NTSTATUS authsam_make_user_info_dc(TALLOC_CTX *mem_ctx, NT_STATUS_HAVE_NO_MEMORY(user_info_dc); tmp_ctx = talloc_new(user_info_dc); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(user_info_dc, user_info_dc); + if (user_info_dc == NULL) { + TALLOC_FREE(user_info_dc); + return NT_STATUS_NO_MEMORY; + } sids = talloc_array(user_info_dc, struct dom_sid, 2); - NT_STATUS_HAVE_NO_MEMORY_AND_FREE(sids, user_info_dc); + if (sids == NULL) { + TALLOC_FREE(user_info_dc); -- Samba Shared Repository