xref: /aosp_15_r20/external/curl/tests/sshhelp.pm (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
2*6236dae4SAndroid Build Coastguard Worker#                                  _   _ ____  _
3*6236dae4SAndroid Build Coastguard Worker#  Project                     ___| | | |  _ \| |
4*6236dae4SAndroid Build Coastguard Worker#                             / __| | | | |_) | |
5*6236dae4SAndroid Build Coastguard Worker#                            | (__| |_| |  _ <| |___
6*6236dae4SAndroid Build Coastguard Worker#                             \___|\___/|_| \_\_____|
7*6236dae4SAndroid Build Coastguard Worker#
8*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
9*6236dae4SAndroid Build Coastguard Worker#
10*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which
11*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms
12*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html.
13*6236dae4SAndroid Build Coastguard Worker#
14*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell
15*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is
16*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file.
17*6236dae4SAndroid Build Coastguard Worker#
18*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied.
20*6236dae4SAndroid Build Coastguard Worker#
21*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl
22*6236dae4SAndroid Build Coastguard Worker#
23*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
24*6236dae4SAndroid Build Coastguard Worker
25*6236dae4SAndroid Build Coastguard Workerpackage sshhelp;
26*6236dae4SAndroid Build Coastguard Worker
27*6236dae4SAndroid Build Coastguard Workeruse strict;
28*6236dae4SAndroid Build Coastguard Workeruse warnings;
29*6236dae4SAndroid Build Coastguard Worker
30*6236dae4SAndroid Build Coastguard WorkerBEGIN {
31*6236dae4SAndroid Build Coastguard Worker    use base qw(Exporter);
32*6236dae4SAndroid Build Coastguard Worker
33*6236dae4SAndroid Build Coastguard Worker    our @EXPORT_OK = qw(
34*6236dae4SAndroid Build Coastguard Worker        $sshdexe
35*6236dae4SAndroid Build Coastguard Worker        $sshexe
36*6236dae4SAndroid Build Coastguard Worker        $sftpsrvexe
37*6236dae4SAndroid Build Coastguard Worker        $sftpexe
38*6236dae4SAndroid Build Coastguard Worker        $sshkeygenexe
39*6236dae4SAndroid Build Coastguard Worker        $sshdconfig
40*6236dae4SAndroid Build Coastguard Worker        $sshconfig
41*6236dae4SAndroid Build Coastguard Worker        $sftpconfig
42*6236dae4SAndroid Build Coastguard Worker        $knownhosts
43*6236dae4SAndroid Build Coastguard Worker        $sshdlog
44*6236dae4SAndroid Build Coastguard Worker        $sshlog
45*6236dae4SAndroid Build Coastguard Worker        $sftplog
46*6236dae4SAndroid Build Coastguard Worker        $sftpcmds
47*6236dae4SAndroid Build Coastguard Worker        $hstprvkeyf
48*6236dae4SAndroid Build Coastguard Worker        $hstpubkeyf
49*6236dae4SAndroid Build Coastguard Worker        $hstpubmd5f
50*6236dae4SAndroid Build Coastguard Worker        $hstpubsha256f
51*6236dae4SAndroid Build Coastguard Worker        $cliprvkeyf
52*6236dae4SAndroid Build Coastguard Worker        $clipubkeyf
53*6236dae4SAndroid Build Coastguard Worker        display_sshdconfig
54*6236dae4SAndroid Build Coastguard Worker        display_sshconfig
55*6236dae4SAndroid Build Coastguard Worker        display_sftpconfig
56*6236dae4SAndroid Build Coastguard Worker        display_sshdlog
57*6236dae4SAndroid Build Coastguard Worker        display_sshlog
58*6236dae4SAndroid Build Coastguard Worker        display_sftplog
59*6236dae4SAndroid Build Coastguard Worker        dump_array
60*6236dae4SAndroid Build Coastguard Worker        find_sshd
61*6236dae4SAndroid Build Coastguard Worker        find_ssh
62*6236dae4SAndroid Build Coastguard Worker        find_sftpsrv
63*6236dae4SAndroid Build Coastguard Worker        find_sftp
64*6236dae4SAndroid Build Coastguard Worker        find_sshkeygen
65*6236dae4SAndroid Build Coastguard Worker        find_httptlssrv
66*6236dae4SAndroid Build Coastguard Worker        sshversioninfo
67*6236dae4SAndroid Build Coastguard Worker    );
68*6236dae4SAndroid Build Coastguard Worker}
69*6236dae4SAndroid Build Coastguard Worker
70*6236dae4SAndroid Build Coastguard Workeruse File::Spec;
71*6236dae4SAndroid Build Coastguard Worker
72*6236dae4SAndroid Build Coastguard Workeruse pathhelp qw(
73*6236dae4SAndroid Build Coastguard Worker    exe_ext
74*6236dae4SAndroid Build Coastguard Worker    );
75*6236dae4SAndroid Build Coastguard Worker
76*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
77*6236dae4SAndroid Build Coastguard Worker# Global variables initialization
78*6236dae4SAndroid Build Coastguard Worker#
79*6236dae4SAndroid Build Coastguard Workerour $sshdexe         = 'sshd'        .exe_ext('SSH'); # base name and ext of ssh daemon
80*6236dae4SAndroid Build Coastguard Workerour $sshexe          = 'ssh'         .exe_ext('SSH'); # base name and ext of ssh client
81*6236dae4SAndroid Build Coastguard Workerour $sftpsrvexe      = 'sftp-server' .exe_ext('SSH'); # base name and ext of sftp-server
82*6236dae4SAndroid Build Coastguard Workerour $sftpexe         = 'sftp'        .exe_ext('SSH'); # base name and ext of sftp client
83*6236dae4SAndroid Build Coastguard Workerour $sshkeygenexe    = 'ssh-keygen'  .exe_ext('SSH'); # base name and ext of ssh-keygen
84*6236dae4SAndroid Build Coastguard Workerour $httptlssrvexe   = 'gnutls-serv' .exe_ext('SSH'); # base name and ext of gnutls-serv
85*6236dae4SAndroid Build Coastguard Workerour $sshdconfig      = 'curl_sshd_config';       # ssh daemon config file
86*6236dae4SAndroid Build Coastguard Workerour $sshconfig       = 'curl_ssh_config';        # ssh client config file
87*6236dae4SAndroid Build Coastguard Workerour $sftpconfig      = 'curl_sftp_config';       # sftp client config file
88*6236dae4SAndroid Build Coastguard Workerour $sshdlog         = undef;                    # ssh daemon log file
89*6236dae4SAndroid Build Coastguard Workerour $sshlog          = undef;                    # ssh client log file
90*6236dae4SAndroid Build Coastguard Workerour $sftplog         = undef;                    # sftp client log file
91*6236dae4SAndroid Build Coastguard Workerour $sftpcmds        = 'curl_sftp_cmds';         # sftp client commands batch file
92*6236dae4SAndroid Build Coastguard Workerour $knownhosts      = 'curl_client_knownhosts'; # ssh knownhosts file
93*6236dae4SAndroid Build Coastguard Workerour $hstprvkeyf      = 'curl_host_rsa_key';      # host private key file
94*6236dae4SAndroid Build Coastguard Workerour $hstpubkeyf      = 'curl_host_rsa_key.pub';  # host public key file
95*6236dae4SAndroid Build Coastguard Workerour $hstpubmd5f      = 'curl_host_rsa_key.pub_md5';  # md5 hash of host public key
96*6236dae4SAndroid Build Coastguard Workerour $hstpubsha256f   = 'curl_host_rsa_key.pub_sha256';  # sha256 hash of host public key
97*6236dae4SAndroid Build Coastguard Workerour $cliprvkeyf      = 'curl_client_key';        # client private key file
98*6236dae4SAndroid Build Coastguard Workerour $clipubkeyf      = 'curl_client_key.pub';    # client public key file
99*6236dae4SAndroid Build Coastguard Worker
100*6236dae4SAndroid Build Coastguard Worker
101*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
102*6236dae4SAndroid Build Coastguard Worker# Absolute paths where to look for sftp-server plugin, when not in PATH
103*6236dae4SAndroid Build Coastguard Worker#
104*6236dae4SAndroid Build Coastguard Workerour @sftppath = qw(
105*6236dae4SAndroid Build Coastguard Worker    /usr/lib/openssh
106*6236dae4SAndroid Build Coastguard Worker    /usr/libexec/openssh
107*6236dae4SAndroid Build Coastguard Worker    /usr/libexec
108*6236dae4SAndroid Build Coastguard Worker    /usr/local/libexec
109*6236dae4SAndroid Build Coastguard Worker    /opt/local/libexec
110*6236dae4SAndroid Build Coastguard Worker    /usr/lib/ssh
111*6236dae4SAndroid Build Coastguard Worker    /usr/libexec/ssh
112*6236dae4SAndroid Build Coastguard Worker    /usr/sbin
113*6236dae4SAndroid Build Coastguard Worker    /usr/lib
114*6236dae4SAndroid Build Coastguard Worker    /usr/lib/ssh/openssh
115*6236dae4SAndroid Build Coastguard Worker    /usr/lib64/ssh
116*6236dae4SAndroid Build Coastguard Worker    /usr/lib64/misc
117*6236dae4SAndroid Build Coastguard Worker    /usr/lib/misc
118*6236dae4SAndroid Build Coastguard Worker    /usr/local/sbin
119*6236dae4SAndroid Build Coastguard Worker    /usr/freeware/bin
120*6236dae4SAndroid Build Coastguard Worker    /usr/freeware/sbin
121*6236dae4SAndroid Build Coastguard Worker    /usr/freeware/libexec
122*6236dae4SAndroid Build Coastguard Worker    /opt/ssh/sbin
123*6236dae4SAndroid Build Coastguard Worker    /opt/ssh/libexec
124*6236dae4SAndroid Build Coastguard Worker    );
125*6236dae4SAndroid Build Coastguard Worker
126*6236dae4SAndroid Build Coastguard Worker
127*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
128*6236dae4SAndroid Build Coastguard Worker# Absolute paths where to look for httptlssrv (gnutls-serv), when not in PATH
129*6236dae4SAndroid Build Coastguard Worker#
130*6236dae4SAndroid Build Coastguard Workerour @httptlssrvpath = qw(
131*6236dae4SAndroid Build Coastguard Worker    /usr/sbin
132*6236dae4SAndroid Build Coastguard Worker    /usr/libexec
133*6236dae4SAndroid Build Coastguard Worker    /usr/lib
134*6236dae4SAndroid Build Coastguard Worker    /usr/lib/misc
135*6236dae4SAndroid Build Coastguard Worker    /usr/lib64/misc
136*6236dae4SAndroid Build Coastguard Worker    /usr/local/bin
137*6236dae4SAndroid Build Coastguard Worker    /usr/local/sbin
138*6236dae4SAndroid Build Coastguard Worker    /usr/local/libexec
139*6236dae4SAndroid Build Coastguard Worker    /opt/local/bin
140*6236dae4SAndroid Build Coastguard Worker    /opt/local/sbin
141*6236dae4SAndroid Build Coastguard Worker    /opt/local/libexec
142*6236dae4SAndroid Build Coastguard Worker    /usr/freeware/bin
143*6236dae4SAndroid Build Coastguard Worker    /usr/freeware/sbin
144*6236dae4SAndroid Build Coastguard Worker    /usr/freeware/libexec
145*6236dae4SAndroid Build Coastguard Worker    /opt/gnutls/bin
146*6236dae4SAndroid Build Coastguard Worker    /opt/gnutls/sbin
147*6236dae4SAndroid Build Coastguard Worker    /opt/gnutls/libexec
148*6236dae4SAndroid Build Coastguard Worker    );
149*6236dae4SAndroid Build Coastguard Worker
150*6236dae4SAndroid Build Coastguard Worker
151*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
152*6236dae4SAndroid Build Coastguard Worker# Create or overwrite the given file with lines from an array of strings
153*6236dae4SAndroid Build Coastguard Worker#
154*6236dae4SAndroid Build Coastguard Workersub dump_array {
155*6236dae4SAndroid Build Coastguard Worker    my ($filename, @arr) = @_;
156*6236dae4SAndroid Build Coastguard Worker    my $error;
157*6236dae4SAndroid Build Coastguard Worker
158*6236dae4SAndroid Build Coastguard Worker    if(!$filename) {
159*6236dae4SAndroid Build Coastguard Worker        $error = 'Error: Missing argument 1 for dump_array()';
160*6236dae4SAndroid Build Coastguard Worker    }
161*6236dae4SAndroid Build Coastguard Worker    elsif(open(my $textfh, ">", $filename)) {
162*6236dae4SAndroid Build Coastguard Worker        foreach my $line (@arr) {
163*6236dae4SAndroid Build Coastguard Worker            $line .= "\n" if($line !~ /\n$/);
164*6236dae4SAndroid Build Coastguard Worker            print $textfh $line;
165*6236dae4SAndroid Build Coastguard Worker        }
166*6236dae4SAndroid Build Coastguard Worker        if(!close($textfh)) {
167*6236dae4SAndroid Build Coastguard Worker            $error = "Error: cannot close file $filename";
168*6236dae4SAndroid Build Coastguard Worker        }
169*6236dae4SAndroid Build Coastguard Worker    }
170*6236dae4SAndroid Build Coastguard Worker    else {
171*6236dae4SAndroid Build Coastguard Worker        $error = "Error: cannot write file $filename";
172*6236dae4SAndroid Build Coastguard Worker    }
173*6236dae4SAndroid Build Coastguard Worker    return $error;
174*6236dae4SAndroid Build Coastguard Worker}
175*6236dae4SAndroid Build Coastguard Worker
176*6236dae4SAndroid Build Coastguard Worker
177*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
178*6236dae4SAndroid Build Coastguard Worker# Display contents of the given file
179*6236dae4SAndroid Build Coastguard Worker#
180*6236dae4SAndroid Build Coastguard Workersub display_file {
181*6236dae4SAndroid Build Coastguard Worker    my $filename = $_[0];
182*6236dae4SAndroid Build Coastguard Worker    print "=== Start of file $filename\n";
183*6236dae4SAndroid Build Coastguard Worker    if(open(my $displayfh, "<", "$filename")) {
184*6236dae4SAndroid Build Coastguard Worker        while(my $line = <$displayfh>) {
185*6236dae4SAndroid Build Coastguard Worker            print "$line";
186*6236dae4SAndroid Build Coastguard Worker        }
187*6236dae4SAndroid Build Coastguard Worker        close $displayfh;
188*6236dae4SAndroid Build Coastguard Worker    }
189*6236dae4SAndroid Build Coastguard Worker    print "=== End of file $filename\n";
190*6236dae4SAndroid Build Coastguard Worker}
191*6236dae4SAndroid Build Coastguard Worker
192*6236dae4SAndroid Build Coastguard Worker
193*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
194*6236dae4SAndroid Build Coastguard Worker# Display contents of the ssh daemon config file
195*6236dae4SAndroid Build Coastguard Worker#
196*6236dae4SAndroid Build Coastguard Workersub display_sshdconfig {
197*6236dae4SAndroid Build Coastguard Worker    display_file($sshdconfig);
198*6236dae4SAndroid Build Coastguard Worker}
199*6236dae4SAndroid Build Coastguard Worker
200*6236dae4SAndroid Build Coastguard Worker
201*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
202*6236dae4SAndroid Build Coastguard Worker# Display contents of the ssh client config file
203*6236dae4SAndroid Build Coastguard Worker#
204*6236dae4SAndroid Build Coastguard Workersub display_sshconfig {
205*6236dae4SAndroid Build Coastguard Worker    display_file($sshconfig);
206*6236dae4SAndroid Build Coastguard Worker}
207*6236dae4SAndroid Build Coastguard Worker
208*6236dae4SAndroid Build Coastguard Worker
209*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
210*6236dae4SAndroid Build Coastguard Worker# Display contents of the sftp client config file
211*6236dae4SAndroid Build Coastguard Worker#
212*6236dae4SAndroid Build Coastguard Workersub display_sftpconfig {
213*6236dae4SAndroid Build Coastguard Worker    display_file($sftpconfig);
214*6236dae4SAndroid Build Coastguard Worker}
215*6236dae4SAndroid Build Coastguard Worker
216*6236dae4SAndroid Build Coastguard Worker
217*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
218*6236dae4SAndroid Build Coastguard Worker# Display contents of the ssh daemon log file
219*6236dae4SAndroid Build Coastguard Worker#
220*6236dae4SAndroid Build Coastguard Workersub display_sshdlog {
221*6236dae4SAndroid Build Coastguard Worker    die "error: \$sshdlog uninitialized" if(not defined $sshdlog);
222*6236dae4SAndroid Build Coastguard Worker    display_file($sshdlog);
223*6236dae4SAndroid Build Coastguard Worker}
224*6236dae4SAndroid Build Coastguard Worker
225*6236dae4SAndroid Build Coastguard Worker
226*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
227*6236dae4SAndroid Build Coastguard Worker# Display contents of the ssh client log file
228*6236dae4SAndroid Build Coastguard Worker#
229*6236dae4SAndroid Build Coastguard Workersub display_sshlog {
230*6236dae4SAndroid Build Coastguard Worker    die "error: \$sshlog uninitialized" if(not defined $sshlog);
231*6236dae4SAndroid Build Coastguard Worker    display_file($sshlog);
232*6236dae4SAndroid Build Coastguard Worker}
233*6236dae4SAndroid Build Coastguard Worker
234*6236dae4SAndroid Build Coastguard Worker
235*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
236*6236dae4SAndroid Build Coastguard Worker# Display contents of the sftp client log file
237*6236dae4SAndroid Build Coastguard Worker#
238*6236dae4SAndroid Build Coastguard Workersub display_sftplog {
239*6236dae4SAndroid Build Coastguard Worker    die "error: \$sftplog uninitialized" if(not defined $sftplog);
240*6236dae4SAndroid Build Coastguard Worker    display_file($sftplog);
241*6236dae4SAndroid Build Coastguard Worker}
242*6236dae4SAndroid Build Coastguard Worker
243*6236dae4SAndroid Build Coastguard Worker
244*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
245*6236dae4SAndroid Build Coastguard Worker# Find a file somewhere in the given path
246*6236dae4SAndroid Build Coastguard Worker#
247*6236dae4SAndroid Build Coastguard Workersub find_file {
248*6236dae4SAndroid Build Coastguard Worker    my $fn = $_[0];
249*6236dae4SAndroid Build Coastguard Worker    shift;
250*6236dae4SAndroid Build Coastguard Worker    my @path = @_;
251*6236dae4SAndroid Build Coastguard Worker    foreach (@path) {
252*6236dae4SAndroid Build Coastguard Worker        my $file = File::Spec->catfile($_, $fn);
253*6236dae4SAndroid Build Coastguard Worker        if(-e $file && ! -d $file) {
254*6236dae4SAndroid Build Coastguard Worker            return $file;
255*6236dae4SAndroid Build Coastguard Worker        }
256*6236dae4SAndroid Build Coastguard Worker    }
257*6236dae4SAndroid Build Coastguard Worker    return "";
258*6236dae4SAndroid Build Coastguard Worker}
259*6236dae4SAndroid Build Coastguard Worker
260*6236dae4SAndroid Build Coastguard Worker
261*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
262*6236dae4SAndroid Build Coastguard Worker# Find an executable file somewhere in the given path
263*6236dae4SAndroid Build Coastguard Worker#
264*6236dae4SAndroid Build Coastguard Workersub find_exe_file {
265*6236dae4SAndroid Build Coastguard Worker    my $fn = $_[0];
266*6236dae4SAndroid Build Coastguard Worker    shift;
267*6236dae4SAndroid Build Coastguard Worker    my @path = @_;
268*6236dae4SAndroid Build Coastguard Worker    my $xext = exe_ext('SSH');
269*6236dae4SAndroid Build Coastguard Worker    foreach (@path) {
270*6236dae4SAndroid Build Coastguard Worker        my $file = File::Spec->catfile($_, $fn);
271*6236dae4SAndroid Build Coastguard Worker        if(-e $file && ! -d $file) {
272*6236dae4SAndroid Build Coastguard Worker            return $file if(-x $file);
273*6236dae4SAndroid Build Coastguard Worker            return $file if(($xext) && (lc($file) =~ /\Q$xext\E$/));
274*6236dae4SAndroid Build Coastguard Worker        }
275*6236dae4SAndroid Build Coastguard Worker    }
276*6236dae4SAndroid Build Coastguard Worker    return "";
277*6236dae4SAndroid Build Coastguard Worker}
278*6236dae4SAndroid Build Coastguard Worker
279*6236dae4SAndroid Build Coastguard Worker
280*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
281*6236dae4SAndroid Build Coastguard Worker# Find a file in environment path or in our sftppath
282*6236dae4SAndroid Build Coastguard Worker#
283*6236dae4SAndroid Build Coastguard Workersub find_file_spath {
284*6236dae4SAndroid Build Coastguard Worker    my $filename = $_[0];
285*6236dae4SAndroid Build Coastguard Worker    my @spath;
286*6236dae4SAndroid Build Coastguard Worker    push(@spath, File::Spec->path());
287*6236dae4SAndroid Build Coastguard Worker    push(@spath, @sftppath);
288*6236dae4SAndroid Build Coastguard Worker    return find_file($filename, @spath);
289*6236dae4SAndroid Build Coastguard Worker}
290*6236dae4SAndroid Build Coastguard Worker
291*6236dae4SAndroid Build Coastguard Worker
292*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
293*6236dae4SAndroid Build Coastguard Worker# Find an executable file in environment path or in our httptlssrvpath
294*6236dae4SAndroid Build Coastguard Worker#
295*6236dae4SAndroid Build Coastguard Workersub find_exe_file_hpath {
296*6236dae4SAndroid Build Coastguard Worker    my $filename = $_[0];
297*6236dae4SAndroid Build Coastguard Worker    my @hpath;
298*6236dae4SAndroid Build Coastguard Worker    push(@hpath, File::Spec->path());
299*6236dae4SAndroid Build Coastguard Worker    push(@hpath, @httptlssrvpath);
300*6236dae4SAndroid Build Coastguard Worker    return find_exe_file($filename, @hpath);
301*6236dae4SAndroid Build Coastguard Worker}
302*6236dae4SAndroid Build Coastguard Worker
303*6236dae4SAndroid Build Coastguard Worker
304*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
305*6236dae4SAndroid Build Coastguard Worker# Find ssh daemon and return canonical filename
306*6236dae4SAndroid Build Coastguard Worker#
307*6236dae4SAndroid Build Coastguard Workersub find_sshd {
308*6236dae4SAndroid Build Coastguard Worker    return find_file_spath($sshdexe);
309*6236dae4SAndroid Build Coastguard Worker}
310*6236dae4SAndroid Build Coastguard Worker
311*6236dae4SAndroid Build Coastguard Worker
312*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
313*6236dae4SAndroid Build Coastguard Worker# Find ssh client and return canonical filename
314*6236dae4SAndroid Build Coastguard Worker#
315*6236dae4SAndroid Build Coastguard Workersub find_ssh {
316*6236dae4SAndroid Build Coastguard Worker    return find_file_spath($sshexe);
317*6236dae4SAndroid Build Coastguard Worker}
318*6236dae4SAndroid Build Coastguard Worker
319*6236dae4SAndroid Build Coastguard Worker
320*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
321*6236dae4SAndroid Build Coastguard Worker# Find sftp-server plugin and return canonical filename
322*6236dae4SAndroid Build Coastguard Worker#
323*6236dae4SAndroid Build Coastguard Workersub find_sftpsrv {
324*6236dae4SAndroid Build Coastguard Worker    return find_file_spath($sftpsrvexe);
325*6236dae4SAndroid Build Coastguard Worker}
326*6236dae4SAndroid Build Coastguard Worker
327*6236dae4SAndroid Build Coastguard Worker
328*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
329*6236dae4SAndroid Build Coastguard Worker# Find sftp client and return canonical filename
330*6236dae4SAndroid Build Coastguard Worker#
331*6236dae4SAndroid Build Coastguard Workersub find_sftp {
332*6236dae4SAndroid Build Coastguard Worker    return find_file_spath($sftpexe);
333*6236dae4SAndroid Build Coastguard Worker}
334*6236dae4SAndroid Build Coastguard Worker
335*6236dae4SAndroid Build Coastguard Worker
336*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
337*6236dae4SAndroid Build Coastguard Worker# Find ssh-keygen and return canonical filename
338*6236dae4SAndroid Build Coastguard Worker#
339*6236dae4SAndroid Build Coastguard Workersub find_sshkeygen {
340*6236dae4SAndroid Build Coastguard Worker    return find_file_spath($sshkeygenexe);
341*6236dae4SAndroid Build Coastguard Worker}
342*6236dae4SAndroid Build Coastguard Worker
343*6236dae4SAndroid Build Coastguard Worker
344*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
345*6236dae4SAndroid Build Coastguard Worker# Find httptlssrv (gnutls-serv) and return canonical filename
346*6236dae4SAndroid Build Coastguard Worker#
347*6236dae4SAndroid Build Coastguard Workersub find_httptlssrv {
348*6236dae4SAndroid Build Coastguard Worker    my $p = find_exe_file_hpath($httptlssrvexe);
349*6236dae4SAndroid Build Coastguard Worker    if($p) {
350*6236dae4SAndroid Build Coastguard Worker        my @o = `"$p" -l`;
351*6236dae4SAndroid Build Coastguard Worker        my $found;
352*6236dae4SAndroid Build Coastguard Worker        for(@o) {
353*6236dae4SAndroid Build Coastguard Worker            if(/Key exchange: SRP/) {
354*6236dae4SAndroid Build Coastguard Worker                $found = 1;
355*6236dae4SAndroid Build Coastguard Worker                last;
356*6236dae4SAndroid Build Coastguard Worker            }
357*6236dae4SAndroid Build Coastguard Worker        }
358*6236dae4SAndroid Build Coastguard Worker        return $p if($found);
359*6236dae4SAndroid Build Coastguard Worker    }
360*6236dae4SAndroid Build Coastguard Worker    return "";
361*6236dae4SAndroid Build Coastguard Worker}
362*6236dae4SAndroid Build Coastguard Worker
363*6236dae4SAndroid Build Coastguard Worker
364*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
365*6236dae4SAndroid Build Coastguard Worker# Return version info for the given ssh client or server binaries
366*6236dae4SAndroid Build Coastguard Worker#
367*6236dae4SAndroid Build Coastguard Workersub sshversioninfo {
368*6236dae4SAndroid Build Coastguard Worker    my $sshbin = $_[0]; # canonical filename
369*6236dae4SAndroid Build Coastguard Worker    my $major;
370*6236dae4SAndroid Build Coastguard Worker    my $minor;
371*6236dae4SAndroid Build Coastguard Worker    my $patch;
372*6236dae4SAndroid Build Coastguard Worker    my $sshid;
373*6236dae4SAndroid Build Coastguard Worker    my $versnum;
374*6236dae4SAndroid Build Coastguard Worker    my $versstr;
375*6236dae4SAndroid Build Coastguard Worker    my $error;
376*6236dae4SAndroid Build Coastguard Worker
377*6236dae4SAndroid Build Coastguard Worker    if(!$sshbin) {
378*6236dae4SAndroid Build Coastguard Worker        $error = 'Error: Missing argument 1 for sshversioninfo()';
379*6236dae4SAndroid Build Coastguard Worker    }
380*6236dae4SAndroid Build Coastguard Worker    elsif(! -x $sshbin) {
381*6236dae4SAndroid Build Coastguard Worker        $error = "Error: cannot read or execute $sshbin";
382*6236dae4SAndroid Build Coastguard Worker    }
383*6236dae4SAndroid Build Coastguard Worker    else {
384*6236dae4SAndroid Build Coastguard Worker        my $cmd = ($sshbin =~ /$sshdexe$/) ? "\"$sshbin\" -?" : "\"$sshbin\" -V";
385*6236dae4SAndroid Build Coastguard Worker        $error = "$cmd\n";
386*6236dae4SAndroid Build Coastguard Worker        foreach my $tmpstr (qx($cmd 2>&1)) {
387*6236dae4SAndroid Build Coastguard Worker            if($tmpstr =~ /OpenSSH[_-](\d+)\.(\d+)(\.(\d+))*/i) {
388*6236dae4SAndroid Build Coastguard Worker                $major = $1;
389*6236dae4SAndroid Build Coastguard Worker                $minor = $2;
390*6236dae4SAndroid Build Coastguard Worker                $patch = $4?$4:0;
391*6236dae4SAndroid Build Coastguard Worker                $sshid = 'OpenSSH';
392*6236dae4SAndroid Build Coastguard Worker                $versnum = (100*$major) + (10*$minor) + $patch;
393*6236dae4SAndroid Build Coastguard Worker                $versstr = "$sshid $major.$minor.$patch";
394*6236dae4SAndroid Build Coastguard Worker                $error = undef;
395*6236dae4SAndroid Build Coastguard Worker                last;
396*6236dae4SAndroid Build Coastguard Worker            }
397*6236dae4SAndroid Build Coastguard Worker            if($tmpstr =~ /OpenSSH[_-]for[_-]Windows[_-](\d+)\.(\d+)(\.(\d+))*/i) {
398*6236dae4SAndroid Build Coastguard Worker                $major = $1;
399*6236dae4SAndroid Build Coastguard Worker                $minor = $2;
400*6236dae4SAndroid Build Coastguard Worker                $patch = $4?$4:0;
401*6236dae4SAndroid Build Coastguard Worker                $sshid = 'OpenSSH-Windows';
402*6236dae4SAndroid Build Coastguard Worker                $versnum = (100*$major) + (10*$minor) + $patch;
403*6236dae4SAndroid Build Coastguard Worker                $versstr = "$sshid $major.$minor.$patch";
404*6236dae4SAndroid Build Coastguard Worker                $error = undef;
405*6236dae4SAndroid Build Coastguard Worker                last;
406*6236dae4SAndroid Build Coastguard Worker            }
407*6236dae4SAndroid Build Coastguard Worker            if($tmpstr =~ /Sun[_-]SSH[_-](\d+)\.(\d+)(\.(\d+))*/i) {
408*6236dae4SAndroid Build Coastguard Worker                $major = $1;
409*6236dae4SAndroid Build Coastguard Worker                $minor = $2;
410*6236dae4SAndroid Build Coastguard Worker                $patch = $4?$4:0;
411*6236dae4SAndroid Build Coastguard Worker                $sshid = 'SunSSH';
412*6236dae4SAndroid Build Coastguard Worker                $versnum = (100*$major) + (10*$minor) + $patch;
413*6236dae4SAndroid Build Coastguard Worker                $versstr = "$sshid $major.$minor.$patch";
414*6236dae4SAndroid Build Coastguard Worker                $error = undef;
415*6236dae4SAndroid Build Coastguard Worker                last;
416*6236dae4SAndroid Build Coastguard Worker            }
417*6236dae4SAndroid Build Coastguard Worker            $error .= $tmpstr;
418*6236dae4SAndroid Build Coastguard Worker        }
419*6236dae4SAndroid Build Coastguard Worker        chomp $error if($error);
420*6236dae4SAndroid Build Coastguard Worker    }
421*6236dae4SAndroid Build Coastguard Worker    return ($sshid, $versnum, $versstr, $error);
422*6236dae4SAndroid Build Coastguard Worker}
423*6236dae4SAndroid Build Coastguard Worker
424*6236dae4SAndroid Build Coastguard Worker
425*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
426*6236dae4SAndroid Build Coastguard Worker# End of library
427*6236dae4SAndroid Build Coastguard Worker1;
428