mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 14:15:30 +00:00
ac73d7d88c
network/cnvts
183 lines
4.9 KiB
C
183 lines
4.9 KiB
C
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
/* forks a telnet process
|
|
*
|
|
* Designed and implemented by Lou Montulli
|
|
*/
|
|
|
|
/* Please leave outside of ifdef for windows precompiled headers */
|
|
|
|
#include "xp.h"
|
|
#include "plstr.h"
|
|
#include "prmem.h"
|
|
#include "netutils.h"
|
|
#include "mkselect.h"
|
|
#include "mktcp.h"
|
|
#include "mkgeturl.h"
|
|
|
|
#ifdef MOZILLA_CLIENT
|
|
|
|
#include "mkparse.h"
|
|
#include "remoturl.h"
|
|
#include "glhist.h"
|
|
#include "mkgeturl.h" /* for URL types */
|
|
#include "merrors.h"
|
|
|
|
/*
|
|
* begin a session with a remote host.
|
|
*
|
|
* URL types permitted: Telnet, TN3270, and Rlogin
|
|
*/
|
|
MODULE_PRIVATE int32
|
|
NET_RemoteHostLoad (ActiveEntry * cur_entry)
|
|
{
|
|
char * host_string;
|
|
int url_type;
|
|
char * cp;
|
|
char * username;
|
|
char * hostname;
|
|
char * port_string;
|
|
|
|
TRACEMSG(("In NET_RemoteHostLoad"));
|
|
|
|
GH_UpdateGlobalHistory(cur_entry->URL_s);
|
|
|
|
if(cur_entry->format_out == FO_CACHE_AND_PRESENT || cur_entry->format_out == FO_PRESENT)
|
|
{
|
|
url_type = NET_URL_Type(cur_entry->URL_s->address);
|
|
host_string = NET_ParseURL(cur_entry->URL_s->address, GET_USERNAME_PART | GET_PASSWORD_PART | GET_HOST_PART);
|
|
|
|
hostname = PL_strchr(host_string, '@');
|
|
port_string = PL_strchr(host_string, ':');
|
|
|
|
if (hostname)
|
|
{
|
|
*hostname++ = '\0';
|
|
username = NET_UnEscape(host_string);
|
|
}
|
|
else
|
|
{
|
|
hostname = host_string;
|
|
username = NULL; /* no username given */
|
|
}
|
|
|
|
if (port_string)
|
|
{
|
|
*port_string++ = '\0';
|
|
|
|
/* Sanity check the port part
|
|
* prevent telnet://hostname:30;rm -rf * URL's (VERY BAD)
|
|
* only allow digits
|
|
*/
|
|
for(cp=port_string; *cp != '\0'; cp++)
|
|
if(!isdigit(*cp))
|
|
{
|
|
*cp = '\0';
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
if(username)
|
|
{
|
|
/* Sanity check the username part
|
|
* prevent telnet://hostname:30;rm -rf * URL's (VERY BAD)
|
|
* only allow alphanums
|
|
*/
|
|
for(cp=username; *cp != '\0'; cp++)
|
|
if(!isalnum(*cp))
|
|
{
|
|
*cp = '\0';
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* now sanity check the hostname part
|
|
* prevent telnet://hostname;rm -rf * URL's (VERY BAD)
|
|
* only allow alphanumeric characters and a few symbols
|
|
*/
|
|
for(cp=hostname; *cp != '\0'; cp++)
|
|
if(!isalnum(*cp) && *cp != '_' && *cp != '-' &&
|
|
*cp != '+' && *cp != ':' && *cp != '.' && *cp != '@')
|
|
{
|
|
*cp = '\0';
|
|
break;
|
|
}
|
|
|
|
TRACEMSG(("username: %s, hostname: %s, port: %s",
|
|
username ? username : "(null)",
|
|
hostname ? hostname : "(null)",
|
|
port_string ? port_string : "(null)"));
|
|
|
|
if(url_type == TELNET_TYPE_URL)
|
|
{
|
|
FE_ConnectToRemoteHost(cur_entry->window_id, FE_TELNET_URL_TYPE, hostname, port_string, username);
|
|
}
|
|
else if(url_type == TN3270_TYPE_URL)
|
|
{
|
|
FE_ConnectToRemoteHost(cur_entry->window_id, FE_TN3270_URL_TYPE, hostname, port_string, username);
|
|
}
|
|
else if(url_type == RLOGIN_TYPE_URL)
|
|
{
|
|
FE_ConnectToRemoteHost(cur_entry->window_id, FE_RLOGIN_URL_TYPE, hostname, port_string, username);
|
|
}
|
|
/* fall through if it wasn't any of the above url types */
|
|
|
|
PR_Free(host_string);
|
|
}
|
|
|
|
cur_entry->status = MK_NO_DATA;
|
|
return -1;
|
|
}
|
|
|
|
PRIVATE int32
|
|
net_ProcessRemote(ActiveEntry *ce)
|
|
{
|
|
PR_ASSERT(0);
|
|
return -1;
|
|
}
|
|
|
|
PRIVATE int32
|
|
net_InterruptRemote(ActiveEntry *ce)
|
|
{
|
|
PR_ASSERT(0);
|
|
return -1;
|
|
}
|
|
|
|
PRIVATE void
|
|
net_CleanupRemote(void)
|
|
{
|
|
}
|
|
|
|
MODULE_PRIVATE void
|
|
NET_InitRemoteProtocol(void)
|
|
{
|
|
static NET_ProtoImpl remote_proto_impl;
|
|
|
|
remote_proto_impl.init = NET_RemoteHostLoad;
|
|
remote_proto_impl.process = net_ProcessRemote;
|
|
remote_proto_impl.interrupt = net_InterruptRemote;
|
|
remote_proto_impl.cleanup = net_CleanupRemote;
|
|
|
|
NET_RegisterProtocolImplementation(&remote_proto_impl, RLOGIN_TYPE_URL);
|
|
NET_RegisterProtocolImplementation(&remote_proto_impl, TELNET_TYPE_URL);
|
|
NET_RegisterProtocolImplementation(&remote_proto_impl, TN3270_TYPE_URL);
|
|
}
|
|
|
|
#endif /* MOZILLA_CLIENT */
|