[Freeswitch-svn] [commit] r10087 - in freeswitch/trunk/src: . include mod/applications/mod_commands mod/applications/mod_voicemail

Freeswitch SVN anthm at freeswitch.org
Mon Oct 20 19:27:31 EDT 2008


Author: anthm
Date: Mon Oct 20 19:27:29 2008
New Revision: 10087

Modified:
   freeswitch/trunk/src/include/switch_apr.h
   freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c
   freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c
   freeswitch/trunk/src/switch_apr.c

Log:
all vm to auth from the same a1-hash param used by sip (part deux)

Modified: freeswitch/trunk/src/include/switch_apr.h
==============================================================================
--- freeswitch/trunk/src/include/switch_apr.h	(original)
+++ freeswitch/trunk/src/include/switch_apr.h	Mon Oct 20 19:27:29 2008
@@ -510,6 +510,7 @@
 #define SWITCH_UUID_FORMATTED_LENGTH 36
 
 #define SWITCH_MD5_DIGESTSIZE 16
+#define SWITCH_MD5_DIGEST_STRING_SIZE 33
 
 /**
  * Format a UUID into a string, following the standard format
@@ -540,6 +541,7 @@
  * @param inputLen The length of the message block
  */
 SWITCH_DECLARE(switch_status_t) switch_md5(unsigned char digest[SWITCH_MD5_DIGESTSIZE], const void *input, switch_size_t inputLen);
+SWITCH_DECLARE(switch_status_t) switch_md5_string(char digest_str[SWITCH_MD5_DIGEST_STRING_SIZE], const void *input, switch_size_t inputLen);
 
 /** @} */
 

Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c	(original)
+++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c	Mon Oct 20 19:27:29 2008
@@ -192,6 +192,22 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
+
+
+SWITCH_STANDARD_API(md5_function)
+{
+	char digest[SWITCH_MD5_DIGEST_STRING_SIZE] = { 0 };
+
+	if (switch_strlen_zero(cmd)) {
+		stream->write_function(stream, "%s", "!err!");
+	} else {
+		switch_md5_string(digest, (void *) cmd, strlen(cmd));
+		stream->write_function(stream, "%s", digest);
+	}
+
+    return SWITCH_STATUS_SUCCESS;
+}
+
 SWITCH_STANDARD_API(url_decode_function)
 {
 	char *reply = "";
@@ -2725,6 +2741,7 @@
 	switch_api_interface_t *commands_api_interface;
 	*module_interface = switch_loadable_module_create_module_interface(pool, modname);
 
+	SWITCH_ADD_API(commands_api_interface, "md5", "md5", md5_function, "<data>");
 	SWITCH_ADD_API(commands_api_interface, "hupall", "hupall", hupall_api_function, "<cause> [<var> <value>]");
 	SWITCH_ADD_API(commands_api_interface, "strftime_tz", "strftime_tz", strftime_tz_api_function, "<Timezone_name> [format string]");
 	SWITCH_ADD_API(commands_api_interface, "originate", "Originate a Call", originate_function, ORIGINATE_SYNTAX);

Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c	(original)
+++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c	Mon Oct 20 19:27:29 2008
@@ -2003,9 +2003,9 @@
 
 					if (!auth && (thepass || thehash) && mypass) {
 						if (thehash) {
-							unsigned char digest[SWITCH_MD5_DIGESTSIZE] = { 0 };
+							char digest[SWITCH_MD5_DIGEST_STRING_SIZE] = { 0 };
 							char *lpbuf = switch_mprintf("%s:%s:%s", myid, domain_name, mypass);
-							switch_md5(digest, (void *) lpbuf, strlen(lpbuf));
+							switch_md5_string(digest, (void *) lpbuf, strlen(lpbuf));
 							if (!strcmp(digest, thehash)) {
 								auth++;
 							}

Modified: freeswitch/trunk/src/switch_apr.c
==============================================================================
--- freeswitch/trunk/src/switch_apr.c	(original)
+++ freeswitch/trunk/src/switch_apr.c	Mon Oct 20 19:27:29 2008
@@ -813,6 +813,20 @@
 	return apr_md5(digest, input, inputLen);
 }
 
+SWITCH_DECLARE(switch_status_t) switch_md5_string(char digest_str[SWITCH_MD5_DIGEST_STRING_SIZE], const void *input, switch_size_t inputLen)
+{
+	unsigned char digest[SWITCH_MD5_DIGESTSIZE];
+	apr_status_t status = apr_md5(digest, input, inputLen);
+	int x;
+
+	digest_str[SWITCH_MD5_DIGEST_STRING_SIZE - 1] = '\0';
+
+	for( x = 0; x < SWITCH_MD5_DIGESTSIZE; x++) {
+		switch_snprintf(digest_str + (x * 2), 3, "%02x", digest[x]);
+	}
+
+	return status;
+}
 
 /* FIFO queues (apr-util) */
 



More information about the Freeswitch-svn mailing list