sysdb.h revision f8a60e728780a8230ed4fa9c5350fa94534f0543
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/*
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SSSD
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi System Database Header
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi Copyright (C) Simo Sorce <ssorce@redhat.com> 2008
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
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
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
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*/
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#ifndef __SYS_DB_H__
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define __SYS_DB_H__
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#include "util/util.h"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#include "confdb/confdb.h"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#include <tevent.h>
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_CONF_SECTION "config/sysdb"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define CACHE_SYSDB_FILE "cache_%s.ldb"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define LOCAL_SYSDB_FILE "sssd.ldb"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_BASE "cn=sysdb"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_DOM_BASE "cn=%s,cn=sysdb"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_USERS_CONTAINER "cn=users"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GROUPS_CONTAINER "cn=groups"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_CUSTOM_CONTAINER "cn=custom"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NETGROUP_CONTAINER "cn=Netgroups"
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
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_USER_CLASS "user"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GROUP_CLASS "group"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NETGROUP_CLASS "netgroup"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NAME "name"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_OBJECTCLASS "objectClass"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NEXTID "nextID"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_UIDNUM "uidNumber"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GIDNUM "gidNumber"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_CREATE_TIME "createTimestamp"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_PWD "userPassword"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_FULLNAME "fullName"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_HOMEDIR "homeDirectory"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_SHELL "loginShell"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_MEMBEROF "memberOf"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_DISABLED "disabled"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_MEMBER "member"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_MEMBERUID "memberUid"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_DEFAULTGROUP "defaultGroup"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GECOS "gecos"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_LOCALE "locale"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_KEYBOARD "keyboard"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_SESSION "session"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_LAST_LOGIN "lastLogin"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_LAST_ONLINE_AUTH "lastOnlineAuth"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_USERPIC "userPicture"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_LAST_FAILED_LOGIN "lastFailedLogin"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_FAILED_LOGIN_ATTEMPTS "failedLoginAttempts"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_LAST_UPDATE "lastUpdate"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_CACHE_EXPIRE "dataExpireTimestamp"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_INITGR_EXPIRE "initgrExpireTimestamp"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NETGROUP_TRIPLE "netgroupTriple"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_ORIG_NETGROUP_MEMBER "originalMemberNisNetgroup"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NETGROUP_MEMBER "memberNisNetgroup"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_DESCRIPTION "description"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_CACHEDPWD "cachedPassword"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_UUID "uniqueID"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_UPN "userPrincipalName"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_CCACHE_FILE "ccacheFile"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_ORIG_DN "originalDN"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_ORIG_MODSTAMP "originalModifyTimestamp"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_ORIG_MEMBEROF "originalMemberOf"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_USN "entryUSN"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_HIGH_USN "highestUSN"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NEXTID_FILTER "("SYSDB_NEXTID"=*)"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_UC "objectclass="SYSDB_USER_CLASS
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GC "objectclass="SYSDB_GROUP_CLASS
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NC "objectclass="SYSDB_NETGROUP_CLASS
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_MPGC "|("SYSDB_UC")("SYSDB_GC")"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
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_PWENT_FILTER "("SYSDB_UC")"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
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_GRENT_FILTER "("SYSDB_GC")"
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_GRENT_MPG_FILTER "("SYSDB_MPGC")"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_INITGR_FILTER "(&("SYSDB_GC")("SYSDB_GIDNUM"=*))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GETCACHED_FILTER "(&"SYSDB_UC")("SYSDB_LAST_LOGIN">=%lu))"
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
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
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_DEFAULT_ATTRS SYSDB_LAST_UPDATE, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_CACHE_EXPIRE, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_INITGR_EXPIRE, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_OBJECTCLASS
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_PW_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_GIDNUM, SYSDB_GECOS, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_HOMEDIR, SYSDB_SHELL, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_DEFAULT_ATTRS, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi NULL}
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GRSRC_ATTRS {SYSDB_NAME, SYSDB_GIDNUM, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_MEMBERUID, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_DEFAULT_ATTRS, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi NULL}
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GRPW_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_DEFAULT_ATTRS, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi NULL}
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_GRENT_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, SYSDB_MEMBEROF, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_DEFAULT_ATTRS, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi NULL}
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_NETGR_ATTRS {SYSDB_NAME, SYSDB_NETGROUP_TRIPLE, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_NETGROUP_MEMBER, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_DEFAULT_ATTRS, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi NULL}
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_INITGR_ATTR SYSDB_MEMBEROF
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_INITGR_ATTRS {SYSDB_GIDNUM, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi SYSDB_DEFAULT_ATTRS, \
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi NULL}
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
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
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_MOD_ADD LDB_FLAG_MOD_ADD
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_MOD_DEL LDB_FLAG_MOD_DELETE
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi#define SYSDB_MOD_REP LDB_FLAG_MOD_REPLACE
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct confdb_ctx;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct sysdb_ctx_list;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct sysdb_ctx;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct sysdb_attrs {
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi int num;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_message_element *a;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi};
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* sysdb_attrs helper functions */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct sysdb_attrs *sysdb_new_attrs(TALLOC_CTX *memctx);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* values are copied in the structure, allocated on "attrs" */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_add_val(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name, const struct ldb_val *val);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_add_string(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name, const char *str);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_add_bool(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name, bool value);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_add_long(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name, long value);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_add_uint32(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name, uint32_t value);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_add_time_t(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name, time_t value);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_get_el(struct sysdb_attrs *attrs, const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_message_element **el);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_steal_string(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name, char *str);
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 Tuomi TALLOC_CTX *mem_ctx, const char ***string);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_get_uint32_t(struct sysdb_attrs *attrs, const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi uint32_t *value);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_replace_name(struct sysdb_attrs *attrs, const char *oldname,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *newname);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_attrs_users_from_str_list(struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *attr_name,
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 *attr_name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_val *values,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi int num_values);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* convert an ldb error into an errno error */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_error_to_errno(int ldberr);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* DNs related helper functions */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_dn *sysdb_user_dn(struct sysdb_ctx *ctx, void *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *domain, const char *name);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_dn *sysdb_group_dn(struct sysdb_ctx *ctx, void *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *domain, const char *name);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_dn *sysdb_netgroup_dn(struct sysdb_ctx *ctx, void *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *domain, const char *name);
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 Tuomi const char *dn_str, char **name);
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 Tuomi const char *domain, const char *object_name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *subtree_name);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_dn *sysdb_custom_subtree_dn(struct sysdb_ctx *ctx, void *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *subtree_name);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomichar *sysdb_user_strdn(TALLOC_CTX *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *domain, const char *name);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomichar *sysdb_group_strdn(TALLOC_CTX *memctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *domain, const char *name);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct ldb_context *sysdb_ctx_get_ldb(struct sysdb_ctx *ctx);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint compare_ldb_dn_comp_num(const void *m1, const void *m2);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
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
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Sysdb initialization.
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi * call this function *only* once to initialize the database and get
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi * the sysdb ctx */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_init(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct confdb_ctx *cdb,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *alt_db_path,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi bool allow_upgrade,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx_list **_ctx_list);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* used to initialize only one domain database.
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi * Do NOT use if sysdb_init has already been called */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_domain_init(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *db_path,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx **_ctx);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_get_ctx_from_list(struct sysdb_ctx_list *ctx_list,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx **_ctx);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
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 Tuomiint sysdb_getpwnam(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_result **res);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_getpwuid(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi uid_t uid,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_result **res);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_enumpwent(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_result **res);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_getgrnam(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_result **res);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_getgrgid(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi gid_t gid,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_result **res);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_enumgrent(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_result **res);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomistruct sysdb_netgroup_ctx {
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi enum {SYSDB_NETGROUP_TRIPLE_VAL, SYSDB_NETGROUP_GROUP_VAL} type;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi union {
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct {
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi char *hostname;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi char *username;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi char *domainname;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi } triple;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi char *groupname;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi } value;
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi};
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomierrno_t sysdb_getnetgr(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *netgroup,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_result **res);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_initgroups(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_result **res);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_get_user_attr(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attributes,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_result **res);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_get_netgroup_attr(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *netgrname,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attributes,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_result **res);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
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
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Delete Entry */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_delete_entry(struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_dn *dn,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi bool ignore_not_found);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_delete_recursive(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_dn *dn,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi bool ignore_not_found);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Search Entry */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_search_entry(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_dn *base_dn,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi int scope,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *filter,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi size_t *msgs_count,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_message ***msgs);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Search User (by uid or name) */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_search_user_by_name(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_message **msg);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_search_user_by_uid(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi uid_t uid,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_message **msg);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Search Group (by gid or name) */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_search_group_by_name(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_message **msg);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_search_group_by_gid(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi gid_t gid,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_message **msg);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Search Netgroup (by name) */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_search_netgroup_by_name(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char **attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_message **msg);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Replace entry attrs */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_set_entry_attr(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct ldb_dn *entry_dn,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi int mod_op);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Replace user attrs */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_set_user_attr(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi int mod_op);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Replace group attrs */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_set_group_attr(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi int mod_op);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Replace netgroup attrs */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_set_netgroup_attr(struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_attrs *attrs,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi int mod_op);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Allocate a new id */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_get_new_id(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi uint32_t *id);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Add user (only basic attrs and w/o checks) */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_add_basic_user(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi uid_t uid, gid_t gid,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *gecos,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *homedir,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *shell);
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi/* Add user (all checks) */
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomiint sysdb_add_user(TALLOC_CTX *mem_ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sysdb_ctx *ctx,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi struct sss_domain_info *domain,
3f67fea2e5a12390d280315c37c80302a9dab683Aki Tuomi const char *name,
uid_t uid, gid_t gid,
const char *gecos,
const char *homedir,
const char *shell,
struct sysdb_attrs *attrs,
int cache_timeout);
int sysdb_add_fake_user(struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *name);
/* Add group (only basic attrs and w/o checks) */
int sysdb_add_basic_group(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *name, gid_t gid);
/* Add group (all checks) */
int sysdb_add_group(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *name, gid_t gid,
struct sysdb_attrs *attrs,
int cache_timeout);
int sysdb_add_incomplete_group(struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *name,
gid_t gid);
/* Add netgroup (only basic attrs and w/o checks) */
int sysdb_add_basic_netgroup(struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *name, const char *description);
int sysdb_add_netgroup(struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *name,
const char *description,
struct sysdb_attrs *attrs,
int cache_timeout);
/* mod_op must be either LDB_FLAG_MOD_ADD or LDB_FLAG_MOD_DELETE */
int sysdb_mod_group_member(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *ctx,
struct ldb_dn *member_dn,
struct ldb_dn *group_dn,
int mod_op);
int sysdb_store_user(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *name,
const char *pwd,
uid_t uid, gid_t gid,
const char *gecos,
const char *homedir,
const char *shell,
struct sysdb_attrs *attrs,
uint64_t cache_timeout);
int sysdb_store_group(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *name,
gid_t gid,
struct sysdb_attrs *attrs,
uint64_t cache_timeout);
enum sysdb_member_type {
SYSDB_MEMBER_USER,
SYSDB_MEMBER_GROUP
};
int sysdb_add_group_member(struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *group,
const char *member,
enum sysdb_member_type type);
int sysdb_remove_group_member(struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *group,
const char *member,
enum sysdb_member_type type);
errno_t sysdb_update_members(struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *member,
enum sysdb_member_type type,
const char *const *add_groups,
const char *const *del_groups);
errno_t sysdb_add_netgroup_tuple(struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *netgroup,
const char *hostname,
const char *username,
const char *domainname);
errno_t sysdb_remove_netgroup_tuple(struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *netgroup,
const char *hostname,
const char *username,
const char *domainname);
errno_t sysdb_mod_netgroup_tuple(struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *netgroup,
const char *hostname,
const char *username,
const char *domainname,
int mod_op);
errno_t sysdb_add_netgroup_member(struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *netgroup,
const char *member_netgroup);
errno_t sysdb_remove_netgroup_member(struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *netgroup,
const char *member_netgroup);
errno_t sysdb_mod_netgroup_member(struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *netgroup,
const char *member_netgroup,
int mod_op);
/* Password caching function.
* If you are in a transaction ignore sysdb and pass in the handle.
* If you are not in a transaction pass NULL in handle and provide sysdb,
* in this case a transaction will be automatically started and the
* function will be completely wrapped in it's own sysdb transaction */
int sysdb_cache_password(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *username,
const char *password);
errno_t check_failed_login_attempts(TALLOC_CTX *mem_ctx,
struct confdb_ctx *cdb,
struct ldb_message *ldb_msg,
uint32_t *failed_login_attempts,
time_t *delayed_until);
int sysdb_cache_auth(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *name,
const uint8_t *authtok,
size_t authtok_size,
struct confdb_ctx *cdb,
bool just_check,
time_t *_expire_date,
time_t *_delayed_until);
int sysdb_store_custom(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *object_name,
const char *subtree_name,
struct sysdb_attrs *attrs);
int sysdb_search_custom(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *filter,
const char *subtree_name,
const char **attrs,
size_t *msgs_count,
struct ldb_message ***msgs);
int sysdb_search_custom_by_name(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *object_name,
const char *subtree_name,
const char **attrs,
size_t *_count,
struct ldb_message ***_msgs);
int sysdb_delete_custom(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *ctx,
struct sss_domain_info *domain,
const char *object_name,
const char *subtree_name);
int sysdb_asq_search(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
struct ldb_dn *base_dn,
const char *expression,
const char *asq_attribute,
const char **attrs,
size_t *msgs_count,
struct ldb_message ***msgs);
int sysdb_search_users(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *sub_filter,
const char **attrs,
size_t *msgs_count,
struct ldb_message ***msgs);
int sysdb_delete_user(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *name, uid_t uid);
int sysdb_search_groups(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *sub_filter,
const char **attrs,
size_t *msgs_count,
struct ldb_message ***msgs);
int sysdb_delete_group(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *name, gid_t gid);
int sysdb_delete_netgroup(struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *name);
errno_t sysdb_attrs_to_list(TALLOC_CTX *memctx,
struct sysdb_attrs **attrs,
int attr_count,
const char *attr_name,
char ***_list);
errno_t sysdb_netgr_to_entries(TALLOC_CTX *mem_ctx,
struct ldb_result *res,
struct sysdb_netgroup_ctx ***entries);
errno_t sysdb_dn_sanitize(void *mem_ctx, const char *input,
char **sanitized);
#endif /* __SYS_DB_H__ */