Index: include/asterisk/jabber.h =================================================================== --- include/asterisk/jabber.h (revision 233691) +++ include/asterisk/jabber.h (working copy) @@ -84,7 +84,8 @@ enum { AJI_AUTOPRUNE = (1 << 0), - AJI_AUTOREGISTER = (1 << 1) + AJI_AUTOREGISTER = (1 << 1), + AJI_AUTOACCEPT = (1 << 2) }; enum aji_btype { Index: configs/jabber.conf.sample =================================================================== --- configs/jabber.conf.sample (revision 233691) +++ configs/jabber.conf.sample (working copy) @@ -4,7 +4,10 @@ ;;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 ;serverhost=astjab.org ;;Route to server for example, Index: res/res_jabber.c =================================================================== --- res/res_jabber.c (revision 233691) +++ res/res_jabber.c (working copy) @@ -353,7 +353,7 @@ 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 @@ 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,11 @@ 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 if (!strcasecmp(var->name, "buddy")) aji_create_buddy((char *)var->value, client); else if (!strcasecmp(var->name, "priority")) @@ -3595,7 +3602,7 @@ 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 +3617,10 @@ 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); + } } }