diff options
-rw-r--r-- | src/lib/libcrypto/ui/ui_openssl.c | 265 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/ui/ui_openssl.c | 265 |
2 files changed, 10 insertions, 520 deletions
diff --git a/src/lib/libcrypto/ui/ui_openssl.c b/src/lib/libcrypto/ui/ui_openssl.c index a38c7581e6..6000c24b1c 100644 --- a/src/lib/libcrypto/ui/ui_openssl.c +++ b/src/lib/libcrypto/ui/ui_openssl.c | |||
@@ -117,31 +117,12 @@ | |||
117 | 117 | ||
118 | #include <openssl/e_os2.h> | 118 | #include <openssl/e_os2.h> |
119 | 119 | ||
120 | /* need for #define _POSIX_C_SOURCE arises whenever you pass -ansi to gcc | ||
121 | * [maybe others?], because it masks interfaces not discussed in standard, | ||
122 | * sigaction and fileno included. -pedantic would be more appropriate for | ||
123 | * the intended purposes, but we can't prevent users from adding -ansi. | ||
124 | */ | ||
125 | #if defined(OPENSSL_SYSNAME_VXWORKS) | ||
126 | #include <sys/types.h> | ||
127 | #endif | ||
128 | |||
129 | #if !defined(_POSIX_C_SOURCE) && defined(OPENSSL_SYS_VMS) | ||
130 | #ifndef _POSIX_C_SOURCE | ||
131 | #define _POSIX_C_SOURCE 2 | ||
132 | #endif | ||
133 | #endif | ||
134 | #include <signal.h> | 120 | #include <signal.h> |
135 | #include <stdio.h> | 121 | #include <stdio.h> |
136 | #include <string.h> | 122 | #include <string.h> |
137 | #include <errno.h> | 123 | #include <errno.h> |
138 | 124 | ||
139 | #if !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VMS) | 125 | #include <unistd.h> |
140 | # ifdef OPENSSL_UNISTD | ||
141 | # include OPENSSL_UNISTD | ||
142 | # else | ||
143 | # include <unistd.h> | ||
144 | # endif | ||
145 | /* If unistd.h defines _POSIX_VERSION, we conclude that we | 126 | /* If unistd.h defines _POSIX_VERSION, we conclude that we |
146 | * are on a POSIX system and have sigaction and termios. */ | 127 | * are on a POSIX system and have sigaction and termios. */ |
147 | # if defined(_POSIX_VERSION) | 128 | # if defined(_POSIX_VERSION) |
@@ -152,74 +133,21 @@ | |||
152 | # endif | 133 | # endif |
153 | 134 | ||
154 | # endif | 135 | # endif |
155 | #endif | ||
156 | 136 | ||
157 | #ifdef WIN16TTY | ||
158 | # undef OPENSSL_SYS_WIN16 | ||
159 | # undef WIN16 | ||
160 | # undef _WINDOWS | ||
161 | # include <graph.h> | ||
162 | #endif | ||
163 | |||
164 | /* 06-Apr-92 Luke Brennan Support for VMS */ | ||
165 | #include "ui_locl.h" | 137 | #include "ui_locl.h" |
166 | #include "cryptlib.h" | 138 | #include "cryptlib.h" |
167 | 139 | ||
168 | #ifdef OPENSSL_SYS_VMS /* prototypes for sys$whatever */ | ||
169 | # include <starlet.h> | ||
170 | # ifdef __DECC | ||
171 | # pragma message disable DOLLARID | ||
172 | # endif | ||
173 | #endif | ||
174 | |||
175 | #ifdef WIN_CONSOLE_BUG | ||
176 | # include <windows.h> | ||
177 | #ifndef OPENSSL_SYS_WINCE | ||
178 | # include <wincon.h> | ||
179 | #endif | ||
180 | #endif | ||
181 | |||
182 | 140 | ||
183 | /* There are 5 types of terminal interface supported, | 141 | /* There are 5 types of terminal interface supported, |
184 | * TERMIO, TERMIOS, VMS, MSDOS and SGTTY | 142 | * TERMIO, TERMIOS, VMS, MSDOS and SGTTY |
185 | */ | 143 | */ |
186 | 144 | ||
187 | #if defined(__sgi) && !defined(TERMIOS) | ||
188 | # define TERMIOS | ||
189 | # undef TERMIO | ||
190 | # undef SGTTY | ||
191 | #endif | ||
192 | |||
193 | #if defined(linux) && !defined(TERMIO) | ||
194 | # undef TERMIOS | ||
195 | # define TERMIO | ||
196 | # undef SGTTY | ||
197 | #endif | ||
198 | |||
199 | #ifdef _LIBC | 145 | #ifdef _LIBC |
200 | # undef TERMIOS | 146 | # undef TERMIOS |
201 | # define TERMIO | 147 | # define TERMIO |
202 | # undef SGTTY | 148 | # undef SGTTY |
203 | #endif | 149 | #endif |
204 | 150 | ||
205 | #if !defined(TERMIO) && !defined(TERMIOS) && !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(MAC_OS_GUSI_SOURCE) | ||
206 | # undef TERMIOS | ||
207 | # undef TERMIO | ||
208 | # define SGTTY | ||
209 | #endif | ||
210 | |||
211 | #if defined(OPENSSL_SYS_VXWORKS) | ||
212 | #undef TERMIOS | ||
213 | #undef TERMIO | ||
214 | #undef SGTTY | ||
215 | #endif | ||
216 | |||
217 | #if defined(OPENSSL_SYS_NETWARE) | ||
218 | #undef TERMIOS | ||
219 | #undef TERMIO | ||
220 | #undef SGTTY | ||
221 | #endif | ||
222 | |||
223 | #ifdef TERMIOS | 151 | #ifdef TERMIOS |
224 | # include <termios.h> | 152 | # include <termios.h> |
225 | # define TTY_STRUCT struct termios | 153 | # define TTY_STRUCT struct termios |
@@ -236,46 +164,7 @@ | |||
236 | # define TTY_set(tty,data) ioctl(tty,TCSETA,data) | 164 | # define TTY_set(tty,data) ioctl(tty,TCSETA,data) |
237 | #endif | 165 | #endif |
238 | 166 | ||
239 | #ifdef SGTTY | ||
240 | # include <sgtty.h> | ||
241 | # define TTY_STRUCT struct sgttyb | ||
242 | # define TTY_FLAGS sg_flags | ||
243 | # define TTY_get(tty,data) ioctl(tty,TIOCGETP,data) | ||
244 | # define TTY_set(tty,data) ioctl(tty,TIOCSETP,data) | ||
245 | #endif | ||
246 | |||
247 | #if !defined(_LIBC) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_SUNOS) | ||
248 | # include <sys/ioctl.h> | 167 | # include <sys/ioctl.h> |
249 | #endif | ||
250 | |||
251 | #ifdef OPENSSL_SYS_MSDOS | ||
252 | # include <conio.h> | ||
253 | #endif | ||
254 | |||
255 | #ifdef OPENSSL_SYS_VMS | ||
256 | # include <ssdef.h> | ||
257 | # include <iodef.h> | ||
258 | # include <ttdef.h> | ||
259 | # include <descrip.h> | ||
260 | struct IOSB { | ||
261 | short iosb$w_value; | ||
262 | short iosb$w_count; | ||
263 | long iosb$l_info; | ||
264 | }; | ||
265 | #endif | ||
266 | |||
267 | #ifdef OPENSSL_SYS_SUNOS | ||
268 | typedef int sig_atomic_t; | ||
269 | #endif | ||
270 | |||
271 | #if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(MAC_OS_GUSI_SOURCE) || defined(OPENSSL_SYS_NETWARE) | ||
272 | /* | ||
273 | * This one needs work. As a matter of fact the code is unoperational | ||
274 | * and this is only a trick to get it compiled. | ||
275 | * <appro@fy.chalmers.se> | ||
276 | */ | ||
277 | # define TTY_STRUCT int | ||
278 | #endif | ||
279 | 168 | ||
280 | #ifndef NX509_SIG | 169 | #ifndef NX509_SIG |
281 | # define NX509_SIG 32 | 170 | # define NX509_SIG 32 |
@@ -289,30 +178,15 @@ static struct sigaction savsig[NX509_SIG]; | |||
289 | static void (*savsig[NX509_SIG])(int ); | 178 | static void (*savsig[NX509_SIG])(int ); |
290 | #endif | 179 | #endif |
291 | 180 | ||
292 | #ifdef OPENSSL_SYS_VMS | ||
293 | static struct IOSB iosb; | ||
294 | static $DESCRIPTOR(terminal,"TT"); | ||
295 | static long tty_orig[3], tty_new[3]; /* XXX Is there any guarantee that this will always suffice for the actual structures? */ | ||
296 | static long status; | ||
297 | static unsigned short channel = 0; | ||
298 | #else | ||
299 | #if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__) | ||
300 | static TTY_STRUCT tty_orig,tty_new; | 181 | static TTY_STRUCT tty_orig,tty_new; |
301 | #endif | ||
302 | #endif | ||
303 | static FILE *tty_in, *tty_out; | 182 | static FILE *tty_in, *tty_out; |
304 | static int is_a_tty; | 183 | static int is_a_tty; |
305 | 184 | ||
306 | /* Declare static functions */ | 185 | /* Declare static functions */ |
307 | #if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE) | ||
308 | static int read_till_nl(FILE *); | 186 | static int read_till_nl(FILE *); |
309 | static void recsig(int); | 187 | static void recsig(int); |
310 | static void pushsig(void); | 188 | static void pushsig(void); |
311 | static void popsig(void); | 189 | static void popsig(void); |
312 | #endif | ||
313 | #if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16) | ||
314 | static int noecho_fgets(char *buf, int size, FILE *tty); | ||
315 | #endif | ||
316 | static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl); | 190 | static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl); |
317 | 191 | ||
318 | static int read_string(UI *ui, UI_STRING *uis); | 192 | static int read_string(UI *ui, UI_STRING *uis); |
@@ -396,7 +270,6 @@ static int read_string(UI *ui, UI_STRING *uis) | |||
396 | } | 270 | } |
397 | 271 | ||
398 | 272 | ||
399 | #if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE) | ||
400 | /* Internal functions to read a string without echoing */ | 273 | /* Internal functions to read a string without echoing */ |
401 | static int read_till_nl(FILE *in) | 274 | static int read_till_nl(FILE *in) |
402 | { | 275 | { |
@@ -411,7 +284,6 @@ static int read_till_nl(FILE *in) | |||
411 | } | 284 | } |
412 | 285 | ||
413 | static volatile sig_atomic_t intr_signal; | 286 | static volatile sig_atomic_t intr_signal; |
414 | #endif | ||
415 | 287 | ||
416 | static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) | 288 | static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) |
417 | { | 289 | { |
@@ -419,7 +291,6 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) | |||
419 | int ok; | 291 | int ok; |
420 | char result[BUFSIZ]; | 292 | char result[BUFSIZ]; |
421 | int maxsize = BUFSIZ-1; | 293 | int maxsize = BUFSIZ-1; |
422 | #if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE) | ||
423 | char *p; | 294 | char *p; |
424 | 295 | ||
425 | intr_signal=0; | 296 | intr_signal=0; |
@@ -434,17 +305,7 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) | |||
434 | ps=2; | 305 | ps=2; |
435 | 306 | ||
436 | result[0]='\0'; | 307 | result[0]='\0'; |
437 | #ifdef OPENSSL_SYS_MSDOS | ||
438 | if (!echo) | ||
439 | { | ||
440 | noecho_fgets(result,maxsize,tty_in); | ||
441 | p=result; /* FIXME: noecho_fgets doesn't return errors */ | ||
442 | } | ||
443 | else | ||
444 | p=fgets(result,maxsize,tty_in); | ||
445 | #else | ||
446 | p=fgets(result,maxsize,tty_in); | 308 | p=fgets(result,maxsize,tty_in); |
447 | #endif | ||
448 | if(!p) | 309 | if(!p) |
449 | goto error; | 310 | goto error; |
450 | if (feof(tty_in)) goto error; | 311 | if (feof(tty_in)) goto error; |
@@ -469,9 +330,6 @@ error: | |||
469 | 330 | ||
470 | if (ps >= 1) | 331 | if (ps >= 1) |
471 | popsig(); | 332 | popsig(); |
472 | #else | ||
473 | ok=1; | ||
474 | #endif | ||
475 | 333 | ||
476 | OPENSSL_cleanse(result,BUFSIZ); | 334 | OPENSSL_cleanse(result,BUFSIZ); |
477 | return ok; | 335 | return ok; |
@@ -484,47 +342,26 @@ static int open_console(UI *ui) | |||
484 | CRYPTO_w_lock(CRYPTO_LOCK_UI); | 342 | CRYPTO_w_lock(CRYPTO_LOCK_UI); |
485 | is_a_tty = 1; | 343 | is_a_tty = 1; |
486 | 344 | ||
487 | #if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE) || defined(OPENSSL_SYS_BEOS) | ||
488 | tty_in=stdin; | ||
489 | tty_out=stderr; | ||
490 | #else | ||
491 | # ifdef OPENSSL_SYS_MSDOS | ||
492 | # define DEV_TTY "con" | ||
493 | # else | ||
494 | # define DEV_TTY "/dev/tty" | 345 | # define DEV_TTY "/dev/tty" |
495 | # endif | ||
496 | if ((tty_in=fopen(DEV_TTY,"r")) == NULL) | 346 | if ((tty_in=fopen(DEV_TTY,"r")) == NULL) |
497 | tty_in=stdin; | 347 | tty_in=stdin; |
498 | if ((tty_out=fopen(DEV_TTY,"w")) == NULL) | 348 | if ((tty_out=fopen(DEV_TTY,"w")) == NULL) |
499 | tty_out=stderr; | 349 | tty_out=stderr; |
500 | #endif | ||
501 | 350 | ||
502 | #if defined(TTY_get) && !defined(OPENSSL_SYS_VMS) | 351 | #if defined(TTY_get) |
503 | if (TTY_get(fileno(tty_in),&tty_orig) == -1) | 352 | if (TTY_get(fileno(tty_in),&tty_orig) == -1) |
504 | { | 353 | { |
505 | #ifdef ENOTTY | ||
506 | if (errno == ENOTTY) | 354 | if (errno == ENOTTY) |
507 | is_a_tty=0; | 355 | is_a_tty=0; |
508 | else | 356 | else |
509 | #endif | ||
510 | #ifdef EINVAL | ||
511 | /* Ariel Glenn ariel@columbia.edu reports that solaris | 357 | /* Ariel Glenn ariel@columbia.edu reports that solaris |
512 | * can return EINVAL instead. This should be ok */ | 358 | * can return EINVAL instead. This should be ok */ |
513 | if (errno == EINVAL) | 359 | if (errno == EINVAL) |
514 | is_a_tty=0; | 360 | is_a_tty=0; |
515 | else | 361 | else |
516 | #endif | ||
517 | return 0; | 362 | return 0; |
518 | } | 363 | } |
519 | #endif | 364 | #endif |
520 | #ifdef OPENSSL_SYS_VMS | ||
521 | status = sys$assign(&terminal,&channel,0,0); | ||
522 | if (status != SS$_NORMAL) | ||
523 | return 0; | ||
524 | status=sys$qiow(0,channel,IO$_SENSEMODE,&iosb,0,0,tty_orig,12,0,0,0,0); | ||
525 | if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL)) | ||
526 | return 0; | ||
527 | #endif | ||
528 | return 1; | 365 | return 1; |
529 | } | 366 | } |
530 | 367 | ||
@@ -535,40 +372,24 @@ static int noecho_console(UI *ui) | |||
535 | tty_new.TTY_FLAGS &= ~ECHO; | 372 | tty_new.TTY_FLAGS &= ~ECHO; |
536 | #endif | 373 | #endif |
537 | 374 | ||
538 | #if defined(TTY_set) && !defined(OPENSSL_SYS_VMS) | 375 | #if defined(TTY_set) |
539 | if (is_a_tty && (TTY_set(fileno(tty_in),&tty_new) == -1)) | 376 | if (is_a_tty && (TTY_set(fileno(tty_in),&tty_new) == -1)) |
540 | return 0; | 377 | return 0; |
541 | #endif | 378 | #endif |
542 | #ifdef OPENSSL_SYS_VMS | ||
543 | tty_new[0] = tty_orig[0]; | ||
544 | tty_new[1] = tty_orig[1] | TT$M_NOECHO; | ||
545 | tty_new[2] = tty_orig[2]; | ||
546 | status = sys$qiow(0,channel,IO$_SETMODE,&iosb,0,0,tty_new,12,0,0,0,0); | ||
547 | if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL)) | ||
548 | return 0; | ||
549 | #endif | ||
550 | return 1; | 379 | return 1; |
551 | } | 380 | } |
552 | 381 | ||
553 | static int echo_console(UI *ui) | 382 | static int echo_console(UI *ui) |
554 | { | 383 | { |
555 | #if defined(TTY_set) && !defined(OPENSSL_SYS_VMS) | 384 | #if defined(TTY_set) |
556 | memcpy(&(tty_new),&(tty_orig),sizeof(tty_orig)); | 385 | memcpy(&(tty_new),&(tty_orig),sizeof(tty_orig)); |
557 | tty_new.TTY_FLAGS |= ECHO; | 386 | tty_new.TTY_FLAGS |= ECHO; |
558 | #endif | 387 | #endif |
559 | 388 | ||
560 | #if defined(TTY_set) && !defined(OPENSSL_SYS_VMS) | 389 | #if defined(TTY_set) |
561 | if (is_a_tty && (TTY_set(fileno(tty_in),&tty_new) == -1)) | 390 | if (is_a_tty && (TTY_set(fileno(tty_in),&tty_new) == -1)) |
562 | return 0; | 391 | return 0; |
563 | #endif | 392 | #endif |
564 | #ifdef OPENSSL_SYS_VMS | ||
565 | tty_new[0] = tty_orig[0]; | ||
566 | tty_new[1] = tty_orig[1] & ~TT$M_NOECHO; | ||
567 | tty_new[2] = tty_orig[2]; | ||
568 | status = sys$qiow(0,channel,IO$_SETMODE,&iosb,0,0,tty_new,12,0,0,0,0); | ||
569 | if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL)) | ||
570 | return 0; | ||
571 | #endif | ||
572 | return 1; | 393 | return 1; |
573 | } | 394 | } |
574 | 395 | ||
@@ -576,22 +397,16 @@ static int close_console(UI *ui) | |||
576 | { | 397 | { |
577 | if (tty_in != stdin) fclose(tty_in); | 398 | if (tty_in != stdin) fclose(tty_in); |
578 | if (tty_out != stderr) fclose(tty_out); | 399 | if (tty_out != stderr) fclose(tty_out); |
579 | #ifdef OPENSSL_SYS_VMS | ||
580 | status = sys$dassgn(channel); | ||
581 | #endif | ||
582 | CRYPTO_w_unlock(CRYPTO_LOCK_UI); | 400 | CRYPTO_w_unlock(CRYPTO_LOCK_UI); |
583 | 401 | ||
584 | return 1; | 402 | return 1; |
585 | } | 403 | } |
586 | 404 | ||
587 | 405 | ||
588 | #if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE) | ||
589 | /* Internal functions to handle signals and act on them */ | 406 | /* Internal functions to handle signals and act on them */ |
590 | static void pushsig(void) | 407 | static void pushsig(void) |
591 | { | 408 | { |
592 | #ifndef OPENSSL_SYS_WIN32 | ||
593 | int i; | 409 | int i; |
594 | #endif | ||
595 | #ifdef SIGACTION | 410 | #ifdef SIGACTION |
596 | struct sigaction sa; | 411 | struct sigaction sa; |
597 | 412 | ||
@@ -599,14 +414,6 @@ static void pushsig(void) | |||
599 | sa.sa_handler=recsig; | 414 | sa.sa_handler=recsig; |
600 | #endif | 415 | #endif |
601 | 416 | ||
602 | #ifdef OPENSSL_SYS_WIN32 | ||
603 | savsig[SIGABRT]=signal(SIGABRT,recsig); | ||
604 | savsig[SIGFPE]=signal(SIGFPE,recsig); | ||
605 | savsig[SIGILL]=signal(SIGILL,recsig); | ||
606 | savsig[SIGINT]=signal(SIGINT,recsig); | ||
607 | savsig[SIGSEGV]=signal(SIGSEGV,recsig); | ||
608 | savsig[SIGTERM]=signal(SIGTERM,recsig); | ||
609 | #else | ||
610 | for (i=1; i<NX509_SIG; i++) | 417 | for (i=1; i<NX509_SIG; i++) |
611 | { | 418 | { |
612 | #ifdef SIGUSR1 | 419 | #ifdef SIGUSR1 |
@@ -627,7 +434,6 @@ static void pushsig(void) | |||
627 | savsig[i]=signal(i,recsig); | 434 | savsig[i]=signal(i,recsig); |
628 | #endif | 435 | #endif |
629 | } | 436 | } |
630 | #endif | ||
631 | 437 | ||
632 | #ifdef SIGWINCH | 438 | #ifdef SIGWINCH |
633 | signal(SIGWINCH,SIG_DFL); | 439 | signal(SIGWINCH,SIG_DFL); |
@@ -636,83 +442,22 @@ static void pushsig(void) | |||
636 | 442 | ||
637 | static void popsig(void) | 443 | static void popsig(void) |
638 | { | 444 | { |
639 | #ifdef OPENSSL_SYS_WIN32 | ||
640 | signal(SIGABRT,savsig[SIGABRT]); | ||
641 | signal(SIGFPE,savsig[SIGFPE]); | ||
642 | signal(SIGILL,savsig[SIGILL]); | ||
643 | signal(SIGINT,savsig[SIGINT]); | ||
644 | signal(SIGSEGV,savsig[SIGSEGV]); | ||
645 | signal(SIGTERM,savsig[SIGTERM]); | ||
646 | #else | ||
647 | int i; | 445 | int i; |
648 | for (i=1; i<NX509_SIG; i++) | 446 | for (i=1; i<NX509_SIG; i++) |
649 | { | 447 | { |
650 | #ifdef SIGUSR1 | ||
651 | if (i == SIGUSR1) | 448 | if (i == SIGUSR1) |
652 | continue; | 449 | continue; |
653 | #endif | ||
654 | #ifdef SIGUSR2 | ||
655 | if (i == SIGUSR2) | 450 | if (i == SIGUSR2) |
656 | continue; | 451 | continue; |
657 | #endif | ||
658 | #ifdef SIGACTION | 452 | #ifdef SIGACTION |
659 | sigaction(i,&savsig[i],NULL); | 453 | sigaction(i,&savsig[i],NULL); |
660 | #else | 454 | #else |
661 | signal(i,savsig[i]); | 455 | signal(i,savsig[i]); |
662 | #endif | 456 | #endif |
663 | } | 457 | } |
664 | #endif | ||
665 | } | 458 | } |
666 | 459 | ||
667 | static void recsig(int i) | 460 | static void recsig(int i) |
668 | { | 461 | { |
669 | intr_signal=i; | 462 | intr_signal=i; |
670 | } | 463 | } |
671 | #endif | ||
672 | |||
673 | /* Internal functions specific for Windows */ | ||
674 | #if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE) | ||
675 | static int noecho_fgets(char *buf, int size, FILE *tty) | ||
676 | { | ||
677 | int i; | ||
678 | char *p; | ||
679 | |||
680 | p=buf; | ||
681 | for (;;) | ||
682 | { | ||
683 | if (size == 0) | ||
684 | { | ||
685 | *p='\0'; | ||
686 | break; | ||
687 | } | ||
688 | size--; | ||
689 | #ifdef WIN16TTY | ||
690 | i=_inchar(); | ||
691 | #elif defined(_WIN32) | ||
692 | i=_getch(); | ||
693 | #else | ||
694 | i=getch(); | ||
695 | #endif | ||
696 | if (i == '\r') i='\n'; | ||
697 | *(p++)=i; | ||
698 | if (i == '\n') | ||
699 | { | ||
700 | *p='\0'; | ||
701 | break; | ||
702 | } | ||
703 | } | ||
704 | #ifdef WIN_CONSOLE_BUG | ||
705 | /* Win95 has several evil console bugs: one of these is that the | ||
706 | * last character read using getch() is passed to the next read: this is | ||
707 | * usually a CR so this can be trouble. No STDIO fix seems to work but | ||
708 | * flushing the console appears to do the trick. | ||
709 | */ | ||
710 | { | ||
711 | HANDLE inh; | ||
712 | inh = GetStdHandle(STD_INPUT_HANDLE); | ||
713 | FlushConsoleInputBuffer(inh); | ||
714 | } | ||
715 | #endif | ||
716 | return(strlen(buf)); | ||
717 | } | ||
718 | #endif | ||
diff --git a/src/lib/libssl/src/crypto/ui/ui_openssl.c b/src/lib/libssl/src/crypto/ui/ui_openssl.c index a38c7581e6..6000c24b1c 100644 --- a/src/lib/libssl/src/crypto/ui/ui_openssl.c +++ b/src/lib/libssl/src/crypto/ui/ui_openssl.c | |||
@@ -117,31 +117,12 @@ | |||
117 | 117 | ||
118 | #include <openssl/e_os2.h> | 118 | #include <openssl/e_os2.h> |
119 | 119 | ||
120 | /* need for #define _POSIX_C_SOURCE arises whenever you pass -ansi to gcc | ||
121 | * [maybe others?], because it masks interfaces not discussed in standard, | ||
122 | * sigaction and fileno included. -pedantic would be more appropriate for | ||
123 | * the intended purposes, but we can't prevent users from adding -ansi. | ||
124 | */ | ||
125 | #if defined(OPENSSL_SYSNAME_VXWORKS) | ||
126 | #include <sys/types.h> | ||
127 | #endif | ||
128 | |||
129 | #if !defined(_POSIX_C_SOURCE) && defined(OPENSSL_SYS_VMS) | ||
130 | #ifndef _POSIX_C_SOURCE | ||
131 | #define _POSIX_C_SOURCE 2 | ||
132 | #endif | ||
133 | #endif | ||
134 | #include <signal.h> | 120 | #include <signal.h> |
135 | #include <stdio.h> | 121 | #include <stdio.h> |
136 | #include <string.h> | 122 | #include <string.h> |
137 | #include <errno.h> | 123 | #include <errno.h> |
138 | 124 | ||
139 | #if !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VMS) | 125 | #include <unistd.h> |
140 | # ifdef OPENSSL_UNISTD | ||
141 | # include OPENSSL_UNISTD | ||
142 | # else | ||
143 | # include <unistd.h> | ||
144 | # endif | ||
145 | /* If unistd.h defines _POSIX_VERSION, we conclude that we | 126 | /* If unistd.h defines _POSIX_VERSION, we conclude that we |
146 | * are on a POSIX system and have sigaction and termios. */ | 127 | * are on a POSIX system and have sigaction and termios. */ |
147 | # if defined(_POSIX_VERSION) | 128 | # if defined(_POSIX_VERSION) |
@@ -152,74 +133,21 @@ | |||
152 | # endif | 133 | # endif |
153 | 134 | ||
154 | # endif | 135 | # endif |
155 | #endif | ||
156 | 136 | ||
157 | #ifdef WIN16TTY | ||
158 | # undef OPENSSL_SYS_WIN16 | ||
159 | # undef WIN16 | ||
160 | # undef _WINDOWS | ||
161 | # include <graph.h> | ||
162 | #endif | ||
163 | |||
164 | /* 06-Apr-92 Luke Brennan Support for VMS */ | ||
165 | #include "ui_locl.h" | 137 | #include "ui_locl.h" |
166 | #include "cryptlib.h" | 138 | #include "cryptlib.h" |
167 | 139 | ||
168 | #ifdef OPENSSL_SYS_VMS /* prototypes for sys$whatever */ | ||
169 | # include <starlet.h> | ||
170 | # ifdef __DECC | ||
171 | # pragma message disable DOLLARID | ||
172 | # endif | ||
173 | #endif | ||
174 | |||
175 | #ifdef WIN_CONSOLE_BUG | ||
176 | # include <windows.h> | ||
177 | #ifndef OPENSSL_SYS_WINCE | ||
178 | # include <wincon.h> | ||
179 | #endif | ||
180 | #endif | ||
181 | |||
182 | 140 | ||
183 | /* There are 5 types of terminal interface supported, | 141 | /* There are 5 types of terminal interface supported, |
184 | * TERMIO, TERMIOS, VMS, MSDOS and SGTTY | 142 | * TERMIO, TERMIOS, VMS, MSDOS and SGTTY |
185 | */ | 143 | */ |
186 | 144 | ||
187 | #if defined(__sgi) && !defined(TERMIOS) | ||
188 | # define TERMIOS | ||
189 | # undef TERMIO | ||
190 | # undef SGTTY | ||
191 | #endif | ||
192 | |||
193 | #if defined(linux) && !defined(TERMIO) | ||
194 | # undef TERMIOS | ||
195 | # define TERMIO | ||
196 | # undef SGTTY | ||
197 | #endif | ||
198 | |||
199 | #ifdef _LIBC | 145 | #ifdef _LIBC |
200 | # undef TERMIOS | 146 | # undef TERMIOS |
201 | # define TERMIO | 147 | # define TERMIO |
202 | # undef SGTTY | 148 | # undef SGTTY |
203 | #endif | 149 | #endif |
204 | 150 | ||
205 | #if !defined(TERMIO) && !defined(TERMIOS) && !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(MAC_OS_GUSI_SOURCE) | ||
206 | # undef TERMIOS | ||
207 | # undef TERMIO | ||
208 | # define SGTTY | ||
209 | #endif | ||
210 | |||
211 | #if defined(OPENSSL_SYS_VXWORKS) | ||
212 | #undef TERMIOS | ||
213 | #undef TERMIO | ||
214 | #undef SGTTY | ||
215 | #endif | ||
216 | |||
217 | #if defined(OPENSSL_SYS_NETWARE) | ||
218 | #undef TERMIOS | ||
219 | #undef TERMIO | ||
220 | #undef SGTTY | ||
221 | #endif | ||
222 | |||
223 | #ifdef TERMIOS | 151 | #ifdef TERMIOS |
224 | # include <termios.h> | 152 | # include <termios.h> |
225 | # define TTY_STRUCT struct termios | 153 | # define TTY_STRUCT struct termios |
@@ -236,46 +164,7 @@ | |||
236 | # define TTY_set(tty,data) ioctl(tty,TCSETA,data) | 164 | # define TTY_set(tty,data) ioctl(tty,TCSETA,data) |
237 | #endif | 165 | #endif |
238 | 166 | ||
239 | #ifdef SGTTY | ||
240 | # include <sgtty.h> | ||
241 | # define TTY_STRUCT struct sgttyb | ||
242 | # define TTY_FLAGS sg_flags | ||
243 | # define TTY_get(tty,data) ioctl(tty,TIOCGETP,data) | ||
244 | # define TTY_set(tty,data) ioctl(tty,TIOCSETP,data) | ||
245 | #endif | ||
246 | |||
247 | #if !defined(_LIBC) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_SUNOS) | ||
248 | # include <sys/ioctl.h> | 167 | # include <sys/ioctl.h> |
249 | #endif | ||
250 | |||
251 | #ifdef OPENSSL_SYS_MSDOS | ||
252 | # include <conio.h> | ||
253 | #endif | ||
254 | |||
255 | #ifdef OPENSSL_SYS_VMS | ||
256 | # include <ssdef.h> | ||
257 | # include <iodef.h> | ||
258 | # include <ttdef.h> | ||
259 | # include <descrip.h> | ||
260 | struct IOSB { | ||
261 | short iosb$w_value; | ||
262 | short iosb$w_count; | ||
263 | long iosb$l_info; | ||
264 | }; | ||
265 | #endif | ||
266 | |||
267 | #ifdef OPENSSL_SYS_SUNOS | ||
268 | typedef int sig_atomic_t; | ||
269 | #endif | ||
270 | |||
271 | #if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(MAC_OS_GUSI_SOURCE) || defined(OPENSSL_SYS_NETWARE) | ||
272 | /* | ||
273 | * This one needs work. As a matter of fact the code is unoperational | ||
274 | * and this is only a trick to get it compiled. | ||
275 | * <appro@fy.chalmers.se> | ||
276 | */ | ||
277 | # define TTY_STRUCT int | ||
278 | #endif | ||
279 | 168 | ||
280 | #ifndef NX509_SIG | 169 | #ifndef NX509_SIG |
281 | # define NX509_SIG 32 | 170 | # define NX509_SIG 32 |
@@ -289,30 +178,15 @@ static struct sigaction savsig[NX509_SIG]; | |||
289 | static void (*savsig[NX509_SIG])(int ); | 178 | static void (*savsig[NX509_SIG])(int ); |
290 | #endif | 179 | #endif |
291 | 180 | ||
292 | #ifdef OPENSSL_SYS_VMS | ||
293 | static struct IOSB iosb; | ||
294 | static $DESCRIPTOR(terminal,"TT"); | ||
295 | static long tty_orig[3], tty_new[3]; /* XXX Is there any guarantee that this will always suffice for the actual structures? */ | ||
296 | static long status; | ||
297 | static unsigned short channel = 0; | ||
298 | #else | ||
299 | #if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__) | ||
300 | static TTY_STRUCT tty_orig,tty_new; | 181 | static TTY_STRUCT tty_orig,tty_new; |
301 | #endif | ||
302 | #endif | ||
303 | static FILE *tty_in, *tty_out; | 182 | static FILE *tty_in, *tty_out; |
304 | static int is_a_tty; | 183 | static int is_a_tty; |
305 | 184 | ||
306 | /* Declare static functions */ | 185 | /* Declare static functions */ |
307 | #if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE) | ||
308 | static int read_till_nl(FILE *); | 186 | static int read_till_nl(FILE *); |
309 | static void recsig(int); | 187 | static void recsig(int); |
310 | static void pushsig(void); | 188 | static void pushsig(void); |
311 | static void popsig(void); | 189 | static void popsig(void); |
312 | #endif | ||
313 | #if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16) | ||
314 | static int noecho_fgets(char *buf, int size, FILE *tty); | ||
315 | #endif | ||
316 | static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl); | 190 | static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl); |
317 | 191 | ||
318 | static int read_string(UI *ui, UI_STRING *uis); | 192 | static int read_string(UI *ui, UI_STRING *uis); |
@@ -396,7 +270,6 @@ static int read_string(UI *ui, UI_STRING *uis) | |||
396 | } | 270 | } |
397 | 271 | ||
398 | 272 | ||
399 | #if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE) | ||
400 | /* Internal functions to read a string without echoing */ | 273 | /* Internal functions to read a string without echoing */ |
401 | static int read_till_nl(FILE *in) | 274 | static int read_till_nl(FILE *in) |
402 | { | 275 | { |
@@ -411,7 +284,6 @@ static int read_till_nl(FILE *in) | |||
411 | } | 284 | } |
412 | 285 | ||
413 | static volatile sig_atomic_t intr_signal; | 286 | static volatile sig_atomic_t intr_signal; |
414 | #endif | ||
415 | 287 | ||
416 | static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) | 288 | static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) |
417 | { | 289 | { |
@@ -419,7 +291,6 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) | |||
419 | int ok; | 291 | int ok; |
420 | char result[BUFSIZ]; | 292 | char result[BUFSIZ]; |
421 | int maxsize = BUFSIZ-1; | 293 | int maxsize = BUFSIZ-1; |
422 | #if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE) | ||
423 | char *p; | 294 | char *p; |
424 | 295 | ||
425 | intr_signal=0; | 296 | intr_signal=0; |
@@ -434,17 +305,7 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) | |||
434 | ps=2; | 305 | ps=2; |
435 | 306 | ||
436 | result[0]='\0'; | 307 | result[0]='\0'; |
437 | #ifdef OPENSSL_SYS_MSDOS | ||
438 | if (!echo) | ||
439 | { | ||
440 | noecho_fgets(result,maxsize,tty_in); | ||
441 | p=result; /* FIXME: noecho_fgets doesn't return errors */ | ||
442 | } | ||
443 | else | ||
444 | p=fgets(result,maxsize,tty_in); | ||
445 | #else | ||
446 | p=fgets(result,maxsize,tty_in); | 308 | p=fgets(result,maxsize,tty_in); |
447 | #endif | ||
448 | if(!p) | 309 | if(!p) |
449 | goto error; | 310 | goto error; |
450 | if (feof(tty_in)) goto error; | 311 | if (feof(tty_in)) goto error; |
@@ -469,9 +330,6 @@ error: | |||
469 | 330 | ||
470 | if (ps >= 1) | 331 | if (ps >= 1) |
471 | popsig(); | 332 | popsig(); |
472 | #else | ||
473 | ok=1; | ||
474 | #endif | ||
475 | 333 | ||
476 | OPENSSL_cleanse(result,BUFSIZ); | 334 | OPENSSL_cleanse(result,BUFSIZ); |
477 | return ok; | 335 | return ok; |
@@ -484,47 +342,26 @@ static int open_console(UI *ui) | |||
484 | CRYPTO_w_lock(CRYPTO_LOCK_UI); | 342 | CRYPTO_w_lock(CRYPTO_LOCK_UI); |
485 | is_a_tty = 1; | 343 | is_a_tty = 1; |
486 | 344 | ||
487 | #if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE) || defined(OPENSSL_SYS_BEOS) | ||
488 | tty_in=stdin; | ||
489 | tty_out=stderr; | ||
490 | #else | ||
491 | # ifdef OPENSSL_SYS_MSDOS | ||
492 | # define DEV_TTY "con" | ||
493 | # else | ||
494 | # define DEV_TTY "/dev/tty" | 345 | # define DEV_TTY "/dev/tty" |
495 | # endif | ||
496 | if ((tty_in=fopen(DEV_TTY,"r")) == NULL) | 346 | if ((tty_in=fopen(DEV_TTY,"r")) == NULL) |
497 | tty_in=stdin; | 347 | tty_in=stdin; |
498 | if ((tty_out=fopen(DEV_TTY,"w")) == NULL) | 348 | if ((tty_out=fopen(DEV_TTY,"w")) == NULL) |
499 | tty_out=stderr; | 349 | tty_out=stderr; |
500 | #endif | ||
501 | 350 | ||
502 | #if defined(TTY_get) && !defined(OPENSSL_SYS_VMS) | 351 | #if defined(TTY_get) |
503 | if (TTY_get(fileno(tty_in),&tty_orig) == -1) | 352 | if (TTY_get(fileno(tty_in),&tty_orig) == -1) |
504 | { | 353 | { |
505 | #ifdef ENOTTY | ||
506 | if (errno == ENOTTY) | 354 | if (errno == ENOTTY) |
507 | is_a_tty=0; | 355 | is_a_tty=0; |
508 | else | 356 | else |
509 | #endif | ||
510 | #ifdef EINVAL | ||
511 | /* Ariel Glenn ariel@columbia.edu reports that solaris | 357 | /* Ariel Glenn ariel@columbia.edu reports that solaris |
512 | * can return EINVAL instead. This should be ok */ | 358 | * can return EINVAL instead. This should be ok */ |
513 | if (errno == EINVAL) | 359 | if (errno == EINVAL) |
514 | is_a_tty=0; | 360 | is_a_tty=0; |
515 | else | 361 | else |
516 | #endif | ||
517 | return 0; | 362 | return 0; |
518 | } | 363 | } |
519 | #endif | 364 | #endif |
520 | #ifdef OPENSSL_SYS_VMS | ||
521 | status = sys$assign(&terminal,&channel,0,0); | ||
522 | if (status != SS$_NORMAL) | ||
523 | return 0; | ||
524 | status=sys$qiow(0,channel,IO$_SENSEMODE,&iosb,0,0,tty_orig,12,0,0,0,0); | ||
525 | if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL)) | ||
526 | return 0; | ||
527 | #endif | ||
528 | return 1; | 365 | return 1; |
529 | } | 366 | } |
530 | 367 | ||
@@ -535,40 +372,24 @@ static int noecho_console(UI *ui) | |||
535 | tty_new.TTY_FLAGS &= ~ECHO; | 372 | tty_new.TTY_FLAGS &= ~ECHO; |
536 | #endif | 373 | #endif |
537 | 374 | ||
538 | #if defined(TTY_set) && !defined(OPENSSL_SYS_VMS) | 375 | #if defined(TTY_set) |
539 | if (is_a_tty && (TTY_set(fileno(tty_in),&tty_new) == -1)) | 376 | if (is_a_tty && (TTY_set(fileno(tty_in),&tty_new) == -1)) |
540 | return 0; | 377 | return 0; |
541 | #endif | 378 | #endif |
542 | #ifdef OPENSSL_SYS_VMS | ||
543 | tty_new[0] = tty_orig[0]; | ||
544 | tty_new[1] = tty_orig[1] | TT$M_NOECHO; | ||
545 | tty_new[2] = tty_orig[2]; | ||
546 | status = sys$qiow(0,channel,IO$_SETMODE,&iosb,0,0,tty_new,12,0,0,0,0); | ||
547 | if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL)) | ||
548 | return 0; | ||
549 | #endif | ||
550 | return 1; | 379 | return 1; |
551 | } | 380 | } |
552 | 381 | ||
553 | static int echo_console(UI *ui) | 382 | static int echo_console(UI *ui) |
554 | { | 383 | { |
555 | #if defined(TTY_set) && !defined(OPENSSL_SYS_VMS) | 384 | #if defined(TTY_set) |
556 | memcpy(&(tty_new),&(tty_orig),sizeof(tty_orig)); | 385 | memcpy(&(tty_new),&(tty_orig),sizeof(tty_orig)); |
557 | tty_new.TTY_FLAGS |= ECHO; | 386 | tty_new.TTY_FLAGS |= ECHO; |
558 | #endif | 387 | #endif |
559 | 388 | ||
560 | #if defined(TTY_set) && !defined(OPENSSL_SYS_VMS) | 389 | #if defined(TTY_set) |
561 | if (is_a_tty && (TTY_set(fileno(tty_in),&tty_new) == -1)) | 390 | if (is_a_tty && (TTY_set(fileno(tty_in),&tty_new) == -1)) |
562 | return 0; | 391 | return 0; |
563 | #endif | 392 | #endif |
564 | #ifdef OPENSSL_SYS_VMS | ||
565 | tty_new[0] = tty_orig[0]; | ||
566 | tty_new[1] = tty_orig[1] & ~TT$M_NOECHO; | ||
567 | tty_new[2] = tty_orig[2]; | ||
568 | status = sys$qiow(0,channel,IO$_SETMODE,&iosb,0,0,tty_new,12,0,0,0,0); | ||
569 | if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL)) | ||
570 | return 0; | ||
571 | #endif | ||
572 | return 1; | 393 | return 1; |
573 | } | 394 | } |
574 | 395 | ||
@@ -576,22 +397,16 @@ static int close_console(UI *ui) | |||
576 | { | 397 | { |
577 | if (tty_in != stdin) fclose(tty_in); | 398 | if (tty_in != stdin) fclose(tty_in); |
578 | if (tty_out != stderr) fclose(tty_out); | 399 | if (tty_out != stderr) fclose(tty_out); |
579 | #ifdef OPENSSL_SYS_VMS | ||
580 | status = sys$dassgn(channel); | ||
581 | #endif | ||
582 | CRYPTO_w_unlock(CRYPTO_LOCK_UI); | 400 | CRYPTO_w_unlock(CRYPTO_LOCK_UI); |
583 | 401 | ||
584 | return 1; | 402 | return 1; |
585 | } | 403 | } |
586 | 404 | ||
587 | 405 | ||
588 | #if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE) | ||
589 | /* Internal functions to handle signals and act on them */ | 406 | /* Internal functions to handle signals and act on them */ |
590 | static void pushsig(void) | 407 | static void pushsig(void) |
591 | { | 408 | { |
592 | #ifndef OPENSSL_SYS_WIN32 | ||
593 | int i; | 409 | int i; |
594 | #endif | ||
595 | #ifdef SIGACTION | 410 | #ifdef SIGACTION |
596 | struct sigaction sa; | 411 | struct sigaction sa; |
597 | 412 | ||
@@ -599,14 +414,6 @@ static void pushsig(void) | |||
599 | sa.sa_handler=recsig; | 414 | sa.sa_handler=recsig; |
600 | #endif | 415 | #endif |
601 | 416 | ||
602 | #ifdef OPENSSL_SYS_WIN32 | ||
603 | savsig[SIGABRT]=signal(SIGABRT,recsig); | ||
604 | savsig[SIGFPE]=signal(SIGFPE,recsig); | ||
605 | savsig[SIGILL]=signal(SIGILL,recsig); | ||
606 | savsig[SIGINT]=signal(SIGINT,recsig); | ||
607 | savsig[SIGSEGV]=signal(SIGSEGV,recsig); | ||
608 | savsig[SIGTERM]=signal(SIGTERM,recsig); | ||
609 | #else | ||
610 | for (i=1; i<NX509_SIG; i++) | 417 | for (i=1; i<NX509_SIG; i++) |
611 | { | 418 | { |
612 | #ifdef SIGUSR1 | 419 | #ifdef SIGUSR1 |
@@ -627,7 +434,6 @@ static void pushsig(void) | |||
627 | savsig[i]=signal(i,recsig); | 434 | savsig[i]=signal(i,recsig); |
628 | #endif | 435 | #endif |
629 | } | 436 | } |
630 | #endif | ||
631 | 437 | ||
632 | #ifdef SIGWINCH | 438 | #ifdef SIGWINCH |
633 | signal(SIGWINCH,SIG_DFL); | 439 | signal(SIGWINCH,SIG_DFL); |
@@ -636,83 +442,22 @@ static void pushsig(void) | |||
636 | 442 | ||
637 | static void popsig(void) | 443 | static void popsig(void) |
638 | { | 444 | { |
639 | #ifdef OPENSSL_SYS_WIN32 | ||
640 | signal(SIGABRT,savsig[SIGABRT]); | ||
641 | signal(SIGFPE,savsig[SIGFPE]); | ||
642 | signal(SIGILL,savsig[SIGILL]); | ||
643 | signal(SIGINT,savsig[SIGINT]); | ||
644 | signal(SIGSEGV,savsig[SIGSEGV]); | ||
645 | signal(SIGTERM,savsig[SIGTERM]); | ||
646 | #else | ||
647 | int i; | 445 | int i; |
648 | for (i=1; i<NX509_SIG; i++) | 446 | for (i=1; i<NX509_SIG; i++) |
649 | { | 447 | { |
650 | #ifdef SIGUSR1 | ||
651 | if (i == SIGUSR1) | 448 | if (i == SIGUSR1) |
652 | continue; | 449 | continue; |
653 | #endif | ||
654 | #ifdef SIGUSR2 | ||
655 | if (i == SIGUSR2) | 450 | if (i == SIGUSR2) |
656 | continue; | 451 | continue; |
657 | #endif | ||
658 | #ifdef SIGACTION | 452 | #ifdef SIGACTION |
659 | sigaction(i,&savsig[i],NULL); | 453 | sigaction(i,&savsig[i],NULL); |
660 | #else | 454 | #else |
661 | signal(i,savsig[i]); | 455 | signal(i,savsig[i]); |
662 | #endif | 456 | #endif |
663 | } | 457 | } |
664 | #endif | ||
665 | } | 458 | } |
666 | 459 | ||
667 | static void recsig(int i) | 460 | static void recsig(int i) |
668 | { | 461 | { |
669 | intr_signal=i; | 462 | intr_signal=i; |
670 | } | 463 | } |
671 | #endif | ||
672 | |||
673 | /* Internal functions specific for Windows */ | ||
674 | #if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE) | ||
675 | static int noecho_fgets(char *buf, int size, FILE *tty) | ||
676 | { | ||
677 | int i; | ||
678 | char *p; | ||
679 | |||
680 | p=buf; | ||
681 | for (;;) | ||
682 | { | ||
683 | if (size == 0) | ||
684 | { | ||
685 | *p='\0'; | ||
686 | break; | ||
687 | } | ||
688 | size--; | ||
689 | #ifdef WIN16TTY | ||
690 | i=_inchar(); | ||
691 | #elif defined(_WIN32) | ||
692 | i=_getch(); | ||
693 | #else | ||
694 | i=getch(); | ||
695 | #endif | ||
696 | if (i == '\r') i='\n'; | ||
697 | *(p++)=i; | ||
698 | if (i == '\n') | ||
699 | { | ||
700 | *p='\0'; | ||
701 | break; | ||
702 | } | ||
703 | } | ||
704 | #ifdef WIN_CONSOLE_BUG | ||
705 | /* Win95 has several evil console bugs: one of these is that the | ||
706 | * last character read using getch() is passed to the next read: this is | ||
707 | * usually a CR so this can be trouble. No STDIO fix seems to work but | ||
708 | * flushing the console appears to do the trick. | ||
709 | */ | ||
710 | { | ||
711 | HANDLE inh; | ||
712 | inh = GetStdHandle(STD_INPUT_HANDLE); | ||
713 | FlushConsoleInputBuffer(inh); | ||
714 | } | ||
715 | #endif | ||
716 | return(strlen(buf)); | ||
717 | } | ||
718 | #endif | ||