aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--protocols/jabber/io.c4
-rw-r--r--protocols/jabber/jabber.c3
-rw-r--r--root_commands.c2
-rw-r--r--set.c8
-rw-r--r--set.h4
5 files changed, 18 insertions, 3 deletions
diff --git a/protocols/jabber/io.c b/protocols/jabber/io.c
index ef7d5c13..a28eea90 100644
--- a/protocols/jabber/io.c
+++ b/protocols/jabber/io.c
@@ -211,7 +211,7 @@ static gboolean jabber_read_callback( gpointer data, gint fd, b_input_condition
/* If there's no version attribute, assume
this is an old server that can't do SASL
authentication. */
- if( !sasl_supported( ic ) )
+ if( !set_getbool( &ic->acc->set, "sasl") || !sasl_supported( ic ) )
{
/* If there's no version= tag, we suppose
this server does NOT implement: XMPP 1.0,
@@ -374,7 +374,7 @@ static xt_status jabber_pkt_features( struct xt_node *node, gpointer data )
support it after all, we should try to do authentication the
other way. jabber.com doesn't seem to do SASL while it pretends
to be XMPP 1.0 compliant! */
- else if( !( jd->flags & JFLAG_AUTHENTICATED ) && sasl_supported( ic ) )
+ else if( !( jd->flags & JFLAG_AUTHENTICATED ) && set_getbool( &ic->acc->set, "sasl") && sasl_supported( ic ) )
{
if( !jabber_init_iq_auth( ic ) )
return XT_ABORT;
diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c
index 802158c1..7d9547ab 100644
--- a/protocols/jabber/jabber.c
+++ b/protocols/jabber/jabber.c
@@ -81,6 +81,9 @@ static void jabber_init( account_t *acc )
s = set_add( &acc->set, "tls", "try", set_eval_tls, acc );
s->flags |= ACC_SET_OFFLINE_ONLY;
+ s = set_add( &acc->set, "sasl", "true", set_eval_bool, acc );
+ s->flags |= ACC_SET_OFFLINE_ONLY | SET_HIDDEN_DEFAULT;
+
s = set_add( &acc->set, "user_agent", "BitlBee", NULL, acc );
s = set_add( &acc->set, "xmlconsole", "false", set_eval_bool, acc );
diff --git a/root_commands.c b/root_commands.c
index ce412b80..6924fd13 100644
--- a/root_commands.c
+++ b/root_commands.c
@@ -361,7 +361,7 @@ static int cmd_set_real( irc_t *irc, char **cmd, set_t **head, cmd_set_checkflag
set_t *s = *head;
while( s )
{
- if( !( s->flags & SET_HIDDEN ) )
+ if( set_isvisible( s ) )
cmd_showset( irc, &s, s->key );
s = s->next;
}
diff --git a/set.c b/set.c
index 17befba9..b35be708 100644
--- a/set.c
+++ b/set.c
@@ -111,6 +111,14 @@ int set_getbool( set_t **head, const char *key )
return bool2int( s );
}
+int set_isvisible( set_t *set )
+{
+ /* the default value is not stored in value, only in def */
+ return !( ( set->flags & SET_HIDDEN ) ||
+ ( ( set->flags & SET_HIDDEN_DEFAULT ) &&
+ ( set->value == NULL ) ) );
+}
+
int set_setstr( set_t **head, const char *key, char *value )
{
set_t *s = set_find( head, key );
diff --git a/set.h b/set.h
index 8f3028c4..f4f56f88 100644
--- a/set.h
+++ b/set.h
@@ -48,6 +48,7 @@ typedef enum
SET_NULL_OK = 0x0100,
SET_HIDDEN = 0x0200,
SET_PASSWORD = 0x0400,
+ SET_HIDDEN_DEFAULT = 0x0800,
} set_flags_t;
typedef struct set
@@ -97,6 +98,9 @@ int set_setint( set_t **head, const char *key, int value );
void set_del( set_t **head, const char *key );
int set_reset( set_t **head, const char *key );
+/* returns true if a setting shall be shown to the user */
+int set_isvisible( set_t *set );
+
/* Two very useful generic evaluators. */
char *set_eval_int( set_t *set, char *value );
char *set_eval_bool( set_t *set, char *value );