Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-Libssh-Session for 
openSUSE:Factory checked in at 2026-11-03 17:59:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Libssh-Session (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Libssh-Session.new.1257 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Libssh-Session"

Tue Nov  3 17:59:52 2026 rev:3 rq:1394679 version:1.200.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Libssh-Session/perl-Libssh-Session.changes  
2024-06-27 16:03:56.096005792 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Libssh-Session.new.1257/perl-Libssh-Session.changes
        2026-11-03 18:05:08.462459538 +0100
@@ -1,0 +2,6 @@
+Thu Oct  8 12:03:32 UTC 2026 - Tina Müller <[email protected]>
+
+- updated to 1.200.0 (1.2)
+   see /usr/share/doc/packages/perl-Libssh-Session/Changes
+
+-------------------------------------------------------------------

Old:
----
  Libssh-Session-1.1.tar.gz

New:
----
  Libssh-Session-1.2.tar.gz
  README.md
  _scmsync.obsinfo
  build.specials.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Libssh-Session.spec ++++++
--- /var/tmp/diff_new_pack.zmXPFh/_old  2026-11-03 18:05:09.349496820 +0100
+++ /var/tmp/diff_new_pack.zmXPFh/_new  2026-11-03 18:05:09.351496904 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-Libssh-Session
 #
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,16 +18,17 @@
 
 %define cpan_name Libssh-Session
 Name:           perl-Libssh-Session
-Version:        1.100.0
+Version:        1.200.0
 Release:        0
-# 1.1 -> normalize -> 1.100.0
-%define cpan_version 1.1
+# 1.2 -> normalize -> 1.200.0
+%define cpan_version 1.2
 #Upstream:  This library is licensed under the Apache License 2.0. Details of 
this license can be found within the 'LICENSE' text file
 License:        Apache-2.0
 Summary:        Perl interface for libssh
 URL:            https://metacpan.org/release/%{cpan_name}
 Source0:        
https://cpan.metacpan.org/authors/id/Q/QG/QGARNIER/%{cpan_name}-%{cpan_version}.tar.gz
 Source1:        cpanspec.yml
+Source100:      README.md
 BuildRequires:  perl
 BuildRequires:  perl-macros
 Provides:       perl(Libssh::Session) = %{version}
@@ -46,9 +47,7 @@
 Right now, you can authenticate and execute commands on a SSH server.
 
 %prep
-%autosetup  -n %{cpan_name}-%{cpan_version}
-
-find . -type f ! -path "*/t/*" ! -name "*.pl" ! -path "*/bin/*" ! -path 
"*/script/*" ! -path "*/scripts/*" ! -name "configure" -print0 | xargs -0 chmod 
644
+%autosetup -n %{cpan_name}-%{cpan_version} -p1
 
 %build
 perl Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}"

++++++ Libssh-Session-1.1.tar.gz -> Libssh-Session-1.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Libssh-Session-1.1/Changes 
new/Libssh-Session-1.2/Changes
--- old/Libssh-Session-1.1/Changes      2024-06-18 15:44:08.000000000 +0200
+++ new/Libssh-Session-1.2/Changes      2026-10-07 17:27:34.000000000 +0200
@@ -1,5 +1,8 @@
 Revision history for Perl extension Libssh.
 
+1.2 2026-06-09
+  - Add execute_scenario methods
+
 1.1 2024-06-18
   - Fix release
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Libssh-Session-1.1/META.json 
new/Libssh-Session-1.2/META.json
--- old/Libssh-Session-1.1/META.json    2024-06-18 15:44:25.000000000 +0200
+++ new/Libssh-Session-1.2/META.json    2026-10-07 17:27:34.000000000 +0200
@@ -47,5 +47,5 @@
       }
    },
    "release_status" : "stable",
-   "version" : "1.1"
+   "version" : "1.2"
 }
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Libssh-Session-1.1/META.yml 
new/Libssh-Session-1.2/META.yml
--- old/Libssh-Session-1.1/META.yml     2024-06-18 15:44:17.000000000 +0200
+++ new/Libssh-Session-1.2/META.yml     2026-10-07 17:27:34.000000000 +0200
@@ -32,7 +32,7 @@
   bugtracker: https://github.com/garnier-quentin/perl-libssh/issues
   homepage: https://github.com/garnier-quentin/perl-libssh
   repository: git://github.com/garnier-quentin/perl-libssh.git
