The branch, master has been updated via 885887a s3-waf: no need to call pidl with --samba3-ndr-client anymore. via 2534e01 s3-build: remove --samba3-ndr-client from build_idl.sh script. via d57ddc6 s3-waf: remove RPCCLI_LSA subsystem. via ad15128 s3-build: remove RPCCLI_LSA subsystem. via 387d154 s3-winbind: prefer dcerpc_lsa_X functions in winbindd/winbindd_rpc.c. via 04ac046 s3-winbind: prefer dcerpc_lsa_X functions in winbindd/winbindd_samr.c. via a85b20a s3-winbind: prefer dcerpc_lsa_X functions in winbindd/winbind_cm.c from 586b2ee s3-epmap: use correct dcerpc client header in dcerpc_ep.c
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 885887ac1b7de1dbbc3da63843600d69efd5f6e8 Author: Günther Deschner <g...@samba.org> Date: Wed Feb 2 18:51:45 2011 +0100 s3-waf: no need to call pidl with --samba3-ndr-client anymore. Guenther Autobuild-User: Günther Deschner <g...@samba.org> Autobuild-Date: Wed Feb 2 21:38:23 CET 2011 on sn-devel-104 commit 2534e01a3ac187f42c0d359da2fd72b11ea0f5ae Author: Günther Deschner <g...@samba.org> Date: Wed Feb 2 18:53:54 2011 +0100 s3-build: remove --samba3-ndr-client from build_idl.sh script. Guenther commit d57ddc64c5a0551554756de01acb5135d4cb3a6f Author: Günther Deschner <g...@samba.org> Date: Tue Jan 18 18:07:04 2011 +0100 s3-waf: remove RPCCLI_LSA subsystem. Guenther commit ad15128d78065e56f1a2c630dd96cc4aa115d3d0 Author: Günther Deschner <g...@samba.org> Date: Tue Jan 18 18:06:52 2011 +0100 s3-build: remove RPCCLI_LSA subsystem. Guenther commit 387d1543ed8ac16389ace7a09cb9a452e2d220db Author: Günther Deschner <g...@samba.org> Date: Tue Jan 18 18:05:49 2011 +0100 s3-winbind: prefer dcerpc_lsa_X functions in winbindd/winbindd_rpc.c. Guenther commit 04ac046a46fe59b0551e2898ebc8940da601c406 Author: Günther Deschner <g...@samba.org> Date: Tue Jan 18 18:02:27 2011 +0100 s3-winbind: prefer dcerpc_lsa_X functions in winbindd/winbindd_samr.c. Guenther commit a85b20a1649980e17077e64de4d474fe6cd6f202 Author: Günther Deschner <g...@samba.org> Date: Tue Jan 18 17:54:24 2011 +0100 s3-winbind: prefer dcerpc_lsa_X functions in winbindd/winbind_cm.c Guenther ----------------------------------------------------------------------- Summary of changes: librpc/build_idl.sh | 6 ++-- librpc/idl/wscript_build | 4 +- source3/Makefile.in | 3 +- source3/librpc/idl/wscript_build | 9 ++++- source3/script/build_idl.sh | 6 ++-- source3/winbindd/winbindd_cm.c | 64 ++++++++++++++++++++----------------- source3/winbindd/winbindd_rpc.c | 19 +++++++---- source3/winbindd/winbindd_samr.c | 38 +++++++++++++++-------- source3/wscript_build | 6 +--- 9 files changed, 89 insertions(+), 66 deletions(-) Changeset truncated at 500 lines: diff --git a/librpc/build_idl.sh b/librpc/build_idl.sh index c335557..afab910 100755 --- a/librpc/build_idl.sh +++ b/librpc/build_idl.sh @@ -7,7 +7,7 @@ else FULL=0 fi -ARGS="--outputdir $PIDL_OUTPUTDIR --header --ndr-parser --samba3-ndr-server --samba3-ndr-client --server --client --python --dcom-proxy --com-header $PIDL_ARGS --" +ARGS="--outputdir $PIDL_OUTPUTDIR --header --ndr-parser --samba3-ndr-server --server --client --python --dcom-proxy --com-header $PIDL_ARGS --" IDL_FILES="$*" oldpwd=`pwd` @@ -30,8 +30,8 @@ fi list="" for f in ${IDL_FILES}; do b=`basename $f .idl` - outfiles="cli_$b.c $b.h ndr_${b}_c.c ndr_$b.h ndr_${b}_s.c srv_$b.c" - outfiles="$outfiles cli_$b.h ndr_$b.c ndr_${b}_c.h py_$b.c srv_$b.h" + outfiles="$b.h ndr_${b}_c.c ndr_$b.h ndr_${b}_s.c srv_$b.c" + outfiles="$outfiles ndr_$b.c ndr_${b}_c.h py_$b.c srv_$b.h" for o in $outfiles; do [ -f $PIDL_OUTPUTDIR/$o ] || { diff --git a/librpc/idl/wscript_build b/librpc/idl/wscript_build index 7342228..6fdd5f3 100644 --- a/librpc/idl/wscript_build +++ b/librpc/idl/wscript_build @@ -11,12 +11,12 @@ bld.SAMBA_PIDL_LIST('PIDL', oxidresolver.idl samr.idl srvsvc.idl winreg.idl dcerpc.idl drsblobs.idl efs.idl frstrans.idl mgmt.idl netlogon.idl policyagent.idl scerpc.idl svcctl.idl wkssvc.idl eventlog6.idl backupkey.idl''', - options='--header --ndr-parser --samba3-ndr-server --samba3-ndr-client --server --client --python', + options='--header --ndr-parser --samba3-ndr-server --server --client --python', output_dir='../gen_ndr') bld.SAMBA_PIDL_LIST('PIDL', 'wmi.idl dcom.idl', - options='--header --ndr-parser --samba3-ndr-server --samba3-ndr-client --server --client --python --dcom-proxy --com-header', + options='--header --ndr-parser --server --client --python --dcom-proxy --com-header', output_dir='../gen_ndr') bld.SAMBA_PIDL_LIST('PIDL', diff --git a/source3/Makefile.in b/source3/Makefile.in index 5771f40..09cd713 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -367,8 +367,7 @@ LIBCLI_WKSSVC_OBJ = librpc/gen_ndr/ndr_wkssvc_c.o LIBCLI_SRVSVC_OBJ = librpc/gen_ndr/ndr_srvsvc_c.o -LIBCLI_LSA_OBJ = librpc/gen_ndr/cli_lsa.o \ - librpc/gen_ndr/ndr_lsa_c.o \ +LIBCLI_LSA_OBJ = librpc/gen_ndr/ndr_lsa_c.o \ rpc_client/cli_lsarpc.o \ rpc_client/init_lsa.o diff --git a/source3/librpc/idl/wscript_build b/source3/librpc/idl/wscript_build index 5dc46cf..9957614 100644 --- a/source3/librpc/idl/wscript_build +++ b/source3/librpc/idl/wscript_build @@ -2,7 +2,12 @@ bld.SAMBA_PIDL_LIST('PIDL', '''messaging.idl libnetapi.idl notify.idl - wbint.idl perfcount.idl secrets.idl libnet_join.idl preg.idl''', - options='--includedir=../librpc/idl --header --ndr-parser --samba3-ndr-server --samba3-ndr-client --client', + perfcount.idl secrets.idl libnet_join.idl preg.idl''', + options='--includedir=../librpc/idl --header --ndr-parser', + output_dir='../gen_ndr') + +bld.SAMBA_PIDL_LIST('PIDL', + 'wbint.idl', + options='--includedir=../librpc/idl --header --ndr-parser --samba3-ndr-server --client', output_dir='../gen_ndr') diff --git a/source3/script/build_idl.sh b/source3/script/build_idl.sh index 8f88588..97e813e 100755 --- a/source3/script/build_idl.sh +++ b/source3/script/build_idl.sh @@ -7,7 +7,7 @@ else FULL=0 fi -ARGS="--includedir=../librpc/idl --outputdir $PIDL_OUTPUTDIR --header --ndr-parser --samba3-ndr-server --samba3-ndr-client $PIDL_ARGS --" +ARGS="--includedir=../librpc/idl --outputdir $PIDL_OUTPUTDIR --header --ndr-parser --client --samba3-ndr-server $PIDL_ARGS --" IDL_FILES="$*" oldpwd=`pwd` @@ -30,8 +30,8 @@ fi list="" for f in ${IDL_FILES}; do b=`basename $f .idl` - outfiles="cli_$b.c $b.h ndr_$b.h srv_$b.c" - outfiles="$outfiles cli_$b.h ndr_$b.c srv_$b.h" + outfiles="$b.h ndr_$b.h srv_$b.c" + outfiles="$outfiles ndr_$b.c srv_$b.h" for o in $outfiles; do [ -f $PIDL_OUTPUTDIR/$o ] || { diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c index 98598cf..42f33ab 100644 --- a/source3/winbindd/winbindd_cm.c +++ b/source3/winbindd/winbindd_cm.c @@ -64,7 +64,7 @@ #include "../librpc/gen_ndr/ndr_netlogon_c.h" #include "rpc_client/cli_netlogon.h" #include "../librpc/gen_ndr/ndr_samr_c.h" -#include "../librpc/gen_ndr/cli_lsa.h" +#include "../librpc/gen_ndr/ndr_lsa_c.h" #include "rpc_client/cli_lsarpc.h" #include "../librpc/gen_ndr/ndr_dssetup_c.h" #include "libads/sitename_cache.h" @@ -1626,6 +1626,8 @@ static NTSTATUS cm_open_connection(struct winbindd_domain *domain, void invalidate_cm_connection(struct winbindd_cm_conn *conn) { + NTSTATUS result; + /* We're closing down a possibly dead connection. Don't have impossibly long (10s) timeouts. */ @@ -1635,7 +1637,6 @@ void invalidate_cm_connection(struct winbindd_cm_conn *conn) if (conn->samr_pipe != NULL) { if (is_valid_policy_hnd(&conn->sam_connect_handle)) { - NTSTATUS result; dcerpc_samr_Close(conn->samr_pipe->binding_handle, talloc_tos(), &conn->sam_connect_handle, @@ -1650,8 +1651,10 @@ void invalidate_cm_connection(struct winbindd_cm_conn *conn) if (conn->lsa_pipe != NULL) { if (is_valid_policy_hnd(&conn->lsa_policy)) { - rpccli_lsa_Close(conn->lsa_pipe, talloc_tos(), - &conn->lsa_policy); + dcerpc_lsa_Close(conn->lsa_pipe->binding_handle, + talloc_tos(), + &conn->lsa_policy, + &result); } TALLOC_FREE(conn->lsa_pipe); /* Ok, it must be dead. Drop timeout to 0.5 sec. */ @@ -1662,8 +1665,10 @@ void invalidate_cm_connection(struct winbindd_cm_conn *conn) if (conn->lsa_pipe_tcp != NULL) { if (is_valid_policy_hnd(&conn->lsa_policy)) { - rpccli_lsa_Close(conn->lsa_pipe, talloc_tos(), - &conn->lsa_policy); + dcerpc_lsa_Close(conn->lsa_pipe->binding_handle, + talloc_tos(), + &conn->lsa_policy, + &result); } TALLOC_FREE(conn->lsa_pipe_tcp); /* Ok, it must be dead. Drop timeout to 0.5 sec. */ @@ -1920,7 +1925,7 @@ static bool set_dc_type_and_flags_trustinfo( struct winbindd_domain *domain ) static void set_dc_type_and_flags_connect( struct winbindd_domain *domain ) { - NTSTATUS result; + NTSTATUS status, result; WERROR werr; TALLOC_CTX *mem_ctx = NULL; struct rpc_pipe_client *cli = NULL; @@ -1941,14 +1946,14 @@ static void set_dc_type_and_flags_connect( struct winbindd_domain *domain ) DEBUG(5, ("set_dc_type_and_flags_connect: domain %s\n", domain->name )); - result = cli_rpc_pipe_open_noauth(domain->conn.cli, + status = cli_rpc_pipe_open_noauth(domain->conn.cli, &ndr_table_dssetup.syntax_id, &cli); - if (!NT_STATUS_IS_OK(result)) { + if (!NT_STATUS_IS_OK(status)) { DEBUG(5, ("set_dc_type_and_flags_connect: Could not bind to " "PI_DSSETUP on domain %s: (%s)\n", - domain->name, nt_errstr(result))); + domain->name, nt_errstr(status))); /* if this is just a non-AD domain we need to continue * identifying so that we can in the end return with @@ -1957,26 +1962,26 @@ static void set_dc_type_and_flags_connect( struct winbindd_domain *domain ) goto no_dssetup; } - result = dcerpc_dssetup_DsRoleGetPrimaryDomainInformation(cli->binding_handle, mem_ctx, + status = dcerpc_dssetup_DsRoleGetPrimaryDomainInformation(cli->binding_handle, mem_ctx, DS_ROLE_BASIC_INFORMATION, &info, &werr); TALLOC_FREE(cli); - if (NT_STATUS_IS_OK(result)) { + if (NT_STATUS_IS_OK(status)) { result = werror_to_ntstatus(werr); } - if (!NT_STATUS_IS_OK(result)) { + if (!NT_STATUS_IS_OK(status)) { DEBUG(5, ("set_dc_type_and_flags_connect: rpccli_ds_getprimarydominfo " "on domain %s failed: (%s)\n", - domain->name, nt_errstr(result))); + domain->name, nt_errstr(status))); /* older samba3 DCs will return DCERPC_FAULT_OP_RNG_ERROR for * every opcode on the DSSETUP pipe, continue with * no_dssetup mode here as well to get domain->initialized * set - gd */ - if (NT_STATUS_V(result) == DCERPC_FAULT_OP_RNG_ERROR) { + if (NT_STATUS_V(status) == DCERPC_FAULT_OP_RNG_ERROR) { goto no_dssetup; } @@ -1992,31 +1997,32 @@ static void set_dc_type_and_flags_connect( struct winbindd_domain *domain ) } no_dssetup: - result = cli_rpc_pipe_open_noauth(domain->conn.cli, + status = cli_rpc_pipe_open_noauth(domain->conn.cli, &ndr_table_lsarpc.syntax_id, &cli); - if (!NT_STATUS_IS_OK(result)) { + if (!NT_STATUS_IS_OK(status)) { DEBUG(5, ("set_dc_type_and_flags_connect: Could not bind to " "PI_LSARPC on domain %s: (%s)\n", - domain->name, nt_errstr(result))); + domain->name, nt_errstr(status))); TALLOC_FREE(cli); TALLOC_FREE(mem_ctx); return; } - result = rpccli_lsa_open_policy2(cli, mem_ctx, True, + status = rpccli_lsa_open_policy2(cli, mem_ctx, True, SEC_FLAG_MAXIMUM_ALLOWED, &pol); - if (NT_STATUS_IS_OK(result)) { + if (NT_STATUS_IS_OK(status)) { /* This particular query is exactly what Win2k clients use to determine that the DC is active directory */ - result = rpccli_lsa_QueryInfoPolicy2(cli, mem_ctx, + status = dcerpc_lsa_QueryInfoPolicy2(cli->binding_handle, mem_ctx, &pol, LSA_POLICY_INFO_DNS, - &lsa_info); + &lsa_info, + &result); } - if (NT_STATUS_IS_OK(result)) { + if (NT_STATUS_IS_OK(status) && NT_STATUS_IS_OK(result)) { domain->active_directory = True; if (lsa_info->dns.name.string) { @@ -2046,20 +2052,20 @@ no_dssetup: } else { domain->active_directory = False; - result = rpccli_lsa_open_policy(cli, mem_ctx, True, + status = rpccli_lsa_open_policy(cli, mem_ctx, True, SEC_FLAG_MAXIMUM_ALLOWED, &pol); - if (!NT_STATUS_IS_OK(result)) { + if (!NT_STATUS_IS_OK(status)) { goto done; } - result = rpccli_lsa_QueryInfoPolicy(cli, mem_ctx, + status = dcerpc_lsa_QueryInfoPolicy(cli->binding_handle, mem_ctx, &pol, LSA_POLICY_INFO_ACCOUNT_DOMAIN, - &lsa_info); - - if (NT_STATUS_IS_OK(result)) { + &lsa_info, + &result); + if (NT_STATUS_IS_OK(status) && NT_STATUS_IS_OK(result)) { if (lsa_info->account_domain.name.string) { fstrcpy(domain->name, diff --git a/source3/winbindd/winbindd_rpc.c b/source3/winbindd/winbindd_rpc.c index a2aa54c..5efd57e 100644 --- a/source3/winbindd/winbindd_rpc.c +++ b/source3/winbindd/winbindd_rpc.c @@ -29,7 +29,7 @@ #include "librpc/gen_ndr/ndr_samr_c.h" #include "librpc/gen_ndr/srv_samr.h" -#include "librpc/gen_ndr/cli_lsa.h" +#include "librpc/gen_ndr/ndr_lsa_c.h" #include "librpc/gen_ndr/srv_lsa.h" #include "rpc_client/cli_samr.h" #include "rpc_client/cli_lsarpc.h" @@ -969,7 +969,8 @@ NTSTATUS rpc_trusted_domains(TALLOC_CTX *mem_ctx, struct netr_DomainTrust *array = NULL; uint32_t enum_ctx = 0; uint32_t count = 0; - NTSTATUS status; + NTSTATUS status, result; + struct dcerpc_binding_handle *b = lsa_pipe->binding_handle; do { struct lsa_DomainList dom_list; @@ -980,15 +981,19 @@ NTSTATUS rpc_trusted_domains(TALLOC_CTX *mem_ctx, * We don't run into deadlocks here, cause winbind_off() is * called in the main function. */ - status = rpccli_lsa_EnumTrustDom(lsa_pipe, + status = dcerpc_lsa_EnumTrustDom(b, mem_ctx, lsa_policy, &enum_ctx, &dom_list, - (uint32_t) -1); + (uint32_t) -1, + &result); if (!NT_STATUS_IS_OK(status)) { - if (!NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)) { - return status; + return status; + } + if (!NT_STATUS_IS_OK(result)) { + if (!NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES)) { + return result; } } @@ -1020,7 +1025,7 @@ NTSTATUS rpc_trusted_domains(TALLOC_CTX *mem_ctx, sid_copy(sid, dom_list.domains[i].sid); trust->sid = sid; } - } while (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)); + } while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES)); *pnum_trusts = count; *ptrusts = array; diff --git a/source3/winbindd/winbindd_samr.c b/source3/winbindd/winbindd_samr.c index 22235e3..ef27d38 100644 --- a/source3/winbindd/winbindd_samr.c +++ b/source3/winbindd/winbindd_samr.c @@ -30,7 +30,7 @@ #include "../librpc/gen_ndr/ndr_samr_c.h" #include "rpc_client/cli_samr.h" #include "../librpc/gen_ndr/srv_samr.h" -#include "../librpc/gen_ndr/cli_lsa.h" +#include "../librpc/gen_ndr/ndr_lsa_c.h" #include "rpc_client/cli_lsarpc.h" #include "../librpc/gen_ndr/srv_lsa.h" #include "rpc_server/rpc_ncacn_np.h" @@ -371,7 +371,8 @@ static NTSTATUS sam_trusted_domains(struct winbindd_domain *domain, struct netr_DomainTrust *trusts = NULL; uint32_t num_trusts = 0; TALLOC_CTX *tmp_ctx; - NTSTATUS status; + NTSTATUS status, result; + struct dcerpc_binding_handle *b = NULL; DEBUG(3,("samr: trusted domains\n")); @@ -391,6 +392,8 @@ static NTSTATUS sam_trusted_domains(struct winbindd_domain *domain, goto done; } + b = lsa_pipe->binding_handle; + status = rpc_trusted_domains(tmp_ctx, lsa_pipe, &lsa_policy, @@ -406,8 +409,8 @@ static NTSTATUS sam_trusted_domains(struct winbindd_domain *domain, } done: - if (is_valid_policy_hnd(&lsa_policy)) { - rpccli_lsa_Close(lsa_pipe, mem_ctx, &lsa_policy); + if (b && is_valid_policy_hnd(&lsa_policy)) { + dcerpc_lsa_Close(b, mem_ctx, &lsa_policy, &result); } TALLOC_FREE(tmp_ctx); @@ -623,7 +626,8 @@ static NTSTATUS sam_name_to_sid(struct winbindd_domain *domain, struct dom_sid sid; enum lsa_SidType type; TALLOC_CTX *tmp_ctx; - NTSTATUS status; + NTSTATUS status, result; + struct dcerpc_binding_handle *b = NULL; DEBUG(3,("sam_name_to_sid\n")); @@ -639,6 +643,8 @@ static NTSTATUS sam_name_to_sid(struct winbindd_domain *domain, goto done; } + b = lsa_pipe->binding_handle; + status = rpc_name_to_sid(tmp_ctx, lsa_pipe, &lsa_policy, @@ -659,8 +665,8 @@ static NTSTATUS sam_name_to_sid(struct winbindd_domain *domain, } done: - if (is_valid_policy_hnd(&lsa_policy)) { - rpccli_lsa_Close(lsa_pipe, mem_ctx, &lsa_policy); + if (b && is_valid_policy_hnd(&lsa_policy)) { + dcerpc_lsa_Close(b, mem_ctx, &lsa_policy, &result); } TALLOC_FREE(tmp_ctx); @@ -681,7 +687,8 @@ static NTSTATUS sam_sid_to_name(struct winbindd_domain *domain, char *name = NULL; enum lsa_SidType type; TALLOC_CTX *tmp_ctx; - NTSTATUS status; + NTSTATUS status, result; + struct dcerpc_binding_handle *b = NULL; DEBUG(3,("sam_sid_to_name\n")); @@ -710,6 +717,8 @@ static NTSTATUS sam_sid_to_name(struct winbindd_domain *domain, goto done; } + b = lsa_pipe->binding_handle; + status = rpc_sid_to_name(tmp_ctx, lsa_pipe, &lsa_policy, @@ -732,8 +741,8 @@ static NTSTATUS sam_sid_to_name(struct winbindd_domain *domain, } done: - if (is_valid_policy_hnd(&lsa_policy)) { - rpccli_lsa_Close(lsa_pipe, mem_ctx, &lsa_policy); + if (b && is_valid_policy_hnd(&lsa_policy)) { + dcerpc_lsa_Close(b, mem_ctx, &lsa_policy, &result); } TALLOC_FREE(tmp_ctx); @@ -755,7 +764,8 @@ static NTSTATUS sam_rids_to_names(struct winbindd_domain *domain, char *domain_name = NULL; char **names = NULL; TALLOC_CTX *tmp_ctx; - NTSTATUS status; + NTSTATUS status, result; + struct dcerpc_binding_handle *b = NULL; DEBUG(3,("sam_rids_to_names for %s\n", domain->name)); @@ -784,6 +794,8 @@ static NTSTATUS sam_rids_to_names(struct winbindd_domain *domain, goto done; } + b = lsa_pipe->binding_handle; + status = rpc_rids_to_names(tmp_ctx, lsa_pipe, &lsa_policy, @@ -811,8 +823,8 @@ static NTSTATUS sam_rids_to_names(struct winbindd_domain *domain, } done: - if (is_valid_policy_hnd(&lsa_policy)) { - rpccli_lsa_Close(lsa_pipe, mem_ctx, &lsa_policy); + if (b && is_valid_policy_hnd(&lsa_policy)) { + dcerpc_lsa_Close(b, mem_ctx, &lsa_policy, &result); } TALLOC_FREE(tmp_ctx); diff --git a/source3/wscript_build b/source3/wscript_build index 297b3b8..611e28d 100644 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -1076,17 +1076,13 @@ bld.SAMBA_SUBSYSTEM('NDR_NBT_BUF', deps='talloc', autoproto='nbtname.h') -bld.SAMBA_SUBSYSTEM('RPCCLI_LSA', - source='../librpc/gen_ndr/cli_lsa.c', - public_deps='RPC_NDR_LSA') - bld.SAMBA_SUBSYSTEM('LIBCLI_SAMR', source=LIBCLI_SAMR_SRC, deps='RPC_NDR_SAMR') bld.SAMBA_SUBSYSTEM('LIBCLI_LSA', source=LIBCLI_LSA_SRC, - deps='RPCCLI_LSA INIT_LSA') + deps='RPC_NDR_LSA INIT_LSA') bld.SAMBA_SUBSYSTEM('LIBRPCCLI_NETLOGON', source=LIBRPCCLI_NETLOGON_SRC, -- Samba Shared Repository