From 4af1d1869d659fec84c518c26844132fa1df8f64 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Thu, 8 Dec 2011 12:20:50 +0100 Subject: SUDO Integration - LDAP provider - save sudo rules functions --- src/providers/ldap/sdap_sudo_cache.c | 92 ++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/providers/ldap/sdap_sudo_cache.c (limited to 'src/providers/ldap/sdap_sudo_cache.c') diff --git a/src/providers/ldap/sdap_sudo_cache.c b/src/providers/ldap/sdap_sudo_cache.c new file mode 100644 index 000000000..c58fa1c3f --- /dev/null +++ b/src/providers/ldap/sdap_sudo_cache.c @@ -0,0 +1,92 @@ +/* + Authors: + Jakub Hrozek + + Copyright (C) 2011 Red Hat + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "db/sysdb.h" +#include "db/sysdb_sudo.h" +#include "providers/ldap/sdap_sudo_cache.h" + +/* ========== Functions specific for the native sudo LDAP schema ========== */ +static errno_t +sdap_save_native_sudorule(struct sysdb_ctx *sysdb_ctx, + struct sdap_attr_map *map, + struct sysdb_attrs *attrs) +{ + errno_t ret; + const char *rule_name; + + ret = sysdb_attrs_get_string(attrs, map[SDAP_AT_SUDO_NAME].sys_name, + &rule_name); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("Could not get rule name [%d]: %s\n", + ret, strerror(ret))); + return ret; + } + + ret = sysdb_save_sudorule(sysdb_ctx, rule_name, attrs); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("Could not save sudorule %s\n", rule_name)); + return ret; + } + + return ret; +} + +errno_t +sdap_save_native_sudorule_list(struct sysdb_ctx *sysdb_ctx, + struct sdap_attr_map *map, + struct sysdb_attrs **replies, + size_t replies_count) +{ + errno_t ret, tret; + bool in_transaction = false; + size_t i; + + ret = sysdb_transaction_start(sysdb_ctx); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, ("Could not start transaction\n")); + goto fail; + } + in_transaction = true; + + for (i=0; i