-version: '1.1'
+version: '1.2'
 x_contributors:
   - 'Vesislav Dimitrov'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Libssh-Session-1.1/examples/client_execute_scenario.pl 
new/Libssh-Session-1.2/examples/client_execute_scenario.pl
--- old/Libssh-Session-1.1/examples/client_execute_scenario.pl  1970-01-01 
01:00:00.000000000 +0100
+++ new/Libssh-Session-1.2/examples/client_execute_scenario.pl  2026-10-07 
17:27:34.000000000 +0200
@@ -0,0 +1,45 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Libssh::Session qw(:all);
+
+my $ssh_host = "127.0.0.1";
+my $ssh_port = 22;
+my $ssh_user = "root";
+my $ssh_pass = "centreon";
+
+my $session = Libssh::Session->new();
+if ($session->options(host => $ssh_host, port => $ssh_port, user => $ssh_user) 
!= SSH_OK) {
+    print $session->error() . "\n";
+    exit(1);
+}
+
+if ($session->connect() != SSH_OK) {
+    print $session->error() . "\n";
+    exit(1);
+}
+
+if ($session->auth_publickey_auto() != SSH_AUTH_SUCCESS) {
+    printf("auth issue pubkey: %s\n", $session->error(GetErrorSession => 1));
+    if ($session->auth_password(password => $ssh_pass) != SSH_AUTH_SUCCESS) {
+        printf("auth issue: %s\n", $session->error(GetErrorSession => 1));
+        exit(1);
+    }
+}
+
+print "== authentification succeeded\n";
+
+my $ret = $session->execute_scenario(
+    interactive => 1,
+    scenario => [
+        { "cmd" => "waitfor", "options" => { "Match" =>  'root@debian:~#', 
"Timeout" => "5" } },
+        { "cmd" => "put", "options" => { "String" => "mystring\n", "Timeout" 
=> "5" } },
+        { "cmd" => "waitfor", "options" => { "Match" =>  'root@debian:~#', 
"Timeout" => "5" } },
+        { "cmd" => "close" }
+    ]
+);
+use Data::Dumper;
+print Data::Dumper::Dumper($ret);
+
+exit(0);
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Libssh-Session-1.1/lib/Libssh/Session.pm 
new/Libssh-Session-1.2/lib/Libssh/Session.pm
--- old/Libssh-Session-1.1/lib/Libssh/Session.pm        2024-06-18 
15:44:36.000000000 +0200
+++ new/Libssh-Session-1.2/lib/Libssh/Session.pm        2026-10-07 
17:27:34.000000000 +0200
@@ -7,7 +7,7 @@
 use XSLoader;
 use Time::HiRes;
 
-our $VERSION = '1.1';
+our $VERSION = '1.2';
 
 XSLoader::load('Libssh::Session', $VERSION);
 
@@ -716,6 +716,155 @@
     return pop(@{$self->{store_no_callback}});
 }
 
