diff options
-rw-r--r-- | src/db/sysdb_services.c | 38 | ||||
-rw-r--r-- | src/db/sysdb_services.h | 16 | ||||
-rw-r--r-- | src/providers/ldap/ldap_id_services.c | 4 | ||||
-rw-r--r-- | src/providers/ldap/sdap_reinit.c | 5 | ||||
-rw-r--r-- | src/providers/proxy/proxy_services.c | 4 | ||||
-rw-r--r-- | src/responder/nss/nsssrv_services.c | 12 | ||||
-rw-r--r-- | src/tests/sysdb-tests.c | 24 | ||||
-rw-r--r-- | src/tools/sss_cache.c | 5 |
8 files changed, 59 insertions, 49 deletions
diff --git a/src/db/sysdb_services.c b/src/db/sysdb_services.c index 2ac8d9a4e..b8ac9ef7d 100644 --- a/src/db/sysdb_services.c +++ b/src/db/sysdb_services.c @@ -26,15 +26,6 @@ #include "db/sysdb_private.h" #include "db/sysdb_services.h" -errno_t -sysdb_svc_add(TALLOC_CTX *mem_ctx, - struct sysdb_ctx *sysdb, - const char *primary_name, - int port, - const char **aliases, - const char **protocols, - struct ldb_dn **dn); - static errno_t sysdb_svc_update(struct sysdb_ctx *sysdb, struct ldb_dn *dn, @@ -50,6 +41,7 @@ sysdb_svc_remove_alias(struct sysdb_ctx *sysdb, errno_t sysdb_getservbyname(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, const char *name, const char *proto, struct ldb_result **_res) @@ -89,7 +81,7 @@ sysdb_getservbyname(TALLOC_CTX *mem_ctx, goto done; } - ret = sysdb_search_services(mem_ctx, sysdb, subfilter, + ret = sysdb_search_services(mem_ctx, sysdb, domain, subfilter, attrs, &msgs_count, &msgs); if (ret == EOK) { res = talloc_zero(mem_ctx, struct ldb_result); @@ -111,6 +103,7 @@ done: errno_t sysdb_getservbyport(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, int port, const char *proto, struct ldb_result **_res) @@ -148,7 +141,7 @@ sysdb_getservbyport(TALLOC_CTX *mem_ctx, goto done; } - ret = sysdb_search_services(mem_ctx, sysdb, subfilter, + ret = sysdb_search_services(mem_ctx, sysdb, domain, subfilter, attrs, &msgs_count, &msgs); if (ret == EOK) { res = talloc_zero(mem_ctx, struct ldb_result); @@ -208,7 +201,7 @@ sysdb_store_service(struct sysdb_ctx *sysdb, * properly. Last entry saved to the cache should * always "win". */ - ret = sysdb_getservbyport(tmp_ctx, sysdb, port, NULL, &res); + ret = sysdb_getservbyport(tmp_ctx, sysdb, domain, port, NULL, &res); if (ret != EOK && ret != ENOENT) { goto done; } else if (ret != ENOENT) { @@ -274,7 +267,7 @@ sysdb_store_service(struct sysdb_ctx *sysdb, * need to update existing entries or modify * aliases. */ - ret = sysdb_getservbyname(tmp_ctx, sysdb, primary_name, NULL, &res); + ret = sysdb_getservbyname(tmp_ctx, sysdb, domain, primary_name, NULL, &res); if (ret != EOK && ret != ENOENT) { goto done; } else if (ret != ENOENT) { /* Found entries */ @@ -358,7 +351,7 @@ sysdb_store_service(struct sysdb_ctx *sysdb, ret = sysdb_svc_update(sysdb, update_dn, port, aliases, protocols); } else { /* Add a new entry */ - ret = sysdb_svc_add(tmp_ctx, sysdb, primary_name, port, + ret = sysdb_svc_add(tmp_ctx, sysdb, domain, primary_name, port, aliases, protocols, &update_dn); } if (ret != EOK) goto done; @@ -438,6 +431,7 @@ sysdb_svc_dn(struct sysdb_ctx *sysdb, TALLOC_CTX *mem_ctx, errno_t sysdb_svc_add(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, const char *primary_name, int port, const char **aliases, @@ -460,7 +454,7 @@ sysdb_svc_add(TALLOC_CTX *mem_ctx, } /* svc dn */ - msg->dn = sysdb_svc_dn(sysdb, msg, sysdb->domain->name, primary_name); + msg->dn = sysdb_svc_dn(sysdb, msg, domain->name, primary_name); if (!msg->dn) { ret = ENOMEM; goto done; @@ -643,6 +637,7 @@ done: errno_t sysdb_svc_delete(struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, const char *name, int port, const char *proto) @@ -667,7 +662,7 @@ sysdb_svc_delete(struct sysdb_ctx *sysdb, in_transaction = true; if (name) { - ret = sysdb_getservbyname(tmp_ctx, sysdb, name, proto, &res); + ret = sysdb_getservbyname(tmp_ctx, sysdb, domain, name, proto, &res); if (ret != EOK && ret != ENOENT) goto done; if (ret == ENOENT) { /* Doesn't exist in the DB. Nothing to do */ @@ -675,7 +670,7 @@ sysdb_svc_delete(struct sysdb_ctx *sysdb, goto done; } } else { - ret = sysdb_getservbyport(tmp_ctx, sysdb, port, proto, &res); + ret = sysdb_getservbyport(tmp_ctx, sysdb, domain, port, proto, &res); if (ret != EOK && ret != ENOENT) goto done; if (ret == ENOENT) { /* Doesn't exist in the DB. Nothing to do */ @@ -721,6 +716,7 @@ done: errno_t sysdb_enumservent(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, struct ldb_result **_res) { errno_t ret; @@ -735,7 +731,7 @@ sysdb_enumservent(TALLOC_CTX *mem_ctx, return ENOMEM; } - ret = sysdb_search_services(mem_ctx, sysdb, "", + ret = sysdb_search_services(mem_ctx, sysdb, domain, "", attrs, &msgs_count, &msgs); if (ret == EOK) { res = talloc_zero(mem_ctx, struct ldb_result); @@ -756,6 +752,7 @@ done: errno_t sysdb_set_service_attr(struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, const char *name, struct sysdb_attrs *attrs, int mod_op) @@ -769,7 +766,7 @@ sysdb_set_service_attr(struct sysdb_ctx *sysdb, return ENOMEM; } - dn = sysdb_svc_dn(sysdb, tmp_ctx, sysdb->domain->name, name); + dn = sysdb_svc_dn(sysdb, tmp_ctx, domain->name, name); if (!dn) { ret = ENOMEM; goto done; @@ -784,6 +781,7 @@ done: errno_t sysdb_search_services(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, const char *sub_filter, const char **attrs, size_t *msgs_count, @@ -800,7 +798,7 @@ errno_t sysdb_search_services(TALLOC_CTX *mem_ctx, } basedn = ldb_dn_new_fmt(tmp_ctx, sysdb->ldb, - SYSDB_TMPL_SVC_BASE, sysdb->domain->name); + SYSDB_TMPL_SVC_BASE, domain->name); if (!basedn) { DEBUG(SSSDBG_OP_FAILURE, ("Failed to build base dn\n")); ret = ENOMEM; diff --git a/src/db/sysdb_services.h b/src/db/sysdb_services.h index 467a65846..2ec9a3b6b 100644 --- a/src/db/sysdb_services.h +++ b/src/db/sysdb_services.h @@ -48,6 +48,7 @@ errno_t sysdb_getservbyname(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, const char *name, const char *proto, struct ldb_result **_res); @@ -55,6 +56,7 @@ sysdb_getservbyname(TALLOC_CTX *mem_ctx, errno_t sysdb_getservbyport(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, int port, const char *proto, struct ldb_result **_res); @@ -62,6 +64,7 @@ sysdb_getservbyport(TALLOC_CTX *mem_ctx, errno_t sysdb_enumservent(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, struct ldb_result **_res); errno_t @@ -81,19 +84,32 @@ sysdb_svc_dn(struct sysdb_ctx *sysdb, TALLOC_CTX *mem_ctx, const char *domain, const char *name); errno_t +sysdb_svc_add(TALLOC_CTX *mem_ctx, + struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, + const char *primary_name, + int port, + const char **aliases, + const char **protocols, + struct ldb_dn **dn); + +errno_t sysdb_svc_delete(struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, const char *name, int port, const char *proto); errno_t sysdb_set_service_attr(struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, const char *name, struct sysdb_attrs *attrs, int mod_op); errno_t sysdb_search_services(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, const char *sub_filter, const char **attrs, size_t *msgs_count, diff --git a/src/providers/ldap/ldap_id_services.c b/src/providers/ldap/ldap_id_services.c index b02913514..1a2a7b6bc 100644 --- a/src/providers/ldap/ldap_id_services.c +++ b/src/providers/ldap/ldap_id_services.c @@ -243,7 +243,7 @@ services_get_done(struct tevent_req *subreq) /* Ensure that this entry is removed from the sysdb */ switch(state->filter_type) { case BE_FILTER_NAME: - ret = sysdb_svc_delete(state->sysdb, state->name, + ret = sysdb_svc_delete(state->sysdb, state->domain, state->name, 0, state->protocol); if (ret != EOK) { tevent_req_error(req, ret); @@ -258,7 +258,7 @@ services_get_done(struct tevent_req *subreq) return; } - ret = sysdb_svc_delete(state->sysdb, NULL, + ret = sysdb_svc_delete(state->sysdb, state->domain, NULL, port, state->protocol); if (ret != EOK) { tevent_req_error(req, ret); diff --git a/src/providers/ldap/sdap_reinit.c b/src/providers/ldap/sdap_reinit.c index dd49c7b89..3fba9360b 100644 --- a/src/providers/ldap/sdap_reinit.c +++ b/src/providers/ldap/sdap_reinit.c @@ -163,7 +163,8 @@ static errno_t sdap_reinit_clear_usn(struct sysdb_ctx *sysdb, msgs_num = 0; /* reset services' usn */ - ret = sysdb_search_services(tmp_ctx, sysdb, "", attrs, &msgs_num, &msgs); + ret = sysdb_search_services(tmp_ctx, sysdb, domain, + "", attrs, &msgs_num, &msgs); sdap_delete_msgs_usn(sysdb, msgs, msgs_num); talloc_zfree(msgs); msgs_num = 0; @@ -290,7 +291,7 @@ static errno_t sdap_reinit_delete_records(struct sysdb_ctx *sysdb, msgs_num = 0; /* purge untouched services */ - ret = sysdb_search_services(tmp_ctx, sysdb, "(!("SYSDB_USN"=*))", + ret = sysdb_search_services(tmp_ctx, sysdb, domain, "(!("SYSDB_USN"=*))", attrs, &msgs_num, &msgs); sdap_delete_msgs_dn(sysdb, msgs, msgs_num); talloc_zfree(msgs); diff --git a/src/providers/proxy/proxy_services.c b/src/providers/proxy/proxy_services.c index 3b79f81b0..e9f3b3f5c 100644 --- a/src/providers/proxy/proxy_services.c +++ b/src/providers/proxy/proxy_services.c @@ -117,7 +117,7 @@ get_serv_byname(struct proxy_id_ctx *ctx, if (status == NSS_STATUS_NOTFOUND) { /* Make sure we remove it from the cache */ - ret = sysdb_svc_delete(sysdb, name, 0, protocol); + ret = sysdb_svc_delete(sysdb, dom, name, 0, protocol); } else { /* Results found. Save them into the cache */ @@ -171,7 +171,7 @@ get_serv_byport(struct proxy_id_ctx *ctx, if (status == NSS_STATUS_NOTFOUND) { /* Make sure we remove it from the cache */ - ret = sysdb_svc_delete(sysdb, NULL, port, protocol); + ret = sysdb_svc_delete(sysdb, dom, NULL, port, protocol); } else { /* Results found. Save them into the cache */ ret = proxy_save_service(sysdb, dom, result, diff --git a/src/responder/nss/nsssrv_services.c b/src/responder/nss/nsssrv_services.c index e56ad93a6..dd12fa412 100644 --- a/src/responder/nss/nsssrv_services.c +++ b/src/responder/nss/nsssrv_services.c @@ -211,7 +211,7 @@ getserv_send(TALLOC_CTX *mem_ctx, SVC_PROTO_CASED ? SVC_PROTO_CASED : "<ANY>", dom->name)); - ret = sysdb_getservbyname(state, sysdb, + ret = sysdb_getservbyname(state, sysdb, dom, SVC_NAME_CASED, SVC_PROTO_CASED, &state->res); @@ -252,7 +252,7 @@ getserv_send(TALLOC_CTX *mem_ctx, SVC_PROTO_CASED ? SVC_PROTO_CASED : "<ANY>", dom->name)); - ret = sysdb_getservbyport(state, sysdb, port, + ret = sysdb_getservbyport(state, sysdb, dom, port, SVC_PROTO_CASED, &state->res); } @@ -495,7 +495,7 @@ static void lookup_service_done(struct tevent_req *subreq) SVC_PROTO_CASED ? SVC_PROTO_CASED : "<ANY>", dom->name)); - ret = sysdb_getservbyname(state, sysdb, + ret = sysdb_getservbyname(state, sysdb, dom, SVC_NAME_CASED, SVC_PROTO_CASED, &state->res); @@ -506,7 +506,7 @@ static void lookup_service_done(struct tevent_req *subreq) SVC_PROTO_CASED ? SVC_PROTO_CASED : "<ANY>", dom->name)); - ret = sysdb_getservbyport(state, sysdb, + ret = sysdb_getservbyport(state, sysdb, dom, state->port, SVC_PROTO_CASED, &state->res); @@ -1384,7 +1384,7 @@ lookup_servent_send(TALLOC_CTX *mem_ctx, goto immediate; } - ret = sysdb_enumservent(state, sysdb, &state->res); + ret = sysdb_enumservent(state, sysdb, dom, &state->res); /* Whatever the result, we're done, so report it */ goto immediate; } @@ -1446,7 +1446,7 @@ lookup_servent_done(struct tevent_req *subreq) goto done; } - ret = sysdb_enumservent(state, sysdb, &state->res); + ret = sysdb_enumservent(state, sysdb, state->dom, &state->res); /* Whatever the result, we're done, so report it */ done: diff --git a/src/tests/sysdb-tests.c b/src/tests/sysdb-tests.c index 7735316be..f68ef2495 100644 --- a/src/tests/sysdb-tests.c +++ b/src/tests/sysdb-tests.c @@ -3869,14 +3869,15 @@ void services_check_match(struct sysdb_test_ctx *test_ctx, if (by_name) { /* Look up the service by name */ - ret = sysdb_getservbyname(test_ctx, test_ctx->sysdb, primary_name, + ret = sysdb_getservbyname(test_ctx, test_ctx->sysdb, + test_ctx->domain, primary_name, NULL, &res); fail_if(ret != EOK, "sysdb_getservbyname error [%s]\n", strerror(ret)); } else { /* Look up the newly-added service by port */ ret = sysdb_getservbyport(test_ctx, test_ctx->sysdb, - port, NULL, &res); + test_ctx->domain, port, NULL, &res); fail_if(ret != EOK, "sysdb_getservbyport error [%s]\n", strerror(ret)); } @@ -3927,15 +3928,6 @@ void services_check_match(struct sysdb_test_ctx *test_ctx, services_check_match(test_ctx, false, primary_name, port, aliases, protocols); \ } while(0); -errno_t -sysdb_svc_add(TALLOC_CTX *mem_ctx, - struct sysdb_ctx *sysdb, - const char *primary_name, - int port, - const char **aliases, - const char **protocols, - struct ldb_dn **dn); - START_TEST(test_sysdb_add_services) { errno_t ret; @@ -3977,7 +3969,7 @@ START_TEST(test_sysdb_add_services) ret = sysdb_transaction_start(test_ctx->sysdb); fail_if(ret != EOK); - ret = sysdb_svc_add(NULL, test_ctx->sysdb, + ret = sysdb_svc_add(NULL, test_ctx->sysdb, test_ctx->domain, primary_name, port, aliases, protocols, NULL); @@ -4002,7 +3994,8 @@ START_TEST(test_sysdb_add_services) * doesn't like adding and deleting the same entry in a * single transaction. */ - ret = sysdb_svc_delete(test_ctx->sysdb, primary_name, 0, NULL); + ret = sysdb_svc_delete(test_ctx->sysdb, test_ctx->domain, + primary_name, 0, NULL); fail_if(ret != EOK); talloc_free(test_ctx); @@ -4118,7 +4111,8 @@ START_TEST(test_sysdb_store_services) * doesn't like adding and deleting the same entry in a * single transaction. */ - ret = sysdb_svc_delete(test_ctx->sysdb, NULL, altport, NULL); + ret = sysdb_svc_delete(test_ctx->sysdb, test_ctx->domain, + NULL, altport, NULL); fail_if(ret != EOK); talloc_free(test_ctx); @@ -4169,7 +4163,7 @@ START_TEST(test_sysdb_svc_remove_alias) ret = sysdb_transaction_start(test_ctx->sysdb); fail_if(ret != EOK); - ret = sysdb_svc_add(NULL, test_ctx->sysdb, + ret = sysdb_svc_add(NULL, test_ctx->sysdb, test_ctx->domain, primary_name, port, aliases, protocols, NULL); diff --git a/src/tools/sss_cache.c b/src/tools/sss_cache.c index afdff7912..15dcf7e1c 100644 --- a/src/tools/sss_cache.c +++ b/src/tools/sss_cache.c @@ -307,7 +307,8 @@ static bool invalidate_entries(TALLOC_CTX *ctx, break; case TYPE_SERVICE: type_string = "service"; - ret = sysdb_search_services(ctx, sysdb, filter, attrs, &msg_count, &msgs); + ret = sysdb_search_services(ctx, sysdb, dinfo, + filter, attrs, &msg_count, &msgs); break; case TYPE_AUTOFSMAP: type_string = "autofs map"; @@ -378,7 +379,7 @@ static errno_t invalidate_entry(TALLOC_CTX *ctx, struct sysdb_ctx *sysdb, sys_attrs, SYSDB_MOD_REP); break; case TYPE_SERVICE: - ret = sysdb_set_service_attr(sysdb, name, + ret = sysdb_set_service_attr(sysdb, domain, name, sys_attrs, SYSDB_MOD_REP); break; case TYPE_AUTOFSMAP: |