[Fedora-directory-commits] ldapserver/ldap/servers/plugins/dna dna.c, 1.3, 1.4

Nathan Kinder (nkinder) fedora-directory-commits at redhat.com
Wed Jul 23 16:33:33 UTC 2008


Author: nkinder

Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/dna
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv26526

Modified Files:
	dna.c 
Log Message:
Resolves: 456162
Summary: Merge in DNA plug-in code from FreeIPA



View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.3 -r 1.4 dna.c
Index: dna.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/dna/dna.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- dna.c	18 Oct 2007 22:25:14 -0000	1.3
+++ dna.c	23 Jul 2008 16:33:31 -0000	1.4
@@ -2,15 +2,15 @@
  * 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; version 2 of the License.
- * 
+ *
  * 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, write to the Free Software Foundation, Inc., 59 Temple
  * Place, Suite 330, Boston, MA 02111-1307 USA.
- * 
+ *
  * In addition, as a special exception, Red Hat, Inc. gives You the additional
  * right to link the code of this Program with code not covered under the GNU
  * General Public License ("Non-GPL Code") and to distribute linked combinations
@@ -28,9 +28,9 @@
  * version of the file, but you are not obligated to do so. If you do not wish to
  * provide this exception without modification, you must delete this exception
  * statement from your version and license this file solely under the GPL without
- * exception. 
- * 
- * 
+ * exception.
+ *
+ *
  * Copyright (C) 2007 Red Hat, Inc.
  * All rights reserved.
  * END COPYRIGHT BLOCK **/
@@ -41,11 +41,12 @@
 
 
 /**
- * Distributed Numeric Assignment plug-in 
+ * Distributed Numeric Assignment plug-in
  */
 #include <stdio.h>
 #include <ctype.h>
 #include <string.h>
+#include <errno.h>
 #include "portable.h"
 #include "nspr.h"
 #include "slapi-private.h"
@@ -59,55 +60,67 @@
 #include <sys/stat.h>
 #endif
 
-#define DNA_PLUGIN_SUBSYSTEM			"dna-plugin"
-#define DNA_PLUGIN_VERSION				0x00010000
+#define DNA_PLUGIN_SUBSYSTEM "dna-plugin"
+#define DNA_PLUGIN_VERSION 0x00020000
 
-#define DNA_DN							"cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config" /* temporary */
+#define DNA_DN "cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config" /* temporary */
 
-#define DNA_SUCCESS					0
-#define DNA_FAILURE					-1
+#define DNA_SUCCESS 0
+#define DNA_FAILURE -1
 
 /**
  * DNA config types
  */
-#define DNA_TYPE	"dnaType"
-#define DNA_PREFIX	"dnaPrefix"
-#define DNA_NEXTVAL	"dnaNextValue"
-#define DNA_INTERVAL	"dnaInterval"
-#define DNA_GENERATE	"dnaMagicRegen"
-#define DNA_FILTER	"dnaFilter"
-#define DNA_SCOPE	"dnaScope"
-
-#define FEATURE_DESC	"Distributed Numeric Assignment"
-#define PLUGIN_DESC	"Distributed Numeric Assignment plugin"
-
-static Slapi_PluginDesc pdesc = { 	FEATURE_DESC,
-				  	PLUGIN_MAGIC_VENDOR_STR,
-				  	PRODUCTTEXT,
-					PLUGIN_DESC };
+#define DNA_TYPE            "dnaType"
+#define DNA_PREFIX          "dnaPrefix"
+#define DNA_NEXTVAL         "dnaNextValue"
+#define DNA_INTERVAL        "dnaInterval"
+#define DNA_GENERATE        "dnaMagicRegen"
+#define DNA_FILTER          "dnaFilter"
+#define DNA_SCOPE           "dnaScope"
+
+/* since v2 */
+#define DNA_MAXVAL          "dnaMaxValue"
+#define DNA_SHARED_CFG_DN   "dnaSharedCfgDN"
+
+/* Shared Config */
+#define DNA_GLOBAL_RANGE    "dnaGlobalRange"
+#define DNA_RANGE           "dnaRange"
+#define DNA_MAX_RANGE_SIZE  "dnaMaxRangeSize"
+#define DNA_CHUNK_SIZE      "dnaChunkSize"
+
+#define FEATURE_DESC    "Distributed Numeric Assignment"
+#define PLUGIN_DESC     "Distributed Numeric Assignment plugin"
+
+static Slapi_PluginDesc pdesc = { FEATURE_DESC,
+                                  PLUGIN_MAGIC_VENDOR_STR,
+                                  PRODUCTTEXT,
+                                  PLUGIN_DESC };
 
 
 /**
  * linked list of config entries
  */
 