+#
+# Scenario methods
+#
+
+sub init_scenario {
+    my ($self, %options) = @_;
+
+    my $channel_id = $self->open_channel();
+    if ($channel_id !~ /^\d+\:\d+$/) {
+        $self->{scenario}->{exit} = SSH_ERROR;
+        $self->set_err(msg => 'cannot init channel');
+        return undef;
+    }
+
+    if (defined($options{interactive}) && $options{interactive} =~ /1/) {
+        $self->channel_request_pty(channel => 
${$self->{channels}->{$channel_id}});
+        $self->channel_change_pty_size(channel => 
${$self->{channels}->{$channel_id}}, cols => $options{cols}, rows => 
$options{rows});
+        $self->channel_request_shell(channel => 
${$self->{channels}->{$channel_id}});
+    }
+
+    return $channel_id;
+}
+
+sub execute_scenario_read_channel {
+    my ($self, %options) = @_;
+    
+    my $channel = ${$self->{channels}->{ $options{channel_id} }};
+
+    # read stdout
+    my $stdout = '';
+    while (1) {
+        my $result = ssh_channel_read($channel, 4092, 0, 1);
+        if (defined($result->{message})) {
+            $stdout .= $result->{message};
+        }
+
+        last if ($result->{code} != 4092);
+    }
+
+    # read stderr
+    my $stderr = '';
+    while (1) {
+        my $result = ssh_channel_read($channel, 4092, 1, 1);
+        if (defined($result->{message})) {
+            $stderr .= $result->{message};
+        }
+        
+        last if ($result->{code} != 4092);
+    }
+    
+    if (ssh_channel_is_eof($channel) != 0) {
+        my $channel_exit_status = SSH_ERROR;
+        for (my $i = 0; $i < 20; $i++) {
+            $channel_exit_status = $self->channel_get_exit_status(channel => 
$channel);
+            last if $channel_exit_status != SSH_ERROR;
+            Time::HiRes::usleep(50000);
+        }
+        $self->{scenario}->{exit_code} = $channel_exit_status;
+        $self->close_channel(channel_id => $options{channel_id});
+    } else {
+        $self->{scenario}->{read} = 1;
+    }
+
+    return ($stdout, $stderr);
+}
+
+sub execute_scenario {
+    my ($self, %options) = @_;
+    my $cols = (defined($options{pty}->{cols}) && int($options{pty}->{cols}) > 
0) ? 
+        $options{pty}->{cols} : 80;
+    my $rows = (defined($options{pty}->{rows}) && int($options{pty}->{rows}) > 
0) ? 
+        $options{pty}->{rows} : 24;
+
+    $self->{scenario} = { exit => SSH_OK, msg_error => '', stdout => '', 
stderr => '', steps => [] };
+    my $channel_id = $self->init_scenario(interactive => 
$options{interactive}, cols => $cols, rows => $rows);
+    if (!defined($channel_id)) {
+        return $self->{scenario};
+    }
+
+    my $count_steps = scalar(@{$options{scenario}});
+    my $step = 0;
+    while ($step < $count_steps) {
+ 
+        if ($options{scenario}->[$step]->{cmd} eq 'waitfor') {
+            $self->{scenario}->{read} = 0;
+            my ($stdout, $stderr) = ('', '');
+            my $timeout = 
(defined($options{scenario}->[$step]->{options}->{Timeout}) && 
int($options{scenario}->[$step]->{options}->{Timeout}) > 0) ? 
+                $options{scenario}->[$step]->{options}->{Timeout} : 60;
+            my $timeout_nodata = 
(defined($options{scenario}->[$step]->{options}->{TimeoutNoData}) && 
int($options{scenario}->[$step]->{options}->{TimeoutNoData}) > 0) ? 
+                $options{scenario}->[$step]->{options}->{TimeoutNoData} : 60;
+
+            while (1) {
+                my $now = Time::HiRes::time();
+                my $ret = 
ssh_channel_select_read([${$self->{channels}->{$channel_id}}], 5);
+                if ($ret->{code} == SSH_OK) {
+                    my ($read_stdout, $read_stderr) = 
$self->execute_scenario_read_channel(channel_id => $channel_id);
+                    $self->{scenario}->{stdout} .= $read_stdout;
+                    $self->{scenario}->{stderr} .= $read_stderr;
+                    $stdout .= $read_stdout;
+                    $stderr .= $read_stderr;
+                }
+                my $now2 = Time::HiRes::time();
+
+                if ($stdout =~ 
/$options{scenario}->[$step]->{options}->{Match}/) {
+                    $step++;
+                    last;
+                }
+
+                # check timeout
+                my $seconds = ($now2 - $now);
+                
+                $timeout -= $seconds;
+                if ($self->{scenario}->{read} == 0) {
+                    $timeout_nodata -= $seconds;
+                }
+                
+                if ($timeout <= 0 || 
+                    $timeout_nodata <= 0) {
+                    $self->close_channel(channel_id => $channel_id);
+
+                    $self->{scenario}->{exit} = SSH_AGAIN;
+                    $self->{scenario}->{msg_error} = 'timeout raiched';
+                    $self->set_err(msg => 'timeout raiched');
+                    return $self->{scenario};
+                }
+            }
+            
+        } elsif ($options{scenario}->[$step]->{cmd} eq 'put') {
+            if ($self->channel_write(channel => ${$self->{channels}->{ 
$channel_id }}, data => $options{scenario}->[$step]->{options}->{String}) == 
SSH_ERROR) {
+                $self->{scenario}->{exit} = SSH_ERROR;
+                $self->set_err(msg => 'cannot write in channel');
+                $self->{scenario}->{msg_error} = 'cannot write in channel';
+                return $self->{scenario};
+            }
+            $step++;
+        } elsif ($options{scenario}->[$step]->{cmd} eq 'close') {
+            $self->close_channel(channel_id => $channel_id);
+            $step++;
+        } else {
+            $self->{scenario}->{exit} = SSH_ERROR;
+            $self->set_err(msg => 'unknown scenario command');
+            $self->{scenario}->{msg_error} = 'unknown scenario command';
+            return $self->{scenario};
+        }
+    }
+
+    return $self->{scenario};
+}
+
 sub open_channel {
     my ($self, %options) = @_;
     
@@ -796,6 +945,18 @@
     return ssh_channel_request_shell($options{channel});
 }
 
