sysdb.h revision f8a60e728780a8230ed4fa9c5350fa94534f0543
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi System Database Header
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi Copyright (C) Simo Sorce <ssorce@redhat.com> 2008
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi This program is free software; you can redistribute it and/or modify
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi it under the terms of the GNU General Public License as published by
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi the Free Software Foundation; either version 3 of the License, or
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi (at your option) any later version.
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi This program is distributed in the hope that it will be useful,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi but WITHOUT ANY WARRANTY; without even the implied warranty of
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi GNU General Public License for more details.
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi You should have received a copy of the GNU General Public License
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi along with this program. If not, see <http://www.gnu.org/licenses/>.
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_TMPL_USER_BASE SYSDB_USERS_CONTAINER",cn=%s,"SYSDB_BASE
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_TMPL_GROUP_BASE SYSDB_GROUPS_CONTAINER",cn=%s,"SYSDB_BASE
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_TMPL_CUSTOM_BASE SYSDB_CUSTOM_CONTAINER",cn=%s,"SYSDB_BASE
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_TMPL_NETGROUP_BASE SYSDB_NETGROUP_CONTAINER",cn=%s,"SYSDB_BASE
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_FAILED_LOGIN_ATTEMPTS "failedLoginAttempts"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_INITGR_EXPIRE "initgrExpireTimestamp"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_ORIG_NETGROUP_MEMBER "originalMemberNisNetgroup"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_ORIG_MODSTAMP "originalModifyTimestamp"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NC "objectclass="SYSDB_NETGROUP_CLASS
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_PWNAM_FILTER "(&("SYSDB_UC")("SYSDB_NAME"=%s))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_PWUID_FILTER "(&("SYSDB_UC")("SYSDB_UIDNUM"=%lu))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GRNAM_FILTER "(&("SYSDB_GC")("SYSDB_NAME"=%s))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GRNA2_FILTER "(&("SYSDB_UC")("SYSDB_MEMBEROF"=%s))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GRGID_FILTER "(&("SYSDB_GC")("SYSDB_GIDNUM"=%lu))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GRNAM_MPG_FILTER "(&("SYSDB_MPGC")("SYSDB_NAME"=%s))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GRGID_MPG_FILTER "(&("SYSDB_MPGC")("SYSDB_GIDNUM"=%lu))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_INITGR_FILTER "(&("SYSDB_GC")("SYSDB_GIDNUM"=*))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GETCACHED_FILTER "(&"SYSDB_UC")("SYSDB_LAST_LOGIN">=%lu))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NETGR_FILTER "(&("SYSDB_NC")("SYSDB_NAME"=%s))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NETGR_TRIPLES_FILTER "(|("SYSDB_NAME"=%s)("SYSDB_MEMBEROF"=%s))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_PW_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GRSRC_ATTRS {SYSDB_NAME, SYSDB_GIDNUM, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GRPW_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GRENT_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, SYSDB_MEMBEROF, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NETGR_ATTRS {SYSDB_NAME, SYSDB_NETGROUP_TRIPLE, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_TMPL_USER SYSDB_NAME"=%s,"SYSDB_TMPL_USER_BASE
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_TMPL_GROUP SYSDB_NAME"=%s,"SYSDB_TMPL_GROUP_BASE
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_TMPL_NETGROUP SYSDB_NAME"=%s,"SYSDB_TMPL_NETGROUP_BASE
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_TMPL_CUSTOM_SUBTREE "cn=%s,"SYSDB_TMPL_CUSTOM_BASE
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_TMPL_CUSTOM SYSDB_NAME"=%s,cn=%s,"SYSDB_TMPL_CUSTOM_BASE
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* sysdb_attrs helper functions */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct sysdb_attrs *sysdb_new_attrs(TALLOC_CTX *memctx);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* values are copied in the structure, allocated on "attrs" */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_add_string(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_add_bool(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_add_long(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_add_uint32(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_add_time_t(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_get_el(struct sysdb_attrs *attrs, const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_steal_string(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_get_string(struct sysdb_attrs *attrs, const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **string);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_get_string_array(struct sysdb_attrs *attrs, const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_get_uint32_t(struct sysdb_attrs *attrs, const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_replace_name(struct sysdb_attrs *attrs, const char *oldname,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *newname);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_users_from_str_list(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *const *list);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_users_from_ldb_vals(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* convert an ldb error into an errno error */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* DNs related helper functions */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_dn *sysdb_user_dn(struct sysdb_ctx *ctx, void *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_dn *sysdb_group_dn(struct sysdb_ctx *ctx, void *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_dn *sysdb_netgroup_dn(struct sysdb_ctx *ctx, void *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_dn *sysdb_netgroup_base_dn(struct sysdb_ctx *ctx, void *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *domain);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomierrno_t sysdb_group_dn_name(struct sysdb_ctx *ctx, void *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_dn *sysdb_domain_dn(struct sysdb_ctx *ctx, void *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *domain);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_dn *sysdb_custom_dn(struct sysdb_ctx *ctx, void *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_dn *sysdb_custom_subtree_dn(struct sysdb_ctx *ctx, void *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_context *sysdb_ctx_get_ldb(struct sysdb_ctx *ctx);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint compare_ldb_dn_comp_num(const void *m1, const void *m2);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* functions to start and finish transactions */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_transaction_start(struct sysdb_ctx *ctx);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_transaction_commit(struct sysdb_ctx *ctx);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_transaction_cancel(struct sysdb_ctx *ctx);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Sysdb initialization.
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi * call this function *only* once to initialize the database and get
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi * the sysdb ctx */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* used to initialize only one domain database.
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi * Do NOT use if sysdb_init has already been called */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *db_path,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_get_ctx_from_list(struct sysdb_ctx_list *ctx_list,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* functions to retrieve information from sysdb
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi * These functions automatically starts an operation
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi * therefore they cannot be called within a transaction */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi enum {SYSDB_NETGROUP_TRIPLE_VAL, SYSDB_NETGROUP_GROUP_VAL} type;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attributes,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attributes,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* functions that modify the databse
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi * they have to be called within a transaction
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi * See sysdb_transaction_send()/_recv() */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Delete Entry */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Search Entry */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *filter,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Search User (by uid or name) */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Search Group (by gid or name) */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_search_group_by_name(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Search Netgroup (by name) */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_search_netgroup_by_name(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Replace entry attrs */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Replace user attrs */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Replace group attrs */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Replace netgroup attrs */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Allocate a new id */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Add user (only basic attrs and w/o checks) */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *gecos,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *homedir,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *shell);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Add user (all checks) */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
const char *gecos,
const char *homedir,
const char *shell,
int cache_timeout);
const char *name);
int cache_timeout);
const char *name,
const char *name,
const char *description,
int cache_timeout);
int mod_op);
const char *name,
const char *pwd,
const char *gecos,
const char *homedir,
const char *shell,
const char *name,
enum sysdb_member_type {
const char *group,
const char *member,
const char *group,
const char *member,
const char *member,
const char *const *add_groups,
const char *const *del_groups);
const char *netgroup,
const char *hostname,
const char *username,
const char *domainname);
const char *netgroup,
const char *hostname,
const char *username,
const char *domainname);
const char *netgroup,
const char *hostname,
const char *username,
const char *domainname,
int mod_op);
const char *netgroup,
const char *member_netgroup);
const char *netgroup,
const char *member_netgroup);
const char *netgroup,
const char *member_netgroup,
int mod_op);
const char *username,
const char *password);
const char *name,
bool just_check,
const char *object_name,
const char *subtree_name,
const char *filter,
const char *subtree_name,
const char **attrs,
const char *object_name,
const char *subtree_name,
const char **attrs,
const char *object_name,
const char *subtree_name);
const char *expression,
const char *asq_attribute,
const char **attrs,
const char *sub_filter,
const char **attrs,
const char *sub_filter,
const char **attrs,
const char *name);
int attr_count,
const char *attr_name,
char ***_list);
char **sanitized);