--- asterisk-1.4.0-beta4/main/manager.c 2006-12-07 09:33:32.000000000 -0600 +++ /usr/src/asterisk-1.4.0-beta4/main/manager.c 2006-12-24 12:55:26.000000000 -0600 @@ -390,6 +390,21 @@ return out; } +static int ast_get_manager_session_count_by_name(const char *name) +{ + struct mansession *session = NULL; + int count = 0; + + AST_LIST_TRAVERSE(&sessions, session, list) + if (!strcasecmp(session->username, name)) { + count++; + ast_verbose(VERBOSE_PREFIX_2 "Manager '%s' session count %d\n", name, count); + } + + + + return count; +} static struct ast_manager_user *ast_get_manager_by_name_locked(const char *name) @@ -1924,6 +1939,7 @@ char action[80] = ""; struct manager_action *tmp = first_action; char *id = astman_get_header(m,"ActionID"); + char *user = astman_get_header(m, "Username"); char idText[256] = ""; int ret = 0; @@ -1956,6 +1972,12 @@ return 0; } } else if (!strcasecmp(action, "Login")) { + /* Check for duplicate logins */ + if (ast_get_manager_session_count_by_name(user) > 0) { + sleep(1); + astman_send_error(s, m, "Duplicate login deined."); + return -1; + } if (authenticate(s, m)) { sleep(1); astman_send_error(s, m, "Authentication failed");