mirror of
https://github.com/PowerShell/openssh-portable.git
synced 2025-07-24 06:14:59 +02:00
20001203
- (bal) OpenBSD CVS updates: - markus@cvs.openbsd.org 2000/11/30 22:54:31 [channels.c] debug->warn if tried to do -R style fwd w/o client requesting this; ok neils@ - markus@cvs.openbsd.org 2000/11/29 20:39:17 [cipher.c] des_cbc_encrypt -> des_ncbc_encrypt since it already updates the IV - markus@cvs.openbsd.org 2000/11/30 18:33:05 [ssh-agent.c] agents must not dump core, ok niels@ - markus@cvs.openbsd.org 2000/11/30 07:04:02 [ssh.1] T is for both protocols - markus@cvs.openbsd.org 2000/12/01 00:00:51 [ssh.1] typo; from green@FreeBSD.org - markus@cvs.openbsd.org 2000/11/30 07:02:35 [ssh.c] check -T before isatty() - provos@cvs.openbsd.org 2000/11/29 13:51:27 [sshconnect.c] show IP address and hostname when new key is encountered. okay markus@ - markus@cvs.openbsd.org 2000/11/30 22:53:35 [sshconnect.c] disable agent/x11/port fwding if hostkey has changed; ok niels@ - marksu@cvs.openbsd.org 2000/11/29 21:11:59 [sshd.c] sshd -D, startup w/o deamon(), for monitoring scripts or inittab; from handler@sub-rosa.com and eric@urbanrange.com; ok niels@
This commit is contained in:
parent
a15e39b05f
commit
c72745afa9
32
ChangeLog
32
ChangeLog
@ -1,3 +1,35 @@
|
|||||||
|
20001203
|
||||||
|
- (bal) OpenBSD CVS updates:
|
||||||
|
- markus@cvs.openbsd.org 2000/11/30 22:54:31
|
||||||
|
[channels.c]
|
||||||
|
debug->warn if tried to do -R style fwd w/o client requesting this;
|
||||||
|
ok neils@
|
||||||
|
- markus@cvs.openbsd.org 2000/11/29 20:39:17
|
||||||
|
[cipher.c]
|
||||||
|
des_cbc_encrypt -> des_ncbc_encrypt since it already updates the IV
|
||||||
|
- markus@cvs.openbsd.org 2000/11/30 18:33:05
|
||||||
|
[ssh-agent.c]
|
||||||
|
agents must not dump core, ok niels@
|
||||||
|
- markus@cvs.openbsd.org 2000/11/30 07:04:02
|
||||||
|
[ssh.1]
|
||||||
|
T is for both protocols
|
||||||
|
- markus@cvs.openbsd.org 2000/12/01 00:00:51
|
||||||
|
[ssh.1]
|
||||||
|
typo; from green@FreeBSD.org
|
||||||
|
- markus@cvs.openbsd.org 2000/11/30 07:02:35
|
||||||
|
[ssh.c]
|
||||||
|
check -T before isatty()
|
||||||
|
- provos@cvs.openbsd.org 2000/11/29 13:51:27
|
||||||
|
[sshconnect.c]
|
||||||
|
show IP address and hostname when new key is encountered. okay markus@
|
||||||
|
- markus@cvs.openbsd.org 2000/11/30 22:53:35
|
||||||
|
[sshconnect.c]
|
||||||
|
disable agent/x11/port fwding if hostkey has changed; ok niels@
|
||||||
|
- marksu@cvs.openbsd.org 2000/11/29 21:11:59
|
||||||
|
[sshd.c]
|
||||||
|
sshd -D, startup w/o deamon(), for monitoring scripts or inittab;
|
||||||
|
from handler@sub-rosa.com and eric@urbanrange.com; ok niels@
|
||||||
|
|
||||||
20001202
|
20001202
|
||||||
- (bal) Backed out of part of Alain St-Denis' loginrec.c patch.
|
- (bal) Backed out of part of Alain St-Denis' loginrec.c patch.
|
||||||
- (bal) Irix need some sort of mansubdir, patch by Michael Stone
|
- (bal) Irix need some sort of mansubdir, patch by Michael Stone
|
||||||
|
2
TODO
2
TODO
@ -2,6 +2,8 @@ Programming:
|
|||||||
- Replacement for setproctitle() - HP/UX support only currently
|
- Replacement for setproctitle() - HP/UX support only currently
|
||||||
|
|
||||||
- Improve PAM support (a pam_lastlog module will cause sshd to exit)
|
- Improve PAM support (a pam_lastlog module will cause sshd to exit)
|
||||||
|
and maybe support alternate forms of authenications like OPIE via
|
||||||
|
pam?
|
||||||
|
|
||||||
- Complete Tru64 SIA support
|
- Complete Tru64 SIA support
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: channels.c,v 1.73 2000/11/06 23:04:55 markus Exp $");
|
RCSID("$OpenBSD: channels.c,v 1.74 2000/11/30 22:54:31 markus Exp $");
|
||||||
|
|
||||||
#include "ssh.h"
|
#include "ssh.h"
|
||||||
#include "packet.h"
|
#include "packet.h"
|
||||||
@ -1729,7 +1729,8 @@ channel_connect_by_listen_adress(u_short listen_port)
|
|||||||
return channel_connect_to(
|
return channel_connect_to(
|
||||||
permitted_opens[i].host_to_connect,
|
permitted_opens[i].host_to_connect,
|
||||||
permitted_opens[i].port_to_connect);
|
permitted_opens[i].port_to_connect);
|
||||||
debug("channel_connect_by_listen_adress: unknown listen_port %d", listen_port);
|
error("WARNING: Server requests forwarding for unknown listen_port %d",
|
||||||
|
listen_port);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
25
cipher.c
25
cipher.c
@ -35,7 +35,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: cipher.c,v 1.37 2000/10/23 19:31:54 markus Exp $");
|
RCSID("$OpenBSD: cipher.c,v 1.38 2000/11/29 20:39:17 markus Exp $");
|
||||||
|
|
||||||
#include "ssh.h"
|
#include "ssh.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
@ -154,14 +154,9 @@ des3_ssh1_encrypt(CipherContext *cc, u_char *dest, const u_char *src,
|
|||||||
|
|
||||||
memcpy(&iv1, iv2, 8);
|
memcpy(&iv1, iv2, 8);
|
||||||
|
|
||||||
des_cbc_encrypt(src, dest, len, cc->u.des3.key1, &iv1, DES_ENCRYPT);
|
des_ncbc_encrypt(src, dest, len, cc->u.des3.key1, &iv1, DES_ENCRYPT);
|
||||||
memcpy(&iv1, dest + len - 8, 8);
|
des_ncbc_encrypt(dest, dest, len, cc->u.des3.key2, iv2, DES_DECRYPT);
|
||||||
|
des_ncbc_encrypt(dest, dest, len, cc->u.des3.key3, iv3, DES_ENCRYPT);
|
||||||
des_cbc_encrypt(dest, dest, len, cc->u.des3.key2, iv2, DES_DECRYPT);
|
|
||||||
memcpy(iv2, &iv1, 8); /* Note how iv1 == iv2 on entry and exit. */
|
|
||||||
|
|
||||||
des_cbc_encrypt(dest, dest, len, cc->u.des3.key3, iv3, DES_ENCRYPT);
|
|
||||||
memcpy(iv3, dest + len - 8, 8);
|
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
des3_ssh1_decrypt(CipherContext *cc, u_char *dest, const u_char *src,
|
des3_ssh1_decrypt(CipherContext *cc, u_char *dest, const u_char *src,
|
||||||
@ -173,15 +168,9 @@ des3_ssh1_decrypt(CipherContext *cc, u_char *dest, const u_char *src,
|
|||||||
|
|
||||||
memcpy(&iv1, iv2, 8);
|
memcpy(&iv1, iv2, 8);
|
||||||
|
|
||||||
des_cbc_encrypt(src, dest, len, cc->u.des3.key3, iv3, DES_DECRYPT);
|
des_ncbc_encrypt(src, dest, len, cc->u.des3.key3, iv3, DES_DECRYPT);
|
||||||
memcpy(iv3, src + len - 8, 8);
|
des_ncbc_encrypt(dest, dest, len, cc->u.des3.key2, iv2, DES_ENCRYPT);
|
||||||
|
des_ncbc_encrypt(dest, dest, len, cc->u.des3.key1, &iv1, DES_DECRYPT);
|
||||||
des_cbc_encrypt(dest, dest, len, cc->u.des3.key2, iv2, DES_ENCRYPT);
|
|
||||||
memcpy(iv2, dest + len - 8, 8);
|
|
||||||
|
|
||||||
des_cbc_encrypt(dest, dest, len, cc->u.des3.key1, &iv1, DES_DECRYPT);
|
|
||||||
/* memcpy(&iv1, iv2, 8); */
|
|
||||||
/* Note how iv1 == iv2 on entry and exit. */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Blowfish */
|
/* Blowfish */
|
||||||
|
11
ssh-agent.c
11
ssh-agent.c
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: ssh-agent.c,v 1.40 2000/11/14 23:48:55 markus Exp $ */
|
/* $OpenBSD: ssh-agent.c,v 1.41 2000/11/30 18:33:05 markus Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
@ -37,7 +37,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: ssh-agent.c,v 1.40 2000/11/14 23:48:55 markus Exp $");
|
RCSID("$OpenBSD: ssh-agent.c,v 1.41 2000/11/30 18:33:05 markus Exp $");
|
||||||
|
|
||||||
#include "ssh.h"
|
#include "ssh.h"
|
||||||
#include "rsa.h"
|
#include "rsa.h"
|
||||||
@ -674,6 +674,7 @@ main(int ac, char **av)
|
|||||||
fd_set readset, writeset;
|
fd_set readset, writeset;
|
||||||
int sock, c_flag = 0, k_flag = 0, s_flag = 0, ch;
|
int sock, c_flag = 0, k_flag = 0, s_flag = 0, ch;
|
||||||
struct sockaddr_un sunaddr;
|
struct sockaddr_un sunaddr;
|
||||||
|
struct rlimit rlim;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
char *shell, *format, *pidstr, pidstrbuf[1 + 3 * sizeof pid];
|
char *shell, *format, *pidstr, pidstrbuf[1 + 3 * sizeof pid];
|
||||||
extern int optind;
|
extern int optind;
|
||||||
@ -804,6 +805,12 @@ main(int ac, char **av)
|
|||||||
close(1);
|
close(1);
|
||||||
close(2);
|
close(2);
|
||||||
|
|
||||||
|
/* deny core dumps, since memory contains unencrypted private keys */
|
||||||
|
rlim.rlim_cur = rlim.rlim_max = 0;
|
||||||
|
if (setrlimit(RLIMIT_CORE, &rlim) < 0) {
|
||||||
|
perror("setrlimit rlimit_core failed");
|
||||||
|
cleanup_exit(1);
|
||||||
|
}
|
||||||
if (setsid() == -1) {
|
if (setsid() == -1) {
|
||||||
perror("setsid");
|
perror("setsid");
|
||||||
cleanup_exit(1);
|
cleanup_exit(1);
|
||||||
|
10
ssh.1
10
ssh.1
@ -34,7 +34,7 @@
|
|||||||
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.\" $OpenBSD: ssh.1,v 1.68 2000/11/12 19:50:38 markus Exp $
|
.\" $OpenBSD: ssh.1,v 1.70 2000/12/01 00:00:51 markus Exp $
|
||||||
.Dd September 25, 1999
|
.Dd September 25, 1999
|
||||||
.Dt SSH 1
|
.Dt SSH 1
|
||||||
.Os
|
.Os
|
||||||
@ -446,7 +446,7 @@ needs to ask for a password or passphrase; see also the
|
|||||||
option.)
|
option.)
|
||||||
.It Fl N
|
.It Fl N
|
||||||
Do not execute a remote command.
|
Do not execute a remote command.
|
||||||
This is usefull if you just want to forward ports
|
This is useful if you just want to forward ports
|
||||||
(protocol version 2 only).
|
(protocol version 2 only).
|
||||||
.It Fl o Ar option
|
.It Fl o Ar option
|
||||||
Can be used to give options in the format used in the config file.
|
Can be used to give options in the format used in the config file.
|
||||||
@ -475,7 +475,7 @@ This can be used to execute arbitrary
|
|||||||
screen-based programs on a remote machine, which can be very useful,
|
screen-based programs on a remote machine, which can be very useful,
|
||||||
e.g., when implementing menu services.
|
e.g., when implementing menu services.
|
||||||
.It Fl T
|
.It Fl T
|
||||||
Disable pseudo-tty allocation (protocol version 2 only).
|
Disable pseudo-tty allocation.
|
||||||
.It Fl v
|
.It Fl v
|
||||||
Verbose mode.
|
Verbose mode.
|
||||||
Causes
|
Causes
|
||||||
@ -1236,7 +1236,7 @@ This version of OpenSSH
|
|||||||
.Bl -bullet
|
.Bl -bullet
|
||||||
.It
|
.It
|
||||||
has all components of a restrictive nature (i.e., patents, see
|
has all components of a restrictive nature (i.e., patents, see
|
||||||
.Xr crypto 3 )
|
.Xr ssl 8 )
|
||||||
directly removed from the source code; any licensed or patented components
|
directly removed from the source code; any licensed or patented components
|
||||||
are chosen from
|
are chosen from
|
||||||
external libraries.
|
external libraries.
|
||||||
@ -1265,4 +1265,4 @@ The support for SSH protocol 2 was written by Markus Friedl.
|
|||||||
.Xr ssh-keygen 1 ,
|
.Xr ssh-keygen 1 ,
|
||||||
.Xr telnet 1 ,
|
.Xr telnet 1 ,
|
||||||
.Xr sshd 8 ,
|
.Xr sshd 8 ,
|
||||||
.Xr crypto 3
|
.Xr ssl 8
|
||||||
|
8
ssh.c
8
ssh.c
@ -39,7 +39,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: ssh.c,v 1.74 2000/11/23 21:03:47 markus Exp $");
|
RCSID("$OpenBSD: ssh.c,v 1.75 2000/11/30 07:02:35 markus Exp $");
|
||||||
|
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
#include <openssl/dsa.h>
|
#include <openssl/dsa.h>
|
||||||
@ -526,15 +526,15 @@ main(int ac, char **av)
|
|||||||
if (buffer_len(&command) == 0)
|
if (buffer_len(&command) == 0)
|
||||||
tty_flag = 1;
|
tty_flag = 1;
|
||||||
|
|
||||||
|
/* Force no tty*/
|
||||||
|
if (no_tty_flag)
|
||||||
|
tty_flag = 0;
|
||||||
/* Do not allocate a tty if stdin is not a tty. */
|
/* Do not allocate a tty if stdin is not a tty. */
|
||||||
if (!isatty(fileno(stdin))) {
|
if (!isatty(fileno(stdin))) {
|
||||||
if (tty_flag)
|
if (tty_flag)
|
||||||
fprintf(stderr, "Pseudo-terminal will not be allocated because stdin is not a terminal.\n");
|
fprintf(stderr, "Pseudo-terminal will not be allocated because stdin is not a terminal.\n");
|
||||||
tty_flag = 0;
|
tty_flag = 0;
|
||||||
}
|
}
|
||||||
/* force */
|
|
||||||
if (no_tty_flag)
|
|
||||||
tty_flag = 0;
|
|
||||||
|
|
||||||
/* Get user data. */
|
/* Get user data. */
|
||||||
pw = getpwuid(original_real_uid);
|
pw = getpwuid(original_real_uid);
|
||||||
|
30
sshconnect.c
30
sshconnect.c
@ -13,7 +13,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: sshconnect.c,v 1.81 2000/11/06 23:16:35 markus Exp $");
|
RCSID("$OpenBSD: sshconnect.c,v 1.83 2000/11/30 22:53:35 markus Exp $");
|
||||||
|
|
||||||
#include <openssl/bn.h>
|
#include <openssl/bn.h>
|
||||||
#include <openssl/dsa.h>
|
#include <openssl/dsa.h>
|
||||||
@ -508,13 +508,11 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key,
|
|||||||
if (options.proxy_command != NULL && options.check_host_ip)
|
if (options.proxy_command != NULL && options.check_host_ip)
|
||||||
options.check_host_ip = 0;
|
options.check_host_ip = 0;
|
||||||
|
|
||||||
if (options.check_host_ip) {
|
if (getnameinfo(hostaddr, salen, ntop, sizeof(ntop),
|
||||||
if (getnameinfo(hostaddr, salen, ntop, sizeof(ntop),
|
NULL, 0, NI_NUMERICHOST) != 0)
|
||||||
NULL, 0, NI_NUMERICHOST) != 0)
|
fatal("check_host_key: getnameinfo failed");
|
||||||
fatal("check_host_key: getnameinfo failed");
|
ip = xstrdup(ntop);
|
||||||
ip = xstrdup(ntop);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Store the host key from the known host file in here so that we can
|
* Store the host key from the known host file in here so that we can
|
||||||
* compare it with the key for the IP address.
|
* compare it with the key for the IP address.
|
||||||
@ -577,10 +575,10 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key,
|
|||||||
char prompt[1024];
|
char prompt[1024];
|
||||||
char *fp = key_fingerprint(host_key);
|
char *fp = key_fingerprint(host_key);
|
||||||
snprintf(prompt, sizeof(prompt),
|
snprintf(prompt, sizeof(prompt),
|
||||||
"The authenticity of host '%.200s' can't be established.\n"
|
"The authenticity of host '%.200s (%s)' can't be established.\n"
|
||||||
"%s key fingerprint is %s.\n"
|
"%s key fingerprint is %s.\n"
|
||||||
"Are you sure you want to continue connecting (yes/no)? ",
|
"Are you sure you want to continue connecting (yes/no)? ",
|
||||||
host, type, fp);
|
host, ip, type, fp);
|
||||||
if (!read_yes_or_no(prompt, -1))
|
if (!read_yes_or_no(prompt, -1))
|
||||||
fatal("Aborted by user!\n");
|
fatal("Aborted by user!\n");
|
||||||
}
|
}
|
||||||
@ -647,6 +645,14 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key,
|
|||||||
error("Agent forwarding is disabled to avoid trojan horses.");
|
error("Agent forwarding is disabled to avoid trojan horses.");
|
||||||
options.forward_agent = 0;
|
options.forward_agent = 0;
|
||||||
}
|
}
|
||||||
|
if (options.forward_x11) {
|
||||||
|
error("X11 forwarding is disabled to avoid trojan horses.");
|
||||||
|
options.forward_x11 = 0;
|
||||||
|
}
|
||||||
|
if (options.num_local_forwards > 0 || options.num_remote_forwards > 0) {
|
||||||
|
error("Port forwarding is disabled to avoid trojan horses.");
|
||||||
|
options.num_local_forwards = options.num_remote_forwards = 0;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* XXX Should permit the user to change to use the new id.
|
* XXX Should permit the user to change to use the new id.
|
||||||
* This could be done by converting the host key to an
|
* This could be done by converting the host key to an
|
||||||
@ -656,8 +662,8 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key,
|
|||||||
*/
|
*/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (options.check_host_ip)
|
|
||||||
xfree(ip);
|
xfree(ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
12
sshd.c
12
sshd.c
@ -40,7 +40,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: sshd.c,v 1.134 2000/11/12 19:50:38 markus Exp $");
|
RCSID("$OpenBSD: sshd.c,v 1.135 2000/11/29 21:11:59 markus Exp $");
|
||||||
|
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "rsa.h"
|
#include "rsa.h"
|
||||||
@ -111,6 +111,9 @@ int debug_flag = 0;
|
|||||||
/* Flag indicating that the daemon is being started from inetd. */
|
/* Flag indicating that the daemon is being started from inetd. */
|
||||||
int inetd_flag = 0;
|
int inetd_flag = 0;
|
||||||
|
|
||||||
|
/* Flag indicating that sshd should not detach and become a daemon. */
|
||||||
|
int no_daemon_flag = 0;
|
||||||
|
|
||||||
/* debug goes to stderr unless inetd_flag is set */
|
/* debug goes to stderr unless inetd_flag is set */
|
||||||
int log_stderr = 0;
|
int log_stderr = 0;
|
||||||
|
|
||||||
@ -583,7 +586,7 @@ main(int ac, char **av)
|
|||||||
initialize_server_options(&options);
|
initialize_server_options(&options);
|
||||||
|
|
||||||
/* Parse command-line arguments. */
|
/* Parse command-line arguments. */
|
||||||
while ((opt = getopt(ac, av, "f:p:b:k:h:g:V:u:diqQ46")) != EOF) {
|
while ((opt = getopt(ac, av, "f:p:b:k:h:g:V:u:dDiqQ46")) != EOF) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case '4':
|
case '4':
|
||||||
IPv4or6 = AF_INET;
|
IPv4or6 = AF_INET;
|
||||||
@ -605,6 +608,9 @@ main(int ac, char **av)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'D':
|
||||||
|
no_daemon_flag = 1;
|
||||||
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
inetd_flag = 1;
|
inetd_flag = 1;
|
||||||
break;
|
break;
|
||||||
@ -769,7 +775,7 @@ main(int ac, char **av)
|
|||||||
* from the controlling terminal, and fork. The original process
|
* from the controlling terminal, and fork. The original process
|
||||||
* exits.
|
* exits.
|
||||||
*/
|
*/
|
||||||
if (!debug_flag && !inetd_flag) {
|
if (!(debug_flag || inetd_flag || no_daemon_flag)) {
|
||||||
#ifdef TIOCNOTTY
|
#ifdef TIOCNOTTY
|
||||||
int fd;
|
int fd;
|
||||||
#endif /* TIOCNOTTY */
|
#endif /* TIOCNOTTY */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user