+sub channel_request_pty {
+    my ($self, %options) = @_;
+    
+    return ssh_channel_request_pty($options{channel});
+}
+
+sub channel_change_pty_size {
+    my ($self, %options) = @_;
+    
+    return ssh_channel_change_pty_size($options{channel}, $options{cols}, 
$options{rows});
+}
+
 sub channel_close {
     my ($self, %options) = @_;
     
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Libssh-Session-1.1/lib/Libssh/Sftp.pm 
new/Libssh-Session-1.2/lib/Libssh/Sftp.pm
--- old/Libssh-Session-1.1/lib/Libssh/Sftp.pm   2024-06-18 15:44:44.000000000 
+0200
+++ new/Libssh-Session-1.2/lib/Libssh/Sftp.pm   2026-10-07 17:27:34.000000000 
+0200
@@ -7,7 +7,7 @@
 use Libssh::Session;
 use Exporter qw(import);
 
-our $VERSION = '1.1';
+our $VERSION = '1.2';
 
 use constant SSH_OK => 0;
 use constant SSH_ERROR => -1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Libssh-Session-1.1/libssh.xs 
new/Libssh-Session-1.2/libssh.xs
--- old/Libssh-Session-1.1/libssh.xs    2024-05-28 10:26:37.000000000 +0200
+++ new/Libssh-Session-1.2/libssh.xs    2026-10-07 17:27:34.000000000 +0200
@@ -417,6 +417,18 @@
     OUTPUT: RETVAL
 
 int
+ssh_channel_request_pty(ssh_channel channel)
+    CODE:
+        RETVAL = ssh_channel_request_pty(channel);
+    OUTPUT: RETVAL
+
+int
+ssh_channel_change_pty_size(ssh_channel channel, int cols, int rows)
+    CODE:
+        RETVAL = ssh_channel_change_pty_size(channel, cols, rows);
+    OUTPUT: RETVAL
+
+int
 ssh_channel_write(ssh_channel channel, char *data)
     CODE:
         RETVAL = ssh_channel_write(channel, data, strlen(data));

++++++ README.md ++++++

## Build Results

Current state of perl in openSUSE:Factory is

![Factory build 
results](https://br.opensuse.org/status/openSUSE:Factory/perl-Libssh-Session/standard)

The current state of perl in the devel project build (devel:languages:perl)

![Devel project build 
results](https://br.opensuse.org/status/devel:languages:perl/perl-Libssh-Session)



++++++ _scmsync.obsinfo ++++++
mtime: 1791461013
commit: fca3f49edc6546e5072b38822129ee0399b3e9b22d89b25e1d5dc089a8f1d761
url: https://src.opensuse.org/perl/perl-Libssh-Session
revision: fca3f49edc6546e5072b38822129ee0399b3e9b22d89b25e1d5dc089a8f1d761
projectscmsync: https://src.opensuse.org/perl/_ObsPrj

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-10-08 14:03:33.000000000 +0200
@@ -0,0 +1 @@
+.osc

Reply via email to