sysdb_autofs.c revision 6ab9f4763b516c3a7cdc021f501f276dd805fc97
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek/*
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek Authors:
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek Jakub Hrozek <jhrozek@redhat.com>
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek Copyright (C) 2012 Red Hat
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek This program is free software; you can redistribute it and/or modify
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek it under the terms of the GNU General Public License as published by
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek the Free Software Foundation; either version 3 of the License, or
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek (at your option) any later version.
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek This program is distributed in the hope that it will be useful,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek but WITHOUT ANY WARRANTY; without even the implied warranty of
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek GNU General Public License for more details.
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek You should have received a copy of the GNU General Public License
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek along with this program. If not, see <http://www.gnu.org/licenses/>.
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek*/
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek#include <talloc.h>
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek#include "db/sysdb.h"
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek#include "db/sysdb_private.h"
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek#include "db/sysdb_autofs.h"
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek#define SYSDB_TMPL_AUTOFS_ENTRY SYSDB_NAME"=%s,"SYSDB_TMPL_CUSTOM
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozekstatic struct ldb_dn *
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozeksysdb_autofsmap_dn(TALLOC_CTX *mem_ctx,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek struct sysdb_ctx *sysdb,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek const char *map_name)
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek{
95f5e7963a36b7b68859ce91ae4b232088bbaa09Jakub Hrozek return sysdb_custom_dn(sysdb, mem_ctx, map_name, AUTOFS_MAP_SUBDIR);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek}
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozekstatic struct ldb_dn *
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozeksysdb_autofsentry_dn(TALLOC_CTX *mem_ctx,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek struct sysdb_ctx *sysdb,
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek const char *map_name,
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek const char *entry_name,
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek const char *entry_value)
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek{
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek errno_t ret;
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek TALLOC_CTX *tmp_ctx;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek char *clean_name;
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek char *clean_value;
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek const char *rdn;
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek struct ldb_dn *dn = NULL;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek tmp_ctx = talloc_new(NULL);
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek if (!tmp_ctx) {
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek return NULL;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek }
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek ret = sysdb_dn_sanitize(tmp_ctx, entry_name, &clean_name);
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek if (ret != EOK) {
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek goto done;
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek }
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek ret = sysdb_dn_sanitize(tmp_ctx, entry_value, &clean_value);
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek if (ret != EOK) {
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek goto done;
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek }
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek rdn = talloc_asprintf(tmp_ctx, "%s%s", clean_name, clean_value);
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek if (!rdn) {
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek goto done;
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek }
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek dn = ldb_dn_new_fmt(mem_ctx, sysdb->ldb, SYSDB_TMPL_AUTOFS_ENTRY,
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek rdn, map_name, AUTOFS_MAP_SUBDIR,
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek sysdb->domain->name);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozekdone:
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek talloc_free(tmp_ctx);
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek return dn;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek}
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozekerrno_t
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozeksysdb_save_autofsmap(struct sysdb_ctx *sysdb_ctx,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek const char *name,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek const char *autofsmapname,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek struct sysdb_attrs *attrs,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek int cache_timeout,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek time_t now)
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek{
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek errno_t ret;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek TALLOC_CTX *tmp_ctx;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_TRACE_FUNC, ("Adding autofs map %s\n", autofsmapname));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek tmp_ctx = talloc_new(NULL);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (!tmp_ctx) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek return ENOMEM;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (!attrs) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek attrs = sysdb_new_attrs(tmp_ctx);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (!attrs) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = ENOMEM;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = sysdb_attrs_add_string(attrs, SYSDB_OBJECTCLASS,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek SYSDB_AUTOFS_MAP_OC);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret != EOK) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_OP_FAILURE, ("Could not set map object class [%d]: %s\n",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret, strerror(ret)));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = sysdb_attrs_add_string(attrs, SYSDB_AUTOFS_MAP_NAME, autofsmapname);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret != EOK) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_OP_FAILURE, ("Could not set map name [%d]: %s\n",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret, strerror(ret)));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = sysdb_attrs_add_string(attrs, SYSDB_NAME, name);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret != EOK) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_OP_FAILURE, ("Could not set name attribute [%d]: %s\n",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret, strerror(ret)));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = sysdb_attrs_add_time_t(attrs, SYSDB_LAST_UPDATE, now);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_OP_FAILURE, ("Could not set sysdb lastUpdate [%d]: %s\n",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret, strerror(ret)));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = sysdb_attrs_add_time_t(attrs, SYSDB_CACHE_EXPIRE,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ((cache_timeout) ?
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek (now + cache_timeout) : 0));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_OP_FAILURE, ("Could not set sysdb cache expire [%d]: %s\n",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret, strerror(ret)));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = sysdb_store_custom(sysdb_ctx, name, AUTOFS_MAP_SUBDIR, attrs);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret != EOK) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_OP_FAILURE, ("sysdb_store_custom failed [%d]: %s\n",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret, strerror(ret)));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = EOK;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozekdone:
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek talloc_free(tmp_ctx);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek return ret;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek}
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozekerrno_t
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozeksysdb_delete_autofsmap(struct sysdb_ctx *sysdb_ctx,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek const char *name)
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek{
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_TRACE_FUNC, ("Deleting autofs map %s\n", name));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek return sysdb_delete_custom(sysdb_ctx, name, AUTOFS_MAP_SUBDIR);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek}
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozekerrno_t
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozeksysdb_get_map_byname(TALLOC_CTX *mem_ctx,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek struct sysdb_ctx *sysdb,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek const char *map_name,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek struct ldb_message **_map)
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek{
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek errno_t ret;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek TALLOC_CTX *tmp_ctx;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek const char *filter;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek char *safe_map_name;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek size_t count;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek struct ldb_message **msgs;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek const char *attrs[] = { SYSDB_OBJECTCLASS,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek SYSDB_CACHE_EXPIRE,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek SYSDB_LAST_UPDATE,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek SYSDB_AUTOFS_MAP_NAME,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek SYSDB_MEMBER,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek NULL };
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek tmp_ctx = talloc_new(NULL);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (!tmp_ctx) return ENOMEM;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = sss_filter_sanitize(tmp_ctx, map_name, &safe_map_name);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret != EOK) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_CRIT_FAILURE,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ("Cannot sanitize map [%s] error [%d]: %s\n",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek map_name, ret, strerror(ret)));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek filter = talloc_asprintf(tmp_ctx, "(&(objectclass=%s)(%s=%s))",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek SYSDB_AUTOFS_MAP_OC, SYSDB_NAME, safe_map_name);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (!filter) {
6ab9f4763b516c3a7cdc021f501f276dd805fc97Jakub Hrozek ret = ENOMEM;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = sysdb_search_custom(tmp_ctx, sysdb, filter,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek AUTOFS_MAP_SUBDIR, attrs,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek &count, &msgs);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret != EOK && ret != ENOENT) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_CRIT_FAILURE,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ("Error looking up autofs map [%s]", safe_map_name));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek } else if (ret == ENOENT) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_TRACE_FUNC, ("No such map\n"));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek *_map = NULL;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (count != 1) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_CRIT_FAILURE,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ("More than one map named %s\n", safe_map_name));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek *_map = talloc_steal(mem_ctx, msgs[0]);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = EOK;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozekdone:
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek talloc_free(tmp_ctx);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek return ret;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek}
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozekerrno_t
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozeksysdb_save_autofsentry(struct sysdb_ctx *sysdb_ctx,
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek const char *map,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek const char *key,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek const char *value,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek struct sysdb_attrs *attrs)
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek{
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek errno_t ret;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek TALLOC_CTX *tmp_ctx;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek struct ldb_message *msg;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek struct ldb_dn *dn;
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek const char *name;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_TRACE_FUNC,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ("Adding autofs entry [%s] - [%s]\n", key, value));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek tmp_ctx = talloc_new(NULL);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (!tmp_ctx) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek return ENOMEM;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (!attrs) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek attrs = sysdb_new_attrs(tmp_ctx);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (!attrs) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = ENOMEM;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = sysdb_attrs_add_string(attrs, SYSDB_OBJECTCLASS,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek SYSDB_AUTOFS_ENTRY_OC);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret != EOK) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_OP_FAILURE, ("Could not set entry object class [%d]: %s\n",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret, strerror(ret)));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = sysdb_attrs_add_string(attrs, SYSDB_AUTOFS_ENTRY_KEY, key);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret != EOK) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_OP_FAILURE, ("Could not set entry key [%d]: %s\n",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret, strerror(ret)));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = sysdb_attrs_add_string(attrs, SYSDB_AUTOFS_ENTRY_VALUE, value);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret != EOK) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_OP_FAILURE, ("Could not set entry key [%d]: %s\n",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret, strerror(ret)));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek name = talloc_asprintf(tmp_ctx, "%s%s", key, value);
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek if (!name) {
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek ret = ENOMEM;
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek goto done;
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek }
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek ret = sysdb_attrs_add_string(attrs, SYSDB_NAME, name);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret != EOK) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_OP_FAILURE, ("Could not set name attribute [%d]: %s\n",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret, strerror(ret)));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek dn = sysdb_autofsentry_dn(tmp_ctx, sysdb_ctx, map, key, value);
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek if (!dn) {
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek ret = ENOMEM;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek msg = ldb_msg_new(tmp_ctx);
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek if (!msg) {
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek ret = ENOMEM;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek goto done;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek }
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek msg->dn = dn;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek msg->elements = attrs->a;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek msg->num_elements = attrs->num;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek ret = ldb_add(sysdb_ctx->ldb, msg);
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek ret = sysdb_error_to_errno(ret);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozekdone:
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek talloc_free(tmp_ctx);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek return ret;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek}
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozekerrno_t
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozeksysdb_del_autofsentry(struct sysdb_ctx *sysdb_ctx,
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek const char *map,
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek const char *key,
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek const char *value)
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek{
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek struct ldb_dn *dn;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek errno_t ret;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek
e75a152157e054a2ed46acecbe8b5cfb9853773cJakub Hrozek dn = sysdb_autofsentry_dn(sysdb_ctx, sysdb_ctx, map, key, value);
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek if (!dn) {
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek return ENOMEM;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek }
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek ret = sysdb_delete_entry(sysdb_ctx, dn, true);
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek talloc_free(dn);
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek return ret;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek}
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozekerrno_t
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozeksysdb_autofs_entries_by_map(TALLOC_CTX *mem_ctx,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek struct sysdb_ctx *sysdb,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek const char *mapname,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek size_t *_count,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek struct ldb_message ***_entries)
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek{
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek errno_t ret;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek TALLOC_CTX *tmp_ctx;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek char *filter;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek const char *attrs[] = { SYSDB_AUTOFS_ENTRY_KEY,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek SYSDB_AUTOFS_ENTRY_VALUE,
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek NULL };
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek size_t count;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek struct ldb_message **msgs;
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek struct ldb_dn *mapdn;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_TRACE_FUNC, ("Getting entries for map %s\n", mapname));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek tmp_ctx = talloc_new(NULL);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (!tmp_ctx) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek return ENOMEM;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek mapdn = sysdb_autofsmap_dn(tmp_ctx, sysdb, mapname);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (!mapdn) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = ENOMEM;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek filter = talloc_asprintf(tmp_ctx, "(objectclass=%s)",
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek SYSDB_AUTOFS_ENTRY_OC);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (!filter) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = ENOMEM;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek ret = sysdb_search_entry(tmp_ctx, sysdb, mapdn, LDB_SCOPE_ONELEVEL,
f17d26a8db285622a5cd5f21c7488b62eedc2cf8Jakub Hrozek filter, attrs, &count, &msgs);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek if (ret != EOK && ret != ENOENT) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_OP_FAILURE, ("sysdb search failed: %d\n", ret));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek } else if (ret == ENOENT) {
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_TRACE_FUNC, ("No entries for the map\n"));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek *_count = 0;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek *_entries = NULL;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek goto done;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek }
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek *_count = count;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek *_entries = talloc_steal(mem_ctx, msgs);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek ret = EOK;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek DEBUG(SSSDBG_TRACE_INTERNAL, ("found %d entries for map %s\n",
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek count, mapname));
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozekdone:
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek talloc_free(tmp_ctx);
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek return ret;
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek}
1f1e6cbc59868f06dee3ab4b3df660fcb77ce1c8Jakub Hrozek
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozekerrno_t
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozeksysdb_set_autofsmap_attr(struct sysdb_ctx *sysdb,
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek const char *name,
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek struct sysdb_attrs *attrs,
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek int mod_op)
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek{
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek errno_t ret;
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek struct ldb_dn *dn;
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek TALLOC_CTX *tmp_ctx;
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek tmp_ctx = talloc_new(NULL);
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek if (!tmp_ctx) {
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek return ENOMEM;
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek }
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek dn = sysdb_autofsmap_dn(tmp_ctx, sysdb, name);
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek if (!dn) {
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek ret = ENOMEM;
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek goto done;
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek }
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek ret = sysdb_set_entry_attr(sysdb, dn, attrs, mod_op);
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozekdone:
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek talloc_free(tmp_ctx);
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek return ret;
eb29ae58117ca88868491fe2240e27393c7a9068Jakub Hrozek}