-struct _defs {
-	PRCList list;
-	char *dn;
-	char *type;
-	char *prefix;
-	unsigned long nextval;
-	unsigned long interval;
-	struct slapi_filter *filter;
-	char *generate;
-	char *scope;
-} dna_anchor;
-typedef struct _defs configEntry;
-static PRCList *config;
+struct configEntry {
+    PRCList list;
+    char *dn;
+    char *type;
+    char *prefix;
+    PRUint64 nextval;
+    PRUint64 interval;
+    PRUint64 maxval;
+    char *filter;
+    struct slapi_filter *slapi_filter;
+    char *generate;
+    char *scope;
+};
+
+static PRCList *dna_global_config = NULL;
 static PRRWLock *g_dna_cache_lock;
 
-static void *_PluginID					= NULL;
-static char *_PluginDN					= NULL;
+static void *_PluginID = NULL;
+static char *_PluginDN = NULL;
 
 
 /*
@@ -116,49 +129,50 @@
 static Slapi_Mutex *g_new_value_lock;
 
 /**
- *	
+ *
  * DNA plug-in management functions
  *
  */
-int dna_init(Slapi_PBlock *pb); 
-static int dna_start(Slapi_PBlock *pb);
-static int dna_close(Slapi_PBlock *pb);
-static int dna_postop_init(Slapi_PBlock *pb);
+int dna_init(Slapi_PBlock * pb);
+static int dna_start(Slapi_PBlock * pb);
+static int dna_close(Slapi_PBlock * pb);
+static int dna_postop_init(Slapi_PBlock * pb);
 
 /**
- *	
+ *
  * Local operation functions
  *
  */
 static int loadPluginConfig();
-static int parseConfigEntry(Slapi_Entry *e);
+static int parseConfigEntry(Slapi_Entry * e);
 static void deleteConfig();
-static void freeConfigEntry(configEntry **entry);
+static void freeConfigEntry(struct configEntry ** entry);
 
 /**
  *
  * helpers
  *
  */
-static char *dna_get_dn(Slapi_PBlock *pb);
+static char *dna_get_dn(Slapi_PBlock * pb);
 static int dna_dn_is_config(char *dn);
-static int dna_get_next_value(configEntry *config_entry, char **next_value_ret);
+static int dna_get_next_value(struct configEntry * config_entry,
+                                 char **next_value_ret);
 
[...1820 lines suppressed...]
-                                slapi_ch_free_string(&new_value);
-
-                                /* make sure we don't generate for this 
-				 * type again
-				 */
-                                if(LDAP_SUCCESS == ret)
-                                {
-                                        last_type = config_entry->type;
-                                }
+                new_value = slapi_ch_malloc(len);
 
-                                generate = 0;
-                        }
-next:
-                        list = PR_NEXT_LINK (list);
+                if (config_entry->prefix) {
+                    strcpy(new_value, config_entry->prefix);
+                    strcat(new_value, value);
+                } else
+                    strcpy(new_value, value);
+
+                /* do the mod */
+                if (LDAP_CHANGETYPE_ADD == modtype) {
+                    /* add - add to entry */
+                    slapi_entry_attr_set_charptr(e,
+                                                 config_entry->type,
+                                                 new_value);
+                } else {
+                    /* mod - add to mods */
+                    slapi_mods_add_string(smods,
+                                          LDAP_MOD_REPLACE,
+                                          config_entry->type, new_value);
+                }
+
+                /* free up */
+                slapi_ch_free_string(&value);
+                slapi_ch_free_string(&new_value);
+
+                /* make sure we don't generate for this
+                 * type again
+                 */
+                if (LDAP_SUCCESS == ret) {
+                    last_type = config_entry->type;
                 }
+
+                generate = 0;
+            }
+          next:
+            list = PR_NEXT_LINK(list);
         }
+    }
 
-        dna_unlock();
+    dna_unlock();
 
-bailmod:
-        if(LDAP_CHANGETYPE_MODIFY == modtype)
-	{
-		/* these are the mods you made, really, 
-		 * I didn't change them, honest, just had a quick look
-		 */
-		mods = slapi_mods_get_ldapmods_passout(smods);
-		slapi_pblock_set( pb, SLAPI_MODIFY_MODS, mods);
-		slapi_mods_free(&smods);
-	}
+  bailmod:
+    if (LDAP_CHANGETYPE_MODIFY == modtype) {
+        /* these are the mods you made, really,
+         * I didn't change them, honest, just had a quick look
+         */
+        mods = slapi_mods_get_ldapmods_passout(smods);
+        slapi_pblock_set(pb, SLAPI_MODIFY_MODS, mods);
+        slapi_mods_free(&smods);
+    }
 
-bail:
+  bail:
 
-	if(free_entry && e)
-		slapi_entry_free(e);
+    if (free_entry && e)
+        slapi_entry_free(e);
 
