From 6b345637782c204e1cc96738cf086e66ac50aa7c Mon Sep 17 00:00:00 2001 From: Jeff Peeler Date: Wed, 16 Dec 2009 20:25:27 +0000 Subject: Add auth_policy option to jabber.conf for auto user registration. The option is global and currently the acceptable values as noted in the sample config are accept or deny. (closes issue #15228) Reported by: lp0 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@235342 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_jabber.c | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) (limited to 'res/res_jabber.c') diff --git a/res/res_jabber.c b/res/res_jabber.c index 01f9adbdc..ced9ea973 100644 --- a/res/res_jabber.c +++ b/res/res_jabber.c @@ -353,7 +353,7 @@ static ast_cond_t message_received_condition; static ast_mutex_t messagelock; /*! \brief Global flags, initialized to default values */ -static struct ast_flags globalflags = { AJI_AUTOREGISTER }; +static struct ast_flags globalflags = { AJI_AUTOREGISTER | AJI_AUTOACCEPT }; /*! * \internal @@ -2410,22 +2410,24 @@ static void aji_handle_subscribe(struct aji_client *client, ikspak *pak) switch (pak->subtype) { case IKS_TYPE_SUBSCRIBE: - presence = iks_new("presence"); - status = iks_new("status"); - if (presence && status) { - iks_insert_attrib(presence, "type", "subscribed"); - iks_insert_attrib(presence, "to", pak->from->full); - iks_insert_attrib(presence, "from", client->jid->full); - if (pak->id) - iks_insert_attrib(presence, "id", pak->id); - iks_insert_cdata(status, "Asterisk has approved subscription", 0); - iks_insert_node(presence, status); - ast_aji_send(client, presence); - } else - ast_log(LOG_ERROR, "Unable to allocate nodes\n"); + if (ast_test_flag(&client->flags, AJI_AUTOACCEPT)) { + presence = iks_new("presence"); + status = iks_new("status"); + if (presence && status) { + iks_insert_attrib(presence, "type", "subscribed"); + iks_insert_attrib(presence, "to", pak->from->full); + iks_insert_attrib(presence, "from", client->jid->full); + if (pak->id) + iks_insert_attrib(presence, "id", pak->id); + iks_insert_cdata(status, "Asterisk has approved subscription", 0); + iks_insert_node(presence, status); + ast_aji_send(client, presence); + } else + ast_log(LOG_ERROR, "Unable to allocate nodes\n"); - iks_delete(presence); - iks_delete(status); + iks_delete(presence); + iks_delete(status); + } if (client->component) aji_set_presence(client, pak->from->full, iks_find_attrib(pak->x, "to"), client->status, client->statusmessage); @@ -3410,6 +3412,13 @@ static int aji_create_client(char *label, struct ast_variable *var, int debug) ast_set2_flag(&client->flags, ast_true(var->value), AJI_AUTOPRUNE); else if (!strcasecmp(var->name, "autoregister")) ast_set2_flag(&client->flags, ast_true(var->value), AJI_AUTOREGISTER); + else if (!strcasecmp(var->name, "auth_policy")) { + if (!strcasecmp(var->value, "accept")) { + ast_set_flag(&client->flags, AJI_AUTOACCEPT); + } else { + ast_clear_flag(&client->flags, AJI_AUTOACCEPT); + } + } else if (!strcasecmp(var->name, "buddy")) aji_create_buddy((char *)var->value, client); else if (!strcasecmp(var->name, "priority")) @@ -3595,7 +3604,7 @@ static int aji_load_config(int reload) return -1; /* Reset flags to default value */ - ast_set_flag(&globalflags, AJI_AUTOREGISTER); + ast_set_flag(&globalflags, AJI_AUTOREGISTER | AJI_AUTOACCEPT); if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEINVALID) { ast_log(LOG_WARNING, "No such configuration file %s\n", JABBER_CONFIG); @@ -3610,6 +3619,12 @@ static int aji_load_config(int reload) ast_set2_flag(&globalflags, ast_true(var->value), AJI_AUTOPRUNE); } else if (!strcasecmp(var->name, "autoregister")) { ast_set2_flag(&globalflags, ast_true(var->value), AJI_AUTOREGISTER); + } else if (!strcasecmp(var->name, "auth_policy")) { + if (!strcasecmp(var->value, "accept")) { + ast_set_flag(&globalflags, AJI_AUTOACCEPT); + } else { + ast_clear_flag(&globalflags, AJI_AUTOACCEPT); + } } } -- cgit v1.2.3