The branch, master has been updated via 2bff55f dsdb/modules: Split up helpers a bit to prevent recursive dependencies. via 4280527 torture_auth: Add missing dependency on gensec_ntlmssp. via ea6a3f5 wafsamba: Support setting pyembed on libraries. via ffd7cee torture: Link against rpc server itself, not service module. (against which we can't link). via ea8fc87 ldap_server: Add missing dependency on gensec_server_start. via 6c410dd kdc: Add missing dependency on samba_gensec_server. via 57bf052 smb_server: Split core out of service, since the service can be built as a .so against which we can't link. via b0963b7 smb2: Add missing dependency on NDR_DFSBLOBS. via d0c7ae5 librpc: Remove unnecessary dependency on libsamba-hostconfig. via 3b19993 dsdb/schema: Move some dsdb_dn functions that are schema-specific. via 41e55d7 ntvfs_ipc: add missing dependency on dcerpc_common. via 2c9ebb7 libsecurity-common: Add missing dependency on libndr. via dc47e8d libcli-auth: Remove unnecessary dependency on libsamba-hostconfig. via 1f73f3b dsdb modules: Split ridalloc out of common helpers, because of dependency loops. from 7552dd8 rpc_ndr_netlogon: Add missing dependency on tevent.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 2bff55f5deede15d09d2f685f5391e579ad36831 Author: Jelmer Vernooij <jel...@samba.org> Date: Mon Oct 11 01:03:42 2010 +0200 dsdb/modules: Split up helpers a bit to prevent recursive dependencies. Autobuild-User: Jelmer Vernooij <jel...@samba.org> Autobuild-Date: Sun Oct 10 23:47:54 UTC 2010 on sn-devel-104 commit 4280527b6abb0070ad4f62338e9eea2c1ad991a7 Author: Jelmer Vernooij <jel...@samba.org> Date: Mon Oct 11 00:58:28 2010 +0200 torture_auth: Add missing dependency on gensec_ntlmssp. commit ea6a3f5c485ebc82c6c7cfd6b2a3451a75676cfb Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Oct 10 21:22:02 2010 +0200 wafsamba: Support setting pyembed on libraries. commit ffd7cee150527fbbfe29b5f9d30c1aec2137e392 Author: Jelmer Vernooij <jel...@samba.org> Date: Mon Oct 11 00:49:13 2010 +0200 torture: Link against rpc server itself, not service module. (against which we can't link). commit ea8fc8727b02004b90db46d444bcefbc4c622c70 Author: Jelmer Vernooij <jel...@samba.org> Date: Mon Oct 11 00:47:18 2010 +0200 ldap_server: Add missing dependency on gensec_server_start. commit 6c410dd6150206bf5f052bd6501f989e61a16583 Author: Jelmer Vernooij <jel...@samba.org> Date: Mon Oct 11 00:46:37 2010 +0200 kdc: Add missing dependency on samba_gensec_server. commit 57bf052e683e6ebc99dd85e3d1a6cf62d2fb89ea Author: Jelmer Vernooij <jel...@samba.org> Date: Mon Oct 11 00:41:22 2010 +0200 smb_server: Split core out of service, since the service can be built as a .so against which we can't link. commit b0963b7b31fad5a057d2517b2e9f39db5efbd772 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Oct 10 19:15:41 2010 +0200 smb2: Add missing dependency on NDR_DFSBLOBS. commit d0c7ae5cd5f4495dd7ba1de8e8cd9e09aa7f5d11 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Oct 10 23:00:32 2010 +0200 librpc: Remove unnecessary dependency on libsamba-hostconfig. commit 3b199935615eb50ff039e89b9d3cfcebde2b4844 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Oct 10 21:37:58 2010 +0200 dsdb/schema: Move some dsdb_dn functions that are schema-specific. commit 41e55d78944a04b0fa8b351ff4a25c78bc9499a3 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Oct 10 22:57:40 2010 +0200 ntvfs_ipc: add missing dependency on dcerpc_common. commit 2c9ebb764657b3fea9161190cf924ff638eab9b2 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Oct 10 22:56:58 2010 +0200 libsecurity-common: Add missing dependency on libndr. commit dc47e8dc52964447aab80fb58a42c4f33aeaef33 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Oct 10 22:56:38 2010 +0200 libcli-auth: Remove unnecessary dependency on libsamba-hostconfig. commit 1f73f3b1ca561f8cad680459e0ef418d90b2e955 Author: Jelmer Vernooij <jel...@samba.org> Date: Mon Oct 11 00:29:18 2010 +0200 dsdb modules: Split ridalloc out of common helpers, because of dependency loops. ----------------------------------------------------------------------- Summary of changes: buildtools/wafsamba/wafsamba.py | 12 +- lib/crypto/wscript_build | 2 +- libcli/auth/wscript_build | 4 +- libcli/security/wscript_build | 2 +- source4/dsdb/common/dsdb_dn.c | 78 ---- source4/dsdb/samdb/ldb_modules/acl.c | 1 + source4/dsdb/samdb/ldb_modules/acl_util.c | 61 --- source4/dsdb/samdb/ldb_modules/descriptor.c | 1 + source4/dsdb/samdb/ldb_modules/objectclass.c | 1 + source4/dsdb/samdb/ldb_modules/samldb.c | 1 + source4/dsdb/samdb/ldb_modules/schema.c | 120 ++++++ source4/dsdb/samdb/ldb_modules/subtree_delete.c | 1 + source4/dsdb/samdb/ldb_modules/util.c | 27 -- source4/dsdb/samdb/ldb_modules/wscript_build | 27 +- source4/dsdb/schema/dsdb_dn.c | 102 +++++ source4/dsdb/schema/schema.h | 1 + source4/dsdb/wscript_build | 5 +- source4/kdc/wscript_build | 2 +- source4/ldap_server/wscript_build | 2 +- source4/librpc/wscript_build | 8 +- source4/ntvfs/wscript_build | 2 +- source4/rpc_server/dcerpc_server.c | 450 +++++++++++++++++++++++ source4/rpc_server/dcerpc_server.h | 5 + source4/rpc_server/service_rpc.c | 440 ---------------------- source4/rpc_server/wscript_build | 10 +- source4/smb_server/service_smb.c | 81 ++++ source4/smb_server/smb2/wscript_build | 2 +- source4/smb_server/smb_server.c | 44 --- source4/smb_server/wscript_build | 4 +- source4/smbd/service_stream.h | 2 + source4/torture/wscript_build | 7 +- 31 files changed, 819 insertions(+), 686 deletions(-) create mode 100644 source4/dsdb/samdb/ldb_modules/schema.c create mode 100644 source4/dsdb/schema/dsdb_dn.c create mode 100644 source4/smb_server/service_smb.c Changeset truncated at 500 lines: diff --git a/buildtools/wafsamba/wafsamba.py b/buildtools/wafsamba/wafsamba.py index 02bb966..414fdc6 100644 --- a/buildtools/wafsamba/wafsamba.py +++ b/buildtools/wafsamba/wafsamba.py @@ -322,7 +322,9 @@ def SAMBA_MODULE(bld, modname, source, internal_module=True, local_include=True, vars=None, - enabled=True): + enabled=True, + pyembed=True, + ): '''define a Samba module.''' source = bld.EXPAND_VARIABLES(source, vars=vars) @@ -378,7 +380,8 @@ def SAMBA_MODULE(bld, modname, source, local_include=local_include, vars=vars, link_name=build_link_name, - install_path="${MODULESDIR}/%s" % subsystem + install_path="${MODULESDIR}/%s" % subsystem, + pyembed=pyembed, ) Build.BuildContext.SAMBA_MODULE = SAMBA_MODULE @@ -406,7 +409,8 @@ def SAMBA_SUBSYSTEM(bld, modname, source, use_global_deps=True, vars=None, hide_symbols=False, - pyembed=False): + pyembed=False, + pyext=False): '''define a Samba subsystem''' if not enabled: @@ -431,6 +435,8 @@ def SAMBA_SUBSYSTEM(bld, modname, source, features = 'cc' if pyembed: features += ' pyembed' + if pyext: + features += ' pyext' t = bld( features = features, diff --git a/lib/crypto/wscript_build b/lib/crypto/wscript_build index 1b6a03d..7bc4eb7 100644 --- a/lib/crypto/wscript_build +++ b/lib/crypto/wscript_build @@ -2,7 +2,7 @@ bld.SAMBA_SUBSYSTEM('LIBCRYPTO', source='crc32.c md5.c hmacmd5.c md4.c arcfour.c sha256.c hmacsha256.c aes.c rijndael-alg-fst.c', - deps='talloc' + deps='talloc' ) diff --git a/libcli/auth/wscript_build b/libcli/auth/wscript_build index 3608231..2bfb92a 100644 --- a/libcli/auth/wscript_build +++ b/libcli/auth/wscript_build @@ -8,13 +8,13 @@ bld.SAMBA_SUBSYSTEM('ntlm_check', bld.SAMBA_SUBSYSTEM('MSRPC_PARSE', source='msrpc_parse.c', - deps='talloc' + deps='talloc' ) bld.SAMBA_SUBSYSTEM('LIBCLI_AUTH', source='credentials.c session.c smbencrypt.c smbdes.c', - public_deps='MSRPC_PARSE LIBSAMBA-HOSTCONFIG', + public_deps='MSRPC_PARSE', public_headers='credentials.h:domain_credentials.h' ) diff --git a/libcli/security/wscript_build b/libcli/security/wscript_build index 49682e2..8efb751 100644 --- a/libcli/security/wscript_build +++ b/libcli/security/wscript_build @@ -3,6 +3,6 @@ bld.SAMBA_SUBSYSTEM('LIBSECURITY_COMMON', source='dom_sid.c display_sec.c secace.c secacl.c security_descriptor.c sddl.c privileges.c', - deps='talloc' + deps='talloc LIBNDR' ) diff --git a/source4/dsdb/common/dsdb_dn.c b/source4/dsdb/common/dsdb_dn.c index 85ba9b7..3e0f465 100644 --- a/source4/dsdb/common/dsdb_dn.c +++ b/source4/dsdb/common/dsdb_dn.c @@ -328,84 +328,6 @@ int dsdb_dn_string_comparison(struct ldb_context *ldb, void *mem_ctx, return ldb_any_comparison(ldb, mem_ctx, dsdb_dn_string_canonicalise, v1, v2); } - -/* - convert a dsdb_dn to a linked attribute data blob -*/ -WERROR dsdb_dn_la_to_blob(struct ldb_context *sam_ctx, - const struct dsdb_attribute *schema_attrib, - const struct dsdb_schema *schema, - TALLOC_CTX *mem_ctx, - struct dsdb_dn *dsdb_dn, DATA_BLOB **blob) -{ - struct ldb_val v; - WERROR werr; - struct ldb_message_element val_el; - struct drsuapi_DsReplicaAttribute drs; - struct dsdb_syntax_ctx syntax_ctx; - - /* use default syntax conversion context */ - dsdb_syntax_ctx_init(&syntax_ctx, sam_ctx, schema); - - /* we need a message_element with just one value in it */ - v = data_blob_string_const(dsdb_dn_get_extended_linearized(mem_ctx, dsdb_dn, 1)); - - val_el.name = schema_attrib->lDAPDisplayName; - val_el.values = &v; - val_el.num_values = 1; - - werr = schema_attrib->syntax->ldb_to_drsuapi(&syntax_ctx, schema_attrib, &val_el, mem_ctx, &drs); - W_ERROR_NOT_OK_RETURN(werr); - - if (drs.value_ctr.num_values != 1) { - DEBUG(1,(__location__ ": Failed to build DRS blob for linked attribute %s\n", - schema_attrib->lDAPDisplayName)); - return WERR_DS_DRA_INTERNAL_ERROR; - } - - *blob = drs.value_ctr.values[0].blob; - return WERR_OK; -} - -/* - convert a data blob to a dsdb_dn - */ -WERROR dsdb_dn_la_from_blob(struct ldb_context *sam_ctx, - const struct dsdb_attribute *schema_attrib, - const struct dsdb_schema *schema, - TALLOC_CTX *mem_ctx, - DATA_BLOB *blob, - struct dsdb_dn **dsdb_dn) -{ - WERROR werr; - struct ldb_message_element new_el; - struct drsuapi_DsReplicaAttribute drs; - struct drsuapi_DsAttributeValue val; - struct dsdb_syntax_ctx syntax_ctx; - - /* use default syntax conversion context */ - dsdb_syntax_ctx_init(&syntax_ctx, sam_ctx, schema); - - drs.value_ctr.num_values = 1; - drs.value_ctr.values = &val; - val.blob = blob; - - werr = schema_attrib->syntax->drsuapi_to_ldb(&syntax_ctx, schema_attrib, &drs, mem_ctx, &new_el); - W_ERROR_NOT_OK_RETURN(werr); - - if (new_el.num_values != 1) { - return WERR_INTERNAL_ERROR; - } - - *dsdb_dn = dsdb_dn_parse(mem_ctx, sam_ctx, &new_el.values[0], schema_attrib->syntax->ldap_oid); - if (!*dsdb_dn) { - return WERR_INTERNAL_ERROR; - } - - return WERR_OK; -} - - /* format a drsuapi_DsReplicaObjectIdentifier naming context as a string */ diff --git a/source4/dsdb/samdb/ldb_modules/acl.c b/source4/dsdb/samdb/ldb_modules/acl.c index 149c6b1..660b4df 100644 --- a/source4/dsdb/samdb/ldb_modules/acl.c +++ b/source4/dsdb/samdb/ldb_modules/acl.c @@ -39,6 +39,7 @@ #include "librpc/gen_ndr/ndr_security.h" #include "param/param.h" #include "dsdb/samdb/ldb_modules/util.h" +#include "dsdb/samdb/ldb_modules/schema.h" #include "lib/util/tsort.h" struct extended_access_check_attribute { diff --git a/source4/dsdb/samdb/ldb_modules/acl_util.c b/source4/dsdb/samdb/ldb_modules/acl_util.c index 6c41602..1a84704 100644 --- a/source4/dsdb/samdb/ldb_modules/acl_util.c +++ b/source4/dsdb/samdb/ldb_modules/acl_util.c @@ -178,67 +178,6 @@ fail: return ldb_operr(ldb_module_get_ctx(module)); } -int acl_check_access_on_class(struct ldb_module *module, - const struct dsdb_schema *schema, - TALLOC_CTX *mem_ctx, - struct security_descriptor *sd, - struct dom_sid *rp_sid, - uint32_t access, - const char *class_name) -{ - int ret; - NTSTATUS status; - uint32_t access_granted; - struct object_tree *root = NULL; - struct object_tree *new_node = NULL; - const struct GUID *guid; - TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx); - struct security_token *token = acl_user_token(module); - if (class_name) { - guid = class_schemaid_guid_by_lDAPDisplayName(schema, class_name); - if (!guid) { - DEBUG(10, ("acl_search: cannot find class %s\n", - class_name)); - goto fail; - } - if (!insert_in_object_tree(tmp_ctx, - guid, access, - &root, &new_node)) { - DEBUG(10, ("acl_search: cannot add to object tree guid\n")); - goto fail; - } - } - status = sec_access_check_ds(sd, token, - access, - &access_granted, - root, - rp_sid); - if (!NT_STATUS_IS_OK(status)) { - ret = LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS; - } - else { - ret = LDB_SUCCESS; - } - return ret; -fail: - return ldb_operr(ldb_module_get_ctx(module)); -} - -const struct GUID *get_oc_guid_from_message(struct ldb_module *module, - const struct dsdb_schema *schema, - struct ldb_message *msg) -{ - struct ldb_message_element *oc_el; - - oc_el = ldb_msg_find_element(msg, "objectClass"); - if (!oc_el) { - return NULL; - } - - return class_schemaid_guid_by_lDAPDisplayName(schema, - (char *)oc_el->values[oc_el->num_values-1].data); -} - /* checks for validated writes */ int acl_check_extended_right(TALLOC_CTX *mem_ctx, diff --git a/source4/dsdb/samdb/ldb_modules/descriptor.c b/source4/dsdb/samdb/ldb_modules/descriptor.c index 959a7d8..c94d6bd 100644 --- a/source4/dsdb/samdb/ldb_modules/descriptor.c +++ b/source4/dsdb/samdb/ldb_modules/descriptor.c @@ -39,6 +39,7 @@ #include "librpc/ndr/libndr.h" #include "librpc/gen_ndr/ndr_security.h" #include "libcli/security/security.h" +#include "dsdb/samdb/ldb_modules/schema.h" #include "auth/auth.h" #include "param/param.h" #include "util.h" diff --git a/source4/dsdb/samdb/ldb_modules/objectclass.c b/source4/dsdb/samdb/ldb_modules/objectclass.c index fa95626..940290b 100644 --- a/source4/dsdb/samdb/ldb_modules/objectclass.c +++ b/source4/dsdb/samdb/ldb_modules/objectclass.c @@ -45,6 +45,7 @@ #include "auth/auth.h" #include "param/param.h" #include "../libds/common/flags.h" +#include "dsdb/samdb/ldb_modules/schema.h" #include "util.h" struct oc_context { diff --git a/source4/dsdb/samdb/ldb_modules/samldb.c b/source4/dsdb/samdb/ldb_modules/samldb.c index c67f2d0..bf804fd 100644 --- a/source4/dsdb/samdb/ldb_modules/samldb.c +++ b/source4/dsdb/samdb/ldb_modules/samldb.c @@ -34,6 +34,7 @@ #include "ldb_module.h" #include "dsdb/samdb/samdb.h" #include "dsdb/samdb/ldb_modules/util.h" +#include "dsdb/samdb/ldb_modules/ridalloc.h" #include "libcli/security/security.h" #include "librpc/gen_ndr/ndr_security.h" #include "../lib/util/util_ldb.h" diff --git a/source4/dsdb/samdb/ldb_modules/schema.c b/source4/dsdb/samdb/ldb_modules/schema.c new file mode 100644 index 0000000..77bf9dc --- /dev/null +++ b/source4/dsdb/samdb/ldb_modules/schema.c @@ -0,0 +1,120 @@ +/* + Unix SMB/CIFS implementation. + Samba utility functions + + Copyright (C) Andrew Tridgell 2009 + Copyright (C) Andrew Bartlett <abart...@samba.org> 2009 + + 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 "ldb.h" +#include "ldb_module.h" +#include "librpc/ndr/libndr.h" +#include "dsdb/samdb/ldb_modules/util.h" +#include "dsdb/samdb/samdb.h" +#include "util.h" +#include "libcli/security/security.h" +#include "lib/ldb/include/ldb_private.h" + +const struct dsdb_class * get_last_structural_class(const struct dsdb_schema *schema,const struct ldb_message_element *element) +{ + const struct dsdb_class *last_class = NULL; + unsigned int i; + + for (i = 0; i < element->num_values; i++){ + const struct dsdb_class *tmp_class = dsdb_class_by_lDAPDisplayName_ldb_val(schema, &element->values[i]); + + if(tmp_class == NULL) { + continue; + } + + if(tmp_class->objectClassCategory > 1) { + continue; + } + + if (!last_class) { + last_class = tmp_class; + } else { + if (tmp_class->subClass_order > last_class->subClass_order) + last_class = tmp_class; + } + } + + return last_class; +} + +int acl_check_access_on_class(struct ldb_module *module, + const struct dsdb_schema *schema, + TALLOC_CTX *mem_ctx, + struct security_descriptor *sd, + struct dom_sid *rp_sid, + uint32_t access, + const char *class_name) +{ + int ret; + NTSTATUS status; + uint32_t access_granted; + struct object_tree *root = NULL; + struct object_tree *new_node = NULL; + const struct GUID *guid; + TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx); + struct security_token *token = acl_user_token(module); + if (class_name) { + guid = class_schemaid_guid_by_lDAPDisplayName(schema, class_name); + if (!guid) { + DEBUG(10, ("acl_search: cannot find class %s\n", + class_name)); + goto fail; + } + if (!insert_in_object_tree(tmp_ctx, + guid, access, + &root, &new_node)) { + DEBUG(10, ("acl_search: cannot add to object tree guid\n")); + goto fail; + } + } + status = sec_access_check_ds(sd, token, + access, + &access_granted, + root, + rp_sid); + if (!NT_STATUS_IS_OK(status)) { + ret = LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS; + } + else { + ret = LDB_SUCCESS; + } + return ret; +fail: + return ldb_operr(ldb_module_get_ctx(module)); +} + +const struct GUID *get_oc_guid_from_message(struct ldb_module *module, + const struct dsdb_schema *schema, + struct ldb_message *msg) +{ + struct ldb_message_element *oc_el; + + oc_el = ldb_msg_find_element(msg, "objectClass"); + if (!oc_el) { + return NULL; + } + + return class_schemaid_guid_by_lDAPDisplayName(schema, + (char *)oc_el->values[oc_el->num_values-1].data); +} + + diff --git a/source4/dsdb/samdb/ldb_modules/subtree_delete.c b/source4/dsdb/samdb/ldb_modules/subtree_delete.c index 3817d22..91d22c9 100644 --- a/source4/dsdb/samdb/ldb_modules/subtree_delete.c +++ b/source4/dsdb/samdb/ldb_modules/subtree_delete.c @@ -35,6 +35,7 @@ #include <ldb.h> #include <ldb_module.h> #include "dsdb/samdb/ldb_modules/util.h" +#include "dsdb/common/util.h" static int subtree_delete(struct ldb_module *module, struct ldb_request *req) diff --git a/source4/dsdb/samdb/ldb_modules/util.c b/source4/dsdb/samdb/ldb_modules/util.c index 569c967..d7bf807 100644 --- a/source4/dsdb/samdb/ldb_modules/util.c +++ b/source4/dsdb/samdb/ldb_modules/util.c @@ -484,33 +484,6 @@ int dsdb_module_del(struct ldb_module *module, return ret; } -const struct dsdb_class * get_last_structural_class(const struct dsdb_schema *schema,const struct ldb_message_element *element) -{ - const struct dsdb_class *last_class = NULL; - unsigned int i; - - for (i = 0; i < element->num_values; i++){ - const struct dsdb_class *tmp_class = dsdb_class_by_lDAPDisplayName_ldb_val(schema, &element->values[i]); - - if(tmp_class == NULL) { - continue; - } - - if(tmp_class->objectClassCategory > 1) { - continue; - } - - if (!last_class) { - last_class = tmp_class; - } else { - if (tmp_class->subClass_order > last_class->subClass_order) - last_class = tmp_class; - } - } - - return last_class; -} - /* check if a single valued link has multiple non-deleted values diff --git a/source4/dsdb/samdb/ldb_modules/wscript_build b/source4/dsdb/samdb/ldb_modules/wscript_build index b59fce3..03b138b 100644 --- a/source4/dsdb/samdb/ldb_modules/wscript_build +++ b/source4/dsdb/samdb/ldb_modules/wscript_build @@ -1,11 +1,22 @@ #!/usr/bin/env python bld.SAMBA_SUBSYSTEM('DSDB_MODULE_HELPERS', - source='util.c ridalloc.c acl_util.c', + source='util.c acl_util.c', autoproto='util_proto.h', - deps='ldb LIBNDR SAMDB_SCHEMA MESSAGING' + deps='ldb LIBNDR SAMDB_COMMON' ) +bld.SAMBA_SUBSYSTEM('DSDB_MODULE_HELPER_RIDALLOC', + source='ridalloc.c', + autoproto='ridalloc.h', + deps='MESSAGING', + ) + +bld.SAMBA_SUBSYSTEM('DSDB_MODULE_HELPER_SCHEMA', + source='schema.c', + autoproto='schema.h', + deps='SAMDB_SCHEMA' + ) -- Samba Shared Repository