ldap_common.c revision 42165bd9ada160e68ab0dbdeb21ed397486aa830
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen LDAP Provider Common Functions
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen Simo Sorce <ssorce@redhat.com>
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen Copyright (C) 2008-2010 Red Hat
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen This program is free software; you can redistribute it and/or modify
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen it under the terms of the GNU General Public License as published by
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen the Free Software Foundation; either version 3 of the License, or
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen (at your option) any later version.
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen This program is distributed in the hope that it will be useful,
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen but WITHOUT ANY WARRANTY; without even the implied warranty of
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen GNU General Public License for more details.
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen You should have received a copy of the GNU General Public License
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen along with this program. If not, see <http://www.gnu.org/licenses/>.
f6a21dbf70e816c33bfb1ce91728d06bd7d5758fTimo Sirainen/* a fd the child process would log into */
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_uri", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_search_base", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_default_bind_dn", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_default_authtok_type", DP_OPT_STRING, NULL_STRING, NULL_STRING},
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_default_authtok", DP_OPT_BLOB, NULL_BLOB, NULL_BLOB },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_search_timeout", DP_OPT_NUMBER, { .number = 60 }, NULL_NUMBER },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_network_timeout", DP_OPT_NUMBER, { .number = 6 }, NULL_NUMBER },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_opt_timeout", DP_OPT_NUMBER, { .number = 6 }, NULL_NUMBER },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_tls_reqcert", DP_OPT_STRING, { "hard" }, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_search_base", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_search_scope", DP_OPT_STRING, { "sub" }, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_search_filter", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_search_base", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_search_scope", DP_OPT_STRING, { "sub" }, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_search_filter", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_schema", DP_OPT_STRING, { "rfc2307" }, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_offline_timeout", DP_OPT_NUMBER, { .number = 60 }, NULL_NUMBER },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_force_upper_case_realm", DP_OPT_BOOL, BOOL_FALSE, BOOL_FALSE },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_enumeration_refresh_timeout", DP_OPT_NUMBER, { .number = 300 }, NULL_NUMBER },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_purge_cache_timeout", DP_OPT_NUMBER, { .number = 10800 }, NULL_NUMBER },
573424407a2d3c1453638a643583a7cf10c129e1Phil Carmody { "entry_cache_timeout", DP_OPT_NUMBER, { .number = 5400 }, NULL_NUMBER },
573424407a2d3c1453638a643583a7cf10c129e1Phil Carmody { "ldap_tls_cacert", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_tls_cacertdir", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_id_use_start_tls", DP_OPT_BOOL, BOOL_FALSE, BOOL_FALSE },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_sasl_mech", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_sasl_authid", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_krb5_keytab", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_krb5_init_creds", DP_OPT_BOOL, BOOL_TRUE, BOOL_TRUE },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen /* use the same parm name as the krb5 module so we set it only once */
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "krb5_server", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "krb5_realm", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_pwd_policy", DP_OPT_STRING, { "none" }, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_referrals", DP_OPT_BOOL, BOOL_TRUE, BOOL_TRUE },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "account_cache_expiration", DP_OPT_NUMBER, { .number = 0 }, NULL_NUMBER },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_dns_service_name", DP_OPT_STRING, { SSS_LDAP_SRV_NAME }, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_krb5_ticket_lifetime", DP_OPT_NUMBER, { .number = (24 * 60 * 60) }, NULL_NUMBER },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_access_filter", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_netgroup_search_base", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_nesting_level", DP_OPT_NUMBER, { .number = 2 }, NULL_NUMBER },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_deref", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_account_expire_policy", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_access_order", DP_OPT_STRING, { "filter" }, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_chpass_uri", DP_OPT_STRING, NULL_STRING, NULL_STRING },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_chpass_dns_service_name", DP_OPT_STRING, NULL_STRING, NULL_STRING }
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_rootdse_last_usn", NULL, SYSDB_HIGH_USN, NULL }
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_entry_usn", SDAP_IPA_USN, SYSDB_USN, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_rootdse_last_usn", SDAP_IPA_LAST_USN, SYSDB_HIGH_USN, NULL }
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_entry_usn", SDAP_AD_USN, SYSDB_USN, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_rootdse_last_usn", SDAP_AD_LAST_USN, SYSDB_HIGH_USN, NULL }
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_object_class", "posixAccount", SYSDB_USER_CLASS, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_name", "uid", SYSDB_NAME, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_pwd", "userPassword", SYSDB_PWD, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_uid_number", "uidNumber", SYSDB_UIDNUM, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_gid_number", "gidNumber", SYSDB_GIDNUM, NULL },
d868a04630bd7bfe9c1543a7c3f68703b3e276e4Timo Sirainen { "ldap_user_gecos", "gecos", SYSDB_GECOS, NULL },
d868a04630bd7bfe9c1543a7c3f68703b3e276e4Timo Sirainen { "ldap_user_home_directory", "homeDirectory", SYSDB_HOMEDIR, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shell", "loginShell", SYSDB_SHELL, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_principal", "krbPrincipalName", SYSDB_UPN, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_fullname", "cn", SYSDB_FULLNAME, NULL },
131b0d222ad89b2c5d2b03b865b45cae9e290d68Timo Sirainen { "ldap_user_member_of", NULL, SYSDB_MEMBEROF, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_modify_timestamp", "modifyTimestamp", SYSDB_ORIG_MODSTAMP, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_entry_usn", NULL, SYSDB_USN, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_last_change", "shadowLastChange", SYSDB_SHADOWPW_LASTCHANGE, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_min", "shadowMin", SYSDB_SHADOWPW_MIN, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_max", "shadowMax", SYSDB_SHADOWPW_MAX, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_warning", "shadowWarning", SYSDB_SHADOWPW_WARNING, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_inactive", "shadowInactive", SYSDB_SHADOWPW_INACTIVE, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_expire", "shadowExpire", SYSDB_SHADOWPW_EXPIRE, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_flag", "shadowFlag", SYSDB_SHADOWPW_FLAG, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_krb_last_pwd_change", "krbLastPwdChange", SYSDB_KRBPW_LASTCHANGE, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_krb_password_expiration", "krbPasswordExpiration", SYSDB_KRBPW_EXPIRATION, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_pwd_attribute", "pwdAttribute", SYSDB_PWD_ATTRIBUTE, NULL }
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_object_class", "posixGroup", SYSDB_GROUP_CLASS, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_name", "cn", SYSDB_NAME, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_pwd", "userPassword", SYSDB_PWD, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_gid_number", "gidNumber", SYSDB_GIDNUM, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_member", "memberuid", SYSDB_MEMBER, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_uuid", NULL, SYSDB_UUID, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_modify_timestamp", "modifyTimestamp", SYSDB_ORIG_MODSTAMP, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_entry_usn", NULL, SYSDB_USN, NULL }
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_object_class", "posixAccount", SYSDB_USER_CLASS, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_name", "uid", SYSDB_NAME, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_pwd", "userPassword", SYSDB_PWD, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_uid_number", "uidNumber", SYSDB_UIDNUM, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_gid_number", "gidNumber", SYSDB_GIDNUM, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_gecos", "gecos", SYSDB_GECOS, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_home_directory", "homeDirectory", SYSDB_HOMEDIR, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shell", "loginShell", SYSDB_SHELL, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_principal", "krbPrincipalName", SYSDB_UPN, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_fullname", "cn", SYSDB_FULLNAME, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_member_of", "memberOf", SYSDB_MEMBEROF, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen /* FIXME: this is 389ds specific */
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_uuid", "nsUniqueId", SYSDB_UUID, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_modify_timestamp", "modifyTimestamp", SYSDB_ORIG_MODSTAMP, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_entry_usn", NULL, SYSDB_USN, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_last_change", "shadowLastChange", SYSDB_SHADOWPW_LASTCHANGE, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_min", "shadowMin", SYSDB_SHADOWPW_MIN, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_max", "shadowMax", SYSDB_SHADOWPW_MAX, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_warning", "shadowWarning", SYSDB_SHADOWPW_WARNING, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_inactive", "shadowInactive", SYSDB_SHADOWPW_INACTIVE, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_expire", "shadowExpire", SYSDB_SHADOWPW_EXPIRE, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_shadow_flag", "shadowFlag", SYSDB_SHADOWPW_FLAG, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_krb_last_pwd_change", "krbLastPwdChange", SYSDB_KRBPW_LASTCHANGE, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_user_krb_password_expiration", "krbPasswordExpiration", SYSDB_KRBPW_EXPIRATION, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_pwd_attribute", "pwdAttribute", SYSDB_PWD_ATTRIBUTE, NULL }
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainenstruct sdap_attr_map rfc2307bis_group_map[] = {
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_object_class", "posixGroup", SYSDB_GROUP_CLASS, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_name", "cn", SYSDB_NAME, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_pwd", "userPassword", SYSDB_PWD, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_gid_number", "gidNumber", SYSDB_GIDNUM, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_member", "member", SYSDB_MEMBER, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen /* FIXME: this is 389ds specific */
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_uuid", "nsUniqueId", SYSDB_UUID, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_modify_timestamp", "modifyTimestamp", SYSDB_ORIG_MODSTAMP, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_group_entry_usn", NULL, SYSDB_USN, NULL }
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_netgroup_object_class", "nisNetgroup", SYSDB_NETGROUP_CLASS, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_netgroup_name", "cn", SYSDB_NAME, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_netgroup_member", "memberNisNetgroup", SYSDB_ORIG_NETGROUP_MEMBER, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_netgroup_triple", "nisNetgroupTriple", SYSDB_NETGROUP_TRIPLE, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen /* FIXME: this is 389ds specific */
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_netgroup_uuid", "nsUniqueId", SYSDB_UUID, NULL },
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen { "ldap_netgroup_modify_timestamp", "modifyTimestamp", SYSDB_ORIG_MODSTAMP, NULL }
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen const int search_base_options[] = { SDAP_USER_SEARCH_BASE,
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen opts = talloc_zero(memctx, struct sdap_options);
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen search_base = dp_opt_get_string(opts->basic, SDAP_SEARCH_BASE);
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen /* set user/group/netgroup search bases if they are not */
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen for (o = 0; search_base_options[o] != -1; o++) {
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen if (NULL == dp_opt_get_string(opts->basic, search_base_options[o])) {
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen ret = dp_opt_set_string(opts->basic, search_base_options[o],
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen DEBUG(5, ("Search base not set, trying to discover it later when "
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen "connecting to the LDAP server.\n"));
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen pwd_policy = dp_opt_get_string(opts->basic, SDAP_PWD_POLICY);
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen DEBUG(1, ("Missing password policy, this may not happen.\n"));
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen if (strcasecmp(pwd_policy, PWD_POL_OPT_NONE) != 0 &&
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen strcasecmp(pwd_policy, PWD_POL_OPT_SHADOW) != 0 &&
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen strcasecmp(pwd_policy, PWD_POL_OPT_MIT) != 0) {
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen DEBUG(1, ("Unsupported password policy [%s].\n", pwd_policy));
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen /* account_cache_expiration must be >= than offline_credentials_expiration */
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen ret = confdb_get_int(cdb, memctx, CONFDB_PAM_CONF_ENTRY,
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen DEBUG(1, ("Cannot get value of %s from confdb \n",
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen account_cache_expiration = dp_opt_get_int(opts->basic,
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen /* account cache_expiration must not be smaller than
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen * offline_credentials_expiration to prevent deleting entries that
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen * still contain credentials valid for offline login.
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen * offline_credentials_expiration == 0 is a special case that says
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen * that the cached credentials are valid forever. Therefore, the cached
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen * entries must not be purged from cache.
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen if (!offline_credentials_expiration && account_cache_expiration) {
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen DEBUG(1, ("Conflicting values for options %s (unlimited) "
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen "and %s (%d)\n",
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen opts->basic[SDAP_ACCOUNT_CACHE_EXPIRATION].opt_name,
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen if (offline_credentials_expiration && account_cache_expiration &&
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen offline_credentials_expiration > account_cache_expiration) {
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen DEBUG(1, ("Value of %s (now %d) must be larger "
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen "than value of %s (now %d)\n",
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen opts->basic[SDAP_ACCOUNT_CACHE_EXPIRATION].opt_name,
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen ldap_deref = dp_opt_get_string(opts->basic, SDAP_DEREF);
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen ret = deref_string_to_val(ldap_deref, &ldap_deref_val);
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen DEBUG(1, ("Failed to verify ldap_deref option.\n"));
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen ldap_referrals = dp_opt_get_bool(opts->basic, SDAP_REFERRALS);
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen DEBUG(1, ("LDAP referrals are not supported, because the LDAP library "
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen "is too old, see sssd-ldap(5) for details.\n"));
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen ret = dp_opt_set_bool(opts->basic, SDAP_REFERRALS, false);
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen /* schema type */
a49d1c2ca3c134c0c62b37a94936c78e9849e044Timo Sirainen schema = dp_opt_get_string(opts->basic, SDAP_SCHEMA);
goto done;
goto done;
goto done;
goto done;
goto done;
goto done;
done:
return ret;
int delay;
if (delay == 0) {
return EOK;
return ret;
const char *tmp;
char *new_uri;
if (!service) return;
if (!tmp) {
tmp,
if (!new_uri) {
int signum,
int count,
void *siginfo,
void *private_data)
int ret;
const char *realm)
char *sig_realm;
return ENOMEM;
return ENOMEM;
return EOK;
int ret;
struct remove_info_files_ctx);
const char *realm,
const char *service_name)
int ret;
return ENOMEM;
goto done;
goto done;
done:
return ret;
int ret;
const char *krb5_servers;
const char *krb5_realm;
goto done;
goto done;
goto done;
goto done;
done:
return ret;
char *srv_user_data;
int ret;
if (!tmp_ctx) {
return ENOMEM;
if (!service) {
goto done;
goto done;
goto done;
if (!urls) {
goto done;
for (i = 0; list[i]; i++) {
if (!dns_service_name) {
service_name));
goto done;
if (!srv_user_data) {
goto done;
if (ret) {
goto done;
goto done;
if (ret) {
goto done;
goto done;
done:
return ret;
char *endptr;
return EOK;
errno = 0;
if (errno != 0) {
return errno;
return EINVAL;
return EINVAL;
return EOK;