Add auth_policy option to jabber.conf for auto user registration.
authorJeff Peeler <jpeeler@digium.com>
Wed, 16 Dec 2009 20:25:27 +0000 (20:25 +0000)
committerJeff Peeler <jpeeler@digium.com>
Wed, 16 Dec 2009 20:25:27 +0000 (20:25 +0000)
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

CHANGES
configs/jabber.conf.sample
include/asterisk/jabber.h
res/res_jabber.c

diff --git a/CHANGES b/CHANGES
index 745c9d9..39bd923 100644 (file)
--- 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.
    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  -------------
 
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 1.6.1 to Asterisk 1.6.2  -------------
index f46450d..5cbd0c0 100644 (file)
@@ -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.
                                        ;;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
 
 ;[asterisk]                            ;;label
 ;type=client                           ;;Client or Component connection
index da43463..a3ee0b2 100644 (file)
@@ -84,7 +84,8 @@ enum aji_state {
 
 enum {
        AJI_AUTOPRUNE = (1 << 0),
 
 enum {
        AJI_AUTOPRUNE = (1 << 0),
-       AJI_AUTOREGISTER = (1 << 1)
+       AJI_AUTOREGISTER = (1 << 1),
+       AJI_AUTOACCEPT = (1 << 2)
 };
 
 enum aji_btype {
 };
 
 enum aji_btype {
index 01f9adb..ced9ea9 100644 (file)
@@ -353,7 +353,7 @@ static ast_cond_t message_received_condition;
 static ast_mutex_t messagelock;
 
 /*! \brief Global flags, initialized to default values */
 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
 
 /*!
  * \internal
@@ -2410,22 +2410,24 @@ static void aji_handle_subscribe(struct aji_client *client, ikspak *pak)
 
        switch (pak->subtype) { 
        case IKS_TYPE_SUBSCRIBE:
 
        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);
 
                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);
                        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"))
                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 */
                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);
 
        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);
                        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);
+                       }
                }
        }
 
                }
        }