summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xrdp/xrdp_listen.c49
1 files changed, 42 insertions, 7 deletions
diff --git a/xrdp/xrdp_listen.c b/xrdp/xrdp_listen.c
index d767d2be..740d166b 100644
--- a/xrdp/xrdp_listen.c
+++ b/xrdp/xrdp_listen.c
@@ -142,16 +142,51 @@ int APP_CC
xrdp_listen_main_loop(struct xrdp_listen* self)
{
int error;
-
+ int fd;
+ int index;
+ char port[8];
+ char* val;
+ struct list* names;
+ struct list* values;
+
+ /* default to port 3389 */
+ g_strncpy(port, "3389", 7);
+ /* see if port is in xrdp.ini file */
+ fd = g_file_open("xrdp.ini");
+ if (fd > 0)
+ {
+ names = list_create();
+ names->auto_free = 1;
+ values = list_create();
+ values->auto_free = 1;
+ if (file_read_section(fd, "globals", names, values) == 0)
+ {
+ for (index = 0; index < names->count; index++)
+ {
+ val = (char*)list_get_item(names, index);
+ if (val != 0)
+ {
+ if (g_strncasecmp(val, "port", 5) == 0)
+ {
+ val = (char*)list_get_item(values, index);
+ error = g_atoi(val);
+ if (error > 0 && error < 65000)
+ {
+ g_strncpy(port, val, 7);
+ }
+ break;
+ }
+ }
+ }
+ }
+ list_delete(names);
+ list_delete(values);
+ g_file_close(fd);
+ }
self->status = 1;
self->sck = g_tcp_socket();
g_tcp_set_non_blocking(self->sck);
- error = g_tcp_bind(self->sck, "3389");
- if (error != 0)
- {
- g_printf("listening on 3390\r\n");
- error = g_tcp_bind(self->sck, "3390");
- }
+ error = g_tcp_bind(self->sck, port);
if (error != 0)
{
g_printf("bind error in xrdp_listen_main_loop\r\n");