X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Finternet_addressing.c;h=3bbf8245423a483b77b05d3c5ab5b205c189913f;hb=ad9a6c64ba19522bf721195183abe07fba5429bb;hp=41666dfef3725060a748e3142f45ea72ddbebf28;hpb=f8b2f12ff02fa18337582046e424f3d8e34fd5cc;p=citadel.git diff --git a/citadel/internet_addressing.c b/citadel/internet_addressing.c index 41666dfef..3bbf82454 100644 --- a/citadel/internet_addressing.c +++ b/citadel/internet_addressing.c @@ -94,6 +94,10 @@ int CtdlHostAlias(char *fqdn) { && (!strcasecmp(&fqdn[strlen(fqdn)-strlen(host)], host))) return(hostalias_directory); + if ( (!strcasecmp(type, "masqdomain")) + && (!strcasecmp(&fqdn[strlen(fqdn)-strlen(host)], host))) + return(hostalias_masq); + } return(hostalias_nomatch); @@ -564,7 +568,7 @@ void directory_key(char *key, char *addr) { /* Return nonzero if the supplied address is in a domain we keep in * the directory */ -int IsDirectory(char *addr) { +int IsDirectory(char *addr, int allow_masq_domains) { char domain[256]; int h; @@ -573,6 +577,9 @@ int IsDirectory(char *addr) { h = CtdlHostAlias(domain); + if ( (h == hostalias_masq) && allow_masq_domains) + return(1); + if ( (h == hostalias_localhost) || (h == hostalias_directory) ) { return(1); } @@ -598,7 +605,7 @@ void CtdlDirectoryAddUser(char *internet_addr, char *citadel_addr) { lprintf(CTDL_DEBUG, "Dir: %s --> %s\n", internet_addr, citadel_addr); - if (IsDirectory(internet_addr) == 0) return; + if (IsDirectory(internet_addr, 0) == 0) return; directory_key(key, internet_addr); @@ -637,7 +644,7 @@ int CtdlDirectoryLookup(char *target, char *internet_addr, size_t targbuflen) { if (num_tokens(internet_addr, '@') != 2) return(-1); /* Only do lookups for domains in the directory */ - if (IsDirectory(internet_addr) == 0) return(-1); + if (IsDirectory(internet_addr, 0) == 0) return(-1); directory_key(key, internet_addr); cdbrec = cdb_fetch(CDB_DIRECTORY, key, strlen(key) ); @@ -674,7 +681,7 @@ char *harvest_collected_addresses(struct CtdlMessage *msg) { strcat(addr, " <"); strcat(addr, msg->cm_fields['F']); strcat(addr, ">"); - if (IsDirectory(msg->cm_fields['F'])) { + if (IsDirectory(msg->cm_fields['F'], 0)) { is_harvestable = 0; } }