-	if(ret)
-		slapi_log_error( SLAPI_LOG_PLUGIN, DNA_PLUGIN_SUBSYSTEM , "dna_pre_op: operation failure [%d]\n", ret);
+    if (ret) {
+        slapi_log_error(SLAPI_LOG_PLUGIN, DNA_PLUGIN_SUBSYSTEM,
+                        "dna_pre_op: operation failure [%d]\n", ret);
+        slapi_send_ldap_result(pb, ret, NULL, errstr, 0, NULL);
+        slapi_ch_free((void **)&errstr);
+        ret = DNA_FAILURE;
+    }
 
-        slapi_log_error( SLAPI_LOG_TRACE, DNA_PLUGIN_SUBSYSTEM , "<-- dna_pre_op\n");
+    slapi_log_error(SLAPI_LOG_TRACE, DNA_PLUGIN_SUBSYSTEM,
+                    "<-- dna_pre_op\n");
 
-        return ret;
+    return ret;
 }
 
-
-static int dna_add_pre_op( Slapi_PBlock *pb )
+static int dna_add_pre_op(Slapi_PBlock * pb)
 {
-        return dna_pre_op(pb, LDAP_CHANGETYPE_ADD);
+    return dna_pre_op(pb, LDAP_CHANGETYPE_ADD);
 }
 
-static int dna_mod_pre_op( Slapi_PBlock *pb )
+static int dna_mod_pre_op(Slapi_PBlock * pb)
 {
-        return dna_pre_op(pb, LDAP_CHANGETYPE_MODIFY);
+    return dna_pre_op(pb, LDAP_CHANGETYPE_MODIFY);
 }
 
-static int dna_config_check_post_op(Slapi_PBlock *pb)
+static int dna_config_check_post_op(Slapi_PBlock * pb)
 {
-        char *dn;
+    char *dn;
 
-        slapi_log_error( SLAPI_LOG_TRACE, DNA_PLUGIN_SUBSYSTEM , "--> dna_config_check_post_op\n");
+    slapi_log_error(SLAPI_LOG_TRACE, DNA_PLUGIN_SUBSYSTEM,
+                    "--> dna_config_check_post_op\n");
 
-        if(dn = dna_get_dn(pb))
-	{
-		if(dna_dn_is_config(dn))
-			loadPluginConfig();
-	}
+    if ((dn = dna_get_dn(pb))) {
+        if (dna_dn_is_config(dn))
+            loadPluginConfig();
+    }
 
-        slapi_log_error( SLAPI_LOG_TRACE, DNA_PLUGIN_SUBSYSTEM , "<-- dna_config_check_post_op\n");
+    slapi_log_error(SLAPI_LOG_TRACE, DNA_PLUGIN_SUBSYSTEM,
+                    "<-- dna_config_check_post_op\n");
 
-	return 0;
+    return 0;
 }
 
 /****************************************************
@@ -1149,36 +1387,27 @@
  */
 void dnaDumpConfig()
 {
-	PRCList *list;
+    PRCList *list;
 
-	dna_read_lock();
-
-	if(!PR_CLIST_IS_EMPTY(config))
-	{
-		list = PR_LIST_HEAD(config);
-		while(list != config)
-		{
-			dnaDumpConfigEntry((configEntry*)list);
-			list = PR_NEXT_LINK (list);
-		}
-	}				
-
-	dna_unlock();
-}
+    dna_read_lock();
 
+    if (!PR_CLIST_IS_EMPTY(dna_global_config)) {
+        list = PR_LIST_HEAD(dna_global_config);
+        while (list != dna_global_config) {
+            dnaDumpConfigEntry((struct configEntry *) list);
+            list = PR_NEXT_LINK(list);
+        }
+    }
 
-void dnaDumpConfigEntry(configEntry *entry)
-{
-	char buffer[BUFSIZ];
-	size_t bufsiz = (size_t)sizeof(buffer);
-	printf("<- type --------------> %s\n", entry->type);
-	printf("<---- prefix ---------> %s\n", entry->prefix);
-	printf("<---- next value -----> %lu\n", entry->nextval);
-	printf("<---- interval -------> %lu\n", entry->interval);
-	buffer[0] = '\0';
-	printf("<---- filter ---------> %s\n", 
-		slapi_filter_to_string_internal((const struct slapi_filter *)entry->filter, buffer, &bufsiz));
-	printf("<---- generate flag --> %s\n", entry->generate);
+    dna_unlock();
 }
 
 
+void dnaDumpConfigEntry(struct configEntry * entry)
+{
+    printf("<- type --------------> %s\n", entry->type);
+    printf("<---- prefix ---------> %s\n", entry->prefix);
+    printf("<---- next value -----> %lu\n", entry->nextval);
+    printf("<---- interval -------> %lu\n", entry->interval);
+    printf("<---- generate flag --> %s\n", entry->generate);
+}




More information about the Fedora-directory-commits mailing list