summaryrefslogtreecommitdiffstats
path: root/sesman/scp_v0.c
diff options
context:
space:
mode:
Diffstat (limited to 'sesman/scp_v0.c')
-rw-r--r--sesman/scp_v0.c103
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);
}
}
+