diff options
Diffstat (limited to 'sesman/scp_v0.c')
-rw-r--r-- | sesman/scp_v0.c | 103 |
1 files changed, 42 insertions, 61 deletions
diff --git a/sesman/scp_v0.c b/sesman/scp_v0.c index f31cd4ff..37d8a2cd 100644 --- a/sesman/scp_v0.c +++ b/sesman/scp_v0.c @@ -29,81 +29,62 @@ /******************************************************************************/ void DEFAULT_CC -scp_v0_process(int in_sck, struct stream* in_s, struct stream* out_s) +scp_v0_process(struct SCP_CONNECTION* c, struct SCP_SESSION* s) { - int code; - int i; - int width; - int height; - int bpp; - int display; - char user[256]; - char pass[256]; + int code=0; + int display=0; long data; struct session_item* s_item; - in_uint16_be(in_s, code); - if (code == 0 || code == 10) /* check username - password, */ - { /* start session */ - in_uint16_be(in_s, i); - in_uint8a(in_s, user, i); - user[i] = 0; - in_uint16_be(in_s, i); - in_uint8a(in_s, pass, i); - pass[i] = 0; - in_uint16_be(in_s, width); - in_uint16_be(in_s, height); - in_uint16_be(in_s, bpp); - data = auth_userpass(user, pass); - display = 0; - if (data) + data = auth_userpass(s->username, s->password); + + if (data) + { + s_item = session_get_bydata(s->username, s->width, s->height, s->bpp); + if (s_item != 0) { - s_item = session_get_bydata(user, width, height, bpp); - if (s_item != 0) - { - display = s_item->display; - auth_end(data); - /* don't set data to null here */ - } - else + display = s_item->display; + auth_end(data); + /* don't set data to null here */ + } + else + { + g_printf("pre auth"); + if (1 == access_login_allowed(s->username)) { - g_printf("pre auth"); - if (1 == access_login_allowed(user)) + log_message(LOG_LEVEL_INFO, "granted TS access to user %s", s->username); + if (0 == code) { - log_message(LOG_LEVEL_INFO, - "granted TS access to user %s", user); - if (0 == code) - { - log_message(LOG_LEVEL_INFO, "starting Xvnc session..."); - display = session_start(width, height, bpp, user, pass, - data, SESMAN_SESSION_TYPE_XVNC); - } - else - { - log_message(LOG_LEVEL_INFO, "starting Xrdp session..."); - display = session_start(width, height, bpp, user, pass, - data, SESMAN_SESSION_TYPE_XRDP); - } + log_message(LOG_LEVEL_INFO, "starting Xvnc session..."); + display = session_start(s->width, s->height, s->bpp, s->username, s->password, + data, SESMAN_SESSION_TYPE_XVNC); } else { - display = 0; + log_message(LOG_LEVEL_INFO, "starting Xrdp session..."); + display = session_start(s->width, s->height, s->bpp, s->username, s->password, + data, SESMAN_SESSION_TYPE_XRDP); } } - if (display == 0) + else { - auth_end(data); - data = 0; + display = 0; } } - init_stream(out_s, 8192); - out_uint32_be(out_s, 0); /* version */ - out_uint32_be(out_s, 14); /* size */ - out_uint16_be(out_s, 3); /* cmd */ - out_uint16_be(out_s, data != 0); /* data */ - out_uint16_be(out_s, display); /* data */ - s_mark_end(out_s); - tcp_force_send(in_sck, out_s->data, - out_s->end - out_s->data); + if (display == 0) + { + auth_end(data); + data = 0; + scp_v0s_deny_connection(c); + } + else + { + scp_v0s_allow_connection(c, display); + } + } + else + { + scp_v0s_deny_connection(c); } } + |