view src/auth/password-scheme-rpa.c @ 8999:afc1b0ef120d HEAD

When :MAILBOXDIR= was empty, we might have appended extra '/' to it, which caused problems.
author Timo Sirainen <>
date Thu, 30 Apr 2009 20:00:09 -0400
parents a6a49d5efc59
line wrap: on
line source

#include "lib.h"
#include "buffer.h"
#include "md5.h"
#include "hex-binary.h"
#include "safe-memset.h"
#include "password-scheme.h"

void *ucs2be_str(pool_t pool, const char *str, size_t *size);

 * Convert string to big-endian ucs2.
void *ucs2be_str(pool_t pool, const char *str, size_t *size)
	buffer_t *buf = buffer_create_dynamic(pool, 32);

	while (*str) {
		buffer_append_c(buf, '\0');
		buffer_append_c(buf, *str++);

	*size = buffer_get_used_size(buf);
	return buffer_free_without_data(&buf);

void password_generate_rpa(const char *pw, unsigned char result[])
	unsigned char *ucs2be_pw;
	size_t size;

	ucs2be_pw = ucs2be_str(unsafe_data_stack_pool, pw, &size);
	md5_get_digest(ucs2be_pw, size, result);
	safe_memset(ucs2be_pw, 0, size);