usb-0000:00:01.2-2/input0
  "   ˆl–Ðz¾”Jj"TÒ�zàœ¸”Å£Áƒ€ßÀ¿ µ    #!/usr/local/cpanel/3rdparty/bin/perl

# cpanel - scripts/checkbashshell                  Copyright 2022 cPanel, L.L.C.
#                                                           All rights reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited

use strict;

my @shells = (
    '/usr/local/cpanel/bin/jailshell',
    '/usr/local/cpanel/bin/noshell',
    '/bin/bash',
    '/bin/false',
    '/bin/ftpsh',
);

my $contents = slurp_shells();

foreach my $shell (@shells) {
    if ( $contents !~ m/$shell/ ) {
        $contents .= "$shell\n";
    }
}

write_shells($contents);

exit;

sub slurp_shells {
    open( my $shells_fh, '<', '/etc/shells' ) or die "Couldn't open /etc/shells for reading: $!";
    local $/;
    my $contents = <$shells_fh>;
    $contents .= "\n" unless $contents =~ m/\n$/;
    return $contents;
}

sub write_shells {
    my ($contents) = @_;
    open( my $shells_fh, '>', '/etc/shells' ) or die "Couldn't open /etc/shells for writing: $!";
    print {$shells_fh} $contents;
    close $shells_fh or die "Couldn't write /etc/shells. Please verify its contents! $!";
}
  #   ˆl–ßi~”jj"T% õÆY¸Ó*bÑ¿Â„i 	ŸÁÀ ?÷     a
    fŸWc ã                   @   s   d Z ddlmZ ddlZe e¡ZddlZddlZddl	Z	ddl
mZmZ ddlmZ ddlmZmZmZmZ ddlmZmZmZmZmZmZ edƒZed	ƒZed
ƒZdZg d¢Zg d¢Z dd„ Z!g d¢Z"G dd„ deƒZ#G dd„ deƒZ$G dd„ deƒZ%e% &d¡Z'e% &d¡Z(G dd„ deƒZ)G dd„ deƒZ*e* &d¡Z+e* &d¡Z,G dd„ deƒZ-G dd „ d eƒZ.G d!d"„ d"eƒZ/G d#d$„ d$eƒZ0G d%d&„ d&eƒZ1G d'd(„ d(eƒZ2G d)d*„ d*eeƒZ3G d+d,„ d,eƒZ4G d-d.„ d.eƒZ5G d/d0„ d0eƒZ6G d1d2„ d2eƒZ7G d3d4„ d4eƒZ8G d5d6„ d6eƒZ9G d7d8„ d8eƒZ:G d9d:„ d:eƒZ;e; &d¡Z<e; &d¡Z=G d;d<„ d<eƒZ>e> &d¡Z?G d=d>„ d>eeƒZ@G d?d@„ d@eƒZAeA &d¡ZBeA &d¡ZCG dAdB„ dBeeƒZDG dCdD„ dDeeƒZEG dEdF„ dFeƒZFG dGdH„ dHeƒZGG dIdJ„ dJeƒZHG dKdL„ dLeƒZIG dMdN„ dNeƒZJG dOdP„ dPeƒZKG dQdR„ dReeƒZLG dSdT„ dTeƒZMG dUdV„ dVeƒZNG dWdX„ dXeƒZOG dYdZ„ dZeeƒZPG d[d\„ d\eƒZQeQ &d¡ZReQ &d¡ZSG d]d^„ d^eƒZTG d_d`„ d`eƒZUeU &d¡ZVeU &d¡ZWG dadb„ dbeƒZXeX &d¡ZYeX &d¡ZZG dcdd„ ddeƒZ[G dedf„ dfeƒZ\G dgdh„ dheƒZ]dS )iz?passlib.tests.test_handlers - tests for passlib hash algorithmsé    )Úwith_statementN)ÚexcÚhash)Úrepeat_string)ÚirangeÚPY3ÚuÚget_method_function)ÚTestCaseÚHandlerCaseÚ
skipUnlessÚ	TEST_MODEÚUserHandlerMixinÚEncodingHandlerMixinu   Î™Ï‰Î±Î½Î½Î·Ï‚u   â‚¬Â¥$u
   tÃ¡Ð‘â„“É™s
   tÃ¡Ð‘â„“É™)Zdjango_bcryptZdjango_bcrypt_sha256Zdjango_argon2)Ztest_handlersZtest_handlers_argon2Ztest_handlers_bcryptZtest_handlers_ciscoZtest_handlers_djangoZtest_handlers_pbkdf2Ztest_handlers_scryptc              	   C   sÈ   ddl m} || ƒ}t|dƒrd| tvrdz| ¡ }W n" tjyT   | tv sNJ ‚‚ Y n0 d| |f }nd|  }tD ]B}d| }t	|ƒ t
j| }zt||ƒW   S  ty°   Y qp0 qptd|| f ƒ‚dS )	al  
    return HandlerCase instance for scheme, used by other tests.

    :param scheme: name of hasher to locate test for (e.g. "bcrypt")

    :raises KeyError:
        if scheme isn't known hasher.

    :raises MissingBackendError:
        if hasher doesn't have any available backends.

    :returns:
        HandlerCase subclass (which derives from TestCase)
    r   )Úget_crypt_handlerZbackendsz
%s_%s_testz%s_testzpasslib.tests.z$can't find test case named %r for %rN)Zpasslib.registryr   ÚhasattrÚ_omitted_backend_testsZget_backendr   ZMissingBackendErrorÚconditionally_available_hashesÚ_handler_test_modulesÚ
__import__ÚsysÚmodulesÚgetattrÚAttributeErrorÚRuntimeError)Úschemer   ÚhandlerZbackendÚnameÚmoduleÚmodnameÚmod© r!   ú?/usr/lib/python3.9/site-packages/passlib/tests/test_handlers.pyÚget_handler_case-   s&    
r#   )Zargon2Zbcr