<div dir="ltr">(Including once more as an attachment, it looks like something may have wrapped the lines when I had the patch in the body of the message.)</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, May 28, 2013 at 4:29 PM, C. S. <span dir="ltr"><<a href="mailto:csleclish@gmail.com" target="_blank">csleclish@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Jakub,<br><br>Thanks for the feedback! Very helpful. Looks like I dropped the LDAP map changes during a merge, that is now included. And I've removed the strdup(), whoops! ;-)<br>
<br>cs<br><br>From 33689c2565ec71d10eefe081fb3c502d1944d89e Mon Sep 17 00:00:00 2001<br>
From: Cove Schneider <<a href="mailto:cove@ilm.com" target="_blank">cove@ilm.com</a>><br>Date: Tue, 28 May 2013 16:15:11 -0700<br>Subject: [PATCH] Add ldap_autofs_map_master_name option<br><br>---<br> src/config/etc/sssd.api.d/sssd-ipa.conf | 1 +<br>
src/config/etc/sssd.api.d/sssd-ldap.conf | 1 +<br> src/db/sysdb_autofs.h | 5 +++--<br> src/man/sssd-ldap.5.xml | 13 +++++++++++++<br> src/providers/ad/ad_opts.h | 1 +<br>
src/providers/data_provider_be.c | 7 -------<br> src/providers/ipa/ipa_opts.h | 3 +++<br> src/providers/ldap/ldap_common.c | 15 +++++++++++++++<br> src/providers/ldap/ldap_common.h | 2 ++<br>
src/providers/ldap/ldap_opts.h | 5 +++++<br> src/providers/ldap/sdap.h | 3 +++<br> src/providers/ldap/sdap_autofs.c | 12 ++++++++++++<br> 12 files changed, 59 insertions(+), 9 deletions(-)<br>
<br>diff --git a/src/config/etc/sssd.api.d/sssd-ipa.conf b/src/config/etc/sssd.api.d/sssd-ipa.conf<br>index e6f1bb0a88dd72a5f7bfcb269fa4736e7efd947c..5105a40a629d87a62a21cb6933a758943c1688cc 100644<br>--- a/src/config/etc/sssd.api.d/sssd-ipa.conf<br>
+++ b/src/config/etc/sssd.api.d/sssd-ipa.conf<br>@@ -162,6 +162,7 @@ ipa_hostgroup_uuid = str, None, false<br><br> [provider/ipa/autofs]<br> ipa_automount_location = str, None, false<br>+ldap_autofs_map_master_name = str, None, false<br>
ldap_autofs_map_object_class = str, None, false<br> ldap_autofs_map_name = str, None, false<br> ldap_autofs_entry_object_class = str, None, false<br>diff --git a/src/config/etc/sssd.api.d/sssd-ldap.conf b/src/config/etc/sssd.api.d/sssd-ldap.conf<br>
index 14e979da3413fe575e83b9a508c6cd8029d2bfba..aa521567f3f657885ba8978fdd118174b0ff9b4f 100644<br>--- a/src/config/etc/sssd.api.d/sssd-ldap.conf<br>+++ b/src/config/etc/sssd.api.d/sssd-ldap.conf<br>@@ -153,6 +153,7 @@ ldap_sudorule_notafter = str, None, false<br>
ldap_sudorule_order = str, None, false<br><br> [provider/ldap/autofs]<br>+ldap_autofs_map_master_name = str, None, false<br> ldap_autofs_map_object_class = str, None, false<br> ldap_autofs_map_name = str, None, false<br>
ldap_autofs_entry_object_class = str, None, false<br>diff --git a/src/db/sysdb_autofs.h b/src/db/sysdb_autofs.h<br>index e3528ce4e6bd2c8b594c80828cfb02a9a7ce7923..97edaea03179d89d37073df41ca95cd544a53a29 100644<br>--- a/src/db/sysdb_autofs.h<br>
+++ b/src/db/sysdb_autofs.h<br>@@ -28,8 +28,9 @@<br> #define AUTOFS_MAP_SUBDIR "autofsmaps"<br> #define AUTOFS_ENTRY_SUBDIR "autofsentries"<br><br>-#define SYSDB_AUTOFS_MAP_OC "automountMap"<br>
-#define SYSDB_AUTOFS_MAP_NAME "automountMapName"<br>+#define SYSDB_AUTOFS_MAP_MASTER_NAME "automountMapMasterName"<br>+#define SYSDB_AUTOFS_MAP_OC "automountMap"<br>+#define SYSDB_AUTOFS_MAP_NAME "automountMapName"<br>
<br> #define SYSDB_AUTOFS_ENTRY_OC "automount"<br> #define SYSDB_AUTOFS_ENTRY_KEY "automountKey"<br>diff --git a/src/man/sssd-ldap.5.xml b/src/man/sssd-ldap.5.xml<br>index 37df5ec1b2e0b150b407f5e3e39db21860055580..b06286742577b84c347701ab0cd56c4e661a44c8 100644<br>
--- a/src/man/sssd-ldap.5.xml<br>+++ b/src/man/sssd-ldap.5.xml<br>@@ -2169,6 +2169,19 @@ ldap_access_filter = memberOf=cn=allowedusers,ou=Groups,dc=example,dc=com<br> <para><br> <variablelist><br>
<varlistentry><br>+ <term>ldap_autofs_map_master_name (string)</term><br>+ <listitem><br>+ <para><br>+ The name of the automount master map in LDAP.<br>
+ </para><br>+ <para><br>+ Default: auto.master<br>+ </para><br>+ </listitem><br>
+ </varlistentry><br>
+ </variablelist><br>+ <variablelist><br>+ <varlistentry><br> <term>ldap_autofs_map_object_class (string)</term><br> <listitem><br>
<para><br>diff --git a/src/providers/ad/ad_opts.h b/src/providers/ad/ad_opts.h<br>index 218614dca82ab1b5a2d54291ead3d9719a4c7e2a..8ce0c475265a8602edea72ecdff18f77f8ecab75 100644<br>--- a/src/providers/ad/ad_opts.h<br>
+++ b/src/providers/ad/ad_opts.h<br>@@ -65,6 +65,7 @@ struct dp_option ad_def_ldap_opts[] = {<br> { "ldap_sudo_include_netgroups", DP_OPT_BOOL, BOOL_TRUE, BOOL_TRUE },<br> { "ldap_sudo_include_regexp", DP_OPT_BOOL, BOOL_TRUE, BOOL_TRUE },<br>
{ "ldap_autofs_search_base", DP_OPT_STRING, NULL_STRING, NULL_STRING },<br>+ { "ldap_autofs_map_master_name", DP_OPT_STRING, NULL_STRING, NULL_STRING },<br> { "ldap_schema", DP_OPT_STRING, { "ad" }, NULL_STRING },<br>
{ "ldap_offline_timeout", DP_OPT_NUMBER, { .number = 60 }, NULL_NUMBER },<br> { "ldap_force_upper_case_realm", DP_OPT_BOOL, BOOL_TRUE, BOOL_FALSE },<br>diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c<br>
index cd6715680eb4871806cc5148cecd2e118885a105..11e8979c2afe4bbcad19ef77b241843463e02c58 100644<br>--- a/src/providers/data_provider_be.c<br>+++ b/src/providers/data_provider_be.c<br>@@ -1643,13 +1643,6 @@ static int be_autofs_handler(DBusMessage *message, struct sbus_connection *conn)<br>
goto done;<br> }<br><br>- /* If a request for auto.master comes in, the automounter deamon<br>- * has been reloaded. Expire all autofs maps to force reload<br>- */<br>- if (strcmp(be_autofs_req->mapname, "auto.master") == 0) {<br>
- be_autofs_req->invalidate = true;<br>- }<br>-<br> be_req->req_data = be_autofs_req;<br><br> if (!be_cli->bectx->bet_info[BET_AUTOFS].bet_ops) {<br>diff --git a/src/providers/ipa/ipa_opts.h b/src/providers/ipa/ipa_opts.h<br>
index 4dfa72db430b1d3dfb528cc425c7156baf5ebe47..9a99dcdb782ea3cb070f877362a0ab2b7d80be5c 100644<br>--- a/src/providers/ipa/ipa_opts.h<br>+++ b/src/providers/ipa/ipa_opts.h<br>@@ -89,6 +89,7 @@ struct dp_option ipa_def_ldap_opts[] = {<br>
{ "ldap_sudo_include_netgroups", DP_OPT_BOOL, BOOL_TRUE, BOOL_TRUE },<br> { "ldap_sudo_include_regexp", DP_OPT_BOOL, BOOL_TRUE, BOOL_TRUE },<br> { "ldap_autofs_search_base", DP_OPT_STRING, NULL_STRING, NULL_STRING },<br>
+ { "ldap_autofs_map_master_name", DP_OPT_STRING, NULL_STRING, NULL_STRING },<br> { "ldap_schema", DP_OPT_STRING, { "ipa_v1" }, NULL_STRING },<br> { "ldap_offline_timeout", DP_OPT_NUMBER, { .number = 60 }, NULL_NUMBER },<br>
{ "ldap_force_upper_case_realm", DP_OPT_BOOL, BOOL_TRUE, BOOL_TRUE },<br>@@ -287,12 +288,14 @@ struct sdap_attr_map ipa_service_map[] = {<br> };<br><br> struct sdap_attr_map ipa_autofs_mobject_map[] = {<br>
+ { "ldap_autofs_map_master_name", "automountMapMasterName", SYSDB_AUTOFS_MAP_MASTER_NAME, NULL },<br> { "ldap_autofs_map_object_class", "automountMap", SYSDB_AUTOFS_MAP_OC, NULL },<br>
{ "ldap_autofs_map_name", "automountMapName", SYSDB_AUTOFS_MAP_NAME, NULL },<br> SDAP_ATTR_MAP_TERMINATOR<br> };<br><br> struct sdap_attr_map ipa_autofs_entry_map[] = {<br>+ { "ldap_autofs_map_master_name", "automountMapMasterName", SYSDB_AUTOFS_MAP_MASTER_NAME, NULL },<br>
{ "ldap_autofs_entry_object_class", "automount", SYSDB_AUTOFS_ENTRY_OC, NULL },<br> { "ldap_autofs_entry_key", "automountKey", SYSDB_AUTOFS_ENTRY_KEY, NULL },<br> { "ldap_autofs_entry_value", "automountInformation", SYSDB_AUTOFS_ENTRY_VALUE, NULL },<br>
diff --git a/src/providers/ldap/ldap_common.c b/src/providers/ldap/ldap_common.c<br>index acb24b190157efe06967963ad05014cf9017db7f..0c70d44b78eaa45f27e6ae0ee29c96404ca6df0b 100644<br>--- a/src/providers/ldap/ldap_common.c<br>
+++ b/src/providers/ldap/ldap_common.c<br>@@ -407,10 +407,25 @@ int ldap_get_autofs_options(TALLOC_CTX *memctx,<br> struct sdap_options *opts)<br> {<br> const char *search_base;<br>+ const char *master_map;<br>
struct sdap_attr_map *default_entry_map;<br> struct sdap_attr_map *default_mobject_map;<br> int ret;<br><br>+ /* automount master map name */<br>+ master_map = dp_opt_get_string(opts->basic, SDAP_AUTOFS_MAP_MASTER_NAME);<br>
+ if (master_map == NULL) {<br>+ ret = dp_opt_set_string(opts->basic, SDAP_AUTOFS_MAP_MASTER_NAME,<br>+ AUTOFS_MAP_MASTER_NAME);<br>+ if (ret != EOK) {<br>+ DEBUG(SSSDBG_OP_FAILURE, ("Could not set autofs master map name"<br>
+ " to default value\n"));<br>+ return ret;<br>+ }<br>+ master_map = dp_opt_get_string(opts->basic, SDAP_AUTOFS_MAP_MASTER_NAME);<br>+ }<br>+ DEBUG(SSSDBG_FUNC_DATA, ("Option ldap_autofs_map_master_name set to %s\n", master_map));<br>
+<br> /* search base */<br> search_base = dp_opt_get_string(opts->basic, SDAP_SEARCH_BASE);<br> if (search_base != NULL) {<br>diff --git a/src/providers/ldap/ldap_common.h b/src/providers/ldap/ldap_common.h<br>
index 2d17b755808e58831b458bcc86a50eb74b1f1057..ec48db68a457b9cf4e490b649eaefd0573ad8e71 100644<br>--- a/src/providers/ldap/ldap_common.h<br>+++ b/src/providers/ldap/ldap_common.h<br>@@ -39,6 +39,8 @@<br> #define LDAP_SSL_URI "ldaps://"<br>
#define LDAP_LDAPI_URI "ldapi://"<br><br>+#define AUTOFS_MAP_MASTER_NAME "auto.master"<br>+<br> /* a fd the child process would log into */<br> extern int ldap_child_debug_fd;<br><br>diff --git a/src/providers/ldap/ldap_opts.h b/src/providers/ldap/ldap_opts.h<br>
index 807716c18244ae70759d9b2eff7e40fd3c634fb2..f4b572e687ce0227f124217f9f2b43b1c801e227 100644<br>--- a/src/providers/ldap/ldap_opts.h<br>+++ b/src/providers/ldap/ldap_opts.h<br>@@ -56,6 +56,7 @@ struct dp_option default_basic_opts[] = {<br>
{ "ldap_sudo_include_netgroups", DP_OPT_BOOL, BOOL_TRUE, BOOL_TRUE },<br> { "ldap_sudo_include_regexp", DP_OPT_BOOL, BOOL_TRUE, BOOL_TRUE },<br> { "ldap_autofs_search_base", DP_OPT_STRING, NULL_STRING, NULL_STRING },<br>
+ { "ldap_autofs_map_master_name", DP_OPT_STRING, NULL_STRING, NULL_STRING },<br> { "ldap_schema", DP_OPT_STRING, { "rfc2307" }, NULL_STRING },<br> { "ldap_offline_timeout", DP_OPT_NUMBER, { .number = 60 }, NULL_NUMBER },<br>
{ "ldap_force_upper_case_realm", DP_OPT_BOOL, BOOL_FALSE, BOOL_FALSE },<br>@@ -330,12 +331,14 @@ struct sdap_attr_map service_map[] = {<br> };<br><br> struct sdap_attr_map rfc2307_autofs_mobject_map[] = {<br>
+ { "ldap_autofs_map_master_name", "automountMapMasterName", SYSDB_AUTOFS_MAP_MASTER_NAME, NULL },<br> { "ldap_autofs_map_object_class", "automountMap", SYSDB_AUTOFS_MAP_OC, NULL },<br>
{ "ldap_autofs_map_name", "ou", SYSDB_AUTOFS_MAP_NAME, NULL },<br> SDAP_ATTR_MAP_TERMINATOR<br> };<br><br> struct sdap_attr_map rfc2307_autofs_entry_map[] = {<br>+ { "ldap_autofs_map_master_name", "automountMapMasterName", SYSDB_AUTOFS_MAP_MASTER_NAME, NULL },<br>
{ "ldap_autofs_entry_object_class", "automount", SYSDB_AUTOFS_ENTRY_OC, NULL },<br> { "ldap_autofs_entry_key", "cn", SYSDB_AUTOFS_ENTRY_KEY, NULL },<br> { "ldap_autofs_entry_value", "automountInformation", SYSDB_AUTOFS_ENTRY_VALUE, NULL },<br>
@@ -343,12 +346,14 @@ struct sdap_attr_map rfc2307_autofs_entry_map[] = {<br> };<br><br> struct sdap_attr_map rfc2307bis_autofs_mobject_map[] = {<br>+ { "ldap_autofs_map_master_name", "automountMapMasterName", SYSDB_AUTOFS_MAP_MASTER_NAME, NULL },<br>
{ "ldap_autofs_map_object_class", "automountMap", SYSDB_AUTOFS_MAP_OC, NULL },<br> { "ldap_autofs_map_name", "automountMapName", SYSDB_AUTOFS_MAP_NAME, NULL },<br> SDAP_ATTR_MAP_TERMINATOR<br>
};<br><br> struct sdap_attr_map rfc2307bis_autofs_entry_map[] = {<br>+ { "ldap_autofs_map_master_name", "automountMapMasterName", SYSDB_AUTOFS_MAP_MASTER_NAME, NULL },<br> { "ldap_autofs_entry_object_class", "automount", SYSDB_AUTOFS_ENTRY_OC, NULL },<br>
{ "ldap_autofs_entry_key", "automountKey", SYSDB_AUTOFS_ENTRY_KEY, NULL },<br> { "ldap_autofs_entry_value", "automountInformation", SYSDB_AUTOFS_ENTRY_VALUE, NULL },<br>diff --git a/src/providers/ldap/sdap.h b/src/providers/ldap/sdap.h<br>
index 162250fff76295807cce0779bebdf88577ed755c..e56690a10907ede5205ddb463ff6d4fc226145b3 100644<br>--- a/src/providers/ldap/sdap.h<br>+++ b/src/providers/ldap/sdap.h<br>@@ -164,6 +164,7 @@ enum sdap_basic_opt {<br> SDAP_SUDO_INCLUDE_NETGROUPS,<br>
SDAP_SUDO_INCLUDE_REGEXP,<br> SDAP_AUTOFS_SEARCH_BASE,<br>+ SDAP_AUTOFS_MAP_MASTER_NAME,<br> SDAP_SCHEMA,<br> SDAP_OFFLINE_TIMEOUT,<br> SDAP_FORCE_UPPER_CASE_REALM,<br>@@ -327,6 +328,7 @@ enum sdap_service_attrs {<br>
};<br><br> enum sdap_autofs_map_attrs {<br>+ SDAP_AT_AUTOFS_MAP_MASTER_NAME,<br> SDAP_OC_AUTOFS_MAP,<br> SDAP_AT_AUTOFS_MAP_NAME,<br><br>@@ -334,6 +336,7 @@ enum sdap_autofs_map_attrs {<br> };<br><br> enum sdap_autofs_entry_attrs {<br>
+ _SDAP_AT_AUTOFS_MAP_MASTER_NAME,<br> SDAP_OC_AUTOFS_ENTRY,<br> SDAP_AT_AUTOFS_ENTRY_KEY,<br> SDAP_AT_AUTOFS_ENTRY_VALUE,<br>diff --git a/src/providers/ldap/sdap_autofs.c b/src/providers/ldap/sdap_autofs.c<br>
index 0bb211aa3e3ae9ec822e117f8febf8378bb09f79..e4ef7257bd251fdf7cc672c7f96bb67e3bc4ff32 100644<br>--- a/src/providers/ldap/sdap_autofs.c<br>+++ b/src/providers/ldap/sdap_autofs.c<br>@@ -30,6 +30,7 @@<br> #include "providers/ldap/sdap.h"<br>
#include "providers/ldap/sdap_async.h"<br> #include "providers/dp_backend.h"<br>+#include "providers/data_provider.h"<br> #include "db/sysdb_autofs.h"<br> #include "util/util.h"<br>
<br>@@ -82,6 +83,7 @@ void sdap_autofs_handler(struct be_req *be_req)<br> struct sdap_id_ctx *id_ctx;<br> struct be_autofs_req *autofs_req;<br> struct tevent_req *req;<br>+ const char *master_map;<br> int ret = EOK;<br>
<br> DEBUG(SSSDBG_TRACE_INTERNAL, ("sdap autofs handler called\n"));<br>@@ -98,6 +100,16 @@ void sdap_autofs_handler(struct be_req *be_req)<br> DEBUG(SSSDBG_FUNC_DATA, ("Requested refresh for: %s\n",<br>
autofs_req->mapname ? autofs_req->mapname : "<ALL>\n"));<br><br>+ if (autofs_req->mapname != NULL) {<br>+ master_map = dp_opt_get_string(id_ctx->opts->basic,<br>+ SDAP_AUTOFS_MAP_MASTER_NAME);<br>
+ if (strcmp(master_map, autofs_req->mapname) == 0) {<br>+ autofs_req->invalidate = true;<br>+ DEBUG(SSSDBG_FUNC_DATA, ("Refresh of automount master map triggered: %s\n",<br>+ autofs_req->mapname));<br>
+ }<br>+ }<br>+<br> if (autofs_req->invalidate) {<br> ret = sysdb_invalidate_autofs_maps(id_ctx->be->domain->sysdb,<br> id_ctx->be->domain);<br>
--<br>1.8.1.4<div><div class="h5"><br><br><br><br><br>On Mon, May 27, 2013 at 8:28 AM, Jakub Hrozek <<a href="mailto:jhrozek@redhat.com" target="_blank">jhrozek@redhat.com</a>> wrote:<br>><br>> On Fri, May 24, 2013 at 04:41:13PM -0700, C. S. wrote:<br>
> > Add ldap_autofs_map_master_name option so that the auto master map name<br>> > change be changed from the default auto.master.<br>><br>> Hi Cove,<br>><br>> this quite a good patch, thank you very much for the contribution.<br>
><br>> I haven't done much testing yet, but I only have a couple of small<br>> suggestions before we can apply the patch to master.<br>><br>> Here is a diff that summarizes them with comments inline:<br>
><br>> diff --git a/src/providers/ldap/ldap_common.c b/src/providers/ldap/ldap_common.c<br>> index 3e019d9..201dcbe 100644<br>> --- a/src/providers/ldap/ldap_common.c<br>> +++ b/src/providers/ldap/ldap_common.c<br>
> @@ -415,7 +415,6 @@ int ldap_get_autofs_options(TALLOC_CTX *memctx,<br>> /* automount master map name */<br>> master_map = dp_opt_get_string(opts->basic, SDAP_AUTOFS_MAP_MASTER_NAME);<br>> if (master_map == NULL) {<br>
> - master_map = strdup(AUTOFS_MAP_MASTER_NAME);<br>><br>> You don't have to strdup the option value, the call to dp_opt_set_string()<br>> duplicates the value itself and maintains the memory hierarchy as it<br>
> uses the talloc allocator.<br>><br>> ret = dp_opt_set_string(opts->basic, SDAP_AUTOFS_MAP_MASTER_NAME,<br>> master_map);<br>> if (ret != EOK) {<br>> diff --git a/src/providers/ldap/sdap.h b/src/providers/ldap/sdap.h<br>
> index e56690a..7d2d3f5 100644<br>> --- a/src/providers/ldap/sdap.h<br>> +++ b/src/providers/ldap/sdap.h<br>><br>> In the LDAP maps it's OK to add the new option to the "enum<br>> sdap_basic_opt". The reason is that SSSD maintains a couple of "option<br>
> maps" for both the LDAP provider as a whole and for the individual<br>> object maps. The LDAP provider maps describe how to get the object from<br>> LDAP (for instance it contains the search bases, timeouts, schema etc.)<br>
> and then the per-object maps describe how to get the individual objects<br>> (what attribute name describes which attribute, for instance "cn"<br>> usually stands for "name).<br>><br>> I was wondering for a short while whether the new attribute belongs to<br>
> the generic LDAP map or the autofs map object map, but I think this<br>> solution is OK. It describes a mean to get the master map, not any<br>> master map attribute.<br>><br>> @@ -328,7 +328,6 @@ enum sdap_service_attrs {<br>
> };<br>><br>> enum sdap_autofs_map_attrs {<br>> - SDAP_AT_AUTOFS_MAP_MASTER_NAME,<br>> SDAP_OC_AUTOFS_MAP,<br>> SDAP_AT_AUTOFS_MAP_NAME,<br>><br>> @@ -336,7 +335,6 @@ enum sdap_autofs_map_attrs {<br>
> };<br>><br>> enum sdap_autofs_entry_attrs {<br>> - _SDAP_AT_AUTOFS_MAP_MASTER_NAME,<br>> SDAP_OC_AUTOFS_ENTRY,<br>> SDAP_AT_AUTOFS_ENTRY_KEY,<br>> SDAP_AT_AUTOFS_ENTRY_VALUE,<br>
><br>><br>> Thank you again for the patch!<br>> _______________________________________________<br>> sssd-devel mailing list<br>> <a href="mailto:sssd-devel@lists.fedorahosted.org" target="_blank">sssd-devel@lists.fedorahosted.org</a><br>
> <a href="https://lists.fedorahosted.org/mailman/listinfo/sssd-devel" target="_blank">https://lists.fedorahosted.org/mailman/listinfo/sssd-devel</a></div></div></div>
</blockquote></div><br></div>