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
10-digiumphones
Kinsey Moore 14 years ago
parent f20fd93eff
commit bf43b7c30e

@ -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;

Loading…
Cancel
Save