sysdb.h revision f17d26a8db285622a5cd5f21c7488b62eedc2cf8
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe/*
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SSSD
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe System Database Header
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe Copyright (C) Simo Sorce <ssorce@redhat.com> 2008
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe This program is free software; you can redistribute it and/or modify
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe it under the terms of the GNU General Public License as published by
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe the Free Software Foundation; either version 3 of the License, or
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe (at your option) any later version.
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe This program is distributed in the hope that it will be useful,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe but WITHOUT ANY WARRANTY; without even the implied warranty of
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe GNU General Public License for more details.
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe You should have received a copy of the GNU General Public License
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe along with this program. If not, see <http://www.gnu.org/licenses/>.
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe*/
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#ifndef __SYS_DB_H__
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define __SYS_DB_H__
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#include "util/util.h"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#include "confdb/confdb.h"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#include <tevent.h>
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_CONF_SECTION "config/sysdb"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define CACHE_SYSDB_FILE "cache_%s.ldb"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define LOCAL_SYSDB_FILE "sssd.ldb"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_BASE "cn=sysdb"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_DOM_BASE "cn=%s,cn=sysdb"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_USERS_CONTAINER "cn=users"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GROUPS_CONTAINER "cn=groups"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_CUSTOM_CONTAINER "cn=custom"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NETGROUP_CONTAINER "cn=Netgroups"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_RANGE_CONTAINER "cn=ranges"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_TMPL_USER_BASE SYSDB_USERS_CONTAINER",cn=%s,"SYSDB_BASE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_TMPL_GROUP_BASE SYSDB_GROUPS_CONTAINER",cn=%s,"SYSDB_BASE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_TMPL_CUSTOM_BASE SYSDB_CUSTOM_CONTAINER",cn=%s,"SYSDB_BASE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_TMPL_NETGROUP_BASE SYSDB_NETGROUP_CONTAINER",cn=%s,"SYSDB_BASE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_TMPL_RANGE_BASE SYSDB_RANGE_CONTAINER",cn=%s,"SYSDB_BASE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SUBDOMAIN_CLASS "subdomain"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_RANGE_CLASS "idrange"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_USER_CLASS "user"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GROUP_CLASS "group"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NETGROUP_CLASS "netgroup"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_HOST_CLASS "host"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_HOSTGROUP_CLASS "hostgroup"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SELINUX_USERMAP_CLASS "selinuxusermap"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SELINUX_CLASS "selinux"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_ID_RANGE_CLASS "idRange"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_DOMAIN_ID_RANGE_CLASS "domainIDRange"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_TRUSTED_AD_DOMAIN_RANGE_CLASS "TrustedADDomainRange"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NAME "name"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NAME_ALIAS "nameAlias"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_OBJECTCLASS "objectClass"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NEXTID "nextID"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_UIDNUM "uidNumber"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GIDNUM "gidNumber"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_CREATE_TIME "createTimestamp"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_PWD "userPassword"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_FULLNAME "fullName"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_HOMEDIR "homeDirectory"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SHELL "loginShell"
ede37debd29d607a8f0b3a6a9551669b06ff8870wrowe#define SYSDB_MEMBEROF "memberOf"
ede37debd29d607a8f0b3a6a9551669b06ff8870wrowe#define SYSDB_DISABLED "disabled"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_MEMBER "member"
44f635c1fcd33ff43339e01dcac5812c6a635ecewrowe#define SYSDB_MEMBERUID "memberUid"
44f635c1fcd33ff43339e01dcac5812c6a635ecewrowe#define SYSDB_GHOST "ghost"
44f635c1fcd33ff43339e01dcac5812c6a635ecewrowe#define SYSDB_POSIX "isPosix"
44f635c1fcd33ff43339e01dcac5812c6a635ecewrowe#define SYSDB_USER_CATEGORY "userCategory"
d7e95cd18c2c0109efb3b6f0f90cb0b344e3903cwrowe#define SYSDB_HOST_CATEGORY "hostCategory"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_DEFAULTGROUP "defaultGroup"
44f635c1fcd33ff43339e01dcac5812c6a635ecewrowe#define SYSDB_GECOS "gecos"
44f635c1fcd33ff43339e01dcac5812c6a635ecewrowe#define SYSDB_LOCALE "locale"
44f635c1fcd33ff43339e01dcac5812c6a635ecewrowe#define SYSDB_KEYBOARD "keyboard"
d7e95cd18c2c0109efb3b6f0f90cb0b344e3903cwrowe#define SYSDB_SESSION "session"
44f635c1fcd33ff43339e01dcac5812c6a635ecewrowe#define SYSDB_LAST_LOGIN "lastLogin"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_LAST_ONLINE_AUTH "lastOnlineAuth"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_USERPIC "userPicture"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_LAST_FAILED_LOGIN "lastFailedLogin"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_FAILED_LOGIN_ATTEMPTS "failedLoginAttempts"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_LAST_UPDATE "lastUpdate"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_CACHE_EXPIRE "dataExpireTimestamp"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_INITGR_EXPIRE "initgrExpireTimestamp"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_AUTHORIZED_SERVICE "authorizedService"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_AUTHORIZED_HOST "authorizedHost"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NETGROUP_TRIPLE "netgroupTriple"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_ORIG_NETGROUP_MEMBER "originalMemberNisNetgroup"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_ORIG_NETGROUP_EXTERNAL_HOST "originalExternalHost"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NETGROUP_DOMAIN "nisDomain"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NETGROUP_MEMBER "memberNisNetgroup"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_DESCRIPTION "description"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_FQDN "fqdn"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SERVERHOSTNAME "serverHostname"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SELINUX_SEEALSO "seeAlso"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SELINUX_USER "selinuxUser"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SELINUX_ENABLED "enabled"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SELINUX_HOST_PRIORITY "hostPriority"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_CACHEDPWD "cachedPassword"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_UUID "uniqueID"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SID "objectSID"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_PRIMARY_GROUP "ADPrimaryGroupID"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SID_STR "objectSIDString"
44f635c1fcd33ff43339e01dcac5812c6a635ecewrowe#define SYSDB_UPN "userPrincipalName"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_CCACHE_FILE "ccacheFile"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_ORIG_DN "originalDN"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_ORIG_MODSTAMP "originalModifyTimestamp"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_ORIG_MEMBEROF "originalMemberOf"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_ORIG_MEMBER_USER "originalMemberUser"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_ORIG_MEMBER_HOST "originalMemberHost"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_USN "entryUSN"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_HIGH_USN "highestUSN"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SSH_PUBKEY "sshPublicKey"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SUBDOMAIN_REALM "realmName"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SUBDOMAIN_FLAT "flatName"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SUBDOMAIN_ID "domainID"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_BASE_ID "baseID"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_ID_RANGE_SIZE "idRangeSize"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_BASE_RID "baseRID"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_SECONDARY_BASE_RID "secondaryBaseRID"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_DOMAIN_ID "domainID"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NEXTID_FILTER "("SYSDB_NEXTID"=*)"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_UC "objectclass="SYSDB_USER_CLASS
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GC "objectclass="SYSDB_GROUP_CLASS
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NC "objectclass="SYSDB_NETGROUP_CLASS
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_MPGC "|("SYSDB_UC")("SYSDB_GC")"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_PWNAM_FILTER "(&("SYSDB_UC")(|("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME"=%s)))"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_PWUID_FILTER "(&("SYSDB_UC")("SYSDB_UIDNUM"=%lu))"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_PWENT_FILTER "("SYSDB_UC")"
44f635c1fcd33ff43339e01dcac5812c6a635ecewrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GRNAM_FILTER "(&("SYSDB_GC")(|("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME"=%s)))"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GRNA2_FILTER "(&("SYSDB_UC")("SYSDB_MEMBEROF"=%s))"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GRGID_FILTER "(&("SYSDB_GC")("SYSDB_GIDNUM"=%lu))"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GRENT_FILTER "("SYSDB_GC")"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GRNAM_MPG_FILTER "(&("SYSDB_MPGC")(|("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME"=%s)))"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GRGID_MPG_FILTER "(&("SYSDB_MPGC")("SYSDB_GIDNUM"=%lu))"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GRENT_MPG_FILTER "("SYSDB_MPGC")"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_INITGR_FILTER "(&("SYSDB_GC")("SYSDB_GIDNUM"=*))"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GETCACHED_FILTER "(&"SYSDB_UC")("SYSDB_LAST_LOGIN">=%lu))"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NETGR_FILTER "(&("SYSDB_NC")(|("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME"=%s)))"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NETGR_TRIPLES_FILTER "(|("SYSDB_NAME"=%s)("SYSDB_NAME_ALIAS"=%s)("SYSDB_MEMBEROF"=%s))"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_HAS_ENUMERATED "has_enumerated"
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_DEFAULT_ATTRS SYSDB_LAST_UPDATE, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_CACHE_EXPIRE, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_INITGR_EXPIRE, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_OBJECTCLASS
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_PW_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_GIDNUM, SYSDB_GECOS, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_HOMEDIR, SYSDB_SHELL, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_DEFAULT_ATTRS, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe NULL}
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GRSRC_ATTRS {SYSDB_NAME, SYSDB_GIDNUM, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_MEMBERUID, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_GHOST, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_DEFAULT_ATTRS, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe NULL}
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GRPW_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_DEFAULT_ATTRS, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe NULL}
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_GRENT_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, SYSDB_MEMBEROF, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_DEFAULT_ATTRS, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe NULL}
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_NETGR_ATTRS {SYSDB_NAME, SYSDB_NETGROUP_TRIPLE, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_NETGROUP_MEMBER, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_DEFAULT_ATTRS, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe NULL}
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_INITGR_ATTR SYSDB_MEMBEROF
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_INITGR_ATTRS {SYSDB_GIDNUM, SYSDB_POSIX, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe SYSDB_DEFAULT_ATTRS, \
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe NULL}
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_TMPL_USER SYSDB_NAME"=%s,"SYSDB_TMPL_USER_BASE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_TMPL_GROUP SYSDB_NAME"=%s,"SYSDB_TMPL_GROUP_BASE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_TMPL_NETGROUP SYSDB_NAME"=%s,"SYSDB_TMPL_NETGROUP_BASE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_TMPL_CUSTOM_SUBTREE "cn=%s,"SYSDB_TMPL_CUSTOM_BASE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_TMPL_CUSTOM SYSDB_NAME"=%s,cn=%s,"SYSDB_TMPL_CUSTOM_BASE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_TMPL_RANGE SYSDB_NAME"=%s,"SYSDB_TMPL_RANGE_BASE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_MOD_ADD LDB_FLAG_MOD_ADD
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_MOD_DEL LDB_FLAG_MOD_DELETE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe#define SYSDB_MOD_REP LDB_FLAG_MOD_REPLACE
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct confdb_ctx;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct sysdb_ctx;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct sysdb_ctx_list {
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe struct sysdb_ctx **dbs;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe size_t num_dbs;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe char *db_path;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe};
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct sysdb_attrs {
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe int num;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe struct ldb_message_element *a;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe};
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe/* sysdb_attrs helper functions */
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct sysdb_attrs *sysdb_new_attrs(TALLOC_CTX *mem_ctx);
d7e95cd18c2c0109efb3b6f0f90cb0b344e3903cwrowe
d7e95cd18c2c0109efb3b6f0f90cb0b344e3903cwrowestruct sysdb_subdom {
d7e95cd18c2c0109efb3b6f0f90cb0b344e3903cwrowe const char *realm;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *name;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *flat_name;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *id;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe};
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct range_info {
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe char *name;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe uint32_t base_id;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe uint32_t id_range_size;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe uint32_t base_rid;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe uint32_t secondary_base_rid;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe char *trusted_dom_sid;
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe};
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe/* values are copied in the structure, allocated on "attrs" */
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_add_val(struct sysdb_attrs *attrs,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *name, const struct ldb_val *val);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_add_string(struct sysdb_attrs *attrs,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *name, const char *str);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_add_bool(struct sysdb_attrs *attrs,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *name, bool value);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_add_long(struct sysdb_attrs *attrs,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *name, long value);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_add_uint32(struct sysdb_attrs *attrs,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *name, uint32_t value);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_add_time_t(struct sysdb_attrs *attrs,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *name, time_t value);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_copy_values(struct sysdb_attrs *src,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe struct sysdb_attrs *dst,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *name);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_get_el(struct sysdb_attrs *attrs, const char *name,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe struct ldb_message_element **el);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_get_el_ext(struct sysdb_attrs *attrs, const char *name,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe bool alloc, struct ldb_message_element **el);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_steal_string(struct sysdb_attrs *attrs,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *name, char *str);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_get_string(struct sysdb_attrs *attrs, const char *name,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char **string);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_get_string_array(struct sysdb_attrs *attrs, const char *name,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe TALLOC_CTX *mem_ctx, const char ***string);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweerrno_t sysdb_attrs_get_bool(struct sysdb_attrs *attrs, const char *name,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe bool *value);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_get_uint16_t(struct sysdb_attrs *attrs, const char *name,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe uint16_t *value);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_get_uint32_t(struct sysdb_attrs *attrs, const char *name,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe uint32_t *value);
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_replace_name(struct sysdb_attrs *attrs, const char *oldname,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *newname);
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_attrs_users_from_str_list(struct sysdb_attrs *attrs,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *attr_name,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *domain,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *const *list);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweerrno_t sysdb_attrs_primary_name(struct sysdb_ctx *sysdb,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe struct sysdb_attrs *attrs,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *ldap_attr,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char **_primary);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweerrno_t sysdb_attrs_get_aliases(TALLOC_CTX *mem_ctx,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe struct sysdb_attrs *attrs,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *primary,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe bool lowercase,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char ***_aliases);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweerrno_t sysdb_attrs_primary_name_list(struct sysdb_ctx *sysdb,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe TALLOC_CTX *mem_ctx,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe struct sysdb_attrs **attr_list,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe size_t attr_count,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *ldap_attr,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe char ***name_list);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweerrno_t sysdb_get_real_name(TALLOC_CTX *mem_ctx,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe struct sysdb_ctx *sysdb,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *name,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char **_cname);
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweerrno_t sysdb_msg2attrs(TALLOC_CTX *mem_ctx, size_t count,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe struct ldb_message **msgs,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe struct sysdb_attrs ***attrs);
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe/* convert an ldb error into an errno error */
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweint sysdb_error_to_errno(int ldberr);
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe/* DNs related helper functions */
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweerrno_t sysdb_get_rdn(struct sysdb_ctx *sysdb, void *mem_ctx,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *_dn, char **_name, char **_val);
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct ldb_dn *sysdb_user_dn(struct sysdb_ctx *sysdb, void *mem_ctx,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *domain, const char *name);
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct ldb_dn *sysdb_group_dn(struct sysdb_ctx *sysdb, void *mem_ctx,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *domain, const char *name);
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct ldb_dn *sysdb_netgroup_dn(struct sysdb_ctx *sysdb, void *mem_ctx,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *domain, const char *name);
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct ldb_dn *sysdb_netgroup_base_dn(struct sysdb_ctx *sysdb, void *mem_ctx,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *domain);
d15674e194392bfaedba1fe2fccc9297e4e20da6wroweerrno_t sysdb_group_dn_name(struct sysdb_ctx *sysdb, void *mem_ctx,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *dn_str, char **name);
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct ldb_dn *sysdb_domain_dn(struct sysdb_ctx *sysdb, void *mem_ctx,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *domain);
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct ldb_dn *sysdb_custom_dn(struct sysdb_ctx *sysdb, void *mem_ctx,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *domain, const char *object_name,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *subtree_name);
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowestruct ldb_dn *sysdb_custom_subtree_dn(struct sysdb_ctx *sysdb, void *mem_ctx,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe const char *domain,
d15674e194392bfaedba1fe2fccc9297e4e20da6wrowe 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);
struct sss_domain_info *sysdb_ctx_get_domain(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_get_subdomains(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
size_t *subdomain_count,
struct sysdb_subdom ***subdomain_list);
errno_t sysdb_domain_create(struct sysdb_ctx *sysdb, const char *domain_name);
errno_t sysdb_update_subdomains(struct sysdb_ctx *sysdb,
int num_subdoms,
struct sysdb_subdom *subdoms);
errno_t sysdb_get_subdomain_context(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct sss_domain_info *subdomain,
struct sysdb_ctx **subdomain_ctx);
errno_t sysdb_master_domain_get_info(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct sysdb_subdom **info);
errno_t sysdb_master_domain_add_info(struct sysdb_ctx *sysdb,
struct sysdb_subdom *domain_info);
errno_t sysdb_search_domuser_by_name(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *name,
const char **attrs,
struct ldb_message **msg);
errno_t sysdb_search_domuser_by_uid(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
uid_t uid,
const char **attrs,
struct ldb_message **msg);
errno_t sysdb_store_domuser(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,
char **remove_attrs,
uint64_t cache_timeout,
time_t now);
errno_t sysdb_delete_domuser(struct sss_domain_info *domain,
const char *name, uid_t uid);
errno_t sysdb_search_domgroup_by_name(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *name,
const char **attrs,
struct ldb_message **msg);
errno_t sysdb_search_domgroup_by_gid(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
gid_t gid,
const char **attrs,
struct ldb_message **msg);
errno_t sysdb_store_domgroup(struct sss_domain_info *domain,
const char *name,
gid_t gid,
struct sysdb_attrs *attrs,
uint64_t cache_timeout,
time_t now);
errno_t sysdb_delete_domgroup(struct sss_domain_info *domain,
const char *name, gid_t gid);
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 confdb_ctx *cdb,
const char *alt_db_path,
bool allow_upgrade,
struct sysdb_ctx_list **_ctx_list);
/* 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);
errno_t sysdb_init_domain_and_sysdb(TALLOC_CTX *mem_ctx,
struct confdb_ctx *cdb,
const char *domain_name,
const char *db_path,
struct sss_domain_info **_domain,
struct sysdb_ctx **_ctx);
int sysdb_list_init(TALLOC_CTX *mem_ctx,
const char *path,
struct sysdb_ctx *sysdb,
struct sysdb_ctx_list **_list);
errno_t sysdb_add_to_domain(struct sss_domain_info *domain,
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 sysdb_ctx *sysdb,
const char *name,
struct ldb_result **res);
int sysdb_getpwuid(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
uid_t uid,
struct ldb_result **res);
int sysdb_enumpwent(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct ldb_result **res);
int sysdb_getgrnam(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
const char *name,
struct ldb_result **res);
int sysdb_getgrgid(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
gid_t gid,
struct ldb_result **res);
int sysdb_enumgrent(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
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 sysdb_ctx *sysdb,
const char *netgroup,
struct ldb_result **res);
int sysdb_initgroups(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
const char *name,
struct ldb_result **res);
int sysdb_get_user_attr(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
const char *name,
const char **attributes,
struct ldb_result **res);
int sysdb_get_netgroup_attr(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
const char *netgrname,
const char **attributes,
struct ldb_result **res);
/* functions that modify the databse
* they have to be called within a transaction
* See sysdb_transaction_send()/_recv() */
/* 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,
int scope,
const char *filter,
const char **attrs,
size_t *msgs_count,
struct ldb_message ***msgs);
/* Search User (by uid or name) */
int sysdb_search_user_by_name(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
const char *name,
const char **attrs,
struct ldb_message **msg);
int sysdb_search_user_by_uid(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
uid_t uid,
const char **attrs,
struct ldb_message **msg);
/* Search Group (by gid or name) */
int sysdb_search_group_by_name(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
const char *name,
const char **attrs,
struct ldb_message **msg);
int sysdb_search_group_by_gid(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
gid_t gid,
const char **attrs,
struct ldb_message **msg);
/* Search Netgroup (by name) */
int sysdb_search_netgroup_by_name(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
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 sysdb_ctx *sysdb,
const char *name,
struct sysdb_attrs *attrs,
int mod_op);
/* Replace group attrs */
int sysdb_set_group_attr(struct sysdb_ctx *sysdb,
const char *name,
struct sysdb_attrs *attrs,
int mod_op);
/* Replace netgroup attrs */
int sysdb_set_netgroup_attr(struct sysdb_ctx *sysdb,
const char *name,
struct sysdb_attrs *attrs,
int mod_op);
/* Allocate a new id */
int sysdb_get_new_id(struct sysdb_ctx *sysdb,
uint32_t *id);
/* Add user (only basic attrs and w/o checks) */
int sysdb_add_basic_user(struct sysdb_ctx *sysdb,
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 sysdb_ctx *sysdb,
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,
time_t now);
/* Add group (only basic attrs and w/o checks) */
int sysdb_add_basic_group(struct sysdb_ctx *sysdb,
const char *name, gid_t gid);
/* Add group (all checks) */
int sysdb_add_group(struct sysdb_ctx *sysdb,
const char *name, gid_t gid,
struct sysdb_attrs *attrs,
int cache_timeout,
time_t now);
int sysdb_add_incomplete_group(struct sysdb_ctx *sysdb,
const char *name,
gid_t gid,
const char *original_dn, bool posix,
time_t now);
/* Add netgroup (only basic attrs and w/o checks) */
int sysdb_add_basic_netgroup(struct sysdb_ctx *sysdb,
const char *name, const char *description);
int sysdb_add_netgroup(struct sysdb_ctx *sysdb,
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 sysdb_ctx *sysdb,
struct ldb_dn *member_dn,
struct ldb_dn *group_dn,
int mod_op);
int sysdb_store_user(struct sysdb_ctx *sysdb,
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,
char **remove_attrs,
uint64_t cache_timeout,
time_t now);
int sysdb_store_group(struct sysdb_ctx *sysdb,
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 sysdb_ctx *sysdb,
const char *group,
const char *member,
enum sysdb_member_type type);
int sysdb_remove_group_member(struct sysdb_ctx *sysdb,
const char *group,
const char *member,
enum sysdb_member_type type);
errno_t sysdb_update_members(struct sysdb_ctx *sysdb,
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,
const char *netgroup,
const char *hostname,
const char *username,
const char *domainname);
errno_t sysdb_remove_netgroup_tuple(struct sysdb_ctx *sysdb,
const char *netgroup,
const char *hostname,
const char *username,
const char *domainname);
errno_t sysdb_mod_netgroup_tuple(struct sysdb_ctx *sysdb,
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,
const char *netgroup,
const char *member_netgroup);
errno_t sysdb_remove_netgroup_member(struct sysdb_ctx *sysdb,
const char *netgroup,
const char *member_netgroup);
errno_t sysdb_mod_netgroup_member(struct sysdb_ctx *sysdb,
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(struct sysdb_ctx *sysdb,
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 sysdb_ctx *sysdb,
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(struct sysdb_ctx *sysdb,
const char *object_name,
const char *subtree_name,
struct sysdb_attrs *attrs);
int sysdb_search_custom(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
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,
const char *object_name,
const char *subtree_name,
const char **attrs,
size_t *_count,
struct ldb_message ***_msgs);
int sysdb_delete_custom(struct sysdb_ctx *sysdb,
const char *object_name,
const char *subtree_name);
int sysdb_asq_search(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
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,
const char *sub_filter,
const char **attrs,
size_t *msgs_count,
struct ldb_message ***msgs);
int sysdb_delete_user(struct sysdb_ctx *sysdb,
const char *name, uid_t uid);
int sysdb_search_groups(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
const char *sub_filter,
const char **attrs,
size_t *msgs_count,
struct ldb_message ***msgs);
int sysdb_delete_group(struct sysdb_ctx *sysdb,
const char *name, gid_t gid);
int sysdb_search_netgroups(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
const char *sub_filter,
const char **attrs,
size_t *msgs_count,
struct ldb_message ***msgs);
int sysdb_delete_netgroup(struct sysdb_ctx *sysdb,
const char *name);
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(void *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 sysdb_ctx *sysdb,
bool *has_enumerated);
errno_t sysdb_set_enumerated(struct sysdb_ctx *sysdb,
bool enumerated);
errno_t sysdb_remove_attrs(struct sysdb_ctx *sysdb,
const char *name,
enum sysdb_member_type type,
char **remove_attrs);
errno_t sysdb_get_direct_parents(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
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
struct ldb_dn *sysdb_idmap_dn(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb,
const char *object_sid);
errno_t sysdb_idmap_store_mapping(struct sysdb_ctx *sysdb,
const char *dom_name,
const char *dom_sid,
id_t slice_num);
errno_t sysdb_idmap_get_mappings(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *sysdb,
struct ldb_result **_result);
#endif /* __SYS_DB_H__ */