guard-xmpp-password.diff
changeset 92 66f7e2aa040c
parent 90 bed5beae28c5
equal deleted inserted replaced
91:51d326d5cb92 92:66f7e2aa040c
     1 # HG changeset patch
     1 # HG changeset patch
     2 # Parent  6a07f127a10b06c5314e76713bebce46f40c602a
     2 # Parent  904e7cbbc385aa65d4c5507cd6524245cb289011
     3 Guard XMPP password with option guard
     3 Guard XMPP password with option guard
     4 
     4 
     5   * instead of filtering access to stored in public place
     5   * instead of filtering access to stored in public place
     6     restricted data, better store restricted data somewhere else
     6     restricted data, better store restricted data somewhere else
     7   * add xmpp_init() and xmpp_have_password (non-api)
     7   * add xmpp_init() and xmpp_have_password (non-api)
     8 
     8 
     9 diff -r 6a07f127a10b mcabber/mcabber/commands.c
     9 diff -r 904e7cbbc385 mcabber/mcabber/commands.c
    10 --- a/mcabber/mcabber/commands.c	Fri Mar 04 13:54:13 2016 +0200
    10 --- a/mcabber/mcabber/commands.c	Fri Dec 09 01:41:18 2016 +0200
    11 +++ b/mcabber/mcabber/commands.c	Fri Mar 04 13:55:29 2016 +0200
    11 +++ b/mcabber/mcabber/commands.c	Fri Dec 09 01:47:05 2016 +0200
    12 @@ -2303,10 +2303,8 @@
    12 @@ -2303,10 +2303,8 @@
    13  
    13  
    14  static void list_option_cb(char *k, char *v, void *f)
    14  static void list_option_cb(char *k, char *v, void *f)
    15  {
    15  {
    16 -  if (strcmp(k, "password")) {
    16 -  if (strncmp(k, "password", 8) && strcmp(k, "pgp_passphrase")) {
    17 -    GSList **list = f;
    17 -    GSList **list = f;
    18 -    *list = g_slist_insert_sorted(*list, k, (GCompareFunc)strcmp);
    18 -    *list = g_slist_insert_sorted(*list, k, (GCompareFunc)strcmp);
    19 -  }
    19 -  }
    20 +  GSList **list = f;
    20 +  GSList **list = f;
    21 +  *list = g_slist_insert_sorted(*list, k, (GCompareFunc)strcmp);
    21 +  *list = g_slist_insert_sorted(*list, k, (GCompareFunc)strcmp);
    22  }
    22  }
    23  
    23  
    24  static void do_set(char *arg)
    24  static void do_set(char *arg)
    25 diff -r 6a07f127a10b mcabber/mcabber/main.c
    25 diff -r 904e7cbbc385 mcabber/mcabber/main.c
    26 --- a/mcabber/mcabber/main.c	Fri Mar 04 13:54:13 2016 +0200
    26 --- a/mcabber/mcabber/main.c	Fri Dec 09 01:41:18 2016 +0200
    27 +++ b/mcabber/mcabber/main.c	Fri Mar 04 13:55:29 2016 +0200
    27 +++ b/mcabber/mcabber/main.c	Fri Dec 09 01:47:05 2016 +0200
    28 @@ -451,6 +451,7 @@
    28 @@ -460,6 +460,7 @@
    29    scr_init_locale_charset();
    29    scr_init_locale_charset();
    30    ut_init_debug();
    30    ut_init_debug();
    31    help_init();
    31    help_init();
    32 +  xmpp_init();
    32 +  xmpp_init();
    33  
    33  
    34    /* Parsing config file... */
    34    /* Parsing config file... */
    35    ret = cfg_read_file(configFile, TRUE);
    35    ret = cfg_read_file(configFile, TRUE);
    36 @@ -472,19 +473,21 @@
    36 @@ -481,19 +482,21 @@
    37  
    37  
    38    /* If no password is stored, we ask for it before entering
    38    /* If no password is stored, we ask for it before entering
    39       ncurses mode -- unless the username is unknown. */
    39       ncurses mode -- unless the username is unknown. */
    40 -  if (settings_opt_get("jid") && !settings_opt_get("password")) {
    40 -  if (settings_opt_get("jid") && !settings_opt_get("password")) {
    41 +  if (settings_opt_get("jid") && !xmpp_have_password) {
    41 +  if (settings_opt_get("jid") && !xmpp_have_password) {
    55        char *pwd = ask_password("your Jabber password");
    55        char *pwd = ask_password("your Jabber password");
    56 +      /* Will be intercepted by guard */
    56 +      /* Will be intercepted by guard */
    57        settings_set(SETTINGS_TYPE_OPTION, "password", pwd);
    57        settings_set(SETTINGS_TYPE_OPTION, "password", pwd);
    58        g_free(pwd);
    58        g_free(pwd);
    59      }
    59      }
    60 diff -r 6a07f127a10b mcabber/mcabber/xmpp.c
    60 diff -r 904e7cbbc385 mcabber/mcabber/xmpp.c
    61 --- a/mcabber/mcabber/xmpp.c	Fri Mar 04 13:54:13 2016 +0200
    61 --- a/mcabber/mcabber/xmpp.c	Fri Dec 09 01:41:18 2016 +0200
    62 +++ b/mcabber/mcabber/xmpp.c	Fri Mar 04 13:55:29 2016 +0200
    62 +++ b/mcabber/mcabber/xmpp.c	Fri Dec 09 01:47:05 2016 +0200
    63 @@ -23,6 +23,8 @@
    63 @@ -21,6 +21,8 @@
    64   */
    64   */
    65  #include <stdlib.h>
    65  #include <stdlib.h>
    66  #include <string.h>
    66  #include <string.h>
    67 +#include <sys/mman.h>
    67 +#include <sys/mman.h>
    68 +#include <errno.h>
    68 +#include <errno.h>
    69  
    69  
    70  #include "xmpp.h"
    70  #include "xmpp.h"
    71  #include "xmpp_helper.h"
    71  #include "xmpp_helper.h"
    72 @@ -58,6 +60,9 @@
    72 @@ -56,6 +58,9 @@
    73  static enum imstatus mywantedstatus = available;
    73  static enum imstatus mywantedstatus = available;
    74  gchar *mystatusmsg;
    74  gchar *mystatusmsg;
    75  
    75  
    76 +static char *xmpp_password = NULL;
    76 +static char *xmpp_password = NULL;
    77 +gboolean xmpp_have_password = FALSE;
    77 +gboolean xmpp_have_password = FALSE;
    78 +
    78 +
    79  char imstatus2char[imstatus_size+1] = {
    79  char imstatus2char[imstatus_size+1] = {
    80      '_', 'o', 'f', 'd', 'n', 'a', 'i', '\0'
    80      '_', 'o', 'f', 'd', 'n', 'a', 'i', '\0'
    81  };
    81  };
    82 @@ -816,16 +821,15 @@
    82 @@ -814,16 +819,15 @@
    83    GError *error = NULL;
    83    GError *error = NULL;
    84  
    84  
    85    if (success) {
    85    if (success) {
    86 -    const char *password, *resource;
    86 -    const char *password, *resource;
    87 +    const char *resource;
    87 +    const char *resource;
    96 -    if (!lm_connection_authenticate(lconnection, username, password, resource,
    96 -    if (!lm_connection_authenticate(lconnection, username, password, resource,
    97 +    if (!lm_connection_authenticate(lconnection, username, xmpp_password, resource,
    97 +    if (!lm_connection_authenticate(lconnection, username, xmpp_password, resource,
    98                                      connection_auth_cb, NULL, FALSE, &error)) {
    98                                      connection_auth_cb, NULL, FALSE, &error)) {
    99        scr_LogPrint(LPRINT_LOGNORM, "Failed to authenticate: %s",
    99        scr_LogPrint(LPRINT_LOGNORM, "Failed to authenticate: %s",
   100                     error->message);
   100                     error->message);
   101 @@ -1765,13 +1769,37 @@
   101 @@ -1763,13 +1767,37 @@
   102    }
   102    }
   103  }
   103  }
   104  
   104  
   105 +static gchar *xmpp_password_guard(const gchar *key, const gchar *new_value)
   105 +static gchar *xmpp_password_guard(const gchar *key, const gchar *new_value)
   106 +{
   106 +{
   135 -  const char *userjid, *password, *resource, *servername, *ssl_fpr;
   135 -  const char *userjid, *password, *resource, *servername, *ssl_fpr;
   136 +  const char *userjid, *resource, *servername, *ssl_fpr;
   136 +  const char *userjid, *resource, *servername, *ssl_fpr;
   137    char *dynresource = NULL;
   137    char *dynresource = NULL;
   138  #ifndef LOUDMOUTH_USES_SHA256
   138  #ifndef LOUDMOUTH_USES_SHA256
   139    char fpr[FINGERPRINT_LENGTH] = {0};
   139    char fpr[FINGERPRINT_LENGTH] = {0};
   140 @@ -1790,7 +1818,6 @@
   140 @@ -1788,7 +1816,6 @@
   141  
   141  
   142    servername  = settings_opt_get("server");
   142    servername  = settings_opt_get("server");
   143    userjid     = settings_opt_get("jid");
   143    userjid     = settings_opt_get("jid");
   144 -  password    = settings_opt_get("password");
   144 -  password    = settings_opt_get("password");
   145    resource    = settings_opt_get("resource");
   145    resource    = settings_opt_get("resource");
   146    proxy_host  = settings_opt_get("proxy_host");
   146    proxy_host  = settings_opt_get("proxy_host");
   147    ssl_fpr     = settings_opt_get("ssl_fingerprint");
   147    ssl_fpr     = settings_opt_get("ssl_fingerprint");
   148 @@ -1799,7 +1826,7 @@
   148 @@ -1797,7 +1824,7 @@
   149      scr_LogPrint(LPRINT_LOGNORM, "Your JID has not been specified!");
   149      scr_LogPrint(LPRINT_LOGNORM, "Your JID has not been specified!");
   150      return -1;
   150      return -1;
   151    }
   151    }
   152 -  if (!password) {
   152 -  if (!password) {
   153 +  if (!xmpp_password) {
   153 +  if (!xmpp_password) {
   154      scr_LogPrint(LPRINT_LOGNORM, "Your password has not been specified!");
   154      scr_LogPrint(LPRINT_LOGNORM, "Your password has not been specified!");
   155      return -1;
   155      return -1;
   156    }
   156    }
   157 diff -r 6a07f127a10b mcabber/mcabber/xmpp.h
   157 diff -r 904e7cbbc385 mcabber/mcabber/xmpp.h
   158 --- a/mcabber/mcabber/xmpp.h	Fri Mar 04 13:54:13 2016 +0200
   158 --- a/mcabber/mcabber/xmpp.h	Fri Dec 09 01:41:18 2016 +0200
   159 +++ b/mcabber/mcabber/xmpp.h	Fri Mar 04 13:55:29 2016 +0200
   159 +++ b/mcabber/mcabber/xmpp.h	Fri Dec 09 01:47:05 2016 +0200
   160 @@ -34,7 +34,9 @@
   160 @@ -34,7 +34,9 @@
   161  
   161  
   162  extern LmConnection* lconnection;
   162  extern LmConnection* lconnection;
   163  extern LmSSL* lssl;
   163  extern LmSSL* lssl;
   164 +extern gboolean xmpp_have_password; /* private */
   164 +extern gboolean xmpp_have_password; /* private */
   165  
   165  
   166 +void xmpp_init(void); /* private */
   166 +void xmpp_init(void); /* private */
   167  int  xmpp_connect(void);
   167  int  xmpp_connect(void);
   168  void xmpp_disconnect(void);
   168  void xmpp_disconnect(const char *message);
   169  gboolean xmpp_is_online(void);
   169  gboolean xmpp_is_online(void);