about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorDmitry Podgorny <pasis.ua@gmail.com>2018-11-07 14:56:43 +0200
committerDmitry Podgorny <pasis.ua@gmail.com>2018-11-07 15:02:30 +0200
commit3fd6f70bd9d2bb9ff4921c53354b52465e616a51 (patch)
tree1ab05ae6c3333e7f7caddb3f740d97985cb4cb98 /src
parent7f65aaa9a2ba1e7d9fe182cc18938fa39462e095 (diff)
downloadprofani-tty-3fd6f70bd9d2bb9ff4921c53354b52465e616a51.tar.gz
Override account options with connect options
With this feature user can configure TLS policy for an account and
override it for a single login with /connect command.

Example:
 /account set <jid> tls force
 /connect <jid> tls trust
The example shows how to trust server's certificate only once.

Fixes #1021.
Diffstat (limited to 'src')
-rw-r--r--src/command/cmd_funcs.c8
-rw-r--r--src/config/account.c17
-rw-r--r--src/config/account.h3
3 files changed, 28 insertions, 0 deletions
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index 7f1a791b..6ec02b1c 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -393,6 +393,14 @@ cmd_connect(ProfWin *window, const char *const command, gchar **args)
     // connect with account
     ProfAccount *account = accounts_get_account(lower);
     if (account) {
+        // override account options with connect options
+        if (altdomain != NULL)
+            account_set_server(account, altdomain);
+        if (port != 0)
+            account_set_port(account, port);
+        if (tls_policy != NULL)
+            account_set_tls_policy(account, tls_policy);
+
         // use password if set
         if (account->password) {
             conn_status = cl_ev_connect_account(account);
diff --git a/src/config/account.c b/src/config/account.c
index 705a5edf..1d42ba39 100644
--- a/src/config/account.c
+++ b/src/config/account.c
@@ -241,3 +241,20 @@ account_free(ProfAccount *account)
     g_list_free_full(account->otr_always, g_free);
     free(account);
 }
+
+void account_set_server(ProfAccount *account, const char *server)
+{
+    free(account->server);
+    account->server = strdup(server);
+}
+
+void account_set_port(ProfAccount *account, int port)
+{
+    account->port = port;
+}
+
+void account_set_tls_policy(ProfAccount *account, const char *tls_policy)
+{
+    free(account->tls_policy);
+    account->tls_policy = strdup(tls_policy);
+}
diff --git a/src/config/account.h b/src/config/account.h
index 1262e518..d0bb28fa 100644
--- a/src/config/account.h
+++ b/src/config/account.h
@@ -77,5 +77,8 @@ ProfAccount* account_new(const gchar *const name, const gchar *const jid,
 char* account_create_connect_jid(ProfAccount *account);
 gboolean account_eval_password(ProfAccount *account);
 void account_free(ProfAccount *account);
+void account_set_server(ProfAccount *account, const char *server);
+void account_set_port(ProfAccount *account, int port);
+void account_set_tls_policy(ProfAccount *account, const char *tls_policy);
 
 #endif