Fix bug #2975: Implement setting -0000 timezone to hide sender localtime
authorRicardo Mones <ricardo@mones.org>
Mon, 22 Aug 2016 17:02:47 +0000 (19:02 +0200)
committerRicardo Mones <ricardo@mones.org>
Mon, 22 Aug 2016 17:02:47 +0000 (19:02 +0200)
This adds a new hidden preference, namely 'hide_timezone', that
sets the timezone of date fields sent over the network to the
unknown timezone value as specified in RFC 5322 ยง3.3.

Default value is false (i.e., send available timezone information).

src/common/utils.c
src/common/utils.h
src/compose.c
src/news.c
src/prefs_common.c
src/prefs_common.h

index 182be8e6be97ebfbb3a30ef54972ef8051ee00a6..b8727e4138d480a0bc7632d0a740b162b1a9a4e8 100644 (file)
@@ -3557,7 +3557,7 @@ gchar *tzoffset(time_t *now)
        return offset_string;
 }
 
-void get_rfc822_date(gchar *buf, gint len)
+static void _get_rfc822_date(gchar *buf, gint len, gboolean hidetz)
 {
        struct tm *lt;
        time_t t;
@@ -3573,7 +3573,17 @@ void get_rfc822_date(gchar *buf, gint len)
               day, mon, &dd, &hh, &mm, &ss, &yyyy);
 
        g_snprintf(buf, len, "%s, %d %s %d %02d:%02d:%02d %s",
-                  day, dd, mon, yyyy, hh, mm, ss, tzoffset(&t));
+                  day, dd, mon, yyyy, hh, mm, ss, (hidetz? "-0000": tzoffset(&t)));
+}
+
+void get_rfc822_date(gchar *buf, gint len)
+{
+       _get_rfc822_date(buf, len, FALSE);
+}
+
+void get_rfc822_date_hide_tz(gchar *buf, gint len)
+{
+       _get_rfc822_date(buf, len, TRUE);
 }
 
 void debug_set_mode(gboolean mode)
index 2279b86664701705391259fd1e7815bc51bfc1f3..e07fdd8ea4f7eba67f7d5965e20e778be22a55c1 100644 (file)
@@ -520,6 +520,8 @@ time_t tzoffset_sec         (time_t         *now);
 gchar *tzoffset                        (time_t         *now);
 void get_rfc822_date           (gchar          *buf,
                                 gint            len);
+void get_rfc822_date_hide_tz   (gchar          *buf,
+                                gint            len);
 
 size_t fast_strftime           (gchar                  *buf, 
                                 gint                    buflen, 
index 498c560a9ddf04963f71caaace72247b9356ff8d..82220667fdb08fe84520d18d10da9d7ef4de2120 100644 (file)
@@ -5382,7 +5382,10 @@ static gint compose_redirect_write_headers(Compose *compose, FILE *fp)
        cm_return_val_if_fail(compose->account->address != NULL, -1);
 
        /* Resent-Date */
-       get_rfc822_date(buf, sizeof(buf));
+       if (prefs_common.hide_timezone)
+               get_rfc822_date_hide_tz(buf, sizeof(buf));
+       else
+               get_rfc822_date(buf, sizeof(buf));
        err |= (fprintf(fp, "Resent-Date: %s\n", buf) < 0);
 
        /* Resent-From */
@@ -6459,7 +6462,10 @@ static gchar *compose_get_header(Compose *compose)
        header = g_string_sized_new(64);
 
        /* Date */
-       get_rfc822_date(buf, sizeof(buf));
+       if (prefs_common.hide_timezone)
+               get_rfc822_date_hide_tz(buf, sizeof(buf));
+       else
+               get_rfc822_date(buf, sizeof(buf));
        g_string_append_printf(header, "Date: %s\n", buf);
 
        /* From */
index af96e628e03d8c38432156e93fe3911c4cfb463a..5081a0e369c319918fa3e10a230fcaa64fd75904 100644 (file)
@@ -945,7 +945,10 @@ gint news_cancel_article(Folder * folder, MsgInfo * msginfo)
                g_warning("can't change file mode");
        }
        
-       get_rfc822_date(buf, sizeof(buf));
+       if (prefs_common.hide_timezone)
+               get_rfc822_date_hide_tz(buf, sizeof(buf));
+       else
+               get_rfc822_date(buf, sizeof(buf));
        if (fprintf(tmpfp, "From: %s\r\n"
                       "Newsgroups: %s\r\n"
                       "Subject: cmsg cancel <%s>\r\n"
index b1d937a934594845606fa91df33c2ba65b1d623e..39d9a0ba8394524e461f82092696efcd066212b6 100644 (file)
@@ -199,9 +199,10 @@ static PrefParam param[] = {
         NULL, NULL, NULL},
        {"outgoing_fallback_to_ascii", "TRUE", &prefs_common.outgoing_fallback_to_ascii, P_BOOL,
         NULL, NULL, NULL},
-        {"warn_empty_subj", "TRUE", &prefs_common.warn_empty_subj,
+       {"warn_empty_subj", "TRUE", &prefs_common.warn_empty_subj,
+        P_BOOL, NULL, NULL, NULL},
+       {"hide_timezone", "FALSE", &prefs_common.hide_timezone,
         P_BOOL, NULL, NULL, NULL},
-
        {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
         P_BOOL, NULL, NULL, NULL},
 
index f2fee5d335418cc83d46f2ea6646b1c8a273ab94..d3d9fa9410d3cca03349d065593ef640a2536f5d 100644 (file)
@@ -143,7 +143,7 @@ struct _PrefsCommon
        TransferEncodingMethod encoding_method;
        gboolean outgoing_fallback_to_ascii;
        gboolean warn_empty_subj;
-
+       gboolean hide_timezone;
        gboolean allow_jisx0201_kana;
 
        /* Compose */