[asterisk-commits] dlee: branch dlee/ari-authn r393205 - in /team/dlee/ari-authn: main/ res/ res...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Jun 28 14:30:14 CDT 2013


Author: dlee
Date: Fri Jun 28 14:30:12 2013
New Revision: 393205

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=393205
Log:
Addressed review feedback.

* Consolidated the allocation of the ast_http_auth object
* Cleaned up the parsing of username:password using strsep
* Allocated config objects using AO2_ALLOC_OPT_LOCK_NOLOCK
* Logging message cleanups

Modified:
    team/dlee/ari-authn/main/http.c
    team/dlee/ari-authn/res/res_stasis_http.c
    team/dlee/ari-authn/res/stasis_http/config.c

Modified: team/dlee/ari-authn/main/http.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-authn/main/http.c?view=diff&rev=393205&r1=393204&r2=393205
==============================================================================
--- team/dlee/ari-authn/main/http.c (original)
+++ team/dlee/ari-authn/main/http.c Fri Jun 28 14:30:12 2013
@@ -879,22 +879,30 @@
 	const char *password)
 {
 	RAII_VAR(struct ast_http_auth *, auth, NULL, ao2_cleanup);
+	size_t userid_len;
+	size_t password_len;
 
 	if (!userid || !password) {
 		ast_log(LOG_ERROR, "Invalid userid/password\n");
 		return NULL;
 	}
 
-	auth = ao2_alloc(sizeof(*auth), auth_dtor);
+	userid_len = strlen(userid) + 1;
+	password_len = strlen(password) + 1;
+
+	/* Allocate enough room to store everything in one memory block */
+	auth = ao2_alloc(sizeof(*auth) + userid_len + password_len, auth_dtor);
 	if (!auth) {
 		return NULL;
 	}
 
-	auth->userid = ast_strdup(userid);
-	auth->password = ast_strdup(password);
-	if (!auth->userid || !auth->password) {
-		return NULL;
-	}
+	/* Put the userid right after the struct */
+	auth->userid = (char *)(auth + 1);
+	strcpy(auth->userid, userid);
+
+	/* Put the password right after the userid */
+	auth->password = auth->userid + userid_len;
+	strcpy(auth->password, password);
 
 	ao2_ref(auth, +1);
 	return auth;
@@ -910,8 +918,9 @@
 	for (v = headers; v; v = v->next) {
 		const char *base64;
 		char decoded[256] = {};
+		char *username;
+		char *password;
 		int cnt;
-		char *colon;
 
 		if (strcasecmp("Authorization", v->name) != 0) {
 			continue;
@@ -941,14 +950,14 @@
 		ast_assert(cnt < sizeof(decoded));
 
 		/* Split the string at the colon */
-		colon = strchr(decoded, ':');
-		if (!colon) {
+		password = decoded;
+		username = strsep(&password, ":");
+		if (!password) {
 			ast_log(LOG_WARNING, "Invalid Authorization header\n");
 			return NULL;
 		}
-		*colon = '\0';
-
-		return auth_create(decoded, colon + 1);
+
+		return auth_create(username, password);
 	}
 
 	return NULL;

Modified: team/dlee/ari-authn/res/res_stasis_http.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-authn/res/res_stasis_http.c?view=diff&rev=393205&r1=393204&r2=393205
==============================================================================
--- team/dlee/ari-authn/res/res_stasis_http.c (original)
+++ team/dlee/ari-authn/res/res_stasis_http.c Fri Jun 28 14:30:12 2013
@@ -713,29 +713,22 @@
  */
 static struct ari_conf_user *authenticate_api_key(const char *api_key)
 {
-	RAII_VAR(char *, username, NULL, ast_free);
-	RAII_VAR(struct ari_conf_user *, user, NULL, ao2_cleanup);
-	char *colon;
-
-	username = ast_strdup(api_key);
-	if (!username) {
+	RAII_VAR(char *, copy, NULL, ast_free);
+	char *username;
+	char *password;
+
+	password = copy = ast_strdup(api_key);
+	if (!copy) {
 		return NULL;
 	}
 
-	/* Split the string */
-	colon = strchr(username, ':');
-	if (!colon) {
+	username = strsep(&password, ":");
+	if (!password) {
+		ast_log(LOG_WARNING, "Invalid api_key\n");
 		return NULL;
 	}
-	*colon = '\0';
-
-	user = ari_config_validate_user(username, colon + 1);
-	if (!user) {
-		return NULL;
-	}
-
-	ao2_ref(user, +1);
-	return user;
+
+	return ari_config_validate_user(username, password);
 }
 
 /*!
@@ -874,7 +867,7 @@
 	if (response.message && !ast_json_is_null(response.message)) {
 		ast_str_append(&response_headers, 0,
 			       "Content-type: application/json\r\n");
-		if (ast_json_dump_str_format(response.message, &response_body, 
+		if (ast_json_dump_str_format(response.message, &response_body,
 				conf->general->format) != 0) {
 			/* Error encoding response */
 			response.response_code = 500;

Modified: team/dlee/ari-authn/res/stasis_http/config.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-authn/res/stasis_http/config.c?view=diff&rev=393205&r1=393204&r2=393205
==============================================================================
--- team/dlee/ari-authn/res/stasis_http/config.c (original)
+++ team/dlee/ari-authn/res/stasis_http/config.c Fri Jun 28 14:30:12 2013
@@ -104,7 +104,8 @@
 
 	ast_debug(3, "Allocating user %s\n", cat);
 
-	user = ao2_alloc(sizeof(*user), user_dtor);
+	user = ao2_alloc_options(sizeof(*user), user_dtor,
+		AO2_ALLOC_OPT_LOCK_NOLOCK);
 	if (!user) {
 		return NULL;
 	}
@@ -175,12 +176,14 @@
 {
 	RAII_VAR(struct ari_conf *, cfg, NULL, ao2_cleanup);
 
-	cfg = ao2_alloc(sizeof(*cfg), conf_destructor);
+	cfg = ao2_alloc_options(sizeof(*cfg), conf_destructor,
+		AO2_ALLOC_OPT_LOCK_NOLOCK);
 	if (!cfg) {
 		return NULL;
 	}
 
-	cfg->general = ao2_alloc(sizeof(*cfg->general), NULL);
+	cfg->general = ao2_alloc_options(sizeof(*cfg->general), NULL,
+		AO2_ALLOC_OPT_LOCK_NOLOCK);
 	if (!cfg->general) {
 		return NULL;
 	}
@@ -191,11 +194,13 @@
 	ao2_ref(cfg, +1);
 	return cfg;
 }
+
+#define CONF_FILENAME "stasis_http.conf"
 
 /*! \brief The conf file that's processed for the module. */
 static struct aco_file conf_file = {
 	/*! The config file name. */
-	.filename = "stasis_http.conf",
+	.filename = CONF_FILENAME,
 	/*! The mapping object types to be processed. */
 	.types = ACO_TYPES(&general_option, &user_option),
 };
@@ -207,7 +212,8 @@
 {
 	struct ari_conf *res = ao2_global_obj_ref(confs);
 	if (!res) {
-		ast_log(LOG_ERROR, "Error accessing configuration\n");
+		ast_log(LOG_ERROR,
+			"Error obtaining config from " CONF_FILENAME "\n");
 	}
 	return res;
 }
@@ -230,7 +236,7 @@
 	}
 
 	if (ast_strlen_zero(user->password)) {
-		ast_log(LOG_ERROR,
+		ast_log(LOG_WARNING,
 			"User '%s' missing password; authentication failed\n",
 			user->username);
 		return NULL;
@@ -259,7 +265,7 @@
 	struct ari_conf_user *user = obj;
 
 	if (ast_strlen_zero(user->password)) {
-		ast_log(LOG_ERROR, "User '%s' missing password\n",
+		ast_log(LOG_WARNING, "User '%s' missing password\n",
 			user->username);
 	}
 




More information about the asterisk-commits mailing list