1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-28 17:47:29 +03:00

r26412: Add comments and refactor to reuse common code.

Andrew Bartlett
(This used to be commit a8b0f5af9afcc19bd869ff19e1456dbe9d2713b6)
This commit is contained in:
Andrew Bartlett 2007-12-12 07:02:07 +01:00 committed by Stefan Metzmacher
parent 6d2edec0a2
commit a7f008a939

View File

@ -3,7 +3,8 @@
DSDB schema header DSDB schema header
Copyright (C) Stefan Metzmacher <metze@samba.org> 2006 Copyright (C) Stefan Metzmacher <metze@samba.org> 2006
Copyright (C) Andrew Bartlett <abartlet@samba.org> 2007
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or the Free Software Foundation; either version 3 of the License, or
@ -1038,6 +1039,11 @@ WERROR dsdb_linked_attribute_lDAPDisplayName_list(const struct dsdb_schema *sche
return WERR_OK; return WERR_OK;
} }
/**
* Attach the schema to an opaque pointer on the ldb, so ldb modules
* can find it
*/
int dsdb_set_schema(struct ldb_context *ldb, struct dsdb_schema *schema) int dsdb_set_schema(struct ldb_context *ldb, struct dsdb_schema *schema)
{ {
int ret; int ret;
@ -1052,8 +1058,14 @@ int dsdb_set_schema(struct ldb_context *ldb, struct dsdb_schema *schema)
return LDB_SUCCESS; return LDB_SUCCESS;
} }
/**
* Global variable to hold one copy of the schema, used to avoid memory bloat
*/
static struct dsdb_schema *global_schema; static struct dsdb_schema *global_schema;
/**
* Make this ldb use the 'global' schema, setup to avoid having multiple copies in this process
*/
int dsdb_set_global_schema(struct ldb_context *ldb) int dsdb_set_global_schema(struct ldb_context *ldb)
{ {
int ret; int ret;
@ -1068,6 +1080,10 @@ int dsdb_set_global_schema(struct ldb_context *ldb)
return LDB_SUCCESS; return LDB_SUCCESS;
} }
/**
* Find the schema object for this ldb
*/
const struct dsdb_schema *dsdb_get_schema(struct ldb_context *ldb) const struct dsdb_schema *dsdb_get_schema(struct ldb_context *ldb)
{ {
const void *p; const void *p;
@ -1087,18 +1103,14 @@ const struct dsdb_schema *dsdb_get_schema(struct ldb_context *ldb)
return schema; return schema;
} }
/**
* Make the schema found on this ldb the 'global' schema
*/
void dsdb_make_schema_global(struct ldb_context *ldb) void dsdb_make_schema_global(struct ldb_context *ldb)
{ {
const void *p; const void *p;
const struct dsdb_schema *schema; const struct dsdb_schema *schema = dsdb_get_schema(ldb);
/* see if we have a cached copy */
p = ldb_get_opaque(ldb, "dsdb_schema");
if (!p) {
return;
}
schema = talloc_get_type(p, struct dsdb_schema);
if (!schema) { if (!schema) {
return; return;
} }
@ -1109,6 +1121,13 @@ void dsdb_make_schema_global(struct ldb_context *ldb)
dsdb_set_global_schema(ldb); dsdb_set_global_schema(ldb);
} }
/**
* Rather than read a schema from the LDB itself, read it from an ldif
* file. This allows schema to be loaded and used while adding the
* schema itself to the directory.
*/
WERROR dsdb_attach_schema_from_ldif_file(struct ldb_context *ldb, const char *pf, const char *df) WERROR dsdb_attach_schema_from_ldif_file(struct ldb_context *ldb, const char *pf, const char *df)
{ {
struct ldb_ldif *ldif; struct ldb_ldif *ldif;