summaryrefslogtreecommitdiffstats
path: root/src/db
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2013-01-13 12:06:40 +0100
committerJakub Hrozek <jhrozek@redhat.com>2013-01-21 16:26:23 +0100
commit5d95c207a41071ac96820215fab98c8cf41750e5 (patch)
tree346bf64a90bb8d1c6683a3ae14ff910d7a21bf12 /src/db
parent63ffa1e7725126e0bddebc89d6e41806e989855c (diff)
downloadsssd-5d95c207a41071ac96820215fab98c8cf41750e5.tar.gz
sssd-5d95c207a41071ac96820215fab98c8cf41750e5.tar.xz
sssd-5d95c207a41071ac96820215fab98c8cf41750e5.zip
LDAP: Compare lists of DNs when saving autofs entries
https://fedorahosted.org/sssd/ticket/1758 The autofs entries do not have the key as an unique identifier, but rather the full (key, value) tuple as some keys have a special meaning, such as the direct mount key (/-) and may be present in a single map multiple times. Comparing the full DN that contains both the key and the value will allow for working updates if either key or value changes.
Diffstat (limited to 'src/db')
-rw-r--r--src/db/sysdb_autofs.c25
-rw-r--r--src/db/sysdb_autofs.h11
2 files changed, 29 insertions, 7 deletions
diff --git a/src/db/sysdb_autofs.c b/src/db/sysdb_autofs.c
index 57380cfdc..f5aad259a 100644
--- a/src/db/sysdb_autofs.c
+++ b/src/db/sysdb_autofs.c
@@ -77,6 +77,25 @@ done:
return dn;
}
+char *
+sysdb_autofsentry_strdn(TALLOC_CTX *mem_ctx,
+ struct sysdb_ctx *sysdb,
+ const char *map_name,
+ const char *entry_name,
+ const char *entry_value)
+{
+ struct ldb_dn *dn;
+ char *strdn;
+
+ dn = sysdb_autofsentry_dn(mem_ctx, sysdb,
+ map_name, entry_name, entry_value);
+ if (!dn) return NULL;
+
+ strdn = talloc_strdup(mem_ctx, ldb_dn_get_linearized(dn));
+ talloc_free(dn);
+ return strdn;
+}
+
errno_t
sysdb_save_autofsmap(struct sysdb_ctx *sysdb_ctx,
const char *name,
@@ -314,14 +333,12 @@ done:
errno_t
sysdb_del_autofsentry(struct sysdb_ctx *sysdb_ctx,
- const char *map,
- const char *key,
- const char *value)
+ const char *entry_dn)
{
struct ldb_dn *dn;
errno_t ret;
- dn = sysdb_autofsentry_dn(sysdb_ctx, sysdb_ctx, map, key, value);
+ dn = ldb_dn_new(NULL, sysdb_ctx_get_ldb(sysdb_ctx), entry_dn);
if (!dn) {
return ENOMEM;
}
diff --git a/src/db/sysdb_autofs.h b/src/db/sysdb_autofs.h
index 8c8d0f560..0e54f9dc1 100644
--- a/src/db/sysdb_autofs.h
+++ b/src/db/sysdb_autofs.h
@@ -61,9 +61,7 @@ sysdb_save_autofsentry(struct sysdb_ctx *sysdb_ctx,
struct sysdb_attrs *attrs);
errno_t
sysdb_del_autofsentry(struct sysdb_ctx *sysdb_ctx,
- const char *map,
- const char *key,
- const char *value);
+ const char *entry_dn);
errno_t
sysdb_autofs_entries_by_map(TALLOC_CTX *mem_ctx,
@@ -81,4 +79,11 @@ sysdb_set_autofsmap_attr(struct sysdb_ctx *sysdb,
errno_t
sysdb_invalidate_autofs_maps(struct sysdb_ctx *sysdb);
+char *
+sysdb_autofsentry_strdn(TALLOC_CTX *mem_ctx,
+ struct sysdb_ctx *sysdb,
+ const char *map_name,
+ const char *entry_name,
+ const char *entry_value);
+
#endif /* _SYSDB_AUTOFS_H_ */