summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Peeler <jpeeler@digium.com>2009-12-16 20:25:27 +0000
committerJeff Peeler <jpeeler@digium.com>2009-12-16 20:25:27 +0000
commit6b345637782c204e1cc96738cf086e66ac50aa7c (patch)
tree62c5543658a50c2ca033ab3fbe7faa9f6531cf40
parentfb931dac4f67103dc1a0de10daad32c1c46085f2 (diff)
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
-rw-r--r--CHANGES1
-rw-r--r--configs/jabber.conf.sample3
-rw-r--r--include/asterisk/jabber.h3
-rw-r--r--res/res_jabber.c49
4 files changed, 38 insertions, 18 deletions
diff --git a/CHANGES b/CHANGES
index 745c9d9bd..39bd92398 100644
--- a/CHANGES
+++ b/CHANGES
@@ -367,6 +367,7 @@ Miscellaneous
code set to 2.
* An 'X' option has been added to the asterisk application which enables #exec support.
This allows #exec to be used in asterisk.conf.
+ * jabber.conf supports a new option auth_policy that toggles auto user registration.
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 1.6.1 to Asterisk 1.6.2 -------------
diff --git a/configs/jabber.conf.sample b/configs/jabber.conf.sample
index f46450dcf..5cbd0c0c7 100644
--- a/configs/jabber.conf.sample
+++ b/configs/jabber.conf.sample
@@ -4,6 +4,9 @@
;;setup (ie, using your personal Gtalk account for a test)
;;you might lose your contacts list. Default is 'no'.
;autoregister=yes ;;Auto register users from buddy list.
+;auth_policy=accept ;;Auto accept users' subscription requests (default).
+ ;;Set to deny for auto denial.
+
;[asterisk] ;;label
;type=client ;;Client or Component connection
diff --git a/include/asterisk/jabber.h b/include/asterisk/jabber.h
index da4346305..a3ee0b2fa 100644
--- a/include/asterisk/jabber.h
+++ b/include/asterisk/jabber.h
@@ -84,7 +84,8 @@ enum aji_state {
enum {
AJI_AUTOPRUNE = (1 << 0),
- AJI_AUTOREGISTER = (1 << 1)
+ AJI_AUTOREGISTER = (1 << 1),
+ AJI_AUTOACCEPT = (1 << 2)
};
enum aji_btype {
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);
+ }
}
}