aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2006-06-19 01:07:28 +0200
committerWilmer van der Gaast <wilmer@gaast.net>2006-06-19 01:07:28 +0200
commitd28f3b35855c8f8de0be9589334004b30d1ac394 (patch)
tree4fd11d3d2f6884162c0ca96a4f26268fcd5154e6
parent10efa911cbf0d3761d42cc3e57973c8cd1a92821 (diff)
Now saving the password's md5sum instead of the plaintext version.
-rw-r--r--storage_xml.c36
1 files changed, 28 insertions, 8 deletions
diff --git a/storage_xml.c b/storage_xml.c
index 5eda46cc..12afe472 100644
--- a/storage_xml.c
+++ b/storage_xml.c
@@ -25,6 +25,7 @@
#define BITLBEE_CORE
#include "bitlbee.h"
+#include "md5.h"
typedef enum
{
@@ -80,16 +81,35 @@ static void xml_start_element( GMarkupParseContext *ctx, const gchar *element_na
g_set_error( error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
"Missing attributes for %s element", element_name );
}
- else if( strcmp( nick, xd->given_nick ) == 0 &&
- strcmp( pass, xd->given_pass ) == 0 )
- {
- if( xd->pass_st != XML_PASS_CHECK_ONLY )
- xd->pass_st = XML_PASS_OK;
- }
else
{
- g_set_error( error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
- XML_PASS_ERRORMSG );
+ md5_byte_t pass_md5[16];
+ md5_state_t md5_state;
+ int pass_match, i, j;
+
+ md5_init( &md5_state );
+ md5_append( &md5_state, xd->given_pass, strlen( xd->given_pass ) );
+ md5_finish( &md5_state, pass_md5 );
+
+ for( i = 0; i < 16 && pass[i*2] && pass[i*2+1]; i ++ )
+ {
+ sscanf( pass + i * 2, "%2x", &j );
+ if( j != pass_md5[i] )
+ break;
+ }
+ /* If we reached the end of the loop, it was a match! */
+ pass_match = i == 16;
+
+ if( strcmp( nick, xd->given_nick ) == 0 && pass_match )
+ {
+ if( xd->pass_st != XML_PASS_CHECK_ONLY )
+ xd->pass_st = XML_PASS_OK;
+ }
+ else
+ {
+ g_set_error( error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
+ XML_PASS_ERRORMSG );
+ }
}
}
else if( xd->pass_st < XML_PASS_OK )