more intelligent check for passive mode
new option `-P' to force passive mode git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@3331 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
34
appl/kx/kx.c
34
appl/kx/kx.c
@@ -524,6 +524,24 @@ doit_active (char *host, char *user,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int
|
||||||
|
check_for_passive (const char *disp)
|
||||||
|
{
|
||||||
|
char local_hostname[MaxHostNameLen];
|
||||||
|
|
||||||
|
gethostname (local_hostname, sizeof(local_hostname));
|
||||||
|
|
||||||
|
return disp != NULL &&
|
||||||
|
(*disp == ':'
|
||||||
|
|| strncmp(disp, "unix", 4) == 0
|
||||||
|
|| strncmp(disp, "localhost", 9) == 0
|
||||||
|
|| strncmp(disp, local_hostname, strlen(local_hostname) == 0));
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
usage(void)
|
usage(void)
|
||||||
{
|
{
|
||||||
@@ -535,20 +553,20 @@ usage(void)
|
|||||||
/*
|
/*
|
||||||
* kx - forward x connection over a kerberos-encrypted channel.
|
* kx - forward x connection over a kerberos-encrypted channel.
|
||||||
*
|
*
|
||||||
* passive mode if $DISPLAY begins with : */
|
*/
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int passivep;
|
int force_passive = 0;
|
||||||
int keepalivep = 1;
|
int keepalivep = 1;
|
||||||
char *disp, *user = NULL;
|
char *user = NULL;
|
||||||
int debugp = 0, tcpp = 0;
|
int debugp = 0, tcpp = 0;
|
||||||
int c;
|
int c;
|
||||||
int port = 0;
|
int port = 0;
|
||||||
|
|
||||||
set_progname (argv[0]);
|
set_progname (argv[0]);
|
||||||
while((c = getopt(argc, argv, "ktdl:p:")) != EOF) {
|
while((c = getopt(argc, argv, "ktdl:p:P")) != EOF) {
|
||||||
switch(c) {
|
switch(c) {
|
||||||
case 'd' :
|
case 'd' :
|
||||||
debugp = 1;
|
debugp = 1;
|
||||||
@@ -565,6 +583,9 @@ main(int argc, char **argv)
|
|||||||
case 'p' :
|
case 'p' :
|
||||||
port = htons(atoi (optarg));
|
port = htons(atoi (optarg));
|
||||||
break;
|
break;
|
||||||
|
case 'P' :
|
||||||
|
force_passive = 1;
|
||||||
|
break;
|
||||||
case '?':
|
case '?':
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
@@ -584,13 +605,10 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
if (port == 0)
|
if (port == 0)
|
||||||
port = k_getportbyname ("kx", "tcp", htons(KX_PORT));
|
port = k_getportbyname ("kx", "tcp", htons(KX_PORT));
|
||||||
disp = getenv("DISPLAY");
|
|
||||||
passivep = disp != NULL &&
|
|
||||||
(*disp == ':' || strncmp(disp, "unix", 4) == 0);
|
|
||||||
signal (SIGCHLD, childhandler);
|
signal (SIGCHLD, childhandler);
|
||||||
signal (SIGUSR1, usr1handler);
|
signal (SIGUSR1, usr1handler);
|
||||||
signal (SIGUSR2, usr2handler);
|
signal (SIGUSR2, usr2handler);
|
||||||
if (passivep)
|
if (check_for_passive(getenv("DISPLAY")))
|
||||||
return doit_passive (argv[0], user, debugp, keepalivep, port);
|
return doit_passive (argv[0], user, debugp, keepalivep, port);
|
||||||
else
|
else
|
||||||
return doit_active (argv[0], user, debugp, keepalivep, tcpp, port);
|
return doit_active (argv[0], user, debugp, keepalivep, tcpp, port);
|
||||||
|
Reference in New Issue
Block a user