* This file contains functions which handle the mapping of Internet addresses
* to users on the Citadel system.
*
- * Copyright (c) 1987-2018 by the citadel.org team
+ * Copyright (c) 1987-2019 by the citadel.org team
*
* This program is open source software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3.
*/
int alias(char *name)
{ /* process alias and routing info for mail */
- FILE *fp;
int a;
- char aaa[SIZ], bbb[SIZ];
+ char aaa[SIZ];
int at = 0;
char node[64];
remove_any_whitespace_to_the_left_or_right_of_at_symbol(name);
stripallbut(name, '<', '>');
- fp = fopen(file_mail_aliases, "r"); // when are we going to get rid of this?
- if (fp == NULL) {
- fp = fopen("/dev/null", "r");
- }
- if (fp == NULL) {
- return (MES_ERROR);
- }
- strcpy(aaa, "");
- strcpy(bbb, "");
- while (fgets(aaa, sizeof aaa, fp) != NULL) {
- while (isspace(name[0]))
- strcpy(name, &name[1]);
- aaa[strlen(aaa) - 1] = 0;
- strcpy(bbb, "");
- for (a = 0; aaa[a] != '\0'; ++a) {
- if (aaa[a] == ',') {
- strcpy(bbb, &aaa[a + 1]);
- aaa[a] = 0;
- break;
- }
- }
- if (!strcasecmp(name, aaa))
- strcpy(name, bbb);
- }
- fclose(fp);
-
/* Hit the email address directory */
if (CtdlDirectoryLookup(aaa, name, sizeof aaa) == 0) {
strcpy(name, aaa);
/*
* 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;
+void CtdlRebuildDirectoryIndex_backend(char *username, void *data) {
- /* this is the calling mode where we add a user */
+ int j = 0;
+ struct ctdluser usbuf;
- 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;
+ if (CtdlGetUser(&usbuf, username) != 0) {
return;
}
- /* this is the calling mode where we do the processing */
-
- int i, j;
- for (i=0; i<num_e; ++i) {
- if ( (!IsEmptyStr(e[i].name)) && (!IsEmptyStr(e[i].emails)) ) {
- for (j=0; j<num_tokens(e[i].emails, '|'); ++j) {
- char one_email[512];
- extract_token(one_email, e[i].emails, j, '|', sizeof one_email);
- CtdlDirectoryAddUser(one_email, e[i].name);
- }
+ if ( (!IsEmptyStr(usbuf.fullname)) && (!IsEmptyStr(usbuf.emailaddrs)) ) {
+ for (j=0; j<num_tokens(usbuf.emailaddrs, '|'); ++j) {
+ char one_email[512];
+ extract_token(one_email, usbuf.emailaddrs, j, '|', sizeof one_email);
+ CtdlDirectoryAddUser(one_email, usbuf.fullname);
}
}
- free(e);
- num_e = 0;
- alloc_e = 0;
- return;
}
syslog(LOG_INFO, "internet_addressing: rebuilding email address directory index");
cdb_trunc(CDB_DIRECTORY);
ForEachUser(CtdlRebuildDirectoryIndex_backend, NULL);
- CtdlRebuildDirectoryIndex_backend(NULL, NULL);
}