In the text client - fixed the logic for determining whether to display the email...
[citadel.git] / textclient / messages.c
index cb5e4dd1b2afd17615f87a2bd096f6e35356ee96..7fd9502df3831326b3c2afff2563fada38dc121b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Text client functions for reading and writing of messages
  *
- * Copyright (c) 1987-2019 by the citadel.org team
+ * Copyright (c) 1987-2020 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.
@@ -390,10 +390,11 @@ void mini_2047_decode(char *s)
 /*
  * Read a message from the server
  */
-int read_message(CtdlIPC * ipc, long num,      /* message number */
-                int pagin,     /* 0 = normal read, 1 = read with pagination, 2 = header */
-                FILE * dest)
-{                              /* Destination file, NULL for screen */
+int read_message(CtdlIPC *ipc,
+               long num,       /* message number */
+               int pagin,      /* 0 = normal read, 1 = read with pagination, 2 = header */
+               FILE *dest      /* Destination file, NULL for screen */
+) {
        char buf[SIZ];
        char now[256];
        int format_type = 0;
@@ -409,6 +410,7 @@ int read_message(CtdlIPC * ipc, long num,   /* message number */
        char ch;
        int linelen;
        int final_line_is_blank = 0;
+       int is_local = 0;
 
        has_images = 0;
 
@@ -432,7 +434,8 @@ int read_message(CtdlIPC * ipc, long num,   /* message number */
 
        if (dest) {
                fprintf(dest, "\n ");
-       } else {
+       }
+       else {
                scr_printf("\n");
                if (pagin != 2) {
                        scr_printf(" ");
@@ -442,6 +445,18 @@ int read_message(CtdlIPC * ipc, long num,  /* message number */
                color(BRIGHT_CYAN);
        }
 
+       /* Determine if the message originated here on the local system.  If it did we will suppress printing of email addresses */
+       is_local = 0;
+       char *at = !IsEmptyStr(message->email) ? strchr(message->email,'@') : NULL;
+       if (at) {
+               if (!strcasecmp(++at, ipc->ServInfo.fqdn)) {
+                       is_local = 1;
+               }
+       }
+       else {
+               is_local = 1;           // no address means it couldn't have originated anywhere else
+       }
+
        /* View headers only */
        if (pagin == 2) {
                scr_printf("nhdr=%s\nfrom=%s\ntype=%d\nmsgn=%s\n",
@@ -452,8 +467,7 @@ int read_message(CtdlIPC * ipc, long num,   /* message number */
                if (!IsEmptyStr(message->email)) {
                        scr_printf("rfca=%s\n", message->email);
                }
-               scr_printf("room=%s\ntime=%s", message->room, asctime(localtime(&message->time))
-                   );
+               scr_printf("room=%s\ntime=%s", message->room, asctime(localtime(&message->time)));
                if (!IsEmptyStr(message->recipient)) {
                        scr_printf("rcpt=%s\n", message->recipient);
                }
@@ -488,26 +502,29 @@ int read_message(CtdlIPC * ipc, long num, /* message number */
        if (nhdr == 1 && !is_room_aide) {
                if (dest) {
                        fprintf(dest, " ****");
-               } else {
+               }
+               else {
                        scr_printf(" ****");
                }
-       } else {
+       }
+       else {
                struct tm thetime;
                localtime_r(&message->time, &thetime);
                strftime(now, sizeof now, "%F %R", &thetime);
                if (dest) {
                        fprintf(dest, "%s from %s ", now, message->author);
-                       if (!IsEmptyStr(message->email)) {
+                       if (!is_local) {
                                fprintf(dest, "<%s> ", message->email);
                        }
-               } else {
+               }
+               else {
                        color(BRIGHT_CYAN);
                        scr_printf("%s ", now);
                        color(DIM_WHITE);
                        scr_printf("from ");
                        color(BRIGHT_CYAN);
                        scr_printf("%s ", message->author);
-                       if (!IsEmptyStr(message->email)) {
+                       if (!is_local) {
                                color(DIM_WHITE);
                                scr_printf("<");
                                color(BRIGHT_BLUE);