summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/Makefile.am20
-rw-r--r--docs/man/Makefile.am25
-rw-r--r--docs/man/sesman.ini.571
-rw-r--r--docs/man/xrdp-chansrv.846
-rw-r--r--docs/man/xrdp-dis.123
-rw-r--r--docs/man/xrdp-genkeymap.867
-rw-r--r--docs/man/xrdp-keygen.840
-rw-r--r--docs/man/xrdp-sesadmin.857
-rw-r--r--docs/man/xrdp-sesman.831
-rw-r--r--docs/man/xrdp-sesrun.839
-rw-r--r--docs/man/xrdp-sessvc.826
-rw-r--r--docs/man/xrdp-xcon.814
-rw-r--r--docs/man/xrdp.818
-rw-r--r--docs/man/xrdp.ini.5217
-rw-r--r--faq-general.txt6
-rw-r--r--sesman/chansrv/Makefile.am12
-rw-r--r--sesman/tools/Makefile.am6
-rwxr-xr-xxorg/X11R7.6/buildx.sh110
-rw-r--r--xrdp/xrdp.ini2
-rw-r--r--xrdp/xrdp_wm.c2
20 files changed, 622 insertions, 210 deletions
diff --git a/common/Makefile.am b/common/Makefile.am
index 33cfc1e5..3d7e8bd1 100644
--- a/common/Makefile.am
+++ b/common/Makefile.am
@@ -1,5 +1,21 @@
-EXTRA_DIST = d3des.h arch.h os_calls.h list.h file.h parse.h defines.h file_loc.h log.h os_calls.h ssl_calls.h thread_calls.h trans.h xrdp_constants.h
-
+EXTRA_DIST = \
+ arch.h \
+ d3des.h \
+ defines.h \
+ file.h \
+ file_loc.h \
+ list.h \
+ log.h \
+ os_calls.h \
+ os_calls.h \
+ parse.h \
+ rail.h \
+ ssl_calls.h \
+ thread_calls.h \
+ trans.h \
+ xrdp_client_info.h \
+ xrdp_constants.h \
+ xrdp_rail.h
AM_CFLAGS = \
-DXRDP_CFG_PATH=\"${sysconfdir}/xrdp\" \
diff --git a/docs/man/Makefile.am b/docs/man/Makefile.am
index 2689407b..507809bd 100644
--- a/docs/man/Makefile.am
+++ b/docs/man/Makefile.am
@@ -1,14 +1,17 @@
-EXTRA_DIST = sesman.ini.5 xrdp.ini.5 xrdp.8 xrdp-sesman.8 xrdp-sesrun.8
-
-xrdpman5dir=$(mandir)/man5
-
-xrdpman5_DATA = \
+man_MANS = \
+ xrdp-dis.1 \
sesman.ini.5 \
- xrdp.ini.5
-
-xrdpman8dir=$(mandir)/man8
-
-xrdpman8_DATA = \
+ xrdp.ini.5 \
xrdp.8 \
+ xrdp-chansrv.8 \
+ xrdp-genkeymap.8 \
+ xrdp-keygen.8 \
+ xrdp-sesadmin.8 \
xrdp-sesman.8 \
- xrdp-sesrun.8
+ xrdp-sesrun.8 \
+ xrdp-sessvc.8
+
+noinst_man_MANS = \
+ xrdp-xcon.8
+
+EXTRA_DIST = $(man_MANS) $(noinst_man_MANS)
diff --git a/docs/man/sesman.ini.5 b/docs/man/sesman.ini.5
index ebefd120..2bf69297 100644
--- a/docs/man/sesman.ini.5
+++ b/docs/man/sesman.ini.5
@@ -1,10 +1,9 @@
.\"
.TH "sesman.ini" "5" "0.1.0" "xrdp team" ""
.SH "NAME"
-.LP
\fBsesman.ini\fR \- Configuration file for \fBsesman\fR(8)
+
.SH "DESCRIPTION"
-.LP
This is the man page for \fBsesman.ini\fR, \fBsesman\fR(8) configuration file.
It is composed by a number of sections, each one composed by a section name, enclosed by square brackets, folowed by a list of \fI<parameter>\fR=\fI<value>\fR lines.
@@ -29,49 +28,38 @@ All options and values (except for file names and paths) are case insensitive, a
For any of the following parameter, if it's specified more than one time the last entry encountered will be used.
\fBNOTE\fR: if any of these options is specified outside its section, it will be \fIignored\fR.
-.SH "GLOBALS"
-.LP
-.TP
+.SH "GLOBALS"
The options to be specified in the \fB[globals]\fR section are the following:
-.br
.TP
\fBListenAddress\fR=\fIip address\fR
Specifies sesman listening address. Default is 0.0.0.0 (all interfaces)
-.br
.TP
\fBListenPort\fR=\fIport number\fR
Specifies sesman listening port. Default is 3350
-.br
.TP
\fBEnableUserWindowManager\fR=\fI[0|1]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables user specific window manager, that is, anyone can define it's own script executed by sesman when starting a new session, specified by \fBUserWindowManager\fR
-.br
.TP
\fBUserWindowManager\fR=\fIstartwm.sh\fR
This option specifies the script run by sesman when starting a session and per\-user window manager is enabled.
.br
The path is relative to user's HOME directory
-.br
.TP
\fBDefaultWindowManager\fR=\fI${SESMAN_BIN_DIR}/startwm.sh\fR
This contains full path to the default window manager startup script used by sesman to start a session
-.SH "LOGGING"
-.LP
-.TP
+.SH "LOGGING"
The following parameters can be used in the \fB[logging]\fR section:
-.br
.TP
\fBLogFile\fR=\fI${SESMAN_LOG_DIR}/sesman.log\fR
This options contains the path to logfile. It can be either absolute or relative, and the default is \fI${SESMAN_LOG_DIR}/sesman.log\fR
-.br
.TP
\fBLogLevel\fR=\fIlevel\fR
@@ -86,41 +74,33 @@ This option can have one of the following values:
\fBINFO\fR or \fB3\fR \- Logs errors, warnings and informational messages
\fBDEBUG\fR or \fB4\fR \- Log everything. If \fBsesman\fR is compiled in debug mode, this options will output many more low\-level message, useful for developers
-.br
.TP
\fBEnableSyslog\fR=\fI[0|1]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables logging to syslog. Otherwise syslog is disabled.
-.br
.TP
\fBSyslogLevel\fR=\fIlevel\fR
This option sets the logging level for syslog. It can have the same values of \fBLogLevel\fR. If \fBSyslogLevel\fR is greater than \fBLogLevel\fR, its value is lowered to that of \fBLogLevel\fR.
-.SH "SESSIONS"
-.LP
-.TP
+.SH "SESSIONS"
The following parameters can be used in the \fB[Sessions]\fR section:
-.br
.TP
\fBX11DisplayOffset\fR=\fI<number>\fR
-Specifies the first X display number available for sesman(8). This prevents sesman from interfering with real X11 servers. The default is 10.
-.br
+Specifies the first X display number available for \fBsesman\fP(8). This prevents sesman from interfering with real X11 servers. The default is 10.
.TP
\fBMaxSessions\fR=\fI<number>\fR
Sets the maximum number of simultaneous session on terminal server.
.br
If unset or set to \fI0\fR, unlimited session are allowed.
-.br
.TP
\fBKillDisconnected\fR=\fI[0|1]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, every session will be killed when the user disconnects.
.br
\fI\-this option is currently ignored!\-\fR
-.br
.TP
\fBIdleTimeLimit\fR=\fI<number>\fR
@@ -129,7 +109,6 @@ Sets the the time limit before an idle session is disconnected.
If set to \fI0\fR, automatic disconnection is disabled.
.br
\fI\-this option is currently ignored!\-\fR
-.br
.TP
\fBDisconnectedTimeLimit\fR=\fI<number>\fR
@@ -138,87 +117,67 @@ Sets the the time limit before a disconnected session is killed.
If set to \fI0\fR, automatic killing is disabled.
.br
\fI\-this option is currently ignored!\-\fR
-.br
-.SH "SECURITY"
-.LP
-.TP
+.SH "SECURITY"
The following parameters can be used in the \fB[Sessions]\fR section:
-.br
.TP
\fBAllowRootLogin\fR=\fI[0|1]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR enables root login on the terminal server
-.br
.TP
\fBMaxLoginRetry\fR=\fI[0|1]\fR
The number of login attempts that are allowed on terminal server. If set to \fI0\fR, unlimited attempts are allowed. The default value for this field is \fI3\fR.
-.br
.TP
\fBTerminalServerUsers\fR=\fItsusers\fR
Only the users belonging to the group \fItsusers\fR are allowed to login on terminal server.
.br
If unset or set to an invalid or non\-existent group, login for all users is enabled.
-.br
.TP
\fBTerminalServerAdmins\fR=\fItsadmins\fR
Sets the group which a user shall belong to have session management rights.
.br
\fI\-this option is currently ignored!\-\fR
-.br
+
.SH "EXAMPLES"
-.LP
This is an example \fBsesman.ini\fR:
+.nf
[Globals]
-.br
ListenAddress=127.0.0.1
-.br
ListenPort=3350
-.br
EnableUserWindowManager=1
-.br
UserWindowManager=startwm.sh
-.br
DefaultWindowManager=startwm.sh
[Logging]
-.br
LogFile=/usr/local/xrdp/sesman.log
-.br
LogLevel=DEBUG
-.br
EnableSyslog=0
-.br
SyslogLevel=DEBUG
[Sessions]
-.br
MaxSessions=10
-.br
KillDisconnected=0
-.br
IdleTimeLimit=0
-.br
DisconnectedTimeLimit=0
[Security]
-.br
AllowRootLogin=1
-.br
MaxLoginRetry=3
-.br
TerminalServerUsers=tsusers
-.br
TerminalServerAdmins=tsadmins
+.fi
+
.SH "FILES"
-.LP
${SESMAN_CFG_DIR}/sesman.ini
+
.SH "SEE ALSO"
-.LP
-sesman(8) sesrun(8) xrdp(8) xrdp.ini(5)
+.BR sesman (8),
+.BR sesrun (8),
+.BR xrdp (8),
+.BR xrdp.ini (5)
for more info on \fBxrdp\fR see http://xrdp.sf.net
diff --git a/docs/man/xrdp-chansrv.8 b/docs/man/xrdp-chansrv.8
new file mode 100644
index 00000000..aa4747d8
--- /dev/null
+++ b/docs/man/xrdp-chansrv.8
@@ -0,0 +1,46 @@
+.TH "xrdp\-chansrv" "8" "0.7.0" "xrdp team" ""
+.SH "NAME"
+\fBxrdp\-chansrv\fR \- \fBxrdp\fR channel server
+
+.SH "SYNTAX"
+.B xrdp\-chansrv
+
+.SH "DESCRIPTION"
+\fBxrdp\-chansrv\fR is the \fBxrdp\fR(8) channel server, which manages the Remote Desktop Protocol (RDP) sub-channels.
+This program is only forked internally by \fBxrdp\-sesman\fP(8).
+.br
+Currently \fBxrdp\-chansrv\fP knows about the following channels:
+.RE 8
+.TP
+.B cliprdr
+Clipboard Redirection
+.TP
+.B rdpsnd
+Remote Desktop Protocol Sound
+.TP
+.B rdpdr
+Remote Desktop Protocol Device Redirection
+.TP
+.B rail
+Remote Applications Integrated Locally
+.TP
+.B drdynvc
+Dynamic Virtual Channel
+.RS
+
+.SH FILES
+.TP
+.I /tmp/.xrdp/xrdp_chansrv_socket_*
+UNIX socket used by external programs to implement channels.
+.TP
+.I /tmp/.xrdp/xrdp_api_*
+UNIX socket used by \fBxrdp\-chansrv\fP to communicate with \fBxrdp\-sesman\fP.
+.TP
+.I $HOME/xrdp-chansrv.log
+Log file used by \fBxrdp\-chansrv\fP(8).
+
+.SH "SEE ALSO"
+.BR xrdp\-sesman (8),
+.BR sesman.ini (5).
+
+for more info on \fBxrdp\fR see http://xrdp.sf.net
diff --git a/docs/man/xrdp-dis.1 b/docs/man/xrdp-dis.1
new file mode 100644
index 00000000..089621ae
--- /dev/null
+++ b/docs/man/xrdp-dis.1
@@ -0,0 +1,23 @@
+.TH "xrdp-dis" "8" "0.7.0" "xrdp team"
+.SH NAME
+xrdp\-dis \- xrdp disconnect utility
+
+.SH SYNOPSIS
+.B xrdp\-dis
+
+.SH DESCRIPTION
+.PP
+\fBxrdp\-dix\fP is run with no parameters to disconnect your xrdp session.
+
+.SH ENVIRONMENT
+.TP
+.B DISPLAY
+to get the default host and display number.
+
+.SH FILES
+.TP
+.I /tmp/.xrdp/xrdp_disconnect_display_*
+UNIX socket used to communicate with the \fBxrdp\fP(8) session manager.
+
+.SH SEE ALSO
+.BR xrdp (1).
diff --git a/docs/man/xrdp-genkeymap.8 b/docs/man/xrdp-genkeymap.8
new file mode 100644
index 00000000..068f04dd
--- /dev/null
+++ b/docs/man/xrdp-genkeymap.8
@@ -0,0 +1,67 @@
+.TH "xrdp\-genkeymap" "8" "0.1.0" "xrdp team" ""
+.de URL
+. \\$2 \(laURL: \\$1 \(ra\\$3
+..
+.if \n[.g] .mso www.tmac
+
+.SH "NAME"
+\fBxrdp\-genkeymap\fR \- key map generator for XRDP
+
+.SH "SYNTAX"
+.B xrdp\-genkeymap
+.I file
+
+.SH "DESCRIPTION"
+\fBxrdp\-genkeymap\fR extracts the key map used by the currently running X session to generated a mapping from Remote Desktop Protocol (RDP) key codes to X keysyms and Unicode code points.
+
+.SH OPTIONS
+.TP
+.I outfile
+The key map information is stored in the file named \fIoutfile\fP.
+
+.SH "FILES"
+.TP
+.I /etc/xrdp/km-XXXX.ini
+Files containing the keyboard mapping for language \fIXXXX\fP, which is a 4 digit hexadecimal number identifying the country and language code.
+.RS 8
+.TP
+.B 0405
+cs czech
+.TP
+.B 0407
+de german
+.TP
+.B 0409
+en-us us english
+.TP
+.B 040c
+fr french
+.TP
+.B 0410
+it italy
+.TP
+.B 0416
+br Portuguese (Brazil)
+.TP
+.B 0419
+ru russian
+.TP
+.B 041d
+se swedish
+.TP
+.B 0809
+en-uk uk english
+.RE
+
+.SH "AUTHORS"
+Jay Sorg <jsorg71@users.sourceforge.net>
+.br
+Simone Fedele <ilsimo@users.sourceforge.net>
+
+.SH "SEE ALSO"
+.BR xrdp (8),
+.BR setxkbmap (1),
+.BR unicode (7),
+.URL "https://github.com/FreeRDP/FreeRDP/wiki/Keyboard" "Description of Keyboard Input mapping" .
+
+for more info on \fBxrdp\fR see http://xrdp.sf.net
diff --git a/docs/man/xrdp-keygen.8 b/docs/man/xrdp-keygen.8
new file mode 100644
index 00000000..71269f5c
--- /dev/null
+++ b/docs/man/xrdp-keygen.8
@@ -0,0 +1,40 @@
+.\" Hey, EMACS: -*- nroff -*-
+.TH xrdp\-keygen 8 "0.7.0" "xrdp team"
+.SH NAME
+xrdp\-keygen \- xrdp RSA key generation utility
+
+.SH SYNOPSIS
+.B xrdp\-keygen xrdp
+< \fIoutfile\fP | \fBauto\fP >
+.br
+.B xrdp\-keygen test
+
+.SH DESCRIPTION
+\fBxrdp\-keygen\fP generates the file
+.I /etc/xrdp/rsakeys.ini
+which contains the RSA key pair used to perform authentication to
+remote clients. The public key is self-signed.
+
+.SH OPTIONS
+This program takes one of the following options:
+.TP
+\fBxrdp\fP \fIoutfile\fP
+Generate a new key pair.
+The key data is stored in the file named \fIoutfile\fP.
+.br
+If \fBauto\fP is used as \fIoutfile\fP, the default file \fI/etc/xrdp/rsakeys.ini\fP gets created if it does not yet exists.
+.TP
+.B test
+Generate a test key pair and print information to standard output.
+
+.SH FILES
+.TP
+.I /etc/xrdp/rsakeys.ini
+RSA public and private key pair used to identify this XRDP server.
+
+.SH SEE ALSO
+.BR xrdp (8),
+.BR xrdp\-sesman (8).
+
+.SH AUTHOR
+This manual page was originally written by Vincent Bernat <bernat@luffy.cx>.
diff --git a/docs/man/xrdp-sesadmin.8 b/docs/man/xrdp-sesadmin.8
new file mode 100644
index 00000000..ade1dd58
--- /dev/null
+++ b/docs/man/xrdp-sesadmin.8
@@ -0,0 +1,57 @@
+.TH "xrdp-sesadmin" "8" "0.7.0" "xrdp team"
+.SH NAME
+xrdp\-sesadmin \- console XRDP sessions administration tool
+
+.SH SYNOPSIS
+.B xrdp\-sesadmin
+.RI [ options ]
+.BI -c= command
+
+.SH DESCRIPTION
+This manual page documents briefly the
+.B xrdp\-sesadmin
+command.
+.PP
+\fBxrdp\-sesadmin\fP is a console program to administer running XRDP sessions.
+
+.SH OPTIONS
+A summary of options is included below.
+.TP
+.BI \-u= username
+\fIUsername\fP for authentication on the server.
+Defaults to \fBroot\fP.
+
+.TP
+.BI \-p= password
+The \fIpassword\fP to authenticate with.
+The default is to ask for the password interactively.
+
+.TP
+.BI \-s= server
+The host address of the \fIserver\fP to connect to.
+Defaults to \fBlocalhost\fP.
+
+.TP
+.BI \-i= port
+The TCP \fIport\fP number to connect to.
+Defaults to \fB3350\fP.
+
+.TP
+.BI \-c= command
+Specifies the \fIcommand\fP to execute on the server.
+Valid commands are:
+.RS 4
+.TP
+.B list
+List currently active sessions.
+.TP
+.BI kill: sid
+Kills the session specified the given \fIsession id\fP.
+(not yet implemented).
+.RE
+
+.SH FILES
+xrdp\-sesadmin.log
+
+.SH SEE ALSO
+.BR xrdp (8).
diff --git a/docs/man/xrdp-sesman.8 b/docs/man/xrdp-sesman.8
index a224c639..9316e926 100644
--- a/docs/man/xrdp-sesman.8
+++ b/docs/man/xrdp-sesman.8
@@ -1,28 +1,28 @@
-.TH "sesman" "8" "0.1.0" "xrdp team" ""
+.TH "xrdp\-sesman" "8" "0.1.0" "xrdp team" ""
.SH "NAME"
-.LP
-\fBsesman\fR \- \fBxrdp\fR(8) session manager
+xrdp\-sesman \- \fBxrdp\fR(8) session manager
+
.SH "SYNTAX"
-.LP
-sesman [ \-\-nodaemon | \-\-kill | \-\-help ]
+.B xrdp\-sesman
+.RB [ \-\-nodaemon | \-\-kill | \-\-help ]
+
.SH "DESCRIPTION"
-.LP
-\fBsesman\fR is \fBxrdp\fR(8) session manager.
+\fBxrdp\-sesman\fR is \fBxrdp\fR(8) session manager.
.br
It manages user sessions by authenticating the user and starting the appropriate Xserver
+
.SH "OPTIONS"
-.LP
.TP
\fB\-n\fR, \fB\-\-nodaemon\fR
-Starts \fBsesman\fR in foreground instead of starting it as a daemon.
+Starts \fBxrdp\-sesman\fR in foreground instead of starting it as a daemon.
.TP
\fB\-k\fR, \fB\-\-kill\fR
-Kills running \fBsesman\fR daemon.
+Kills running \fBxrdp\-sesman\fR daemon.
.TP
\fB\-h\fR, \fB\-\-help\fR
Output help information and exit.
+
.SH "FILES"
-.LP
${SESMAN_BIN_DIR}/sesman
.br
${SESMAN_BIN_DIR}/sesrun
@@ -32,13 +32,16 @@ ${SESMAN_CFG_DIR}/sesman.ini
${SESMAN_LOG_DIR}/sesman.log
.br
${SESMAN_PID_DIR}/sesman.pid
+
.SH "AUTHORS"
-.LP
Jay Sorg <jsorg71@users.sourceforge.net>
.br
Simone Fedele <ilsimo@users.sourceforge.net>
+
.SH "SEE ALSO"
-.LP
-sesman.ini(5) sesrun(8) xrdp(8) xrdp.ini(5)
+.BR sesman.ini (5),
+.BR xrdp\-sesrun (8),
+.BR xrdp (8),
+.BR xrdp.ini (5)
for more info on \fBxrdp\fR see http://xrdp.sf.net
diff --git a/docs/man/xrdp-sesrun.8 b/docs/man/xrdp-sesrun.8
index 5a1b2bdf..c48c7eb5 100644
--- a/docs/man/xrdp-sesrun.8
+++ b/docs/man/xrdp-sesrun.8
@@ -1,47 +1,50 @@
-.TH "sesrun" "8" "0.1.0" "xrdp team" ""
+.TH "xrdp\-sesrun" "8" "0.7.0" "xrdp team" ""
.SH "NAME"
-.LP
-\fBsesrun\fR \- \fBsesman\fR(8) session launcher
+xrdp\-sesrun \- \fBsesman\fR(8) session launcher
+
.SH "SYNTAX"
-.LP
-sesrun <server> <username> <password> <width> <height> <bpp>
+.B xrdp\-sesrun
+.I server username password width height bpp
+
.SH "DESCRIPTION"
-.LP
-\fBsesrun\fR starts a session using \fBsesman\fR(8).
+\fBxrdp\-sesrun\fR starts a session using \fBxrdp\-sesman\fR(8).
.br
This is a tool useful for testing, it simply behaves like xrdp when some user logs in a new session and authenticates, thus starting a new session.
+
.SH "OPTIONS"
-.LP
.TP
-<server>
+.I server
Server on which sesman is running
.TP
-<username>
+.I username
user name of the session being started
.TP
-<password>
+.I password
user password
.TP
-<width>
+.I width
Screen width
.TP
-<height>
+.I height
Screen height
.TP
-<bpp>
+.I bpp
Session color depth
+
.SH "FILES"
-.LP
${SESMAN_BIN_DIR}/sesman
.br
${SESMAN_BIN_DIR}/sesrun
+
.SH "AUTHORS"
-.LP
Jay Sorg <jsorg71@users.sourceforge.net>
.br
Simone Fedele <ilsimo@users.sourceforge.net>
+
.SH "SEE ALSO"
-.LP
-sesman(8) sesman.ini(5) xrdp(8) xrdp.ini(5)
+.BR xrdp\-sesman (8),
+.BR sesman.ini (5),
+.BR xrdp (8),
+.BR xrdp.ini (5)
for more info on \fBxrdp\fR see http://xrdp.sf.net
diff --git a/docs/man/xrdp-sessvc.8 b/docs/man/xrdp-sessvc.8
new file mode 100644
index 00000000..322c968a
--- /dev/null
+++ b/docs/man/xrdp-sessvc.8
@@ -0,0 +1,26 @@
+.TH "xrdp\-sessvc" "8" "0.7.0" "xrdp team" ""
+.SH "NAME"
+xrdp\-sessvc \- \fBxrdp\fR session supervisor
+
+.SH "SYNTAX"
+.B xrdp\-sessman
+.I x_pid wm_pid
+
+.SH "DESCRIPTION"
+\fBxrdp\-sessvc\fR is the \fBxrdp\fR(8) session supervisor, which monitors the running X server and Windows Manager.
+As soon as one of them quits, the other process is terminated as well.
+.br
+This program is only executed internally by \fBxrdp\-sesman\fP(8).
+
+.SH "OPTIONS"
+.TP
+.I x_pid
+The process ID of the forked X server to monitor.
+.TP
+.I wm_pid
+The process ID of the forked Window Manager to monitor.
+
+.SH "SEE ALSO"
+.BR xrdp\-sesrun (8).
+
+for more info on \fBxrdp\fR see http://xrdp.sf.net
diff --git a/docs/man/xrdp-xcon.8 b/docs/man/xrdp-xcon.8
new file mode 100644
index 00000000..9d83b646
--- /dev/null
+++ b/docs/man/xrdp-xcon.8
@@ -0,0 +1,14 @@
+.TH "xrdp-xcon" "8" "0.7.0" "xrdp team"
+.SH NAME
+xrdp\-xcon \- X11 event loop debugging helper for XRDP
+
+.SH SYNOPSIS
+.B xrdp\-xcon
+
+.SH DESCRIPTION
+.PP
+\fBxrdp\-xcon\fP is a X application, which just opens a connection to the X server and polls for events.
+It's pretty useless.
+
+.SH SEE ALSO
+.BR xev (1).
diff --git a/docs/man/xrdp.8 b/docs/man/xrdp.8
index b8e0d7fd..6db90076 100644
--- a/docs/man/xrdp.8
+++ b/docs/man/xrdp.8
@@ -1,19 +1,18 @@
.TH "xrdp" "8" "0.1.0" "xrdp team" ""
.SH "NAME"
-.LP
\fBxrdp\fR \- a Remote Desktop Protocol (RDP) server
+
.SH "SYNTAX"
-.LP
xrdp [ \-\-nodaemon | \-\-kill | \-\-help ]
+
.SH "DESCRIPTION"
-.LP
\fBxrdp\fR is a Remote Desktop Protocol (RDP) Server.
.br
Unlike Windows NT/2000/2003 server, \fBxrdp\fR will not display a Windows desktop but an X window desktop to the user.
It can also be used as a VNC\->RDP bridge.
+
.SH "OPTIONS"
-.LP
.TP
\fB\-n\fR, \fB\-\-nodaemon\fR
Starts \fBxrdp\fR in foreground instead of starting it as a daemon.
@@ -23,8 +22,8 @@ Kills running \fBxrdp\fR daemon.
.TP
\fB\-h\fR, \fB\-\-help\fR
Output help information and exit.
+
.SH "FILES"
-.LP
${XRDP_BIN_DIR}/xrdp
.br
${XRDP_CFG_DIR}/xrdp.ini
@@ -32,13 +31,16 @@ ${XRDP_CFG_DIR}/xrdp.ini
${XRDP_LOG_DIR}/xrdp.log
.br
${XRDP_PID_DIR}/xrdp.pid
+
.SH "AUTHORS"
-.LP
Jay Sorg <jsorg71@users.sourceforge.net>
.br
Simone Fedele <ilsimo@users.sourceforge.net>
+
.SH "SEE ALSO"
-.LP
-xrdp.ini(5) sesman(8) sesman.ini(5) sesrun(8)
+.BR xrdp.ini (5),
+.BR sesman (8),
+.BR sesman.ini (5),
+.BR sesrun (8)
for more info on \fBxrdp\fR see http://xrdp.sf.net
diff --git a/docs/man/xrdp.ini.5 b/docs/man/xrdp.ini.5
index f46b5609..7b32a9f0 100644
--- a/docs/man/xrdp.ini.5
+++ b/docs/man/xrdp.ini.5
@@ -1,99 +1,240 @@
-.\"
-.TH "xrdp.ini" "5" "0.1.0" "xrdp team" ""
+.TH "xrdp.ini" "5" "0.7.0" "xrdp team" ""
.SH "NAME"
-.LP
\fBxrdp.ini\fR \- Configuration file for \fBxrdp\fR(8)
+
.SH "DESCRIPTION"
-.LP
This is the man page for \fBxrdp.ini\fR, \fBxrdp\fR(8) configuration file.
-It is composed by a number of sections, each one composed by a section name, enclosed by square brackets, folowed by a list of \fI<parameter>\fR=\fI<value>\fR lines.
+It is composed by a number of sections, each one composed by a section name, enclosed by square brackets, followed by a list of \fI<parameter>\fR=\fI<value>\fR lines.
+
+\fBxrdp.ini\fR supports the following sections:
+
+.TP
+\fB[Globals]\fP \- sets some global configuration settings for \fBxrdp\fR(8).
+
+.TP
+\fB[Logging]\fP \- logging subsystem parameters
+
+.TP
+\fB[Channels]\fP \- channel subsystem parameters
-\fBxrdp.ini\fR is contains a \fB[Globals]\fR section, which sets some global configuration settings for \fBxrdp\fR(8), and one or more "connection" sections which contain the info on which services \fBxrdp\fR(8) can connect to.
+.TP
+\fI[Connection]\fP \- contain the info on which services \fBxrdp\fR(8) can connect to.
.LP
All options and values (except for file names and paths) are case insensitive, and are described in detail below.
-.SH "GLOBALS"
-.LP
-.TP
+.SH "GLOBALS"
The options to be specified in the \fB[Globals]\fR section are the following:
-.br
-.TP
+.TP
+\fBaddress\fP=\fIip address\fP
+Specifies xrdp listening address. Default is 0.0.0.0 (all interfaces)
+
+.TP
+\fBautorun\fP=\fIsession_name\fP
+Automatically run the connection specified by \fIsession_name\fP, which must match a section as described below.
+By default a drop-down list with all available connections is shown.
+A connection can also be chosen by the connecting client by setting the \fBLOGIN DOMAIN\fP to a valid \fIsession name\fP.
+
+.TP
\fBbitmap_cache\fR=\fI[0|1]\fR
-If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables bitmap caching in \fBxrdp\fR(8)
-.br
+If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables bitmap caching in \fBxrdp\fR(8).
-.TP
+.TP
\fBbitmap_compression\fR=\fI[0|1]\fR
-If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables bitmap compression in \fBxrdp\fR(8)
-.SH "CONNECTIONS"
-.LP
-
+If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables bitmap compression in \fBxrdp\fR(8).
+
+.TP
+\fBbulk_compression\fP=\fI[0|1]\fP
+If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables compression of bulk data in \fBxrdp\fR(8).
+
+.TP
+\fBchannel_code\fP=\fI[0|1]\fP
+If set to \fB0\fR, \fBfalse\fR or \fBno\fR this option disables all channels \fBxrdp\fR(8).
+See section \fBCHANNELS\fP below for more fine grained options.
+
+.TP
+\fBcrypt_level\fP=\fIlow|medium|high\fP
+.\" <http://blogs.msdn.com/b/openspecification/archive/2011/12/08/encryption-negotiation-in-rdp-connection.aspx>
+RDP connection are controlled by two encryption settings: \fIEncryption Level\fP and \fIEncryption Method\fP.
+The only supported \fIEncryption Method\fP is \fB40BIT_ENCRYPTION\fP, \fB128BIT_ENCRYPTION\fP and \fB56BIT_ENCRYPTION\fP are currently not supported.
+This option controls the \fIEncryption Level\fP:
+.RS 8
+.TP
+.B low
+All data sent from the client to the server is protected by encryption based on the maximum key strength supported by the client.
+.I This is the only level that the traffic sent by the server to client is not encrypted.
+.TP
+.B medium
+All data sent between the client and the server is protected by encryption based on the maximum key strength supported by the client.
+.TP
+.B high
+All data sent between the client and server is protected by encryption based on the server's maximum key strength.
+.RE
+
+.TP
+\fBfork\fP=\fI[0|1]\fP
+If set to \fB1\fR, \fBtrue\fR or \fByes\fR for each incoming connection \fBxrdp\fR(8) forks a sub-process instead of using threads.
+
+.TP
+\fBhidelogwindow\fP=\fI[0|1]\fP
+If set to \fB1\fP, \fBtrue\fP or \fByes\fP, \fBxrdp\fP will not show a window for log messages.
+
+.TP
+\fBmax_bpp\fP=\fI[8|15|16|24]\fP
+Limit the color depth by specifying the maximum number of bits per pixel.
+
+.TP
+\fBport\fP=\fIport\fP
+Specify TCP port to listen on for incoming connections.
+The default for RDP is \fB3389\fP.
+
+.TP
+\fBtcp_keepalive\fP=\fI[yes|no]\fP
+Regulate if the listening socket uses socket option \fBSO_KEEPALIVE\fP.
+If set to \fB1\fP, \fBtrue\fP or \fByes\fP and the network connection disappears without closing messages, the connection will be closed.
+
+.TP
+\fBtcp_nodelay\fP=\fI[yes|no]\fP
+Regulate if the listening socket uses socket option \fBTCP_NODELAY\fP.
+If set to \fB1\fP, \fBtrue\fP or \fByes\fP, no buffering will be performed in the TCP stack.
+
+.TP
+\fBblack\fP=\fI000000\fP
+.TP
+\fBgrey\fP=\fIc0c0c0\fP
+.TP
+\fBdark_grey\fP=\fI808080\fP
+.TP
+\fBblue\fP=\fI0000ff\fP
+.TP
+\fBdark_blue\fP=\fI00007f\fP
+.TP
+\fBwhite\fP=\fIffffff\fP
+.TP
+\fBred\fP=\fIff0000\fP
+.TP
+\fBgreen\fP=\fI00ff00\fP
+.TP
+\fBbackground\fP=\fI000000\fP
+These options override the colors used internally by \fBxrdp\fP(8) to draw the login and log windows.
+Colors are defined using a hexadecimal (hex) notation for the combination of Red, Green, and Blue color values (RGB).
+The lowest value that can be given to one of the light sources is 0 (hex 00).
+The highest value is 255 (hex FF).
+
+.SH "LOGGING"
+The following parameters can be used in the \fB[logging]\fR section:
+
+.TP
+\fBLogFile\fR=\fI${SESMAN_LOG_DIR}/sesman.log\fR
+This options contains the path to logfile. It can be either absolute or relative, and the default is \fI${SESMAN_LOG_DIR}/sesman.log\fR
+
+.TP
+\fBLogLevel\fR=\fIlevel\fR
+This option can have one of the following values:
+
+\fBCORE\fR or \fB0\fR \- Log only core messages. these messages are _always_ logged, regardless the logging level selected.
+
+\fBERROR\fR or \fB1\fR \- Log only error messages
+
+\fBWARNING\fR, \fBWARN\fR or \fB2\fR \- Logs warnings and error messages
+
+\fBINFO\fR or \fB3\fR \- Logs errors, warnings and informational messages
+
+\fBDEBUG\fR or \fB4\fR \- Log everything. If \fBsesman\fR is compiled in debug mode, this options will output many more low\-level message, useful for developers
+
+.TP
+\fBEnableSyslog\fR=\fI[0|1]\fR
+If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables logging to syslog. Otherwise syslog is disabled.
+
+.TP
+\fBSyslogLevel\fR=\fIlevel\fR
+This option sets the logging level for syslog. It can have the same values of \fBLogLevel\fR. If \fBSyslogLevel\fR is greater than \fBLogLevel\fR, its value is lowered to that of \fBLogLevel\fR.
+
+.SH "CHANNELS"
+The Remote Desktop Protocol supports several channels, which are used to transfer additional data like sound, clipboard data and others.
+Channel names not listed here will be blocked by \fBxrdp\fP.
+Not all channels are supported in all cases, so setting a value to \fItrue\fP is a pre-requisite, but does not force it's use.
+.br
+Channels can also be enabled or disabled on a per connection basis by prefixing each setting with \fBchannel.\fP in the channel section.
+
+.TP
+\fBrdpdr\fP=\fI[0|1]\fP
+If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for device re-direction is allowed.
+
+.TP
+\fBrdpsnd\fP=\fI[0|1]\fP
+If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for sound is allowed.
+
+.TP
+\fBdrdynvc\fP=\fI[0|1]\fP
+If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel to initiate additional dynamic virtual channels is allowed.
+
+.TP
+\fBcliprdr\fP=\fI[0|1]\fP
+If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for clipboard re-direction is allowed.
+
+.TP
+\fBrail\fP=\fI[0|1]\fP
+If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for remote applications integrated locally (RAIL) is allowed.
+
+.TP
+\fBxrdpvr\fP=\fI[0|1]\fP
+If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for XRDP Video streaming is allowed.
-.TP
+.SH "CONNECTIONS"
A connection section is made of a section name, enclosed in square brackets, and the following entries:
-.br
.TP
\fBname\fR=\fI<session name>\fR
The name displayed in \fBxrdp\fR(8) login window's combo box.
-.br
.TP
\fBlib\fR=\fI../vnc/libvnc.so\fR
Sets the library to be used with this connection.
-.br
.TP
\fBusername\fR=\fI<username>\fR|\fIask\fR
Specifies the username used for authenticating in the connection.
If set to \fIask\fR, user name should be provided in the login window.
-.br
.TP
\fBpassword\fR=\fI<password>\fR|\fIask\fR
Specifies the password used for authenticating in the connection.
If set to \fIask\fR, password should be provided in the login window.
-.br
.TP
\fBip\fR=\fI127.0.0.1\fR
Specifies the ip address of the host to connect to.
-.br
.TP
\fBport\fR=\fI<number>\fR|\fI\-1\fR
Specifies the port number to connect to. If set to \fI\-1\fR, the default port for the specified library is used.
+
.SH "EXAMPLES"
-.LP
This is an example \fBxrdp.ini\fR:
+.nf
[Globals]
-.br
bitmap_cache=yes
-.br
bitmap_compression=yes
-
[vnc1]
-.br
name=sesman
-.br
lib=../vnc/libvnc.so
-.br
username=ask
-.br
password=ask
-.br
ip=127.0.0.1
-.br
port=\-1
+.fi
+
.SH "FILES"
-.LP
${XRDP_CFG_DIR}/xrdp.ini
+
.SH "SEE ALSO"
-.LP
-xrdp(8) sesman(8) sesrun(8) sesman.ini(5)
+.BR xrdp (8),
+.BR sesman (8),
+.BR sesrun (8),
+.BR sesman.ini (5)
for more info on \fBxrdp\fR see http://xrdp.sf.net
diff --git a/faq-general.txt b/faq-general.txt
index e1905cb9..e63804cb 100644
--- a/faq-general.txt
+++ b/faq-general.txt
@@ -5,12 +5,18 @@ Q. What is RDP?
A. RDP stands for Remote Desktop Protocol. Its the protocol used by Windows
terminal servers to talk to the terminal server clients.
+
Q. What is xrdp?
A. xrdp, usually spell lower case, is as open source implementation of the RDP
protocol.
+
Q. I can't get it to compile in Ubuntu. What can I do?
A. See faq-compile.txt.
+
+Q. Can I use LDAP?
+
+A. Yes, xrdp uses PAM and thus can be configured to use LDAP for authentication.
diff --git a/sesman/chansrv/Makefile.am b/sesman/chansrv/Makefile.am
index d200509a..89753430 100644
--- a/sesman/chansrv/Makefile.am
+++ b/sesman/chansrv/Makefile.am
@@ -1,4 +1,14 @@
-EXTRA_DIST = chansrv.h clipboard.h devredir.h sound.h
+EXTRA_DIST = \
+ chansrv.h \
+ chansrv_fuse.h \
+ clipboard.h \
+ clipboard_common.h \
+ clipboard_file.h \
+ devredir.h \
+ drdynvc.h \
+ rail.h \
+ sound.h \
+ xcommon.h
EXTRA_DEFINES =
EXTRA_INCLUDES =
diff --git a/sesman/tools/Makefile.am b/sesman/tools/Makefile.am
index ab3612d0..140c6820 100644
--- a/sesman/tools/Makefile.am
+++ b/sesman/tools/Makefile.am
@@ -13,9 +13,11 @@ INCLUDES = \
bin_PROGRAMS = \
xrdp-sesrun \
- xrdp-sestest \
xrdp-sesadmin \
- xrdp-dis \
+ xrdp-dis
+
+noinst_PROGRAMS = \
+ xrdp-sestest \
xrdp-xcon
xrdp_sesrun_SOURCES = \
diff --git a/xorg/X11R7.6/buildx.sh b/xorg/X11R7.6/buildx.sh
index 6108707a..3b2bad78 100755
--- a/xorg/X11R7.6/buildx.sh
+++ b/xorg/X11R7.6/buildx.sh
@@ -25,14 +25,13 @@
download_file()
{
+ local file url status
file=$1
# if we already have the file, don't download it
- if [ -r downloads/$file ]; then
- return 0
- fi
-
- cd downloads
+ if [ -r downloads/$file ]; then
+ return 0
+ fi
echo "downloading file $file"
@@ -142,6 +141,7 @@ download_file()
remove_modules()
{
+ local mod_file mod_dir mod_args
if [ -d cookies ]; then
rm cookies/*
fi
@@ -153,21 +153,17 @@ remove_modules()
exit 0
fi
- cd build_dir
-
- while read line
+ while IFS=: read mod_file mod_dir mod_args
do
- mod_dir=`echo $line | cut -d':' -f2`
- if [ -d $mod_dir ]; then
- rm -rf $mod_dir
+ if [ -d build_dir/$mod_dir ]; then
+ rm -rf build_dir/$mod_dir
fi
done < ../$data_file
-
- cd ..
}
extract_it()
{
+ local mod_file mod_name mod_args comp
mod_file=$1
mod_name=$2
mod_args=$3
@@ -177,8 +173,8 @@ extract_it()
fi
# download file
- download_file $mod_file
- if [ $? -ne 0 ]; then
+ if ! download_file $mod_file
+ then
echo ""
echo "failed to download $mod_file - aborting build"
echo ""
@@ -189,13 +185,15 @@ extract_it()
# if pkg has not yet been extracted, do so now
if [ ! -d $mod_name ]; then
- echo $mod_file | grep -q tar.bz2
- if [ $? -eq 0 ]; then
- tar xjf ../downloads/$mod_file > /dev/null 2>&1
- else
- tar xzf ../downloads/$mod_file > /dev/null 2>&1
- fi
- if [ $? -ne 0 ]; then
+ case "$mod_file" in
+ *.tar.bz2) comp=j ;;
+ *.tar.gz) comp=z ;;
+ *.tar.xz) comp=J ;;
+ *.tar) comp= ;;
+ *) echo "unknown compressed module $mod_name" ; exit 1 ;;
+ esac
+ if ! tar x${comp}f ../downloads/$mod_file > /dev/null
+ then
echo "error extracting module $mod_name"
exit 1
fi
@@ -205,13 +203,13 @@ extract_it()
cd $mod_name
# check for patches
if [ -e ../../$mod_name.patch ]; then
- patch -p1 < ../../$mod_name.patch
+ patch -p1 < ../../$mod_name.patch
fi
# now configure
echo "executing ./configure --prefix=$PREFIX_DIR $mod_args"
- ./configure --prefix=$PREFIX_DIR $mod_args
- if [ $? -ne 0 ]; then
- echo "configuration failed for module $mn"
+ if ! ./configure --prefix=$PREFIX_DIR $mod_args
+ then
+ echo "configuration failed for module $mod_name"
exit 1
fi
@@ -222,6 +220,7 @@ extract_it()
make_it()
{
+ local mod_file mod_name mod_args
mod_file=$1
mod_name=$2
mod_args=$3
@@ -238,8 +237,8 @@ make_it()
echo "*** processing module $mod_name ($count of $num_modules) ***"
echo ""
- extract_it $mod_file $mod_name "$mod_args"
- if [ $? -ne 0 ]; then
+ if ! extract_it $mod_file $mod_name "$mod_args"
+ then
echo ""
echo "extract failed for module $mod_name"
echo ""
@@ -248,8 +247,8 @@ make_it()
# make module
if [ ! -e cookies/$mod_name.made ]; then
- (cd build_dir/$mod_name ; make)
- if [ $? -ne 0 ]; then
+ if ! make -C build_dir/$mod_name
+ then
echo ""
echo "make failed for module $mod_name"
echo ""
@@ -259,8 +258,8 @@ make_it()
fi
# install module
- (cd build_dir/$mod_name ; make install)
- if [ $? -ne 0 ]; then
+ if ! make -C build_dir/$mod_name install
+ then
echo ""
echo "make install failed for module $mod_name"
echo ""
@@ -270,9 +269,9 @@ make_it()
# special case after installing python make this sym link
# so Mesa builds using this python version
case "$mod_name" in
- *Python-2*)
- (cd build_dir/$mod_name ; ln -s python $PREFIX_DIR/bin/python2)
- ;;
+ *Python-2*)
+ ln -s python build_dir/$mod_name/$PREFIX_DIR/bin/python2
+ ;;
esac
touch cookies/$mod_name.installed
@@ -316,9 +315,9 @@ else
fi
if ! test -d $PREFIX_DIR; then
- echo "dir does not exit, creating [$PREFIX_DIR]"
- mkdir $PREFIX_DIR
- if ! test $? -eq 0; then
+ echo "dir does not exist, creating [$PREFIX_DIR]"
+ if ! mkdir $PREFIX_DIR
+ then
echo "mkdir failed [$PREFIX_DIR]"
exit 0
fi
@@ -333,8 +332,8 @@ export CFLAGS="-I$PREFIX_DIR/include -fPIC -O2"
# prefix dir must exist...
if [ ! -d $PREFIX_DIR ]; then
- mkdir -p $PREFIX_DIR
- if [ $? -ne 0 ]; then
+ if ! mkdir -p $PREFIX_DIR
+ then
echo "$PREFIX_DIR does not exist; failed to create it - cannot continue"
exit 1
fi
@@ -348,8 +347,8 @@ fi
# create a downloads dir
if [ ! -d downloads ]; then
- mkdir downloads
- if [ $? -ne 0 ]; then
+ if ! mkdir downloads
+ then
echo "error creating downloads directory"
exit 1
fi
@@ -357,8 +356,8 @@ fi
# this is where we do the actual build
if [ ! -d build_dir ]; then
- mkdir build_dir
- if [ $? -ne 0 ]; then
+ if ! mkdir build_dir
+ then
echo "error creating build_dir directory"
exit 1
fi
@@ -366,22 +365,18 @@ fi
# this is where we store cookie files
if [ ! -d cookies ]; then
- mkdir cookies
- if [ $? -ne 0 ]; then
+ if ! mkdir cookies
+ then
echo "error creating cookies directory"
exit 1
fi
fi
-while read line
+while IFS=: read mod_file mod_dir mod_args
do
- mod_file=`echo $line | cut -d':' -f1`
- mod_dir=`echo $line | cut -d':' -f2`
- mod_args=`echo $line | cut -d':' -f3`
mod_args=`eval echo $mod_args`
make_it $mod_file $mod_dir "$mod_args"
-
done < $data_file
echo "build for X OK"
@@ -389,9 +384,8 @@ echo "build for X OK"
X11RDPBASE=$PREFIX_DIR
export X11RDPBASE
-cd rdp
-make
-if [ $? -ne 0 ]; then
+if ! make -C rdp
+then
echo "error building rdp"
exit 1
fi
@@ -401,10 +395,10 @@ strip X11rdp
cp X11rdp $X11RDPBASE/bin
if [ "$2" = "drop" ]; then
- echo ""
- echo "dropping you in dir, type exit to get out"
- bash
- exit 1
+ echo ""
+ echo "dropping you in dir, type exit to get out"
+ bash
+ exit 1
fi
echo "All done"
diff --git a/xrdp/xrdp.ini b/xrdp/xrdp.ini
index 7b2e33a8..bdf1b177 100644
--- a/xrdp/xrdp.ini
+++ b/xrdp/xrdp.ini
@@ -36,7 +36,7 @@ SyslogLevel=DEBUG
# LogLevel and SysLogLevel could by any of: core, error, warning, info or debug
[channels]
-# Channel names not listed here will be blocket by XRDP.
+# Channel names not listed here will be blocked by XRDP.
# You can block any channel by setting its value to false.
# IMPORTANT! All channels are not supported in all use
# cases even if you set all values to true.
diff --git a/xrdp/xrdp_wm.c b/xrdp/xrdp_wm.c
index 4badf44d..bfcc7548 100644
--- a/xrdp/xrdp_wm.c
+++ b/xrdp/xrdp_wm.c
@@ -573,7 +573,7 @@ xrdp_wm_init(struct xrdp_wm *self)
q = (char *)list_get_item(names, index);
if ((g_strncasecmp("globals", q, 8) != 0) &&
(g_strncasecmp("Logging", q, 8) != 0) &&
- (g_strncasecmp("channels", q, 8) != 0))
+ (g_strncasecmp("channels", q, 9) != 0))
{
g_strncpy(section_name, q, 255);
break;