Changeset 6738a67 for lib/misc.c


Ignore:
Timestamp:
2008-07-16T23:22:52Z (11 years ago)
Author:
Sven Moritz Hallberg <pesco@…>
Branches:
master
Children:
9b55485
Parents:
9730d72 (diff), 6a78c0e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge in latest trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/misc.c

    r9730d72 r6738a67  
    3333#define BITLBEE_CORE
    3434#include "nogaim.h"
     35#include "base64.h"
    3536#include <stdio.h>
    3637#include <stdlib.h>
     
    5960        strcpy(text, text2);
    6061        g_free(text2);
    61 }
    62 
    63 char *normalize(const char *s)
    64 {
    65         static char buf[BUF_LEN];
    66         char *t, *u;
    67         int x = 0;
    68 
    69         g_return_val_if_fail((s != NULL), NULL);
    70 
    71         u = t = g_strdup(s);
    72 
    73         strcpy(t, s);
    74         g_strdown(t);
    75 
    76         while (*t && (x < BUF_LEN - 1)) {
    77                 if (*t != ' ') {
    78                         buf[x] = *t;
    79                         x++;
    80                 }
    81                 t++;
    82         }
    83         buf[x] = '\0';
    84         g_free(u);
    85         return buf;
    8662}
    8763
     
    408384void random_bytes( unsigned char *buf, int count )
    409385{
     386#ifndef _WIN32
    410387        static int use_dev = -1;
    411388       
     
    457434       
    458435        if( !use_dev )
     436#endif
    459437        {
    460438                int i;
     
    608586                return sockerr_again();
    609587}
     588
     589/* Returns values: -1 == Failure (base64-decoded to something unexpected)
     590                    0 == Okay
     591                    1 == Password doesn't match the hash. */
     592int md5_verify_password( char *password, char *hash )
     593{
     594        md5_byte_t *pass_dec = NULL;
     595        md5_byte_t pass_md5[16];
     596        md5_state_t md5_state;
     597        int ret = -1, i;
     598       
     599        if( base64_decode( hash, &pass_dec ) == 21 )
     600        {
     601                md5_init( &md5_state );
     602                md5_append( &md5_state, (md5_byte_t*) password, strlen( password ) );
     603                md5_append( &md5_state, (md5_byte_t*) pass_dec + 16, 5 ); /* Hmmm, salt! */
     604                md5_finish( &md5_state, pass_md5 );
     605               
     606                for( i = 0; i < 16; i ++ )
     607                {
     608                        if( pass_dec[i] != pass_md5[i] )
     609                        {
     610                                ret = 1;
     611                                break;
     612                        }
     613                }
     614               
     615                /* If we reached the end of the loop, it was a match! */
     616                if( i == 16 )
     617                        ret = 0;
     618        }
     619       
     620        g_free( pass_dec );
     621
     622        return ret;
     623}
Note: See TracChangeset for help on using the changeset viewer.