Repository: incubator-trafficcontrol Updated Branches: refs/heads/master 58fe1dbda -> f79c2f8a8
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/32f5ff6d/traffic_ops/install/lib/perl5/JSON/backportPP/Compat5006.pm ---------------------------------------------------------------------- diff --git a/traffic_ops/install/lib/perl5/JSON/backportPP/Compat5006.pm b/traffic_ops/install/lib/perl5/JSON/backportPP/Compat5006.pm deleted file mode 100644 index 7736fd8..0000000 --- a/traffic_ops/install/lib/perl5/JSON/backportPP/Compat5006.pm +++ /dev/null @@ -1,173 +0,0 @@ -package # This is JSON::backportPP - JSON::backportPP56; - -use 5.006; -use strict; - -my @properties; - -$JSON::PP56::VERSION = '1.08'; - -BEGIN { - - sub utf8::is_utf8 { - my $len = length $_[0]; # char length - { - use bytes; # byte length; - return $len != length $_[0]; # if !=, UTF8-flagged on. - } - } - - - sub utf8::upgrade { - ; # noop; - } - - - sub utf8::downgrade ($;$) { - return 1 unless ( utf8::is_utf8( $_[0] ) ); - - if ( _is_valid_utf8( $_[0] ) ) { - my $downgrade; - for my $c ( unpack( "U*", $_[0] ) ) { - if ( $c < 256 ) { - $downgrade .= pack("C", $c); - } - else { - $downgrade .= pack("U", $c); - } - } - $_[0] = $downgrade; - return 1; - } - else { - Carp::croak("Wide character in subroutine entry") unless ( $_[1] ); - 0; - } - } - - - sub utf8::encode ($) { # UTF8 flag off - if ( utf8::is_utf8( $_[0] ) ) { - $_[0] = pack( "C*", unpack( "C*", $_[0] ) ); - } - else { - $_[0] = pack( "U*", unpack( "C*", $_[0] ) ); - $_[0] = pack( "C*", unpack( "C*", $_[0] ) ); - } - } - - - sub utf8::decode ($) { # UTF8 flag on - if ( _is_valid_utf8( $_[0] ) ) { - utf8::downgrade( $_[0] ); - $_[0] = pack( "U*", unpack( "U*", $_[0] ) ); - } - } - - - *JSON::PP::JSON_PP_encode_ascii = \&_encode_ascii; - *JSON::PP::JSON_PP_encode_latin1 = \&_encode_latin1; - *JSON::PP::JSON_PP_decode_surrogates = \&JSON::PP::_decode_surrogates; - *JSON::PP::JSON_PP_decode_unicode = \&JSON::PP::_decode_unicode; - - unless ( defined &B::SVp_NOK ) { # missing in B module. - eval q{ sub B::SVp_NOK () { 0x02000000; } }; - } - -} - - - -sub _encode_ascii { - join('', - map { - $_ <= 127 ? - chr($_) : - $_ <= 65535 ? - sprintf('\u%04x', $_) : sprintf('\u%x\u%x', JSON::PP::_encode_surrogates($_)); - } _unpack_emu($_[0]) - ); -} - - -sub _encode_latin1 { - join('', - map { - $_ <= 255 ? - chr($_) : - $_ <= 65535 ? - sprintf('\u%04x', $_) : sprintf('\u%x\u%x', JSON::PP::_encode_surrogates($_)); - } _unpack_emu($_[0]) - ); -} - - -sub _unpack_emu { # for Perl 5.6 unpack warnings - return !utf8::is_utf8($_[0]) ? unpack('C*', $_[0]) - : _is_valid_utf8($_[0]) ? unpack('U*', $_[0]) - : unpack('C*', $_[0]); -} - - -sub _is_valid_utf8 { - my $str = $_[0]; - my $is_utf8; - - while ($str =~ /(?: - ( - [\x00-\x7F] - |[\xC2-\xDF][\x80-\xBF] - |[\xE0][\xA0-\xBF][\x80-\xBF] - |[\xE1-\xEC][\x80-\xBF][\x80-\xBF] - |[\xED][\x80-\x9F][\x80-\xBF] - |[\xEE-\xEF][\x80-\xBF][\x80-\xBF] - |[\xF0][\x90-\xBF][\x80-\xBF][\x80-\xBF] - |[\xF1-\xF3][\x80-\xBF][\x80-\xBF][\x80-\xBF] - |[\xF4][\x80-\x8F][\x80-\xBF][\x80-\xBF] - ) - | (.) - )/xg) - { - if (defined $1) { - $is_utf8 = 1 if (!defined $is_utf8); - } - else { - $is_utf8 = 0 if (!defined $is_utf8); - if ($is_utf8) { # eventually, not utf8 - return; - } - } - } - - return $is_utf8; -} - - -1; -__END__ - -=pod - -=head1 NAME - -JSON::PP56 - Helper module in using JSON::PP in Perl 5.6 - -=head1 DESCRIPTION - -JSON::PP calls internally. - -=head1 AUTHOR - -Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt> - - -=head1 COPYRIGHT AND LICENSE - -Copyright 2007-2012 by Makamaka Hannyaharamitu - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. - -=cut - http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/32f5ff6d/traffic_ops/install/lib/perl5/Term/ReadPassword.pm ---------------------------------------------------------------------- diff --git a/traffic_ops/install/lib/perl5/Term/ReadPassword.pm b/traffic_ops/install/lib/perl5/Term/ReadPassword.pm deleted file mode 100644 index dadf6c5..0000000 --- a/traffic_ops/install/lib/perl5/Term/ReadPassword.pm +++ /dev/null @@ -1,329 +0,0 @@ -package Term::ReadPassword; - -use strict; -use Term::ReadLine; -use POSIX qw(:termios_h); -my %CC_FIELDS = ( - VEOF => VEOF, - VEOL => VEOL, - VERASE => VERASE, - VINTR => VINTR, - VKILL => VKILL, - VQUIT => VQUIT, - VSUSP => VSUSP, - VSTART => VSTART, - VSTOP => VSTOP, - VMIN => VMIN, - VTIME => VTIME, - ); - -use vars qw( - $VERSION @ISA @EXPORT @EXPORT_OK - $ALLOW_STDIN %SPECIAL $SUPPRESS_NEWLINE $INPUT_LIMIT - $USE_STARS $STAR_STRING $UNSTAR_STRING -); - -require Exporter; - -@ISA = qw(Exporter); -@EXPORT = qw( - read_password -); -$VERSION = '0.11'; - -# The special characters in the input stream -%SPECIAL = ( - "\x03" => 'INT', # Control-C, Interrupt - "\x15" => 'NAK', # Control-U, NAK (clear buffer) - "\x08" => 'DEL', # Backspace - "\x7f" => 'DEL', # Delete - "\x0d" => 'ENT', # CR, Enter - "\x0a" => 'ENT', # LF, Enter -); - -# The maximum amount of data for the input buffer to hold -$INPUT_LIMIT = 1000; - -sub read_password { - my($prompt, $idle_limit, $interruptable) = @_; - $prompt = '' unless defined $prompt; - $idle_limit = 0 unless defined $idle_limit; - $interruptable = 0 unless defined $interruptable; - - # Let's open the TTY (rather than STDIN) if we can - local(*TTY, *TTYOUT); - my($in, $out) = Term::ReadLine->findConsole; - die "No console available" unless $in; - if (open TTY, "+<$in") { - # Cool - } elsif ($ALLOW_STDIN) { - open TTY, "<&STDIN" - or die "Can't re-open STDIN: $!"; - } else { - die "Can't open '$in' read/write: $!"; - } - - # And let's send the output to the TTY as well - if (open TTYOUT, ">>$out") { - # Cool - } elsif ($ALLOW_STDIN) { - # Well, let's allow STDOUT as well - open TTYOUT, ">>&STDOUT" - or die "Can't re-open STDOUT: $!"; - } else { - die "Can't open '$out' for output: $!"; - } - - # Don't buffer it! - select( (select(TTYOUT), $|=1)[0] ); - print TTYOUT $prompt; - - # Okay, now remember where everything was, so we can put it back when - # we're done - my $fd_tty = fileno(TTY); - my $term = POSIX::Termios->new(); - $term->getattr($fd_tty); - my $original_flags = $term->getlflag(); - my %original_cc; - for my $field_name (keys %CC_FIELDS) { - $original_cc{$field_name} = $term->getcc($CC_FIELDS{$field_name}); - } - - # What makes this setup different from the ordinary? - # No keyboard-generated signals, no echoing, no canonical input - # processing (like backspace handling) - my $flags = $original_flags & ~(ISIG | ECHO | ICANON); - $term->setlflag($flags); - if ($idle_limit) { - # $idle_limit is in seconds, so multiply by ten - $term->setcc(VTIME, 10 * $idle_limit); - # Continue running the program after that time, even if there - # weren't any characters typed - $term->setcc(VMIN, 0); - } else { - # No time limit, but... - $term->setcc(VTIME, 0); - # Continue as soon as one character has been struck - $term->setcc(VMIN, 1); - } - - # Optionally echo stars in place of password characters. The - # $unstar_string uses backspace characters. - my $star_string = $USE_STARS ? ($STAR_STRING || '*') : ''; - my $unstar_string = $USE_STARS ? ($UNSTAR_STRING || "\b*\b \b") : ''; - - # If there's anything already buffered, we should throw it out. This - # is to discourage users from typing their password before they see - # the prompt, since their keystrokes may be echoing on the screen. - # - # So this statement supposedly makes sure the prompt goes out, the - # unread input buffer is discarded, and _then_ the changes take - # effect. Thus, everything they typed ahead is (probably) echoed. - $term->setattr($fd_tty, TCSAFLUSH); - - my $input = ''; - my $return_value; -KEYSTROKE: - while (1) { - my $new_keys = ''; - my $count = sysread(TTY, $new_keys, 99); - # We're here, so either the idle_limit expired, or the user typed - # something. - if ($count) { - for my $new_key (split //, $new_keys) { - if (my $meaning = $SPECIAL{$new_key}) { - if ($meaning eq 'ENT') { - # Enter/return key - # Return what we have so far - $return_value = $input; - last KEYSTROKE; - } elsif ($meaning eq 'DEL') { - # Delete/backspace key - # Take back one char, if possible - if (length $input) { - $input = substr $input, 0, length($input)-1; - print TTYOUT $unstar_string; - } - } elsif ($meaning eq 'NAK') { - # Control-U (NAK) - # Clear what we have read so far - for (1..length $input) { - print TTYOUT $unstar_string; - } - $input = ''; - } elsif ($interruptable and $meaning eq 'INT') { - # Breaking out of the program - # Return early - last KEYSTROKE; - } else { - # Just an ordinary keystroke - $input .= $new_key; - print TTYOUT $star_string; - } - } else { - # Not special - $input .= $new_key; - print TTYOUT $star_string; - } - } - # Just in case someone sends a lot of data - $input = substr($input, 0, $INPUT_LIMIT) - if length($input) > $INPUT_LIMIT; - } else { - # No count, so something went wrong. Assume timeout. - # Return early - last KEYSTROKE; - } - } - - # Done with waiting for input. Let's not leave the cursor sitting - # there, after the prompt. - print TTYOUT "\n" unless $SUPPRESS_NEWLINE; - - # Let's put everything back where we found it. - $term->setlflag($original_flags); - while (my($field, $value) = each %original_cc) { - $term->setcc($CC_FIELDS{$field}, $value); - } - $term->setattr($fd_tty, TCSAFLUSH); - close(TTY); - close(TTYOUT); - $return_value; -} - -1; -__END__ - -=head1 NAME - -Term::ReadPassword - Asking the user for a password - -=head1 SYNOPSIS - - use Term::ReadPassword; - while (1) { - my $password = read_password('password: '); - redo unless defined $password; - if ($password eq 'flubber') { - print "Access granted.\n"; - last; - } else { - print "Access denied.\n"; - redo; - } - } - -=head1 DESCRIPTION - -This module lets you ask the user for a password in the traditional way, -from the keyboard, without echoing. - -This is not intended for use over the web; user authentication over the -web is another matter entirely. Also, this module should generally be used -in conjunction with Perl's B<crypt()> function, sold separately. - -The B<read_password> function prompts for input, reads a line of text from -the keyboard, then returns that line to the caller. The line of text -doesn't include the newline character, so there's no need to use B<chomp>. - -While the user is entering the text, a few special characters are processed. -The character delete (or the character backspace) will back up one -character, removing the last character in the input buffer (if any). The -character CR (or the character LF) will signal the end of input, causing the -accumulated input buffer to be returned. Control-U will empty the input -buffer. And, optionally, the character Control-C may be used to terminate -the input operation. (See details below.) All other characters, even ones -which would normally have special purposes, will be added to the input -buffer. - -It is not recommended, though, that you use the as-yet-unspecified control -characters in your passwords, as those characters may become meaningful in -a future version of this module. Applications which allow the user to set -their own passwords may wish to enforce this rule, perhaps with code -something like this: - - { - # Naked block for scoping and redo - my $new_pw = read_password("Enter your new password: "); - if ($new_pw =~ /([^\x20-\x7E])/) { - my $bad = unpack "H*", $1; - print "Your password may not contain the "; - print "character with hex code $bad.\n"; - redo; - } elsif (length($new_pw) < 5) { - print "Your password must be longer than that!\n"; - redo; - } elsif ($new_pw ne read_password("Enter it again: ")) { - print "Passwords don't match.\n"; - redo; - } else { - &change_password($new_pw); - print "Your password is now changed.\n"; - } - } - -The second parameter to B<read_password> is the optional C<idle_timeout> -value. If it is a non-zero number and there is no keyboard input for that -many seconds, the input operation will terminate. Notice that this is not -an overall time limit, as the timer is restarted with each new character. - -The third parameter will optionally allow the input operation to be -terminated by the user with Control-C. If this is not supplied, or is -false, a typed Control-C will be entered into the input buffer just as any -other character. In that case, there is no way from the keyboard to -terminate the program while it is waiting for input. (That is to say, the -normal ability to generate signals from the keyboard is suspended during -the call to B<read_password>.) - -If the input operation terminates early (either because the idle_timeout -was exceeded, or because a Control-C was enabled and typed), the return -value will be C<undef>. In either case, there is no way provided to -discover what (if anything) was typed before the early termination, or why -the input operation was terminated. - -So as to discourage users from typing their passwords anywhere except at -the prompt, any input which has been "typed ahead" before the prompt -appears will be discarded. And whether the input operation terminates -normally or not, a newline character will be printed, so that the cursor -will not remain on the line after the prompt. - -=head1 BUGS - -Windows users will want Term::ReadPassword::Win32. - -This module has a poorly-designed interface, and should be thoroughly -rethought and probably re-united with the Windows version. - -Users who wish to see password characters echoed as stars may set -$Term::ReadPassword::USE_STARS to a true value. The bugs are that some -terminals may not erase stars when the user corrects an error, and that -using stars leaks information to shoulder-surfers. - -=head1 SECURITY - -You would think that a module dealing with passwords would be full of -security features. You'd think that, but you'd be wrong. For example, perl -provides no way to erase a piece of data from memory. (It's easy to erase -it so that it can't be accessed from perl, but that's not the same thing -as expunging it from the actual memory.) If you've entered a password, -even if the variable that contained that password has been erased, it may -be possible for someone to find that password, in plaintext, in a core -dump. And that's just one potential security hole. - -In short, if serious security is an issue, don't use this module. - -=head1 LICENSE - -This program is free software; you may redistribute it, modify it, or -both, under the same terms as Perl itself. - -=head1 AUTHOR - -Tom Phoenix <rootb...@redcat.com>. Copyright (C) 2007 Tom Phoenix. - -=head1 SEE ALSO - -Term::ReadLine, L<perlfunc/crypt>, and your system's manpages for the -low-level I/O operations used here. - -=cut