summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjsorg71 <jsorg71>2006-09-18 04:40:43 +0000
committerjsorg71 <jsorg71>2006-09-18 04:40:43 +0000
commit7cdd7191a4243d04b14315f9ae73f1bebaff9953 (patch)
tree7158e645189c000253febf63f0165caac14109a5
parentacc5edf33de1c67a0842eeef4407356aebea8536 (diff)
downloadxrdp-proprietary-7cdd7191a4243d04b14315f9ae73f1bebaff9953.tar.gz
xrdp-proprietary-7cdd7191a4243d04b14315f9ae73f1bebaff9953.zip
added ability to put extra Xserver parameters in sesman.ini
-rw-r--r--sesman/config.c51
-rw-r--r--sesman/config.h11
-rw-r--r--sesman/sesman.c5
-rw-r--r--sesman/sesman.ini8
-rw-r--r--sesman/session.c45
5 files changed, 113 insertions, 7 deletions
diff --git a/sesman/config.c b/sesman/config.c
index 9ff5d500..8a11ef09 100644
--- a/sesman/config.c
+++ b/sesman/config.c
@@ -62,7 +62,8 @@ config_read(struct config_sesman* cfg)
fd = g_file_open(SESMAN_CFG_FILE);
if (-1 == fd)
{
- g_printf("sesman: error reading config: %s\r\n", SESMAN_CFG_FILE);
+ log_message(LOG_LEVEL_ALWAYS, "error opening %s in \
+config_read", SESMAN_CFG_FILE);
return 1;
}
g_memset(cfg, 0, sizeof(struct config_sesman));
@@ -90,6 +91,7 @@ config_read(struct config_sesman* cfg)
list_delete(sec);
list_delete(param_v);
list_delete(param_n);
+ g_file_close(fd);
return 0;
}
@@ -327,3 +329,50 @@ config_read_sessions(int file, struct config_sessions* se, struct list* param_n,
return 0;
}
+/******************************************************************************/
+/* returns in params a list of parameters that need to be freed */
+/* returns error */
+int DEFAULT_CC
+config_read_xserver_params(int server_type, struct list* param_array)
+{
+ struct list* names;
+ struct list* params;
+ int fd;
+ char section_name[16];
+
+ if (server_type == SESMAN_SESSION_TYPE_XRDP)
+ {
+ g_strncpy(section_name, "X11rdp", 15);
+ }
+ else if (server_type == SESMAN_SESSION_TYPE_XVNC)
+ {
+ g_strncpy(section_name, "Xvnc", 15);
+ }
+ else
+ {
+ /* error */
+ log_message(LOG_LEVEL_ALWAYS, "error unknown type in \
+config_read_xserver_params");
+ return 1;
+ }
+ fd = g_file_open(SESMAN_CFG_FILE);
+ if (-1 == fd)
+ {
+ /* error */
+ log_message(LOG_LEVEL_ALWAYS, "error opening %s in \
+config_read_xserver_params %s", SESMAN_CFG_FILE, g_get_strerror());
+ return 1;
+ }
+ names = list_create();
+ names->auto_free = 1;
+ params = list_create();
+ params->auto_free = 1;
+ if (file_read_section(fd, section_name, names, params) == 0)
+ {
+ list_append_list_strdup(params, param_array, 0);
+ }
+ g_file_close(fd);
+ list_delete(names);
+ list_delete(params);
+ return 0;
+}
diff --git a/sesman/config.h b/sesman/config.h
index fe3926e1..b2665010 100644
--- a/sesman/config.h
+++ b/sesman/config.h
@@ -238,4 +238,15 @@ int DEFAULT_CC
config_read_sessions(int file, struct config_sessions* ss,
struct list* param_n, struct list* param_v);
+/**
+ *
+ * @brief Reads sesman [X11rdp, Xvnc, ...] configuration section
+ * @param server_type integer representing server type
+ * @param param_array pointer to list to add strings to
+ * @return 0 on success, 1 on failure
+ *
+ */
+int DEFAULT_CC
+config_read_xserver_params(int server_type, struct list* param_array);
+
#endif
diff --git a/sesman/sesman.c b/sesman/sesman.c
index 0b6bf1b6..c02b5895 100644
--- a/sesman/sesman.c
+++ b/sesman/sesman.c
@@ -148,6 +148,11 @@ main(int argc, char** argv)
}
error = g_file_read(fd, pid_s, 7);
+ if (0 != error)
+ {
+ g_printf("error reading pid file: %s\n", g_get_strerror());
+ }
+ g_file_close(fd);
pid = g_atoi(pid_s);
error = g_sigterm(pid);
diff --git a/sesman/sesman.ini b/sesman/sesman.ini
index 4c5f5a18..6f8dd701 100644
--- a/sesman/sesman.ini
+++ b/sesman/sesman.ini
@@ -20,3 +20,11 @@ LogFile=./sesman.log
LogLevel=DEBUG
EnableSyslog=0
SyslogLevel=DEBUG
+
+[X11rdp]
+param1=-bs
+param2=-ac
+
+[Xvnc]
+param1=-bs
+param2=-ac \ No newline at end of file
diff --git a/sesman/session.c b/sesman/session.c
index 682a469f..5fe72555 100644
--- a/sesman/session.c
+++ b/sesman/session.c
@@ -123,7 +123,9 @@ session_start(int width, int height, int bpp, char* username, char* password,
char cur_dir[256];
char text[256];
char passwd_file[256];
+ char** pp1;
struct session_chain* temp;
+ struct list* xserver_params;
/*THREAD-FIX lock to control g_session_count*/
lock_chain_acquire();
@@ -139,7 +141,7 @@ for user %s denied", username);
/*THREAD-FIX unlock chain*/
lock_chain_release();
-
+
temp = (struct session_chain*)g_malloc(sizeof(struct session_chain), 0);
if (temp == 0)
{
@@ -230,14 +232,45 @@ for user %s denied", username);
env_check_password_file(passwd_file, password);
if (type == SESMAN_SESSION_TYPE_XVNC)
{
- g_execlp13("Xvnc", "Xvnc", screen, "-geometry", geometry,
- "-depth", depth, "-bs", "-ac", "-rfbauth", passwd_file,
- 0, 0);
+ xserver_params = list_create();
+ xserver_params->auto_free = 1;
+ /* these are the must have parameters */
+ list_add_item(xserver_params, (long)g_strdup("Xvnc"));
+ list_add_item(xserver_params, (long)g_strdup(screen));
+ list_add_item(xserver_params, (long)g_strdup("-geometry"));
+ list_add_item(xserver_params, (long)g_strdup(geometry));
+ list_add_item(xserver_params, (long)g_strdup("-depth"));
+ list_add_item(xserver_params, (long)g_strdup(depth));
+ list_add_item(xserver_params, (long)g_strdup("-rfbauth"));
+ list_add_item(xserver_params, (long)g_strdup(passwd_file));
+ /* additional parameters from sesman.ini file */
+ config_read_xserver_params(SESMAN_SESSION_TYPE_XVNC,
+ xserver_params);
+ /* make sure it ends with a zero */
+ list_add_item(xserver_params, 0);
+ pp1 = (char**)xserver_params->items;
+ g_execvp("Xvnc", pp1);
+ list_delete(xserver_params);
}
else if (type == SESMAN_SESSION_TYPE_XRDP)
{
- g_execlp11("X11rdp", "X11rdp", screen, "-geometry", geometry,
- "-depth", depth, "-bs", "-ac", 0, 0);
+ xserver_params = list_create();
+ xserver_params->auto_free = 1;
+ /* these are the must have parameters */
+ list_add_item(xserver_params, (long)g_strdup("X11rdp"));
+ list_add_item(xserver_params, (long)g_strdup(screen));
+ list_add_item(xserver_params, (long)g_strdup("-geometry"));
+ list_add_item(xserver_params, (long)g_strdup(geometry));
+ list_add_item(xserver_params, (long)g_strdup("-depth"));
+ list_add_item(xserver_params, (long)g_strdup(depth));
+ /* additional parameters from sesman.ini file */
+ config_read_xserver_params(SESMAN_SESSION_TYPE_XRDP,
+ xserver_params);
+ /* make sure it ends with a zero */
+ list_add_item(xserver_params, 0);
+ pp1 = (char**)xserver_params->items;
+ g_execvp("X11rdp", pp1);
+ list_delete(xserver_params);
}
else
{