[asterisk-commits] russell: branch group/res_config_ldap r63357 - /team/group/res_config_ldap/res/

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Mon May 7 16:36:18 MST 2007


Author: russell
Date: Mon May  7 18:36:17 2007
New Revision: 63357

URL: http://svn.digium.com/view/asterisk?view=rev&rev=63357
Log:
Merge a bunch of coding guidelines type changes ... 

Modified:
    team/group/res_config_ldap/res/res_config_ldap.c

Modified: team/group/res_config_ldap/res/res_config_ldap.c
URL: http://svn.digium.com/view/asterisk/team/group/res_config_ldap/res/res_config_ldap.c?view=diff&rev=63357&r1=63356&r2=63357
==============================================================================
--- team/group/res_config_ldap/res/res_config_ldap.c (original)
+++ team/group/res_config_ldap/res/res_config_ldap.c Mon May  7 18:36:17 2007
@@ -53,22 +53,21 @@
 #include "asterisk/pbx.h"
 #include "asterisk/linkedlists.h"
 
-static char *res_config_ldap_desc = "LDAP RealTime Configuration Driver";
+#define RES_CONFIG_LDAP_CONF "res_ldap.conf"
+
 AST_MUTEX_DEFINE_STATIC(ldap_lock);
-#define RES_CONFIG_LDAP_CONF "res_ldap.conf"
-static LDAP *ldapConn = NULL;
-static char host[512] = "";
-static char user[512] = "";
-static char pass[50] = "";
-static char basedn[512] = "";
+
+static LDAP *ldapConn;
+static char host[512];
+static char user[512];
+static char pass[50];
+static char basedn[512];
 static int port = 389;
-static time_t connect_time = 0;
+static time_t connect_time;
 
 static int parse_config(void);
 static int ldap_reconnect(void);
 static int realtime_ldap_status(int fd, int argc, char **argv);
