/*
SSSD
Private System Database Header
Copyright (C) Simo Sorce <ssorce@redhat.com> 2008
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/>.
*/
#ifndef __INT_SYS_DB_H__
#define __INT_SYS_DB_H__
#define SYSDB_BASE_LDIF \
"dn: @ATTRIBUTES\n" \
"userPrincipalName: CASE_INSENSITIVE\n" \
"canonicalUserPrincipalName: CASE_INSENSITIVE\n" \
"cn: CASE_INSENSITIVE\n" \
"dc: CASE_INSENSITIVE\n" \
"dn: CASE_INSENSITIVE\n" \
"originalDN: CASE_INSENSITIVE\n" \
"objectclass: CASE_INSENSITIVE\n" \
"\n" \
"dn: @INDEXLIST\n" \
"@IDXATTR: cn\n" \
"@IDXATTR: objectclass\n" \
"@IDXATTR: member\n" \
"@IDXATTR: memberof\n" \
"@IDXATTR: name\n" \
"@IDXATTR: uidNumber\n" \
"@IDXATTR: gidNumber\n" \
"@IDXATTR: lastUpdate\n" \
"@IDXATTR: dataExpireTimestamp\n" \
"@IDXATTR: originalDN\n" \
"@IDXATTR: nameAlias\n" \
"@IDXATTR: servicePort\n" \
"@IDXATTR: serviceProtocol\n" \
"@IDXATTR: sudoUser\n" \
"@IDXATTR: sshKnownHostsExpire\n" \
"@IDXATTR: objectSIDString\n" \
"@IDXONE: 1\n" \
"\n" \
"dn: @MODULES\n" \
"@LIST: asq,memberof\n" \
"\n" \
"dn: cn=sysdb\n" \
"cn: sysdb\n" \
"description: base object\n" \
"\n" \
"dn: cn=ranges,cn=sysdb\n" \
"cn: ranges\n" \
"\n"
/* The timestamp cache has its own versioning */
#define SYSDB_TS_BASE_LDIF \
"dn: @ATTRIBUTES\n" \
"dn: CASE_INSENSITIVE\n" \
"\n" \
"dn: @INDEXLIST\n" \
"@IDXATTR: lastUpdate\n" \
"@IDXATTR: dataExpireTimestamp\n" \
"@IDXONE: 1\n" \
"\n" \
"dn: cn=sysdb\n" \
"cn: sysdb\n" \
"description: base object\n" \
"\n" \
struct sysdb_ctx {
char *ldb_file;
char *ldb_ts_file;
int transaction_nesting;
};
/* Internal utility functions */
const char *provider,
const char *name,
const char *base_path,
char **_ldb_file,
char **_ts_file);
const char *filename,
int flags,
struct ldb_context **_ldb);
struct sysdb_dom_upgrade_ctx {
};
struct sss_domain_info *domain,
const char *db_path,
struct sysdb_dom_upgrade_ctx *upgrade_ctx,
/* Upgrade routines */
const char *db_path);
const char **ver);
const char **ver);
struct sysdb_dom_upgrade_ctx *upgrade_ctx,
const char **ver);
/* The utility function to create a subdomain sss_domain_info object is handy
* for unit tests, so it should be available in a header, but not a public util
* one, because the only interface for the deamon itself should be adding
* the sysdb domain object and calling sysdb_update_subdomains()
*/
struct sss_domain_info *parent,
const char *name,
const char *realm,
const char *flat_name,
const char *id,
bool mpg,
bool enumerate,
const char *forest,
/* Helper functions to deal with the timestamp cache should not be used
* outside the sysdb itself. The timestamp cache should be completely
* opaque to the sysdb consumers
*/
/* Returns true if the 'dn' parameter is a user or a group DN, because
* at the moment, the timestamps cache only handles users and groups.
* Returns false otherwise.
*/
/* Returns true if the attrname is an attribute we store to the timestamp
* cache, false if it's a sysdb-only attribute
*/
bool is_ts_cache_attr(const char *attrname);
/* Returns a subset of attrs that only contains the attributes we store to
* the timestamps cache. Useful in generic functions that set some attributes
* and we want to mirror that change in the timestamps cache
*/
struct sysdb_attrs *attrs);
/* Given a ldb_result found in the timestamp cache, merge in the
* corresponding full attributes from the sysdb cache. The new
* attributes are allocated on the messages in the ldb_result.
*/
struct ldb_result *res,
const char *attrs[]);
/* Given an array of ldb_message structures found in the timestamp cache,
* merge in the corresponding full attributes from the sysdb cache. The
* new attributes are allocated atop the ldb messages.
*/
struct ldb_message **msgs,
const char *attrs[]);
/* Merge two sets of ldb_result structures. */
struct ldb_result *subres);
/* Search Entry in the timestamp cache */
const char *filter,
const char **attrs,
struct ldb_message ***_msgs);
struct sss_domain_info *domain,
const char *sub_filter,
const char **attrs,
struct ldb_result *res);
struct sss_domain_info *domain,
const char *sub_filter,
const char **attrs,
struct ldb_result *res);
/* Compares the modifyTimestamp attribute between old_entry and
* new_entry. Returns true if they differ (or either entry is missing
* the attribute) and false if the attribute is the same
*/
struct sysdb_attrs *new_entry);
/* Given a sysdb_attrs pointer, returns a corresponding ldb_message */
struct sysdb_attrs *attrs,
int mod_op);
/* Compares the attributes between the existing attributes of entry_dn and
* the new_entry attributes that are about to be set. If the set would
* not yield into any differences (and therefore a write to the cache is
* not necessary), the function returns false (no diff), otherwise
* the function returns true (a difference exists).
*/
struct sysdb_attrs *attrs,
int mod_op);
#endif /* __INT_SYS_DB_H__ */