diff --git a/patches/278541.patch b/patches/278541.patch new file mode 100644 index 00000000..f2439fe3 --- /dev/null +++ b/patches/278541.patch @@ -0,0 +1,142 @@ +diff --git a/pkgs/applications/networking/remote/xrdp/dynamic_config.patch b/pkgs/applications/networking/remote/xrdp/dynamic_config.patch +index 5c97beeb67018d..ede415812e6b10 100644 +--- a/pkgs/applications/networking/remote/xrdp/dynamic_config.patch ++++ b/pkgs/applications/networking/remote/xrdp/dynamic_config.patch +@@ -116,7 +116,7 @@ index d08f068a..cc7a173d 100644 + && g_strlen(value) > 0) + { + diff --git a/libxrdp/xrdp_sec.c b/libxrdp/xrdp_sec.c +-index 8fa34aea..da94cf95 100644 ++index 29c2222b..f658ade8 100644 + --- a/libxrdp/xrdp_sec.c + +++ b/libxrdp/xrdp_sec.c + @@ -371,7 +371,6 @@ xrdp_load_keyboard_layout(struct xrdp_client_info *client_info) +@@ -149,7 +149,7 @@ index 8fa34aea..da94cf95 100644 + } + } + +-@@ -2759,7 +2757,6 @@ xrdp_sec_incoming(struct xrdp_sec *self) ++@@ -2810,7 +2808,6 @@ xrdp_sec_incoming(struct xrdp_sec *self) + int index = 0; + char *item = NULL; + char *value = NULL; +@@ -157,7 +157,7 @@ index 8fa34aea..da94cf95 100644 + + iso = self->mcs_layer->iso_layer; + +-@@ -2805,19 +2802,17 @@ xrdp_sec_incoming(struct xrdp_sec *self) ++@@ -2856,19 +2853,17 @@ xrdp_sec_incoming(struct xrdp_sec *self) + LOG(LOG_LEVEL_DEBUG, "Using RDP security, and " + "reading the server configuration"); + +@@ -179,8 +179,21 @@ index 8fa34aea..da94cf95 100644 + list_delete(items); + list_delete(values); + return 1; ++diff --git a/sesman/chansrv/chansrv.c b/sesman/chansrv/chansrv.c ++index ef3960ed..7d167728 100644 ++--- a/sesman/chansrv/chansrv.c +++++ b/sesman/chansrv/chansrv.c ++@@ -1706,7 +1706,7 @@ main(int argc, char **argv) ++ /* ++ * The user is unable at present to override the sysadmin-provided ++ * sesman.ini location */ ++- config_path = XRDP_CFG_PATH "/sesman.ini"; +++ config_path = argv[2]; ++ if ((g_cfg = config_read(0, config_path)) == NULL) ++ { ++ main_cleanup(); + diff --git a/sesman/config.c b/sesman/config.c +-index 61e9e403..0466f61a 100644 ++index 44636c60..2c3ba0af 100644 + --- a/sesman/config.c + +++ b/sesman/config.c + @@ -34,6 +34,7 @@ +@@ -204,7 +217,7 @@ index 61e9e403..0466f61a 100644 + char *buf; + + list_clear(param_v); +-@@ -127,13 +127,12 @@ config_read_globals(int file, struct config_sesman *cf, struct list *param_n, ++@@ -128,13 +128,12 @@ config_read_globals(int file, struct config_sesman *cf, struct list *param_n, + g_free(cf->default_wm); + cf->default_wm = g_strdup("startwm.sh"); + } +@@ -221,7 +234,7 @@ index 61e9e403..0466f61a 100644 + g_free(cf->default_wm); + cf->default_wm = g_strdup(buf); + g_free(buf); +-@@ -151,10 +150,8 @@ config_read_globals(int file, struct config_sesman *cf, struct list *param_n, ++@@ -152,10 +151,8 @@ config_read_globals(int file, struct config_sesman *cf, struct list *param_n, + /* if reconnect_sh doesn't begin with '/', it's a relative path to XRDP_CFG_PATH */ + if (cf->reconnect_sh[0] != '/') + { +@@ -230,11 +243,11 @@ index 61e9e403..0466f61a 100644 + - buf = (char *)g_malloc(length, 0); + - g_sprintf(buf, "%s/%s", XRDP_CFG_PATH, cf->reconnect_sh); + + buf = (char *)g_malloc(g_strlen(base_dir) + 1 + g_strlen(cf->reconnect_sh) + 1, 0); +-+ g_sprintf(buf, "%s/%s", base_dir, cf->reconnect_sh); +++ g_sprintf(buf, "%s/%s", base_dir, cf->reconnect_sh); + g_free(cf->reconnect_sh); + cf->reconnect_sh = g_strdup(buf); + g_free(buf); +-@@ -511,6 +508,7 @@ struct config_sesman * ++@@ -518,6 +515,7 @@ struct config_sesman * + config_read(const char *sesman_ini) + { + struct config_sesman *cfg; +@@ -242,19 +255,30 @@ index 61e9e403..0466f61a 100644 + int all_ok = 0; + + if ((cfg = g_new0(struct config_sesman, 1)) != NULL) +-@@ -532,8 +530,10 @@ config_read(const char *sesman_ini) ++@@ -539,8 +537,10 @@ config_read(const char *sesman_ini) + param_v->auto_free = 1; + + /* read global config */ + - config_read_globals(fd, cfg, param_n, param_v); +-- + + g_strcpy(cfg_dir, sesman_ini); + + *(strrchr(cfg_dir, '/')) = 0; // cfg_file validated to contain '/' +-+ ++ + + config_read_globals(cfg_dir, fd, cfg, param_n, param_v); + /* read Xvnc/X11rdp/Xorg parameter list */ + config_read_vnc_params(fd, cfg, param_n, param_v); + config_read_rdp_params(fd, cfg, param_n, param_v); ++diff --git a/sesman/session.c b/sesman/session.c ++index d352f5e8..eb0ae23a 100644 ++--- a/sesman/session.c +++++ b/sesman/session.c ++@@ -411,6 +411,7 @@ session_start_chansrv(char *username, int display) ++ ++ list_add_item(chansrv_params, (intptr_t) g_strdup(exe_path)); ++ list_add_item(chansrv_params, 0); /* mandatory */ +++ list_add_item(chansrv_params, (intptr_t) g_strdup(g_cfg->sesman_ini)); ++ ++ env_set_user(username, 0, display, ++ g_cfg->env_names, + diff --git a/xrdp/lang.c b/xrdp/lang.c + index e4c18077..06f92997 100644 + --- a/xrdp/lang.c +@@ -294,7 +318,7 @@ index e4c18077..06f92997 100644 + + if (g_file_exist(filename)) + diff --git a/xrdp/xrdp.c b/xrdp/xrdp.c +-index e91672fb..37cef0c0 100644 ++index 60d805d2..ecebad6c 100644 + --- a/xrdp/xrdp.c + +++ b/xrdp/xrdp.c + @@ -384,7 +384,6 @@ xrdp_sanity_check(void) +@@ -319,10 +343,10 @@ index e91672fb..37cef0c0 100644 + } + + diff --git a/xrdp/xrdp.h b/xrdp/xrdp.h +-index 36d8f87a..687b9dd5 100644 ++index be008aa2..54d7330e 100644 + --- a/xrdp/xrdp.h + +++ b/xrdp/xrdp.h +-@@ -380,7 +380,7 @@ get_char_from_scan_code(int device_flags, int scan_code, int *keys, ++@@ -389,7 +389,7 @@ get_char_from_scan_code(int device_flags, int scan_code, int *keys, + int caps_lock, int num_lock, int scroll_lock, + struct xrdp_keymap *keymap); + int