-
-int LOCAL_USER_DECL;
 
 struct category_and_metric {
 	char *name;
@@ -90,53 +89,53 @@
 
 /*! \brief Table configuration */
 struct ldap_table_config {
-	char *table_name;			/*!< table name */
-	char *additional_filter;		/*!< additional filter        */
-	struct ast_variable *attributes;	/*!< attribute names conversion */
-	struct ast_variable *escapes; /*!< characters to escape(i.e., * - the ldap wildchar) */
-	struct ast_variable *delimiters; /*!< the current delimiter is semicolon, so we are not using this variable */
-	struct ldap_table_config *next;		/*!< next entry */
-	
+	char *table_name;                 /*!< table name */
+	char *additional_filter;          /*!< additional filter        */
+	struct ast_variable *attributes;  /*!< attribute names conversion */
+	struct ast_variable *escapes;     /*!< characters to escape(i.e., * - the ldap wildchar) */
+	struct ast_variable *delimiters;  /*!< the current delimiter is semicolon, so we are not using this variable */
+	AST_LIST_ENTRY(ldap_table_config) entry;
 };
 
 /*! \brief Should be locked before using it */
-static struct ldap_table_config *table_configs = NULL;
-static struct ldap_table_config *base_table_config = NULL;
-static struct ldap_table_config *static_table_config = NULL;
+static AST_LIST_HEAD_NOLOCK_STATIC(table_configs, ldap_table_config);
+static struct ldap_table_config *base_table_config;
+static struct ldap_table_config *static_table_config;
 
 /*! \brief Create a new table_config */
 static struct ldap_table_config *table_config_new(const char *table_name)
 {
 	struct ldap_table_config *p = ast_calloc(1, sizeof(*p));
+
 	if (table_name)
 		p->table_name = strdup(table_name);
+
 	return p;
 }
 
-/*! \brief Find a table_config - Should be locked before using it */
+/*! \brief Find a table_config - Should be locked before using it 
+ *  \note This function assumes ldap_lock to be locked. */
 static struct ldap_table_config *table_config_for_table_name(const char *table_name)
 {
-	struct ldap_table_config *c = table_configs;
-	while (c) {
-		if (strcmp(c->table_name, table_name) == 0)
-			return c;
-		else
-			c = c->next;
-	}
-	return NULL;
+	struct ldap_table_config *c = NULL;
+
+	AST_LIST_TRAVERSE(&table_configs, c, entry) {
+		if (!strcmp(c->table_name, table_name))
+			break;
+	}
+
+	return c;
 }
 
 /*! \brief Find variable by name */
-static struct ast_variable *variable_named(struct ast_variable *var,
-					   const char *name)
-{
-	while (var) {
-		if (strcasecmp(name, var->name) == 0)
-			return var;
-		else
-			var = var->next;
-	}
-	return NULL;
+static struct ast_variable *variable_named(struct ast_variable *var, const char *name)
+{
+	for (; var; var = var->next) {
+		if (!strcasecmp(name, var->name))
+			break;
+	}
+
+	return var;
 }
 
 /*! \brief for the semicolon delimiter
@@ -144,47 +143,45 @@
 
 	\return number of occurances of the delimiter(semicolon)
  */
-static int semicolon_count_str(const char * somestr){
-	int i=0;
-	int count=0;
-	while (somestr[i] != '\0'){
-		if (somestr[i] == ';'){
+static int semicolon_count_str(const char *somestr)
+{
+	int count = 0;
+
+	for (; *somestr; somestr++) {
+		if (*somestr == ';')
 			count++;
-		}
-		i++;
-	}
+	}
+
 	return count;
 } 
 
 /* takes a linked list of \a ast_variable variables, finds the one with the name variable_value
  * and returns the number of semicolons in the value for that \a ast_variable
  */
-static int semicolon_count_var(struct ast_variable * var){
-	int count = 0;
-	struct ast_variable * var_value =
-		variable_named(var, "variable_value");
-	if(var_value == NULL)
+static int semicolon_count_var(struct ast_variable *var)
+{
+	struct ast_variable *var_value = variable_named(var, "variable_value");
+
+	if (!var_value)
 		return 0;
 
 	if (option_debug)
 		ast_log(LOG_DEBUG, "LINE(%d) semicolon_count_var: %s\n", __LINE__, var_value->value);
 
-	count = semicolon_count_str(var_value->value);
-
-	return count;
+	return semicolon_count_str(var_value->value);
 }
 
 /*! \brief add escape characters to the table config (e.g., the * character)
  */
 static void ldap_table_config_add_escape(struct ldap_table_config *table_config,
-					    const char *escape_string)
+	const char *escape_string)
 {
 	if (escape_string && *escape_string) {
 		char *string = strdup(escape_string);
 		char *start = string;
+		char *p = strstr(start, "=>");
 		if (option_debug)
 			ast_log(LOG_DEBUG, "LDAP RealTime: Add escape: start: %s\n", start);
-		char *p = strstr(start, "=>");
 		if (!p) {
 			ast_log(LOG_WARNING,
 					"LDAP RealTime: Missing '=>' in escape: %s in %s\n",
@@ -230,7 +227,6 @@
 		free(string);
 	}
 }
-					   
 
 /*! \brief add attribute to table config - Should be locked before using it */
 static void ldap_table_config_add_attribute(struct ldap_table_config *table_config,
@@ -289,50 +285,48 @@
 	}
 }
 
-/*! \brief Free table_config */
+/*! \brief Free table_config 
+ *  \note assumes ldap_lock to be locked */
 static void table_configs_free(void)
 {
-	struct ldap_table_config *c = table_configs;
-
-	while (c) {
-		struct ldap_table_config *next = c->next;
+	struct ldap_table_config *c;
+
+	while ((c = AST_LIST_REMOVE_HEAD(&table_configs, entry))) {
 		if (c->table_name)
 			free(c->table_name);
 		if (c->additional_filter)
 			free(c->additional_filter);
-		if (c->attributes) {
+		if (c->attributes)
 			ast_variables_destroy(c->attributes);
-		}
-		if (c->escapes) {
+		if (c->escapes)
 			ast_variables_destroy(c->escapes);
-		};
 		free(c);
-		c = next;
-	}
-	table_configs = NULL;
+	}
+
 	base_table_config = NULL;
+	static_table_config = NULL;
 }
 
 /*! \brief Convert variable name to ldap attribute name - Should be locked before using it */
 static const char *convert_attribute_name_to_ldap(struct ldap_table_config *table_config,
-						  const char *attribute_name)
+	const char *attribute_name)
 {
 	int i = 0;
-	for (i = 0; i < 2; i++) {
-		if (table_config) {
-			struct ast_variable *attribute = table_config->attributes;
-			while (attribute) {
-				if (strcasecmp(attribute_name, attribute->name) == 0)
-					return attribute->value;
-				else
-					attribute = attribute->next;
-			}
-		}
-		if (table_config == base_table_config)
-			break;
-		else
-			table_config = base_table_config;
-	}
+	struct ldap_table_config *configs[] = { table_config, base_table_config };
+
+	for (i = 0; i < ARRAY_LEN(configs); i++) {
+		struct ast_variable *attribute;
+
+		if (!configs[i])
+			continue;
+
+		attribute = configs[i]->attributes;
+		for (; attribute; attribute = attribute->next) {
+			if (!strcasecmp(attribute_name, attribute->name))
+				return attribute->value;
+		}
+	}
+
 	return attribute_name;
 }
 
@@ -341,23 +335,21 @@
 						    const char *attribute_name)
 {
 	int i = 0;
-
-	for (i = 0; i < 2; i++) {
-		if (table_config) {
-			struct ast_variable *attribute = table_config->attributes;
-
-			while (attribute) {
-				if (strcasecmp(attribute_name, attribute->value) == 0)
-					return attribute->name;
-				else
-					attribute = attribute->next;
-			}
-		}
-		if (table_config == base_table_config)
-			break;
-		else
-			table_config = base_table_config;
-	}
+	struct ldap_table_config *configs[] = { table_config, base_table_config };
+
+	for (i = 0; i < ARRAY_LEN(configs); i++) {
+		struct ast_variable *attribute;
+	
+		if (!configs[i])
+			continue;
+
+		attribute = configs[i]->attributes;
+		for (; attribute; attribute = attribute->next) {
+			if (strcasecmp(attribute_name, attribute->value) == 0)
+				return attribute->name;
+		}
+	}
+
 	return attribute_name;
 }
 
@@ -372,24 +364,21 @@
 	BerElement *ber = NULL;
 	struct ast_variable *var = NULL;
 	struct ast_variable *prev = NULL;
-	int is_delimited=0;
-	int i=0;
-
-	char *ldap_attribute_name = ldap_first_attribute(ldapConn, ldap_entry, &ber);
-//	char *value;
+	int is_delimited = 0;
+	int i = 0;
+	char *ldap_attribute_name;
 	struct berval *value;
-	int pos=0;
+	int pos = 0;
+
+	ldap_attribute_name = ldap_first_attribute(ldapConn, ldap_entry, &ber);
 
 	while (ldap_attribute_name) {
-		const char *attribute_name =
-			convert_attribute_name_from_ldap(table_config,ldap_attribute_name);
+		struct berval **values = NULL;
+		const char *attribute_name = convert_attribute_name_from_ldap(table_config,ldap_attribute_name);
 		int is_realmed_password_attribute = strcasecmp(attribute_name, "md5secret") == 0;
-//		char **values = NULL;
-		struct berval **values = NULL;
 
 		values = ldap_get_values_len(ldapConn, ldap_entry, ldap_attribute_name);/*these are freed at the end*/
 		if (values) {
-//			char **v = values;
 			struct berval **v = values;
 
 			while (*v) {
@@ -510,12 +499,10 @@
 				const char *attribute_name =
 					convert_attribute_name_from_ldap(table_config,ldap_attribute_name);
 				int is_realmed_password_attribute = strcasecmp(attribute_name, "md5secret") == 0;
-			//	char **values = NULL;
 				struct berval **values = NULL;
 
 				values = ldap_get_values_len(ldapConn, ldap_entry, ldap_attribute_name);
 				if (values) {
-					//char **v = values;
 					struct berval **v = values;
 
 					while (*v) {
@@ -909,10 +896,14 @@
 	struct ast_variable **vars = NULL;
 	const char *newparam = NULL;
 	const char *newval = NULL;
-
-	if (option_debug > 1)
-		ast_log(LOG_DEBUG,
-			"realtime_ldap_base: basedn: %s table_name: %s\n", basedn, table_name);
+	struct ldap_table_config *table_config = NULL;
+	char *clean_basedn = cleaned_basedn(NULL, basedn);
+	char *filter = NULL;
+	int filter_size = 0;
+	int tries = 0;
+	int result = 0;
+	LDAPMessage *ldap_result = NULL;
+
 	if (!table_name) {
 		ast_log(LOG_WARNING, "No table_name specified.\n");
 		return NULL;
@@ -921,9 +912,10 @@
 	/* Get the first parameter and first value in our list of passed paramater/value pairs  */
 	newparam = va_arg(ap, const char *);
 	newval = va_arg(ap, const char *);
+
 	if (!newparam || !newval) {
-		ast_log(LOG_WARNING,
-				"Realtime retrieval requires at least 1 parameter and 1 value to search on.\n");
+		ast_log(LOG_WARNING, "Realtime retrieval requires at least 1 parameter"
+			" and 1 value to search on.\n");
 		return NULL;
 	}
 
@@ -935,52 +927,33 @@
 		return NULL;
 	}
 	
-	struct ldap_table_config *table_config = NULL;
-
 	table_config = table_config_for_table_name(table_name);
 	if (!table_config) {
-		ast_log(LOG_WARNING,
-				"No table named '%s'.\n",
-				table_name);
+		ast_log(LOG_WARNING, "No table named '%s'.\n", table_name);
 		ast_mutex_unlock(&ldap_lock);
 		return NULL;
 	}
 	
-	char *clean_basedn = cleaned_basedn(NULL, basedn);
-	char *filter = NULL;
-	int filter_size = 0;
-	int tries = 0;
-
-	int result = 0;
-	LDAPMessage *ldap_result = NULL;
-
 	append_string_to_filter(&filter, &filter_size, "(&");
 
 	if (table_config && table_config->additional_filter) {
 		append_string_to_filter(&filter, &filter_size,
 			table_config->additional_filter);
 	}
-	if (table_config != base_table_config && base_table_config
-		&& base_table_config->additional_filter) {
-			append_string_to_filter(&filter, &filter_size,
-				base_table_config->additional_filter);
+	if (table_config != base_table_config && base_table_config && 
+		base_table_config->additional_filter) {
+		append_string_to_filter(&filter, &filter_size, base_table_config->additional_filter);
 	}
 
 	/* Create the first part of the query using the first parameter/value pairs we just extracted */
 	/*   If there is only 1 set, then we have our query. Otherwise, loop thru the list and concat */
 
-	append_var_and_value_to_filter(&filter, &filter_size,
-		   table_config, newparam, newval);
+	append_var_and_value_to_filter(&filter, &filter_size, table_config, newparam, newval);
 	while ((newparam = va_arg(ap, const char *))) {
 		newval = va_arg(ap, const char *);
-		append_var_and_value_to_filter(&filter, &filter_size,
-			   table_config, newparam, newval);
+		append_var_and_value_to_filter(&filter, &filter_size, table_config, newparam, newval);
 	}
 	append_string_to_filter(&filter, &filter_size, ")");
-
-	if (option_debug)
-		ast_log(LOG_DEBUG, "filter: %s\n", filter);
-
 
 	do {
 		/* freeing ldap_result further down */
@@ -1004,13 +977,9 @@
 	} while (result < 0 && tries < 3 && is_ldap_connect_error(result));
 
 	if (result < 0) {
-		ast_log(LOG_WARNING,
-				"Failed to query database. Check debug for more info.\n");
-		ast_log(LOG_WARNING, "Query: %s\n",
-				filter);
-		ast_log(LOG_WARNING,
-				"Query Failed because: %s\n",
-					ldap_err2string(result));
+		ast_log(LOG_WARNING, "Failed to query database. Check debug for more info.\n");
+		ast_log(LOG_WARNING, "Query: %s\n", filter);
+		ast_log(LOG_WARNING, "Query Failed because: %s\n", ldap_err2string(result));
 	} else {
 		/* this is where we create the variables from the search result 
 		 * freeing this \a vars outside this function */
@@ -1021,7 +990,6 @@
 			ast_log(LOG_WARNING, "Could not find any entry matching %s in base dn %s.\n",
 				filter, clean_basedn);
 		}
-
 
 		ldap_msgfree(ldap_result);
 
@@ -1073,11 +1041,15 @@
 			}
 		}
 	}
+
 	if (filter)
 		free(filter);
+
 	if (clean_basedn)
 		free(clean_basedn);
+
 	ast_mutex_unlock(&ldap_lock);
+
 	return vars;
 }
 
@@ -1091,6 +1063,7 @@
 	va_start(ap, table_name);
 	vars = realtime_ldap_base(entries_count_ptr, basedn, table_name, ap);
 	va_end(ap);
+
 	return vars;
 }
 
@@ -1335,12 +1308,10 @@
 static
 */
 static int update_ldap(const char *basedn, const char *table_name, const char *attribute,
-                                                const char *lookup, va_list ap)
+	const char *lookup, va_list ap)
 {
 	int error=0;
 	LDAPMessage *ldap_entry = NULL;
-	//struct ast_variable **vars = NULL;
-	/*!< done defining counting vars */
 	LDAPMod ** ldap_mods;
 	const char *newparam = NULL;
 	const char *newval = NULL;
@@ -1357,7 +1328,6 @@
 	int result = 0;
 	LDAPMessage *ldap_result = NULL;
 
-
 	if (option_debug > 1)
 		ast_log(LOG_DEBUG,
 			"realtime_ldap_base: basedn: %s table_name: %s\n", basedn, table_name);
@@ -1381,9 +1351,7 @@
 
 	table_config = table_config_for_table_name(table_name);
 	if (!table_config) {
-		ast_log(LOG_WARNING,
-				"No table named '%s'.\n",
-				table_name);
+		ast_log(LOG_WARNING, "No table named '%s'.\n", table_name);
 		ast_mutex_unlock(&ldap_lock);
 		return -1;
 	}
@@ -1398,15 +1366,14 @@
 	}
 	if (table_config != base_table_config && base_table_config
 		&& base_table_config->additional_filter) {
-			append_string_to_filter(&filter, &filter_size,
-				base_table_config->additional_filter);
+		append_string_to_filter(&filter, &filter_size, base_table_config->additional_filter);
 	}
 	append_var_and_value_to_filter(&filter, &filter_size, table_config, attribute, lookup);
 	append_string_to_filter(&filter, &filter_size, ")");
-	if (option_debug)
-		ast_log(LOG_DEBUG, "filter: %s\n", filter);
-	
-	/* Create the modification array with the parameter/value pairs we were given, if there are several parameters with the same name, we collect them into one parameter/value pair and delimit them with a semicolon */
+	
+	/* Create the modification array with the parameter/value pairs we were given, 
+	 * if there are several parameters with the same name, we collect them into 
+	 * one parameter/value pair and delimit them with a semicolon */
 	newparam = va_arg(ap, const char *);
 	newparam = convert_attribute_name_to_ldap(table_config, newparam);
 	newval = va_arg(ap, const char *);
@@ -1541,7 +1508,7 @@
 	.update_func = update_ldap
 };
 
-static int load_module(void *mod) {
+static int load_module(void) {
 	
 	if (parse_config() < 0) {
 		ast_log(LOG_NOTICE, "Cannot load LDAP RealTime driver.\n");
@@ -1563,7 +1530,7 @@
 	return 0;
 }
 
-static int unload_module(void *mod)
+static int unload_module(void)
 {
 	/* Aquire control before doing anything to the module itself. */
 	ast_mutex_lock(&ldap_lock);
@@ -1587,7 +1554,7 @@
 	return 0;
 }
 
-static int reload(void *mod)
+static int reload(void)
 {
 	/* Aquire control before doing anything to the module itself. */
 	ast_mutex_lock(&ldap_lock);
@@ -1677,9 +1644,7 @@
 				table_config_for_table_name(category_name);
 			if (!table_config) {
 				table_config = table_config_new(category_name);
-				if (table_configs)
-					table_config->next = table_configs;
-				table_configs = table_config;
+				AST_LIST_INSERT_HEAD(&table_configs, table_config, entry);
 				if (is_general)
 					base_table_config = table_config;
 				if (is_config)
@@ -1711,16 +1676,6 @@
 	}
 	return 1;
 }
-
-static const char *description(void)
-{
-	return res_config_ldap_desc;
-}
-
-//static const char *key(void)
-//{
-//	return ASTERISK_GPL_KEY;
-//}
 
 static int ldap_reconnect(void)
 {
@@ -1808,8 +1763,7 @@
 }
 
 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "LDAP realtime interface",
-                .load = load_module,
-				.unload = unload_module,
-				.reload = reload,
-				.description = description,
-			   );
+	.load = load_module,
+	.unload = unload_module,
+	.reload = reload,
+);



More information about the asterisk-commits mailing list