diff options
Diffstat (limited to 'sesman/scp_v1_mng.c')
-rw-r--r-- | sesman/scp_v1_mng.c | 218 |
1 files changed, 109 insertions, 109 deletions
diff --git a/sesman/scp_v1_mng.c b/sesman/scp_v1_mng.c index e4d97b77..0e20007d 100644 --- a/sesman/scp_v1_mng.c +++ b/sesman/scp_v1_mng.c @@ -1,21 +1,20 @@ -/* - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - xrdp: A Remote Desktop Protocol server. - Copyright (C) Jay Sorg 2005-2008 -*/ +/** + * xrdp: A Remote Desktop Protocol server. + * + * Copyright (C) Jay Sorg 2004-2012 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ /** * @@ -29,112 +28,113 @@ #include "libscp.h" -extern struct config_sesman* g_cfg; /* in sesman.c */ +extern struct config_sesman *g_cfg; /* in sesman.c */ -static void parseCommonStates(enum SCP_SERVER_STATES_E e, char* f); +static void parseCommonStates(enum SCP_SERVER_STATES_E e, char *f); /******************************************************************************/ void DEFAULT_CC -scp_v1_mng_process(struct SCP_CONNECTION* c, struct SCP_SESSION* s) +scp_v1_mng_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s) { - long data; - enum SCP_SERVER_STATES_E e; - struct SCP_DISCONNECTED_SESSION* slist = 0; - int scount; - int end = 0; - - data = auth_userpass(s->username, s->password); - /*LOG_DBG("user: %s\npass: %s", s->username, s->password);*/ - - if (!data) - { - scp_v1s_mng_deny_connection(c, "Login failed"); - log_message(LOG_LEVEL_INFO, - "[MNG] Login failed for user %s. Connection terminated", s->username); - scp_session_destroy(s); - auth_end(data); - return; - } - - /* testing if login is allowed */ - if (0 == access_login_mng_allowed(s->username)) - { - scp_v1s_mng_deny_connection(c, "Access to Terminal Server not allowed."); - log_message(LOG_LEVEL_INFO, - "[MNG] User %s not allowed on TS. Connection terminated", s->username); - scp_session_destroy(s); - auth_end(data); - return; - } + long data; + enum SCP_SERVER_STATES_E e; + struct SCP_DISCONNECTED_SESSION *slist = 0; + int scount; + int end = 0; - e = scp_v1s_mng_allow_connection(c, s); + data = auth_userpass(s->username, s->password); + /*LOG_DBG("user: %s\npass: %s", s->username, s->password);*/ - end = 1; - while (end) - { - switch (e) + if (!data) { - case SCP_SERVER_STATE_MNG_ACTION: - log_message(LOG_LEVEL_INFO, "Connection cancelled after session listing"); - break; + scp_v1s_mng_deny_connection(c, "Login failed"); + log_message(LOG_LEVEL_INFO, + "[MNG] Login failed for user %s. Connection terminated", s->username); + scp_session_destroy(s); + auth_end(data); + return; + } - case SCP_SERVER_STATE_MNG_LISTREQ: - /* list disconnected sessions */ - slist = session_get_byuser(NULL, &scount, SESMAN_SESSION_STATUS_ALL); - LOG_DBG("sessions on TS: %d (slist: %x)", scount, slist); + /* testing if login is allowed */ + if (0 == access_login_mng_allowed(s->username)) + { + scp_v1s_mng_deny_connection(c, "Access to Terminal Server not allowed."); + log_message(LOG_LEVEL_INFO, + "[MNG] User %s not allowed on TS. Connection terminated", s->username); + scp_session_destroy(s); + auth_end(data); + return; + } - if (0 == slist) - { -// e=scp_v1s_connection_error(c, "Internal error"); - log_message(LOG_LEVEL_INFO, "No sessions on Terminal Server"); - end = 0; - } - else + e = scp_v1s_mng_allow_connection(c, s); + + end = 1; + + while (end) + { + switch (e) { - e = scp_v1s_mng_list_sessions(c, s, scount, slist); - g_free(slist); + case SCP_SERVER_STATE_MNG_ACTION: + log_message(LOG_LEVEL_INFO, "Connection cancelled after session listing"); + break; + + case SCP_SERVER_STATE_MNG_LISTREQ: + /* list disconnected sessions */ + slist = session_get_byuser(NULL, &scount, SESMAN_SESSION_STATUS_ALL); + LOG_DBG("sessions on TS: %d (slist: %x)", scount, slist); + + if (0 == slist) + { + // e=scp_v1s_connection_error(c, "Internal error"); + log_message(LOG_LEVEL_INFO, "No sessions on Terminal Server"); + end = 0; + } + else + { + e = scp_v1s_mng_list_sessions(c, s, scount, slist); + g_free(slist); + } + + break; + default: + /* we check the other errors */ + parseCommonStates(e, "scp_v1s_mng_list_sessions()"); + end = 0; + break; } - - break; - default: - /* we check the other errors */ - parseCommonStates(e, "scp_v1s_mng_list_sessions()"); - end = 0; - break; } - } - /* cleanup */ - scp_session_destroy(s); - auth_end(data); + /* cleanup */ + scp_session_destroy(s); + auth_end(data); } -static void parseCommonStates(enum SCP_SERVER_STATES_E e, char* f) +static void parseCommonStates(enum SCP_SERVER_STATES_E e, char *f) { - switch (e) - { - case SCP_SERVER_STATE_VERSION_ERR: - LOG_DBG("version error") - case SCP_SERVER_STATE_SIZE_ERR: - /* an unknown scp version was requested, so we shut down the */ - /* connection (and log the fact) */ - log_message(LOG_LEVEL_WARNING, - "protocol violation. connection closed."); - break; - case SCP_SERVER_STATE_NETWORK_ERR: - log_message(LOG_LEVEL_WARNING, "libscp network error."); - break; - case SCP_SERVER_STATE_SEQUENCE_ERR: - log_message(LOG_LEVEL_WARNING, "libscp sequence error."); - break; - case SCP_SERVER_STATE_INTERNAL_ERR: - /* internal error occurred (eg. malloc() error, ecc.) */ - log_message(LOG_LEVEL_ERROR, "libscp internal error occurred."); - break; - default: - /* dummy: scp_v1s_request_password won't generate any other */ - /* error other than the ones before */ - log_message(LOG_LEVEL_ALWAYS, "unknown return from %s", f); - break; - } + switch (e) + { + case SCP_SERVER_STATE_VERSION_ERR: + LOG_DBG("version error") + case SCP_SERVER_STATE_SIZE_ERR: + /* an unknown scp version was requested, so we shut down the */ + /* connection (and log the fact) */ + log_message(LOG_LEVEL_WARNING, + "protocol violation. connection closed."); + break; + case SCP_SERVER_STATE_NETWORK_ERR: + log_message(LOG_LEVEL_WARNING, "libscp network error."); + break; + case SCP_SERVER_STATE_SEQUENCE_ERR: + log_message(LOG_LEVEL_WARNING, "libscp sequence error."); + break; + case SCP_SERVER_STATE_INTERNAL_ERR: + /* internal error occurred (eg. malloc() error, ecc.) */ + log_message(LOG_LEVEL_ERROR, "libscp internal error occurred."); + break; + default: + /* dummy: scp_v1s_request_password won't generate any other */ + /* error other than the ones before */ + log_message(LOG_LEVEL_ALWAYS, "unknown return from %s", f); + break; + } } |