diff --git a/rosapps/applications/sysutils/sysutils.rbuild b/rosapps/applications/sysutils/sysutils.rbuild
index 4969d58a2ba..47ec3b08867 100644
--- a/rosapps/applications/sysutils/sysutils.rbuild
+++ b/rosapps/applications/sysutils/sysutils.rbuild
@@ -52,10 +52,6 @@
-
-
-
-
diff --git a/rosapps/applications/sysutils/telnetd/serviceentry.c b/rosapps/applications/sysutils/telnetd/serviceentry.c
deleted file mode 100644
index 015d057d00d..00000000000
--- a/rosapps/applications/sysutils/telnetd/serviceentry.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright 2007 Jacek Caban for CodeWeavers
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-#if 0
-#define WIN32_LEAN_AND_MEAN
-
-#include
-
-#define WINE_FIXME printf
-#define WINE_TRACE printf
-
-//#include "wine/debug.h"
-
-//WINE_DEFAULT_DEBUG_CHANNEL(spoolsv);
-
-static WCHAR telnetdW[] = {'T','e','l','n','e','t','D',0};
-
-static SERVICE_STATUS_HANDLE service_handle;
-static HANDLE stop_event;
-
-static DWORD WINAPI service_handler( DWORD ctrl, DWORD event_type, LPVOID event_data, LPVOID context )
-{
- SERVICE_STATUS status;
-
- status.dwServiceType = SERVICE_WIN32;
- status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
- status.dwWin32ExitCode = 0;
- status.dwServiceSpecificExitCode = 0;
- status.dwCheckPoint = 0;
- status.dwWaitHint = 0;
-
- switch(ctrl)
- {
- case SERVICE_CONTROL_STOP:
- case SERVICE_CONTROL_SHUTDOWN:
- WINE_TRACE( "shutting down\n" );
- status.dwCurrentState = SERVICE_STOP_PENDING;
- status.dwControlsAccepted = 0;
- SetServiceStatus( service_handle, &status );
- SetEvent( stop_event );
- return NO_ERROR;
- default:
- WINE_FIXME( "got service ctrl %x\n", ctrl );
- status.dwCurrentState = SERVICE_RUNNING;
- SetServiceStatus( service_handle, &status );
- return NO_ERROR;
- }
-}
-
-static void WINAPI serv_main(DWORD argc, LPWSTR *argv)
-{
- SERVICE_STATUS status;
- int retval;
-
- WINE_TRACE( "starting service\n" );
-
- stop_event = CreateEventW( NULL, TRUE, FALSE, NULL );
-
- service_handle = RegisterServiceCtrlHandlerExW( telnetdW, service_handler, NULL );
- if (!service_handle)
- return;
-
- status.dwServiceType = SERVICE_WIN32;
- status.dwCurrentState = SERVICE_RUNNING;
- status.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
- status.dwWin32ExitCode = 0;
- status.dwServiceSpecificExitCode = 0;
- status.dwCheckPoint = 0;
- status.dwWaitHint = 10000;
- SetServiceStatus( service_handle, &status );
-
- /* Argument Ignored for now */
- retval = kickoff_telnetd();
-
- WaitForSingleObject( stop_event, INFINITE );
-
- status.dwCurrentState = SERVICE_STOPPED;
- status.dwControlsAccepted = 0;
- SetServiceStatus( service_handle, &status );
- WINE_TRACE( "service stopped\n" );
-}
-
-int main(int argc, char **argv)
-{
- static const SERVICE_TABLE_ENTRYW servtbl[] = {
- {telnetdW, serv_main},
- {NULL, NULL}
- };
-
- WINE_TRACE("(%d %p)\n", argc, argv);
-
- StartServiceCtrlDispatcherW(servtbl);
- return 0;
-}
-#endif
-/* EOF */
-
diff --git a/rosapps/applications/sysutils/telnetd/syslog.c b/rosapps/applications/sysutils/telnetd/syslog.c
deleted file mode 100644
index 1ee4499a921..00000000000
--- a/rosapps/applications/sysutils/telnetd/syslog.c
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * syslog-client.c - syslog client implementation for windows
- *
- * Created by Alexander Yaworsky
- *
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
-
-/* define SYSLOG_CONF_DIR where syslog.host should be
- */
-
-#ifndef SYSLOG_CONF_DIR
-static const char *syslog_conf_dir = ".";
-#else
-static const char *syslog_conf_dir = SYSLOG_CONF_DIR;
-#endif
-
-#include
-#include
-#include
-#include
-#include "syslog.h"
-
-#ifdef TEST
-# define SYSLOG_DGRAM_SIZE 80
-#else
-# define SYSLOG_DGRAM_SIZE 1024
-#endif
-
-static BOOL initialized = FALSE;
-static int log_mask = 0xFF;
-static char *syslog_ident;
-static int syslog_facility;
-static char str_pid[ 40 ];
-static SOCKADDR_IN sa_logger;
-static SOCKET sock;
-static char local_hostname[ MAX_COMPUTERNAME_LENGTH + 1 ];
-static char datagramm[ SYSLOG_DGRAM_SIZE ];
-static int datagramm_size;
-
-/******************************************************************************
- * set_syslog_conf_dir
- *
- * maybe this function will be useful...
- */
-const char* set_syslog_conf_dir( const char* dir )
-{
- const char *ret = syslog_conf_dir;
- syslog_conf_dir = dir;
- return ret;
-}
-
-/******************************************************************************
- * init_logger_addr
- *
- * Read configuration file syslog.host. This file should contain host address
- * and, optionally, port. Initialize sa_logger. If the configuration file does
- * not exist, use localhost:514.
- * Returns: 0 - ok, -1 - error.
- */
-static void init_logger_addr()
-{
- char pathname[ FILENAME_MAX ];
- char *p;
- FILE *fd;
- char host[256];
- struct hostent * phe;
-
- memset( &sa_logger, 0, sizeof(SOCKADDR_IN) );
- sa_logger.sin_family = AF_INET;
-
- if( '\\' == syslog_conf_dir[0] || '/' == syslog_conf_dir[0] || ':' == syslog_conf_dir[1] )
- {
- /* absolute path */
- strcpy( pathname, syslog_conf_dir );
- }
- else
- {
- /* relative path */
- char *q;
-
- strcpy( pathname, __argv[0] );
- p = strrchr( pathname, '\\' ) + 1;
- q = strrchr( pathname, '/' ) + 1;
- if( p < q )
- *q = 0;
- else if( p > q )
- *p = 0;
- else
- pathname[0] = 0;
- strcat( pathname, syslog_conf_dir );
- }
- p = &pathname[ strlen( pathname ) - 1 ];
- if( '\\' != *p && '/' != *p )
- {
- p++; *p = '/';
- }
- strcpy( ++p, "syslog.host" );
-
- /* read destination host name */
- fd = fopen( pathname, "r" );
- if( !fd )
- goto use_default;
-
- if( NULL == fgets( host, sizeof(host), fd ) )
- host[0] = 0;
- else
- {
- p = strchr( host, '\n' );
- if( p )
- *p = 0;
- p = strchr( host, '\r' );
- if( p )
- *p = 0;
- }
- fclose( fd );
-
- p = strchr( host, ':' );
- if( p )
- *p++ = 0;
-
- phe = gethostbyname( host );
- if( !phe )
- goto use_default;
-
- memcpy( &sa_logger.sin_addr.s_addr, phe->h_addr, phe->h_length );
-
- if( p )
- sa_logger.sin_port = htons( (unsigned short) strtoul( p, NULL, 0 ) );
- else
- sa_logger.sin_port = htons( SYSLOG_PORT );
- return;
-
-use_default:
- sa_logger.sin_addr.S_un.S_addr = htonl( 0x7F000001 );
- sa_logger.sin_port = htons( SYSLOG_PORT );
-}
-
-/******************************************************************************
- * closelog
- *
- * Close desriptor used to write to system logger.
- */
-void closelog()
-{
- if( !initialized )
- return;
- closesocket( sock );
- WSACleanup();
- initialized = FALSE;
-}
-
-/******************************************************************************
- * openlog
- *
- * Open connection to system logger.
- */
-void openlog( char* ident, int option, int facility )
-{
- BOOL failed = TRUE, wsa_initialized = FALSE;
- WSADATA wsd;
- SOCKADDR_IN sa_local;
- DWORD n;
- int size;
-
- if( initialized )
- return;
-
- syslog_facility = facility? facility : LOG_USER;
-
- /* FIXME: should we reset logmask? */
-
- if( option & LOG_PID )
- snprintf( str_pid, sizeof(str_pid), "[%lu]", GetCurrentProcessId() );
- else
- str_pid[0] = 0;
-
- /* FIXME: handle other options */
-
- n = sizeof(local_hostname);
- if( !GetComputerName( local_hostname, &n ) )
- goto done;
-
- sock = INVALID_SOCKET;
- if( WSAStartup( MAKEWORD( 2, 2 ), &wsd ) )
- goto done;
- wsa_initialized = TRUE;
-
- init_logger_addr();
-
- for( n = 0;; n++ )
- {
- sock = socket( AF_INET, SOCK_DGRAM, 0 );
- if( INVALID_SOCKET == sock )
- goto done;
-
- memset( &sa_local, 0, sizeof(SOCKADDR_IN) );
- sa_local.sin_family = AF_INET;
- if( bind( sock, (SOCKADDR*) &sa_local, sizeof(SOCKADDR_IN) ) == 0 )
- break;
- closesocket( sock );
- sock = INVALID_SOCKET;
- if( n == 100 )
- goto done;
- Sleep(0);
- }
-
- /* get size of datagramm */
- size = sizeof(datagramm_size);
- if( getsockopt( sock, SOL_SOCKET, SO_MAX_MSG_SIZE, (char*) &datagramm_size, &size ) )
- goto done;
- if( datagramm_size - strlen(local_hostname) - (ident? strlen(ident) : 0) < 64 )
- goto done;
- if( datagramm_size > sizeof(datagramm) )
- datagramm_size = sizeof(datagramm);
-
- if( atexit( closelog ) )
- goto done;
-
- syslog_ident = ident;
- syslog_facility = facility;
- failed = FALSE;
-
-done:
- if( failed )
- {
- if( sock != INVALID_SOCKET ) closesocket( sock );
- if( wsa_initialized ) WSACleanup();
- }
- initialized = !failed;
-}
-
-/******************************************************************************
- * setlogmask
- *
- * Set the log mask level.
- */
-int setlogmask( int mask )
-{
- int ret = log_mask;
-
- if( mask )
- log_mask = mask;
- return ret;
-}
-
-/******************************************************************************
- * syslog
- *
- * Generate a log message using FMT string and option arguments.
- */
-void syslog( int pri, char* fmt, ... )
-{
- va_list ap;
-
- va_start( ap, fmt );
- vsyslog( pri, fmt, ap );
- va_end( ap );
-}
-
-/******************************************************************************
- * vsyslog
- *
- * Generate a log message using FMT and using arguments pointed to by AP.
- */
-void vsyslog( int pri, char* fmt, va_list ap )
-{
- static char *month[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
- SYSTEMTIME stm;
- int len;
- char *p;
-
- if( !(LOG_MASK( LOG_PRI( pri )) & log_mask) )
- return;
-
- openlog( NULL, 0, pri & LOG_FACMASK );
- if( !initialized )
- return;
-
- if( !(pri & LOG_FACMASK) )
- pri |= syslog_facility;
-
- GetLocalTime( &stm );
- len = sprintf( datagramm, "<%d>%s %2d %02d:%02d:%02d %s %s%s: ",
- pri,
- month[ stm.wMonth - 1 ], stm.wDay, stm.wHour, stm.wMinute, stm.wSecond,
- local_hostname, syslog_ident? syslog_ident : "", str_pid );
- vsnprintf( datagramm + len, datagramm_size - len, fmt, ap );
- p = strchr( datagramm, '\n' );
- if( p )
- *p = 0;
- p = strchr( datagramm, '\r' );
- if( p )
- *p = 0;
-
- sendto( sock, datagramm, strlen(datagramm), 0, (SOCKADDR*) &sa_logger, sizeof(SOCKADDR_IN) );
-}
-
diff --git a/rosapps/applications/sysutils/telnetd/syslog.h b/rosapps/applications/sysutils/telnetd/syslog.h
deleted file mode 100644
index 2dbf821961a..00000000000
--- a/rosapps/applications/sysutils/telnetd/syslog.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (c) 1982, 1986, 1988, 1993
- * The Regents of the University of California. 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.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- * @(#)syslog.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _SYS_SYSLOG_H
-#define _SYS_SYSLOG_H 1
-
-#include
-
-/*
- * priorities/facilities are encoded into a single 32-bit quantity, where the
- * bottom 3 bits are the priority (0-7) and the top 28 bits are the facility
- * (0-big number). Both the priorities and the facilities map roughly
- * one-to-one to strings in the syslogd(8) source code. This mapping is
- * included in this file.
- *
- * priorities (these are ordered)
- */
-#define LOG_EMERG 0 /* system is unusable */
-#define LOG_ALERT 1 /* action must be taken immediately */
-#define LOG_CRIT 2 /* critical conditions */
-#define LOG_ERR 3 /* error conditions */
-#define LOG_WARNING 4 /* warning conditions */
-#define LOG_NOTICE 5 /* normal but significant condition */
-#define LOG_INFO 6 /* informational */
-#define LOG_DEBUG 7 /* debug-level messages */
-
-#define LOG_PRIMASK 0x07 /* mask to extract priority part (internal) */
- /* extract priority */
-#define LOG_PRI(p) ((p) & LOG_PRIMASK)
-#define LOG_MAKEPRI(fac, pri) (((fac) << 3) | (pri))
-
-#ifdef SYSLOG_NAMES
-#define INTERNAL_NOPRI 0x10 /* the "no priority" priority */
- /* mark "facility" */
-#define INTERNAL_MARK LOG_MAKEPRI(LOG_NFACILITIES, 0)
-typedef struct _code {
- char *c_name;
- int c_val;
-} CODE;
-
-CODE prioritynames[] =
- {
- { "alert", LOG_ALERT },
- { "crit", LOG_CRIT },
- { "debug", LOG_DEBUG },
- { "emerg", LOG_EMERG },
- { "err", LOG_ERR },
- { "error", LOG_ERR }, /* DEPRECATED */
- { "info", LOG_INFO },
- { "none", INTERNAL_NOPRI }, /* INTERNAL */
- { "notice", LOG_NOTICE },
- { "panic", LOG_EMERG }, /* DEPRECATED */
- { "warn", LOG_WARNING }, /* DEPRECATED */
- { "warning", LOG_WARNING },
- { NULL, -1 }
- };
-#endif
-
-/* facility codes */
-#define LOG_KERN (0<<3) /* kernel messages */
-#define LOG_USER (1<<3) /* random user-level messages */
-#define LOG_MAIL (2<<3) /* mail system */
-#define LOG_DAEMON (3<<3) /* system daemons */
-#define LOG_AUTH (4<<3) /* security/authorization messages */
-#define LOG_SYSLOG (5<<3) /* messages generated internally by syslogd */
-#define LOG_LPR (6<<3) /* line printer subsystem */
-#define LOG_NEWS (7<<3) /* network news subsystem */
-#define LOG_UUCP (8<<3) /* UUCP subsystem */
-#define LOG_CRON (9<<3) /* clock daemon */
-#define LOG_AUTHPRIV (10<<3) /* security/authorization messages (private) */
-#define LOG_FTP (11<<3) /* ftp daemon */
-
- /* other codes through 15 reserved for system use */
-#define LOG_LOCAL0 (16<<3) /* reserved for local use */
-#define LOG_LOCAL1 (17<<3) /* reserved for local use */
-#define LOG_LOCAL2 (18<<3) /* reserved for local use */
-#define LOG_LOCAL3 (19<<3) /* reserved for local use */
-#define LOG_LOCAL4 (20<<3) /* reserved for local use */
-#define LOG_LOCAL5 (21<<3) /* reserved for local use */
-#define LOG_LOCAL6 (22<<3) /* reserved for local use */
-#define LOG_LOCAL7 (23<<3) /* reserved for local use */
-
-#define LOG_NFACILITIES 24 /* current number of facilities */
-#define LOG_FACMASK 0x03f8 /* mask to extract facility part */
- /* facility of pri */
-#define LOG_FAC(p) (((p) & LOG_FACMASK) >> 3)
-
-#ifdef SYSLOG_NAMES
-CODE facilitynames[] =
- {
- { "auth", LOG_AUTH },
- { "authpriv", LOG_AUTHPRIV },
- { "cron", LOG_CRON },
- { "daemon", LOG_DAEMON },
- { "ftp", LOG_FTP },
- { "kern", LOG_KERN },
- { "lpr", LOG_LPR },
- { "mail", LOG_MAIL },
- { "mark", INTERNAL_MARK }, /* INTERNAL */
- { "news", LOG_NEWS },
- { "security", LOG_AUTH }, /* DEPRECATED */
- { "syslog", LOG_SYSLOG },
- { "user", LOG_USER },
- { "uucp", LOG_UUCP },
- { "local0", LOG_LOCAL0 },
- { "local1", LOG_LOCAL1 },
- { "local2", LOG_LOCAL2 },
- { "local3", LOG_LOCAL3 },
- { "local4", LOG_LOCAL4 },
- { "local5", LOG_LOCAL5 },
- { "local6", LOG_LOCAL6 },
- { "local7", LOG_LOCAL7 },
- { NULL, -1 }
- };
-#endif
-
-/*
- * arguments to setlogmask.
- */
-#define LOG_MASK(pri) (1 << (pri)) /* mask for one priority */
-#define LOG_UPTO(pri) ((1 << ((pri)+1)) - 1) /* all priorities through pri */
-
-/*
- * Option flags for openlog.
- *
- * LOG_ODELAY no longer does anything.
- * LOG_NDELAY is the inverse of what it used to be.
- */
-#define LOG_PID 0x01 /* log the pid with each message */
-#define LOG_CONS 0x02 /* log on the console if errors in sending */
-#define LOG_ODELAY 0x04 /* delay open until first syslog() (default) */
-#define LOG_NDELAY 0x08 /* don't delay open */
-#define LOG_NOWAIT 0x10 /* don't wait for console forks: DEPRECATED */
-#define LOG_PERROR 0x20 /* log to stderr as well */
-
-#define SYSLOG_PORT 514
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Close desriptor used to write to system logger. */
-extern void closelog (void);
-
-/* Open connection to system logger. */
-extern void openlog (char *__ident, int __option, int __facility);
-
-/* Set the log mask level. */
-extern int setlogmask (int __mask);
-
-/* Generate a log message using FMT string and option arguments. */
-extern void syslog (int __pri, char *__fmt, ...);
-
-/* Generate a log message using FMT and using arguments pointed to by AP. */
-extern void vsyslog (int __pri, char *__fmt, va_list __ap);
-
-/* windows-specific;
- set directory from where syslog.host must be read;
- this file contains a single line with hostname and port of syslog daemon;
- default is localhost:514
-*/
-extern const char* set_syslog_conf_dir( const char* dir );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* syslog.h */
diff --git a/rosapps/applications/sysutils/telnetd/telnetd.c b/rosapps/applications/sysutils/telnetd/telnetd.c
deleted file mode 100644
index 6dbd20ddc2d..00000000000
--- a/rosapps/applications/sysutils/telnetd/telnetd.c
+++ /dev/null
@@ -1,636 +0,0 @@
-/*
- * Abstract: a simple telnet 'daemon' for Windows hosts.
- *
- * Compiled & run successfully using MSVC 5.0 under Windows95 (requires
- * Winsock2 update) and Windows98 and MSVC 6.0 under WindowsNT4
- *
- * Compiler options : no special options needed
- * Linker options : add wsock32.lib or ws2_32.lib
- *
- * Written by fred.van.lieshout 'at' zonnet.nl
- * Use freely, no copyrights.
- * Use Linux.
- *
- * Parts Copyright Steven Edwards
- * Public Domain
- *
- * TODO:
- * - access control
- * - will/won't handshake
- * - Unify Debugging output and return StatusCodes
- */
-
-#include "telnetd.h"
-
-#define telnetd_printf printf
-#if 0
-static inline int telnetd_printf(const char *format, ...);
-{
- printf(format,...);
- syslog (6, format);
-}
-#endif
-
-/* Local data */
-
-static BOOLEAN bShutdown = 0;
-static BOOLEAN bSocketInterfaceInitialised = 0;
-static int sock;
-
-/* In the future, some options might be passed here to handle
- * authentication options in the registry or command line
- * options passed to the service
- *
- * Once you are ready to turn on the service
- * rename this function
- * int kickoff_telnetd(void)
- */
-int main(int argc, char **argv)
-{
- printf("Attempting to start Simple TelnetD\n");
-
-// DetectPlatform();
- SetConsoleCtrlHandler(Cleanup, 1);
-
- if (!StartSocketInterface())
- ErrorExit("Unable to start socket interface\n");
-
- CreateSocket();
-
- while(!bShutdown) {
- WaitForConnect();
- }
-
- WSACleanup();
- return 0;
-}
-
-/* Cleanup */
-static BOOL WINAPI Cleanup(DWORD dwControlType)
-{
- if (bSocketInterfaceInitialised) {
- telnetd_printf("Cleanup...\n");
- WSACleanup();
- }
- return 0;
-}
-
-/* StartSocketInterface */
-static BOOLEAN StartSocketInterface(void)
-{
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
-
- wVersionRequested = MAKEWORD( 2, 0 );
- err = WSAStartup(wVersionRequested, &wsaData);
- if (err != 0) {
- telnetd_printf("requested winsock version not supported\n");
- return 0;
- }
-
- bSocketInterfaceInitialised = 1; /* for ErrorExit function */
-
- if ( wsaData.wVersion != wVersionRequested)
- ErrorExit("requested winsock version not supported\n");
-
- telnetd_printf("TelnetD, using %s\n", wsaData.szDescription);
- return 1;
-}
-
-/* CreateSocket */
-static void CreateSocket(void)
-{
- struct sockaddr_in sa;
-
- sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (sock < 0)
- ErrorExit("Cannot create socket");
-
- memset(&sa, 0, sizeof(sa));
- sa.sin_family = AF_INET;
- sa.sin_addr.s_addr = INADDR_ANY;
- sa.sin_port = htons(TELNET_PORT);
-
- if (bind(sock, (struct sockaddr*) &sa, sizeof(sa)) != 0)
- ErrorExit("Cannot bind address to socket");
-}
-
-/* WaitForConnect */
-static void WaitForConnect(void)
-{
- struct sockaddr_in sa;
- int new_sock;
-
- if (listen(sock, 1) < 0)
- ErrorExit("Cannot listen on socket");
-
- if ((new_sock = accept(sock, (struct sockaddr*) &sa, NULL)) < 0) {
- fprintf(stderr, "Failed to accept incoming call\n");
- } else {
- telnetd_printf("user connected on socket %d, port %d, address %lx\n", new_sock,
- htons(sa.sin_port), sa.sin_addr.s_addr);
- UserLogin(new_sock);
- }
-}
-
-/* Function: UserLogin */
-static void UserLogin(int client_socket)
-{
- DWORD threadID;
- client_t *client = malloc(sizeof(client_t));
-
- if (client == NULL)
- ErrorExit("failed to allocate memory for client");
-
- client->socket = client_socket;
- CreateThread(NULL, 0, UserLoginThread, client, 0, &threadID);
-}
-
-/* Function: UserLoginThread */
-static DWORD WINAPI UserLoginThread(LPVOID data)
-{
- client_t *client = (client_t *) data;
- char welcome[256];
- char hostname[64] = "Unknown";
- char *pwdPrompt = "\r\npass:";
- //char *logonPrompt = "\r\nLogin OK, please wait...";
- //char *byebye = "\r\nWrong! bye bye...\r\n";
- char userID[USERID_SIZE];
- char password[USERID_SIZE];
- int received;
- char *terminator;
-
- if (DoTelnetHandshake(client->socket)) {
- closesocket(client->socket);
- free(client);
- return 0;
- }
-
- gethostname(hostname, sizeof(hostname));
- sprintf(welcome, "\r\nWelcome to %s, please identify yourself\r\n\r\nuser:", hostname);
-
- if (send(client->socket, welcome, strlen(welcome), 0) < 0) {
- closesocket(client->socket);
- free(client);
- return 0;
- }
- received = ReceiveLine(client->socket, userID, sizeof(userID), Echo );
- if (received < 0) {
- closesocket(client->socket);
- free(client);
- return 0;
- } else if (received) {
- if ((terminator = strchr(userID, CR)) != NULL) {
- *terminator = '\0';
- }
- }
-
- if (send(client->socket, pwdPrompt, strlen(pwdPrompt), 0) < 0) {
- closesocket(client->socket);
- free(client);
- return 0;
- }
- received = ReceiveLine(client->socket, password, sizeof(password), Password );
-
-#if 0
- if (received < 0) {
- closesocket(client->socket);
- free(client);
- return 0;
- } else if (received) {
- if ((terminator = strchr(password, CR)) != NULL) {
- *terminator = '\0';
- }
- }
-#endif
-
- /* TODO: do authentication here */
-
-
- telnetd_printf("User '%p' logged on\n", userID);
-#if 0
- strcpy(client->userID, userID);
- if (send(client->socket, logonPrompt, strlen(logonPrompt), 0) < 0) {
- closesocket(client->socket);
- free(client);
- return 0;
- }
-#endif
- RunShell(client);
- return 0;
-}
-
-/* Function: DoTelnetHandshake */
-static int DoTelnetHandshake(int sock)
-{
- int retval;
- int received;
- fd_set set;
- struct timeval timeout = { HANDSHAKE_TIMEOUT, 0 };
-
- char will_echo[]=
- IAC DONT ECHO
- IAC WILL ECHO
- IAC WILL NAWS
- IAC WILL SUPPRESS_GO_AHEAD
- IAC DO SUPPRESS_GO_AHEAD
- IAC DONT NEWENVIRON
- IAC WONT NEWENVIRON
- IAC WONT LINEMODE
- IAC DO NAWS
- IAC SB TERMINAL_TYPE "\x01" IAC SE
- ;
-
- unsigned char client_reply[256];
-
- if (send(sock, will_echo, sizeof(will_echo), 0) < 0) {
- return -1;
- }
-
- /* Now wait for client response (and ignore it) */
- FD_ZERO(&set);
- FD_SET(sock, &set);
-
- do {
- retval = select(0, &set, NULL, NULL, &timeout);
- /* check for error */
- if (retval < 0) {
- return -1;
- /* check for timeout */
- } else if (retval == 0) {
- return 0;
- }
- /* no error and no timeout, we have data in our sock */
- received = recv(sock, (char *) client_reply, sizeof(client_reply), 0);
- if (received <= 0) {
- return -1;
- }
- } while (retval);
-
- return 0;
-}
-
-/*
-** Function: ReceiveLine
-**
-** Abstract: receive until timeout or CR
-** In : sock, len
-** Out : buffer
-** Result : int
-** Pre : 'sock' must be valid socket
-** Post : (result = the number of bytes read into 'buffer')
-** OR (result = -1 and error)
-*/
-static int ReceiveLine(int sock, char *buffer, int len, EchoMode echo)
-{
- int i = 0;
- int retval;
- fd_set set;
- struct timeval timeout = { 0, 100000 };
- char del[3] = { BS, ' ', BS };
- char asterisk[1] = { '*' };
-
- FD_ZERO(&set);
- FD_SET(sock, &set);
-
- memset(buffer, '\0', len);
-
- do {
- /* When we're in echo mode, we do not need a timeout */
- retval = select(0, &set, NULL, NULL, (echo ? NULL : &timeout) );
- /* check for error */
- if (retval < 0) {
- return -1;
- /* check for timeout */
- } else if (retval == 0) {
- /* return number of characters received so far */
- return i;
- }
- /* no error and no timeout, we have data in our sock */
- if (recv(sock, &buffer[i], 1, 0) <= 0) {
- return -1;
- }
- if ((buffer[i] == '\0') || (buffer[i] == LF)) {
- /* ignore null characters and linefeeds from DOS telnet clients */
- buffer[i] = '\0';
- } else if ((buffer[i] == DEL) || (buffer[i] == BS)) {
- /* handle delete and backspace */
- buffer[i] = '\0';
- if (echo) {
- if (i > 0) {
- i--;
- buffer[i] = '\0';
- if (send(sock, del, sizeof(del), 0) < 0) {
- return -1;
- }
- }
- } else {
- buffer[i] = BS; /* Let shell process handle it */
- i++;
- }
- } else {
- /* echo typed characters */
- if (echo == Echo && send(sock, &buffer[i], 1, 0) < 0) {
- return -1;
- } else if (echo == Password && send(sock, asterisk, sizeof(asterisk), 0) < 0) {
- return -1;
- }
- if (buffer[i] == CR) {
- i++;
- buffer[i] = LF; /* append LF for DOS command processor */
- i++;
- return i;
- }
-
- i++;
- }
- } while (i < len);
-
- return i;
-}
-
-/*
-** Function: RunShell
-*/
-static void RunShell(client_t *client)
-{
- DWORD threadID;
- HANDLE hChildStdinRd;
- HANDLE hChildStdinWr;
- HANDLE hChildStdoutRd;
- HANDLE hChildStdoutWr;
- STARTUPINFO si;
- PROCESS_INFORMATION piProcInfo;
- SECURITY_ATTRIBUTES saAttr;
-
- const char *name = "c:\\reactos\\system32\\cmd.exe";
- const char *cmd = NULL;
- //const char *name = "d:\\cygwin\\bin\\bash.exe";
- //const char *cmd = "d:\\cygwin\\bin\\bash.exe --login -i";
-
- saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
- saAttr.bInheritHandle = TRUE;
- saAttr.lpSecurityDescriptor = NULL;
-
- // Create a pipe for the child process's STDOUT.
- if (! CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0))
- ErrorExit("Stdout pipe creation failed\n");
-
- if (! CreatePipe(&hChildStdinRd, &hChildStdinWr, &saAttr, 0))
- ErrorExit("Stdin pipe creation failed\n");
-
-
- client->bTerminate = FALSE;
- client->bWriteToPipe = TRUE;
- client->bReadFromPipe = TRUE;
- client->hChildStdinWr = hChildStdinWr;
- client->hChildStdoutRd = hChildStdoutRd;
-
-
- // Create the child process (the shell)
- telnetd_printf("Creating child process...\n");
-
- ZeroMemory( &si, sizeof(STARTUPINFO) );
- si.cb = sizeof(STARTUPINFO);
-
- si.dwFlags = STARTF_USESTDHANDLES;
- si.hStdInput = hChildStdinRd;
- si.hStdOutput = hChildStdoutWr;
- si.hStdError = hChildStdoutWr;
-
- //si.dwFlags |= STARTF_USESHOWWINDOW;
- //si.wShowWindow = SW_SHOW;
-
- if (!CreateProcess((LPSTR) name, // executable module
- (LPSTR) cmd, // command line
- NULL, // process security attributes
- NULL, // primary thread security attributes
- TRUE, // handles are inherited
- DETACHED_PROCESS + // creation flags
- CREATE_NEW_PROCESS_GROUP,
- NULL, // use parent's environment
- NULL, // use parent's current directory
- &si, // startup info
- &piProcInfo)) {
- ErrorExit("Create process failed");
- }
-
- client->hProcess = piProcInfo.hProcess;
- client->dwProcessId = piProcInfo.dwProcessId;
-
- telnetd_printf("New child created (groupid=%lu)\n", client->dwProcessId);
-
- // No longer need these in the parent...
- if (!CloseHandle(hChildStdoutWr))
- ErrorExit("Closing handle failed");
-
- if (!CloseHandle(hChildStdinRd))
- ErrorExit("Closing handle failed");
-
- CreateThread(NULL, 0, WriteToPipeThread, client, 0, &threadID);
- CreateThread(NULL, 0, ReadFromPipeThread, client, 0, &threadID);
- CreateThread(NULL, 0, MonitorChildThread, client, 0, &threadID);
-}
-
-/*
- * Function: MonitorChildThread
- *
- * Abstract: Monitor the child (shell) process
- */
-static DWORD WINAPI MonitorChildThread(LPVOID data)
-{
- DWORD exitCode;
- client_t *client = (client_t *) data;
-
- telnetd_printf("Monitor thread running...\n");
-
- WaitForSingleObject(client->hProcess, INFINITE);
-
- GetExitCodeProcess(client->hProcess, &exitCode);
- telnetd_printf("Child process terminated with code %lx\n", exitCode);
-
- /* signal the other threads to give up */
- client->bTerminate = TRUE;
-
- Sleep(500);
-
- CloseHandle(client->hChildStdoutRd);
- CloseHandle(client->hChildStdinWr);
- CloseHandle(client->hProcess);
-
- closesocket(client->socket);
-
- telnetd_printf("Waiting for all threads to give up..\n");
-
- while (client->bWriteToPipe || client->bReadFromPipe) {
- telnetd_printf(".");
- fflush(stdout);
- Sleep(1000);
- }
-
- telnetd_printf("Cleanup for user '%s'\n", client->userID);
- free(client);
- return 0;
-}
-
-/*
- * Function: WriteToPipeThread
- *
- * Abstract: read data from the telnet client socket
- * and pass it on to the shell process.
- */
-static DWORD WINAPI WriteToPipeThread(LPVOID data)
-{
- int iRead;
- DWORD dwWritten;
- CHAR chBuf[BUFSIZE];
- client_t *client = (client_t *) data;
-
- while (!client->bTerminate) {
- iRead = ReceiveLine(client->socket, chBuf, BUFSIZE, FALSE);
- if (iRead < 0) {
- telnetd_printf("Client disconnect\n");
- break;
- } else if (iRead > 0) {
- if (strchr(chBuf, CTRLC)) {
- GenerateConsoleCtrlEvent(CTRL_C_EVENT, client->dwProcessId);
- }
- if (send(client->socket, chBuf, iRead, 0) < 0) {
- telnetd_printf("error writing to socket\n");
- break;
- }
- if (! WriteFile(client->hChildStdinWr, chBuf, (DWORD) iRead, &dwWritten, NULL)) {
- telnetd_printf("Error writing to pipe\n");
- break;
- }
- }
- }
-
- if (!client->bTerminate)
- TerminateShell(client);
-
- telnetd_printf("WriteToPipeThread terminated\n");
-
- client->bWriteToPipe = FALSE;
- return 0;
-}
-
-/*
- * Function: ReadFromPipeThread
- *
- * Abstract: Read data from the shell's stdout handle and
- * pass it on to the telnet client socket.
- */
-static DWORD WINAPI ReadFromPipeThread(LPVOID data)
-{
- DWORD dwRead;
- DWORD dwAvail;
- CHAR chBuf[BUFSIZE];
- CHAR txBuf[BUFSIZE*2];
- DWORD from,to;
- //char warning[] = "warning: rl_prep_terminal: cannot get terminal settings";
-
- client_t *client = (client_t *) data;
-
- while (!client->bTerminate && client->bWriteToPipe) {
- // Since we do not want to block, first peek...
- if (PeekNamedPipe(client->hChildStdoutRd, NULL, 0, NULL, &dwAvail, NULL) == 0) {
- telnetd_printf("Failed to peek in pipe\n");
- break;
- }
- if (dwAvail) {
- if( ! ReadFile( client->hChildStdoutRd, chBuf, BUFSIZE, &dwRead, NULL) ||
- dwRead == 0) {
- telnetd_printf("Failed to read from pipe\n");
- break;
- }
- for (from=0, to=0; fromsocket, txBuf, to, 0) < 0) {
- telnetd_printf("error writing to socket\n");
- break;
- }
- }
- Sleep(100); /* Hmmm, oh well... what the heck! */
- }
-
- if (!client->bTerminate)
- TerminateShell(client);
-
- telnetd_printf("ReadFromPipeThread terminated\n");
-
- client->bReadFromPipe = FALSE;
- return 0;
-}
-
-/* TerminateShell */
-static void TerminateShell(client_t *client)
-{
- DWORD exitCode;
- DWORD dwWritten;
- char stop[] = "\003\r\nexit\r\n"; /* Ctrl-C + exit */
-
- GetExitCodeProcess(client->hProcess, &exitCode);
-
- if (exitCode == STILL_ACTIVE)
- {
- HANDLE hEvent = NULL;
- DWORD dwWaitResult;
-
- telnetd_printf("user shell still active, send Ctrl-Break to group-id %lu\n", client->dwProcessId );
-
- hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
-
- if (hEvent == NULL)
- printf("CreateEvent error\n");
-
- if (!GenerateConsoleCtrlEvent( CTRL_BREAK_EVENT, client->dwProcessId ))
- telnetd_printf("Failed to send Ctrl_break\n");
-
- if (!GenerateConsoleCtrlEvent( CTRL_C_EVENT, client->dwProcessId ))
- telnetd_printf("Failed to send Ctrl_C\n");
-
- if (!WriteFile(client->hChildStdinWr, stop, sizeof(stop), &dwWritten, NULL))
- telnetd_printf("Error writing to pipe\n");
-
- /* wait for our handler to be called */
- dwWaitResult=WaitForSingleObject(hEvent, 500);
-
- if (WAIT_FAILED==dwWaitResult)
- telnetd_printf("WaitForSingleObject failed\n");
-
- GetExitCodeProcess(client->hProcess, &exitCode);
- if (exitCode == STILL_ACTIVE)
- {
- telnetd_printf("user shell still active, attempt to terminate it now...\n");
-
- if (hEvent != NULL)
- {
- if (!CloseHandle(hEvent))
- telnetd_printf("CloseHandle");
- }
- TerminateProcess(client->hProcess, 0);
- }
- TerminateProcess(client->hProcess, 0);
- }
- TerminateProcess(client->hProcess, 0);
-}
-
-/* ErrorExit */
-static VOID ErrorExit (LPTSTR lpszMessage)
-{
- fprintf(stderr, "%s\n", lpszMessage);
- if (bSocketInterfaceInitialised) {
- telnetd_printf("WSAGetLastError=%d\n", WSAGetLastError());
- WSACleanup();
- }
- ExitProcess(0);
-}
-
diff --git a/rosapps/applications/sysutils/telnetd/telnetd.h b/rosapps/applications/sysutils/telnetd/telnetd.h
deleted file mode 100644
index afb1199ce05..00000000000
--- a/rosapps/applications/sysutils/telnetd/telnetd.h
+++ /dev/null
@@ -1,87 +0,0 @@
-#ifndef __TELNETD_H
-#define __TELNETD_H
-
-#define _CRT_SECURE_NO_WARNINGS
-
-#define WIN32_NO_STATUS
-#include
-#include
-#include
-#include
-
-/*
-** macro definitions
-*/
-#define TELNET_PORT (23)
-
-#define BUFSIZE (4096)
-#define USERID_SIZE (64)
-#define CTRLC (3)
-#define BS (8)
-#define CR (13)
-#define LF (10)
-#define DEL (127)
-
-#define IAC "\xff"
-#define DONT "\xfe"
-#define WONT "\xfc"
-#define WILL "\xfb"
-#define DO "\xfd"
-#define SB "\xfa"
-#define SE "\xf0"
-#define ECHO "\x01"
-#define SUPPRESS_GO_AHEAD "\x03"
-#define TERMINAL_TYPE "\x18"
-#define NAWS "\x1f"
-#define LINEMODE "\x22"
-#define NEWENVIRON "\x27"
-#define MODE "\x01"
-
-#define HANDSHAKE_TIMEOUT (3)
-
-/*
-** types
-*/
-
-typedef struct client_s
-{
- char userID[USERID_SIZE];
- int socket;
- BOOLEAN bTerminate;
- BOOLEAN bReadFromPipe;
- BOOLEAN bWriteToPipe;
- HANDLE hProcess;
- DWORD dwProcessId;
- HANDLE hChildStdinWr;
- HANDLE hChildStdoutRd;
-} client_t;
-
-typedef enum
-{
- NoEcho = 0,
- Echo = 1,
- Password = 2
-} EchoMode;
-
-/*
-** Forward function declarations
-*/
-static BOOL WINAPI Cleanup(DWORD dwControlType);
-static void WaitForConnect(void);
-static BOOLEAN StartSocketInterface(void);
-static void CreateSocket(void);
-static void UserLogin(int client_socket);
-static DWORD WINAPI UserLoginThread(LPVOID);
-static int DoTelnetHandshake(int sock);
-static int ReceiveLine(int sock, char *buffer, int len, EchoMode echo);
-static void RunShell(client_t *client);
-//static BOOL CreateChildProcess(const char *);
-static DWORD WINAPI MonitorChildThread(LPVOID);
-static DWORD WINAPI WriteToPipeThread(LPVOID);
-static DWORD WINAPI ReadFromPipeThread(LPVOID);
-static void TerminateShell(client_t *client);
-static VOID ErrorExit(LPTSTR);
-int kickoff_telnetd(void);
-
-#endif /* __TELNETD_H */
-
diff --git a/rosapps/applications/sysutils/telnetd/telnetd.rbuild b/rosapps/applications/sysutils/telnetd/telnetd.rbuild
deleted file mode 100644
index 3f6325a3665..00000000000
--- a/rosapps/applications/sysutils/telnetd/telnetd.rbuild
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
- ..
-
- ntdll
- kernel32
- advapi32
- ws2_32
-
- telnetd.c
- serviceentry.c
- telnetd.rc
-
diff --git a/rosapps/applications/sysutils/telnetd/telnetd.rc b/rosapps/applications/sysutils/telnetd/telnetd.rc
deleted file mode 100644
index 53760e9b74b..00000000000
--- a/rosapps/applications/sysutils/telnetd/telnetd.rc
+++ /dev/null
@@ -1,7 +0,0 @@
-/* $Id$ */
-
-#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Simple Telnet Deamon\0"
-#define REACTOS_STR_INTERNAL_NAME "telnetd\0"
-#define REACTOS_STR_ORIGINAL_FILENAME "telnetd.exe\0"
-#define REACTOS_STR_ORIGINAL_COPYRIGHT "fred.van.lieshout 'at' zonnet.nl\0"
-#include
diff --git a/rosapps/applications/sysutils/telnetd/telnetd.vcproj b/rosapps/applications/sysutils/telnetd/telnetd.vcproj
deleted file mode 100644
index 96714954efd..00000000000
--- a/rosapps/applications/sysutils/telnetd/telnetd.vcproj
+++ /dev/null
@@ -1,196 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-