diff --git a/common/os_calls.c b/common/os_calls.c index 095ff4fd..d81b3cd4 100644 --- a/common/os_calls.c +++ b/common/os_calls.c @@ -948,13 +948,20 @@ void* g_get_proc_address(int lib, char* name) /*****************************************************************************/ int g_system(char* aexec) { +#ifdef _WIN32 + return 0; +#else return system(aexec); +#endif } /*****************************************************************************/ void g_signal(int sig_num, void (*func)(int)) { +#ifdef _WIN32 +#else signal(sig_num, func); +#endif } /*****************************************************************************/ diff --git a/common/parse.h b/common/parse.h index cbcbc37b..11fd92bc 100644 --- a/common/parse.h +++ b/common/parse.h @@ -76,7 +76,9 @@ struct stream #define free_stream(s) \ { \ if (s != 0) \ + { \ g_free(s->data); \ + } \ g_free(s); \ } \ diff --git a/sesman/Makefile b/sesman/Makefile index fe964316..9f6969e9 100644 --- a/sesman/Makefile +++ b/sesman/Makefile @@ -3,8 +3,8 @@ SESMANOBJ = sesman.o ../common/os_calls.o ../common/d3des.o CFLAGS = -Wall -O2 -I../common LDFLAGS = -L /usr/gnu/lib -LIBS = -lpam_userpass -lcrypto -lpthread -PAMLIB = /lib/libpam.so.0 +LIBS = -lpam_userpass -lcrypto -lpthread -lpam +PAMLIB = CC = gcc all: sesman diff --git a/sesman/sesman.c b/sesman/sesman.c index fbc6c025..503f112d 100644 --- a/sesman/sesman.c +++ b/sesman/sesman.c @@ -307,7 +307,8 @@ int start_session(int width, int height, int bpp, char* username, else if (xpid == 0) // child { execlp("Xvnc", "Xvnc", screen, "-geometry", geometry, - "-depth", depth, "-bs", "-rfbauth", passwd_file, NULL); + "-depth", depth, "-bs", "-rfbauth", passwd_file, + NULL); // should not get here g_printf("error\n"); _exit(0); diff --git a/vnc/vnc.c b/vnc/vnc.c index 63dbfdb8..caaed648 100644 --- a/vnc/vnc.c +++ b/vnc/vnc.c @@ -452,6 +452,15 @@ int lib_framebuffer_update(struct vnc* v) } } } + /* keep these in 32x32, vnc cursor can be alot bigger */ + if (x > 31) + { + x = 31; + } + if (y > 31) + { + y = 31; + } error = v->server_set_cursor(v, x, y, cursor_data, cursor_mask); } } diff --git a/vnc/vnc.h b/vnc/vnc.h index 9462ec61..c45ee7be 100644 --- a/vnc/vnc.h +++ b/vnc/vnc.h @@ -49,6 +49,7 @@ struct vnc int (*server_set_cursor)(struct vnc* v, int x, int y, char* data, char* mask); int (*server_palette)(struct vnc* v, int* palette); int (*server_error_popup)(struct vnc* v, char* error, char* caption); + int (*server_is_term)(struct vnc* v); /* common */ long handle; /* pointer to self as int */ long wm; diff --git a/xrdp/xrdp.h b/xrdp/xrdp.h index c484e01f..0c2a4a4a 100644 --- a/xrdp/xrdp.h +++ b/xrdp/xrdp.h @@ -243,12 +243,12 @@ int xrdp_painter_draw_text(struct xrdp_painter* self, /* xrdp_list.c */ struct xrdp_list* xrdp_list_create(void); void xrdp_list_delete(struct xrdp_list* self); -void xrdp_list_add_item(struct xrdp_list* self, int item); -int xrdp_list_get_item(struct xrdp_list* self, int index); +void xrdp_list_add_item(struct xrdp_list* self, long item); +long xrdp_list_get_item(struct xrdp_list* self, int index); void xrdp_list_clear(struct xrdp_list* self); -int xrdp_list_index_of(struct xrdp_list* self, int item); +int xrdp_list_index_of(struct xrdp_list* self, long item); void xrdp_list_remove_item(struct xrdp_list* self, int index); -void xrdp_list_insert_item(struct xrdp_list* self, int index, int item); +void xrdp_list_insert_item(struct xrdp_list* self, int index, long item); /* xrdp_font.c */ struct xrdp_font* xrdp_font_create(struct xrdp_wm* wm); @@ -293,4 +293,5 @@ int server_set_pointer(struct xrdp_mod* mod, int x, int y, char* data, char* mask); int server_palette(struct xrdp_mod* mod, int* palette); int server_error_popup(struct xrdp_mod* mod, char* error, char* caption); +int server_is_term(struct xrdp_mod* mod); #endif diff --git a/xrdp/xrdp_interface.c b/xrdp/xrdp_interface.c index 388e017e..5ae532a3 100644 --- a/xrdp/xrdp_interface.c +++ b/xrdp/xrdp_interface.c @@ -344,4 +344,10 @@ int server_error_popup(struct xrdp_mod* mod, char* error, char* caption) return 0; } +/*****************************************************************************/ +int server_is_term(struct xrdp_mod* mod) +{ + return g_is_term(); +} + #endif /* XRDP_LIB */ diff --git a/xrdp/xrdp_list.c b/xrdp/xrdp_list.c index acde95d6..50f307cc 100644 --- a/xrdp/xrdp_list.c +++ b/xrdp/xrdp_list.c @@ -34,7 +34,7 @@ struct xrdp_list* xrdp_list_create(void) self = (struct xrdp_list*)g_malloc1(sizeof(struct xrdp_list), 1); self->grow_by = 10; self->alloc_size = 10; - self->items = (int*)g_malloc1(sizeof(int) * 10, 1); + self->items = (long*)g_malloc1(sizeof(long) * 10, 1); return self; } @@ -44,26 +44,33 @@ void xrdp_list_delete(struct xrdp_list* self) int i; if (self == 0) + { return; + } if (self->auto_free) + { for (i = 0; i < self->count; i++) + { g_free((void*)self->items[i]); + self->items[i] = 0; + } + } g_free1(self->items); g_free1(self); } /*****************************************************************************/ -void xrdp_list_add_item(struct xrdp_list* self, int item) +void xrdp_list_add_item(struct xrdp_list* self, long item) { - int* p; + long* p; int i; if (self->count >= self->alloc_size) { i = self->alloc_size; self->alloc_size += self->grow_by; - p = (int*)g_malloc1(sizeof(int) * self->alloc_size, 1); - g_memcpy(p, self->items, sizeof(int) * i); + p = (long*)g_malloc1(sizeof(long) * self->alloc_size, 1); + g_memcpy(p, self->items, sizeof(long) * i); g_free1(self->items); self->items = p; } @@ -72,10 +79,12 @@ void xrdp_list_add_item(struct xrdp_list* self, int item) } /*****************************************************************************/ -int xrdp_list_get_item(struct xrdp_list* self, int index) +long xrdp_list_get_item(struct xrdp_list* self, int index) { if (index < 0 || index >= self->count) + { return 0; + } return self->items[index]; } @@ -85,23 +94,32 @@ void xrdp_list_clear(struct xrdp_list* self) int i; if (self->auto_free) + { for (i = 0; i < self->count; i++) + { g_free((void*)self->items[i]); + self->items[i] = 0; + } + } g_free1(self->items); self->count = 0; self->grow_by = 10; self->alloc_size = 10; - self->items = (int*)g_malloc1(sizeof(int) * 10, 1); + self->items = (long*)g_malloc1(sizeof(long) * 10, 1); } /*****************************************************************************/ -int xrdp_list_index_of(struct xrdp_list* self, int item) +int xrdp_list_index_of(struct xrdp_list* self, long item) { int i; for (i = 0; i < self->count; i++) + { if (self->items[i] == item) + { return i; + } + } return -1; } @@ -113,17 +131,22 @@ void xrdp_list_remove_item(struct xrdp_list* self, int index) if (index >= 0 && index < self->count) { if (self->auto_free) + { g_free((void*)self->items[index]); + self->items[index] = 0; + } for (i = index; i < (self->count - 1); i++) + { self->items[i] = self->items[i + 1]; + } self->count--; } } /*****************************************************************************/ -void xrdp_list_insert_item(struct xrdp_list* self, int index, int item) +void xrdp_list_insert_item(struct xrdp_list* self, int index, long item) { - int* p; + long* p; int i; if (index == self->count) @@ -138,13 +161,15 @@ void xrdp_list_insert_item(struct xrdp_list* self, int index, int item) { i = self->alloc_size; self->alloc_size += self->grow_by; - p = (int*)g_malloc1(sizeof(int) * self->alloc_size, 1); - g_memcpy(p, self->items, sizeof(int) * i); + p = (long*)g_malloc1(sizeof(long) * self->alloc_size, 1); + g_memcpy(p, self->items, sizeof(long) * i); g_free1(self->items); self->items = p; } for (i = (self->count - 2); i >= index; i--) + { self->items[i + 1] = self->items[i]; + } self->items[index] = item; } } diff --git a/xrdp/xrdp_login_wnd.c b/xrdp/xrdp_login_wnd.c index aecc77fe..b449ab85 100644 --- a/xrdp/xrdp_login_wnd.c +++ b/xrdp/xrdp_login_wnd.c @@ -110,6 +110,7 @@ int xrdp_wm_setup_mod(struct xrdp_wm* self, self->mod->server_set_pointer = server_set_pointer; self->mod->server_palette = server_palette; self->mod->server_error_popup= server_error_popup; + self->mod->server_is_term = server_is_term; } } } diff --git a/xrdp/xrdp_types.h b/xrdp/xrdp_types.h index 84764abc..b89560a0 100644 --- a/xrdp/xrdp_types.h +++ b/xrdp/xrdp_types.h @@ -43,6 +43,7 @@ struct xrdp_mod int (*server_set_pointer)(struct xrdp_mod* v, int x, int y, char* data, char* mask); int (*server_palette)(struct xrdp_mod* v, int* palette); int (*server_error_popup)(struct xrdp_mod* v, char* error, char* caption); + int (*server_is_term)(struct xrdp_mod* v); /* common */ long handle; /* pointer to self as int */ long wm; /* struct xrdp_wm* */ @@ -76,7 +77,7 @@ struct xrdp_bmp_header /* list */ struct xrdp_list { - int* items; + long* items; int count; int alloc_size; int grow_by;