summaryrefslogtreecommitdiffstats
path: root/src/db/sysdb_services.c
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2012-01-28 10:34:02 -0500
committerStephen Gallagher <sgallagh@redhat.com>2012-01-31 09:37:40 -0500
commite299638926171e0e92a36122aeff6611cd52418d (patch)
treee091b058ba862bc80ad5e6b8bbfb86955a796f15 /src/db/sysdb_services.c
parentf660877b38e563c4aa0cb1431624069808873fec (diff)
downloadsssd-e299638926171e0e92a36122aeff6611cd52418d.tar.gz
sssd-e299638926171e0e92a36122aeff6611cd52418d.tar.xz
sssd-e299638926171e0e92a36122aeff6611cd52418d.zip
SYSDB: extend sysdb_store_service() to accept additional attributes
Diffstat (limited to 'src/db/sysdb_services.c')
-rw-r--r--src/db/sysdb_services.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/db/sysdb_services.c b/src/db/sysdb_services.c
index 55a0c438c..425e9ed71 100644
--- a/src/db/sysdb_services.c
+++ b/src/db/sysdb_services.c
@@ -183,6 +183,8 @@ sysdb_store_service(struct sysdb_ctx *sysdb,
int port,
const char **aliases,
const char **protocols,
+ struct sysdb_attrs *extra_attrs,
+ char **remove_attrs,
uint64_t cache_timeout,
time_t now)
{
@@ -367,11 +369,16 @@ sysdb_store_service(struct sysdb_ctx *sysdb,
if (ret != EOK) goto done;
/* Set the cache timeout */
- attrs = sysdb_new_attrs(tmp_ctx);
- if (!attrs) {
- ret = ENOMEM;
- goto done;
+ if (!extra_attrs) {
+ attrs = sysdb_new_attrs(tmp_ctx);
+ if (!attrs) {
+ ret = ENOMEM;
+ goto done;
+ }
+ } else {
+ attrs = extra_attrs;
}
+
ret = sysdb_attrs_add_time_t(attrs, SYSDB_LAST_UPDATE, now);
if (ret) goto done;
@@ -383,6 +390,18 @@ sysdb_store_service(struct sysdb_ctx *sysdb,
ret = sysdb_set_entry_attr(sysdb, update_dn, attrs, SYSDB_MOD_REP);
if (ret != EOK) goto done;
+ if (remove_attrs) {
+ ret = sysdb_remove_attrs(sysdb, primary_name,
+ SYSDB_MEMBER_SERVICE,
+ remove_attrs);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_MINOR_FAILURE,
+ ("Could not remove missing attributes: [%s]\n",
+ strerror(ret)));
+ goto done;
+ }
+ }
+
ret = sysdb_transaction_commit(sysdb);
if (ret == EOK) in_transaction = false;