1 | /*
2 | * Layer Two Tunnelling Protocol Daemon
3 | * Copyright (C) 1998 Adtran, Inc.
4 | *
5 | * Mark Spencer
6 | *
7 | * This software is distributed under the terms
8 | * of the GPL, which you should have received
9 | * along with this source.
10 | *
11 | * Pseudo-pty allocation routines... Concepts and code borrowed
12 | * from pty-redir by Magosanyi Arpad.
13 | *
14 | */
15 |
16 | #include "l2tp.h"
17 | #include <fcntl.h>
18 |
19 | #ifdef SOLARIS
20 | #define PTY00 "/dev/ptyXX"
21 | #define PTY10 "pqrstuvwxyz"
22 | #define PTY01 "0123456789abcdef"
23 | #endif
24 |
25 | #ifdef LINUX
26 | #define PTY00 "/dev/ptyXX"
27 | #define PTY10 "pqrstuvwxyzabcde"
28 | #define PTY01 "0123456789abcdef"
29 | #endif
30 |
31 | #ifdef FREEBSD
32 | #define PTY00 "/dev/ptyXX"
33 | #define PTY10 "p"
34 | #define PTY01 "0123456789abcdefghijklmnopqrstuv"
35 | #endif
36 |
37 | int getPtyMaster (char *tty10, char *tty01)
38 | {
39 | char *p10;
40 | char *p01;
41 | static char dev[] = PTY00;
42 | int fd;
43 |
44 | for (p10 = PTY10; *p10; p10++)
45 | {
46 | dev[8] = *p10;
47 | for (p01 = PTY01; *p01; p01++)
48 | {
49 | dev[9] = *p01;
50 | fd = open (dev, O_RDWR | O_NONBLOCK);
51 | if (fd >= 0)
52 | {
53 | *tty10 = *p10;
54 | *tty01 = *p01;
55 | return fd;
56 | }
57 | }
58 | }
59 | log (LOG_CRIT, "%s: No more free pseudo-tty's\n", __FUNCTION__);
60 | return -1;
61 | }