From 9150fda1dc8e0c58dc24efb4472fd58ef284bff3 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Wed, 17 May 2017 20:33:55 -0400 Subject: [PATCH] Completed the code to insert each email address for each user into the directory index. --- citadel/internet_addressing.c | 76 +++++++++++++++++++++++--- citadel/modules/upgrade/serv_upgrade.c | 9 ++- 2 files changed, 72 insertions(+), 13 deletions(-) diff --git a/citadel/internet_addressing.c b/citadel/internet_addressing.c index 4bf5e0fe0..35c9fc3dd 100644 --- a/citadel/internet_addressing.c +++ b/citadel/internet_addressing.c @@ -1521,14 +1521,6 @@ int IsDirectory(char *addr, int allow_masq_domains) { } -/* - * Initialize the directory database (erasing anything already there) - */ -void CtdlRebuildDirectoryIndex(void) { - cdb_trunc(CDB_DIRECTORY); -} - - /* * Add an Internet e-mail address to the directory for a user */ @@ -1657,3 +1649,71 @@ char *harvest_collected_addresses(struct CtdlMessage *msg) { } return(coll); } + + +/* + * Helper function for CtdlRebuildDirectoryIndex() + * + * Call this function as a ForEachUser backend in order to queue up + * user names, or call it with a null user to make it do the processing. + * This allows us to maintain the list as a static instead of passing + * pointers around. + */ +void CtdlRebuildDirectoryIndex_backend(struct ctdluser *usbuf, void *data) { + + struct crdib { + char name[64]; + char emails[512]; + }; + + static struct crdib *e = NULL; + static int num_e = 0; + static int alloc_e = 0; + + /* this is the calling mode where we add a user */ + + if (usbuf != NULL) { + if (num_e >= alloc_e) { + if (alloc_e == 0) { + alloc_e = 100; + e = malloc(sizeof(struct crdib) * alloc_e); + } + else { + alloc_e *= 2; + e = realloc(e, (sizeof(struct crdib) * alloc_e)); + } + } + strcpy(e[num_e].name, usbuf->fullname); + strcpy(e[num_e].emails, usbuf->emailaddrs); + ++num_e; + return; + } + + /* this is the calling mode where we do the processing */ + + int i, j; + for (i=0; i = <%s>", m[i].name, m[i].emails); if (CtdlGetUser(&u, m[i].name) == 0) { @@ -496,7 +494,6 @@ void miafvtur_backend(struct ctdluser *usbuf, void *data) { free(m); num_m = 0; alloc_m = 0; - abort(); return; } @@ -509,6 +506,8 @@ void move_inet_addrs_from_vcards_to_user_records(void) { ForEachUser(miafvtur_backend, NULL); miafvtur_backend(NULL, NULL); + CtdlRebuildDirectoryIndex(); + abort(); } -- 2.30.2