summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRich Megginson <rmeggins@redhat.com>2008-08-15 17:37:45 -0600
committerRob Crittenden <rcritten@redhat.com>2008-10-13 14:15:17 -0400
commit430225f42f852d17f996da07b4b2f62ad9d2a44e (patch)
tree88b0da74e9d457df7ef1c2ad6c6e20c65dee0013
parent57fbd098f0483de6c56136e88323aeacf70657c6 (diff)
downloadfreeipa-430225f42f852d17f996da07b4b2f62ad9d2a44e.tar.gz
freeipa-430225f42f852d17f996da07b4b2f62ad9d2a44e.tar.xz
freeipa-430225f42f852d17f996da07b4b2f62ad9d2a44e.zip
Added the new IPA WinSync Plug-in Work done so far * added the new plugin to makefiles, spec file * added stubs for the api, including begin update, end update, and destroy callbacks * added config code to allow dynamic dse config changes and auto-discovery of realm and new user objectclass list
-rw-r--r--ipa-server/configure.ac1
-rw-r--r--ipa-server/ipa-server.spec.in3
-rw-r--r--ipa-server/ipa-slapi-plugins/Makefile.am1
-rw-r--r--ipa-server/ipa-slapi-plugins/ipa-winsync/Makefile.am6
-rw-r--r--ipa-server/ipa-slapi-plugins/ipa-winsync/ipa-winsync.c116
5 files changed, 109 insertions, 18 deletions
diff --git a/ipa-server/configure.ac b/ipa-server/configure.ac
index d11e7cc55..2bc96332b 100644
--- a/ipa-server/configure.ac
+++ b/ipa-server/configure.ac
@@ -293,6 +293,7 @@ AC_CONFIG_FILES([
ipa-slapi-plugins/dna/Makefile
ipa-slapi-plugins/ipa-memberof/Makefile
ipa-slapi-plugins/ipa-pwd-extop/Makefile
+ ipa-slapi-plugins/ipa-winsync/Makefile
xmlrpc-server/Makefile
xmlrpc-server/test/Makefile
man/Makefile
diff --git a/ipa-server/ipa-server.spec.in b/ipa-server/ipa-server.spec.in
index ab4d3a53c..b60c9ff85 100644
--- a/ipa-server/ipa-server.spec.in
+++ b/ipa-server/ipa-server.spec.in
@@ -71,6 +71,7 @@ make install
rm %{buildroot}/%{plugin_dir}/libipa_pwd_extop.la
rm %{buildroot}/%{plugin_dir}/libipa-memberof-plugin.la
rm %{buildroot}/%{plugin_dir}/libipa-dna-plugin.la
+rm %{buildroot}/%{plugin_dir}/libipa-winsync.la
# Some user-modifiable HTML files are provided. Move these to /etc
# and link back.
@@ -161,6 +162,7 @@ fi
%attr(755,root,root) %{plugin_dir}/libipa_pwd_extop.so
%attr(755,root,root) %{plugin_dir}/libipa-memberof-plugin.so
%attr(755,root,root) %{plugin_dir}/libipa-dna-plugin.so
+%attr(755,root,root) %{plugin_dir}/libipa-winsync.so
%dir %{_localstatedir}/lib/ipa
%attr(700,root,root) %dir %{_localstatedir}/lib/ipa/sysrestore
@@ -282,3 +284,4 @@ fi
* Fri Jul 27 2007 Karl MacMillan <kmacmill@redhat.com> - 0.1.0-1
- Initial rpm version
+* Wed Aug 1 2007 Rob Crittenden <rcritten@redhat.com> - 0.1.0-2
diff --git a/ipa-server/ipa-slapi-plugins/Makefile.am b/ipa-server/ipa-slapi-plugins/Makefile.am
index 134f29d2f..f316371c3 100644
--- a/ipa-server/ipa-slapi-plugins/Makefile.am
+++ b/ipa-server/ipa-slapi-plugins/Makefile.am
@@ -4,6 +4,7 @@ SUBDIRS = \
ipa-pwd-extop \
ipa-memberof \
dna \
+ ipa-winsync \
$(NULL)
EXTRA_DIST = \
diff --git a/ipa-server/ipa-slapi-plugins/ipa-winsync/Makefile.am b/ipa-server/ipa-slapi-plugins/ipa-winsync/Makefile.am
index e8375ba34..94bc2dc68 100644
--- a/ipa-server/ipa-slapi-plugins/ipa-winsync/Makefile.am
+++ b/ipa-server/ipa-slapi-plugins/ipa-winsync/Makefile.am
@@ -8,6 +8,7 @@ INCLUDES = \
-DLIBDIR=\""$(libdir)"\" \
-DLIBEXECDIR=\""$(libexecdir)"\" \
-DDATADIR=\""$(datadir)"\" \
+ $(MOZLDAP_CFLAGS) \
$(WARN_CFLAGS) \
$(NULL)
@@ -17,14 +18,13 @@ plugin_LTLIBRARIES = \
$(NULL)
libipa_winsync_la_SOURCES = \
- ipa_winsync.c \
+ ipa-winsync.c \
+ ipa-winsync-config.c \
$(NULL)
libipa_winsync_la_LDFLAGS = -avoid-version
#libipa_winsync_la_LIBADD = \
-# $(KRB5_LIBS) \
-# $(SSL_LIBS) \
# $(MOZLDAP_LIBS) \
# $(NULL)
diff --git a/ipa-server/ipa-slapi-plugins/ipa-winsync/ipa-winsync.c b/ipa-server/ipa-slapi-plugins/ipa-winsync/ipa-winsync.c
index bad907bc6..2c29567a3 100644
--- a/ipa-server/ipa-slapi-plugins/ipa-winsync/ipa-winsync.c
+++ b/ipa-server/ipa-slapi-plugins/ipa-winsync/ipa-winsync.c
@@ -52,8 +52,9 @@
#include <dirsrv/slapi-plugin.h>
#include <dirsrv/winsync-plugin.h>
+#include <ipa-winsync.h>
-static char *ipa_winsync_plugin_name = "ipa-winsync";
+static char *ipa_winsync_plugin_name = IPA_WINSYNC_PLUGIN_NAME;
/* This is called when a new agreement is created or loaded
at startup.
@@ -61,15 +62,19 @@ static char *ipa_winsync_plugin_name = "ipa-winsync";
static void *
ipa_winsync_agmt_init(const Slapi_DN *ds_subtree, const Slapi_DN *ad_subtree)
{
+ void *cbdata = NULL;
slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
"--> ipa_winsync_agmt_init [%s] [%s] -- begin\n",
slapi_sdn_get_dn(ds_subtree),
slapi_sdn_get_dn(ad_subtree));
+ /* do the domain specific configuration based on the ds subtree */
+ cbdata = ipa_winsync_config_new_domain(ds_subtree, ad_subtree);
+
slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
"<-- ipa_winsync_agmt_init -- end\n");
- return NULL;
+ return cbdata;
}
static void
@@ -202,6 +207,8 @@ ipa_winsync_pre_ds_add_user_cb(void *cbdata, const Slapi_Entry *rawentry,
slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
"--> ipa_winsync_pre_ds_add_user_cb -- begin\n");
+ /* add the objectclasses to the entry */
+
slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
"<-- ipa_winsync_pre_ds_add_user_cb -- end\n");
@@ -239,7 +246,7 @@ ipa_winsync_get_new_ds_user_dn_cb(void *cbdata, const Slapi_Entry *rawentry,
}
slapi_ch_free_string(new_dn_string);
- *new_dn_string = PR_smprintf("%s,%s", rdns[0], slapi_sdn_get_dn(ds_suffix));
+ *new_dn_string = slapi_ch_smprintf("%s,%s", rdns[0], slapi_sdn_get_dn(ds_suffix));
ldap_value_free(rdns);
slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
@@ -304,17 +311,48 @@ ipa_winsync_can_add_entry_to_ad_cb(void *cbdata, const Slapi_Entry *local_entry,
return 0; /* false - do not allow entries to be added to ad */
}
-/**
- * Plugin identifiers
- */
-static Slapi_PluginDesc ipa_winsync_pdesc = {
- "ipa-winsync-plugin",
- PLUGIN_MAGIC_VENDOR_STR,
- PRODUCTTEXT,
- "ipa winsync plugin"
-};
+static void
+ipa_winsync_begin_update_cb(void *cbdata, const Slapi_DN *ds_subtree,
+ const Slapi_DN *ad_subtree, int is_total)
+{
+ slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
+ "--> ipa_winsync_begin_update_cb -- begin\n");
-static Slapi_ComponentId *ipa_winsync_plugin_id = NULL;
+ ipa_winsync_config_refresh_domain(cbdata, ds_subtree, ad_subtree);
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
+ "<-- ipa_winsync_begin_update_cb -- end\n");
+
+ return;
+}
+
+static void
+ipa_winsync_end_update_cb(void *cbdata, const Slapi_DN *ds_subtree,
+ const Slapi_DN *ad_subtree, int is_total)
+{
+ slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
+ "--> ipa_winsync_end_update_cb -- begin\n");
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
+ "<-- ipa_winsync_end_update_cb -- end\n");
+
+ return;
+}
+
+static void
+ipa_winsync_destroy_agmt_cb(void *cbdata, const Slapi_DN *ds_subtree,
+ const Slapi_DN *ad_subtree)
+{
+ slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
+ "--> ipa_winsync_destroy_agmt_cb -- begin\n");
+
+ ipa_winsync_config_destroy_domain(cbdata, ds_subtree, ad_subtree);
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
+ "<-- ipa_winsync_destroy_agmt_cb -- end\n");
+
+ return;
+}
static void *ipa_winsync_api[] = {
NULL, /* reserved for api broker use, must be zero */
@@ -333,12 +371,44 @@ static void *ipa_winsync_api[] = {
ipa_winsync_get_new_ds_group_dn_cb,
ipa_winsync_pre_ad_mod_user_mods_cb,
ipa_winsync_pre_ad_mod_group_mods_cb,
- ipa_winsync_can_add_entry_to_ad_cb
+ ipa_winsync_can_add_entry_to_ad_cb,
+ ipa_winsync_begin_update_cb,
+ ipa_winsync_end_update_cb,
+ ipa_winsync_destroy_agmt_cb
+};
+
+/**
+ * Plugin identifiers
+ */
+static Slapi_PluginDesc ipa_winsync_pdesc = {
+ "ipa-winsync-plugin",
+ "FreeIPA project",
+ "FreeIPA/1.0",
+ "ipa winsync plugin"
};
+static Slapi_ComponentId *ipa_winsync_plugin_id = NULL;
+
+/*
+** Plugin identity mgmt
+*/
+
+void ipa_winsync_set_plugin_identity(void * identity)
+{
+ ipa_winsync_plugin_id=identity;
+}
+
+void * ipa_winsync_get_plugin_identity()
+{
+ return ipa_winsync_plugin_id;
+}
+
static int
ipa_winsync_plugin_start(Slapi_PBlock *pb)
{
+ int rc;
+ Slapi_Entry *config_e = NULL; /* entry containing plugin config */
+
slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
"--> ipa_winsync_plugin_start -- begin\n");
@@ -348,6 +418,18 @@ ipa_winsync_plugin_start(Slapi_PBlock *pb)
return -1;
}
+ if ( slapi_pblock_get( pb, SLAPI_ADD_ENTRY, &config_e ) != 0 ) {
+ slapi_log_error( SLAPI_LOG_FATAL, ipa_winsync_plugin_name,
+ "missing config entry\n" );
+ return( -1 );
+ }
+
+ if (( rc = ipa_winsync_config( config_e )) != LDAP_SUCCESS ) {
+ slapi_log_error( SLAPI_LOG_FATAL, ipa_winsync_plugin_name,
+ "configuration failed (%s)\n", ldap_err2string( rc ));
+ return( -1 );
+ }
+
slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
"<-- ipa_winsync_plugin_start -- end\n");
return 0;
@@ -371,6 +453,8 @@ ipa_winsync_plugin_close(Slapi_PBlock *pb)
*/
int ipa_winsync_plugin_init(Slapi_PBlock *pb)
{
+ void *plugin_id = NULL;
+
slapi_log_error(SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
"--> ipa_winsync_plugin_init -- begin\n");
@@ -390,12 +474,14 @@ int ipa_winsync_plugin_init(Slapi_PBlock *pb)
/* Retrieve and save the plugin identity to later pass to
internal operations */
- if (slapi_pblock_get(pb, SLAPI_PLUGIN_IDENTITY, &ipa_winsync_plugin_id) != 0) {
+ if (slapi_pblock_get(pb, SLAPI_PLUGIN_IDENTITY, &plugin_id) != 0) {
slapi_log_error(SLAPI_LOG_FATAL, ipa_winsync_plugin_name,
"<-- ipa_winsync_plugin_init -- failed to retrieve plugin identity -- end\n");
return -1;
}
+ ipa_winsync_set_plugin_identity(plugin_id);
+
slapi_log_error( SLAPI_LOG_PLUGIN, ipa_winsync_plugin_name,
"<-- ipa_winsync_plugin_init -- end\n");
return 0;