guard-xmpp-password.diff
changeset 88 0a87df8ad9c1
parent 87 78238d26911a
child 90 bed5beae28c5
equal deleted inserted replaced
87:78238d26911a 88:0a87df8ad9c1
       
     1 # HG changeset patch
       
     2 # Parent  43143bc6ddf39de0d04929f589a4fcfa0000b54b
     1 Guard XMPP password with option guard
     3 Guard XMPP password with option guard
     2 
     4 
     3   * instead of filtering access to stored in public place
     5   * instead of filtering access to stored in public place
     4     restricted data, better store restricted data somewhere else
     6     restricted data, better store restricted data somewhere else
     5   * add xmpp_init() and xmpp_have_password (non-api)
     7   * add xmpp_init() and xmpp_have_password (non-api)
     6 
     8 
     7 diff -r d5d7361a99c0 mcabber/mcabber/commands.c
     9 diff -r 43143bc6ddf3 mcabber/mcabber/commands.c
     8 --- a/mcabber/mcabber/commands.c	Tue Nov 11 21:10:14 2014 +0200
    10 --- a/mcabber/mcabber/commands.c	Sat Nov 07 14:31:02 2015 +0200
     9 +++ b/mcabber/mcabber/commands.c	Tue Nov 11 21:12:47 2014 +0200
    11 +++ b/mcabber/mcabber/commands.c	Sat Nov 07 14:37:38 2015 +0200
    10 @@ -2286,10 +2286,8 @@
    12 @@ -2303,10 +2303,8 @@
    11  
    13  
    12  static void list_option_cb(char *k, char *v, void *f)
    14  static void list_option_cb(char *k, char *v, void *f)
    13  {
    15  {
    14 -  if (strcmp(k, "password")) {
    16 -  if (strcmp(k, "password")) {
    15 -    GSList **list = f;
    17 -    GSList **list = f;
    18 +  GSList **list = f;
    20 +  GSList **list = f;
    19 +  *list = g_slist_insert_sorted(*list, k, (GCompareFunc)strcmp);
    21 +  *list = g_slist_insert_sorted(*list, k, (GCompareFunc)strcmp);
    20  }
    22  }
    21  
    23  
    22  static void do_set(char *arg)
    24  static void do_set(char *arg)
    23 diff -r d5d7361a99c0 mcabber/mcabber/main.c
    25 diff -r 43143bc6ddf3 mcabber/mcabber/main.c
    24 --- a/mcabber/mcabber/main.c	Tue Nov 11 21:10:14 2014 +0200
    26 --- a/mcabber/mcabber/main.c	Sat Nov 07 14:31:02 2015 +0200
    25 +++ b/mcabber/mcabber/main.c	Tue Nov 11 21:12:47 2014 +0200
    27 +++ b/mcabber/mcabber/main.c	Sat Nov 07 14:37:38 2015 +0200
    26 @@ -389,6 +389,7 @@
    28 @@ -447,6 +447,7 @@
    27    scr_init_locale_charset();
    29    scr_init_locale_charset();
    28    ut_init_debug();
    30    ut_init_debug();
    29    help_init();
    31    help_init();
    30 +  xmpp_init();
    32 +  xmpp_init();
    31  
    33  
    32    /* Parsing config file... */
    34    /* Parsing config file... */
    33    ret = cfg_read_file(configFile, TRUE);
    35    ret = cfg_read_file(configFile, TRUE);
    34 @@ -410,8 +411,9 @@
    36 @@ -468,19 +469,21 @@
    35  
    37  
    36    /* If no password is stored, we ask for it before entering
    38    /* If no password is stored, we ask for it before entering
    37       ncurses mode -- unless the username is unknown. */
    39       ncurses mode -- unless the username is unknown. */
    38 -  if (settings_opt_get("jid") && !settings_opt_get("password")) {
    40 -  if (settings_opt_get("jid") && !settings_opt_get("password")) {
    39 +  if (settings_opt_get("jid") && !xmpp_have_password) {
    41 +  if (settings_opt_get("jid") && !xmpp_have_password) {
    40      char *pwd = ask_password("your Jabber password");
    42      const char *pass_eval = settings_opt_get("password_eval");
    41 +    /* Will be intercepted by guard */
    43      if (pass_eval) {
    42      settings_set(SETTINGS_TYPE_OPTION, "password", pwd);
    44        int status = 0;
    43      g_free(pwd);
    45        char *pwd = password_eval(pass_eval, &status);
    44    }
    46        if (status == 0 && pwd) {
    45 diff -r d5d7361a99c0 mcabber/mcabber/xmpp.c
    47 +        /* Will be intercepted by guard */
    46 --- a/mcabber/mcabber/xmpp.c	Tue Nov 11 21:10:14 2014 +0200
    48          settings_set(SETTINGS_TYPE_OPTION, "password", pwd);
    47 +++ b/mcabber/mcabber/xmpp.c	Tue Nov 11 21:12:47 2014 +0200
    49        }
       
    50        g_free(pwd);
       
    51      }
       
    52      // If the password is still unset, ask the user...
       
    53 -    if (!settings_opt_get("password")) {
       
    54 +    if (!xmpp_have_password) {
       
    55        char *pwd = ask_password("your Jabber password");
       
    56 +      /* Will be intercepted by guard */
       
    57        settings_set(SETTINGS_TYPE_OPTION, "password", pwd);
       
    58        g_free(pwd);
       
    59      }
       
    60 diff -r 43143bc6ddf3 mcabber/mcabber/xmpp.c
       
    61 --- a/mcabber/mcabber/xmpp.c	Sat Nov 07 14:31:02 2015 +0200
       
    62 +++ b/mcabber/mcabber/xmpp.c	Sat Nov 07 14:37:38 2015 +0200
    48 @@ -23,6 +23,8 @@
    63 @@ -23,6 +23,8 @@
    49   */
    64   */
    50  #include <stdlib.h>
    65  #include <stdlib.h>
    51  #include <string.h>
    66  #include <string.h>
    52 +#include <sys/mman.h>
    67 +#include <sys/mman.h>
    53 +#include <errno.h>
    68 +#include <errno.h>
    54  
    69  
    55  #include "xmpp.h"
    70  #include "xmpp.h"
    56  #include "xmpp_helper.h"
    71  #include "xmpp_helper.h"
    57 @@ -54,6 +56,9 @@
    72 @@ -56,6 +58,9 @@
    58  static enum imstatus mywantedstatus = available;
    73  static enum imstatus mywantedstatus = available;
    59  gchar *mystatusmsg;
    74  gchar *mystatusmsg;
    60  
    75  
    61 +static char *xmpp_password = NULL;
    76 +static char *xmpp_password = NULL;
    62 +gboolean xmpp_have_password = FALSE;
    77 +gboolean xmpp_have_password = FALSE;
    63 +
    78 +
    64  char imstatus2char[imstatus_size+1] = {
    79  char imstatus2char[imstatus_size+1] = {
    65      '_', 'o', 'f', 'd', 'n', 'a', 'i', '\0'
    80      '_', 'o', 'f', 'd', 'n', 'a', 'i', '\0'
    66  };
    81  };
    67 @@ -778,16 +783,15 @@
    82 @@ -800,16 +805,15 @@
    68    GError *error = NULL;
    83    GError *error = NULL;
    69  
    84  
    70    if (success) {
    85    if (success) {
    71 -    const char *password, *resource;
    86 -    const char *password, *resource;
    72 +    const char *resource;
    87 +    const char *resource;
    81 -    if (!lm_connection_authenticate(lconnection, username, password, resource,
    96 -    if (!lm_connection_authenticate(lconnection, username, password, resource,
    82 +    if (!lm_connection_authenticate(lconnection, username, xmpp_password, resource,
    97 +    if (!lm_connection_authenticate(lconnection, username, xmpp_password, resource,
    83                                      connection_auth_cb, NULL, FALSE, &error)) {
    98                                      connection_auth_cb, NULL, FALSE, &error)) {
    84        scr_LogPrint(LPRINT_LOGNORM, "Failed to authenticate: %s",
    99        scr_LogPrint(LPRINT_LOGNORM, "Failed to authenticate: %s",
    85                     error->message);
   100                     error->message);
    86 @@ -1687,13 +1691,37 @@
   101 @@ -1749,13 +1753,37 @@
    87    }
   102    }
    88  }
   103  }
    89  
   104  
    90 +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)
    91 +{
   106 +{
   118  gint xmpp_connect(void)
   133  gint xmpp_connect(void)
   119  {
   134  {
   120 -  const char *userjid, *password, *resource, *servername, *ssl_fpr;
   135 -  const char *userjid, *password, *resource, *servername, *ssl_fpr;
   121 +  const char *userjid, *resource, *servername, *ssl_fpr;
   136 +  const char *userjid, *resource, *servername, *ssl_fpr;
   122    char *dynresource = NULL;
   137    char *dynresource = NULL;
   123    char fpr[16];
   138    char fpr[FINGERPRINT_LENGTH] = {0};
   124    const char *proxy_host;
   139    const char *proxy_host;
   125 @@ -1710,7 +1738,6 @@
   140 @@ -1772,7 +1800,6 @@
   126  
   141  
   127    servername  = settings_opt_get("server");
   142    servername  = settings_opt_get("server");
   128    userjid     = settings_opt_get("jid");
   143    userjid     = settings_opt_get("jid");
   129 -  password    = settings_opt_get("password");
   144 -  password    = settings_opt_get("password");
   130    resource    = settings_opt_get("resource");
   145    resource    = settings_opt_get("resource");
   131    proxy_host  = settings_opt_get("proxy_host");
   146    proxy_host  = settings_opt_get("proxy_host");
   132    ssl_fpr     = settings_opt_get("ssl_fingerprint");
   147    ssl_fpr     = settings_opt_get("ssl_fingerprint");
   133 @@ -1719,7 +1746,7 @@
   148 @@ -1781,7 +1808,7 @@
   134      scr_LogPrint(LPRINT_LOGNORM, "Your JID has not been specified!");
   149      scr_LogPrint(LPRINT_LOGNORM, "Your JID has not been specified!");
   135      return -1;
   150      return -1;
   136    }
   151    }
   137 -  if (!password) {
   152 -  if (!password) {
   138 +  if (!xmpp_password) {
   153 +  if (!xmpp_password) {
   139      scr_LogPrint(LPRINT_LOGNORM, "Your password has not been specified!");
   154      scr_LogPrint(LPRINT_LOGNORM, "Your password has not been specified!");
   140      return -1;
   155      return -1;
   141    }
   156    }
   142 diff -r d5d7361a99c0 mcabber/mcabber/xmpp.h
   157 diff -r 43143bc6ddf3 mcabber/mcabber/xmpp.h
   143 --- a/mcabber/mcabber/xmpp.h	Tue Nov 11 21:10:14 2014 +0200
   158 --- a/mcabber/mcabber/xmpp.h	Sat Nov 07 14:31:02 2015 +0200
   144 +++ b/mcabber/mcabber/xmpp.h	Tue Nov 11 21:12:47 2014 +0200
   159 +++ b/mcabber/mcabber/xmpp.h	Sat Nov 07 14:37:38 2015 +0200
   145 @@ -34,7 +34,9 @@
   160 @@ -34,7 +34,9 @@
   146  
   161  
   147  extern LmConnection* lconnection;
   162  extern LmConnection* lconnection;
   148  extern LmSSL* lssl;
   163  extern LmSSL* lssl;
   149 +extern gboolean xmpp_have_password; /* private */
   164 +extern gboolean xmpp_have_password; /* private */