diff -up ./src/mappers/mail_mapper.c.strip-email-domain ./src/mappers/mail_mapper.c --- ./src/mappers/mail_mapper.c.strip-email-domain 2008-12-31 04:13:39.000000000 -0800 +++ ./src/mappers/mail_mapper.c 2017-03-10 18:09:01.608738541 -0800 @@ -49,6 +49,7 @@ static int ignorecase = 1; /* also check the domain part on email field */ static int ignoredomain = 1; +static int stripdomain = 0; static char *hostname = NULL; static int debug=0; @@ -81,6 +82,22 @@ static int check_domain(char *domain) { return 0; } +static char *mail_strip_email_user(char *email) +{ + char *at; + char *user = clone_str(email); + + if (user == NULL) { + return user; + } + at = strchr(email, '@'); + + if (at != NULL) { + user[at - email] = 0; + } + return user; +} + /** * compare previously mapped email against user name */ @@ -112,6 +129,10 @@ static char * mail_mapper_find_user(X509 DBG("get_email() failed"); return NULL; } + if (stripdomain) { + /* strip domain implies we aren't using a map file */ + return mail_strip_email_user(entries[0]); + } /* TODO: What's on ignoredomain flag ?*/ return mapfile_find(mapfile,entries[0],ignorecase); } @@ -176,11 +197,17 @@ mapper_module * mail_mapper_module_init( debug = scconf_get_bool(blk,"debug",0); ignorecase = scconf_get_bool(blk,"ignorecase",ignorecase); ignoredomain = scconf_get_bool(blk,"ignoredomain",ignoredomain); + stripdomain = scconf_get_bool(blk,"stripdomain",stripdomain); mapfile = scconf_get_str(blk,"mapfile",mapfile); } else { DBG1("No block declaration for mapper '%s'",mapper_name); } set_debug_level(debug); + + if (stripdomain) { + /* stripdomain implies ignore domain */ + ignoredomain = 1; + } /* obtain and store hostname */ /* Note: in some systems without nis/yp, getdomainname() call returns NULL. So instead we use gethostname() an match