From: Kinsey Moore Date: Thu, 10 Nov 2011 21:14:52 +0000 (+0000) Subject: Fix another incorrect case with meetme's PIN logic and add documentation X-Git-Tag: 10.1.0-rc1~102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bf43b7c30e1d131f686f2035d9254a7941ea77b8;p=thirdparty%2Fasterisk.git 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@344440 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/apps/app_meetme.c b/apps/app_meetme.c index 57ee285fb5..875419106a 100644 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -4429,14 +4429,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;