/*
* Copyright (c) 2012 Marien Zwart
* Rights to this code are as documented in doc/LICENSE.
*
* Canonicalize gmail addresses:
* - Remove dots from the address.
* - Remove labels (+foo).
*/
#include "atheme.h"
DECLARE_MODULE_V1
(
"misc/canon_gmail", false, _modinit, _moddeinit,
PACKAGE_STRING,
VENDOR_STRING
);
static void canonicalize_gmail(char email[EMAILLEN + 1], void *user_data)
{
static char buf[EMAILLEN + 1];
const char *p, *p_at;
char *p_out;
stringref result;
p_at = strchr(email, '@');
if (!p_at || strcasecmp(p_at, "@gmail.com"))
return;
for (p = email, p_out = buf; p < p_at; p++) {
if (*p == '.')
continue;
if (*p == '+')
break;
*p_out++ = *p;
}
/* Note the string handling here relies on the email address
* passed in being at most EMAILLEN long, and the canonical
* address being at most equally long. That is true for the
* loop above, but if we start mapping equivalent domains here
* be careful not to overflow the buffer.
*/
strcpy(p_out, "@gmail.com");
strcpy(email, buf);
}
void _modinit(module_t *m)
{
register_email_canonicalizer(canonicalize_gmail, NULL);
}
void _moddeinit(module_unload_intent_t intent)
{
unregister_email_canonicalizer(canonicalize_gmail, NULL);
}