Conflicts:
	xorgxrdp
This commit is contained in:
speidy 2016-12-22 12:04:29 -05:00
commit 93c55e58a8
295 changed files with 15587 additions and 9269 deletions

24
.gitignore vendored
View File

@ -1,11 +1,12 @@
*~
*.a
aclocal.m4
AUTHORS
autom4te.cache/
ChangeLog
compile
config_ac.h
config_ac-h.in
config.c
config.guess
config.log
config.status
@ -13,7 +14,10 @@ config.sub
configure
depcomp
.deps/
genkeymap/xrdp-genkeymap
install-sh
instfiles/pam.d/xrdp-sesman
keygen/xrdp-keygen
*.la
.libs
libtool
@ -22,17 +26,17 @@ ltmain.sh
Makefile
Makefile.in
missing
mkinstalldirs
NEWS
*.o
README
sesman/chansrv/xrdp-chansrv
sesman/sessvc/xrdp-sessvc
sesman/tools/xrdp-dis
sesman/tools/xrdp-sesadmin
sesman/tools/xrdp-sesrun
sesman/tools/xrdp-sestest
sesman/tools/xrdp-xcon
sesman/xrdp-sesman
stamp-h1
xrdp-chansrv
xrdp-genkeymap
xrdp-keygen
xrdp-sesadmin
xrdp-sesman
xrdp-sesrun
xrdp-sessvc
xrdp-sestest
xrdp-dis
xrdp/xrdp

10
.gitmodules vendored
View File

@ -1,6 +1,8 @@
[submodule "librfxcodec"]
path = librfxcodec
url = git://github.com/neutrinolabs/librfxcodec
[submodule "xorgxrdp"]
path = xorgxrdp
url = git://github.com/neutrinolabs/xorgxrdp
url = https://github.com/neutrinolabs/librfxcodec.git
[submodule "libpainter"]
path = libpainter
url = https://github.com/neutrinolabs/libpainter.git
branch = devel

40
.travis.yml Normal file
View File

@ -0,0 +1,40 @@
sudo: false # use new container
language: c
branches:
except: /^(gh-pages|v[0-9]\..*)/
compiler:
- clang
- gcc
- g++
addons:
apt:
packages:
# xrdp
- libpam0g-dev
- libjpeg-dev
- libfuse-dev
- libmp3lame-dev
- libx11-dev
- libxrandr-dev
- libpixman-1-dev
- nasm
# x11rdp
#- flex
#- bison
#- libxml2-dev
#- intltool
#- xsltproc
#- xutils-dev
#- python-libxml2
#- g++
#- xutils
script:
# disable librfxcodec as no remotefx for v0.9.1 release
#- (cd librfxcodec && ./bootstrap && ./configure && make)
- (./bootstrap && ./configure --enable-ipv6 --enable-jpeg --enable-fuse --enable-mp3lame --enable-pixman && make && make distcheck)
# disable x11rdp build as it takes long time and it is to be deprecated
#- (cd xorg/X11R7.6 && ./buildx.sh default)

Binary file not shown.

View File

@ -1,4 +1,27 @@
EXTRA_DIST = bootstrap COPYING design.txt faq-compile.txt faq-general.txt file-loc.txt install.txt prog_std.txt readme.txt
ACLOCAL_AMFLAGS = -I m4
AM_DISTCHECK_CONFIGURE_FLAGS = --without-systemdsystemunitdir
EXTRA_DIST = \
COPYING \
README.md \
NEWS.md \
astyle_config.as \
bootstrap \
coding_style.md \
description-pak \
design.txt \
faq-compile.txt \
faq-general.txt \
file-loc.txt \
fontdump \
install.txt \
m4 \
postinstall-pak \
readme.txt \
tcutils \
tests \
vrplayer \
xorg
if XRDP_NEUTRINORDP
NEUTRINORDPDIR = neutrinordp
@ -12,6 +35,18 @@ else
XRDPVRDIR =
endif
if XRDP_PAINTER
PAINTERDIR = libpainter
else
PAINTERDIR =
endif
if XRDP_RFXCODEC
RFXCODECDIR = librfxcodec
else
RFXCODECDIR =
endif
SUBDIRS = \
common \
vnc \
@ -20,6 +55,8 @@ SUBDIRS = \
mc \
$(NEUTRINORDPDIR) \
libxrdp \
$(PAINTERDIR) \
$(RFXCODECDIR) \
xrdp \
sesman \
keygen \
@ -27,4 +64,5 @@ SUBDIRS = \
instfiles \
genkeymap \
xrdpapi \
pkgconfig \
$(XRDPVRDIR)

25
NEWS.md Normal file
View File

@ -0,0 +1,25 @@
# Release notes for xrdp v0.9.1 (2016/12/21)
## New features
* New xorgxrdp backend using existing Xorg with additional modules
* Improvements to X11rdp backend
* Support for IPv6 (disabled by default)
* Initial support for RemoteFX Codec (disabled by default)
* Support for TLS security layer (preferred over RDP layer if supported by the client)
* Support for disabling deprecated SSLv3 protocol and for selecting custom cipher suites in xrdp.ini
* Support for bidirectional fastpath (enabled in both directions by default)
* Support clients that don't support drawing orders, such as MS RDP client for Android, ChromeRDP (disabled by default)
* More configurable login screen
* Support for new virtual channels:
* rdpdr: device redirection
* rdpsnd: audio output
* cliprdr: clipboard
* xrdpvr: xrdp video redirection channel (can be used along with NeutrinoRDP client)
* Support for disabling virtual channels globally or by session type
* Allow to specify the path for backends (Xorg, X11rdp, Xvnc)
* Added files for systemd support
* Multi-monitor support
* xrdp-chansrv stroes logs in `${XDG_DATA_HOME}/xrdp` now
## Security fixes
* User's password could be recovered from the Xvnc password file
* X11 authentication was not used

126
README.md Normal file
View File

