sysdb.h revision 5153e8b9793dea1e212ca08af0f77ea1d023cbb7
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher/*
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher SSSD
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher System Database Header
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher Copyright (C) Simo Sorce <ssorce@redhat.com> 2008
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher This program is free software; you can redistribute it and/or modify
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher it under the terms of the GNU General Public License as published by
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher the Free Software Foundation; either version 3 of the License, or
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher (at your option) any later version.
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher This program is distributed in the hope that it will be useful,
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher but WITHOUT ANY WARRANTY; without even the implied warranty of
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher GNU General Public License for more details.
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher You should have received a copy of the GNU General Public License
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher along with this program. If not, see <http://www.gnu.org/licenses/>.
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher*/
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher#ifndef __SYS_DB_H__
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher#define __SYS_DB_H__
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher#include "util/util.h"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#include "confdb/confdb.h"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#include <tevent.h>
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define CACHE_SYSDB_FILE "cache_%s.ldb"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define LOCAL_SYSDB_FILE "sssd.ldb"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_BASE "cn=sysdb"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_DOM_BASE "cn=%s,cn=sysdb"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_USERS_CONTAINER "cn=users"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GROUPS_CONTAINER "cn=groups"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_CUSTOM_CONTAINER "cn=custom"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NETGROUP_CONTAINER "cn=Netgroups"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_RANGE_CONTAINER "cn=ranges"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_TMPL_USER_BASE SYSDB_USERS_CONTAINER","SYSDB_DOM_BASE
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_TMPL_GROUP_BASE SYSDB_GROUPS_CONTAINER","SYSDB_DOM_BASE
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_TMPL_CUSTOM_BASE SYSDB_CUSTOM_CONTAINER","SYSDB_DOM_BASE
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_TMPL_NETGROUP_BASE SYSDB_NETGROUP_CONTAINER","SYSDB_DOM_BASE
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_TMPL_RANGE_BASE SYSDB_RANGE_CONTAINER","SYSDB_BASE
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SUBDOMAIN_CLASS "subdomain"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_USER_CLASS "user"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GROUP_CLASS "group"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NETGROUP_CLASS "netgroup"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_HOST_CLASS "host"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_HOSTGROUP_CLASS "hostgroup"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SELINUX_USERMAP_CLASS "selinuxusermap"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SELINUX_CLASS "selinux"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_ID_RANGE_CLASS "idRange"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_DOMAIN_ID_RANGE_CLASS "domainIDRange"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_TRUSTED_AD_DOMAIN_RANGE_CLASS "TrustedADDomainRange"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NAME "name"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NAME_ALIAS "nameAlias"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_OBJECTCLASS "objectClass"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NEXTID "nextID"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_UIDNUM "uidNumber"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GIDNUM "gidNumber"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_CREATE_TIME "createTimestamp"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_PWD "userPassword"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_FULLNAME "fullName"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_HOMEDIR "homeDirectory"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SHELL "loginShell"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_MEMBEROF "memberOf"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_DISABLED "disabled"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_MEMBER "member"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_MEMBERUID "memberUid"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GHOST "ghost"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_POSIX "isPosix"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_USER_CATEGORY "userCategory"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_HOST_CATEGORY "hostCategory"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GROUP_TYPE "groupType"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GECOS "gecos"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_LAST_LOGIN "lastLogin"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_LAST_ONLINE_AUTH "lastOnlineAuth"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_LAST_FAILED_LOGIN "lastFailedLogin"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_FAILED_LOGIN_ATTEMPTS "failedLoginAttempts"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_LAST_UPDATE "lastUpdate"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_CACHE_EXPIRE "dataExpireTimestamp"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_INITGR_EXPIRE "initgrExpireTimestamp"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_AUTHORIZED_SERVICE "authorizedService"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_AUTHORIZED_HOST "authorizedHost"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NETGROUP_TRIPLE "netgroupTriple"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_ORIG_NETGROUP_MEMBER "originalMemberNisNetgroup"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_ORIG_NETGROUP_EXTERNAL_HOST "originalExternalHost"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NETGROUP_DOMAIN "nisDomain"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NETGROUP_MEMBER "memberNisNetgroup"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_DESCRIPTION "description"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_FQDN "fqdn"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SERVERHOSTNAME "serverHostname"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_CACHEDPWD "cachedPassword"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_UUID "uniqueID"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SID "objectSID"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_PRIMARY_GROUP "ADPrimaryGroupID"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_PRIMARY_GROUP_GIDNUM "origPrimaryGroupGidNumber"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SID_STR "objectSIDString"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_UPN "userPrincipalName"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_CANONICAL_UPN "canonicalUserPrincipalName"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_CCACHE_FILE "ccacheFile"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_ORIG_DN "originalDN"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_ORIG_MODSTAMP "originalModifyTimestamp"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_ORIG_MEMBEROF "originalMemberOf"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_ORIG_MEMBER "orig_member"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_ORIG_MEMBER_USER "originalMemberUser"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_ORIG_MEMBER_HOST "originalMemberHost"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_USN "entryUSN"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_HIGH_USN "highestUSN"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SSH_PUBKEY "sshPublicKey"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SUBDOMAIN_REALM "realmName"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SUBDOMAIN_FLAT "flatName"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SUBDOMAIN_ID "domainID"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SUBDOMAIN_MPG "mpg"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SUBDOMAIN_ENUM "enumerate"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SUBDOMAIN_FOREST "memberOfForest"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_BASE_ID "baseID"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_ID_RANGE_SIZE "idRangeSize"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_BASE_RID "baseRID"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SECONDARY_BASE_RID "secondaryBaseRID"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_DOMAIN_ID "domainID"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_ID_RANGE_TYPE "idRangeType"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NEXTID_FILTER "("SYSDB_NEXTID"=*)"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_UC "objectclass="SYSDB_USER_CLASS
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GC "objectclass="SYSDB_GROUP_CLASS
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NC "objectclass="SYSDB_NETGROUP_CLASS
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_MPGC "|("SYSDB_UC")("SYSDB_GC")"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_PWNAM_FILTER "(&("SYSDB_UC")(|("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME"=%s)))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_PWUID_FILTER "(&("SYSDB_UC")("SYSDB_UIDNUM"=%lu))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_PWSID_FILTER "(&("SYSDB_UC")("SYSDB_SID_STR"=%s))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_PWUPN_FILTER "(&("SYSDB_UC")(|("SYSDB_UPN"=%s)("SYSDB_CANONICAL_UPN"=%s)))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_PWENT_FILTER "("SYSDB_UC")"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GRNAM_FILTER "(&("SYSDB_GC")(|("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME"=%s)))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GRGID_FILTER "(&("SYSDB_GC")("SYSDB_GIDNUM"=%lu))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GRSID_FILTER "(&("SYSDB_GC")("SYSDB_SID_STR"=%s))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GRENT_FILTER "("SYSDB_GC")"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GRNAM_MPG_FILTER "(&("SYSDB_MPGC")(|("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME"=%s)))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GRGID_MPG_FILTER "(&("SYSDB_MPGC")("SYSDB_GIDNUM"=%lu))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GRENT_MPG_FILTER "("SYSDB_MPGC")"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_INITGR_FILTER "(&("SYSDB_GC")("SYSDB_GIDNUM"=*))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NETGR_FILTER "(&("SYSDB_NC")(|("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME"=%s)))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NETGR_TRIPLES_FILTER "(|("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME"=%s)("SYSDB_NAME_ALIAS"=%s)("SYSDB_MEMBEROF"=%s))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_SID_FILTER "(&(|("SYSDB_UC")("SYSDB_GC"))("SYSDB_SID_STR"=%s))"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_HAS_ENUMERATED "has_enumerated"
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_DEFAULT_ATTRS SYSDB_LAST_UPDATE, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_CACHE_EXPIRE, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_INITGR_EXPIRE, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_OBJECTCLASS
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_PW_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_GIDNUM, SYSDB_GECOS, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_HOMEDIR, SYSDB_SHELL, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_DEFAULT_ATTRS, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_PRIMARY_GROUP_GIDNUM, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_SID_STR, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek NULL}
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_GRSRC_ATTRS {SYSDB_NAME, SYSDB_GIDNUM, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_MEMBERUID, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_GHOST, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_DEFAULT_ATTRS, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek NULL}
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_NETGR_ATTRS {SYSDB_NAME, SYSDB_NETGROUP_TRIPLE, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_NETGROUP_MEMBER, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_DEFAULT_ATTRS, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek NULL}
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_INITGR_ATTR SYSDB_MEMBEROF
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_INITGR_ATTRS {SYSDB_GIDNUM, SYSDB_POSIX, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_DEFAULT_ATTRS, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_ORIG_DN, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_SID_STR, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_NAME, \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek NULL}
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_TMPL_USER SYSDB_NAME"=%s,"SYSDB_TMPL_USER_BASE
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_TMPL_GROUP SYSDB_NAME"=%s,"SYSDB_TMPL_GROUP_BASE
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_TMPL_NETGROUP SYSDB_NAME"=%s,"SYSDB_TMPL_NETGROUP_BASE
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_TMPL_CUSTOM_SUBTREE "cn=%s,"SYSDB_TMPL_CUSTOM_BASE
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_TMPL_CUSTOM SYSDB_NAME"=%s,cn=%s,"SYSDB_TMPL_CUSTOM_BASE
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_TMPL_RANGE SYSDB_NAME"=%s,"SYSDB_TMPL_RANGE_BASE
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher#define SYSDB_MOD_ADD LDB_FLAG_MOD_ADD
03abdaa21ecf562b714f204ca42379ff08626f75Simo Sorce#define SYSDB_MOD_DEL LDB_FLAG_MOD_DELETE
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher#define SYSDB_MOD_REP LDB_FLAG_MOD_REPLACE
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek/* sysdb version check macros */
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher#define SYSDB_VERSION_ERROR_HINT \
03abdaa21ecf562b714f204ca42379ff08626f75Simo Sorce ERROR("Removing cache files in "DB_PATH" should fix the issue, " \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek "but note that removing cache files will also remove all of your " \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek "cached credentials.\n")
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_VERSION_LOWER_ERROR(ret) do { \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek if (ret == EUCLEAN) { \
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher ERROR("Lower version of database is expected!\n"); \
03abdaa21ecf562b714f204ca42379ff08626f75Simo Sorce SYSDB_VERSION_ERROR_HINT; \
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher } \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek} while(0)
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallagher#define SYSDB_VERSION_HIGHER_ERROR(ret) do { \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek if (ret == EMEDIUMTYPE) { \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek ERROR("Higher version of database is expected!\n"); \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek ERROR("In order to upgrade the database, you must run SSSD.\n"); \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_VERSION_ERROR_HINT; \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek } \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek} while(0)
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek/* use this in daemons */
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_VERSION_ERROR_DAEMON(ret) \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_VERSION_LOWER_ERROR(ret)
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek/* use this in tools */
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek#define SYSDB_VERSION_ERROR(ret) \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_VERSION_LOWER_ERROR(ret); \
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek SYSDB_VERSION_HIGHER_ERROR(ret)
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekstruct confdb_ctx;
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekstruct sysdb_ctx;
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekstruct sysdb_attrs {
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek int num;
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek struct ldb_message_element *a;
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek};
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek/* sysdb_attrs helper functions */
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekstruct sysdb_attrs *sysdb_new_attrs(TALLOC_CTX *mem_ctx);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekstruct range_info {
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek char *name;
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek uint32_t base_id;
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek uint32_t id_range_size;
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek uint32_t base_rid;
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek uint32_t secondary_base_rid;
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek char *trusted_dom_sid;
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek char *range_type;
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek};
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek/* values are copied in the structure, allocated on "attrs" */
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_add_val(struct sysdb_attrs *attrs,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek const char *name, const struct ldb_val *val);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_add_string(struct sysdb_attrs *attrs,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek const char *name, const char *str);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_add_lower_case_string(struct sysdb_attrs *attrs,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek const char *name, const char *str);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_add_mem(struct sysdb_attrs *attrs, const char *name,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek const void *mem, size_t size);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_add_bool(struct sysdb_attrs *attrs,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek const char *name, bool value);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_add_long(struct sysdb_attrs *attrs,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek const char *name, long value);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_add_uint32(struct sysdb_attrs *attrs,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek const char *name, uint32_t value);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_add_time_t(struct sysdb_attrs *attrs,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek const char *name, time_t value);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_add_lc_name_alias(struct sysdb_attrs *attrs,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek const char *value);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_copy_values(struct sysdb_attrs *src,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek struct sysdb_attrs *dst,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek const char *name);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_get_el(struct sysdb_attrs *attrs, const char *name,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek struct ldb_message_element **el);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_get_el_ext(struct sysdb_attrs *attrs, const char *name,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek bool alloc, struct ldb_message_element **el);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_steal_string(struct sysdb_attrs *attrs,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek const char *name, char *str);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_get_string(struct sysdb_attrs *attrs, const char *name,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek const char **string);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekconst char **sss_ldb_el_to_string_list(TALLOC_CTX *mem_ctx,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek struct ldb_message_element *el);
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozekint sysdb_attrs_get_string_array(struct sysdb_attrs *attrs, const char *name,
5546876b121d674077e93fe908f3a602de8ec31fJakub Hrozek TALLOC_CTX *mem_ctx, const char ***string);
effcbdb12c7ef892f1fd92a745cb33a08ca4ba30Stephen Gallaghererrno_t sysdb_attrs_get_bool(struct sysdb_attrs *attrs, const char *name,
e523233315f44b8f77ab9c5143a3d80364ebf955Ondrej Kos bool *value);
e523233315f44b8f77ab9c5143a3d80364ebf955Ondrej Kosint sysdb_attrs_get_uint16_t(struct sysdb_attrs *attrs, const char *name,
e523233315f44b8f77ab9c5143a3d80364ebf955Ondrej Kos uint16_t *value);
e523233315f44b8f77ab9c5143a3d80364ebf955Ondrej Kosint sysdb_attrs_get_int32_t(struct sysdb_attrs *attrs, const char *name,
e523233315f44b8f77ab9c5143a3d80364ebf955Ondrej Kos int32_t *value);
03abdaa21ecf562b714f204ca42379ff08626f75Simo Sorceint sysdb_attrs_get_uint32_t(struct sysdb_attrs *attrs, const char *name,
e523233315f44b8f77ab9c5143a3d80364ebf955Ondrej Kos uint32_t *value);
03abdaa21ecf562b714f204ca42379ff08626f75Simo Sorce
03abdaa21ecf562b714f204ca42379ff08626f75Simo Sorceint sysdb_attrs_replace_name(struct sysdb_attrs *attrs, const char *oldname,
e523233315f44b8f77ab9c5143a3d80364ebf955Ondrej Kos const char *newname);
e523233315f44b8f77ab9c5143a3d80364ebf955Ondrej Kos
e523233315f44b8f77ab9c5143a3d80364ebf955Ondrej Kosint sysdb_attrs_users_from_str_list(struct sysdb_attrs *attrs,
const char *attr_name,
const char *domain,
const char *const *list);
errno_t sysdb_attrs_primary_name(struct sysdb_ctx *sysdb,
struct sysdb_attrs *attrs,
const char *ldap_attr,
const char **_primary);
errno_t sysdb_attrs_get_aliases(TALLOC_CTX *mem_ctx,
struct sysdb_attrs *attrs,
const char *primary,
bool lowercase,
const char ***_aliases);
errno_t sysdb_attrs_primary_name_list(struct sysdb_ctx *sysdb,
TALLOC_CTX *mem_ctx,
struct sysdb_attrs **attr_list,
size_t attr_count,
const char *ldap_attr,
char ***name_list);
errno_t sysdb_get_real_name(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *name,
const char **_cname);
errno_t sysdb_msg2attrs(TALLOC_CTX *mem_ctx, size_t count,
struct ldb_message **msgs,
struct sysdb_attrs ***attrs);
/* convert an ldb error into an errno error */
int sysdb_error_to_errno(int ldberr);
/* DNs related helper functions */
errno_t sysdb_get_rdn(struct sysdb_ctx *sysdb, TALLOC_CTX *mem_ctx,
const char *dn, char **_name, char **_val);
struct ldb_dn *sysdb_user_dn(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom,
const char *name);
struct ldb_dn *sysdb_group_dn(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom,
const char *name);
struct ldb_dn *sysdb_netgroup_dn(TALLOC_CTX *mem_ctx,
struct sss_domain_info *dom, const char *name);
struct ldb_dn *sysdb_netgroup_base_dn(TALLOC_CTX *mem_ctx,
struct sss_domain_info *dom);
errno_t sysdb_group_dn_name(struct sysdb_ctx *sysdb, TALLOC_CTX *mem_ctx,
const char *dn_str, char **name);
struct ldb_dn *sysdb_domain_dn(TALLOC_CTX *mem_ctx,
struct sss_domain_info *dom);
struct ldb_dn *sysdb_base_dn(struct sysdb_ctx *sysdb, TALLOC_CTX *mem_ctx);
struct ldb_dn *sysdb_custom_dn(TALLOC_CTX *mem_ctx,
struct sss_domain_info *dom,
const char *object_name,
const char *subtree_name);
struct ldb_dn *sysdb_custom_subtree_dn(TALLOC_CTX *mem_ctx,
struct sss_domain_info *dom,
const char *subtree_name);
char *sysdb_user_strdn(TALLOC_CTX *mem_ctx,
const char *domain, const char *name);
char *sysdb_group_strdn(TALLOC_CTX *mem_ctx,
const char *domain, const char *name);
struct ldb_context *sysdb_ctx_get_ldb(struct sysdb_ctx *sysdb);
int compare_ldb_dn_comp_num(const void *m1, const void *m2);
/* functions to start and finish transactions */
int sysdb_transaction_start(struct sysdb_ctx *sysdb);
int sysdb_transaction_commit(struct sysdb_ctx *sysdb);
int sysdb_transaction_cancel(struct sysdb_ctx *sysdb);
/* functions related to subdomains */
errno_t sysdb_domain_create(struct sysdb_ctx *sysdb, const char *domain_name);
errno_t sysdb_subdomain_store(struct sysdb_ctx *sysdb,
const char *name, const char *realm,
const char *flat_name, const char *domain_id,
bool mpg, bool enumerate, const char *forest);
errno_t sysdb_update_subdomains(struct sss_domain_info *domain);
errno_t sysdb_master_domain_update(struct sss_domain_info *domain);
errno_t sysdb_master_domain_add_info(struct sss_domain_info *domain,
const char *flat, const char *id,
const char* forest);
errno_t sysdb_subdomain_delete(struct sysdb_ctx *sysdb, const char *name);
errno_t sysdb_get_ranges(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb,
size_t *range_count,
struct range_info ***range_list);
errno_t sysdb_range_create(struct sysdb_ctx *sysdb, struct range_info *range);
errno_t sysdb_update_ranges(struct sysdb_ctx *sysdb,
struct range_info **ranges);
/* Sysdb initialization.
* call this function *only* once to initialize the database and get
* the sysdb ctx */
int sysdb_init(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domains,
bool allow_upgrade);
/* used to initialize only one domain database.
* Do NOT use if sysdb_init has already been called */
int sysdb_domain_init(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *db_path,
struct sysdb_ctx **_ctx);
/* functions to retrieve information from sysdb
* These functions automatically starts an operation
* therefore they cannot be called within a transaction */
int sysdb_getpwnam(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *name,
struct ldb_result **res);
int sysdb_getpwuid(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
uid_t uid,
struct ldb_result **res);
int sysdb_enumpwent(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
struct ldb_result **res);
int sysdb_getgrnam(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *name,
struct ldb_result **res);
int sysdb_getgrgid(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
gid_t gid,
struct ldb_result **res);
int sysdb_enumgrent(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
struct ldb_result **res);
struct sysdb_netgroup_ctx {
enum {SYSDB_NETGROUP_TRIPLE_VAL, SYSDB_NETGROUP_GROUP_VAL} type;
union {
struct {
char *hostname;
char *username;
char *domainname;
} triple;
char *groupname;
} value;
};
errno_t sysdb_getnetgr(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *netgroup,
struct ldb_result **res);
int sysdb_initgroups(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *name,
struct ldb_result **res);
int sysdb_get_user_attr(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *name,
const char **attributes,
struct ldb_result **res);
int sysdb_get_netgroup_attr(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *netgrname,
const char **attributes,
struct ldb_result **res);
errno_t sss_ldb_search(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
struct ldb_result **_result, struct ldb_dn *base,
enum ldb_scope scope, const char * const *attrs,
const char *exp_fmt, ...) SSS_ATTRIBUTE_PRINTF(7, 8);
/* functions that modify the databse
* they have to be called within a transaction
* See sysdb_transaction_send()/_recv() */
/* Permissive modify */
int sss_ldb_modify_permissive(struct ldb_context *ldb,
struct ldb_message *msg);
/* Delete Entry */
int sysdb_delete_entry(struct sysdb_ctx *sysdb,
struct ldb_dn *dn,
bool ignore_not_found);
int sysdb_delete_recursive(struct sysdb_ctx *sysdb,
struct ldb_dn *dn,
bool ignore_not_found);
/* Search Entry */
int sysdb_search_entry(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct ldb_dn *base_dn,
enum ldb_scope scope,
const char *filter,
const char **attrs,
size_t *_msgs_count,
struct ldb_message ***_msgs);
/* Search User (by uid, sid or name) */
int sysdb_search_user_by_name(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *name,
const char **attrs,
struct ldb_message **msg);
int sysdb_search_user_by_uid(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
uid_t uid,
const char **attrs,
struct ldb_message **msg);
int sysdb_search_user_by_sid_str(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *sid_str,
const char **attrs,
struct ldb_message **msg);
int sysdb_search_user_by_upn(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *sid_str,
const char **attrs,
struct ldb_message **msg);
/* Search Group (by gid, sid or name) */
int sysdb_search_group_by_name(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *name,
const char **attrs,
struct ldb_message **msg);
int sysdb_search_group_by_gid(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
gid_t gid,
const char **attrs,
struct ldb_message **msg);
int sysdb_search_group_by_sid_str(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *sid_str,
const char **attrs,
struct ldb_message **msg);
/* Search Netgroup (by name) */
int sysdb_search_netgroup_by_name(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *name,
const char **attrs,
struct ldb_message **msg);
/* Replace entry attrs */
int sysdb_set_entry_attr(struct sysdb_ctx *sysdb,
struct ldb_dn *entry_dn,
struct sysdb_attrs *attrs,
int mod_op);
/* Replace user attrs */
int sysdb_set_user_attr(struct sss_domain_info *domain,
const char *name,
struct sysdb_attrs *attrs,
int mod_op);
/* Replace group attrs */
int sysdb_set_group_attr(struct sss_domain_info *domain,
const char *name,
struct sysdb_attrs *attrs,
int mod_op);
/* Replace netgroup attrs */
int sysdb_set_netgroup_attr(struct sss_domain_info *domain,
const char *name,
struct sysdb_attrs *attrs,
int mod_op);
/* Allocate a new id */
int sysdb_get_new_id(struct sss_domain_info *domain,
uint32_t *id);
/* Add user (only basic attrs and w/o checks) */
int sysdb_add_basic_user(struct sss_domain_info *domain,
const char *name,
uid_t uid, gid_t gid,
const char *gecos,
const char *homedir,
const char *shell);
/* Add user (all checks) */
int sysdb_add_user(struct sss_domain_info *domain,
const char *name,
uid_t uid, gid_t gid,
const char *gecos,
const char *homedir,
const char *shell,
const char *orig_dn,
struct sysdb_attrs *attrs,
int cache_timeout,
time_t now);
/* Add group (only basic attrs and w/o checks) */
int sysdb_add_basic_group(struct sss_domain_info *domain,
const char *name, gid_t gid);
/* Add group (all checks) */
int sysdb_add_group(struct sss_domain_info *domain,
const char *name, gid_t gid,
struct sysdb_attrs *attrs,
int cache_timeout,
time_t now);
int sysdb_add_incomplete_group(struct sss_domain_info *domain,
const char *name,
gid_t gid,
const char *original_dn,
const char *sid_str,
bool posix,
time_t now);
/* Add netgroup (only basic attrs and w/o checks) */
int sysdb_add_basic_netgroup(struct sss_domain_info *domain,
const char *name, const char *description);
int sysdb_add_netgroup(struct sss_domain_info *domain,
const char *name,
const char *description,
struct sysdb_attrs *attrs,
char **missing,
int cache_timeout,
time_t now);
/* mod_op must be either LDB_FLAG_MOD_ADD or LDB_FLAG_MOD_DELETE */
int sysdb_mod_group_member(struct sss_domain_info *domain,
struct ldb_dn *member_dn,
struct ldb_dn *group_dn,
int mod_op);
int sysdb_store_user(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,
const char *orig_dn,
struct sysdb_attrs *attrs,
char **remove_attrs,
uint64_t cache_timeout,
time_t now);
int sysdb_store_group(struct sss_domain_info *domain,
const char *name,
gid_t gid,
struct sysdb_attrs *attrs,
uint64_t cache_timeout,
time_t now);
enum sysdb_member_type {
SYSDB_MEMBER_USER,
SYSDB_MEMBER_GROUP,
SYSDB_MEMBER_NETGROUP,
SYSDB_MEMBER_SERVICE,
};
int sysdb_add_group_member(struct sss_domain_info *domain,
const char *group,
const char *member,
enum sysdb_member_type type,
bool is_dn);
int sysdb_remove_group_member(struct sss_domain_info *domain,
const char *group,
const char *member,
enum sysdb_member_type type,
bool is_dn);
errno_t sysdb_update_members(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_update_members_dn(struct sss_domain_info *member_domain,
const char *member,
enum sysdb_member_type type,
const char *const *add_groups,
const char *const *del_groups);
/* 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(struct sss_domain_info *domain,
const char *username,
const char *password);
errno_t check_failed_login_attempts(struct confdb_ctx *cdb,
struct ldb_message *ldb_msg,
uint32_t *failed_login_attempts,
time_t *delayed_until);
int sysdb_cache_auth(struct sss_domain_info *domain,
const char *name,
const char *password,
struct confdb_ctx *cdb,
bool just_check,
time_t *_expire_date,
time_t *_delayed_until);
int sysdb_store_custom(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 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 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(struct sss_domain_info *domain,
const char *object_name,
const char *subtree_name);
int sysdb_asq_search(TALLOC_CTX *mem_ctx,
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 sss_domain_info *domain,
const char *sub_filter,
const char **attrs,
size_t *msgs_count,
struct ldb_message ***msgs);
int sysdb_delete_user(struct sss_domain_info *domain,
const char *name, uid_t uid);
int sysdb_search_groups(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *sub_filter,
const char **attrs,
size_t *msgs_count,
struct ldb_message ***msgs);
int sysdb_delete_group(struct sss_domain_info *domain,
const char *name, gid_t gid);
int sysdb_search_netgroups(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *sub_filter,
const char **attrs,
size_t *msgs_count,
struct ldb_message ***msgs);
int sysdb_delete_netgroup(struct sss_domain_info *domain,
const char *name);
int sysdb_delete_by_sid(struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *sid_str);
errno_t sysdb_attrs_to_list(TALLOC_CTX *mem_ctx,
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(TALLOC_CTX *mem_ctx, const char *input,
char **sanitized);
errno_t sysdb_get_bool(struct sysdb_ctx *sysdb,
struct ldb_dn *dn,
const char *attr_name,
bool *value);
errno_t sysdb_set_bool(struct sysdb_ctx *sysdb,
struct ldb_dn *dn,
const char *cn_value,
const char *attr_name,
bool value);
errno_t sysdb_has_enumerated(struct sss_domain_info *domain,
bool *has_enumerated);
errno_t sysdb_set_enumerated(struct sss_domain_info *domain,
bool enumerated);
errno_t sysdb_remove_attrs(struct sss_domain_info *domain,
const char *name,
enum sysdb_member_type type,
char **remove_attrs);
errno_t sysdb_get_direct_parents(TALLOC_CTX *mem_ctx,
struct sss_domain_info *dom,
enum sysdb_member_type mtype,
const char *name,
char ***_direct_parents);
/* === Functions related to ID-mapping === */
#define SYSDB_IDMAP_CONTAINER "cn=id_mappings"
#define SYSDB_IDMAP_SUBTREE "idmap"
#define SYSDB_IDMAP_MAPPING_OC "id_mapping"
#define SYSDB_IDMAP_FILTER "(objectClass="SYSDB_IDMAP_MAPPING_OC")"
#define SYSDB_IDMAP_SID_ATTR "objectSID"
#define SYSDB_IDMAP_SLICE_ATTR "slice"
#define SYSDB_IDMAP_ATTRS { \
SYSDB_NAME, \
SYSDB_IDMAP_SID_ATTR, \
SYSDB_IDMAP_SLICE_ATTR, \
NULL }
#define SYSDB_TMPL_IDMAP_BASE SYSDB_IDMAP_CONTAINER",cn=%s,"SYSDB_BASE
#define SYSDB_TMPL_IDMAP SYSDB_IDMAP_SID_ATTR"=%s,"SYSDB_TMPL_IDMAP_BASE
errno_t sysdb_idmap_store_mapping(struct sss_domain_info *domain,
const char *dom_name,
const char *dom_sid,
id_t slice_num);
errno_t sysdb_idmap_get_mappings(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
struct ldb_result **_result);
errno_t sysdb_search_object_by_sid(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *sid_str,
const char **attrs,
struct ldb_result **msg);
#endif /* __SYS_DB_H__ */