From dc05ce5e4f8ee8f5080b16d33728441c68482bb8 Mon Sep 17 00:00:00 2001 From: Kinsey Moore Date: Thu, 10 Nov 2011 21:15:39 +0000 Subject: Fix another incorrect case with meetme's PIN logic and add documentation This fixes an issue where a user of a dynamic conference was asked for a PIN twice. This also adds documentation to assist in future modifications to the piece of code responsible for PIN checking. (closes issue AST-670) ........ Merged revisions 344439 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 344440 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@344441 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_meetme.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/apps/app_meetme.c b/apps/app_meetme.c index 469200e78..008341441 100644 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -4458,14 +4458,27 @@ static int conf_exec(struct ast_channel *chan, const char *data) res = -1; } } else { - /* Check to see if the conference requires pin - * validation and check for exemptions to that - * requirement. */ - if ((!ast_strlen_zero(cnf->pin) || + /* Conference requires a pin for specified access level */ + int req_pin = !ast_strlen_zero(cnf->pin) || (!ast_strlen_zero(cnf->pinadmin) && - ast_test_flag64(&confflags, CONFFLAG_ADMIN))) && - (ast_test_flag64(&confflags, CONFFLAG_ALWAYSPROMPT) || - ast_strlen_zero(args.pin) || !cnf->isdynamic)) { + ast_test_flag64(&confflags, CONFFLAG_ADMIN)); + /* The following logic was derived from a + * 4 variable truth table and defines which + * circumstances are not exempt from pin + * checking. + * If this needs to be modified, write the + * truth table back out from the boolean + * expression AB+A'D+C', change the erroneous + * result, and rederive the expression. + * Variables: + * A: pin provided? + * B: always prompt? + * C: dynamic? + * D: has users? */ + int not_exempt = !cnf->isdynamic; + not_exempt = not_exempt || (!ast_strlen_zero(args.pin) && ast_test_flag64(&confflags, CONFFLAG_ALWAYSPROMPT)); + not_exempt = not_exempt || (ast_strlen_zero(args.pin) && cnf->users); + if (req_pin && not_exempt) { char pin[MAX_PIN] = ""; int j; -- cgit v1.2.3