@ -0,0 +1,126 @@
[![Build Status](https://travis-ci.org/neutrinolabs/xrdp.svg?branch=devel)](https://travis-ci.org/neutrinolabs/xrdp)
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/neutrinolabs/xrdp)
![Apache-License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)
*Current Version:* 0.9.1
# xrdp - an open source RDP server
## Overview
**xrdp** provides a graphical login to remote machines using Microsoft
Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of
RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop
Client (for Windows, Mac OS, iOS and Android).
RDP transport is encrypted using TLS by default.
![demo](https://github.com/neutrinolabs/xrdp/raw/gh-pages/xrdp_demo.gif)
## Features
### Remote Desktop Access
* Connect to a Linux desktop using RDP from anywhere (requires
[xorgxrdp](https://github.com/neutrinolabs/xorgxrdp) Xorg module)
* Reconnect to an existing session
* Session resizing
* RDP/VNC proxy (connect to another RDP/VNC server via xrdp)
### Access to Remote Resources
* two-way clipboard transfer (text, bitmap, file)
* audio redirection
* drive redirection (mount local client drives on remote machine)
## Quick Start
Most Linux distributions should distribute the latest release of xrdp in their
repository. You would need xrdp and xorgxrdp packages for the best
experience. It is recommended that xrdp depends on xorgxrdp, so it should
be sufficient to install xrdp. If xorgxrdp is not provided, use Xvnc
server.
### Ubuntu / Debian
```bash
apt-get install xrdp
```
### RedHat / CentOS / Fedora
```bash
yum install xrdp
```
## Environment
**xrdp** primarily targets to GNU/Linux. Tested on x86, x86_64, SPARC and
PowerPC.
xorgxrdp and RemoteFX Codec have special optimization for x86 and x86_64 using
SIMD instructions.
FreeBSD is not a primary target of xrdp. It is working on FreeBSD except
for the drive redirection feature.
Other operating systems such as Mac OS are not supported so far, but we
welcome your contributions.
## Compiling
See also https://github.com/neutrinolabs/xrdp/wiki#building-from-sources
### Prerequisites
To compile xrdp from the packaged sources, you need basic build tools - a
compiler (**gcc** or **clang**) and the **make** program. Additionally,
you would need **openssl-devel**, **pam-devel**, **libX11-devel**,
**libXfixes-devel**, **libXrandr-devel**. More additional software would
be needed depending on your configuration.
To compile xrdp from a checked out git repository, you would additionally
need **autoconf**, **automake**, **libtool** and **pkgconfig**.
### Get the source and build it
If compiling from the packaged source, unpack the tarball and change to the
resulting directory.
If compiling from a checked out repository, please make sure you've got the submodules
cloned too (use `git clone --recursive https://github.com/neutrinolabs/xrdp`)
Then run following commands to compile and install xrdp:
```bash
./bootstrap
./configure
make
sudo make install
```
## Directory Structure
```
xrdp
├── common ------ common code
├── docs -------- documentation
├── fontdump ---- font dump for Windows
├── genkeymap --- keymap generator
├── instfiles --- installable data file
├── keygen ------ xrdp RSA key pair generator
├── libpainter -- painter library
├── librfxcodec - RFX codec library
├── libxrdp ----- core RDP protocol implementation
├── m4 ---------- Autoconf macros
├── mc ---------- media center module
├── neutrinordp - RDP client module for proxying RDP connections using NeutrinoRDP
├── pkgconfig --- pkg-config configuration
├── rdp --------- RDP client module for connecting to another RDP server
├── sesman ------ session manager for xrdp
├── tcutils ----- QT based utility program for thin clients
├── tests ------- tests for the code
├── vnc --------- VNC client module for xrdp
├── vrplayer ---- QT player redirecting video/audio to clients over xrdpvr channel
├── xorg -------- X11rdp, an Xorg backend for xrdp
├── xrdp -------- main server code
├── xrdpapi ----- virtual channel API
├── xrdpvr ------ API for playing media over RDP
└── xup --------- X11rdp and xorgxrdp client module
```

View File

@ -14,7 +14,7 @@ then
exit 1
fi
which libtool
which libtool || which libtoolize
if ! test $? -eq 0
then
echo "error, install libtool"
@ -28,10 +28,4 @@ then
exit 1
fi
touch configure.ac
touch NEWS
touch AUTHORS
touch README
touch ChangeLog
ln -s ../config.c $PWD/sesman/tools/config.c
autoreconf -fvi

210
coding_style.md Normal file
View File

@ -0,0 +1,210 @@
XRdp Coding Style
=================
The coding style used by XRdp is described below.
The XRdp project uses astyle (artistic style) to format the code. Astyle
requires a configuration file that describes how you want your code
formatted. This file is present in the XRdp root directory and is named
`astyle_config.as`.
Here is how we run the astyle command:
astyle --options=/path/to/file/astyle_config.as "*.c"
This coding style is a work in progress and is still evolving.
Language Standard
-----------------
Try to make all code compile with both C and C++ compiler. C++ is more
strict, which makes the code safer.
Indentation
-----------
* 4 spaces per indent
* No tabs for any indents
if (fd < 0)
{
return -1;
}
Line wrapping
-------------
* Keep lines not longer than 80 chars
* Align wrapped argument to the first argument
log_message("connection aborted: error %d",
ret);
Variable names
--------------
* Use lowercase with underscores as needed
* Don't use camelCase
* Preprocessor constants should be uppercase
#define BUF_SIZE 1024
int fd;
int bytes_in_stream;
Variable declaration
--------------------
* Each variable is declared on a separate line
int i;
int j;
Whitespace
----------
* Use blank lines to group statements
* Use at most one empty line between statements
* For pointers and references, use a single space before * or & but not after
* Use one space after a cast
* No space before square brackets
char *cptr;
int *iptr;
cptr = (char *) malloc(1024);
write(fd, &buf[12], 16);
Function declarations
---------------------
* Use newline before function name
static int
value_ok(int val)
{
return (val >= 0);
}
Braces
------
* Opening brace is always on a separate line
* Align braces with the line preceding the opening brace
struct stream
{
int flags;
char *data;
};
void
process_data(struct stream *s)
{
if (stream == NULL)
{
return;
}
}
`if` statements
---------------
* Always use braces
* Put both braces on separate lines
if (val <= 0xff)
{
out_uint8(s, val);
}
else if (val <= 0xffff)
{
out_uint16_le(s, val);
}
else
{
out_uint32_le(s, val);
}
`for` statements
----------------
* Always use braces
* Put both braces on separate lines
for (i = 0; i < 10; i++)
{
printf("i = %d\n", i);
}
`while` and `do while` statements
---------------------------------
* Always use braces
* `while` after the closing brace is on the same line
while (cptr)
{
cptr—;
}
do
{
cptr--;
} while (cptr);
`switch` statements
-------------------
* Indent `case` once
* Indent statements under `case` one more time
* Put both braces on separate lines
switch (cmd)
{
case READ:
read(fd, buf, 1024);
break;
default:
printf("bad cmd\n");
}
Comments
--------
Use /* */ for comments
Don't use //

View File

@ -1,47 +1,57 @@
EXTRA_DIST = \
arch.h \
d3des.h \
defines.h \
file.h \
file_loc.h \
list.h \
list16.h \
fifo.h \
log.h \
os_calls.h \
os_calls.h \
parse.h \
rail.h \
ssl_calls.h \
thread_calls.h \
trans.h \
if XRDP_PIXMAN
PIXMAN_SOURCES =
else
PIXMAN_SOURCES = pixman-region16.c pixman-region.h
endif
EXTRA_DIST = pixman-region.c
include_HEADERS = \
xrdp_client_info.h \
xrdp_constants.h \
xrdp_rail.h
xrdp_rail.h
AM_CFLAGS = \
AM_CPPFLAGS = \
-DXRDP_CFG_PATH=\"${sysconfdir}/xrdp\" \
-DXRDP_SBIN_PATH=\"${sbindir}\" \
-DXRDP_SHARE_PATH=\"${datadir}/xrdp\" \
-DXRDP_PID_PATH=\"${localstatedir}/run\" \
-DXRDP_LOG_PATH=\"${localstatedir}/log\"
lib_LTLIBRARIES = \
AM_CFLAGS = $(OPENSSL_CFLAGS)
module_LTLIBRARIES = \
libcommon.la
libcommon_la_SOURCES = \
d3des.c \
file.c \
list.c \
list16.c \
arch.h \
crc16.h \
defines.h \
fifo.c \
fifo.h \
file.c \
file.h \
file_loc.h \
list.c \
list.h \
list16.c \
list16.h \
log.c \
log.h \
os_calls.c \
os_calls.h \
os_calls.h \
parse.h \
rail.h \
ssl_calls.c \
ssl_calls.h \
thread_calls.c \
trans.c
thread_calls.h \
trans.c \
trans.h \
$(PIXMAN_SOURCES)
libcommon_la_LIBADD = \
-lcrypto \
-lssl \
-lpthread
-lpthread \
$(OPENSSL_LIBS) \
$(DLOPEN_LIBS)

View File

@ -19,10 +19,14 @@
#if !defined(ARCH_H)
#define ARCH_H
#if defined(HAVE_CONFIG_H)
#include "config_ac.h"
#endif
/* you can define L_ENDIAN or B_ENDIAN and NEED_ALIGN or NO_NEED_ALIGN
in the makefile to override */
/* check endianess */
/* check endianness */
#if !(defined(L_ENDIAN) || defined(B_ENDIAN))
#if !defined(__BYTE_ORDER) && defined(__linux__)
#include <endian.h>
@ -109,7 +113,6 @@ typedef __int64 tbus;
#else
typedef long tbus;
#endif
typedef tbus thandle;
typedef tbus tintptr;
/* wide char, socket */
#if defined(_WIN32)
@ -125,4 +128,22 @@ typedef signed long long tsi64;
#endif
#endif /* DEFINED_Ts */
/* format string verification */
#if defined(HAVE_FUNC_ATTRIBUTE_FORMAT)
#define printflike(arg_format, arg_first_check) \
__attribute__((__format__(__printf__, arg_format, arg_first_check)))
#else
#define printflike(arg_format, arg_first_check)
#endif
/* module interface */
#ifdef __cplusplus
extern "C" {
#endif
tintptr mod_init();
int mod_exit(tintptr);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,510 +0,0 @@
/*
* This is D3DES (V5.09) by Richard Outerbridge with the double and
* triple-length support removed for use in VNC. Also the bytebit[] array
* has been reversed so that the most significant bit in each byte of the
* key is ignored, not the least significant.
*
* These changes are:
* Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
/* D3DES (V5.09) -
*
* A portable, public domain, version of the Data Encryption Standard.
*
* Written with Symantec's THINK (Lightspeed) C by Richard Outerbridge.
* Thanks to: Dan Hoey for his excellent Initial and Inverse permutation
* code; Jim Gillogly & Phil Karn for the DES key schedule code; Dennis
* Ferguson, Eric Young and Dana How for comparing notes; and Ray Lau,
* for humouring me on.
*
* Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge.
* (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992.
*/
#include "d3des.h"
static void scrunch(unsigned char *, unsigned long *);
static void unscrun(unsigned long *, unsigned char *);
static void desfunc(unsigned long *, unsigned long *);
static void cookey(unsigned long *);
static unsigned long KnL[32] = { 0L };
/*
static unsigned long KnR[32] = { 0L };
static unsigned long Kn3[32] = { 0L };
static unsigned char Df_Key[24] = {
0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,
0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67 };
*/
static unsigned short bytebit[8] =
{
01, 02, 04, 010, 020, 040, 0100, 0200
};
static unsigned long bigbyte[24] =
{
0x800000L, 0x400000L, 0x200000L, 0x100000L,
0x80000L, 0x40000L, 0x20000L, 0x10000L,
0x8000L, 0x4000L, 0x2000L, 0x1000L,
0x800L, 0x400L, 0x200L, 0x100L,
0x80L, 0x40L, 0x20L, 0x10L,
0x8L, 0x4L, 0x2L, 0x1L
};
/* Use the key schedule specified in the Standard (ANSI X3.92-1981). */
static unsigned char pc1[56] =
{
56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17,
9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35,
62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21,
13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3
};
static unsigned char totrot[16] =
{
1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28
};
static unsigned char pc2[48] =
{
13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9,
22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1,
40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47,
43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31
};
/* Thanks to James Gillogly & Phil Karn! */
void rfbDesKey(unsigned char *key, int edf)
{
register int i, j, l, m, n;
unsigned char pc1m[56], pcr[56];
unsigned long kn[32];
for ( j = 0; j < 56; j++ )
{
l = pc1[j];
m = l & 07;
pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0;
}
for ( i = 0; i < 16; i++ )
{
if ( edf == DE1 )
{
m = (15 - i) << 1;
}
else
{
m = i << 1;
}
n = m + 1;
kn[m] = kn[n] = 0L;
for ( j = 0; j < 28; j++ )
{
l = j + totrot[i];
if ( l < 28 )
{
pcr[j] = pc1m[l];
}
else
{
pcr[j] = pc1m[l - 28];
}
}
for ( j = 28; j < 56; j++ )
{
l = j + totrot[i];
if ( l < 56 )
{
pcr[j] = pc1m[l];
}
else
{
pcr[j] = pc1m[l - 28];
}
}
for ( j = 0; j < 24; j++ )
{
if ( pcr[pc2[j]] )
{
kn[m] |= bigbyte[j];
}
if ( pcr[pc2[j + 24]] )
{
kn[n] |= bigbyte[j];
}
}
}
cookey(kn);
return;
}
static void cookey(register unsigned long *raw1)
{
register unsigned long *cook, *raw0;
unsigned long dough[32];
register int i;
cook = dough;
for ( i = 0; i < 16; i++, raw1++ )
{
raw0 = raw1++;
*cook = (*raw0 & 0x00fc0000L) << 6;
*cook |= (*raw0 & 0x00000fc0L) << 10;
*cook |= (*raw1 & 0x00fc0000L) >> 10;
*cook++ |= (*raw1 & 0x00000fc0L) >> 6;
*cook = (*raw0 & 0x0003f000L) << 12;
*cook |= (*raw0 & 0x0000003fL) << 16;
*cook |= (*raw1 & 0x0003f000L) >> 4;
*cook++ |= (*raw1 & 0x0000003fL);
}
rfbUseKey(dough);
return;
}
void rfbCPKey(register unsigned long *into)
{
register unsigned long *from, *endp;
from = KnL, endp = &KnL[32];
while ( from < endp )
{
*into++ = *from++;
}
return;
}
void rfbUseKey(register unsigned long *from)
{
register unsigned long *to, *endp;
to = KnL, endp = &KnL[32];
while ( to < endp )
{
*to++ = *from++;
}
return;
}
void rfbDes(unsigned char *inblock, unsigned char *outblock)
{
unsigned long work[2];
scrunch(inblock, work);
desfunc(work, KnL);
unscrun(work, outblock);
return;
}
static void scrunch(register unsigned char *outof, register unsigned long *into)
{
*into = (*outof++ & 0xffL) << 24;
*into |= (*outof++ & 0xffL) << 16;
*into |= (*outof++ & 0xffL) << 8;
*into++ |= (*outof++ & 0xffL);
*into = (*outof++ & 0xffL) << 24;
*into |= (*outof++ & 0xffL) << 16;
*into |= (*outof++ & 0xffL) << 8;
*into |= (*outof & 0xffL);
return;
}
static void unscrun(register unsigned long *outof, register unsigned char *into)
{
*into++ = (unsigned char)((*outof >> 24) & 0xffL);
*into++ = (unsigned char)((*outof >> 16) & 0xffL);
*into++ = (unsigned char)((*outof >> 8) & 0xffL);
*into++ = (unsigned char)( *outof++ & 0xffL);
*into++ = (unsigned char)((*outof >> 24) & 0xffL);
*into++ = (unsigned char)((*outof >> 16) & 0xffL);
*into++ = (unsigned char)((*outof >> 8) & 0xffL);
*into = (unsigned char)( *outof & 0xffL);
return;
}
static unsigned long SP1[64] =
{
0x01010400L, 0x00000000L, 0x00010000L, 0x01010404L,
0x01010004L, 0x00010404L, 0x00000004L, 0x00010000L,
0x00000400L, 0x01010400L, 0x01010404L, 0x00000400L,
0x01000404L, 0x01010004L, 0x01000000L, 0x00000004L,
0x00000404L, 0x01000400L, 0x01000400L, 0x00010400L,
0x00010400L, 0x01010000L, 0x01010000L, 0x01000404L,
0x00010004L, 0x01000004L, 0x01000004L, 0x00010004L,
0x00000000L, 0x00000404L, 0x00010404L, 0x01000000L,
0x00010000L, 0x01010404L, 0x00000004L, 0x01010000L,
0x01010400L, 0x01000000L, 0x01000000L, 0x00000400L,
0x01010004L, 0x00010000L, 0x00010400L, 0x01000004L,
0x00000400L, 0x00000004L, 0x01000404L, 0x00010404L,
0x01010404L, 0x00010004L, 0x01010000L, 0x01000404L,
0x01000004L, 0x00000404L, 0x00010404L, 0x01010400L,
0x00000404L, 0x01000400L, 0x01000400L, 0x00000000L,
0x00010004L, 0x00010400L, 0x00000000L, 0x01010004L
};
static unsigned long SP2[64] =
{
0x80108020L, 0x80008000L, 0x00008000L, 0x00108020L,
0x00100000L, 0x00000020L, 0x80100020L, 0x80008020L,
0x80000020L, 0x80108020L, 0x80108000L, 0x80000000L,
0x80008000L, 0x00100000L, 0x00000020L, 0x80100020L,
0x00108000L, 0x00100020L, 0x80008020L, 0x00000000L,
0x80000000L, 0x00008000L, 0x00108020L, 0x80100000L,
0x00100020L, 0x80000020L, 0x00000000L, 0x00108000L,
0x00008020L, 0x80108000L, 0x80100000L, 0x00008020L,
0x00000000L, 0x00108020L, 0x80100020L, 0x00100000L,
0x80008020L, 0x80100000L, 0x80108000L, 0x00008000L,
0x80100000L, 0x80008000L, 0x00000020L, 0x80108020L,
0x00108020L, 0x00000020L, 0x00008000L, 0x80000000L,
0x00008020L, 0x80108000L, 0x00100000L, 0x80000020L,
0x00100020L, 0x80008020L, 0x80000020L, 0x00100020L,
0x00108000L, 0x00000000L, 0x80008000L, 0x00008020L,
0x80000000L, 0x80100020L, 0x80108020L, 0x00108000L
};
static unsigned long SP3[64] =
{
0x00000208L, 0x08020200L, 0x00000000L, 0x08020008L,
0x08000200L, 0x00000000L, 0x00020208L, 0x08000200L,
0x00020008L, 0x08000008L, 0x08000008L, 0x00020000L,
0x08020208L, 0x00020008L, 0x08020000L, 0x00000208L,
0x08000000L, 0x00000008L, 0x08020200L, 0x00000200L,
0x00020200L, 0x08020000L, 0x08020008L, 0x00020208L,
0x08000208L, 0x00020200L, 0x00020000L, 0x08000208L,
0x00000008L, 0x08020208L, 0x00000200L, 0x08000000L,
0x08020200L, 0x08000000L, 0x00020008L, 0x00000208L,
0x00020000L, 0x08020200L, 0x08000200L, 0x00000000L,
0x00000200L, 0x00020008L, 0x08020208L, 0x08000200L,
0x08000008L, 0x00000200L, 0x00000000L, 0x08020008L,
0x08000208L, 0x00020000L, 0x08000000L, 0x08020208L,
0x00000008L, 0x00020208L, 0x00020200L, 0x08000008L,
0x08020000L, 0x08000208L, 0x00000208L, 0x08020000L,
0x00020208L, 0x00000008L, 0x08020008L, 0x00020200L
};
static unsigned long SP4[64] =
{
0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
0x00802080L, 0x00800081L, 0x00800001L, 0x00002001L,
0x00000000L, 0x00802000L, 0x00802000L, 0x00802081L,
0x00000081L, 0x00000000L, 0x00800080L, 0x00800001L,
0x00000001L, 0x00002000L, 0x00800000L, 0x00802001L,
0x00000080L, 0x00800000L, 0x00002001L, 0x00002080L,
0x00800081L, 0x00000001L, 0x00002080L, 0x00800080L,
0x00002000L, 0x00802080L, 0x00802081L, 0x00000081L,
0x00800080L, 0x00800001L, 0x00802000L, 0x00802081L,
0x00000081L, 0x00000000L, 0x00000000L, 0x00802000L,
0x00002080L, 0x00800080L, 0x00800081L, 0x00000001L,
0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
0x00802081L, 0x00000081L, 0x00000001L, 0x00002000L,
0x00800001L, 0x00002001L, 0x00802080L, 0x00800081L,
0x00002001L, 0x00002080L, 0x00800000L, 0x00802001L,
0x00000080L, 0x00800000L, 0x00002000L, 0x00802080L
};
static unsigned long SP5[64] =
{
0x00000100L, 0x02080100L, 0x02080000L, 0x42000100L,
0x00080000L, 0x00000100L, 0x40000000L, 0x02080000L,
0x40080100L, 0x00080000L, 0x02000100L, 0x40080100L,
0x42000100L, 0x42080000L, 0x00080100L, 0x40000000L,
0x02000000L, 0x40080000L, 0x40080000L, 0x00000000L,
0x40000100L, 0x42080100L, 0x42080100L, 0x02000100L,
0x42080000L, 0x40000100L, 0x00000000L, 0x42000000L,
0x02080100L, 0x02000000L, 0x42000000L, 0x00080100L,
0x00080000L, 0x42000100L, 0x00000100L, 0x02000000L,
0x40000000L, 0x02080000L, 0x42000100L, 0x40080100L,
0x02000100L, 0x40000000L, 0x42080000L, 0x02080100L,
0x40080100L, 0x00000100L, 0x02000000L, 0x42080000L,
0x42080100L, 0x00080100L, 0x42000000L, 0x42080100L,
0x02080000L, 0x00000000L, 0x40080000L, 0x42000000L,
0x00080100L, 0x02000100L, 0x40000100L, 0x00080000L,
0x00000000L, 0x40080000L, 0x02080100L, 0x40000100L
};
static unsigned long SP6[64] =
{
0x20000010L, 0x20400000L, 0x00004000L, 0x20404010L,
0x20400000L, 0x00000010L, 0x20404010L, 0x00400000L,
0x20004000L, 0x00404010L, 0x00400000L, 0x20000010L,
0x00400010L, 0x20004000L, 0x20000000L, 0x00004010L,
0x00000000L, 0x00400010L, 0x20004010L, 0x00004000L,
0x00404000L, 0x20004010L, 0x00000010L, 0x20400010L,
0x20400010L, 0x00000000L, 0x00404010L, 0x20404000L,
0x00004010L, 0x00404000L, 0x20404000L, 0x20000000L,
0x20004000L, 0x00000010L, 0x20400010L, 0x00404000L,
0x20404010L, 0x00400000L, 0x00004010L, 0x20000010L,
0x00400000L, 0x20004000L, 0x20000000L, 0x00004010L,
0x20000010L, 0x20404010L, 0x00404000L, 0x20400000L,
0x00404010L, 0x20404000L, 0x00000000L, 0x20400010L,
0x00000010L, 0x00004000L, 0x20400000L, 0x00404010L,
0x00004000L, 0x00400010L, 0x20004010L, 0x00000000L,
0x20404000L, 0x20000000L, 0x00400010L, 0x20004010L
};
static unsigned long SP7[64] =
{
0x00200000L, 0x04200002L, 0x04000802L, 0x00000000L,
0x00000800L, 0x04000802L, 0x00200802L, 0x04200800L,
0x04200802L, 0x00200000L, 0x00000000L, 0x04000002L,
0x00000002L, 0x04000000L, 0x04200002L, 0x00000802L,
0x04000800L, 0x00200802L, 0x00200002L, 0x04000800L,
0x04000002L, 0x04200000L, 0x04200800L, 0x00200002L,
0x04200000L, 0x00000800L, 0x00000802L, 0x04200802L,
0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L,
0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L,
0x04000802L, 0x04200002L, 0x04200002L, 0x00000002L,
0x00200002L, 0x04000000L, 0x04000800L, 0x00200000L,
0x04200800L, 0x00000802L, 0x00200802L, 0x04200800L,
0x00000802L, 0x04000002L, 0x04200802L, 0x04200000L,
0x00200800L, 0x00000000L, 0x00000002L, 0x04200802L,
0x00000000L, 0x00200802L, 0x04200000L, 0x00000800L,
0x04000002L, 0x04000800L, 0x00000800L, 0x00200002L
};
static unsigned long SP8[64] =
{
0x10001040L, 0x00001000L, 0x00040000L, 0x10041040L,
0x10000000L, 0x10001040L, 0x00000040L, 0x10000000L,
0x00040040L, 0x10040000L, 0x10041040L, 0x00041000L,
0x10041000L, 0x00041040L, 0x00001000L, 0x00000040L,
0x10040000L, 0x10000040L, 0x10001000L, 0x00001040L,
0x00041000L, 0x00040040L, 0x10040040L, 0x10041000L,
0x00001040L, 0x00000000L, 0x00000000L, 0x10040040L,
0x10000040L, 0x10001000L, 0x00041040L, 0x00040000L,
0x00041040L, 0x00040000L, 0x10041000L, 0x00001000L,
0x00000040L, 0x10040040L, 0x00001000L, 0x00041040L,
0x10001000L, 0x00000040L, 0x10000040L, 0x10040000L,
0x10040040L, 0x10000000L, 0x00040000L, 0x10001040L,
0x00000000L, 0x10041040L, 0x00040040L, 0x10000040L,
0x10040000L, 0x10001000L, 0x10001040L, 0x00000000L,
0x10041040L, 0x00041000L, 0x00041000L, 0x00001040L,
0x00001040L, 0x00040040L, 0x10000000L, 0x10041000L
};
static void desfunc(register unsigned long *block, register unsigned long *keys)
{
register unsigned long fval, work, right, leftt;
register int round;
leftt = block[0];
right = block[1];
work = ((leftt >> 4) ^ right) & 0x0f0f0f0fL;
right ^= work;
leftt ^= (work << 4);
work = ((leftt >> 16) ^ right) & 0x0000ffffL;
right ^= work;
leftt ^= (work << 16);
work = ((right >> 2) ^ leftt) & 0x33333333L;
leftt ^= work;
right ^= (work << 2);
work = ((right >> 8) ^ leftt) & 0x00ff00ffL;
leftt ^= work;
right ^= (work << 8);
right = ((right << 1) | ((right >> 31) & 1L)) & 0xffffffffL;
work = (leftt ^ right) & 0xaaaaaaaaL;
leftt ^= work;
right ^= work;
leftt = ((leftt << 1) | ((leftt >> 31) & 1L)) & 0xffffffffL;
for ( round = 0; round < 8; round++ )
{
work = (right << 28) | (right >> 4);
work ^= *keys++;
fval = SP7[ work & 0x3fL];
fval |= SP5[(work >> 8) & 0x3fL];
fval |= SP3[(work >> 16) & 0x3fL];
fval |= SP1[(work >> 24) & 0x3fL];
work = right ^ *keys++;
fval |= SP8[ work & 0x3fL];
fval |= SP6[(work >> 8) & 0x3fL];
fval |= SP4[(work >> 16) & 0x3fL];
fval |= SP2[(work >> 24) & 0x3fL];
leftt ^= fval;
work = (leftt << 28) | (leftt >> 4);
work ^= *keys++;
fval = SP7[ work & 0x3fL];
fval |= SP5[(work >> 8) & 0x3fL];
fval |= SP3[(work >> 16) & 0x3fL];
fval |= SP1[(work >> 24) & 0x3fL];
work = leftt ^ *keys++;
fval |= SP8[ work & 0x3fL];
fval |= SP6[(work >> 8) & 0x3fL];
fval |= SP4[(work >> 16) & 0x3fL];
fval |= SP2[(work >> 24) & 0x3fL];
right ^= fval;
}
right = (right << 31) | (right >> 1);
work = (leftt ^ right) & 0xaaaaaaaaL;
leftt ^= work;
right ^= work;
leftt = (leftt << 31) | (leftt >> 1);
work = ((leftt >> 8) ^ right) & 0x00ff00ffL;
right ^= work;
leftt ^= (work << 8);
work = ((leftt >> 2) ^ right) & 0x33333333L;
right ^= work;
leftt ^= (work << 2);
work = ((right >> 16) ^ leftt) & 0x0000ffffL;
leftt ^= work;
right ^= (work << 16);
work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL;
leftt ^= work;
right ^= (work << 4);
*block++ = right;
*block = leftt;
return;
}
/* Validation sets:
*
* Single-length key, single-length plaintext -
* Key : 0123 4567 89ab cdef
* Plain : 0123 4567 89ab cde7
* Cipher : c957 4425 6a5e d31d
*
* Double-length key, single-length plaintext -
* Key : 0123 4567 89ab cdef fedc ba98 7654 3210
* Plain : 0123 4567 89ab cde7
* Cipher : 7f1d 0a77 826b 8aff
*
* Double-length key, double-length plaintext -
* Key : 0123 4567 89ab cdef fedc ba98 7654 3210
* Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff
* Cipher : 27a0 8440 406a df60 278f 47cf 42d6 15d7
*
* Triple-length key, single-length plaintext -
* Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
* Plain : 0123 4567 89ab cde7
* Cipher : de0b 7c06 ae5e 0ed5
*
* Triple-length key, double-length plaintext -
* Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
* Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff
* Cipher : ad0d 1b30 ac17 cf07 0ed1 1c63 81e4 4de5
*
* d3des V5.0a rwo 9208.07 18:44 Graven Imagery
**********************************************************************/

View File

@ -1,56 +0,0 @@
#ifndef D3DES_H
#define D3DES_H
/*
* This is D3DES (V5.09) by Richard Outerbridge with the double and
* triple-length support removed for use in VNC.
*
* These changes are:
* Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
/* d3des.h -
*
* Headers and defines for d3des.c
* Graven Imagery, 1992.
*
* Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge
* (GEnie : OUTER; CIS : [71755,204])
*/
#define EN0 0 /* MODE == encrypt */
#define DE1 1 /* MODE == decrypt */
extern void rfbDesKey(unsigned char *, int);
/* hexkey[8] MODE
* Sets the internal key register according to the hexadecimal
* key contained in the 8 bytes of hexkey, according to the DES,
* for encryption or decryption according to MODE.
*/
extern void rfbUseKey(unsigned long *);
/* cookedkey[32]
* Loads the internal key register with the data in cookedkey.
*/
extern void rfbCPKey(unsigned long *);
/* cookedkey[32]
* Copies the contents of the internal key register into the storage
* located at &cookedkey[0].
*/
extern void rfbDes(unsigned char *, unsigned char *);
/* from[8] to[8]
* Encrypts/Decrypts (according to the key currently loaded in the
* internal key register) one block of eight bytes at address 'from'
* into the block at address 'to'. They can be the same.
*/
/* d3des.h V5.09 rwo 9208.04 15:06 Graven Imagery
********************************************************************/
#endif

View File

@ -26,6 +26,48 @@
#define FILE_MAX_LINE_BYTES 2048
static int APP_CC
file_read_ini_line(struct stream *s, char *text, int text_bytes);
/*****************************************************************************/
/* look up for a section name within str (i.e. pattern [section_name])
* if a section name is found, this function return 1 and copy the section
* inplace of str. */
static int APP_CC
line_lookup_for_section_name(char *str, int str_bytes)
{
int name_index_start;
int index;
char c;
name_index_start = -1;
index = 0;
while ((c = str[index]) != 0)
{
if (c == '[')
{
name_index_start = index + 1;
}
else if (c == ']' && name_index_start > 0)
{
if (name_index_start + index >= str_bytes)
{
return 0;
}
for (index = index - name_index_start; index > 0; index--)
{
str[0] = str[name_index_start];
str++;
}
str[0] = 0;
return 1;
}
++index;
}
return 0;
}
/*****************************************************************************/
/* returns error
returns 0 if everything is ok
@ -35,17 +77,11 @@ l_file_read_sections(int fd, int max_file_size, struct list *names)
{
struct stream *s;
char text[FILE_MAX_LINE_BYTES];
char c;
int in_it;
int in_it_index;
int len;
int index;
int rv;
rv = 0;
g_file_seek(fd, 0);
in_it_index = 0;
in_it = 0;
g_memset(text, 0, FILE_MAX_LINE_BYTES);
list_clear(names);
make_stream(s);
@ -55,26 +91,11 @@ l_file_read_sections(int fd, int max_file_size, struct list *names)
if (len > 0)
{
s->end = s->p + len;
for (index = 0; index < len; index++)
while (file_read_ini_line(s, text, FILE_MAX_LINE_BYTES) == 0)
{
in_uint8(s, c);
if (c == '[')
{
in_it = 1;
}
else if (c == ']')
if (line_lookup_for_section_name(text, FILE_MAX_LINE_BYTES) != 0)
{
list_add_item(names, (tbus)g_strdup(text));
in_it = 0;
in_it_index = 0;
g_memset(text, 0, FILE_MAX_LINE_BYTES);
}
else if (in_it)
{
text[in_it_index] = c;
in_it_index++;
}
}
}
@ -88,15 +109,17 @@ l_file_read_sections(int fd, int max_file_size, struct list *names)
}
/*****************************************************************************/
/* returns error */
/* Read a line in the stream 's', removing comments.
* returns error
* returns 0 if everything is ok
* returns 1 if problem reading file */
static int APP_CC
file_read_line(struct stream *s, char *text, int text_bytes)
file_read_ini_line(struct stream *s, char *text, int text_bytes)
{
int i;
int skip_to_end;
int at_end;
char c;
char *hold;
skip_to_end = 0;
@ -105,7 +128,6 @@ file_read_line(struct stream *s, char *text, int text_bytes)
return 1;
}
hold = s->p;
i = 0;
in_uint8(s, c);
@ -163,15 +185,10 @@ file_read_line(struct stream *s, char *text, int text_bytes)
text[i] = 0;
if (text[0] == '[')
{
s->p = hold;
return 1;
}
return 0;
}
/*****************************************************************************/
/* returns error */
static int APP_CC
@ -227,11 +244,7 @@ l_file_read_section(int fd, int max_file_size, const char *section,
char *name;
char *value;
char *lvalue;
char c;
int in_it;
int in_it_index;
int len;
int index;
int file_size;
data = (char *) g_malloc(FILE_MAX_LINE_BYTES * 3, 0);
@ -241,8 +254,6 @@ l_file_read_section(int fd, int max_file_size, const char *section,
file_size = 32 * 1024; /* 32 K file size limit */
g_file_seek(fd, 0);
in_it_index = 0;
in_it = 0;
g_memset(text, 0, FILE_MAX_LINE_BYTES);
list_clear(names);
list_clear(values);
@ -253,36 +264,20 @@ l_file_read_section(int fd, int max_file_size, const char *section,
if (len > 0)
{
s->end = s->p + len;
for (index = 0; index < len; index++)
while (file_read_ini_line(s, text, FILE_MAX_LINE_BYTES) == 0)
{
if (!s_check_rem(s, 1))
{
break;
}
in_uint8(s, c);
if ((c == '#') || (c == ';'))
{
if (file_read_line(s, text, FILE_MAX_LINE_BYTES) != 0)
{
break;
}
in_it = 0;
in_it_index = 0;
g_memset(text, 0, FILE_MAX_LINE_BYTES);
continue;
}
if (c == '[')
{
in_it = 1;
}
else if (c == ']')
if (line_lookup_for_section_name(text, FILE_MAX_LINE_BYTES) != 0)
{
if (g_strcasecmp(section, text) == 0)
{
file_read_line(s, text, FILE_MAX_LINE_BYTES);
while (file_read_line(s, text, FILE_MAX_LINE_BYTES) == 0)
while (file_read_ini_line(s, text,
FILE_MAX_LINE_BYTES) == 0)
{
if (line_lookup_for_section_name(text, FILE_MAX_LINE_BYTES) != 0)
{
break;
}
if (g_strlen(text) > 0)
{
file_split_name_value(text, name, value);
@ -307,27 +302,14 @@ l_file_read_section(int fd, int max_file_size, const char *section,
}
}
}
free_stream(s);
g_free(data);
return 0;
}
in_it = 0;
in_it_index = 0;
g_memset(text, 0, FILE_MAX_LINE_BYTES);
}
else if (in_it)
{
text[in_it_index] = c;
in_it_index++;
if (in_it_index >= FILE_MAX_LINE_BYTES)
{
break;
}
}
}
}
free_stream(s);
g_free(data);
return 1;
@ -346,7 +328,7 @@ file_read_sections(int fd, struct list *names)
/*****************************************************************************/
/* return error */
/* this function should be prefered over file_read_sections because it can
/* this function should be preferred over file_read_sections because it can
read any file size */
int APP_CC
file_by_name_read_sections(const char *file_name, struct list *names)
@ -362,7 +344,7 @@ file_by_name_read_sections(const char *file_name, struct list *names)
return 1;
}
fd = g_file_open(file_name);
fd = g_file_open_ex(file_name, 1, 0, 0, 0);
if (fd < 0)
{
@ -386,7 +368,7 @@ file_read_section(int fd, const char *section,
/*****************************************************************************/
/* return error */
/* this function should be prefered over file_read_section because it can
/* this function should be preferred over file_read_section because it can
read any file size */
int APP_CC
file_by_name_read_section(const char *file_name, const char *section,
@ -403,7 +385,7 @@ file_by_name_read_section(const char *file_name, const char *section,
return 1;
}
fd = g_file_open(file_name);
fd = g_file_open_ex(file_name, 1, 0, 0, 0);
if (fd < 0)
{

View File

@ -37,8 +37,8 @@
#define XRDP_SHARE_PATH "/usr/local/share/xrdp"
#endif
#if !defined(XRDP_LIB_PATH)
#define XRDP_LIB_PATH "/usr/local/lib/xrdp"
#if !defined(XRDP_MODULE_PATH)
#define XRDP_MODULE_PATH "/usr/local/lib/xrdp"
#endif
#if !defined(XRDP_LOG_PATH)

View File

@ -82,7 +82,7 @@ list_add_item(struct list *self, tbus item)
/*****************************************************************************/
tbus APP_CC
list_get_item(struct list *self, int index)
list_get_item(const struct list *self, int index)
{
if (index < 0 || index >= self->count)
{
@ -192,7 +192,7 @@ list_insert_item(struct list *self, int index, tbus item)
/*****************************************************************************/
/* append one list to another using strdup for each item in the list */
/* begins copy at start_index, a zero based index on the soure list */
/* begins copy at start_index, a zero based index on the source list */
void APP_CC
list_append_list_strdup(struct list *self, struct list *dest, int start_index)
{
@ -221,6 +221,6 @@ list_dump_items(struct list *self)
for (index = 0; index < self->count; index++)
{
g_writeln("%d: %s", index, list_get_item(self, index));
g_writeln("%d: 0x%lx", index, list_get_item(self, index));
}
}

View File

@ -40,7 +40,7 @@ list_delete(struct list* self);
void APP_CC
list_add_item(struct list* self, tintptr item);
tintptr APP_CC
list_get_item(struct list* self, int index);
list_get_item(const struct list *self, int index);
void APP_CC
list_clear(struct list* self);
int APP_CC

View File

@ -59,6 +59,13 @@ internal_log_file_open(const char *fname)
S_IRUSR | S_IWUSR);
}
#ifdef FD_CLOEXEC
if (ret != -1)
{
fcntl(ret, F_SETFD, FD_CLOEXEC);
}
#endif
return ret;
}
@ -142,7 +149,7 @@ internal_log_start(struct log_config *l_cfg)
return ret;
}
/* if progname is NULL, we ureturn error */
/* if progname is NULL, we return error */
if (0 == l_cfg->program_name)
{
g_writeln("program_name not properly assigned");
@ -186,7 +193,7 @@ internal_log_end(struct log_config *l_cfg)
/* closing log file */
log_message(LOG_LEVEL_ALWAYS, "shutting down log subsystem...");
if (0 > l_cfg->fd)
if (-1 != l_cfg->fd)
{
/* closing logfile... */
g_file_close(l_cfg->fd);
@ -205,12 +212,6 @@ internal_log_end(struct log_config *l_cfg)
l_cfg->log_file = 0;
}
if (0 != l_cfg->program_name)
{
g_free(l_cfg->program_name);
l_cfg->program_name = 0;
}
ret = LOG_STARTUP_OK;
return ret;
}
@ -221,7 +222,7 @@ internal_log_end(struct log_config *l_cfg)
* @return
*/
enum logLevels DEFAULT_CC
internal_log_text2level(char *buf)
internal_log_text2level(const char *buf)
{
if (0 == g_strcasecmp(buf, "0") ||
0 == g_strcasecmp(buf, "core"))
@ -329,7 +330,7 @@ internal_config_read_logging(int file, struct log_config *lc,
list_clear(param_n);
/* setting defaults */
lc->program_name = g_strdup(applicationName);
lc->program_name = applicationName;
lc->log_file = 0;
lc->fd = 0;
lc->log_level = LOG_LEVEL_DEBUG;
@ -394,7 +395,7 @@ enum logReturns DEFAULT_CC
internalInitAndAllocStruct(void)
{
enum logReturns ret = LOG_GENERAL_ERROR;
g_staticLogConfig = g_malloc(sizeof(struct log_config), 1);
g_staticLogConfig = g_new0(struct log_config, 1);
if (g_staticLogConfig != NULL)
{
@ -448,7 +449,7 @@ log_start_from_param(const struct log_config *iniParams)
g_staticLogConfig->log_level = iniParams->log_level;
g_staticLogConfig->log_lock = iniParams->log_lock;
g_staticLogConfig->log_lock_attr = iniParams->log_lock_attr;
g_staticLogConfig->program_name = g_strdup(iniParams->program_name);
g_staticLogConfig->program_name = iniParams->program_name;
g_staticLogConfig->syslog_level = iniParams->syslog_level;
ret = internal_log_start(g_staticLogConfig);

View File

@ -65,12 +65,12 @@ enum logReturns
struct log_config
{
char *program_name;
const char *program_name;
char *log_file;
int fd;
unsigned int log_level;
enum logLevels log_level;
int enable_syslog;
unsigned int syslog_level;
enum logLevels syslog_level;
pthread_mutex_t log_lock;
pthread_mutexattr_t log_lock_attr;
};
@ -81,7 +81,7 @@ struct log_config
/**
*
* @brief Starts the logging subsystem
* @param l_cfg loggging system configuration
* @param l_cfg logging system configuration
* @return
*
*/
@ -113,7 +113,7 @@ internal_log_lvl2str(const enum logLevels lvl, char *str);
*
*/
enum logLevels DEFAULT_CC
internal_log_text2level(char *s);
internal_log_text2level(const char *s);
/**
* A function that init our struct that holds all state and
@ -171,17 +171,7 @@ log_end(void);
* @return
*/
enum logReturns DEFAULT_CC
log_message(const enum logLevels lvl, const char *msg, ...);
/**
*
* @brief Reads configuration
* @param s translates the strings "1", "true" and "yes" in 1 (true) and
* other strings in 0
* @return 0 on success, 1 on failure
*
*/
int APP_CC text2bool(char *s);
log_message(const enum logLevels lvl, const char *msg, ...) printflike(2, 3);
/**
* This function returns the configured file name for the logfile

File diff suppressed because it is too large Load Diff

View File

@ -25,20 +25,37 @@
#define NULL 0
#endif
#include <stdlib.h>
#include "arch.h"
#define g_tcp_can_recv g_sck_can_recv
#define g_tcp_can_send g_sck_can_send
#define g_tcp_recv g_sck_recv
#define g_tcp_send g_sck_send
#define g_tcp_close g_sck_close
#define g_tcp_last_error_would_block g_sck_last_error_would_block
#define g_tcp_set_non_blocking g_sck_set_non_blocking
#define g_tcp_local_socket g_sck_local_socket
#define g_tcp_local_connect g_sck_local_connect
#define g_tcp_listen g_sck_listen
#define g_tcp_local_bind g_sck_local_bind
#define g_tcp_select g_sck_select
#define g_close_wait_obj g_delete_wait_obj
int APP_CC g_rm_temp_dir(void);
int APP_CC g_mk_temp_dir(const char* app_name);
void APP_CC g_init(const char* app_name);
void APP_CC g_deinit(void);
void* APP_CC g_malloc(int size, int zero);
void APP_CC g_free(void* ptr);
void DEFAULT_CC g_printf(const char *format, ...);
void DEFAULT_CC g_sprintf(char* dest, const char* format, ...);
void DEFAULT_CC g_snprintf(char* dest, int len, const char* format, ...);
void DEFAULT_CC g_writeln(const char* format, ...);
void DEFAULT_CC g_write(const char* format, ...);
void APP_CC g_hexdump(char* p, int len);
void DEFAULT_CC g_printf(const char *format, ...) printflike(1, 2);
void DEFAULT_CC g_sprintf(char* dest, const char* format, ...) \
printflike(2, 3);
int DEFAULT_CC g_snprintf(char* dest, int len, const char* format, ...) \
printflike(3, 4);
void DEFAULT_CC g_writeln(const char* format, ...) printflike(1, 2);
void DEFAULT_CC g_write(const char* format, ...) printflike(1, 2);
void APP_CC g_hexdump(const char *p, int len);
void APP_CC g_memset(void* ptr, int val, int size);
void APP_CC g_memcpy(void* d_ptr, const void* s_ptr, int size);
int APP_CC g_getchar(void);
@ -49,39 +66,36 @@ int APP_CC g_sck_set_send_buffer_bytes(int sck, int bytes);
int APP_CC g_sck_get_send_buffer_bytes(int sck, int *bytes);
int APP_CC g_sck_set_recv_buffer_bytes(int sck, int bytes);
int APP_CC g_sck_get_recv_buffer_bytes(int sck, int *bytes);
int APP_CC g_tcp_local_socket(void);
int APP_CC g_sck_local_socket(void);
int APP_CC g_sck_get_peer_cred(int sck, int *pid, int *uid, int *gid);
void APP_CC g_tcp_close(int sck);
void APP_CC g_sck_close(int sck);
int APP_CC g_tcp_connect(int sck, const char* address, const char* port);
int APP_CC g_tcp_local_connect(int sck, const char* port);
int APP_CC g_tcp_force_send(int sck, char* data, int len);
int APP_CC g_tcp_force_recv(int sck, char* data, int len);
int APP_CC g_tcp_set_non_blocking(int sck);
int APP_CC g_sck_local_connect(int sck, const char* port);
int APP_CC g_sck_set_non_blocking(int sck);
int APP_CC g_tcp_bind(int sck, const char *port);
int APP_CC g_tcp_local_bind(int sck, const char* port);
int APP_CC g_sck_local_bind(int sck, const char* port);
int APP_CC g_tcp_bind_address(int sck, const char* port, const char* address);
int APP_CC g_tcp_listen(int sck);
int APP_CC g_sck_listen(int sck);
int APP_CC g_tcp_accept(int sck);
int APP_CC g_sck_accept(int sck, char *addr, int addr_bytes,
char *port, int port_bytes);
int APP_CC g_tcp_recv(int sck, void* ptr, int len, int flags);
int APP_CC g_tcp_send(int sck, const void* ptr, int len, int flags);
int APP_CC g_tcp_last_error_would_block(int sck);
int APP_CC g_tcp_socket_ok(int sck);
int APP_CC g_tcp_can_send(int sck, int millis);
int APP_CC g_tcp_can_recv(int sck, int millis);
int APP_CC g_tcp_select(int sck1, int sck2);
int APP_CC g_sck_recv(int sck, void* ptr, int len, int flags);
int APP_CC g_sck_send(int sck, const void* ptr, int len, int flags);
int APP_CC g_sck_last_error_would_block(int sck);
int APP_CC g_sck_socket_ok(int sck);
int APP_CC g_sck_can_send(int sck, int millis);
int APP_CC g_sck_can_recv(int sck, int millis);
int APP_CC g_sck_select(int sck1, int sck2);
void APP_CC g_write_ip_address(int rcv_sck, char* ip_address, int bytes);
void APP_CC g_sleep(int msecs);
tbus APP_CC g_create_wait_obj(char* name);
tbus APP_CC g_create_wait_obj_from_socket(tbus socket, int write);
void APP_CC g_delete_wait_obj_from_socket(tbus wait_obj);
int APP_CC g_set_wait_obj(tbus obj);
int APP_CC g_reset_wait_obj(tbus obj);
int APP_CC g_is_wait_obj_set(tbus obj);
int APP_CC g_delete_wait_obj(tbus obj);
int APP_CC g_close_wait_obj(tbus obj);
int APP_CC g_obj_wait(tbus* read_objs, int rcount, tbus* write_objs,
tintptr APP_CC g_create_wait_obj(const char *name);
tintptr APP_CC g_create_wait_obj_from_socket(tintptr socket, int write);
void APP_CC g_delete_wait_obj_from_socket(tintptr wait_obj);
int APP_CC g_set_wait_obj(tintptr obj);
int APP_CC g_reset_wait_obj(tintptr obj);
int APP_CC g_is_wait_obj_set(tintptr obj);
int APP_CC g_delete_wait_obj(tintptr obj);
int APP_CC g_obj_wait(tintptr* read_objs, int rcount, tintptr* write_objs,
int wcount,int mstimeout);
void APP_CC g_random(char* data, int len);
int APP_CC g_abs(int i);
@ -91,14 +105,14 @@ int APP_CC g_file_open_ex(const char *file_name, int aread, int awrite,
int acreate, int atrunc);
int APP_CC g_file_close(int fd);
int APP_CC g_file_read(int fd, char* ptr, int len);
int APP_CC g_file_write(int fd, char* ptr, int len);
int APP_CC g_file_write(int fd, const char *ptr, int len);
int APP_CC g_file_seek(int fd, int offset);
int APP_CC g_file_lock(int fd, int start, int len);
int APP_CC g_chmod_hex(const char* filename, int flags);
int APP_CC g_chown(const char* name, int uid, int gid);
int APP_CC g_mkdir(const char* dirname);
char* APP_CC g_get_current_dir(char* dirname, int maxlen);
int APP_CC g_set_current_dir(char* dirname);
int APP_CC g_set_current_dir(const char *dirname);
int APP_CC g_file_exist(const char* filename);
int APP_CC g_directory_exist(const char* dirname);
int APP_CC g_create_dir(const char* dirname);
@ -107,7 +121,7 @@ int APP_CC g_remove_dir(const char* dirname);
int APP_CC g_file_delete(const char* filename);
int APP_CC g_file_get_size(const char* filename);
int APP_CC g_strlen(const char* text);
char* APP_CC g_strchr(const char* text, int c);
const char *APP_CC g_strchr(const char *text, int c);
char* APP_CC g_strcpy(char* dest, const char* src);
char* APP_CC g_strncpy(char* dest, const char* src, int len);
char* APP_CC g_strcat(char* dest, const char* src);
@ -120,6 +134,8 @@ int APP_CC g_strcasecmp(const char* c1, const char* c2);
int APP_CC g_strncasecmp(const char* c1, const char* c2, int len);
int APP_CC g_atoi(const char* str);
int APP_CC g_htoi(char* str);
int APP_CC g_bytes_to_hexstr(const void *bytes, int num_bytes, char *out_str,
int bytes_out_str);
int APP_CC g_pos(const char* str, const char* to_find);
int APP_CC g_mbstowcs(twchar* dest, const char* src, int n);
int APP_CC g_wcstombs(char* dest, const twchar* src, int n);
@ -136,7 +152,6 @@ void APP_CC g_signal_child_stop(void (*func)(int));
void APP_CC g_signal_segfault(void (*func)(int));
void APP_CC g_signal_hang_up(void (*func)(int));
void APP_CC g_signal_user_interrupt(void (*func)(int));
void APP_CC g_signal_kill(void (*func)(int));
void APP_CC g_signal_terminate(void (*func)(int));
void APP_CC g_signal_pipe(void (*func)(int));
void APP_CC g_signal_usr1(void (*func)(int));
@ -146,6 +161,8 @@ int APP_CC g_initgroups(const char* user, int gid);
int APP_CC g_getuid(void);
int APP_CC g_getgid(void);
int APP_CC g_setuid(int pid);
int APP_CC g_setsid(void);
int APP_CC g_setlogin(const char *name);
int APP_CC g_waitchild(void);
int APP_CC g_waitpid(int pid);
void APP_CC g_clearenv(void);
@ -154,8 +171,8 @@ char* APP_CC g_getenv(const char* name);
int APP_CC g_exit(int exit_code);
int APP_CC g_getpid(void);
int APP_CC g_sigterm(int pid);
int APP_CC g_getuser_info(const char* username, int* gid, int* uid, char* shell,
char* dir, char* gecos);
int APP_CC g_getuser_info(const char* username, int* gid, int* uid, char** shell,
char** dir, char** gecos);
int APP_CC g_getgroup_info(const char* groupname, int* gid);
int APP_CC g_check_user_in_group(const char* username, int gid, int* ok);
int APP_CC g_time1(void);
@ -167,5 +184,12 @@ int APP_CC g_text2bool(const char *s);
void * APP_CC g_shmat(int shmid);
int APP_CC g_shmdt(const void *shmaddr);
int APP_CC g_gethostname(char *name, int len);
int APP_CC g_mirror_memcpy(void *dst, const void *src, int len);
/* glib-style wrappers */
#define g_new(struct_type, n_structs) \
(struct_type *) malloc(sizeof(struct_type) * (n_structs))
#define g_new0(struct_type, n_structs) \
(struct_type *) calloc((n_structs), sizeof(struct_type))
#endif

View File

@ -40,13 +40,17 @@ struct stream
char *end;
char *data;
int size;
int pad0;
/* offsets of various headers */
char *iso_hdr;
char *mcs_hdr;
char *sec_hdr;
char *rdp_hdr;
char *channel_hdr;
/* other */
char *next_packet;
struct stream *next;
int *source;
};
/******************************************************************************/

2549
common/pixman-region.c Normal file

File diff suppressed because it is too large Load Diff

76
common/pixman-region.h Normal file
View File

@ -0,0 +1,76 @@
/**
* xrdp: A Remote Desktop Protocol server.
*
* Copyright (C) Jay Sorg 2016
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* region, from pixman.h
*/
#if !defined(PIXMAN_PIXMAN_H__)
#define PIXMAN_PIXMAN_H__
typedef int pixman_bool_t;
struct pixman_region16_data
{
long size;
long numRects;
};
struct pixman_box16
{
signed short x1, y1, x2, y2;
};
struct pixman_region16
{
struct pixman_box16 extents;
struct pixman_region16_data *data;
};
enum _pixman_region_overlap_t
{
PIXMAN_REGION_OUT,
PIXMAN_REGION_IN,
PIXMAN_REGION_PART
};
typedef enum _pixman_region_overlap_t pixman_region_overlap_t;
typedef struct pixman_region16_data pixman_region16_data_t;
typedef struct pixman_box16 pixman_box16_t;
typedef struct pixman_region16 pixman_region16_t;
/* creation/destruction */
void pixman_region_init (pixman_region16_t *region);
void pixman_region_init_rect (pixman_region16_t *region,
int x,
int y,
unsigned int width,
unsigned int height);
void pixman_region_fini (pixman_region16_t *region);
pixman_bool_t pixman_region_union (pixman_region16_t *new_reg,
pixman_region16_t *reg1,
pixman_region16_t *reg2);
pixman_bool_t pixman_region_subtract (pixman_region16_t *reg_d,
pixman_region16_t *reg_m,
pixman_region16_t *reg_s);
pixman_bool_t pixman_region_intersect (pixman_region16_t *new_reg,
pixman_region16_t *reg1,
pixman_region16_t *reg2);
pixman_box16_t * pixman_region_rectangles (pixman_region16_t *region,
int *n_rects);
#endif

77
common/pixman-region16.c Normal file
View File

@ -0,0 +1,77 @@
/*
* Copyright © 2008 Red Hat, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software
* and its documentation for any purpose is hereby granted without
* fee, provided that the above copyright notice appear in all copies
* and that both that copyright notice and this permission notice
* appear in supporting documentation, and that the name of
* Red Hat, Inc. not be used in advertising or publicity pertaining to
* distribution of the software without specific, written prior
* permission. Red Hat, Inc. makes no representations about the
* suitability of this software for any purpose. It is provided "as
* is" without express or implied warranty.
*
* RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
* INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* Author: Soren Sandmann <sandmann@redhat.com>
*/
/* taken from pixman 0.34
altered to compile without all of pixman */
#if defined(HAVE_CONFIG_H)
#include "config_ac.h"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if defined(HAVE_STDINT_H)
#include <stdint.h>
#endif
#include "pixman-region.h"
#if !defined(UINT32_MAX)
#define UINT32_MAX (4294967295U)
#endif
#if !defined(INT16_MIN)
#define INT16_MIN (-32767-1)
#endif
#if !defined(INT16_MAX)
#define INT16_MAX (32767)
#endif
#define PIXMAN_EXPORT
#define FALSE 0
#define TRUE 1
#define MIN(x1, x2) ((x1) < (x2) ? (x1) : (x2))
#define MAX(x1, x2) ((x1) > (x2) ? (x1) : (x2))
typedef pixman_box16_t box_type_t;
typedef pixman_region16_data_t region_data_type_t;
typedef pixman_region16_t region_type_t;
typedef signed int overflow_int_t;
#define PREFIX(x) pixman_region##x
#define PIXMAN_REGION_MAX INT16_MAX
#define PIXMAN_REGION_MIN INT16_MIN
#define FUNC "func"
#define critical_if_fail(expr)
int _pixman_log_error(const char *func, const char *format, ...)
{
return 0;
}
#include "pixman-region.c"

View File

@ -40,6 +40,32 @@
#define OLD_RSA_GEN1
#endif
#if OPENSSL_VERSION_NUMBER < 0x10100000L
static inline HMAC_CTX *
HMAC_CTX_new()
{
HMAC_CTX *hmac_ctx = g_new(HMAC_CTX, 1);
HMAC_CTX_init(hmac_ctx);
return hmac_ctx;
}
static inline void
HMAC_CTX_free(HMAC_CTX *hmac_ctx)
{
HMAC_CTX_cleanup(hmac_ctx);
g_free(hmac_ctx);
}
static inline void
RSA_get0_key(const RSA *key, const BIGNUM **n, const BIGNUM **e,
const BIGNUM **d)
{
*n = key->n;
*d = key->d;
}
#endif /* OPENSSL_VERSION_NUMBER >= 0x10100000L */
/*****************************************************************************/
int
ssl_init(void)
@ -111,7 +137,7 @@ ssl_sha1_clear(void *sha1_info)
/*****************************************************************************/
void APP_CC
ssl_sha1_transform(void *sha1_info, char *data, int len)
ssl_sha1_transform(void *sha1_info, const char *data, int len)
{
SHA1_Update((SHA_CTX *)sha1_info, data, len);
}
@ -170,8 +196,7 @@ ssl_des3_encrypt_info_create(const char *key, const char* ivec)
const tui8 *lkey;
const tui8 *livec;
des3_ctx = (EVP_CIPHER_CTX *) g_malloc(sizeof(EVP_CIPHER_CTX), 1);
EVP_CIPHER_CTX_init(des3_ctx);
des3_ctx = EVP_CIPHER_CTX_new();
lkey = (const tui8 *) key;
livec = (const tui8 *) ivec;
EVP_EncryptInit_ex(des3_ctx, EVP_des_ede3_cbc(), NULL, lkey, livec);
@ -187,8 +212,7 @@ ssl_des3_decrypt_info_create(const char *key, const char* ivec)
const tui8 *lkey;
const tui8 *livec;
des3_ctx = g_malloc(sizeof(EVP_CIPHER_CTX), 1);
EVP_CIPHER_CTX_init(des3_ctx);
des3_ctx = EVP_CIPHER_CTX_new();
lkey = (const tui8 *) key;
livec = (const tui8 *) ivec;
EVP_DecryptInit_ex(des3_ctx, EVP_des_ede3_cbc(), NULL, lkey, livec);
@ -205,8 +229,7 @@ ssl_des3_info_delete(void *des3)
des3_ctx = (EVP_CIPHER_CTX *) des3;
if (des3_ctx != 0)
{
EVP_CIPHER_CTX_cleanup(des3_ctx);
g_free(des3_ctx);
EVP_CIPHER_CTX_free(des3_ctx);
}
}
@ -250,8 +273,7 @@ ssl_hmac_info_create(void)
{
HMAC_CTX *hmac_ctx;
hmac_ctx = (HMAC_CTX *) g_malloc(sizeof(HMAC_CTX), 1);
HMAC_CTX_init(hmac_ctx);
hmac_ctx = HMAC_CTX_new();
return hmac_ctx;
}
@ -264,8 +286,7 @@ ssl_hmac_info_delete(void *hmac)
hmac_ctx = (HMAC_CTX *) hmac;
if (hmac_ctx != 0)
{
HMAC_CTX_cleanup(hmac_ctx);
g_free(hmac_ctx);
HMAC_CTX_free(hmac_ctx);
}
}
@ -332,10 +353,10 @@ ssl_mod_exp(char *out, int out_len, char *in, int in_len,
char *mod, int mod_len, char *exp, int exp_len)
{
BN_CTX *ctx;
BIGNUM lmod;
BIGNUM lexp;
BIGNUM lin;
BIGNUM lout;
BIGNUM *lmod;
BIGNUM *lexp;
BIGNUM *lin;
BIGNUM *lout;
int rv;
char *l_out;
char *l_in;
@ -353,15 +374,15 @@ ssl_mod_exp(char *out, int out_len, char *in, int in_len,
ssl_reverse_it(l_mod, mod_len);
ssl_reverse_it(l_exp, exp_len);
ctx = BN_CTX_new();
BN_init(&lmod);
BN_init(&lexp);
BN_init(&lin);
BN_init(&lout);
BN_bin2bn((tui8 *)l_mod, mod_len, &lmod);
BN_bin2bn((tui8 *)l_exp, exp_len, &lexp);
BN_bin2bn((tui8 *)l_in, in_len, &lin);
BN_mod_exp(&lout, &lin, &lexp, &lmod, ctx);
rv = BN_bn2bin(&lout, (tui8 *)l_out);
lmod = BN_new();
lexp = BN_new();
lin = BN_new();
lout = BN_new();
BN_bin2bn((tui8 *)l_mod, mod_len, lmod);
BN_bin2bn((tui8 *)l_exp, exp_len, lexp);
BN_bin2bn((tui8 *)l_in, in_len, lin);
BN_mod_exp(lout, lin, lexp, lmod, ctx);
rv = BN_bn2bin(lout, (tui8 *)l_out);
if (rv <= out_len)
{
@ -373,10 +394,10 @@ ssl_mod_exp(char *out, int out_len, char *in, int in_len,
rv = 0;
}
BN_free(&lin);
BN_free(&lout);
BN_free(&lexp);
BN_free(&lmod);
BN_free(lin);
BN_free(lout);
BN_free(lexp);
BN_free(lmod);
BN_CTX_free(ctx);
g_free(l_out);
g_free(l_in);
@ -401,6 +422,7 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
tui8 *lexp;
int error;
int len;
int diff;
if ((exp_len != 4) || ((mod_len != 64) && (mod_len != 256)) ||
((pri_len != 64) && (pri_len != 256)))
@ -408,8 +430,9 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
return 1;
}
lmod = (char *)g_malloc(mod_len, 0);
lpri = (char *)g_malloc(pri_len, 0);
diff = 0;
lmod = (char *)g_malloc(mod_len, 1);
lpri = (char *)g_malloc(pri_len, 1);
lexp = (tui8 *)exp;
my_e = lexp[0];
my_e |= lexp[1] << 8;
@ -423,24 +446,26 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
if (error == 0)
{
len = BN_num_bytes(my_key->n);
error = len != mod_len;
error = (len < 1) || (len > mod_len);
diff = mod_len - len;
}
if (error == 0)
{
BN_bn2bin(my_key->n, (tui8 *)lmod);
BN_bn2bin(my_key->n, (tui8 *)(lmod + diff));
ssl_reverse_it(lmod, mod_len);
}
if (error == 0)
{
len = BN_num_bytes(my_key->d);
error = len != pri_len;
error = (len < 1) || (len > pri_len);
diff = pri_len - len;
}
if (error == 0)
{
BN_bn2bin(my_key->d, (tui8 *)lpri);
BN_bn2bin(my_key->d, (tui8 *)(lpri + diff));
ssl_reverse_it(lpri, pri_len);
}
@ -471,6 +496,7 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
char *lpri;
int error;
int len;
int diff;
if ((exp_len != 4) || ((mod_len != 64) && (mod_len != 256)) ||
((pri_len != 64) && (pri_len != 256)))
@ -478,9 +504,10 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
return 1;
}
lexp = (char *)g_malloc(exp_len, 0);
lmod = (char *)g_malloc(mod_len, 0);
lpri = (char *)g_malloc(pri_len, 0);
diff = 0;
lexp = (char *)g_malloc(exp_len, 1);
lmod = (char *)g_malloc(mod_len, 1);
lpri = (char *)g_malloc(pri_len, 1);
g_memcpy(lexp, exp, exp_len);
ssl_reverse_it(lexp, exp_len);
my_e = BN_new();
@ -488,27 +515,33 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
my_key = RSA_new();
error = RSA_generate_key_ex(my_key, key_size_in_bits, my_e, 0) == 0;
const BIGNUM *n;
const BIGNUM *d;
RSA_get0_key(my_key, &n, NULL, &d);
if (error == 0)
{
len = BN_num_bytes(my_key->n);
error = len != mod_len;
len = BN_num_bytes(n);
error = (len < 1) || (len > mod_len);
diff = mod_len - len;
}
if (error == 0)
{
BN_bn2bin(my_key->n, (tui8 *)lmod);
BN_bn2bin(n, (tui8 *)(lmod + diff));
ssl_reverse_it(lmod, mod_len);
}
if (error == 0)
{
len = BN_num_bytes(my_key->d);
error = len != pri_len;
len = BN_num_bytes(d);
error = (len < 1) || (len > pri_len);
diff = pri_len - len;
}
if (error == 0)
{
BN_bn2bin(my_key->d, (tui8 *)lpri);
BN_bn2bin(d, (tui8 *)(lpri + diff));
ssl_reverse_it(lpri, pri_len);
}
@ -552,7 +585,7 @@ ssl_tls_create(struct trans *trans, const char *key, const char *cert)
/*****************************************************************************/
int APP_CC
ssl_tls_print_error(char *func, SSL *connection, int value)
ssl_tls_print_error(const char *func, SSL *connection, int value)
{
switch (SSL_get_error(connection, value))
{
@ -562,11 +595,7 @@ ssl_tls_print_error(char *func, SSL *connection, int value)
return 1;
case SSL_ERROR_WANT_READ:
g_writeln("ssl_tls_print_error: SSL_ERROR_WANT_READ");
return 0;
case SSL_ERROR_WANT_WRITE:
g_writeln("ssl_tls_print_error: SSL_ERROR_WANT_WRITE");
return 0;
case SSL_ERROR_SYSCALL:
@ -586,18 +615,22 @@ ssl_tls_print_error(char *func, SSL *connection, int value)
/*****************************************************************************/
int APP_CC
ssl_tls_accept(struct ssl_tls *self)
ssl_tls_accept(struct ssl_tls *self, int disableSSLv3,
const char *tls_ciphers)
{
int connection_status;
long options = 0;
/**
* SSL_OP_NO_SSLv2:
*
* We only want SSLv3 and TLSv1, so disable SSLv2.
* SSL_OP_NO_SSLv2
* SSLv3 is used by, eg. Microsoft RDC for Mac OS X.
* No SSLv3 if disableSSLv3=yes so only tls used
*/
options |= SSL_OP_NO_SSLv2;
if (disableSSLv3)
{
options |= SSL_OP_NO_SSLv3;
}
#if defined(SSL_OP_NO_COMPRESSION)
/**
@ -634,6 +667,16 @@ ssl_tls_accept(struct ssl_tls *self)
SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER |
SSL_MODE_ENABLE_PARTIAL_WRITE);
SSL_CTX_set_options(self->ctx, options);
if (g_strlen(tls_ciphers) > 1)
{
if (SSL_CTX_set_cipher_list(self->ctx, tls_ciphers) == 0)
{
g_writeln("ssl_tls_accept: invalid cipher options");
return 1;
}
}
SSL_CTX_set_read_ahead(self->ctx, 1);
if (self->ctx == NULL)
@ -669,13 +712,24 @@ ssl_tls_accept(struct ssl_tls *self)
return 1;
}
connection_status = SSL_accept(self->ssl);
while(1) {
connection_status = SSL_accept(self->ssl);
if (connection_status <= 0)
{
if (ssl_tls_print_error("SSL_accept", self->ssl, connection_status))
if (connection_status <= 0)
{
return 1;
if (ssl_tls_print_error("SSL_accept", self->ssl, connection_status))
{
return 1;
}
/**
* retry when SSL_get_error returns:
* SSL_ERROR_WANT_READ
* SSL_ERROR_WANT_WRITE
*/
}
else
{
break;
}
}
@ -709,6 +763,11 @@ ssl_tls_disconnect(struct ssl_tls *self)
{
return 1;
}
/**
* retry when SSL_get_error returns:
* SSL_ERROR_WANT_READ
* SSL_ERROR_WANT_WRITE
*/
}
}
return 0;
@ -737,23 +796,37 @@ int APP_CC
ssl_tls_read(struct ssl_tls *tls, char *data, int length)
{
int status;
int break_flag;
status = SSL_read(tls->ssl, data, length);
while(1) {
status = SSL_read(tls->ssl, data, length);
switch (SSL_get_error(tls->ssl, status))
{
case SSL_ERROR_NONE:
break;
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
status = 0;
break;
default:
ssl_tls_print_error("SSL_read", tls->ssl, status);
status = -1;
switch (SSL_get_error(tls->ssl, status))
{
case SSL_ERROR_NONE:
break_flag = 1;
break;
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
/**
* retry when SSL_get_error returns:
* SSL_ERROR_WANT_READ
* SSL_ERROR_WANT_WRITE
*/
continue;
default:
ssl_tls_print_error("SSL_read", tls->ssl, status);
status = -1;
break_flag = 1;
break;
}
if (break_flag)
{
break;
}
}
if (SSL_pending(tls->ssl) > 0)
@ -769,23 +842,37 @@ int APP_CC
ssl_tls_write(struct ssl_tls *tls, const char *data, int length)
{
int status;
int break_flag;
status = SSL_write(tls->ssl, data, length);
while(1) {
status = SSL_write(tls->ssl, data, length);
switch (SSL_get_error(tls->ssl, status))
{
case SSL_ERROR_NONE:
break;
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
status = 0;
break;
default:
ssl_tls_print_error("SSL_write", tls->ssl, status);
status = -1;
switch (SSL_get_error(tls->ssl, status))
{
case SSL_ERROR_NONE:
break_flag = 1;
break;
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
/**
* retry when SSL_get_error returns:
* SSL_ERROR_WANT_READ
* SSL_ERROR_WANT_WRITE
*/
continue;
default:
ssl_tls_print_error("SSL_write", tls->ssl, status);
status = -1;
break_flag = 1;
break;
}
if (break_flag)
{
break;
}
}
return status;
@ -801,6 +888,6 @@ ssl_tls_can_recv(struct ssl_tls *tls, int sck, int millis)
return 1;
}
g_reset_wait_obj(tls->rwo);
return g_tcp_can_recv(sck, millis);
return g_sck_can_recv(sck, millis);
}

View File

@ -41,7 +41,7 @@ ssl_sha1_info_delete(void* sha1_info);
void APP_CC
ssl_sha1_clear(void* sha1_info);
void APP_CC
ssl_sha1_transform(void* sha1_info, char* data, int len);
ssl_sha1_transform(void* sha1_info, const char *data, int len);
void APP_CC
ssl_sha1_complete(void* sha1_info, char* data);
void* APP_CC
@ -84,8 +84,8 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char* exp, int exp_len,
/* ssl_tls */
struct ssl_tls
{
void *ssl; /* SSL * */
void *ctx; /* SSL_CTX * */
struct ssl_st *ssl; /* SSL * */
struct ssl_ctx_st *ctx; /* SSL_CTX * */
char *cert;
char *key;
struct trans *trans;
@ -96,7 +96,8 @@ struct ssl_tls
struct ssl_tls *APP_CC
ssl_tls_create(struct trans *trans, const char *key, const char *cert);
int APP_CC
ssl_tls_accept(struct ssl_tls *self);
ssl_tls_accept(struct ssl_tls *self, int disableSSLv3,
const char *tls_ciphers);
int APP_CC
ssl_tls_disconnect(struct ssl_tls *self);
void APP_CC

View File

@ -20,6 +20,10 @@
#if defined(_WIN32)
#include <windows.h>
#elif defined(__APPLE__)
#include <pthread.h>
#include <dispatch/dispatch.h>
#include <dispatch/time.h>
#else
#include <pthread.h>
#include <semaphore.h>
@ -159,6 +163,9 @@ tc_sem_create(int init_count)
sem = CreateSemaphore(0, init_count, init_count + 10, 0);
return (tbus)sem;
#elif defined(__APPLE__)
dispatch_semaphore_t sem = dispatch_semaphore_create(init_count);
return (tbus)sem;
#else
sem_t *sem = (sem_t *)NULL;
@ -174,6 +181,8 @@ tc_sem_delete(tbus sem)
{
#if defined(_WIN32)
CloseHandle((HANDLE)sem);
#elif defined(__APPLE__)
dispatch_release((dispatch_semaphore_t)sem);
#else
sem_t *lsem;
@ -190,6 +199,9 @@ tc_sem_dec(tbus sem)
#if defined(_WIN32)
WaitForSingleObject((HANDLE)sem, INFINITE);
return 0;
#elif defined(__APPLE__)
dispatch_semaphore_wait((dispatch_semaphore_t)sem, DISPATCH_TIME_FOREVER);
return 0;
#else
sem_wait((sem_t *)sem);
return 0;
@ -203,6 +215,9 @@ tc_sem_inc(tbus sem)
#if defined(_WIN32)
ReleaseSemaphore((HANDLE)sem, 1, 0);
return 0;
#elif defined(__APPLE__)
dispatch_semaphore_signal((dispatch_semaphore_t)sem);
return 0;
#else
sem_post((sem_t *)sem);
return 0;

View File

@ -24,9 +24,11 @@
#include "parse.h"
#include "ssl_calls.h"
#define MAX_SBYTES 0
/*****************************************************************************/
int APP_CC
trans_tls_recv(struct trans *self, void *ptr, int len)
trans_tls_recv(struct trans *self, char *ptr, int len)
{
if (self->tls == NULL)
{
@ -37,7 +39,7 @@ trans_tls_recv(struct trans *self, void *ptr, int len)
/*****************************************************************************/
int APP_CC
trans_tls_send(struct trans *self, const void *data, int len)
trans_tls_send(struct trans *self, const char *data, int len)
{
if (self->tls == NULL)
{
@ -59,14 +61,14 @@ trans_tls_can_recv(struct trans *self, int sck, int millis)
/*****************************************************************************/
int APP_CC
trans_tcp_recv(struct trans *self, void *ptr, int len)
trans_tcp_recv(struct trans *self, char *ptr, int len)
{
return g_tcp_recv(self->sck, ptr, len, 0);
}
/*****************************************************************************/
int APP_CC
trans_tcp_send(struct trans *self, const void *data, int len)
trans_tcp_send(struct trans *self, const char *data, int len)
{
return g_tcp_send(self->sck, data, len, 0);
}
@ -75,7 +77,7 @@ trans_tcp_send(struct trans *self, const void *data, int len)
int APP_CC
trans_tcp_can_recv(struct trans *self, int sck, int millis)
{
return g_tcp_can_recv(sck, millis);
return g_sck_can_recv(sck, millis);
}
/*****************************************************************************/
@ -169,13 +171,29 @@ trans_get_wait_objs(struct trans *self, tbus *objs, int *count)
/*****************************************************************************/
int APP_CC
trans_get_wait_objs_rw(struct trans *self, tbus *robjs, int *rcount,
tbus *wobjs, int *wcount)
tbus *wobjs, int *wcount, int *timeout)
{
if (trans_get_wait_objs(self, robjs, rcount) != 0)
if (self == 0)
{
return 1;
}
if (self->status != TRANS_STATUS_UP)
{
return 1;
}
if ((self->si != 0) && (self->si->source[self->my_source] > MAX_SBYTES))
{
}
else
{
if (trans_get_wait_objs(self, robjs, rcount) != 0)
{
return 1;
}
}
if (self->wait_s != 0)
{
wobjs[*wcount] = self->sck;
@ -187,7 +205,7 @@ trans_get_wait_objs_rw(struct trans *self, tbus *robjs, int *rcount,
/*****************************************************************************/
int APP_CC
send_waiting(struct trans *self, int block)
trans_send_waiting(struct trans *self, int block)
{
struct stream *temp_s;
int bytes;
@ -209,9 +227,13 @@ send_waiting(struct trans *self, int block)
if (sent > 0)
{
temp_s->p += sent;
if (temp_s->source != 0)
{
temp_s->source[0] -= sent;
}
if (temp_s->p >= temp_s->end)
{
self->wait_s = (struct stream *) (temp_s->next_packet);
self->wait_s = temp_s->next;
free_stream(temp_s);
}
}
@ -227,6 +249,18 @@ send_waiting(struct trans *self, int block)
}
}
}
else if (block)
{
/* check for term here */
if (self->is_term != 0)
{
if (self->is_term())
{
/* term */
return 1;
}
}
}
}
else
{
@ -247,6 +281,7 @@ trans_check_wait_objs(struct trans *self)
int to_read = 0;
int read_so_far = 0;
int rv = 0;
int cur_source;
if (self == 0)
{
@ -262,7 +297,7 @@ trans_check_wait_objs(struct trans *self)
if (self->type1 == TRANS_TYPE_LISTENER) /* listening */
{
if (g_tcp_can_recv(self->sck, 0))
if (g_sck_can_recv(self->sck, 0))
{
in_sck = g_sck_accept(self->sck, self->addr, sizeof(self->addr),
self->port, sizeof(self->port));
@ -295,7 +330,7 @@ trans_check_wait_objs(struct trans *self)
sizeof(self->addr) - 1);
g_strncpy(in_trans->port, self->port,
sizeof(self->port) - 1);
g_sck_set_non_blocking(in_sck);
if (self->trans_conn_in(self, in_trans) != 0)
{
trans_delete(in_trans);
@ -310,8 +345,17 @@ trans_check_wait_objs(struct trans *self)
}
else /* connected server or client (2 or 3) */
{
if (self->trans_can_recv(self, self->sck, 0))
if (self->si != 0 && self->si->source[self->my_source] > MAX_SBYTES)
{
}
else if (self->trans_can_recv(self, self->sck, 0))
{
cur_source = 0;
if (self->si != 0)
{
cur_source = self->si->cur_source;
self->si->cur_source = self->my_source;
}
read_so_far = (int) (self->in_s->end - self->in_s->data);
to_read = self->header_size - read_so_far;
@ -329,6 +373,10 @@ trans_check_wait_objs(struct trans *self)
{
/* error */
self->status = TRANS_STATUS_DOWN;
if (self->si != 0)
{
self->si->cur_source = cur_source;
}
return 1;
}
}
@ -336,6 +384,10 @@ trans_check_wait_objs(struct trans *self)
{
/* error */
self->status = TRANS_STATUS_DOWN;
if (self->si != 0)
{
self->si->cur_source = cur_source;
}
return 1;
}
else
@ -357,8 +409,12 @@ trans_check_wait_objs(struct trans *self)
}
}
}
if (self->si != 0)
{
self->si->cur_source = cur_source;
}
}
if (send_waiting(self, 0) != 0)
if (trans_send_waiting(self, 0) != 0)
{
/* error */
self->status = TRANS_STATUS_DOWN;
@ -368,6 +424,7 @@ trans_check_wait_objs(struct trans *self)
return rv;
}
/*****************************************************************************/
int APP_CC
trans_force_read_s(struct trans *self, struct stream *in_s, int size)
@ -378,7 +435,6 @@ trans_force_read_s(struct trans *self, struct stream *in_s, int size)
{
return 1;
}
while (size > 0)
{
/* make sure stream has room */
@ -386,14 +442,12 @@ trans_force_read_s(struct trans *self, struct stream *in_s, int size)
{
return 1;
}
rcvd = self->trans_recv(self, in_s->end, size);
if (rcvd == -1)
{
if (g_tcp_last_error_would_block(self->sck))
{
if (!g_tcp_can_recv(self->sck, 100))
if (!self->trans_can_recv(self, self->sck, 100))
{
/* check for term here */
if (self->is_term != 0)
@ -426,7 +480,6 @@ trans_force_read_s(struct trans *self, struct stream *in_s, int size)
size -= rcvd;
}
}
return 0;
}
@ -449,20 +502,16 @@ trans_force_write_s(struct trans *self, struct stream *out_s)
{
return 1;
}
size = (int) (out_s->end - out_s->data);
total = 0;
if (send_waiting(self, 1) != 0)
if (trans_send_waiting(self, 1) != 0)
{
self->status = TRANS_STATUS_DOWN;
return 1;
}
while (total < size)
{
sent = self->trans_send(self, out_s->data + total, size - total);
if (sent == -1)
{
if (g_tcp_last_error_would_block(self->sck))
@ -499,7 +548,6 @@ trans_force_write_s(struct trans *self, struct stream *out_s)
total = total + sent;
}
}
return 0;
}
@ -512,23 +560,69 @@ trans_force_write(struct trans *self)
/*****************************************************************************/
int APP_CC
trans_write_copy(struct trans *self)
trans_write_copy_s(struct trans *self, struct stream *out_s)
{
int size;
struct stream *out_s;
int sent;
struct stream *wait_s;
struct stream *temp_s;
char *out_data;
if (self->status != TRANS_STATUS_UP)
{
return 1;
}
out_s = self->out_s;
/* try to send any left over */
if (trans_send_waiting(self, 0) != 0)
{
/* error */
self->status = TRANS_STATUS_DOWN;
return 1;
}
out_data = out_s->data;
sent = 0;
size = (int) (out_s->end - out_s->data);
if (self->wait_s == 0)
{
/* if no left over, try to send this new data */
if (g_tcp_can_send(self->sck, 0))
{
sent = self->trans_send(self, out_s->data, size);
if (sent > 0)
{
out_data += sent;
size -= sent;
}
else if (sent == 0)
{
return 1;
}
else
{
if (!g_tcp_last_error_would_block(self->sck))
{
return 1;
}
}
}
}
if (size < 1)
{
return 0;
}
/* did not send right away, have to copy */
make_stream(wait_s);
init_stream(wait_s, size);
out_uint8a(wait_s, out_s->data, size);
if (self->si != 0)
{
if ((self->si->cur_source != 0) &&
(self->si->cur_source != self->my_source))
{
self->si->source[self->si->cur_source] += size;
wait_s->source = self->si->source + self->si->cur_source;
}
}
out_uint8a(wait_s, out_data, size);
s_mark_end(wait_s);
wait_s->p = wait_s->data;
if (self->wait_s == 0)
@ -538,53 +632,110 @@ trans_write_copy(struct trans *self)
else
{
temp_s = self->wait_s;
while (temp_s->next_packet != 0)
while (temp_s->next != 0)
{
temp_s = (struct stream *) (temp_s->next_packet);
temp_s = temp_s->next;
}
temp_s->next_packet = (char *) wait_s;
temp_s->next = wait_s;
}
/* try to send */
if (send_waiting(self, 0) != 0)
{
/* error */
self->status = TRANS_STATUS_DOWN;
return 1;
}
return 0;
}
/*****************************************************************************/
int APP_CC
trans_write_copy(struct trans* self)
{
return trans_write_copy_s(self, self->out_s);
}
/*****************************************************************************/
int APP_CC
trans_connect(struct trans *self, const char *server, const char *port,
int timeout)
{
int error;
int now;
int start_time;
start_time = g_time3();
if (self->sck != 0)
{
g_tcp_close(self->sck);
self->sck = 0;
}
if (self->mode == TRANS_MODE_TCP) /* tcp */
{
self->sck = g_tcp_socket();
if (self->sck < 0)
{
self->status = TRANS_STATUS_DOWN;
return 1;
}
g_tcp_set_non_blocking(self->sck);
error = g_tcp_connect(self->sck, server, port);
while (1)
{
error = g_tcp_connect(self->sck, server, port);
if (error == 0)
{
break;
}
else
{
if (timeout < 1)
{
self->status = TRANS_STATUS_DOWN;
return 1;
}
now = g_time3();
if (now - start_time < timeout)
{
g_sleep(timeout / 5);
}
else
{
self->status = TRANS_STATUS_DOWN;
return 1;
}
}
}
}
else if (self->mode == TRANS_MODE_UNIX) /* unix socket */
{
self->sck = g_tcp_local_socket();
if (self->sck < 0)
{
self->status = TRANS_STATUS_DOWN;
return 1;
}
g_tcp_set_non_blocking(self->sck);
error = g_tcp_local_connect(self->sck, port);
while (1)
{
error = g_tcp_local_connect(self->sck, port);
if (error == 0)
{
break;
}
else
{
if (timeout < 1)
{
self->status = TRANS_STATUS_DOWN;
return 1;
}
now = g_time3();
if (now - start_time < timeout)
{
g_sleep(timeout / 5);
}
else
{
self->status = TRANS_STATUS_DOWN;
return 1;
}
}
}
}
else
{
@ -596,6 +747,15 @@ trans_connect(struct trans *self, const char *server, const char *port,
{
if (g_tcp_last_error_would_block(self->sck))
{
now = g_time3();
if (now - start_time < timeout)
{
timeout = timeout - (now - start_time);
}
else
{
timeout = 0;
}
if (g_tcp_can_send(self->sck, timeout))
{
self->status = TRANS_STATUS_UP; /* ok */
@ -717,10 +877,12 @@ trans_get_out_s(struct trans *self, int size)
return rv;
}
/*****************************************************************************/
/* returns error */
int APP_CC
trans_set_tls_mode(struct trans *self, const char *key, const char *cert)
trans_set_tls_mode(struct trans *self, const char *key, const char *cert,
int disableSSLv3, const char *tls_ciphers)
{
self->tls = ssl_tls_create(self, key, cert);
if (self->tls == NULL)
@ -729,7 +891,7 @@ trans_set_tls_mode(struct trans *self, const char *key, const char *cert)
return 1;
}
if (ssl_tls_accept(self->tls) != 0)
if (ssl_tls_accept(self->tls, disableSSLv3, tls_ciphers) != 0)
{
g_writeln("trans_set_tls_mode: ssl_tls_accept failed");
return 1;
@ -742,6 +904,7 @@ trans_set_tls_mode(struct trans *self, const char *key, const char *cert)
return 0;
}
/*****************************************************************************/
/* returns error */
int APP_CC

View File

@ -41,10 +41,24 @@ typedef int (DEFAULT_CC *ttrans_data_in)(struct trans* self);
typedef int (DEFAULT_CC *ttrans_conn_in)(struct trans* self,
struct trans* new_self);
typedef int (DEFAULT_CC *tis_term)(void);
typedef int (APP_CC *trans_recv_proc) (struct trans *self, void *ptr, int len);
typedef int (APP_CC *trans_send_proc) (struct trans *self, const void *data, int len);
typedef int (APP_CC *trans_recv_proc) (struct trans *self, char *ptr, int len);
typedef int (APP_CC *trans_send_proc) (struct trans *self, const char *data, int len);
typedef int (APP_CC *trans_can_recv_proc) (struct trans *self, int sck, int millis);
/* optional source info */
#define XRDP_SOURCE_NONE 0
#define XRDP_SOURCE_CLIENT 1
#define XRDP_SOURCE_SESMAN 2
#define XRDP_SOURCE_CHANSRV 3
#define XRDP_SOURCE_MOD 4
struct source_info
{
int cur_source;
int source[7];
};
struct trans
{
tbus sck; /* socket handle */
@ -68,6 +82,8 @@ struct trans
trans_recv_proc trans_recv;
trans_send_proc trans_send;
trans_can_recv_proc trans_can_recv;
struct source_info *si;
int my_source;
};
struct trans* APP_CC
@ -79,7 +95,7 @@ trans_get_wait_objs(struct trans* self, tbus* objs, int* count);
int APP_CC
trans_get_wait_objs_rw(struct trans *self,
tbus *robjs, int *rcount,
tbus *wobjs, int *wcount);
tbus *wobjs, int *wcount, int *timeout);
int APP_CC
trans_check_wait_objs(struct trans* self);
int APP_CC
@ -93,6 +109,8 @@ trans_force_write(struct trans* self);
int APP_CC
trans_write_copy(struct trans* self);
int APP_CC
trans_write_copy_s(struct trans* self, struct stream* out_s);
int APP_CC
trans_connect(struct trans* self, const char* server, const char* port,
int timeout);
int APP_CC
@ -104,7 +122,8 @@ trans_get_in_s(struct trans* self);
struct stream* APP_CC
trans_get_out_s(struct trans* self, int size);
int APP_CC
trans_set_tls_mode(struct trans *self, const char *key, const char *cert);
trans_set_tls_mode(struct trans *self, const char *key, const char *cert,
int disableSSLv3, const char *tls_ciphers);
int APP_CC
trans_shutdown_tls_mode(struct trans *self);
int APP_CC

View File

@ -110,6 +110,7 @@ struct xrdp_client_info
int multimon; /* 0 = deny , 1 = allow */
int monitorCount; /* number of monitors detected (max = 16) */
struct monitor_info minfo[16]; /* client monitor data */
struct monitor_info minfo_wm[16]; /* client monitor data, non-negative values */
int keyboard_type;
int keyboard_subtype;
@ -134,6 +135,21 @@ struct xrdp_client_info
char variant[16];
char options[256];
/* codec */
int h264_codec_id;
int h264_prop_len;
char h264_prop[64];
int use_frame_acks;
int max_unacknowledged_frame_count;
int disableSSLv3; /* 0 = no, 1 = yes */
char tls_ciphers[64];
int client_os_major;
int client_os_minor;
int no_orders_supported;
};
#endif

View File

@ -160,6 +160,7 @@
#define RDP_INPUT_CODEPOINT 1
#define RDP_INPUT_VIRTKEY 2
#define RDP_INPUT_SCANCODE 4
#define RDP_INPUT_UNICODE 5
#define RDP_INPUT_MOUSE 0x8001
#define RDP_INPUT_MOUSEX 0x8002
@ -217,8 +218,25 @@
/* RDP capabilities */
#define RDP_CAPSET_GENERAL 1
#define RDP_CAPLEN_GENERAL 0x18
#define OS_MAJOR_TYPE_UNIX 4
#define OS_MINOR_TYPE_XSERVER 7
#define OSMAJORTYPE_UNSPECIFIED 0x0000
#define OSMAJORTYPE_WINDOWS 0x0001
#define OSMAJORTYPE_OS2 0x0002
#define OSMAJORTYPE_MACINTOSH 0x0003
#define OSMAJORTYPE_UNIX 0x0004
#define OSMAJORTYPE_IOS 0x0005
#define OSMAJORTYPE_OSX 0x0006
#define OSMAJORTYPE_ANDROID 0x0007
#define OSMAJORTYPE_CHROME_OS 0x0008
#define OSMINORTYPE_UNSPECIFIED 0x0000
#define OSMINORTYPE_WINDOWS_31X 0x0001
#define OSMINORTYPE_WINDOWS_95 0x0002
#define OSMINORTYPE_WINDOWS_NT 0x0003
#define OSMINORTYPE_OS2_V21 0x0004
#define OSMINORTYPE_POWER_PC 0x0005
#define OSMINORTYPE_MACINTOSH 0x0006
#define OSMINORTYPE_NATIVE_XSERVER 0x0007
#define OSMINORTYPE_PSEUDO_XSERVER 0x0008
#define OSMINORTYPE_WINDOWS_RT 0x0009
#define RDP_CAPSET_BITMAP 2
#define RDP_CAPLEN_BITMAP 0x1C
@ -266,6 +284,24 @@
#define RDP_CAPSET_VIRCHAN 20
#define RDP_CAPLEN_VIRCHAN 0x08
#define RDP_CAPSET_MULTIFRAGMENT 0x001A
#define RDP_CAPLEN_MULTIFRAGMENT 0x08
#define RDP_CAPSET_FRAME_ACKNOWLEDGE 0x001E
#define RDP_CAPLEN_FRAME_ACKNOWLEDGE 0x08
#define RDP_CAPSET_SURFCMDS 0x1C
#define RDP_CAPLEN_SURFCMDS 0x0C
#define RDP_CAPSET_BMPCODECS 0x1D
#define RDP_CAPLEN_BMPCODECS 0x1C
#define RDP_CAPSET_COMPDESK 0x19
#define RDP_CAPLEN_COMPDESK 0x06
#define RDP_CAPSET_LPOINTER 0x1B
#define RDP_CAPLEN_LPOINTER 0x06
#define RDP_SOURCE "MSTSC"
/* Logon flags */
@ -459,6 +495,40 @@
#define XR_ORDERFLAGS_EX_ALTSEC_FRAME_MARKER_SUPPORT 0x0004
#define XR_ORDERFLAGS_EX_OFFSCREEN_COMPOSITE_SUPPORT 0x0100
/* orders negotiation indexes */
#define TS_NEG_DSTBLT_INDEX 0x00
#define TS_NEG_PATBLT_INDEX 0x01
#define TS_NEG_SCRBLT_INDEX 0x02
#define TS_NEG_MEMBLT_INDEX 0x03
#define TS_NEG_MEM3BLT_INDEX 0x04
/* 0x05 */
/* 0x06 */
#define TS_NEG_DRAWNINEGRID_INDEX 0x07
#define TS_NEG_LINETO_INDEX 0x08
#define TS_NEG_MULTI_DRAWNINEGRID_INDEX 0x09
/* 0x0A */
#define TS_NEG_SAVEBITMAP_INDEX 0x0B
/* 0x0C */
/* 0x0D */
/* 0x0E */
#define TS_NEG_MULTIDSTBLT_INDEX 0x0F
#define TS_NEG_MULTIPATBLT_INDEX 0x10
#define TS_NEG_MULTISCRBLT_INDEX 0x11
#define TS_NEG_MULTIOPAQUERECT_INDEX 0x12
#define TS_NEG_FAST_INDEX_INDEX 0x13
#define TS_NEG_POLYGON_SC_INDEX 0x14
#define TS_NEG_POLYGON_CB_INDEX 0x15
#define TS_NEG_POLYLINE_INDEX 0x16
/* 0x17 */
#define TS_NEG_FAST_GLYPH_INDEX 0x18
#define TS_NEG_ELLIPSE_SC_INDEX 0x19
#define TS_NEG_ELLIPSE_CB_INDEX 0x1A
#define TS_NEG_INDEX_INDEX 0x1B
/* 0x1C */
/* 0x1D */
/* 0x1E */
/* 0x1F */
/* drawable types */
#define WND_TYPE_BITMAP 0
#define WND_TYPE_WND 1
@ -499,29 +569,13 @@
#define CB_ITEMCHANGE 300
#define OSMAJORTYPE_UNSPECIFIED 0x0000
#define OSMAJORTYPE_WINDOWS 0x0001
#define OSMAJORTYPE_OS2 0x0002
#define OSMAJORTYPE_MACINTOSH 0x0003
#define OSMAJORTYPE_UNIX 0x0004
#define OSMINORTYPE_UNSPECIFIED 0x0000
#define OSMINORTYPE_WINDOWS_31X 0x0001
#define TS_OSMINORTYPE_WINDOWS_95 0x0002
#define TS_OSMINORTYPE_WINDOWS_NT 0x0003
#define TS_OSMINORTYPE_OS2_V21 0x0004
#define TS_OSMINORTYPE_POWER_PC 0x0005
#define TS_OSMINORTYPE_MACINTOSH 0x0006
#define TS_OSMINORTYPE_NATIVE_XSERVER 0x0007
#define TS_OSMINORTYPE_PSEUDO_XSERVER 0x0008
#define TS_CAPS_PROTOCOLVERSION 0x0200
#define FASTPATH_OUTPUT_SUPPORTED 0x0001
#define NO_BITMAP_COMPRESSION_HDR 0x0400
#define LONG_CREDENTIALS_SUPPORTED 0x0004
#define AUTORECONNECT_SUPPORTED 0x0008
#define ENC_SALTED_CHEKSUM 0x0010
#define ENC_SALTED_CHECKSUM 0x0010
#define NEGOTIATEORDERSUPPORT 0x0002
#define ZEROBOUNDSDELTASUPPORT 0x0008
#define COLORINDEXSUPPORT 0x0020
@ -537,34 +591,33 @@
#define COMPDESK_NOT_SUPPORTED 0x0000
#define COMPDESK_SUPPORTED 0x0001
#define SURCMDS_SETSURFACEBITS 0x00000002
#define SURCMDS_FRAMEMARKER 0x00000010
#define SURCMDS_STREAMSUFRACEBITS 0x00000040
#define SURFCMDS_SETSURFACEBITS 0x00000002
#define SURFCMDS_FRAMEMARKER 0x00000010
#define SURFCMDS_STREAMSUFRACEBITS 0x00000040
/* CODEC_GUID_NSCODEC 0xCA8D1BB9000F154F589FAE2D1A87E2D6 */
/* CODEC_GUID_NSCODEC CA8D1BB9-000F-154F-589FAE2D1A87E2D6 */
#define XR_CODEC_GUID_NSCODEC \
"\xb9\x1b\x8d\xca\x0f\x00\x4f\x15\x58\x9f\xae\x2d\x1a\x87\xe2\xd6"
/* CODEC_GUID_REMOTEFX 0x76772F12BD724463AFB3B73C9C6F7886 */
/* CODEC_GUID_REMOTEFX 76772F12-BD72-4463-AFB3B73C9C6F7886 */
#define XR_CODEC_GUID_REMOTEFX \
"\x12\x2F\x77\x76\x72\xBD\x63\x44\xAF\xB3\xB7\x3C\x9C\x6F\x78\x86"
/* CODEC_GUID_JPEG 0x1BAF4CE6 9EED 430C 869ACB8B37B66237 */
/* CODEC_GUID_IMAGE_REMOTEFX 2744CCD4-9D8A-4E74-803C-0ECBEEA19C54 */
#define XR_CODEC_GUID_IMAGE_REMOTEFX \
"\xD4\xCC\x44\x27\x8A\x9D\x74\x4E\x80\x3C\x0E\xCB\xEE\xA1\x9C\x54"
/* CODEC_GUID_JPEG 1BAF4CE6-9EED-430C-869ACB8B37B66237 */
#define XR_CODEC_GUID_JPEG \
"\xE6\x4C\xAF\x1B\xED\x9E\x0C\x43\x86\x9A\xCB\x8B\x37\xB6\x62\x37"
/* CODEC_GUID_PNG 0xOE0C858D 28E0 45DB ADAA0F83E57CC560 */
/* CODEC_GUID_PNG 0E0C858D-28E0-45DB-ADAA0F83E57CC560 */
#define XR_CODEC_GUID_PNG \
"\x8D\x85\x0C\x0E\xE0\x28\xDB\x45\xAD\xAA\x0F\x83\xE5\x7C\xC5\x60"
#define RDP_CAPSET_SURFCMDS 0x1c
#define RDP_CAPLEN_SURFCMDS 0x0c
#define RDP_CAPSET_BMPCODECS 0x1d
#define RDP_CAPLEN_BMPCODECS 0x1c
#define RDP_CAPSET_COMPDESK 0x19
#define RDP_CAPLEN_COMPDESK 0x06
#define RDP_CAPSET_LPOINTER 0x27
#define RDP_CAPLEN_LPOINTER 0x06
/* MFVideoFormat_H264 0x34363248-0000-0010-800000AA00389B71 */
#define XR_CODEC_GUID_H264 \
"\x48\x32\x36\x34\x00\x00\x10\x00\x80\x00\x00\xAA\x00\x38\x9B\x71"
/* fastpath input */
#define FASTPATH_INPUT_SECURE_CHECKSUM 0x1
@ -617,4 +670,10 @@
#define XRDP_MAX_BITMAP_CACHE_IDX 2000
#define XRDP_BITMAP_CACHE_ENTRIES 2048
#define XR_MIN_KEY_CODE 8
#define XR_MAX_KEY_CODE 256
#define XR_RDP_SCAN_LSHIFT 42
#define XR_RDP_SCAN_ALT 56
#endif

View File

@ -1,13 +1,45 @@
# Process this file with autoconf to produce a configure script
AC_PREREQ(2.59)
AC_INIT([xrdp], [0.9.0], [xrdp-devel@lists.sourceforge.net])
AC_PREREQ(2.65)
AC_INIT([xrdp], [0.9.1], [xrdp-devel@googlegroups.com])
AC_CONFIG_HEADERS(config_ac.h:config_ac-h.in)
AM_INIT_AUTOMAKE([1.6 foreign])
AM_INIT_AUTOMAKE([1.7.2 foreign])
AC_CONFIG_MACRO_DIR([m4])
AC_PROG_CC
AC_C_CONST
AC_PROG_LIBTOOL
PKG_PROG_PKG_CONFIG
AC_CONFIG_SUBDIRS([libpainter librfxcodec])
# Use silent rules by default if supported by Automake
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AX_CFLAGS_WARN_ALL
AX_APPEND_COMPILE_FLAGS([-Wwrite-strings])
AX_GCC_FUNC_ATTRIBUTE([format])
AX_TYPE_SOCKLEN_T
case $host_os in
*linux*)
linux=yes
;;
*freebsd*)
freebsd=yes
;;
*netbsd*)
netbsd=yes
;;
*openbsd*)
openbsd=yes
;;
esac
AM_CONDITIONAL(LINUX, [test "x$linux" = xyes])
AM_CONDITIONAL(FREEBSD, [test "x$freebsd" = xyes])
AM_CONDITIONAL(OPENBSD, [test "x$openbsd" = xyes])
AM_CONDITIONAL(NETBSD, [test "x$netbsd" = xyes])
AC_ARG_WITH([systemdsystemunitdir],
AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
[], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
@ -29,6 +61,12 @@ AC_ARG_ENABLE(nopam, AS_HELP_STRING([--enable-nopam],
fi
])
AM_CONDITIONAL(SESMAN_NOPAM, [test x$enable_pam != xyes])
AC_ARG_ENABLE(ipv6, AS_HELP_STRING([--enable-ipv6],
[Build IPv6 support (default: no, experimental)]),
[], [enable_ipv6=no])
AC_ARG_ENABLE(ipv6only, AS_HELP_STRING([--enable-ipv6only],
[Build IPv6-only (default: no)]),
[], [enable_ipv6only=no])
AC_ARG_ENABLE(kerberos, AS_HELP_STRING([--enable-kerberos],
[Build kerberos support (default: no)]),
[], [enable_kerberos=no])
@ -69,13 +107,48 @@ AC_ARG_ENABLE(rfxcodec, AS_HELP_STRING([--enable-rfxcodec],
[Build using librfxcodec (default: no)]),
[], [enable_rfxcodec=no])
AM_CONDITIONAL(XRDP_RFXCODEC, [test x$enable_rfxcodec = xyes])
AC_ARG_ENABLE(opus, AS_HELP_STRING([--enable-opus],
[Build opus(audio codec) (default: no)]),
[], [enable_opus=no])
AM_CONDITIONAL(XRDP_OPUS, [test x$enable_opus = xyes])
AC_ARG_ENABLE(mp3lame, AS_HELP_STRING([--enable-mp3lame],
[Build lame mp3(audio codec) (default: no)]),
[], [enable_mp3lame=no])
AM_CONDITIONAL(XRDP_MP3LAME, [test x$enable_mp3lame = xyes])
AC_ARG_ENABLE(pixman, AS_HELP_STRING([--enable-pixman],
[Use pixman library (default: no)]),
[], [enable_pixman=no])
AM_CONDITIONAL(XRDP_PIXMAN, [test x$enable_pixman = xyes])
AM_CONDITIONAL(XRDP_PAINTER, [test x$enable_painter = xyes])
AC_ARG_ENABLE(painter, AS_HELP_STRING([--enable-painter],
[Use painter library (default: no)]),
[], [enable_painter=no])
AM_CONDITIONAL(XRDP_PAINTER, [test x$enable_painter = xyes])
AM_CONDITIONAL(GOT_PREFIX, test "x${prefix}" != "xNONE"])
# Don't fail without working nasm if rfxcodec is not enabled
if test "x$enable_rfxcodec" != xyes; then
with_simd=no
export with_simd
fi
# Check if -ldl is needed to use dlopen()
DLOPEN_LIBS=
AC_CHECK_FUNC(dlopen, [],
[AC_CHECK_LIB(dl, dlopen, [DLOPEN_LIBS=-ldl])])
AC_SUBST(DLOPEN_LIBS)
# checking for openssl
AC_CHECK_HEADER([openssl/rc4.h], [],
[AC_MSG_ERROR([please install libssl-dev or openssl-devel])],
[#include <stdlib.h>])
PKG_CHECK_MODULES([OPENSSL], [openssl >= 0], [],
[AC_MSG_ERROR([please install libssl-dev or openssl-devel])])
# checking for pam variation
# Linux-PAM is used in Linux systems
# OpenPAM is used by FreeBSD, NetBSD, DragonFly BSD and OS X
# OpenBSD uses BSD Authentication rather than both PAMs
AC_CHECK_HEADER([security/_pam_types.h],
[AC_DEFINE([HAVE__PAM_TYPES_H], 1, [Using Linux-PAM], [])])
AC_CHECK_HEADER([security/pam_constants.h],
[AC_DEFINE([HAVE_PAM_CONSTANTS_H], 1, [Using OpenPAM], [])])
# checking if pam should be autodetected.
if test "x$enable_pam" = "xyes"
@ -90,10 +163,16 @@ then
fi
fi
AC_CHECK_MEMBER([struct in6_addr.s6_addr],
[],
[AC_DEFINE(NO_ARPA_INET_H_IP6, 1, [for IPv6])],
[#include <arpa/inet.h>])
if test "x$enable_ipv6only" = "xyes"
then
enable_ipv6=yes
AC_DEFINE([XRDP_ENABLE_IPV6ONLY],1,[Enable IPv6 only])
fi
if test "x$enable_ipv6" = "xyes"
then
AC_DEFINE([XRDP_ENABLE_IPV6],1,[Enable IPv6])
fi
if test "x$enable_pam" != "xyes" || test "x$bsd" = "xtrue"
then
@ -117,11 +196,26 @@ fi
# checking for fuse
if test "x$enable_fuse" = "xyes"
then
AC_CHECK_HEADER([fuse.h], [],
[AC_MSG_ERROR([please install libfuse-dev or fuse-devel])],
[#define _FILE_OFFSET_BITS 64])
PKG_CHECK_MODULES([FUSE], [fuse >= 2.6], [],
[AC_MSG_ERROR([please install libfuse-dev or fuse-devel])])
fi
# checking for opus
if test "x$enable_opus" = "xyes"
then
AC_CHECK_HEADER([opus/opus.h], [],
[AC_MSG_ERROR([please install libopus-dev or opus-devel])])
fi
# checking for lame mp3
if test "x$enable_mp3lame" = "xyes"
then
AC_CHECK_HEADER([lame/lame.h], [],
[AC_MSG_ERROR([please install libmp3lame-dev or lamemp3-devel])])
fi
AS_IF( [test "x$enable_pixman" = "xyes"] , [PKG_CHECK_MODULES(PIXMAN, pixman-1 >= 0.1.0)] )
# checking for TurboJPEG
if test "x$enable_tjpeg" = "xyes"
then
@ -152,54 +246,67 @@ else
fi
fi
# checking for Xlib, Xfixes
AC_CHECK_HEADER([X11/Xlib.h], [],
[AC_MSG_ERROR([please install libx11-dev or libX11-devel])])
AC_PATH_XTRA
if test "x$no_x" == "xyes"; then
AC_MSG_ERROR([please install libx11-dev or libX11-devel])
fi
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $X_CFLAGS"
# checking for Xfixes
AC_CHECK_HEADER([X11/extensions/Xfixes.h], [],
[AC_MSG_ERROR([please install libx11-dev and libxfixes-dev or libXfixes-devel])],
[#include <X11/Xlib.h>])
# checking for Xrandr
AC_CHECK_HEADER([X11/extensions/Xrandr.h], [],
[AC_MSG_ERROR([please install libxrandr-dev or libXrandr-devel])],
[#include <X11/Xlib.h>])
libdir="${libdir}/xrdp";
CFLAGS="$save_CFLAGS"
AC_SUBST([moduledir], '${libdir}/xrdp')
if test "x${prefix}" = "xNONE" ; then
sysconfdir="/etc";
localstatedir="/var";
fi
AC_CONFIG_FILES([Makefile
common/Makefile
vnc/Makefile
rdp/Makefile
libxrdp/Makefile
xup/Makefile
mc/Makefile
neutrinordp/Makefile
xrdp/Makefile
sesman/Makefile
sesman/libscp/Makefile
sesman/tools/Makefile
sesman/sessvc/Makefile
sesman/chansrv/Makefile
keygen/Makefile
docs/Makefile
docs/man/Makefile
instfiles/Makefile
instfiles/pam.d/Makefile
instfiles/init.d/Makefile
instfiles/default/Makefile
instfiles/pulse/Makefile
genkeymap/Makefile
xrdpapi/Makefile
xrdpvr/Makefile
])
# fontdump/Makefile
# xrdp/cursors/Makefile
# Xserver/hw/rdp/Makefile
AC_OUTPUT
# example of how to check for a struct in a header
#AC_CHECK_MEMBER([struct in6_addr.s6_addr],
# [],
# [AC_DEFINE(NO_ARPA_INET_H_IP6, 1, [for IPv6])],
# [#include <arpa/inet.h>])
PKG_INSTALLDIR
AC_CHECK_HEADERS([sys/prctl.h])
AC_CONFIG_FILES([
common/Makefile
docs/Makefile
docs/man/Makefile
genkeymap/Makefile
instfiles/default/Makefile
instfiles/init.d/Makefile
instfiles/Makefile
instfiles/pam.d/Makefile
instfiles/pulse/Makefile
instfiles/rc.d/Makefile
keygen/Makefile
libxrdp/Makefile
Makefile
mc/Makefile
neutrinordp/Makefile
pkgconfig/Makefile
pkgconfig/xrdp.pc
pkgconfig/xrdp-uninstalled.pc
rdp/Makefile
sesman/chansrv/Makefile
sesman/libscp/Makefile
sesman/Makefile
sesman/sessvc/Makefile
sesman/tools/Makefile
vnc/Makefile
xrdpapi/Makefile
xrdp/Makefile
xrdpvr/Makefile
xup/Makefile
])
AC_OUTPUT

View File

@ -31,5 +31,5 @@ is lost, the session remains.
For X11, start the XServer after the user is
authenticated. First check for the next available X11 display,
create a user session, start the XServer and set the DISPLAY enviromenet
create a user session, start the XServer and set the DISPLAY environment
variable.

View File

@ -1,4 +1,4 @@
man_MANS = \
dist_man_MANS = \
xrdp-dis.1 \
sesman.ini.5 \
xrdp.ini.5 \
@ -14,4 +14,4 @@ man_MANS = \
noinst_man_MANS = \
xrdp-xcon.8
EXTRA_DIST = $(man_MANS) $(noinst_man_MANS)
EXTRA_DIST = $(noinst_man_MANS)

View File

@ -1,206 +1,225 @@
.\"
.TH "sesman.ini" "5" "0.1.0" "xrdp team" ""
.\"
.TH "sesman.ini" "5" "0.9.1" "xrdp team" ""
.SH "NAME"
\fBsesman.ini\fR \- Configuration file for \fBsesman\fR(8)
\fBsesman.ini\fR \- Configuration file for \fBxrdp-sesman\fR(8)
.SH "DESCRIPTION"
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.
\fBsesman.ini\fR consists of several sections. Each section starts with
the section name in square brackets, followed by a list of
\fIparameter\fR=\fIvalue\fR lines. Following sections are recognized:
\fBsesman.ini\fR supports the following sections:
.TP
\fB[Globals]\fR
Global configuration
.TP
\fB[Globals]\fR \- sesman global configuration section,
.TP
\fB[Logging]\fR
Logging subsystem
.TP
\fB[Logging]\fR \- logging subsystem parameters
.TP
\fB[Sessions]\fR
Session management
.TP
\fB[Security]\fR \- Access control parameters
.TP
\fB[Security]\fR
Access control
.TP
\fB[Sessions]\fR \- Session management parameters
.TP
\fB[X11rdp]\fR, \fB[Xvnc]\fR, \fB[Xorg]\fR
X11 server settings for supported servers
.LP
All options and values (except for file names and paths) are case insensitive, and are described in detail below.
.TP
\fB[Chansrv]\fR
Settings for xrdp-chansrv(8)
.LP
For any of the following parameter, if it's specified more than one time the last entry encountered will be used.
.TP
\fB[SessionVariables]\fR
Environment variables for the session
\fBNOTE\fR: if any of these options is specified outside its section, it will be \fIignored\fR.
.LP
All parameters and values (except for file names and paths) are case
insensitive, and are described in detail below. If any parameter is
specified more than once, the last entry will be used. Options specified
outside their proper section will be \fIignored\fR.
.SH "GLOBALS"
The options to be specified in the \fB[globals]\fR section are the following:
Following parameters can be used in the \fB[Globals]\fR section.
.TP
.TP
\fBListenAddress\fR=\fIip address\fR
Specifies sesman listening address. Default is 0.0.0.0 (all interfaces)
xrdp-sesman listening address. If not specified, defaults to \fI0.0.0.0\fR
(all interfaces).
.TP
.TP
\fBListenPort\fR=\fIport number\fR
Specifies sesman listening port. Default is 3350
xrdp-sesman listening port. If not specified, defaults to \fI3350\fR.
.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
.TP
\fBEnableUserWindowManager\fR=\fI[true|false]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, this option enables user
specific startup script. That is, xrdp-sesman will execute the script
specified by \fBUserWindowManager\fR if it exists.
.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
.TP
\fBUserWindowManager\fR=\fIfilename\fR
Name of the startup script relative to the user's home directory. If
present and enabled by \fBEnableUserWindowManager\fR, that script is
executed instead of \fBDefaultWindowManager\fR.
.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
.TP
\fBDefaultWindowManager\fR=\fIfilename\fR
Full path to the default startup script used by xrdp-sesman to start a
session if the user script is disabled or missing.
.SH "LOGGING"
The following parameters can be used in the \fB[logging]\fR section:
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
\fBLogFile\fR=\fIfilename\fR
Log file path. It can be either absolute or relative. If not specified,
defaults to \fI./sesman.log\fR
.TP
.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.
\fBCORE\fR or \fB0\fR \- Log only core messages. Those messages are
logged \fIregardless\fR of the selected logging level.
\fBERROR\fR or \fB1\fR \- Log only error messages
\fBERROR\fR or \fB1\fR \- Log only error messages.
\fBWARNING\fR, \fBWARN\fR or \fB2\fR \- Logs warnings and 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
\fBINFO\fR or \fB3\fR \- Log 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 "SESSIONS"
The following parameters can be used in the \fB[Sessions]\fR section:
.TP
\fBX11DisplayOffset\fR=\fI<number>\fR
Specifies the first X display number available for \fBsesman\fP(8). This prevents sesman from interfering with real X11 servers. The default is 10.
\fBDEBUG\fR or \fB4\fR \- Log everything. If xrdp-sesman is compiled in
debug mode, this options will output many more low\-level messages.
.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.
\fBEnableSyslog\fR=\fI[true|false]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, this option enables logging to
syslog.
.TP
\fBKillDisconnected\fR=\fI[0|1]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, every session will be killed within 60 seconds when the user disconnects.
.br
.TP
\fBSyslogLevel\fR=\fIlevel\fR
Logging level for syslog. It can have the same values as \fBLogLevel\fR.
If \fBSyslogLevel\fR and \fBLogLevel\fR differ, the least verbose setting
takes effect for syslog.
.TP
\fBIdleTimeLimit\fR=\fI<number>\fR
Sets the the time limit before an idle session is disconnected.
.br
If set to \fI0\fR, automatic disconnection is disabled.
.br
\fI\-this option is currently ignored!\-\fR
.SH "SESSIONS"
Following parameters can be used in the \fB[Sessions]\fR section.
.TP
\fBDisconnectedTimeLimit\fR=\fI<number>\fR
Sets the time(in seconds) limit before a disconnected session is killed.
.br
.TP
\fBX11DisplayOffset\fR=\fInumber\fR
The first X display number available for xrdp-sesman. This prevents
xrdp-sesman from interfering with real X11 servers. If not specified,
defaults to \fI10\fR.
.TP
\fBMaxSessions\fR=\fInumber\fR
Sets the maximum number of simultaneous sessions. If not set or set to
\fI0\fR, unlimited session are allowed.
.TP
\fBKillDisconnected\fR=\fI[true|false]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, every session will be killed
within 60 seconds after the user disconnects.
.TP
\fBIdleTimeLimit\fR=\fInumber\fR
\fI\This option is currently ignored!\fR Time limit before an idle
session is disconnected. If set to \fI0\fR, automatic disconnection is
disabled.
.TP
\fBDisconnectedTimeLimit\fR=\fInumber\fR
Sets the time limit (in seconds) before a disconnected session is killed.
If set to \fI0\fR, automatic killing is disabled.
.br
.TP
.TP
\fBPolicy\fR=\fI[Default|UBD|UBI|UBC|UBDI|UBDC]\fR
Session allocation policy. By Default, a new session is created
for the combination <User,BitPerPixel> when using Xrdp, and
Session allocation policy. By default, a new session is created
for the combination <User,BitPerPixel> when using Xrdp, and
for the combination <User,BitPerPixel,DisplaySize> when using Xvnc.
This behaviour can be changed by setting session policy to:
This behavior can be changed by setting session policy to:
.br
.br
.br
\fBUBD\fR - session per <User,BitPerPixel,DisplaySize>
.br
.br
\fBUBI\fR - session per <User,BitPerPixel,IPAddr>
.br
.br
\fBUBC\fR - session per <User,BitPerPixel,Connection>
.br
.br
\fBUBDI\fR - session per <User,BitPerPixel,DisplaySize,IPAddr>
.br
.br
\fBUBDC\fR - session per <User,BitPerPixel,DisplaySize,Connection>
.br
.br
Note that the criteria <User,BitPerPixel> can not be turned off
and <DisplaySize> will always be checkt when for Xvnc connections.
Note that the \fBUser\fR and \fBBitPerPixel\fR criteria cannot be turned
off. For Xvnc connections, \fBDisplaySize\fR is always enabled as well.
.br
.SH "SECURITY"
The following parameters can be used in the \fB[Sessions]\fR section:
Following parameters can be used in the \fB[Security]\fR section.
.TP
\fBAllowRootLogin\fR=\fI[0|1]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR enables root login on the terminal server
.TP
\fBAllowRootLogin\fR=\fI[true|false]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, enables root login on the
terminal server.
.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.
.TP
\fBMaxLoginRetry\fR=\fInumber\fR
The number of login attempts that are allowed on terminal server. If set
to \fI0\fR, unlimited attempts are allowed. If not specified, defaults to
\fI3\fR.
.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.
.TP
\fBTerminalServerUsers\fR=\fIgroup\fR
Only the users belonging to the specified group are allowed to login on
terminal server. If unset or set to an invalid or non\-existent group,
login for all users is enabled.
.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
.TP
\fBTerminalServerAdmins\fR=\fIgroup\fR
\fIThis option is currently ignored!\fR Only members of this group can
have session management rights.
.SH "EXAMPLES"
This is an example \fBsesman.ini\fR:
.TP
\fBAlwaysGroupCheck\fR=\fI[true|false]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, require group membership even
if the group specified in \fBTerminalServerUsers\fR doesn't exist.
.nf
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=1
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
.SH "X11 SERVER"
Following parameters can be used in the \fB[X11rdp]\fR, \fB[Xvnc]\fR and
\fB[Xorg]\fR sections.
[Logging]
LogFile=/usr/local/xrdp/sesman.log
LogLevel=DEBUG
EnableSyslog=0
SyslogLevel=DEBUG
.TP
\fBparam\fR=\fIstring\fR
Multiple \fIparam\fR lines are supported. This first line specifies the
path to the X11 server executable. Following lines specify command line
arguments passed to the X11 server.
[Sessions]
MaxSessions=10
KillDisconnected=0
IdleTimeLimit=0
DisconnectedTimeLimit=0
.SH "CHANSRV"
Following parameters can be used in the \fB[Chansrv]\fR section.
[Security]
AllowRootLogin=1
MaxLoginRetry=3
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
.fi
.TP
\fBFuseMountName\fR=\fIstring\fR
Directory for drive redirection, relative to the user home directory.
Created if it doesn't exist. If not specified, defaults to \fIxrdp_client\fR.
.SH "SESSIONS VARIABLES"
All entries in the \fB[SessionVariables]\fR section are set as
environment variables in the user's session.
.SH "FILES"
${SESMAN_CFG_DIR}/sesman.ini
/etc/xrdp/sesman.ini
.SH "SEE ALSO"
.BR sesman (8),
.BR sesrun (8),
.BR xrdp-sesman (8),
.BR xrdp-sesrun (8),
.BR xrdp (8),
.BR xrdp.ini (5)
for more info on \fBxrdp\fR see http://xrdp.sf.net
For more info on \fBxrdp\fR see http://www.xrdp.org/

View File

@ -1,4 +1,4 @@
.TH "xrdp\-chansrv" "8" "0.7.0" "xrdp team" ""
.TH "xrdp\-chansrv" "8" "0.9.1" "xrdp team" ""
.SH "NAME"
\fBxrdp\-chansrv\fR \- \fBxrdp\fR channel server
@ -36,11 +36,11 @@ UNIX socket used by external programs to implement channels.
.I /tmp/.xrdp/xrdp_api_*
UNIX socket used by \fBxrdp\-chansrv\fP to communicate with \fBxrdp\-sesman\fP.
.TP
.I $HOME/xrdp-chansrv.log
.I $XDG_DATA_HOME/xrdp/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
for more info on \fBxrdp\fR see http://www.xrdp.org/

View File

@ -1,4 +1,4 @@
.TH "xrdp-dis" "8" "0.7.0" "xrdp team"
.TH "xrdp-dis" "1" "0.9.1" "xrdp team"
.SH NAME
xrdp\-dis \- xrdp disconnect utility
@ -7,7 +7,7 @@ xrdp\-dis \- xrdp disconnect utility
.SH DESCRIPTION
.PP
\fBxrdp\-dix\fP is run with no parameters to disconnect your xrdp session.
\fBxrdp\-dis\fP is run with no parameters to disconnect your xrdp session.
.SH ENVIRONMENT
.TP
@ -19,5 +19,9 @@ to get the default host and display number.
.I /tmp/.xrdp/xrdp_disconnect_display_*
UNIX socket used to communicate with the \fBxrdp\fP(8) session manager.
.SH KNOWN ISSUES
.TP
This utility doesn't support disconnecting xorgxrdp sessions so far.
.SH SEE ALSO
.BR xrdp (1).
.BR xrdp (8).

View File

@ -1,4 +1,4 @@
.TH "xrdp\-genkeymap" "8" "0.1.0" "xrdp team" ""
.TH "xrdp\-genkeymap" "8" "0.9.1" "xrdp team" ""
.de URL
. \\$2 \(laURL: \\$1 \(ra\\$3
..
@ -21,36 +21,36 @@ 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.
.I /etc/xrdp/km-XXXXXXXX.ini
Files containing the keyboard mapping for language \fIXXXXXXXX\fP, which is a 8 digit hexadecimal number identifying the country and language code.
.RS 8
.TP
.B 0405
cs czech
.B 00000405
cs Czech
.TP
.B 0407
de german
.B 00000407
de German
.TP
.B 0409
en-us us english
.B 00000409
en-us US English
.TP
.B 040c
fr french
.B 0000040c
fr French
.TP
.B 0410
it italy
.B 00000410
it Italian
.TP
.B 0416
.B 00000416
br Portuguese (Brazil)
.TP
.B 0419
ru russian
.B 00000419
ru Russian
.TP
.B 041d
se swedish
.B 0000041d
se Swedish
.TP
.B 0809
en-uk uk english
.B 00000809
en-uk UK English
.RE
.SH "AUTHORS"
@ -64,4 +64,4 @@ Simone Fedele <ilsimo@users.sourceforge.net>
.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
for more info on \fBxrdp\fR see http://www.xrdp.org/

View File

@ -1,5 +1,9 @@
.\" Hey, EMACS: -*- nroff -*-
.TH xrdp\-keygen 8 "0.7.0" "xrdp team"
.\"-
.\" Copyright © 2007, 2008 Vincent Bernat <bernat@debian.org>
.\" License: GPL-2+
.\"-
.TH xrdp\-keygen 8 "0.9.1" "xrdp team"
.SH NAME
xrdp\-keygen \- xrdp RSA key generation utility

View File

@ -1,4 +1,4 @@
.TH "xrdp-sesadmin" "8" "0.7.0" "xrdp team"
.TH "xrdp-sesadmin" "8" "0.9.1" "xrdp team"
.SH NAME
xrdp\-sesadmin \- console XRDP sessions administration tool

View File

@ -1,4 +1,4 @@
.TH "xrdp\-sesman" "8" "0.1.0" "xrdp team" ""
.TH "xrdp\-sesman" "8" "0.9.1" "xrdp team" ""
.SH "NAME"
xrdp\-sesman \- \fBxrdp\fR(8) session manager
@ -8,34 +8,34 @@ xrdp\-sesman \- \fBxrdp\fR(8) session manager
.SH "DESCRIPTION"
\fBxrdp\-sesman\fR is \fBxrdp\fR(8) session manager.
.br
It manages user sessions by authenticating the user and starting the appropriate Xserver
.br
It manages user sessions by authenticating the user and starting the appropriate Xserver.
.SH "OPTIONS"
.TP
\fB\-n\fR, \fB\-\-nodaemon\fR
.TP
\fB\-n\fR, \fB\-\-nodaemon\fR
Starts \fBxrdp\-sesman\fR in foreground instead of starting it as a daemon.
.TP
.TP
\fB\-k\fR, \fB\-\-kill\fR
Kills running \fBxrdp\-sesman\fR daemon.
.TP
.TP
\fB\-h\fR, \fB\-\-help\fR
Output help information and exit.
.SH "FILES"
${SESMAN_BIN_DIR}/sesman
.br
.br
${SESMAN_BIN_DIR}/sesrun
.br
.br
${SESMAN_CFG_DIR}/sesman.ini
.br
.br
${SESMAN_LOG_DIR}/sesman.log
.br
.br
${SESMAN_PID_DIR}/sesman.pid
.SH "AUTHORS"
Jay Sorg <jsorg71@users.sourceforge.net>
.br
.br
Simone Fedele <ilsimo@users.sourceforge.net>
.SH "SEE ALSO"
@ -44,4 +44,4 @@ Simone Fedele <ilsimo@users.sourceforge.net>
.BR xrdp (8),
.BR xrdp.ini (5)
for more info on \fBxrdp\fR see http://xrdp.sf.net
for more info on \fBxrdp\fR see http://www.xrdp.org/

View File

@ -1,4 +1,4 @@
.TH "xrdp\-sesrun" "8" "0.7.0" "xrdp team" ""
.TH "xrdp\-sesrun" "8" "0.9.1" "xrdp team" ""
.SH "NAME"
xrdp\-sesrun \- \fBsesman\fR(8) session launcher
@ -8,37 +8,37 @@ xrdp\-sesrun \- \fBsesman\fR(8) session launcher
.SH "DESCRIPTION"
\fBxrdp\-sesrun\fR starts a session using \fBxrdp\-sesman\fR(8).
.br
.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"
.TP
.TP
.I server
Server on which sesman is running
.TP
.TP
.I username
user name of the session being started
.TP
.TP
.I password
user password
.TP
.TP
.I width
Screen width
.TP
.TP
.I height
Screen height
.TP
.TP
.I bpp
Session color depth
.SH "FILES"
${SESMAN_BIN_DIR}/sesman
.br
.br
${SESMAN_BIN_DIR}/sesrun
.SH "AUTHORS"
Jay Sorg <jsorg71@users.sourceforge.net>
.br
.br
Simone Fedele <ilsimo@users.sourceforge.net>
.SH "SEE ALSO"
@ -47,4 +47,4 @@ Simone Fedele <ilsimo@users.sourceforge.net>
.BR xrdp (8),
.BR xrdp.ini (5)
for more info on \fBxrdp\fR see http://xrdp.sf.net
for more info on \fBxrdp\fR see http://www.xrdp.org/

View File

@ -1,9 +1,9 @@
.TH "xrdp\-sessvc" "8" "0.7.0" "xrdp team" ""
.TH "xrdp\-sessvc" "8" "0.9.1" "xrdp team" ""
.SH "NAME"
xrdp\-sessvc \- \fBxrdp\fR session supervisor
.SH "SYNTAX"
.B xrdp\-sessman
.B xrdp\-sessvc
.I x_pid wm_pid
.SH "DESCRIPTION"
@ -23,4 +23,4 @@ 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
for more info on \fBxrdp\fR see http://www.xrdp.org/

View File

@ -1,4 +1,4 @@
.TH "xrdp-xcon" "8" "0.7.0" "xrdp team"
.TH "xrdp-xcon" "8" "0.9.1" "xrdp team"
.SH NAME
xrdp\-xcon \- X11 event loop debugging helper for XRDP

View File

@ -1,4 +1,4 @@
.TH "xrdp" "8" "0.1.0" "xrdp team" ""
.TH "xrdp" "8" "0.9.1" "xrdp team" ""
.SH "NAME"
\fBxrdp\fR \- a Remote Desktop Protocol (RDP) server
@ -43,4 +43,4 @@ Simone Fedele <ilsimo@users.sourceforge.net>
.BR sesman.ini (5),
.BR sesrun (8)
for more info on \fBxrdp\fR see http://xrdp.sf.net
for more info on \fBxrdp\fR see http://www.xrdp.org/

View File

@ -1,4 +1,4 @@
.TH "xrdp.ini" "5" "0.7.0" "xrdp team" ""
.TH "xrdp.ini" "5" "0.9.1" "xrdp team" ""
.SH "NAME"
\fBxrdp.ini\fR \- Configuration file for \fBxrdp\fR(8)
@ -17,10 +17,7 @@ It is composed by a number of sections, each one composed by a section name, enc
.TP
\fB[Channels]\fP \- channel subsystem parameters
.TP
\fI[Connection]\fP \- contain the info on which services \fBxrdp\fR(8) can connect to.
.LP
.LP
All options and values (except for file names and paths) are case insensitive, and are described in detail below.
.SH "GLOBALS"
@ -28,65 +25,99 @@ The options to be specified in the \fB[Globals]\fR section are the following:
.TP
\fBaddress\fP=\fIip address\fP
Specifies xrdp listening address. Default is 0.0.0.0 (all interfaces)
Specify xrdp listening address. If not specified, defaults to 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.
Section name for automatic login. If set and the client supplies valid
username and password, the user will be logged in automatically using the
connection specified by \fIsession_name\fP.
If \fIsession_name\fP is empty, the \fBLOGIN DOMAIN\fR from the client
with be used to select the section. If no domain name is supplied, the
first suitable section will be used for automatic login.
.TP
\fBbitmap_cache\fR=\fI[0|1]\fR
\fBbitmap_cache\fR=\fI[true|false]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables bitmap caching in \fBxrdp\fR(8).
.TP
\fBbitmap_compression\fR=\fI[0|1]\fR
\fBbitmap_compression\fR=\fI[true|false]\fR
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
\fBbulk_compression\fP=\fI[true|false]\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
\fBcertificate\fP=\fI/path/to/certificate\fP
.TP
\fBkey_file\fP=\fI/path/to/private_key\fP
Set location of TLS certificate and private key. They must be written in PEM format.
If not specified, defaults to \fB${XRDP_CFG_DIR}/cert.pem\fP, \fB${XRDP_CFG_DIR}/key.pem\fP.
This parameter is effective only if \fBsecurity_layer\fP is set to \fBtls\fP or \fBnegotiate\fP.
.TP
\fBchannel_code\fP=\fI[true|false]\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|fips\fP
\fBcrypt_level\fP=\fI[low|medium|high|fips]\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.
Regulate encryption level of Standard RDP Security.
This parameter is effective only if \fBsecurity_layer\fP is set to \fBrdp\fP or \fBnegotiate\fP.
Encryption in Standard RDP Security is controlled by two settings: \fIEncryption Level\fP
and \fIEncryption Method\fP. The only supported \fIEncryption Method\fP are \fB40BIT_ENCRYPTION\fP
and \fB128BIT_ENCRYPTION\fP. \fB56BIT_ENCRYPTION\fP is 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.
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.
All data sent between the client and the server is protected by encryption based on
the maximum key strength supported by the client (client compatible).
.TP
.B high
All data sent between the client and server is protected by encryption based on the server's maximum key strength.
All data sent between the client and the server is protected by encryption based on
the server's maximum key strength (sever compatible).
.TP
.B fips
All data sent between the client and server is protected using Federal Information Processing Standard 140-1 validated encryption methods.
.I This level is required for Windows clients (mstsc.exe) if the client's group policy enforces FIPS-compliance mode.
All data sent between the client and server is protected using Federal Information
Processing Standard 140-1 validated encryption methods.
.I This level is required for Windows clients (mstsc.exe) if the client's group policy
.I enforces FIPS-compliance mode.
.RE
.TP
\fBfork\fP=\fI[0|1]\fP
\fBdisableSSLv3\fP=\fI[true|false]\fP
If set to \fB1\fP, \fBtrue\fP or \fByes\fP, \fBxrdp\fP will not accept SSLv3 connections.
If not specified, defaults to \fBfalse\fP.
This parameter is effective only if \fBsecurity_layer\fP is set to \fBtls\fP or \fBnegotiate\fP.
.TP
\fBfork\fP=\fI[true|false]\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
\fBhidelogwindow\fP=\fI[true|false]\fP
If set to \fB1\fP, \fBtrue\fP or \fByes\fP, \fBxrdp\fP will not show a window for log messages.
If not specified, defaults to \fBfalse\fP.
.TP
\fBmax_bpp\fP=\fI[8|15|16|24]\fP
\fBmax_bpp\fP=\fI[8|15|16|24|32]\fP
Limit the color depth by specifying the maximum number of bits per pixel.
If not specified or set to \fB0\fP, unlimited.
.TP
\fBpamerrortxt\fP=\fIerror_text\fP
Specify text passed to PAM when authentication failed. The maximum length is \fB256\fP.
.TP
\fBport\fP=\fIport\fP
@ -94,15 +125,60 @@ 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.
\fBrequire_credentials\fP=\fI[true|false]\fP
If set to \fB1\fP, \fBtrue\fP or \fByes\fP, \fBxrdp\fP requires clients to include username and
password initial connection phase. In other words, xrdp doesn't allow clients to show login
screen if set to true. If not specified, defaults to \fBfalse\fP.
.TP
\fBtcp_nodelay\fP=\fI[yes|no]\fP
\fBsecurity_layer\fP=\fI[tls|rdp|negotiate]\fP
Regulate security methods. If not specified, defaults to \fBnegotiate\fP.
.RS 8
.TP
.B tls
Enhanced RDP Security is used. All security operations (encryption, decryption, data integrity
verification, and server authentication) are implemented by TLS.
.TP
.B rdp
Standard RDP Security, which is not safe from man-in-the-middle attack, is used. The encryption level
of Standard RDP Security is controlled by \fBcrypt_level\fP.
.TP
.B negotiate
Negotiate these security methods with clients.
.RE
.TP
\fBtcp_keepalive\fP=\fI[true|false]\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[true|false]\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
\fBtcp_send_buffer_bytes\fP=\fIbuffer_size\fP
.TP
\fBtcp_recv_buffer_bytes\fP=\fIbuffer_size\fP
Specify send/recv buffer sizes in bytes. The default value depends on operating system.
.TP
\fBtls_ciphers\fP=\fIcipher_suite\fP
Specifies TLS cipher suite. The format of this parameter is equivalent to which
\fBopenssl\fP(1) ciphers subcommand accepts.
(ex. $ openssl ciphers 'HIGH:!ADH:!SHA1')
This parameter is effective only if \fBsecurity_layer\fP is set to \fBtls\fP or \fBnegotiate\fP.
.TP
\fBuse_fastpath\fP=\fI[input|output|both|none]\fP
If not specified, defaults to \fBnone\fP.
.TP
\fBblack\fP=\fI000000\fP
.TP
@ -127,7 +203,7 @@ 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:
The following parameters can be used in the \fB[Logging]\fR section:
.TP
\fBLogFile\fR=\fI${SESMAN_LOG_DIR}/sesman.log\fR
@ -148,7 +224,7 @@ This option can have one of the following values:
\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
\fBEnableSyslog\fR=\fI[true|false]\fR
If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables logging to syslog. Otherwise syslog is disabled.
.TP
@ -158,70 +234,81 @@ This option sets the logging level for syslog. It can have the same values of \f
.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.
Not all channels are supported in all cases, so setting a value to \fItrue\fP is a prerequisite, but does not force its 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.
\fBrdpdr\fP=\fI[true|false]\fP
If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for device redirection is allowed.
.TP
\fBrdpsnd\fP=\fI[0|1]\fP
\fBrdpsnd\fP=\fI[true|false]\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
\fBdrdynvc\fP=\fI[true|false]\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.
\fBcliprdr\fP=\fI[true|false]\fP
If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for clipboard redirection is allowed.
.TP
\fBrail\fP=\fI[0|1]\fP
\fBrail\fP=\fI[true|false]\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
\fBxrdpvr\fP=\fI[true|false]\fP
If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for XRDP Video streaming is allowed.
.SH "CONNECTIONS"
A connection section is made of a section name, enclosed in square brackets, and the following entries:
.TP
.TP
\fBname\fR=\fI<session name>\fR
The name displayed in \fBxrdp\fR(8) login window's combo box.
.TP
.TP
\fBlib\fR=\fI../vnc/libvnc.so\fR
Sets the library to be used with this connection.
.TP
.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.
.TP
.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.
.TP
.TP
\fBip\fR=\fI127.0.0.1\fR
Specifies the ip address of the host to connect to.
.TP
.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.
.TP
\fBxserverbpp\fR=\fI<number>\fR
Specifies color depth of the backend X server. The default is the color
depth of the client. Only Xvnc and X11rdp use that setting. Xorg runs at
\fI24\fR bpp.
.TP
\fBcode\fR=\fI<number>\fR|\fI0\fR
Specifies the session type. The default, \fI0\fR, is Xvnc, \fI10\fR is
X11rdp, and \fI20\fR is Xorg with xorgxrdp modules.
.SH "EXAMPLES"
This is an example \fBxrdp.ini\fR:
.nf
[Globals]
bitmap_cache=yes
bitmap_compression=yes
bitmap_cache=true
bitmap_compression=true
[vnc1]
name=sesman
@ -241,4 +328,4 @@ ${XRDP_CFG_DIR}/xrdp.ini
.BR sesrun (8),
.BR sesman.ini (5)
for more info on \fBxrdp\fR see http://xrdp.sf.net
for more info on \fBxrdp\fR see http://www.xrdp.org/

View File

@ -2,17 +2,17 @@ General FAQ
Q. What is RDP?
A. RDP stands for Remote Desktop Protocol. Its the protocol used by Windows
A. RDP stands for Remote Desktop Protocol. It's 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.
A. xrdp, usually spelled in 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?
Q. I can't get xrdp to compile in Ubuntu. What can I do?
A. See faq-compile.txt.

View File

@ -1,63 +1,80 @@
default build will install the following
/usr/local/lib/xrdp/
/usr/local/lib/xrdp
libcommon.so
libmc.so
librdp.so
libscp.so
libvnc.so
libxrdp.so
libxrdpapi.so
libxup.so
/usr/local/bin/
/usr/local/bin
xrdp-dis
xrdp-genkeymap
xrdp-keygen
xrdp-sesadmin
xrdp-sesrun
xrdp-sestest
/usr/local/sbin/
/usr/local/sbin
xrdp
xrdp-sesman
xrdp-sessvc
xrdp-chansrv
/etc/xrdp/
km-xxxx.ini
/etc/xrdp
km-xxxxxxxx.ini
sesman.ini
rsakeys.ini
startwm.sh
xrdp.ini
xrdp_keyboard.ini
xrdp.sh
/etc/pam.d/
/etc/xrdp/pulse
default.pa
/etc/pam.d
xrdp-sesman
/usr/local/share/man/man1
xrdp-dis.1
/usr/local/share/man/man5
sesman.ini.5
xrdp.ini.5
/usr/local/share/man/man8
xrdp.8
xrdp-chansrv.8
xrdp-genkeymap.8
xrdp-keygen.8
xrdp-sesadmin.8
xrdp-sesman.8
xrdp-sesrun.8
xrdp-sessvc.8
xrdp.8
/usr/local/share/xrdp
ad24b.bmp
ad256.bmp
cursor0.cur
cursor1.cur
sans-10.fv1
xrdp24b.bmp
xrdp256.bmp
xrdp_logo.bmp
when running, the following are created and written to
/var/run/
/var/run
xrdp.pid
sesman.pid
/var/log/
/var/log
xrdp.log
xrdp-sesman.log
/tmp
/tmp/.xrdp
xrdp*

1
fontdump/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
!Makefile

0
fontdump/Makefile Executable file → Normal file
View File

0
fontdump/fontdump.c Executable file → Normal file
View File

View File

@ -1,9 +1,16 @@
EXTRA_DIST = \
dump-keymaps.sh \
readme.txt
AM_CFLAGS = $(X_CFLAGS)
bin_PROGRAMS = \
xrdp-genkeymap
xrdp_genkeymap_SOURCES = genkeymap.c evdev-map.c
xrdp_genkeymap_LDFLAGS = \
$(X_LIBS)
xrdp_genkeymap_LDADD = \
-L/usr/X11R6/lib \
-lX11
$(X_PRE_LIBS) -lX11 $(X_EXTRA_LIBS)

View File

@ -7,40 +7,41 @@ then
exit 1
fi
# English - US 'en-us' 0x0409
# English - US 'en-us' 0x00000409
setxkbmap -model pc104 -layout us
./xrdp-genkeymap ../instfiles/km-0409.ini
./xrdp-genkeymap ../instfiles/km-00000409.ini
# German 'de' 0x0407
# English - UK 'en-GB' 0x00000809
setxkbmap -model pc105 -layout gb
./xrdp-genkeymap ../instfiles/km-00000809.ini
# German 'de' 0x00000407
setxkbmap -model pc104 -layout de
./xrdp-genkeymap ../instfiles/km-0407.ini
./xrdp-genkeymap ../instfiles/km-00000407.ini
# Italy 'it' 0x0410
# Italian 'it' 0x00000410
setxkbmap -model pc104 -layout it
./xrdp-genkeymap ../instfiles/km-0410.ini
./xrdp-genkeymap ../instfiles/km-00000410.ini
# Japanese 'jp' 0x0411
setxkbmap -model jp106 -layout jp -variant OADG109A
./xrdp-genkeymap ../instfiles/km-0411.ini
./xrdp-genkeymap ../instfiles/km-e0010411.ini
./xrdp-genkeymap ../instfiles/km-e0200411.ini
./xrdp-genkeymap ../instfiles/km-e0210411.ini
# Japanese 'jp' 0x00000411
setxkbmap -model pc105 -layout jp -variant OADG109A
./xrdp-genkeymap ../instfiles/km-00000411.ini
# Polish 'pl' 0x0415
# Polish 'pl' 0x00000415
setxkbmap -model pc104 -layout pl
./xrdp-genkeymap ../instfiles/km-0415.ini
./xrdp-genkeymap ../instfiles/km-00000415.ini
# Russia 'ru' 0x0419
# Russia 'ru' 0x00000419
setxkbmap -model pc104 -layout ru
./xrdp-genkeymap ../instfiles/km-0419.ini
./xrdp-genkeymap ../instfiles/km-00000419.ini
# Sweden 'se' 0x041d
# Sweden 'se' 0x0000041d
setxkbmap -model pc104 -layout se
./xrdp-genkeymap ../instfiles/km-041d.ini
./xrdp-genkeymap ../instfiles/km-0000041d.ini
# Portuguese -PT 'pt-pt' 0x0816
# Portuguese -PT 'pt-pt' 0x00000816
setxkbmap -model pc104 -layout pt
./xrdp-genkeymap ../instfiles/km-0816.ini
./xrdp-genkeymap ../instfiles/km-00000816.ini
# set back to en-us
setxkbmap -model pc104 -layout us

View File

@ -21,15 +21,15 @@
Updated Jay Sorg 2009
cs czech 0x405
de german 0x407
en-us us english 0x409
fr french 0x40c
it italy 0x410
cs Czech 0x405
de German 0x407
en-us US English 0x409
fr French 0x40c
it Italian 0x410
br Portuguese (Brazil) 0x416
ru russian 0x419
se swedish 0x41d
en-uk uk english 0x809
ru Russian 0x419
se Swedish 0x41d
en-uk UK English 0x809
*/
#include <stdio.h>
@ -48,7 +48,10 @@ int main(int argc, char **argv)
char text[256];
char *displayname = NULL;
char *outfname;
char *sections[8] = {"noshift", "shift", "altgr", "shiftaltgr", "capslock", "capslockaltgr", "shiftcapslock", "shiftcapslockaltgr"};
const char *sections[8] = {
"noshift", "shift", "altgr", "shiftaltgr",
"capslock", "capslockaltgr", "shiftcapslock", "shiftcapslockaltgr"
};
int states[8] = {0, 1, 0x80, 0x81, 2, 0x82, 3, 0x83};
int i;
int idx;
@ -70,7 +73,7 @@ int main(int argc, char **argv)
if (argc != 2)
{
fprintf(stderr, "Usage: %s out_filename\n", programname);
fprintf(stderr, "Example: %s /etc/xrdp/km-0409.ini\n", programname);
fprintf(stderr, "Example: %s /etc/xrdp/km-00000409.ini\n", programname);
return 1;
}

View File

@ -3,9 +3,9 @@ Creating a new keymap file.
The names of the files are of the format;
km-xxxx.ini
km-xxxxxxxx.ini
where the xxxx is replaced by the hex number of the layout of interest.
where the xxxxxxxx is replaced by the hex number of the layout of interest.
The files have 8 sections;
@ -33,7 +33,7 @@ Key63=65450:42
To create a new file run "xrdp-genkeymap <filename>"
Example: ./xrdp-genkeymap /etc/xrdp/km-0409.ini
Example: ./xrdp-genkeymap /etc/xrdp/km-00000409.ini
Note: You need to have enough rights to be able to write to the
/etc/xrdp directory.

View File

@ -11,11 +11,11 @@ You can build sesman without pam, there is a Makefile parameter
for that.
I also have a replacement ssl_calls.c to avoid the openssl dependency
email me(Jay) for it or see http://server1.xrdp.org/xrdp/openssl.
Due to the licence, I can't include it in this project.
Due to the license, I can't include it in this project.
http://server1.xrdp.org/xrdp/openssl/
unpackage the tarball
unpack the tarball
tar -zxvf xrdp-0.1.tar.gz
@ -28,7 +28,7 @@ run make
as root, run make install
This will install most of the files in /usr/local/xrdp.
Some files install in /etc/xrdp. These are configuation
Some files install in /etc/xrdp. These are configuration
files.
files and location

View File

@ -1,38 +1,75 @@
EXTRA_DIST = xrdp.sh km-0407.ini km-0409.ini km-040c.ini km-0410.ini km-0419.ini km-041d.ini km-0816.ini \
xrdp-sesman.service \
xrdp.service
SUBDIRS = \
pam.d \
init.d \
default \
pulse
if HAVE_SYSTEMD
systemdsystemunit_DATA = \
xrdp-sesman.service \
xrdp.service
endif
EXTRA_DIST = \
keymap-names.txt \
xrdp.sh \
xrdp-sesman.service \
xrdp.service
#
# files for all platforms
#
startscriptdir=$(sysconfdir)/xrdp
startscript_DATA = \
xrdp.sh \
km-0407.ini \
km-0409.ini \
km-040c.ini \
km-0410.ini \
km-0411.ini \
km-0415.ini \
km-0419.ini \
km-041d.ini \
km-0816.ini \
km-e0010411.ini \
km-e0200411.ini \
km-e0210411.ini
dist_startscript_DATA = \
km-00000407.ini \
km-00000409.ini \
km-0000040a.ini \
km-0000040b.ini \
km-0000040c.ini \
km-00000410.ini \
km-00000411.ini \
km-00000412.ini \
km-00000414.ini \
km-00000415.ini \
km-00000416.ini \
km-00000419.ini \
km-0000041d.ini \
km-00000807.ini \
km-00000809.ini \
km-0000080c.ini \
km-00000813.ini \
km-00000816.ini \
km-0000100c.ini
#
# platform specific files
#
SUBDIRS =
if LINUX
SUBDIRS += \
pam.d \
pulse
dist_startscript_SCRIPTS = xrdp.sh
if HAVE_SYSTEMD
dist_systemdsystemunit_DATA = \
xrdp-sesman.service \
xrdp.service
else
SUBDIRS += \
default \
init.d
endif # HAVE_SYSTEMD
endif # LINUX
if FREEBSD
SUBDIRS += \
pam.d \
rc.d \
pulse
endif
#
# install-data-hook for each platform
#
if LINUX
# must be tab below
install-data-hook:
chmod 755 $(DESTDIR)$(sysconfdir)/xrdp/xrdp.sh
chmod 755 $(DESTDIR)$(sysconfdir)/init.d/xrdp
sed -i 's|__BASE__|$(prefix)|' $(DESTDIR)$(sysconfdir)/init.d/xrdp;
if [ -f $(DESTDIR)$(sysconfdir)/init.d/xrdp ]; then \
sed -i 's|__BASE__|$(prefix)|' $(DESTDIR)$(sysconfdir)/init.d/xrdp; \
fi
endif
if FREEBSD
# must be tab below
install-data-hook:
sed -i '' 's|%%PREFIX%%|$(prefix)|g' $(DESTDIR)$(sysconfdir)/rc.d/xrdp
endif

View File

@ -1,3 +1,2 @@
EXTRA_DIST = xrdp
startscriptdir=$(sysconfdir)/default
startscript_DATA = xrdp
startscriptdir = $(sysconfdir)/default
dist_startscript_DATA = xrdp

View File

@ -1,4 +1,2 @@
EXTRA_DIST = xrdp
startscriptdir=$(sysconfdir)/init.d
startscript_DATA = xrdp
startscriptdir = $(sysconfdir)/init.d
dist_startscript_SCRIPTS = xrdp

View File

@ -18,12 +18,11 @@ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
BASE=__BASE__
DAEMON=${BASE}/sbin/xrdp
SDAEMON=${BASE}/sbin/xrdp-sesman
PIDDIR=/var/run/xrdp/
PIDDIR=/var/run/
SESMAN_START=yes
#USERID=xrdp
# the X11rdp backend only works as root at the moment - GH 20/03/2013
USERID=root
RSAKEYS=/etc/xrdp/rsakeys.ini
NAME=xrdp
DESC="Remote Desktop Protocol server"
@ -67,18 +66,6 @@ if [ "$(id -u)" = "0" ]; then
mkdir $PIDDIR
fi
chown $USERID:$USERID $PIDDIR
# Check for rsa key
if [ ! -f $RSAKEYS ] ; then
log_action_begin_msg "Generating xrdp RSA keys..."
(umask 077 ; xrdp-keygen xrdp $RSAKEYS)
chown $USERID:$USERID $RSAKEYS
if [ ! -f $RSAKEYS ] ; then
log_action_end_msg 1 "could not create $RSAKEYS"
exit 1
fi
log_action_end_msg 0 "done"
fi
fi
@ -139,7 +126,7 @@ case "$1" in
;;
force-stop)
$0 stop
# because it doesn't allways die the right way
# because it doesn't always die the right way
force_stop
;;
restart|force-reload)

124
instfiles/keymap-names.txt Normal file
View File

@ -0,0 +1,124 @@
0x00000436 af Afrikaans
0x0000041C sq Albanian
0x00000001 ar Arabic
0x00000401 ar-sa Arabic (Saudi Arabia)
0x00000801 ar-iq Arabic (Iraq)
0x00000C01 ar-eg Arabic (Egypt)
0x00001001 ar-ly Arabic (Libya)
0x00001401 ar-dz Arabic (Algeria)
0x00001801 ar-ma Arabic (Morocco)
0x00001C01 ar-tn Arabic (Tunisia)
0x00002001 ar-om Arabic (Oman)
0x00002401 ar-ye Arabic (Yemen)
0x00002801 ar-sy Arabic (Syria)
0x00002C01 ar-jo Arabic (Jordan)
0x00003001 ar-lb Arabic (Lebanon)
0x00003401 ar-kw Arabic (Kuwait)
0x00003801 ar-ae Arabic (U.A.E.)
0x00003C01 ar-bh Arabic (Bahrain)
0x00004001 ar-qa Arabic (Qatar)
0x0000042D eu Basque
0x00000402 bg Bulgarian
0x00000423 be Belarusian
0x00000403 ca Catalan
0x00000004 zh Chinese
0x00000404 zh-tw Chinese (Taiwan)
0x00000804 zh-cn Chinese (China)
0x00000C04 zh-hk Chinese (Hong Kong SAR)
0x00001004 zh-sg Chinese (Singapore)
0x0000041A hr Croatian
0x00000405 cs Czech
0x00000406 da Danish
0x00000413 nl Dutch (Netherlands)
0x00000813 nl-be Dutch (Belgium)
0x00000009 en English
0x00000409 en-us English (United States)
0x00000809 en-gb English (United Kingdom)
0x00000C09 en-au English (Australia)
0x00001009 en-ca English (Canada)
0x00001409 en-nz English (New Zealand)
0x00001809 en-ie English (Ireland)
0x00001C09 en-za English (South Africa)
0x00002009 en-jm English (Jamaica)
0x00002809 en-bz English (Belize)
0x00002C09 en-tt English (Trinidad)
0x00000425 et Estonian
0x00000438 fo Faeroese
0x00000429 fa Farsi
0x0000040B fi Finnish
0x0000040C fr French (France)
0x0000080C fr-be French (Belgium)
0x00000C0C fr-ca French (Canada)
0x0000100C fr-ch French (Switzerland)
0x0000140C fr-lu French (Luxembourg)
0x0000043C gd Gaelic
0x00000407 de German (Germany)
0x00000807 de-ch German (Switzerland)
0x00000C07 de-at German (Austria)
0x00001007 de-lu German (Luxembourg)
0x00001407 de-li German (Liechtenstein)
0x00000408 el Greek
0x0000040D he Hebrew
0x00000439 hi Hindi
0x0000040E hu Hungarian
0x0000040F is Icelandic
0x00000421 in Indonesian
0x00000410 it Italian (Italy)
0x00000810 it-ch Italian (Switzerland)
0x00000411 ja Japanese
0x00000412 ko Korean
0x00000426 lv Latvian
0x00000427 lt Lithuanian
0x0000042F mk FYRO Macedonian
0x0000043E ms Malay (Malaysia)
0x0000043A mt Maltese
0x00000414 no Norwegian (Bokmal)
0x00000814 no Norwegian (Nynorsk)
0x00000415 pl Polish
0x00000416 pt-br Portuguese (Brazil)
0x00000816 pt Portuguese (Portugal)
0x00000417 rm Rhaeto-Romanic
0x00000418 ro Romanian
0x00000818 ro-mo Romanian (Moldova)
0x00000419 ru Russian
0x00000819 ru-mo Russian (Moldova)
0x00000C1A sr Serbian (Cyrillic)
0x0000081A sr Serbian (Latin)
0x0000041B sk Slovak
0x00000424 sl Slovenian
0x0000042E sb Sorbian
0x0000040A es Spanish (Traditional Sort)
0x0000080A es-mx Spanish (Mexico)
0x00000C0A es Spanish (International Sort)
0x0000100A es-gt Spanish (Guatemala)
0x0000140A es-cr Spanish (Costa Rica)
0x0000180A es-pa Spanish (Panama)
0x00001C0A es-do Spanish (Dominican Republic)
0x0000200A es-ve Spanish (Venezuela)
0x0000240A es-co Spanish (Colombia)
0x0000280A es-pe Spanish (Peru)
0x00002C0A es-ar Spanish (Argentina)
0x0000300A es-ec Spanish (Ecuador)
0x0000340A es-cl Spanish (Chile)
0x0000380A es-uy Spanish (Uruguay)
0x00003C0A es-py Spanish (Paraguay)
0x0000400A es-bo Spanish (Bolivia)
0x0000440A es-sv Spanish (El Salvador)
0x0000480A es-hn Spanish (Honduras)
0x00004C0A es-ni Spanish (Nicaragua)
0x0000500A es-pr Spanish (Puerto Rico)
0x00000430 sx Sutu
0x0000041D sv Swedish
0x0000081D sv-fi Swedish (Finland)
0x0000041E th Thai
0x00000431 ts Tsonga
0x00000432 tn Tswana
0x0000041F tr Turkish
0x00000422 uk Ukrainian
0x00000420 ur Urdu
0x0000042A vi Vietnamese
0x00000434 xh Xhosa
0x0000043D ji Yiddish
0x00000435 zu Zulu

659
instfiles/km-0000040a.ini Normal file
View File

@ -0,0 +1,659 @@
[noshift]
Key8=0:0
Key9=65307:27
Key10=49:49
Key11=50:50
Key12=51:51
Key13=52:52
Key14=53:53
Key15=54:54
Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=39:39
Key21=161:161
Key22=65288:8
Key23=65289:9
Key24=113:113
Key25=119:119
Key26=101:101
Key27=114:114
Key28=116:116
Key29=121:121
Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=65104:96
Key35=43:43
Key36=65293:13
Key37=65507:0
Key38=97:97
Key39=115:115
Key40=100:100
Key41=102:102
Key42=103:103
Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=241:241
Key48=65105:180
Key49=186:186
Key50=65505:0
Key51=231:231
Key52=122:122
Key53=120:120
Key54=99:99
Key55=118:118
Key56=98:98
Key57=110:110
Key58=109:109
Key59=44:44
Key60=46:46
Key61=45:45
Key62=65506:0
Key63=65450:42
Key64=65364:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65429:0
Key80=65431:0
Key81=65434:0
Key82=65453:45
Key83=65430:0
Key84=65437:0
Key85=65432:0
Key86=65451:43
Key87=65436:0
Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key114=0:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shift]
Key8=0:0
Key9=65307:27
Key10=33:33
Key11=34:34
Key12=183:183
Key13=36:36
Key14=37:37
Key15=38:38
Key16=47:47
Key17=40:40
Key18=41:41
Key19=61:61
Key20=63:63
Key21=191:191
Key22=65288:8
Key23=65056:0
Key24=81:81
Key25=87:87
Key26=69:69
Key27=82:82
Key28=84:84
Key29=89:89
Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=65106:94
Key35=42:42
Key36=65293:13
Key37=65507:0
Key38=65:65
Key39=83:83
Key40=68:68
Key41=70:70
Key42=71:71
Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=209:209
Key48=65111:168
Key49=170:170
Key50=65505:0
Key51=199:199
Key52=90:90
Key53=88:88
Key54=67:67
Key55=86:86
Key56=66:66
Key57=78:78
Key58=77:77
Key59=59:59
Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65364:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=0:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key114=0:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[altgr]
Key8=0:0
Key9=65307:27
Key10=124:124
Key11=64:64
Key12=35:35
Key13=126:126
Key14=189:189
Key15=172:172
Key16=123:123
Key17=91:91
Key18=93:93
Key19=125:125
Key20=92:92
Key21=126:126
Key22=65288:8
Key23=65289:9
Key24=64:64
Key25=435:322
Key26=8364:8364
Key27=182:182
Key28=956:359
Key29=2299:8592
Key30=2302:8595
Key31=2301:8594
Key32=248:248
Key33=254:254
Key34=91:91
Key35=93:93
Key36=65293:13
Key37=65507:0
Key38=230:230
Key39=223:223
Key40=240:240
Key41=496:273
Key42=959:331
Key43=689:295
Key44=106:106
Key45=930:312
Key46=435:322
Key47=126:126
Key48=123:123
Key49=92:92
Key50=65505:0
Key51=125:125
Key52=171:171
Key53=187:187
Key54=162:162
Key55=2770:8220
Key56=2771:8221
Key57=110:110
Key58=181:181
Key59=2211:0
Key60=183:183
Key61=65120:0
Key62=65506:0
Key63=65450:42
Key64=65364:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65429:0
Key80=65431:0
Key81=65434:0
Key82=65453:45
Key83=65430:0
Key84=65437:0
Key85=65432:0
Key86=65451:43
Key87=65436:0
Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=0:0
Key94=124:124
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=0:0
Key112=65455:47
Key113=65514:0
Key114=0:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[capslock]
Key8=0:0
Key9=65307:27
Key10=49:49
Key11=50:50
Key12=51:51
Key13=52:52
Key14=53:53
Key15=54:54
Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=39:39
Key21=161:161
Key22=65288:8
Key23=65289:9
Key24=81:81
Key25=87:87
Key26=69:69
Key27=82:82
Key28=84:84
Key29=89:89
Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=65104:96
Key35=43:43
Key36=65293:13
Key37=65507:0
Key38=65:65
Key39=83:83
Key40=68:68
Key41=70:70
Key42=71:71
Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=209:209
Key48=65105:180
Key49=186:186
Key50=65505:0
Key51=199:199
Key52=90:90
Key53=88:88
Key54=67:67
Key55=86:86
Key56=66:66
Key57=78:78
Key58=77:77
Key59=44:44
Key60=46:46
Key61=45:45
Key62=65506:0
Key63=65450:42
Key64=65364:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65429:0
Key80=65431:0
Key81=65434:0
Key82=65453:45
Key83=65430:0
Key84=65437:0
Key85=65432:0
Key86=65451:43
Key87=65436:0
Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key114=0:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftcapslock]
Key8=0:0
Key9=65307:27
Key10=33:33
Key11=34:34
Key12=183:183
Key13=36:36
Key14=37:37
Key15=38:38
Key16=47:47
Key17=40:40
Key18=41:41
Key19=61:61
Key20=63:63
Key21=191:191
Key22=65288:8
Key23=65056:0
Key24=113:113
Key25=119:119
Key26=101:101
Key27=114:114
Key28=116:116
Key29=121:121
Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=65106:94
Key35=42:42
Key36=65293:13
Key37=65507:0
Key38=97:97
Key39=115:115
Key40=100:100
Key41=102:102
Key42=103:103
Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=241:241
Key48=65111:168
Key49=170:170
Key50=65505:0
Key51=231:231
Key52=122:122
Key53=120:120
Key54=99:99
Key55=118:118
Key56=98:98
Key57=110:110
Key58=109:109
Key59=59:59
Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65364:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=0:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key114=0:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0

View File

@ -120,9 +120,9 @@ Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key129=65315:0
Key130=0:0
Key131=0:0
Key131=65314:0
Key132=0:0
Key133=165:165
Key134=0:0
@ -252,9 +252,9 @@ Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key129=65315:0
Key130=0:0
Key131=0:0
Key131=65314:0
Key132=0:0
Key133=124:124
Key134=0:0
@ -384,9 +384,9 @@ Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key129=65315:0
Key130=0:0
Key131=0:0
Key131=65314:0
Key132=0:0
Key133=165:165
Key134=0:0
@ -516,9 +516,9 @@ Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key129=65315:0
Key130=0:0
Key131=0:0
Key131=65314:0
Key132=0:0
Key133=124:124
Key134=0:0
@ -648,9 +648,9 @@ Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key129=65315:0
Key130=0:0
Key131=0:0
Key131=65314:0
Key132=0:0
Key133=165:165
Key134=0:0
@ -780,9 +780,9 @@ Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key129=65315:0
Key130=0:0
Key131=0:0
Key131=65314:0
Key132=0:0
Key133=165:165
Key134=0:0
@ -912,9 +912,9 @@ Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key129=65315:0
Key130=0:0
Key131=0:0
Key131=65314:0
Key132=0:0
Key133=124:124
Key134=0:0
@ -1044,9 +1044,9 @@ Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key129=65315:0
Key130=0:0
Key131=0:0
Key131=65314:0
Key132=0:0
Key133=124:124
Key134=0:0

File diff suppressed because it is too large Load Diff

View File

@ -11,8 +11,8 @@ Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=45:45
Key21=94:94
Key20=43:43
Key21=65105:180
Key22=65288:8
Key23=65289:9
Key24=113:113
@ -25,8 +25,8 @@ Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=64:64
Key35=91:91
Key34=229:229
Key35=65111:168
Key36=65293:13
Key37=65507:0
Key38=97:97
@ -38,11 +38,11 @@ Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=59:59
Key48=58:58
Key49=65322:0
Key47=246:246
Key48=228:228
Key49=167:167
Key50=65505:0
Key51=93:93
Key51=39:39
Key52=122:122
Key53=120:120
Key54=99:99
@ -52,12 +52,12 @@ Key57=110:110
Key58=109:109
Key59=44:44
Key60=46:46
Key61=47:47
Key61=45:45
Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65328:0
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
@ -104,17 +104,17 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=92:92
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
@ -124,7 +124,7 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=165:165
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
@ -136,15 +136,15 @@ Key9=65307:27
Key10=33:33
Key11=34:34
Key12=35:35
Key13=36:36
Key13=164:164
Key14=37:37
Key15=38:38
Key16=39:39
Key16=47:47
Key17=40:40
Key18=41:41
Key19=48:48
Key20=61:61
Key21=126:126
Key19=61:61
Key20=63:63
Key21=65104:96
Key22=65288:8
Key23=65056:0
Key24=81:81
@ -157,8 +157,8 @@ Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=96:96
Key35=123:123
Key34=197:197
Key35=65106:94
Key36=65293:13
Key37=65507:0
Key38=65:65
@ -170,11 +170,11 @@ Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=43:43
Key48=42:42
Key49=65322:0
Key47=214:214
Key48=196:196
Key49=189:189
Key50=65505:0
Key51=125:125
Key51=42:42
Key52=90:90
Key53=88:88
Key54=67:67
@ -182,12 +182,12 @@ Key55=86:86
Key56=66:66
Key57=78:78
Key58=77:77
Key59=60:60
Key60=62:62
Key61=63:63
Key59=59:59
Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -214,7 +214,7 @@ Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key91=65452:44
Key92=65377:0
Key93=0:0
Key94=62:62
@ -236,17 +236,17 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=95:95
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
@ -256,7 +256,7 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=124:124
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
@ -265,63 +265,63 @@ Key137=0:0
[altgr]
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
Key12=51:51
Key13=52:52
Key14=53:53
Key15=54:54
Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=45:45
Key21=94:94
Key10=161:161
Key11=64:64
Key12=163:163
Key13=36:36
Key14=8364:8364
Key15=165:165
Key16=123:123
Key17=91:91
Key18=93:93
Key19=125:125
Key20=92:92
Key21=177:177
Key22=65288:8
Key23=65289:9
Key24=113:113
Key25=119:119
Key26=101:101
Key27=114:114
Key28=116:116
Key29=121:121
Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=64:64
Key35=91:91
Key24=64:64
Key25=435:322
Key26=8364:8364
Key27=174:174
Key28=254:254
Key29=2299:8592
Key30=2302:8595
Key31=2301:8594
Key32=5053:339
Key33=254:254
Key34=65111:168
Key35=65107:126
Key36=65293:13
Key37=65507:0
Key38=97:97
Key39=115:115
Key40=100:100
Key41=102:102
Key42=103:103
Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=59:59
Key48=58:58
Key49=65322:0
Key38=170:170
Key39=223:223
Key40=240:240
Key41=496:273
Key42=959:331
Key43=689:295
Key44=65121:0
Key45=930:312
Key46=435:322
Key47=248:248
Key48=230:230
Key49=182:182
Key50=65505:0
Key51=93:93
Key52=122:122
Key53=120:120
Key54=99:99
Key55=118:118
Key56=98:98
Key51=180:180
Key52=171:171
Key53=187:187
Key54=169:169
Key55=2770:8220
Key56=2771:8221
Key57=110:110
Key58=109:109
Key59=44:44
Key60=46:46
Key61=47:47
Key58=181:181
Key59=65115:184
Key60=183:183
Key61=65120:0
Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65328:0
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
@ -368,10 +368,10 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
@ -388,7 +388,7 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=165:165
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
@ -397,62 +397,62 @@ Key137=0:0
[shiftaltgr]
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
Key12=35:35
Key13=36:36
Key14=37:37
Key15=38:38
Key16=39:39
Key17=40:40
Key18=41:41
Key19=48:48
Key20=61:61
Key21=126:126
Key10=185:185
Key11=178:178
Key12=179:179
Key13=188:188
Key14=162:162
Key15=2757:8541
Key16=247:247
Key17=171:171
Key18=187:187
Key19=176:176
Key20=191:191
Key21=172:172
Key22=65288:8
Key23=65056:0
Key24=81:81
Key25=87:87
Key26=69:69
Key27=82:82
Key28=84:84
Key29=89:89
Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=96:96
Key35=123:123
Key24=2009:937
Key25=419:321
Key26=162:162
Key27=174:174
Key28=222:222
Key29=165:165
Key30=2300:8593
Key31=697:305
Key32=5052:338
Key33=222:222
Key34=65112:176
Key35=65114:711
Key36=65293:13
Key37=65507:0
Key38=65:65
Key39=83:83
Key40=68:68
Key41=70:70
Key42=71:71
Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=43:43
Key48=42:42
Key49=65322:0
Key38=186:186
Key39=167:167
Key40=208:208
Key41=170:170
Key42=957:330
Key43=673:294
Key44=65122:0
Key45=38:38
Key46=419:321
Key47=216:216
Key48=198:198
Key49=190:190
Key50=65505:0
Key51=125:125
Key52=90:90
Key53=88:88
Key54=67:67
Key55=86:86
Key56=66:66
Key51=215:215
Key52=60:60
Key53=62:62
Key54=169:169
Key55=2768:8216
Key56=2769:8217
Key57=78:78
Key58=77:77
Key59=60:60
Key60=62:62
Key61=63:63
Key58=186:186
Key59=65116:731
Key60=65110:729
Key61=65110:729
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key65=32:32
Key64=65032:0
Key65=160:160
Key66=65509:0
Key67=65470:0
Key68=65471:0
@ -478,7 +478,7 @@ Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key91=65452:44
Key92=65377:0
Key93=0:0
Key94=166:166
@ -500,10 +500,10 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
@ -520,7 +520,7 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=124:124
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
@ -539,8 +539,8 @@ Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=45:45
Key21=94:94
Key20=43:43
Key21=65105:180
Key22=65288:8
Key23=65289:9
Key24=81:81
@ -553,8 +553,8 @@ Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=64:64
Key35=91:91
Key34=197:197
Key35=65111:168
Key36=65293:13
Key37=65507:0
Key38=65:65
@ -566,11 +566,11 @@ Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=59:59
Key48=58:58
Key49=65322:0
Key47=214:214
Key48=196:196
Key49=167:167
Key50=65505:0
Key51=93:93
Key51=39:39
Key52=90:90
Key53=88:88
Key54=67:67
@ -580,12 +580,12 @@ Key57=78:78
Key58=77:77
Key59=44:44
Key60=46:46
Key61=47:47
Key61=45:45
Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65328:0
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
@ -632,10 +632,10 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
@ -652,159 +652,26 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=165:165
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[capslockaltgr]
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
Key12=51:51
Key13=52:52
Key14=53:53
Key15=54:54
Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=45:45
Key21=94:94
Key22=65288:8
Key23=65289:9
Key24=81:81
Key25=87:87
Key26=69:69
Key27=82:82
Key28=84:84
Key29=89:89
Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=64:64
Key35=91:91
Key36=65293:13
Key37=65507:0
Key38=65:65
Key39=83:83
Key40=68:68
Key41=70:70
Key42=71:71
Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=59:59
Key48=58:58
Key49=65322:0
Key50=65505:0
Key51=93:93
Key52=90:90
Key53=88:88
Key54=67:67
Key55=86:86
Key56=66:66
Key57=78:78
Key58=77:77
Key59=44:44
Key60=46:46
Key61=47:47
Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65328:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65429:0
Key80=65431:0
Key81=65434:0
Key82=65453:45
Key83=65430:0
Key84=65437:0
Key85=65432:0
Key86=65451:43
Key87=65436:0
Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=65377:0
Key93=0:0
Key94=124:124
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=165:165
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftcapslock]
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
Key12=35:35
Key13=36:36
Key13=164:164
Key14=37:37
Key15=38:38
Key16=39:39
Key16=47:47
Key17=40:40
Key18=41:41
Key19=48:48
Key20=61:61
Key21=126:126
Key19=61:61
Key20=63:63
Key21=65104:96
Key22=65288:8
Key23=65056:0
Key24=113:113
@ -817,8 +684,8 @@ Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=96:96
Key35=123:123
Key34=229:229
Key35=65106:94
Key36=65293:13
Key37=65507:0
Key38=97:97
@ -830,11 +697,11 @@ Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=43:43
Key48=42:42
Key49=65322:0
Key47=246:246
Key48=228:228
Key49=189:189
Key50=65505:0
Key51=125:125
Key51=42:42
Key52=122:122
Key53=120:120
Key54=99:99
@ -842,12 +709,12 @@ Key55=118:118
Key56=98:98
Key57=110:110
Key58=109:109
Key59=60:60
Key60=62:62
Key61=63:63
Key59=59:59
Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -874,7 +741,7 @@ Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key91=65452:44
Key92=65377:0
Key93=0:0
Key94=62:62
@ -896,10 +763,10 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
@ -916,140 +783,9 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=124:124
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftcapslockaltgr]
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
Key12=35:35
Key13=36:36
Key14=37:37
Key15=38:38
Key16=39:39
Key17=40:40
Key18=41:41
Key19=48:48
Key20=61:61
Key21=126:126
Key22=65288:8
Key23=65056:0
Key24=113:113
Key25=119:119
Key26=101:101
Key27=114:114
Key28=116:116
Key29=121:121
Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=96:96
Key35=123:123
Key36=65293:13
Key37=65507:0
Key38=97:97
Key39=115:115
Key40=100:100
Key41=102:102
Key42=103:103
Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=43:43
Key48=42:42
Key49=65322:0
Key50=65505:0
Key51=125:125
Key52=122:122
Key53=120:120
Key54=99:99
Key55=118:118
Key56=98:98
Key57=110:110
Key58=109:109
Key59=60:60
Key60=62:62
Key61=63:63
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=65377:0
Key93=0:0
Key94=166:166
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=124:124
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0

View File

@ -12,7 +12,7 @@ Key17=56:56
Key18=57:57
Key19=48:48
Key20=45:45
Key21=94:94
Key21=61:61
Key22=65288:8
Key23=65289:9
Key24=113:113
@ -25,8 +25,8 @@ Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=64:64
Key35=91:91
Key34=91:91
Key35=93:93
Key36=65293:13
Key37=65507:0
Key38=97:97
@ -39,10 +39,10 @@ Key44=106:106
Key45=107:107
Key46=108:108
Key47=59:59
Key48=58:58
Key49=65322:0
Key48=39:39
Key49=96:96
Key50=65505:0
Key51=93:93
Key51=35:35
Key52=122:122
Key53=120:120
Key54=99:99
@ -57,7 +57,7 @@ Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65328:0
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
@ -85,7 +85,7 @@ Key90=65438:0
Key91=65439:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key94=92:92
Key95=65480:0
Key96=65481:0
Key97=65360:0
@ -104,7 +104,7 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
@ -114,7 +114,7 @@ Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=92:92
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
@ -124,7 +124,7 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=165:165
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
@ -135,16 +135,16 @@ Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
Key12=35:35
Key12=163:163
Key13=36:36
Key14=37:37
Key15=38:38
Key16=39:39
Key17=40:40
Key18=41:41
Key19=48:48
Key20=61:61
Key21=126:126
Key15=94:94
Key16=38:38
Key17=42:42
Key18=40:40
Key19=41:41
Key20=95:95
Key21=43:43
Key22=65288:8
Key23=65056:0
Key24=81:81
@ -157,8 +157,8 @@ Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=96:96
Key35=123:123
Key34=123:123
Key35=125:125
Key36=65293:13
Key37=65507:0
Key38=65:65
@ -170,11 +170,11 @@ Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=43:43
Key48=42:42
Key49=65322:0
Key47=58:58
Key48=64:64
Key49=172:172
Key50=65505:0
Key51=125:125
Key51=126:126
Key52=90:90
Key53=88:88
Key54=67:67
@ -217,7 +217,7 @@ Key90=65456:48
Key91=65454:46
Key92=65377:0
Key93=0:0
Key94=62:62
Key94=124:124
Key95=65480:0
Key96=65481:0
Key97=65360:0
@ -236,7 +236,7 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key113=65312:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
@ -246,7 +246,7 @@ Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=95:95
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
@ -256,7 +256,7 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=124:124
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
@ -265,63 +265,63 @@ Key137=0:0
[altgr]
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
Key12=51:51
Key13=52:52
Key14=53:53
Key15=54:54
Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=45:45
Key21=94:94
Key10=185:185
Key11=178:178
Key12=179:179
Key13=8364:8364
Key14=189:189
Key15=190:190
Key16=123:123
Key17=91:91
Key18=93:93
Key19=125:125
Key20=92:92
Key21=65115:184
Key22=65288:8
Key23=65289:9
Key24=113:113
Key25=119:119
Key24=64:64
Key25=435:322
Key26=101:101
Key27=114:114
Key28=116:116
Key29=121:121
Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=64:64
Key35=91:91
Key27=182:182
Key28=956:359
Key29=2299:8592
Key30=2302:8595
Key31=2301:8594
Key32=248:248
Key33=254:254
Key34=65111:168
Key35=65107:126
Key36=65293:13
Key37=65507:0
Key38=97:97
Key39=115:115
Key40=100:100
Key41=102:102
Key42=103:103
Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=59:59
Key48=58:58
Key49=65322:0
Key38=230:230
Key39=223:223
Key40=240:240
Key41=496:273
Key42=959:331
Key43=689:295
Key44=65121:0
Key45=930:312
Key46=435:322
Key47=65105:180
Key48=65106:94
Key49=124:124
Key50=65505:0
Key51=93:93
Key52=122:122
Key53=120:120
Key54=99:99
Key55=118:118
Key56=98:98
Key51=65104:96
Key52=171:171
Key53=187:187
Key54=162:162
Key55=2770:8220
Key56=2771:8221
Key57=110:110
Key58=109:109
Key59=44:44
Key60=46:46
Key61=47:47
Key58=181:181
Key59=2211:0
Key60=183:183
Key61=65120:0
Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65328:0
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
@ -368,7 +368,7 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
@ -388,7 +388,7 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=165:165
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
@ -397,58 +397,58 @@ Key137=0:0
[shiftaltgr]
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
Key12=35:35
Key13=36:36
Key14=37:37
Key15=38:38
Key16=39:39
Key17=40:40
Key18=41:41
Key19=48:48
Key20=61:61
Key21=126:126
Key10=161:161
Key11=2755:8539
Key12=163:163
Key13=188:188
Key14=2756:8540
Key15=2757:8541
Key16=2758:8542
Key17=2761:8482
Key18=177:177
Key19=176:176
Key20=191:191
Key21=65116:731
Key22=65288:8
Key23=65056:0
Key24=81:81
Key25=87:87
Key24=2009:937
Key25=419:321
Key26=69:69
Key27=82:82
Key28=84:84
Key29=89:89
Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=96:96
Key35=123:123
Key27=174:174
Key28=940:358
Key29=165:165
Key30=2300:8593
Key31=697:305
Key32=216:216
Key33=222:222
Key34=65112:176
Key35=65108:175
Key36=65293:13
Key37=65507:0
Key38=65:65
Key39=83:83
Key40=68:68
Key41=70:70
Key42=71:71
Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=43:43
Key48=42:42
Key49=65322:0
Key38=198:198
Key39=167:167
Key40=208:208
Key41=170:170
Key42=957:330
Key43=673:294
Key44=65122:0
Key45=38:38
Key46=419:321
Key47=65113:733
Key48=65114:711
Key49=124:124
Key50=65505:0
Key51=125:125
Key52=90:90
Key53=88:88
Key54=67:67
Key55=86:86
Key56=66:66
Key51=65109:728
Key52=60:60
Key53=62:62
Key54=169:169
Key55=2768:8216
Key56=2769:8217
Key57=78:78
Key58=77:77
Key59=60:60
Key60=62:62
Key61=63:63
Key58=186:186
Key59=215:215
Key60=247:247
Key61=65110:729
Key62=65506:0
Key63=65450:42
Key64=65511:0
@ -500,7 +500,7 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key113=65312:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
@ -520,7 +520,7 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=124:124
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
@ -540,7 +540,7 @@ Key17=56:56
Key18=57:57
Key19=48:48
Key20=45:45
Key21=94:94
Key21=61:61
Key22=65288:8
Key23=65289:9
Key24=81:81
@ -553,8 +553,8 @@ Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=64:64
Key35=91:91
Key34=91:91
Key35=93:93
Key36=65293:13
Key37=65507:0
Key38=65:65
@ -567,10 +567,10 @@ Key44=74:74
Key45=75:75
Key46=76:76
Key47=59:59
Key48=58:58
Key49=65322:0
Key48=39:39
Key49=96:96
Key50=65505:0
Key51=93:93
Key51=35:35
Key52=90:90
Key53=88:88
Key54=67:67
@ -585,7 +585,7 @@ Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65328:0
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
@ -613,7 +613,7 @@ Key90=65438:0
Key91=65439:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key94=92:92
Key95=65480:0
Key96=65481:0
Key97=65360:0
@ -632,7 +632,7 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
@ -652,7 +652,7 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=165:165
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
@ -661,63 +661,63 @@ Key137=0:0
[capslockaltgr]
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
Key12=51:51
Key13=52:52
Key14=53:53
Key15=54:54
Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=45:45
Key21=94:94
Key10=185:185
Key11=178:178
Key12=179:179
Key13=8364:8364
Key14=189:189
Key15=190:190
Key16=123:123
Key17=91:91
Key18=93:93
Key19=125:125
Key20=92:92
Key21=65115:184
Key22=65288:8
Key23=65289:9
Key24=81:81
Key25=87:87
Key24=64:64
Key25=419:321
Key26=69:69
Key27=82:82
Key28=84:84
Key29=89:89
Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=64:64
Key35=91:91
Key27=182:182
Key28=940:358
Key29=2299:8592
Key30=2302:8595
Key31=2301:8594
Key32=216:216
Key33=222:222
Key34=65111:168
Key35=65107:126
Key36=65293:13
Key37=65507:0
Key38=65:65
Key39=83:83
Key40=68:68
Key41=70:70
Key42=71:71
Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=59:59
Key48=58:58
Key49=65322:0
Key38=198:198
Key39=223:223
Key40=208:208
Key41=464:272
Key42=957:330
Key43=673:294
Key44=65121:0
Key45=930:312
Key46=419:321
Key47=65105:180
Key48=65106:94
Key49=124:124
Key50=65505:0
Key51=93:93
Key52=90:90
Key53=88:88
Key54=67:67
Key55=86:86
Key56=66:66
Key51=65104:96
Key52=171:171
Key53=187:187
Key54=162:162
Key55=2770:8220
Key56=2771:8221
Key57=78:78
Key58=77:77
Key59=44:44
Key60=46:46
Key61=47:47
Key58=924:0
Key59=2211:0
Key60=183:183
Key61=65120:0
Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65328:0
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
@ -764,7 +764,7 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
@ -784,7 +784,7 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=165:165
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
@ -795,16 +795,16 @@ Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
Key12=35:35
Key12=163:163
Key13=36:36
Key14=37:37
Key15=38:38
Key16=39:39
Key17=40:40
Key18=41:41
Key19=48:48
Key20=61:61
Key21=126:126
Key15=94:94
Key16=38:38
Key17=42:42
Key18=40:40
Key19=41:41
Key20=95:95
Key21=43:43
Key22=65288:8
Key23=65056:0
Key24=113:113
@ -817,8 +817,8 @@ Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=96:96
Key35=123:123
Key34=123:123
Key35=125:125
Key36=65293:13
Key37=65507:0
Key38=97:97
@ -830,11 +830,11 @@ Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=43:43
Key48=42:42
Key49=65322:0
Key47=58:58
Key48=64:64
Key49=172:172
Key50=65505:0
Key51=125:125
Key51=126:126
Key52=122:122
Key53=120:120
Key54=99:99
@ -877,7 +877,7 @@ Key90=65456:48
Key91=65454:46
Key92=65377:0
Key93=0:0
Key94=62:62
Key94=124:124
Key95=65480:0
Key96=65481:0
Key97=65360:0
@ -896,7 +896,7 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key113=65312:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
@ -916,7 +916,7 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=124:124
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
@ -925,58 +925,58 @@ Key137=0:0
[shiftcapslockaltgr]
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
Key12=35:35
Key13=36:36
Key14=37:37
Key15=38:38
Key16=39:39
Key17=40:40
Key18=41:41
Key19=48:48
Key20=61:61
Key21=126:126
Key10=161:161
Key11=2755:8539
Key12=163:163
Key13=188:188
Key14=2756:8540
Key15=2757:8541
Key16=2758:8542
Key17=2761:8482
Key18=177:177
Key19=176:176
Key20=191:191
Key21=65116:731
Key22=65288:8
Key23=65056:0
Key24=113:113
Key25=119:119
Key24=2009:937
Key25=435:322
Key26=101:101
Key27=114:114
Key28=116:116
Key29=121:121
Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=96:96
Key35=123:123
Key27=174:174
Key28=956:359
Key29=165:165
Key30=2300:8593
Key31=697:305
Key32=248:248
Key33=254:254
Key34=65112:176
Key35=65108:175
Key36=65293:13
Key37=65507:0
Key38=97:97
Key39=115:115
Key40=100:100
Key41=102:102
Key42=103:103
Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=43:43
Key48=42:42
Key49=65322:0
Key38=230:230
Key39=167:167
Key40=240:240
Key41=170:170
Key42=959:331
Key43=689:295
Key44=65122:0
Key45=38:38
Key46=435:322
Key47=65113:733
Key48=65114:711
Key49=124:124
Key50=65505:0
Key51=125:125
Key52=122:122
Key53=120:120
Key54=99:99
Key55=118:118
Key56=98:98
Key51=65109:728
Key52=60:60
Key53=62:62
Key54=169:169
Key55=2768:8216
Key56=2769:8217
Key57=110:110
Key58=109:109
Key59=60:60
Key60=62:62
Key61=63:63
Key58=186:186
Key59=215:215
Key60=247:247
Key61=65110:729
Key62=65506:0
Key63=65450:42
Key64=65511:0
@ -1028,7 +1028,7 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key113=65312:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
@ -1048,7 +1048,7 @@ Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=124:124
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0

659
instfiles/km-0000100c.ini Normal file
View File

@ -0,0 +1,659 @@
[noshift]
Key8=0:0
Key9=65307:27
Key10=49:49
Key11=50:50
Key12=51:51
Key13=52:52
Key14=53:53
Key15=54:54
Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=39:39
Key21=65106:94
Key22=65288:8
Key23=65289:9
Key24=113:113
Key25=119:119
Key26=101:101
Key27=114:114
Key28=116:116
Key29=122:122
Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=232:232
Key35=65111:168
Key36=65293:13
Key37=65507:0
Key38=97:97
Key39=115:115
Key40=100:100
Key41=102:102
Key42=103:103
Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=233:233
Key48=224:224
Key49=167:167
Key50=65505:0
Key51=36:36
Key52=121:121
Key53=120:120
Key54=99:99
Key55=118:118
Key56=98:98
Key57=110:110
Key58=109:109
Key59=44:44
Key60=46:46
Key61=45:45
Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65429:0
Key80=65431:0
Key81=65434:0
Key82=65453:45
Key83=65430:0
Key84=65437:0
Key85=65432:0
Key86=65451:43
Key87=65436:0
Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key94=60:60
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key115=0:0
Key116=0:0
Key117=0:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shift]
Key8=0:0
Key9=65307:27
Key10=43:43
Key11=34:34
Key12=42:42
Key13=231:231
Key14=37:37
Key15=38:38
Key16=47:47
Key17=40:40
Key18=41:41
Key19=61:61
Key20=63:63
Key21=65104:96
Key22=65288:8
Key23=65056:0
Key24=81:81
Key25=87:87
Key26=69:69
Key27=82:82
Key28=84:84
Key29=90:90
Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=252:252
Key35=33:33
Key36=65293:13
Key37=65507:0
Key38=65:65
Key39=83:83
Key40=68:68
Key41=70:70
Key42=71:71
Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=246:246
Key48=228:228
Key49=176:176
Key50=65505:0
Key51=163:163
Key52=89:89
Key53=88:88
Key54=67:67
Key55=86:86
Key56=66:66
Key57=78:78
Key58=77:77
Key59=59:59
Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=0:0
Key93=65406:0
Key94=62:62
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65312:0
Key114=0:0
Key115=0:0
Key116=0:0
Key117=0:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[altgr]
Key8=0:0
Key9=65307:27
Key10=124:124
Key11=64:64
Key12=35:35
Key13=188:188
Key14=189:189
Key15=172:172
Key16=166:166
Key17=162:162
Key18=93:93
Key19=125:125
Key20=65105:180
Key21=65107:126
Key22=65288:8
Key23=65289:9
Key24=64:64
Key25=435:322
Key26=8364:8364
Key27=182:182
Key28=956:359
Key29=2299:8592
Key30=2302:8595
Key31=2301:8594
Key32=248:248
Key33=254:254
Key34=91:91
Key35=93:93
Key36=65293:13
Key37=65507:0
Key38=230:230
Key39=223:223
Key40=240:240
Key41=496:273
Key42=959:331
Key43=689:295
Key44=106:106
Key45=930:312
Key46=435:322
Key47=65105:180
Key48=123:123
Key49=172:172
Key50=65505:0
Key51=125:125
Key52=171:171
Key53=187:187
Key54=162:162
Key55=2770:8220
Key56=2771:8221
Key57=110:110
Key58=181:181
Key59=2211:0
Key60=183:183
Key61=65120:0
Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65429:0
Key80=65431:0
Key81=65434:0
Key82=65453:45
Key83=65430:0
Key84=65437:0
Key85=65432:0
Key86=65451:43
Key87=65436:0
Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key94=92:92
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=0:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key115=0:0
Key116=0:0
Key117=0:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[capslock]
Key8=0:0
Key9=65307:27
Key10=49:49
Key11=50:50
Key12=51:51
Key13=52:52
Key14=53:53
Key15=54:54
Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=39:39
Key21=65106:94
Key22=65288:8
Key23=65289:9
Key24=81:81
Key25=87:87
Key26=69:69
Key27=82:82
Key28=84:84
Key29=90:90
Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=200:200
Key35=65111:168
Key36=65293:13
Key37=65507:0
Key38=65:65
Key39=83:83
Key40=68:68
Key41=70:70
Key42=71:71
Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=201:201
Key48=192:192
Key49=167:167
Key50=65505:0
Key51=36:36
Key52=89:89
Key53=88:88
Key54=67:67
Key55=86:86
Key56=66:66
Key57=78:78
Key58=77:77
Key59=44:44
Key60=46:46
Key61=45:45
Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65429:0
Key80=65431:0
Key81=65434:0
Key82=65453:45
Key83=65430:0
Key84=65437:0
Key85=65432:0
Key86=65451:43
Key87=65436:0
Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key94=60:60
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key115=0:0
Key116=0:0
Key117=0:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftcapslock]
Key8=0:0
Key9=65307:27
Key10=43:43
Key11=34:34
Key12=42:42
Key13=199:199
Key14=37:37
Key15=38:38
Key16=47:47
Key17=40:40
Key18=41:41
Key19=61:61
Key20=63:63
Key21=65104:96
Key22=65288:8
Key23=65056:0
Key24=113:113
Key25=119:119
Key26=101:101
Key27=114:114
Key28=116:116
Key29=122:122
Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=220:220
Key35=33:33
Key36=65293:13
Key37=65507:0
Key38=97:97
Key39=115:115
Key40=100:100
Key41=102:102
Key42=103:103
Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=214:214
Key48=196:196
Key49=176:176
Key50=65505:0
Key51=163:163
Key52=121:121
Key53=120:120
Key54=99:99
Key55=118:118
Key56=98:98
Key57=110:110
Key58=109:109
Key59=59:59
Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=0:0
Key93=65406:0
Key94=62:62
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65312:0
Key114=0:0
Key115=0:0
Key116=0:0
Key117=0:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0

View File

@ -1,4 +1,9 @@
EXTRA_DIST = xrdp-sesman
EXTRA_DIST = \
xrdp-sesman.common \
xrdp-sesman.other \
xrdp-sesman.password-auth
CLEANFILES = xrdp-sesman
if SESMAN_NOPAM
PAMFILE =
@ -14,7 +19,19 @@ endif
endif
endif
pamddir=$(sysconfdir)/pam.d
pamddir = $(sysconfdir)/pam.d
pamd_DATA = \
$(PAMFILE)
xrdp-sesman:
if test -e /etc/pam.d/password-auth; then \
pamrules=xrdp-sesman.password-auth; \
else \
if test -e /etc/pam.d/common-auth; then \
pamrules=xrdp-sesman.common; \
else \
pamrules=xrdp-sesman.other; \
fi; \
fi; \
$(LN_S) $(srcdir)/$$pamrules $@

View File

@ -2,4 +2,3 @@
@include common-auth
@include common-account
@include common-session
@include common-password

View File

@ -0,0 +1,4 @@
#%PAM-1.0
auth include password-auth
account include password-auth
session include password-auth

View File

@ -1,3 +1,2 @@
EXTRA_DIST = default.pa
pulsedir=$(sysconfdir)/xrdp/pulse
pulse_DATA = default.pa
pulsedir = $(sysconfdir)/xrdp/pulse
dist_pulse_DATA = default.pa

View File

@ -0,0 +1,2 @@
startscriptdir = $(sysconfdir)/rc.d
dist_startscript_SCRIPTS = xrdp

80
instfiles/rc.d/xrdp Normal file
View File

@ -0,0 +1,80 @@
#!/bin/sh
#
# Copyright (c) 1992-2015 The FreeBSD Project. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# $FreeBSD$
#
# REQUIRE: DAEMON
# PROVIDE: xrdp xrdp_sesman
#
. /etc/rc.subr
name="xrdp"
rcvar=xrdp_enable
xrdp_daemons="xrdp"
# Read settings and set default values.
load_rc_config "$name"
: ${xrdp_enable="NO"}
# Enable/disable dependent daemon.
if [ -n "${rcvar}" ] && checkyesno "xrdp_sesman_enable"; then
xrdp_daemons="xrdp xrdp_sesman"
fi
# Commands.
extra_commands="reload status"
start_cmd="xrdp_cmd"
stop_cmd="xrdp_cmd"
status_cmd="xrdp_cmd"
reload_cmd="xrdp_cmd"
rcvar_cmd="xrdp_cmd"
# Command wrapper to call each of them per daemon.
xrdp_cmd() {
local name rcvar command pidfile xrdp_daemons
# Prevent recursive calling.
unset "${rc_arg}_cmd"
# Stop processes in the reverse to order.
if [ "${rc_arg}" = "stop" ] ; then
xrdp_daemons=$(reverse_list ${xrdp_daemons})
fi
# Apply to all the daemons.
for name in ${xrdp_daemons}; do
rcvar=${name}_enable
if [ "${name}" = "xrdp_sesman" ]; then
command="%%PREFIX%%/sbin/xrdp-sesman"
pidfile="/var/run/xrdp-sesman.pid"
else
command="%%PREFIX%%/sbin/${name}"
pidfile="/var/run/${name}.pid"
fi
run_rc_command "${_rc_prefix}${rc_arg}" ${rc_extra_args}
done
}
run_rc_command "$1"

View File

@ -2,11 +2,13 @@
Description=xrdp session manager
After=syslog.target network.target
StopWhenUnneeded=true
BindTo=xrdp.service
[Service]
Type=forking
PIDFile=/var/run/xrdp-sesman.pid
EnvironmentFile=/etc/sysconfig/xrdp
EnvironmentFile=-/etc/sysconfig/xrdp
EnvironmentFile=-/etc/default/xrdp
ExecStart=/usr/sbin/xrdp-sesman $SESMAN_OPTIONS
ExecStop=/usr/sbin/xrdp-sesman $SESMAN_OPTIONS --kill

View File

@ -6,7 +6,8 @@ After=syslog.target network.target xrdp-sesman.service
[Service]
Type=forking
PIDFile=/var/run/xrdp.pid
EnvironmentFile=/etc/sysconfig/xrdp
EnvironmentFile=-/etc/sysconfig/xrdp
EnvironmentFile=-/etc/default/xrdp
ExecStart=/usr/sbin/xrdp $XRDP_OPTIONS
ExecStop=/usr/sbin/xrdp $XRDP_OPTIONS --kill

View File

@ -1,11 +1,10 @@
EXTRA_DIST = openssl.conf
AM_CFLAGS = \
AM_CPPFLAGS = \
-DXRDP_CFG_PATH=\"${sysconfdir}/xrdp\" \
-DXRDP_SBIN_PATH=\"${sbindir}\" \
-DXRDP_SHARE_PATH=\"${datadir}/xrdp\" \
-DXRDP_PID_PATH=\"${localstatedir}/run\"
INCLUDES = \
-DXRDP_PID_PATH=\"${localstatedir}/run\" \
-I$(top_srcdir)/common
bin_PROGRAMS = \
@ -15,3 +14,23 @@ xrdp_keygen_SOURCES = keygen.c
xrdp_keygen_LDADD = \
$(top_builddir)/common/libcommon.la
xrdpsysconfdir = $(sysconfdir)/xrdp
install-data-hook:
umask 077 && \
if [ ! -f $(DESTDIR)$(xrdpsysconfdir)/rsakeys.ini ]; then \
./xrdp-keygen xrdp $(DESTDIR)$(xrdpsysconfdir)/rsakeys.ini; \
fi && \
if [ ! -f $(DESTDIR)$(xrdpsysconfdir)/cert.pem ]; then \
openssl req -x509 -newkey rsa:2048 -sha256 -nodes \
-keyout $(DESTDIR)$(xrdpsysconfdir)/key.pem -out \
$(DESTDIR)$(xrdpsysconfdir)/cert.pem -days 365 \
-subj /C=US/ST=CA/L=Sunnyvale/O=xrdp/CN=www.xrdp.org \
-config $(srcdir)/openssl.conf; \
fi
uninstall-hook:
rm -f $(DESTDIR)$(xrdpsysconfdir)/rsakeys.ini
rm -f $(DESTDIR)$(xrdpsysconfdir)/cert.pem
rm -f $(DESTDIR)$(xrdpsysconfdir)/key.pem

View File

@ -34,8 +34,8 @@
/* this is the signature size in bytes */
#define TSSK_KEY_LENGTH 64
/* default to 512 bit key size, can set changed, set */
static int g_key_size_bits = 512;
/* default to 2048 bit key size, can set changed, set */
static int g_key_size_bits = 2048;
static tui8 g_exponent[4] =
{
@ -195,11 +195,11 @@ static tui8 g_testkey2048[376] = /* 2048 bit test key */
static int APP_CC
out_params(void)
{
g_writeln("");
g_writeln("%s", "");
g_writeln("xrdp rsa key gen utility examples");
g_writeln(" xrdp-keygen xrdp ['path and file name' | auto] [512 or 2048]");
g_writeln(" xrdp-keygen test");
g_writeln("");
g_writeln("%s", "");
return 0;
}
@ -282,7 +282,7 @@ sign_key(char *e_data, int e_len, char *n_data, int n_len,
/*****************************************************************************/
static int APP_CC
write_out_line(int fd, char *name, char *data, int len)
write_out_line(int fd, const char *name, char *data, int len)
{
int max;
int error;
@ -351,7 +351,7 @@ save_all(char *e_data, int e_len, char *n_data, int n_len,
}
g_writeln("saving to %s", filename);
g_writeln("");
g_writeln("%s", "");
if (g_file_exist(filename))
{
@ -411,15 +411,14 @@ key_gen(const char *path_and_file_name)
d_len = n_len;
sign_len = 64;
error = 0;
g_writeln("");
g_writeln("%s", "");
g_writeln("Generating %d bit rsa key...", g_key_size_bits);
g_writeln("");
g_writeln("%s", "");
if (error == 0)
{
error = ssl_gen_key_xrdp1(g_key_size_bits, e_data, e_len, n_data, n_len,
d_data, d_len);
if (error != 0)
{
g_writeln("error %d in key_gen, ssl_gen_key_xrdp1", error);
@ -429,7 +428,7 @@ key_gen(const char *path_and_file_name)
if (error == 0)
{
g_writeln("ssl_gen_key_xrdp1 ok");
g_writeln("");
g_writeln("%s", "");
error = sign_key(e_data, e_len, n_data, n_len, sign_data, sign_len);
if (error != 0)
@ -589,10 +588,10 @@ main(int argc, char **argv)
}
else if (g_strcasecmp(argv[1], "test") == 0)
{
g_writeln("");
g_writeln("%s", "");
g_writeln("testing 512 bit key");
key_test512();
g_writeln("");
g_writeln("%s", "");
g_writeln("testing 2048 bit key");
key_test2048();
return 0;

4
keygen/openssl.conf Normal file
View File

@ -0,0 +1,4 @@
[req]
distinguished_name = req_distinguished_name
[req_distinguished_name]

1
libpainter Submodule

@ -0,0 +1 @@
Subproject commit 71561310ccb2cf9c086e1ca533cd3b846283c3e5

@ -1 +1 @@
Subproject commit 61f6e92ecdfd057215da7932b6afefcbfa928446
Subproject commit 03a36890da75d6c27a31bcd1caae4bb9c839c6f6

View File

@ -1,71 +1,65 @@
EXTRA_DIST = libxrdp.h libxrdpinc.h
EXTRA_DIST = \
xrdp_surface.c
EXTRA_DEFINES =
EXTRA_INCLUDES =
EXTRA_LIBS =
EXTRA_FLAGS =
if XRDP_DEBUG
EXTRA_DEFINES += -DXRDP_DEBUG
else
EXTRA_DEFINES += -DXRDP_NODEBUG
endif
if XRDP_NEUTRINORDP
EXTRA_DEFINES += -DXRDP_NEUTRINORDP
EXTRA_LIBS += $(FREERDP_LIBS)
endif
if XRDP_TJPEG
EXTRA_DEFINES += -DXRDP_JPEG -DXRDP_TJPEG
EXTRA_INCLUDES += @TurboJpegIncDir@
EXTRA_FLAGS += @TurboJpegLibDir@
EXTRA_LIBS += -lturbojpeg
else
if XRDP_JPEG
EXTRA_DEFINES += -DXRDP_JPEG
EXTRA_LIBS += -ljpeg
endif
endif
if GOT_PREFIX
EXTRA_INCLUDES += -I$(prefix)/include
EXTRA_FLAGS += -L$(prefix)/lib -Wl,-rpath -Wl,$(prefix)/lib
endif
AM_CFLAGS = \
AM_CPPFLAGS = \
-DXRDP_CFG_PATH=\"${sysconfdir}/xrdp\" \
-DXRDP_SBIN_PATH=\"${sbindir}\" \
-DXRDP_SHARE_PATH=\"${datadir}/xrdp\" \
-DXRDP_PID_PATH=\"${localstatedir}/run\" \
$(EXTRA_DEFINES)
-I$(top_srcdir)/common
INCLUDES = \
-I$(top_srcdir)/common \
$(EXTRA_INCLUDES)
AM_LDFLAGS =
lib_LTLIBRARIES = \
LIBXRDP_EXTRA_LIBS =
if XRDP_DEBUG
AM_CPPFLAGS += -DXRDP_DEBUG
else
AM_CPPFLAGS += -DXRDP_NODEBUG
endif
if XRDP_NEUTRINORDP
AM_CPPFLAGS += -DXRDP_NEUTRINORDP
LIBXRDP_EXTRA_LIBS += $(FREERDP_LIBS)
endif
if XRDP_RFXCODEC
AM_CPPFLAGS += -DXRDP_RFXCODEC
endif
if XRDP_TJPEG
AM_CPPFLAGS += -DXRDP_JPEG -DXRDP_TJPEG @TurboJpegIncDir@
AM_LDFLAGS += @TurboJpegLibDir@
LIBXRDP_EXTRA_LIBS += -lturbojpeg
else
if XRDP_JPEG
AM_CPPFLAGS += -DXRDP_JPEG
LIBXRDP_EXTRA_LIBS += -ljpeg
endif
endif
module_LTLIBRARIES = \
libxrdp.la
libxrdp_la_SOURCES = \
libxrdp.c \
xrdp_channel.c \
xrdp_iso.c \
xrdp_mcs.c \
xrdp_orders.c \
xrdp_rdp.c \
xrdp_sec.c \
xrdp_bitmap_compress.c \
libxrdp.h \
libxrdpinc.h \
xrdp_bitmap32_compress.c \
xrdp_jpeg_compress.c \
xrdp_orders_rail.c \
xrdp_mppc_enc.c \
xrdp_bitmap_compress.c \
xrdp_caps.c \
xrdp_channel.c \
xrdp_fastpath.c \
xrdp_caps.c
libxrdp_la_LDFLAGS = \
$(EXTRA_FLAGS)
xrdp_iso.c \
xrdp_jpeg_compress.c \
xrdp_mcs.c \
xrdp_mppc_enc.c \
xrdp_orders.c \
xrdp_orders_rail.c \
xrdp_orders_rail.h \
xrdp_rdp.c \
xrdp_sec.c
libxrdp_la_LIBADD = \
$(top_builddir)/common/libcommon.la \
$(EXTRA_LIBS)
$(LIBXRDP_EXTRA_LIBS)

View File

@ -27,6 +27,8 @@
#define LLOGLN(_level, _args) \
do { if (_level < LOG_LEVEL) { g_writeln _args ; } } while (0)
#define MAX_BITMAP_BUF_SIZE (16 * 1024) /* 16K */
/******************************************************************************/
struct xrdp_session *EXPORT_CC
libxrdp_init(tbus id, struct trans *trans)
@ -66,7 +68,7 @@ libxrdp_disconnect(struct xrdp_session *session)
/******************************************************************************/
int EXPORT_CC
libxrdp_process_incomming(struct xrdp_session *session)
libxrdp_process_incoming(struct xrdp_session *session)
{
int rv;
@ -105,7 +107,7 @@ libxrdp_get_pdu_bytes(const char *aheader)
}
/******************************************************************************/
/* only used durring connection */
/* only used during connection */
struct stream * APP_CC
libxrdp_force_read(struct trans* trans)
{
@ -253,8 +255,8 @@ libxrdp_process_data(struct xrdp_session *session, struct stream *s)
{
/*This situation can happen and this is a workaround*/
cont = 0;
g_writeln("Serious programming error we were locked in a deadly loop") ;
g_writeln("remaining :%d", s->end - s->next_packet);
g_writeln("Serious programming error: we were locked in a deadly loop");
g_writeln("Remaining: %d", (int) (s->end - s->next_packet));
s->next_packet = 0;
}
@ -373,15 +375,15 @@ libxrdp_send_bell(struct xrdp_session *session)
return 0;
}
/*****************************************************************************/
int EXPORT_CC
libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
int bpp, char *data, int x, int y, int cx, int cy)
{
int line_size = 0;
int line_bytes = 0;
int i = 0;
int j = 0;
int k;
int total_lines = 0;
int lines_sending = 0;
int Bpp = 0;
@ -389,27 +391,43 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
int bufsize = 0;
int total_bufsize = 0;
int num_updates = 0;
int line_pad_bytes;
int server_line_bytes;
char *p_num_updates = (char *)NULL;
char *p = (char *)NULL;
char *q = (char *)NULL;
struct stream *s = (struct stream *)NULL;
struct stream *temp_s = (struct stream *)NULL;
tui32 pixel;
DEBUG(("libxrdp_send_bitmap sending bitmap"));
LLOGLN(10, ("libxrdp_send_bitmap: sending bitmap"));
Bpp = (bpp + 7) / 8;
e = width % 4;
if (e != 0)
e = (4 - width) & 3;
switch (bpp)
{
e = 4 - e;
case 15:
case 16:
server_line_bytes = width * 2;
break;
case 24:
case 32:
server_line_bytes = width * 4;
break;
default: /* 8 bpp */
server_line_bytes = width;
break;
}
line_bytes = width * Bpp;
line_pad_bytes = line_bytes + e * Bpp;
line_size = width * Bpp;
LLOGLN(10, ("libxrdp_send_bitmap: bpp %d Bpp %d line_bytes %d "
"server_line_bytes %d", bpp, Bpp, line_bytes, server_line_bytes));
make_stream(s);
init_stream(s, 8192);
init_stream(s, MAX_BITMAP_BUF_SIZE);
if (session->client_info->use_bitmap_comp)
{
LLOGLN(10, ("libxrdp_send_bitmap: compression"));
make_stream(temp_s);
init_stream(temp_s, 65536);
i = 0;
@ -421,6 +439,8 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
while (i > 0)
{
LLOGLN(10, ("libxrdp_send_bitmap: i %d", i));
total_bufsize = 0;
num_updates = 0;
xrdp_rdp_init_data((struct xrdp_rdp *)session->rdp, s);
@ -440,10 +460,26 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
}
p = s->p;
lines_sending = xrdp_bitmap_compress(data, width, height,
s, bpp,
4096 - total_bufsize,
i - 1, temp_s, e);
if (bpp > 24)
{
LLOGLN(10, ("libxrdp_send_bitmap: 32 bpp"));
lines_sending = xrdp_bitmap32_compress(data, width, height,
s, 32,
(MAX_BITMAP_BUF_SIZE - 100) - total_bufsize,
i - 1, temp_s, e, 0x10);
LLOGLN(10, ("libxrdp_send_bitmap: i %d lines_sending %d",
i, lines_sending));
}
else
{
lines_sending = xrdp_bitmap_compress(data, width, height,
s, bpp,
(MAX_BITMAP_BUF_SIZE - 100) - total_bufsize,
i - 1, temp_s, e);
LLOGLN(10, ("libxrdp_send_bitmap: i %d lines_sending %d",
i, lines_sending));
}
if (lines_sending == 0)
{
@ -470,6 +506,7 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
out_uint16_le(s, bufsize); /* compressed size */
j = (width + e) * Bpp;
j = j * lines_sending;
total_bufsize += 18; /* bytes since pop layer */
}
else
{
@ -481,31 +518,42 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
out_uint16_le(s, j); /* line size */
j = j * lines_sending;
out_uint16_le(s, j); /* final size */
total_bufsize += 26; /* bytes since pop layer */
}
if (j > 32768)
LLOGLN(10, ("libxrdp_send_bitmap: decompressed pixels %d "
"decompressed bytes %d compressed bytes %d",
lines_sending * (width + e),
line_pad_bytes * lines_sending, bufsize));
if (j > MAX_BITMAP_BUF_SIZE)
{
g_writeln("error, decompressed size too big, its %d", j);
LLOGLN(0, ("libxrdp_send_bitmap: error, decompressed "
"size too big: %d bytes", j));
}
if (bufsize > 8192)
if (bufsize > MAX_BITMAP_BUF_SIZE)
{
g_writeln("error, compressed size too big, its %d", bufsize);
LLOGLN(0, ("libxrdp_send_bitmap: error, compressed size "
"too big: %d bytes", bufsize));
}
s->p = s->end;
}
while (total_bufsize < 4096 && i > 0);
while (total_bufsize < MAX_BITMAP_BUF_SIZE && i > 0);
LLOGLN(10, ("libxrdp_send_bitmap: num_updates %d total_bufsize %d",
num_updates, total_bufsize));
p_num_updates[0] = num_updates;
p_num_updates[1] = num_updates >> 8;
xrdp_rdp_send_data((struct xrdp_rdp *)session->rdp, s,
RDP_DATA_PDU_UPDATE);
if (total_bufsize > 8192)
if (total_bufsize > MAX_BITMAP_BUF_SIZE)
{
g_writeln("error, total compressed size too big, its %d",
total_bufsize);
LLOGLN(0, ("libxrdp_send_bitmap: error, total compressed "
"size too big: %d bytes", total_bufsize));
}
}
@ -513,22 +561,30 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
}
else
{
LLOGLN(10, ("libxrdp_send_bitmap: no compression"));
total_lines = height;
i = 0;
p = data;
if (line_size > 0 && total_lines > 0)
if (line_bytes > 0 && total_lines > 0)
{
while (i < total_lines)
{
lines_sending = 4096 / (line_size + e * Bpp);
lines_sending = (MAX_BITMAP_BUF_SIZE - 100) / line_pad_bytes;
if (i + lines_sending > total_lines)
{
lines_sending = total_lines - i;
}
p = p + line_size * lines_sending;
if (lines_sending == 0)
{
LLOGLN(0, ("libxrdp_send_bitmap: error, lines_sending == zero"));
break;
}
p += server_line_bytes * lines_sending;
xrdp_rdp_init_data((struct xrdp_rdp *)session->rdp, s);
out_uint16_le(s, RDP_UPDATE_BITMAP);
out_uint16_le(s, 1); /* num updates */
@ -540,14 +596,58 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
out_uint16_le(s, lines_sending);
out_uint16_le(s, bpp); /* bpp */
out_uint16_le(s, 0); /* compress */
out_uint16_le(s, (line_size + e * Bpp) * lines_sending); /* bufsize */
out_uint16_le(s, line_pad_bytes * lines_sending); /* bufsize */
q = p;
for (j = 0; j < lines_sending; j++)
switch (bpp)
{
q = q - line_size;
out_uint8a(s, q, line_size); /* B_ENDIAN doesn't work here, todo */
out_uint8s(s, e * Bpp);
case 8:
for (j = 0; j < lines_sending; j++)
{
q = q - line_bytes;
out_uint8a(s, q, line_bytes);
out_uint8s(s, e);
}
break;
case 15:
case 16:
for (j = 0; j < lines_sending; j++)
{
q = q - server_line_bytes;
for (k = 0; k < width; k++)
{
pixel = *((tui16*)(q + k * 2));
out_uint16_le(s, pixel);
}
out_uint8s(s, e * 2);
}
break;
case 24:
for (j = 0; j < lines_sending; j++)
{
q = q - server_line_bytes;
for (k = 0; k < width; k++)
{
pixel = *((tui32*)(q + k * 4));
out_uint8(s, pixel);
out_uint8(s, pixel >> 8);
out_uint8(s, pixel >> 16);
}
out_uint8s(s, e * 3);
}
break;
case 32:
for (j = 0; j < lines_sending; j++)
{
q = q - server_line_bytes;
for (k = 0; k < width; k++)
{
pixel = *((int*)(q + k * 4));
out_uint32_le(s, pixel);
}
out_uint8s(s, e * 4);
}
break;
}
s_mark_end(s);
@ -971,7 +1071,7 @@ libxrdp_reset(struct xrdp_session *session,
}
/* shut down the rdp client */
if (xrdp_rdp_send_deactive((struct xrdp_rdp *)session->rdp) != 0)
if (xrdp_rdp_send_deactivate((struct xrdp_rdp *)session->rdp) != 0)
{
return 1;
}
@ -982,14 +1082,6 @@ libxrdp_reset(struct xrdp_session *session,
return 1;
}
/* process till up and running */
session->up_and_running = 0;
if (libxrdp_process_data(session, 0) != 0)
{
g_writeln("non handled error from libxrdp_process_data");
}
return 0;
}
@ -1082,10 +1174,10 @@ libxrdp_query_channel(struct xrdp_session *session, int index,
}
/*****************************************************************************/
/* returns a zero based index of the channel, -1 if error or it dosen't
/* returns a zero based index of the channel, -1 if error or it doesn't
exist */
int EXPORT_CC
libxrdp_get_channel_id(struct xrdp_session *session, char *name)
libxrdp_get_channel_id(struct xrdp_session *session, const char *name)
{
int index = 0;
int count = 0;
@ -1306,13 +1398,12 @@ libxrdp_fastpath_send_surface(struct xrdp_session *session,
struct stream ls;
struct stream *s;
struct xrdp_rdp *rdp;
int rv;
int sec_bytes;
int rdp_bytes;
int max_bytes;
int cmd_bytes;
LLOGLN(10, ("libxrdp_fastpath_init:"));
LLOGLN(10, ("libxrdp_fastpath_send_surface:"));
if ((session->client_info->use_fast_path & 1) == 0)
{
return 1;
@ -1341,13 +1432,13 @@ libxrdp_fastpath_send_surface(struct xrdp_session *session,
s->rdp_hdr = s->sec_hdr + sec_bytes;
s->end = data_pad + pad_bytes + data_bytes;
s->p = s->data + (rdp_bytes + sec_bytes);
/* TS_SURFCMD_SET_SURF_BITS */
out_uint16_le(s, 0x0001); /* CMDTYPE_SET_SURFACE_BITS */
/* TS_SURFCMD_STREAM_SURF_BITS */
out_uint16_le(s, CMDTYPE_STREAM_SURFACE_BITS);
out_uint16_le(s, destLeft);
out_uint16_le(s, destTop);
out_uint16_le(s, destRight);
out_uint16_le(s, destBottom);
/* TS_ BITMAP_DATA_EX */
/* TS_BITMAP_DATA_EX */
out_uint8(s, bpp);
out_uint8(s, 0);
out_uint8(s, 0);
@ -1362,3 +1453,40 @@ libxrdp_fastpath_send_surface(struct xrdp_session *session,
}
return 0;
}
/*****************************************************************************/
int EXPORT_CC
libxrdp_fastpath_send_frame_marker(struct xrdp_session *session,
int frame_action, int frame_id)
{
struct stream *s;
struct xrdp_rdp *rdp;
LLOGLN(10, ("libxrdp_fastpath_send_frame_marker:"));
if ((session->client_info->use_fast_path & 1) == 0)
{
return 1;
}
if (session->client_info->use_frame_acks == 0)
{
return 1;
}
rdp = (struct xrdp_rdp *) (session->rdp);
make_stream(s);
init_stream(s, 8192);
xrdp_rdp_init_fastpath(rdp, s);
out_uint16_le(s, 0x0004); /* CMDTYPE_FRAME_MARKER */
out_uint16_le(s, frame_action);
out_uint32_le(s, frame_id);
s_mark_end(s);
/* 4 = FASTPATH_UPDATETYPE_SURFCMDS */
if (xrdp_rdp_send_fastpath(rdp, s, 4) != 0)
{
free_stream(s);
return 1;
}
free_stream(s);
return 0;
}

View File

@ -281,7 +281,7 @@ struct xrdp_mppc_enc
char *outputBuffer; /* contains compressed data */
char *outputBufferPlus;
int historyOffset; /* next free slot in historyBuffer */
int buf_len; /* length of historyBuffer, protocol dependant */
int buf_len; /* length of historyBuffer, protocol dependent */
int bytes_in_opb; /* compressed bytes available in outputBuffer */
int flags; /* PACKET_COMPRESSED, PACKET_AT_FRONT, PACKET_FLUSHED etc */
int flagsHold;
@ -401,7 +401,7 @@ xrdp_rdp_process_data(struct xrdp_rdp *self, struct stream *s);
int APP_CC
xrdp_rdp_disconnect(struct xrdp_rdp *self);
int APP_CC
xrdp_rdp_send_deactive(struct xrdp_rdp *self);
xrdp_rdp_send_deactivate(struct xrdp_rdp *self);
/* xrdp_orders.c */
struct xrdp_orders * APP_CC

View File

@ -27,8 +27,8 @@
struct xrdp_brush
{
int x_orgin;
int y_orgin;
int x_origin;
int y_origin;
int style;
char pattern[8];
};
@ -72,6 +72,8 @@ struct xrdp_session
int up_and_running;
int (*is_term)(void);
int in_process_data; /* inc / dec libxrdp_process_data calls */
struct source_info si;
};
struct xrdp_session * DEFAULT_CC
@ -81,7 +83,7 @@ libxrdp_exit(struct xrdp_session *session);
int DEFAULT_CC
libxrdp_disconnect(struct xrdp_session *session);
int DEFAULT_CC
libxrdp_process_incomming(struct xrdp_session *session);
libxrdp_process_incoming(struct xrdp_session *session);
int EXPORT_CC
libxrdp_get_pdu_bytes(const char *aheader);
struct stream * APP_CC
@ -187,7 +189,7 @@ int DEFAULT_CC
libxrdp_query_channel(struct xrdp_session *session, int index,
char *channel_name, int *channel_flags);
int DEFAULT_CC
libxrdp_get_channel_id(struct xrdp_session *session, char *name);
libxrdp_get_channel_id(struct xrdp_session *session, const char *name);
int DEFAULT_CC
libxrdp_send_to_channel(struct xrdp_session *session, int channel_id,
char *data, int data_len,
@ -242,5 +244,8 @@ libxrdp_fastpath_send_surface(struct xrdp_session *session,
int destLeft, int dst_Top,
int destRight, int destBottom, int bpp,
int codecID, int width, int height);
int EXPORT_CC
libxrdp_fastpath_send_frame_marker(struct xrdp_session *session,
int frame_action, int frame_id);
#endif

View File

@ -107,7 +107,7 @@ fsplit3(char *in_data, int start_line, int width, int e,
}
start_line--;
cy++;
if (out_index > 64 * 64)
if (out_index + width + e > 64 * 64)
{
break;
}
@ -195,7 +195,7 @@ fsplit4(char *in_data, int start_line, int width, int e,
}
start_line--;
cy++;
if (out_index > 64 * 64)
if (out_index + width + e > 64 * 64)
{
break;
}
@ -422,6 +422,7 @@ xrdp_bitmap32_compress(char *in_data, int width, int height,
char *sr_data;
char *sg_data;
char *sb_data;
char *hold_p;
int a_bytes;
int r_bytes;
int g_bytes;
@ -449,6 +450,7 @@ xrdp_bitmap32_compress(char *in_data, int width, int height,
r_data = a_data + max_bytes;
g_data = r_data + max_bytes;
b_data = g_data + max_bytes;
hold_p = s->p;
if (header & FLAGS_NOALPHA)
{
@ -459,35 +461,44 @@ xrdp_bitmap32_compress(char *in_data, int width, int height,
fdelta(sr_data, r_data, cx, cy);
fdelta(sg_data, g_data, cx, cy);
fdelta(sb_data, b_data, cx, cy);
out_uint8(s, header);
r_bytes = fpack(r_data, cx, cy, s);
g_bytes = fpack(g_data, cx, cy, s);
b_bytes = fpack(b_data, cx, cy, s);
total_bytes = r_bytes + g_bytes + b_bytes;
if (1 + total_bytes > byte_limit)
while (cy > 0)
{
/* failed */
LLOGLN(0, ("xrdp_bitmap32_compress: too big, rgb "
"bytes %d %d %d total_bytes %d cx %d cy %d "
"byte_limit %d", r_bytes, g_bytes, b_bytes,
total_bytes, cx, cy, byte_limit));
return 0;
}
max_bytes = cx * cy * 3;
if (total_bytes > max_bytes)
{
/* raw is better */
LLOGLN(10, ("xrdp_bitmap32_compress: too big, rgb "
"bytes %d %d %d total_bytes %d cx %d cy %d "
"max_bytes %d", r_bytes, g_bytes, b_bytes,
total_bytes, cx, cy, max_bytes));
init_stream(s, 0);
foutraw3(s, cx * cy, FLAGS_NOALPHA, sr_data, sg_data, sb_data);
s->p = hold_p;
out_uint8(s, header);
r_bytes = fpack(r_data, cx, cy, s);
g_bytes = fpack(g_data, cx, cy, s);
b_bytes = fpack(b_data, cx, cy, s);
max_bytes = cx * cy * 3;
total_bytes = r_bytes + g_bytes + b_bytes;
if (total_bytes > max_bytes)
{
if (2 + max_bytes <= byte_limit)
{
s->p = hold_p;
foutraw3(s, cx * cy, FLAGS_NOALPHA, sr_data, sg_data, sb_data);
break;
}
}
if (1 + total_bytes <= byte_limit)
{
break;
}
cy--;
}
}
else
{
foutraw3(s, cx * cy, FLAGS_NOALPHA, sr_data, sg_data, sb_data);
while (cy > 0)
{
max_bytes = cx * cy * 3;
if (2 + max_bytes <= byte_limit)
{
s->p = hold_p;
foutraw3(s, cx * cy, FLAGS_NOALPHA, sr_data, sg_data, sb_data);
break;
}
cy--;
}
}
}
else
@ -500,36 +511,45 @@ xrdp_bitmap32_compress(char *in_data, int width, int height,
fdelta(sr_data, r_data, cx, cy);
fdelta(sg_data, g_data, cx, cy);
fdelta(sb_data, b_data, cx, cy);
out_uint8(s, header);
a_bytes = fpack(a_data, cx, cy, s);
r_bytes = fpack(r_data, cx, cy, s);
g_bytes = fpack(g_data, cx, cy, s);
b_bytes = fpack(b_data, cx, cy, s);
max_bytes = cx * cy * 4;
total_bytes = a_bytes + r_bytes + g_bytes + b_bytes;
if (1 + total_bytes > byte_limit)
while (cy > 0)
{
/* failed */
LLOGLN(0, ("xrdp_bitmap32_compress: too big, argb "
"bytes %d %d %d %d total_bytes %d cx %d cy %d "
"byte_limit %d", a_bytes, r_bytes, g_bytes, b_bytes,
total_bytes, cx, cy, byte_limit));
return 0;
}
if (total_bytes > max_bytes)
{
/* raw is better */
LLOGLN(10, ("xrdp_bitmap32_compress: too big, argb "
"bytes %d %d %d %d total_bytes %d cx %d cy %d "
"max_bytes %d", a_bytes, r_bytes, g_bytes, b_bytes,
total_bytes, cx, cy, max_bytes));
init_stream(s, 0);
foutraw4(s, cx * cy, 0, sa_data, sr_data, sg_data, sb_data);
s->p = hold_p;
out_uint8(s, header);
a_bytes = fpack(a_data, cx, cy, s);
r_bytes = fpack(r_data, cx, cy, s);
g_bytes = fpack(g_data, cx, cy, s);
b_bytes = fpack(b_data, cx, cy, s);
max_bytes = cx * cy * 4;
total_bytes = a_bytes + r_bytes + g_bytes + b_bytes;
if (total_bytes > max_bytes)
{
if (2 + max_bytes <= byte_limit)
{
s->p = hold_p;
foutraw4(s, cx * cy, 0, sa_data, sr_data, sg_data, sb_data);
break;
}
}
if (1 + total_bytes <= byte_limit)
{
break;
}
cy--;
}
}
else
{
foutraw4(s, cx * cy, 0, sa_data, sr_data, sg_data, sb_data);
while (cy > 0)
{
max_bytes = cx * cy * 4;
if (2 + max_bytes <= byte_limit)
{
s->p = hold_p;
foutraw4(s, cx * cy, 0, sa_data, sr_data, sg_data, sb_data);
break;
}
cy--;
}
}
}
return cy;

View File

@ -22,6 +22,8 @@
#include "libxrdp.h"
#define BC_MAX_BYTES (16 * 1024)
/*****************************************************************************/
#define IN_PIXEL8(in_ptr, in_x, in_y, in_w, in_last_pixel, in_pixel); \
do { \
@ -695,7 +697,7 @@ xrdp_bitmap_compress(char *in_data, int width, int height,
out_count = end;
line = in_data + width * start_line;
while (start_line >= 0 && out_count < 32768)
while (start_line >= 0 && out_count <= BC_MAX_BYTES)
{
i = (s->p - s->data) + count;
@ -987,7 +989,7 @@ xrdp_bitmap_compress(char *in_data, int width, int height,
out_count = end * 2;
line = in_data + width * start_line * 2;
while (start_line >= 0 && out_count < 32768)
while (start_line >= 0 && out_count <= BC_MAX_BYTES)
{
i = (s->p - s->data) + count * 2;
@ -1279,7 +1281,7 @@ xrdp_bitmap_compress(char *in_data, int width, int height,
out_count = end * 3;
line = in_data + width * start_line * 4;
while (start_line >= 0 && out_count < 32768)
while (start_line >= 0 && out_count <= BC_MAX_BYTES)
{
i = (s->p - s->data) + count * 3;

Some files were not shown because too many files have changed in this diff Show More