You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
(1) |
Oct
(1) |
Nov
(26) |
Dec
(7) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(5) |
Feb
(3) |
Mar
(11) |
Apr
(10) |
May
(2) |
Jun
(5) |
Jul
(13) |
Aug
(2) |
Sep
(3) |
Oct
(10) |
Nov
(18) |
Dec
(29) |
2002 |
Jan
(12) |
Feb
(14) |
Mar
(73) |
Apr
(28) |
May
(21) |
Jun
(39) |
Jul
(40) |
Aug
(42) |
Sep
(20) |
Oct
(4) |
Nov
(9) |
Dec
(18) |
2003 |
Jan
(2) |
Feb
(8) |
Mar
(6) |
Apr
(24) |
May
(24) |
Jun
(14) |
Jul
(16) |
Aug
(36) |
Sep
(34) |
Oct
(23) |
Nov
(4) |
Dec
(15) |
2004 |
Jan
(6) |
Feb
(13) |
Mar
(7) |
Apr
(5) |
May
(11) |
Jun
(5) |
Jul
(4) |
Aug
|
Sep
(2) |
Oct
(16) |
Nov
(4) |
Dec
(9) |
2005 |
Jan
(2) |
Feb
(1) |
Mar
(3) |
Apr
(10) |
May
(5) |
Jun
(13) |
Jul
(3) |
Aug
|
Sep
(7) |
Oct
(5) |
Nov
(1) |
Dec
(9) |
2006 |
Jan
|
Feb
(10) |
Mar
(22) |
Apr
(14) |
May
(5) |
Jun
(4) |
Jul
(19) |
Aug
(7) |
Sep
(16) |
Oct
(4) |
Nov
(1) |
Dec
(16) |
2007 |
Jan
(17) |
Feb
|
Mar
(35) |
Apr
(5) |
May
(20) |
Jun
(11) |
Jul
(33) |
Aug
(3) |
Sep
(2) |
Oct
(11) |
Nov
(23) |
Dec
(5) |
2008 |
Jan
(10) |
Feb
(9) |
Mar
|
Apr
(6) |
May
(8) |
Jun
(7) |
Jul
|
Aug
(3) |
Sep
(2) |
Oct
(1) |
Nov
|
Dec
(20) |
2009 |
Jan
(8) |
Feb
(8) |
Mar
(3) |
Apr
(8) |
May
(2) |
Jun
(11) |
Jul
(2) |
Aug
|
Sep
(3) |
Oct
(1) |
Nov
(7) |
Dec
(4) |
2010 |
Jan
(2) |
Feb
(1) |
Mar
(3) |
Apr
|
May
(2) |
Jun
(2) |
Jul
(7) |
Aug
(3) |
Sep
(7) |
Oct
(2) |
Nov
(1) |
Dec
(4) |
2011 |
Jan
(4) |
Feb
(5) |
Mar
|
Apr
(3) |
May
(2) |
Jun
|
Jul
(6) |
Aug
|
Sep
|
Oct
(6) |
Nov
|
Dec
|
2012 |
Jan
|
Feb
(1) |
Mar
|
Apr
(3) |
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
(5) |
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
(7) |
Sep
(2) |
Oct
|
Nov
|
Dec
|
2015 |
Jan
|
Feb
|
Mar
(30) |
Apr
(10) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
(12) |
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
(1) |
2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2024 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
From: Austin S. <te...@of...> - 2008-06-11 07:39:25
|
On Tue, Jun 10, 2008 at 04:55:43PM -0700, Noah wrote: > Hi there, > > I am trying to capture the output of a fairly long configuration file > but it aint working too well. Instead of seeing hundreds of lines I am > finding only about 3-5 lines are captured. is there a better method? > What happens when you set exp_internal? Is expect returning because you matched something you didn't expect to match? Austin > Note how the @showConfiguration variable is getting used. > > > sub grab_config { > open(OUTPUT, ">$output_filename") or die $!;; > > my $target = "${user}\@${ip}"; > my $cmd = "ssh $target"; > > my $exp = new Expect() || die "Cannot spawn ssh command \n"; > > $exp->log_file($logfile); > $exp->raw_pty(0); > $exp->spawn("$cmd"); > > # > # Might get the warning about "Are you sure you want to > # continue connecting (yes/no)?" > # > $exp->expect(2, > ['yes/no\)\? ', > sub { my $fh = shift; $fh->send("yes\n");$stat=0;}]); > $exp->expect($timeout, > ['assword:', > sub { my $fh = shift; $fh->send("$pw\n");$stat=0;}], > [timeout => sub {print STDERR " *** login:Timed out waiting for > (auth) 'assword:'\n"; > $stat=1;}] > ); > > $exp->send("$pw\n"); > > $prompt = "^$user\@[a-z\.0-9\-]+>"; > $patidx = $exp->expect($timeout, [$prompt]); > $exp->send("$blah\n"); > $patidx = $exp->expect($timeout, [$prompt]); > > $exp->send("$blah\n"); > my @showConfiguration = $exp->expect($timeout, [$prompt]); > > $exp->send("quit\n"); > $exp->soft_close(); > print OUTPUT @showConfiguration[3]; > close (OUTPUT); > } > > ------------------------------------------------------------------------- > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for > just about anything Open Source. > http://sourceforge.net/services/buy/index.php > _______________________________________________ > Expectperl-discuss mailing list > Exp...@li... > https://lists.sourceforge.net/lists/listinfo/expectperl-discuss > > > !DSPAM:484f149820279504617225! |
From: Noah <ad...@en...> - 2008-06-10 23:56:05
|
Hi there, I am trying to capture the output of a fairly long configuration file but it aint working too well. Instead of seeing hundreds of lines I am finding only about 3-5 lines are captured. is there a better method? Note how the @showConfiguration variable is getting used. sub grab_config { open(OUTPUT, ">$output_filename") or die $!;; my $target = "${user}\@${ip}"; my $cmd = "ssh $target"; my $exp = new Expect() || die "Cannot spawn ssh command \n"; $exp->log_file($logfile); $exp->raw_pty(0); $exp->spawn("$cmd"); # # Might get the warning about "Are you sure you want to # continue connecting (yes/no)?" # $exp->expect(2, ['yes/no\)\? ', sub { my $fh = shift; $fh->send("yes\n");$stat=0;}]); $exp->expect($timeout, ['assword:', sub { my $fh = shift; $fh->send("$pw\n");$stat=0;}], [timeout => sub {print STDERR " *** login:Timed out waiting for (auth) 'assword:'\n"; $stat=1;}] ); $exp->send("$pw\n"); $prompt = "^$user\@[a-z\.0-9\-]+>"; $patidx = $exp->expect($timeout, [$prompt]); $exp->send("$blah\n"); $patidx = $exp->expect($timeout, [$prompt]); $exp->send("$blah\n"); my @showConfiguration = $exp->expect($timeout, [$prompt]); $exp->send("quit\n"); $exp->soft_close(); print OUTPUT @showConfiguration[3]; close (OUTPUT); } |
From: Noah <ad...@en...> - 2008-06-10 20:55:30
|
perfect - thanks! Sorrell, Al wrote: > > >> -----Original Message----- >> From: exp...@li... > [mailto:expectperl- >> dis...@li...] On Behalf Of Austin Schutz >> Sent: Tuesday, June 10, 2008 2:34 PM >> To: Noah >> Cc: exp...@li... >> Subject: Re: [Expectperl-discuss] conditional prompt? >> >> On Tue, Jun 10, 2008 at 11:25:19AM -0700, Noah wrote: >>> Hi, >>> >>> sometimes the RSA fingerprint is not in ~/.ssh/known_hosts so the > prompt >>> could be different. >>> >>> what would be the best way to handle the differences. there is one > more >>> prompt to handle, defined as $prompt2, when the IP or hostname does > not >>> appear in ~/.ssh/known_hosts. How would you handle the condition > and >>> then move back to accepting $prompt1? >>> >>> >>> >>> $prompt1 = ".*password:"; >>> $prompt2 = "^[^?]+?\s"; >>> my $patidx = $exp->expect($timeout, [$prompt]); >>> >> Expect both prompts at once. Run until $prompt1 is matched. >> You can do this one of two ways: use the simple interface >> and wrap it in a while loop, or you can use the "Tcl like" interface > and >> use exp_continue. See the expect example in the synopsis section of > the >> docs. >> >> Austin >> > Possibly something like this: > > # > # Might get the warning about "Are you sure you want to continue > connecting (yes/no)?" > # > $exp->expect(2, > ['yes/no', > sub { my $fh = shift; $fh->send("yes\n");$stat=0;}]); > $exp->expect($timeout, > ['assword:', > sub { my $fh = shift; $fh->send("$auth_pass\n"); > $stat=0;}], > [timeout => > sub {print STDERR " *** cisco_login:Timed out waiting for > (auth) 'assword:'\n"; > $stat=1;}] > ); > print "After waiting for SSH 'assword:', stat=$stat\n" > if($DEBUG>1); > return($stat,'') if($stat); > > > The contents of this e-mail and any attachments are intended solely for the use of the named addressee(s) and may contain confidential and/or privileged information. Any unauthorized use, copying, disclosure, or distribution of the contents of this e-mail is strictly prohibited by the sender and may be unlawful. If you are not the intended recipient, please notify the sender immediately and delete this e-mail. |
From: Sorrell, A. <Al_...@tr...> - 2008-06-10 18:49:25
|
> -----Original Message----- > From: exp...@li... [mailto:expectperl- > dis...@li...] On Behalf Of Austin Schutz > Sent: Tuesday, June 10, 2008 2:34 PM > To: Noah > Cc: exp...@li... > Subject: Re: [Expectperl-discuss] conditional prompt? > > On Tue, Jun 10, 2008 at 11:25:19AM -0700, Noah wrote: > > Hi, > > > > sometimes the RSA fingerprint is not in ~/.ssh/known_hosts so the prompt > > could be different. > > > > what would be the best way to handle the differences. there is one more > > prompt to handle, defined as $prompt2, when the IP or hostname does not > > appear in ~/.ssh/known_hosts. How would you handle the condition and > > then move back to accepting $prompt1? > > > > > > > > $prompt1 = ".*password:"; > > $prompt2 = "^[^?]+?\s"; > > my $patidx = $exp->expect($timeout, [$prompt]); > > > > Expect both prompts at once. Run until $prompt1 is matched. > You can do this one of two ways: use the simple interface > and wrap it in a while loop, or you can use the "Tcl like" interface and > use exp_continue. See the expect example in the synopsis section of the > docs. > > Austin > Possibly something like this: # # Might get the warning about "Are you sure you want to continue connecting (yes/no)?" # $exp->expect(2, ['yes/no', sub { my $fh = shift; $fh->send("yes\n");$stat=0;}]); $exp->expect($timeout, ['assword:', sub { my $fh = shift; $fh->send("$auth_pass\n"); $stat=0;}], [timeout => sub {print STDERR " *** cisco_login:Timed out waiting for (auth) 'assword:'\n"; $stat=1;}] ); print "After waiting for SSH 'assword:', stat=$stat\n" if($DEBUG>1); return($stat,'') if($stat); The contents of this e-mail and any attachments are intended solely for the use of the named addressee(s) and may contain confidential and/or privileged information. Any unauthorized use, copying, disclosure, or distribution of the contents of this e-mail is strictly prohibited by the sender and may be unlawful. If you are not the intended recipient, please notify the sender immediately and delete this e-mail. |
From: Austin S. <te...@of...> - 2008-06-10 18:34:12
|
On Tue, Jun 10, 2008 at 11:25:19AM -0700, Noah wrote: > Hi, > > sometimes the RSA fingerprint is not in ~/.ssh/known_hosts so the prompt > could be different. > > what would be the best way to handle the differences. there is one more > prompt to handle, defined as $prompt2, when the IP or hostname does not > appear in ~/.ssh/known_hosts. How would you handle the condition and > then move back to accepting $prompt1? > > > > $prompt1 = ".*password:"; > $prompt2 = "^[^?]+?\s"; > my $patidx = $exp->expect($timeout, [$prompt]); > Expect both prompts at once. Run until $prompt1 is matched. You can do this one of two ways: use the simple interface and wrap it in a while loop, or you can use the "Tcl like" interface and use exp_continue. See the expect example in the synopsis section of the docs. Austin |
From: Noah <ad...@en...> - 2008-06-10 18:25:47
|
Hi, sometimes the RSA fingerprint is not in ~/.ssh/known_hosts so the prompt could be different. what would be the best way to handle the differences. there is one more prompt to handle, defined as $prompt2, when the IP or hostname does not appear in ~/.ssh/known_hosts. How would you handle the condition and then move back to accepting $prompt1? $prompt1 = ".*password:"; $prompt2 = "^[^?]+?\s"; my $patidx = $exp->expect($timeout, [$prompt]); Cheers, Noah |
From: Noah <ad...@en...> - 2008-06-10 15:58:18
|
Hi there, I am trying to log into multiple Devices via ssh. the first ssh sessions is handled fine. There is a for loop scrolling through IPs and the SSH session with the second IP in the list never gets open and the text is sent after the timeout. No prompts are ever seen. What am I doing wrong? Cheers, Noah #!/sw/bin/perl # # Unique Names script # Written by Noah Garrett Wallach # use Expect; # # # #--- ENSURE TO HAVE SUFFICIENT COMMAND LINE ARGUMENTS ! ----------------------# # if ( $#ARGV != 1 ) { printf("USAGE: $0 <user> <pw>\n"); exit(-1); } $user = shift; $pw = shift; $timeout = 10; my $infile = "ips.txt"; my $logfile = "it.txt"; &read_datafile; my $count = 0; foreach $host (@host) { &grab_config; $count++; } exit 0; sub grab_config { my $cmd = "ssh ${user}\@${host}"; my $exp = new Expect() || die "Cannot spawn ssh command \n"; $exp->log_file($logfile); $exp->raw_pty(0); $exp->spawn($cmd); $prompt = "$blah"; my $patidx = $exp->expect($timeout, [$prompt]); $exp->send("$pw\n"); $prompt = "$user\@\\w+\>"; $patidx = $exp->expect($timeout, [$prompt]); $exp->send("$blah\n"); $patidx = $exp->expect($timeout, [$prompt]); $exp->send("$blah\n"); $patidx = $exp->expect($timeout, [$prompt]); $exp->send("$blah\n"); $exp->soft_close(); } sub read_datafile { open(DATA,$infile) || die "unable to open $infile $! \n"; @host=<DATA>; close (DATA); } |
From: Austin S. <te...@of...> - 2008-05-23 23:34:49
|
On Fri, May 23, 2008 at 03:34:52AM -0700, Salvador Fandino wrote: > Hi, > > Austin Schutz <te...@of...> wrote: > > > The issue you claim is that data is dropped when more than 512 bytes of > > data are passed to syswrite. I don't see how this can be an expect issue. At > > no point are you sending that much data through a pty. > > Well, yes, the bug was not in Expect, but the solution was to change the way Expect is used (actually the PTY) limiting its usage to the authentication phase. It is described here: http://perlmonks.org/?node_id=688097. > > Maybe it could be added to the Expect FAQ as it seems a useful idiom. > Accessing stdin/out independently of pty seems useful, imo. I agree w/ this as a general faq answer if it works generally. There could be cases where people need to interact with 'more' or 'less', e.g. Austin |
From: Roland G. <rgi...@cp...> - 2008-05-23 14:16:37
|
I added the solution to the Expect pod, now I only need a reason to release the new version. :-) (but given that nobody seems to read the docs anyway before asking for help, I won't give that a high priority...) Thanks, Roland Salvador Fandino wrote: > Hi, > > Austin Schutz <te...@of...> wrote: > >> The issue you claim is that data is dropped when more than 512 bytes of >> data are passed to syswrite. I don't see how this can be an expect issue. At >> no point are you sending that much data through a pty. > > Well, yes, the bug was not in Expect, but the solution was to change the way Expect is used (actually the PTY) limiting its usage to the authentication phase. It is described here: http://perlmonks.org/?node_id=688097. > > Maybe it could be added to the Expect FAQ as it seems a useful idiom. > > > >> If the workaround to the bug in Net-SFTP-Foreign suggested at >> http://rt.cpan.org/Public/Bug/Display.html?id=35888 (again, not an expect bug) >> doesn't work you could use Expect to interact with openssh's sftp program. > > That's not the point, I am the module author ;-) > > Cheers, > > - Salva > > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Expectperl-discuss mailing list > Exp...@li... > https://lists.sourceforge.net/lists/listinfo/expectperl-discuss > |
From: Roland G. <rgi...@cp...> - 2008-05-23 14:13:49
|
Expect can only work with threads if the Expect objects are created in the main perl thread. Even then you might run into troubles. The reason is that Expect has to fork to spawn a process and forking and threads simply don't mix. Hope this helps, Roland kboragouda wrote: > Hi , > I am using Expect and IO::pty modules for ssh/rsh automation . In > multithreaded envirnoment IO::Pty module is not working. It fails during > spawning a process. But i wanted to create process (spawn) within threads. > > Please let me know any alternatives/solution for this. > > thanks > appu > > > > On Fri, May 23, 2008 at 4:04 PM, Salvador Fandino <sfa...@ya... > <mailto:sfa...@ya...>> wrote: > > Hi, > > Austin Schutz <te...@of... <mailto:te...@of...>> wrote: > > > The issue you claim is that data is dropped when more than > 512 bytes of > > data are passed to syswrite. I don't see how this can be an > expect issue. At > > no point are you sending that much data through a pty. > > Well, yes, the bug was not in Expect, but the solution was to change > the way Expect is used (actually the PTY) limiting its usage to the > authentication phase. It is described here: > http://perlmonks.org/?node_id=688097. > > Maybe it could be added to the Expect FAQ as it seems a useful idiom. > > > > > If the workaround to the bug in Net-SFTP-Foreign suggested at > > http://rt.cpan.org/Public/Bug/Display.html?id=35888 (again, not > an expect bug) > > doesn't work you could use Expect to interact with openssh's sftp > program. > > That's not the point, I am the module author ;-) > > Cheers, > > - Salva > > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Expectperl-discuss mailing list > Exp...@li... > <mailto:Exp...@li...> > https://lists.sourceforge.net/lists/listinfo/expectperl-discuss > > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > > ------------------------------------------------------------------------ > > _______________________________________________ > Expectperl-discuss mailing list > Exp...@li... > https://lists.sourceforge.net/lists/listinfo/expectperl-discuss |
From: Matt Z. <mzagrabe@d.umn.edu> - 2008-05-23 13:15:30
|
Note: Don't reply to someone else's previous message to ask a new question - it changes the way mail clients can organize threads. On Fri, 2008-05-23 at 16:18 +0530, kboragouda wrote: > Hi , > I am using Expect and IO::pty modules for ssh/rsh automation . In > multithreaded envirnoment IO::Pty module is not working. It fails > during spawning a process. But i wanted to create process (spawn) > within threads. Expect is thread safe, but IO::Tty is not, perhaps IO::Pty is not either. There has been chatter about this before [1]. [1] http://www.nabble.com/Trouble-with-Expect-working-with-Threads-td11541250.html > Please let me know any alternatives/solution for this. Don't use expect. Use a "native" thread safe perl module. Perhaps Net::Rsh or Net::SSH::Perl. Cheers, -- Matt Zagrabelny - mzagrabe@d.umn.edu - (218) 726 8844 University of Minnesota Duluth Information Technology Systems & Services PGP key 1024D/84E22DA2 2005-11-07 Fingerprint: 78F9 18B3 EF58 56F5 FC85 C5CA 53E7 887F 84E2 2DA2 He is not a fool who gives up what he cannot keep to gain what he cannot lose. -Jim Elliot |
From: kboragouda <app...@gm...> - 2008-05-23 10:48:17
|
Hi , I am using Expect and IO::pty modules for ssh/rsh automation . In multithreaded envirnoment IO::Pty module is not working. It fails during spawning a process. But i wanted to create process (spawn) within threads. Please let me know any alternatives/solution for this. thanks appu On Fri, May 23, 2008 at 4:04 PM, Salvador Fandino <sfa...@ya...> wrote: > Hi, > > Austin Schutz <te...@of...> wrote: > > > The issue you claim is that data is dropped when more than 512 bytes > of > > data are passed to syswrite. I don't see how this can be an expect > issue. At > > no point are you sending that much data through a pty. > > Well, yes, the bug was not in Expect, but the solution was to change the > way Expect is used (actually the PTY) limiting its usage to the > authentication phase. It is described here: > http://perlmonks.org/?node_id=688097. > > Maybe it could be added to the Expect FAQ as it seems a useful idiom. > > > > > If the workaround to the bug in Net-SFTP-Foreign suggested at > > http://rt.cpan.org/Public/Bug/Display.html?id=35888 (again, not an > expect bug) > > doesn't work you could use Expect to interact with openssh's sftp > program. > > That's not the point, I am the module author ;-) > > Cheers, > > - Salva > > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Expectperl-discuss mailing list > Exp...@li... > https://lists.sourceforge.net/lists/listinfo/expectperl-discuss > |
From: Salvador F. <sfa...@ya...> - 2008-05-23 10:34:59
|
Hi, Austin Schutz <te...@of...> wrote: > The issue you claim is that data is dropped when more than 512 bytes of > data are passed to syswrite. I don't see how this can be an expect issue. At > no point are you sending that much data through a pty. Well, yes, the bug was not in Expect, but the solution was to change the way Expect is used (actually the PTY) limiting its usage to the authentication phase. It is described here: http://perlmonks.org/?node_id=688097. Maybe it could be added to the Expect FAQ as it seems a useful idiom. > If the workaround to the bug in Net-SFTP-Foreign suggested at > http://rt.cpan.org/Public/Bug/Display.html?id=35888 (again, not an expect bug) > doesn't work you could use Expect to interact with openssh's sftp program. That's not the point, I am the module author ;-) Cheers, - Salva |
From: Austin S. <te...@of...> - 2008-05-21 18:49:08
|
On Wed, May 21, 2008 at 02:46:23AM -0700, Salvador Fandino wrote: > Hi, > > I would appreciate if somebody could help me with this Expect related question I have posted in Perlmonks: > > http://perlmonks.org/?node_id=687727 > > Cheers, > The issue you claim is that data is dropped when more than 512 bytes of data are passed to syswrite. I don't see how this can be an expect issue. At no point are you sending that much data through a pty. If the workaround to the bug in Net-SFTP-Foreign suggested at http://rt.cpan.org/Public/Bug/Display.html?id=35888 (again, not an expect bug) doesn't work you could use Expect to interact with openssh's sftp program. Austin |
From: Salvador F. <sfa...@ya...> - 2008-05-21 09:46:33
|
Hi, I would appreciate if somebody could help me with this Expect related question I have posted in Perlmonks: http://perlmonks.org/?node_id=687727 Cheers, - Salva |
From: Smith, E. \(IT T. OPS\) <ES...@at...> - 2008-04-22 17:07:50
|
Hi, Firstly thanks Roland and Bruno for helping get some juices flowing. My head hurt from banging it against the wall :-) I never did figure out why this didn't work. I tried io::Handle::printflush() and went as far as to try IO::Handle::syswrite($$) and got the same result so it's not likely perl or expect but perhaps something to do with ssh and AIXs terminal emulations. It's certainly out-of-scope for this project ;) Here's the workaround for the expired passwd on AIX when logging in via ssh (tested on RedHat Linux RHEL4-2.6.9-42/openssh3.9p1, SunOS 5.10/openssh_4.3p2, AIX4.3.3/openssh_3.9p1 and AIX5.3/openssh_4.7p1) Please pardon the kludgieness. It's a nested expect which would not be my first choice but *seems* to work in all the environments I have to deal with. # change_password(expect_object, old_password, new_password); sub change_password { my $exp = shift; my $old_pwd = shift; my $new_pwd = shift; my $rc = 1; my $cmd = "passwd"; $cmd = "passwd -r files" if $OS =~ /SunOS/; $exp->clear_accum(); if(!$EXPIRED) { $exp->send("$cmd\n"); } $exp->expect($ENV{TIMEOUT}, [ qr/.*BAD PASSWORD.*$|Authentication token manipulation error.*$/, sub { my $self = shift; print "ERROR:set_user_password:".__LINE__.":".($self->match())."\n"; }], [ qr/Connection to.*closed/i, sub { print "sucess:".__LINE__.": password changed [$new_pwd]\n" if $DEBUG>0; $rc = 0; } ], [ qr/Permission denied.*$|.*ssword too short.*$/i, sub { print "password change failed[$old_pwd]\n" if $DEBUG>0; } ], [ qr/New password:.*$|New.*password:.*$/i, sub { my $ok = 0; my $self = shift; $self->send($new_pwd,"\n"); # $self->printflush(); my $ptrn = 'password successfully changed|'. '.*updated successfully.*|'. 'Connection .* closed|'. 'New.*password:.*$|'. 'gain:'; $self->expect(2, [ qr/$ptrn/i, sub { $self->set_accum($self->before().$self->match().$self->after()); $ok = 1; }] ); if($ok < 1) { $self->send($new_pwd,"\n"); } exp_continue; }], [ qr/gain:.*$/i, sub { my $ok = 0; my $self = shift; $self->send($new_pwd,"\n"); # $self->printflush(); $self->expect(2, [ qr/$ENV{PROMPT}/, sub { $self->set_accum($self->before().$self->match().$self->after()); $ok = 1; }] ); if($ok < 1) { $self->send($new_pwd,"\n"); } exp_continue; }], [ qr/password:\s?$/i, sub { my $ok = 0; my $self = shift; $self->send($old_pwd,"\n"); # $self->printflush(); $self->expect(2, [ qr/.*password.*/i, sub { $self->set_accum($self->before().$self->match().$self->after()); $ok = 1; }] ); if($ok < 1) { $self->send($old_pwd,"\n"); } exp_continue; }], [ qr/$ENV{PROMPT}/, sub { my $self = shift; if($DEBUG >0) { my $foo = $self->before(); $foo .= $self->match(); print "--> PROMPT FOUND [".$foo."]\n"; } $rc = 0; print "----[ password >$new_pwd< set ]---\n"; } ] ); return $rc; } If you have any further helpful hints please let me know. Thanks! ed ________________________________ From: Bruno Negrao [mailto:bn...@gm...] Sent: Friday, April 18, 2008 11:25 AM To: Smith, Edward (IT TECH OPS) Cc: Roland Giersig; exp...@li... Subject: Re: [Expectperl-discuss] expired passwd in AIX Edward, I suspect this has to do with buffering. Somehow your password string doesn't complete a buffer and it is not transmitted to the passwd executable on the other side. So when you send the password string a second time, the buffer completes and the first string is sent, the second one is ignored. (crazy?) There's a perl variable that controls buffering (i forgot which one), you should disable buffering anywhere you can. (and then tell us how did you do that) Please try this and tell us what happened. Regards, bruno On Fri, Apr 18, 2008 at 11:56 AM, Smith, Edward (IT TECH OPS) <ES...@at...> wrote: Hi Roland, Thanks for the response! I have run with "$new_pwd\n\n" and "\n$new_pwd\n" and both work fine. I tried \r and \r\r and it failed with both. I have spent a lot of time with countless other combinations as well (\r\r and \n\r come to mind). I even went as far as to attempt to use Net::SSH::Expect which appeared to work fine until it encountered the same issue on the expired password. I was thinking it may have been due to my setting $exp->raw_pty(1) after login but I am doing that prior to spawning. Below is the debug with some of the superfluous output removed. $exp->internal(1) is set. I have sent the old password twice, the new password twice and when it asks for the new password again I have sent it once, then timeout. Sending any of the three produces the same results as you can see when the new password is sent the second time. Let me know if you have an idea on this wierdness. Thanks, Ed Script started on Fri 18 Apr 2008 09:40:16 AM EDT Old password:bizbot New password:qwerty New password again:qwerty connecting to host [anpkhsw21] Spawned 'ssh es1724@anpkhsw21' spawn id(3) Pid: 17376 Tty: /dev/pts/4 at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 181 Expect::spawn('Expect=GLOB(0xb405c0)', 'ssh es1724@anpkhsw21') called at ./elpaso.pl line 619 Starting EXPECT pattern matching... at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 561 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb71b60)', 'ARRAY(0xb71b50)', 'ARRAY(0xb53c70)', 'ARRAY(0xb53d50)', 'ARRAY(0xb53dc0)', 'ARRAY(0xb53e30)', 'ARRAY(0xb53f00)', ...) called at ./elpaso.pl line 347 main::exp_login('Expect=GLOB(0xb405c0)', 'bizbot') called at ./elpaso.pl line 629 spawn id(3): list of patterns: #1: -re `(?-xism:\(yes/no\)\?\s*$)' #2: -re `(?-xism:Your password has expired)' #3: -re `(?-xism:[Pp]assword.*?:|[Pp]assphrase.*?:)' #4: -re `(?-xism:ogin:\s*$)' #5: -re `(?-xism:Permission denied)' #6: -re `(?-xism:REMOTE HOST IDEN)' #7: -re `(?-xism:>$|# $|\$ $)' es1724@anpkhsw21's password: spawn id(3): Does `es1724@anpkhsw21\'s password: ' match: pattern #1: -re `(?-xism:\(yes/no\)\?\s*$)'? No. pattern #2: -re `(?-xism:Your password has expired)'? No. pattern #3: -re `(?-xism:[Pp]assword.*?:|[Pp]assphrase.*?:)'? YES!! Before match string: `es1724@anpkhsw21\'s ' Match string: `password:' After match string: ` ' Matchlist: () Calling hook CODE(0xb53bf0)... Sending 'bizbot\n' to spawn id(3) at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 Expect::print('Expect=GLOB(0xb405c0)', 'bizbot\x{a}') called at ./elpaso.pl line 312 main::__ANON__('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 Expect::_multi_expect(20, 'ARRAY(0xb75620)', 'ARRAY(0xb75360)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb71b60)', 'ARRAY(0xb71b50)', 'ARRAY(0xb53c70)', 'ARRAY(0xb53d50)', 'ARRAY(0xb53dc0)', 'ARRAY(0xb53e30)', 'ARRAY(0xb53f00)', ...) called at ./elpaso.pl line 347 main::exp_login('Expect=GLOB(0xb405c0)', 'bizbot') called at ./elpaso.pl line 629 Continuing expect, restarting timeout... spawn id(3): Does ` \n --> output abbreviated<-- \nWARNING: Your password has expired.\nYou must change your password now and login again!\n' match: pattern #1: -re `(?-xism:\(yes/no\)\?\s*$)'? No. pattern #2: -re `(?-xism:Your password has expired)'? YES!! Before match string: ` \n --> abbreviated<-- \n' Match string: `Your password has expired' After match string: `.\nYou must change your password now and login again!\n' Matchlist: () Calling hook CODE(0xb53ba0)... 304: Expired password detected! Starting EXPECT pattern matching... at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 561 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at ./elpaso.pl line 454 main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', 'qwerty') called at ./elpaso.pl line 661 spawn id(3): list of patterns: #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token manipulation error.*$)' #2: -re `(?i-xsm:New password:|New.*password:)' #3: -re `(?i-xsm:gain:)' #4: -re `(?i-xsm:password:\s?$)' #5: -re `(?-xism:>$|# $|\$ $)' #6: -re `(?i-xsm:Connection to.*closed)' #7: -re `(?i-xsm:Permission denied)' es1724's Old password: spawn id(3): Does `Changing password for \"es1724\"\nes1724\'s Old password: ' match: pattern #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token manipulation error.*$)'? No. pattern #2: -re `(?i-xsm:New password:|New.*password:)'? No. pattern #3: -re `(?i-xsm:gain:)'? No. pattern #4: -re `(?i-xsm:password:\s?$)'? YES!! Before match string: `Changing password for \"es1724\"\nes1724\'s Old ' Match string: `password: ' After match string: `' Matchlist: () Calling hook CODE(0xb53cc0)... Sending 'bizbot\n' to spawn id(3) at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 Expect::print('Expect=GLOB(0xb405c0)', 'bizbot\x{a}') called at ./elpaso.pl line 427 main::__ANON__('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at ./elpaso.pl line 454 main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', 'qwerty') called at ./elpaso.pl line 661 Sending 'bizbot\n' to spawn id(3) at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 Expect::print('Expect=GLOB(0xb405c0)', 'bizbot\x{a}') called at ./elpaso.pl line 428 main::__ANON__('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at ./elpaso.pl line 454 main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', 'qwerty') called at ./elpaso.pl line 661 Continuing expect, restarting timeout... sword: spawn id(3): Does `\nes1724\'s New password: ' match: pattern #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token manipulation error.*$)'? No. pattern #2: -re `(?i-xsm:New password:|New.*password:)'? YES!! Before match string: `\nes1724\'s ' Match string: `New password:' After match string: ` ' Matchlist: () Calling hook CODE(0xb71b90)... Sending 'qwerty\n' to spawn id(3) at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 Expect::print('Expect=GLOB(0xb405c0)', 'qwerty', '\x{a}') called at ./elpaso.pl line 415 main::__ANON__('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at ./elpaso.pl line 454 main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', 'qwerty') called at ./elpaso.pl line 661 Sending 'qwerty\n' to spawn id(3) at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 Expect::print('Expect=GLOB(0xb405c0)', 'qwerty', '\x{a}') called at ./elpaso.pl line 416 main::__ANON__('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at ./elpaso.pl line 454 main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', 'qwerty') called at ./elpaso.pl line 661 Continuing expect, restarting timeout... ssword again: spawn id(3): Does ` \nEnter the new password again:' match: pattern #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token manipulation error.*$)'? No. pattern #2: -re `(?i-xsm:New password:|New.*password:)'? No. pattern #3: -re `(?i-xsm:gain:)'? YES!! Before match string: ` \nEnter the new password a' Match string: `gain:' After match string: `' Matchlist: () Calling hook CODE(0xb71b20)... Sending 'qwerty\n' to spawn id(3) at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 Expect::print('Expect=GLOB(0xb405c0)', 'qwerty', '\x{a}') called at ./elpaso.pl line 422 main::__ANON__('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at ./elpaso.pl line 454 main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', 'qwerty') called at ./elpaso.pl line 661 Continuing expect, restarting timeout... spawn id(3): Does `' match: pattern #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token manipulation error.*$)'? No. pattern #2: -re `(?i-xsm:New password:|New.*password:)'? No. pattern #3: -re `(?i-xsm:gain:)'? No. pattern #4: -re `(?i-xsm:password:\s?$)'? No. pattern #5: -re `(?-xism:>$|# $|\$ $)'? No. pattern #6: -re `(?i-xsm:Connection to.*closed)'? No. pattern #7: -re `(?i-xsm:Permission denied)'? No. Closing spawn id(3). at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1431 Expect::hard_close('Expect=GLOB(0xb405c0)') called at ./elpaso.pl line 670 spawn id(3) closed. Pid 17376 of spawn id(3) terminated, Status: 0x01 Closing spawn id(3). at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1431 Expect::hard_close('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1621 Expect::DESTROY('Expect=GLOB(0xb405c0)') called at ./elpaso.pl line 670 eval {...} called at ./elpaso.pl line 670 password change for [anpkhsw21] failed. old pwd [bizbot] new pwd [qwerty] Script done on Fri 18 Apr 2008 09:43:30 AM EDT [es1724@wxgcpw200 elpaso]$ -----Original Message----- From: Roland Giersig [mailto:rgi...@cp...] Sent: Friday, April 18, 2008 6:54 AM To: Smith, Edward (IT TECH OPS) Cc: exp...@li... Subject: Re: [Expectperl-discuss] expired passwd in AIX Hmm, very strange. Have you tried other things? Sending double linefeeds "$new_pwd\n\n" or "\n$new_pwd\n"? Using "\r" instead of "\n"? Yes, please send debug output for the case with password expired and sending only one $new_pwd with $Expect::Internal = 1; Regards, Roland ------------------------------------------------------------------------ - This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/j avaone _______________________________________________ Expectperl-discuss mailing list Exp...@li... https://lists.sourceforge.net/lists/listinfo/expectperl-discuss |
From: Bruno N. <bn...@gm...> - 2008-04-18 15:25:48
|
Edward, I suspect this has to do with buffering. Somehow your password string doesn't complete a buffer and it is not transmitted to the passwd executable on the other side. So when you send the password string a second time, the buffer completes and the first string is sent, the second one is ignored. (crazy?) There's a perl variable that controls buffering (i forgot which one), you should disable buffering anywhere you can. (and then tell us how did you do that) Please try this and tell us what happened. Regards, bruno On Fri, Apr 18, 2008 at 11:56 AM, Smith, Edward (IT TECH OPS) < ES...@at...> wrote: > Hi Roland, > Thanks for the response! I have run with "$new_pwd\n\n" and > "\n$new_pwd\n" and both work fine. I tried \r and \r\r and it failed > with both. I have spent a lot of time with countless other combinations > as well (\r\r and \n\r come to mind). I even went as far as to attempt > to use Net::SSH::Expect which appeared to work fine until it encountered > the same issue on the expired password. I was thinking it may have been > due to my setting $exp->raw_pty(1) after login but I am doing that prior > to spawning. > > Below is the debug with some of the superfluous output removed. > $exp->internal(1) is set. > I have sent the old password twice, the new password twice and when it > asks for the new password again I have sent it once, then timeout. > Sending any of the three produces the same results as you can see when > the new password is sent the second time. > Let me know if you have an idea on this wierdness. > > Thanks, > Ed > > Script started on Fri 18 Apr 2008 09:40:16 AM EDT > Old password:bizbot > New password:qwerty > New password again:qwerty > connecting to host [anpkhsw21] > Spawned 'ssh es1724@anpkhsw21' > spawn id(3) > Pid: 17376 > Tty: /dev/pts/4 > at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 181 > Expect::spawn('Expect=GLOB(0xb405c0)', 'ssh es1724@anpkhsw21') > called at ./elpaso.pl line 619 > Starting EXPECT pattern matching... > at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 561 > Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb71b60)', > 'ARRAY(0xb71b50)', 'ARRAY(0xb53c70)', 'ARRAY(0xb53d50)', > 'ARRAY(0xb53dc0)', 'ARRAY(0xb53e30)', 'ARRAY(0xb53f00)', ...) called at > ./elpaso.pl line 347 > main::exp_login('Expect=GLOB(0xb405c0)', 'bizbot') called at > ./elpaso.pl line 629 > spawn id(3): list of patterns: > #1: -re `(?-xism:\(yes/no\)\?\s*$)' > #2: -re `(?-xism:Your password has expired)' > #3: -re `(?-xism:[Pp]assword.*?:|[Pp]assphrase.*?:)' > #4: -re `(?-xism:ogin:\s*$)' > #5: -re `(?-xism:Permission denied)' > #6: -re `(?-xism:REMOTE HOST IDEN)' > #7: -re `(?-xism:>$|# $|\$ $)' > > > es1724@anpkhsw21's password: > spawn id(3): Does `es1724@anpkhsw21\'s password: ' > match: > pattern #1: -re `(?-xism:\(yes/no\)\?\s*$)'? No. > pattern #2: -re `(?-xism:Your password has expired)'? No. > pattern #3: -re `(?-xism:[Pp]assword.*?:|[Pp]assphrase.*?:)'? YES!! > Before match string: `es1724@anpkhsw21\'s ' > Match string: `password:' > After match string: ` ' > Matchlist: () > Calling hook CODE(0xb53bf0)... > Sending 'bizbot\n' to spawn id(3) > at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 > Expect::print('Expect=GLOB(0xb405c0)', 'bizbot\x{a}') called at > ./elpaso.pl line 312 > main::__ANON__('Expect=GLOB(0xb405c0)') called at > /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 > Expect::_multi_expect(20, 'ARRAY(0xb75620)', 'ARRAY(0xb75360)') > called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 > Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb71b60)', > 'ARRAY(0xb71b50)', 'ARRAY(0xb53c70)', 'ARRAY(0xb53d50)', > 'ARRAY(0xb53dc0)', 'ARRAY(0xb53e30)', 'ARRAY(0xb53f00)', ...) called at > ./elpaso.pl line 347 > main::exp_login('Expect=GLOB(0xb405c0)', 'bizbot') called at > ./elpaso.pl line 629 > Continuing expect, restarting timeout... > > spawn id(3): Does ` \n --> output abbreviated<-- \nWARNING: Your > password has expired.\nYou must change your password now and login > again!\n' > match: > pattern #1: -re `(?-xism:\(yes/no\)\?\s*$)'? No. > pattern #2: -re `(?-xism:Your password has expired)'? YES!! > Before match string: ` \n --> abbreviated<-- \n' > Match string: `Your password has expired' > After match string: `.\nYou must change your password now and login > again!\n' > Matchlist: () > Calling hook CODE(0xb53ba0)... > 304: Expired password detected! > Starting EXPECT pattern matching... > at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 561 > Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', > 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', > 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at > ./elpaso.pl line 454 > main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', > 'qwerty') called at ./elpaso.pl line 661 > spawn id(3): list of patterns: > #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token manipulation > error.*$)' > #2: -re `(?i-xsm:New password:|New.*password:)' > #3: -re `(?i-xsm:gain:)' > #4: -re `(?i-xsm:password:\s?$)' > #5: -re `(?-xism:>$|# $|\$ $)' > #6: -re `(?i-xsm:Connection to.*closed)' > #7: -re `(?i-xsm:Permission denied)' > > > es1724's Old password: > spawn id(3): Does `Changing password for \"es1724\"\nes1724\'s Old > password: ' > match: > pattern #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token > manipulation error.*$)'? No. > pattern #2: -re `(?i-xsm:New password:|New.*password:)'? No. > pattern #3: -re `(?i-xsm:gain:)'? No. > pattern #4: -re `(?i-xsm:password:\s?$)'? YES!! > Before match string: `Changing password for \"es1724\"\nes1724\'s > Old ' > Match string: `password: ' > After match string: `' > Matchlist: () > Calling hook CODE(0xb53cc0)... > Sending 'bizbot\n' to spawn id(3) > at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 > Expect::print('Expect=GLOB(0xb405c0)', 'bizbot\x{a}') called at > ./elpaso.pl line 427 > main::__ANON__('Expect=GLOB(0xb405c0)') called at > /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 > Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at > /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 > Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', > 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', > 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at > ./elpaso.pl line 454 > main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', > 'qwerty') called at ./elpaso.pl line 661 > Sending 'bizbot\n' to spawn id(3) > at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 > Expect::print('Expect=GLOB(0xb405c0)', 'bizbot\x{a}') called at > ./elpaso.pl line 428 > main::__ANON__('Expect=GLOB(0xb405c0)') called at > /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 > Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at > /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 > Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', > 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', > 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at > ./elpaso.pl line 454 > main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', > 'qwerty') called at ./elpaso.pl line 661 > Continuing expect, restarting timeout... > > sword: > spawn id(3): Does `\nes1724\'s New password: ' > match: > pattern #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token > manipulation error.*$)'? No. > pattern #2: -re `(?i-xsm:New password:|New.*password:)'? YES!! > Before match string: `\nes1724\'s ' > Match string: `New password:' > After match string: ` ' > Matchlist: () > Calling hook CODE(0xb71b90)... > Sending 'qwerty\n' to spawn id(3) > at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 > Expect::print('Expect=GLOB(0xb405c0)', 'qwerty', '\x{a}') called > at ./elpaso.pl line 415 > main::__ANON__('Expect=GLOB(0xb405c0)') called at > /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 > Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at > /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 > Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', > 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', > 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at > ./elpaso.pl line 454 > main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', > 'qwerty') called at ./elpaso.pl line 661 > Sending 'qwerty\n' to spawn id(3) > at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 > Expect::print('Expect=GLOB(0xb405c0)', 'qwerty', '\x{a}') called > at ./elpaso.pl line 416 > main::__ANON__('Expect=GLOB(0xb405c0)') called at > /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 > Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at > /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 > Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', > 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', > 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at > ./elpaso.pl line 454 > main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', > 'qwerty') called at ./elpaso.pl line 661 > Continuing expect, restarting timeout... > > ssword again: > spawn id(3): Does ` \nEnter the new password again:' > match: > pattern #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token > manipulation error.*$)'? No. > pattern #2: -re `(?i-xsm:New password:|New.*password:)'? No. > pattern #3: -re `(?i-xsm:gain:)'? YES!! > Before match string: ` \nEnter the new password a' > Match string: `gain:' > After match string: `' > Matchlist: () > Calling hook CODE(0xb71b20)... > Sending 'qwerty\n' to spawn id(3) > at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 > Expect::print('Expect=GLOB(0xb405c0)', 'qwerty', '\x{a}') called > at ./elpaso.pl line 422 > main::__ANON__('Expect=GLOB(0xb405c0)') called at > /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 > Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at > /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 > Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', > 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', > 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at > ./elpaso.pl line 454 > main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', > 'qwerty') called at ./elpaso.pl line 661 > Continuing expect, restarting timeout... > > spawn id(3): Does `' > match: > pattern #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token > manipulation error.*$)'? No. > pattern #2: -re `(?i-xsm:New password:|New.*password:)'? No. > pattern #3: -re `(?i-xsm:gain:)'? No. > pattern #4: -re `(?i-xsm:password:\s?$)'? No. > pattern #5: -re `(?-xism:>$|# $|\$ $)'? No. > pattern #6: -re `(?i-xsm:Connection to.*closed)'? No. > pattern #7: -re `(?i-xsm:Permission denied)'? No. > > Closing spawn id(3). > at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1431 > Expect::hard_close('Expect=GLOB(0xb405c0)') called at > ./elpaso.pl line 670 > spawn id(3) closed. > Pid 17376 of spawn id(3) terminated, Status: 0x01 > Closing spawn id(3). > at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1431 > Expect::hard_close('Expect=GLOB(0xb405c0)') called at > /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1621 > Expect::DESTROY('Expect=GLOB(0xb405c0)') called at ./elpaso.pl > line 670 > eval {...} called at ./elpaso.pl line 670 > password change for [anpkhsw21] failed. old pwd [bizbot] new pwd > [qwerty] > > Script done on Fri 18 Apr 2008 09:43:30 AM EDT > [es1724@wxgcpw200 elpaso]$ > > -----Original Message----- > From: Roland Giersig [mailto:rgi...@cp...] > Sent: Friday, April 18, 2008 6:54 AM > To: Smith, Edward (IT TECH OPS) > Cc: exp...@li... > Subject: Re: [Expectperl-discuss] expired passwd in AIX > > Hmm, very strange. > > Have you tried other things? Sending double linefeeds "$new_pwd\n\n" or > "\n$new_pwd\n"? Using "\r" instead of "\n"? > > Yes, please send debug output for the case with password expired and > sending only one $new_pwd with $Expect::Internal = 1; > > Regards, Roland > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by the 2008 JavaOne(SM) Conference > Don't miss this year's exciting event. There's still time to save $100. > Use priority code J8TL2D2. > > http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone > _______________________________________________ > Expectperl-discuss mailing list > Exp...@li... > https://lists.sourceforge.net/lists/listinfo/expectperl-discuss > |
From: Smith, E. \(IT T. OPS\) <ES...@at...> - 2008-04-18 14:56:24
|
Hi Roland, Thanks for the response! I have run with "$new_pwd\n\n" and "\n$new_pwd\n" and both work fine. I tried \r and \r\r and it failed with both. I have spent a lot of time with countless other combinations as well (\r\r and \n\r come to mind). I even went as far as to attempt to use Net::SSH::Expect which appeared to work fine until it encountered the same issue on the expired password. I was thinking it may have been due to my setting $exp->raw_pty(1) after login but I am doing that prior to spawning. Below is the debug with some of the superfluous output removed. $exp->internal(1) is set. I have sent the old password twice, the new password twice and when it asks for the new password again I have sent it once, then timeout. Sending any of the three produces the same results as you can see when the new password is sent the second time. Let me know if you have an idea on this wierdness. Thanks, Ed Script started on Fri 18 Apr 2008 09:40:16 AM EDT Old password:bizbot New password:qwerty New password again:qwerty connecting to host [anpkhsw21] Spawned 'ssh es1724@anpkhsw21' spawn id(3) Pid: 17376 Tty: /dev/pts/4 at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 181 Expect::spawn('Expect=GLOB(0xb405c0)', 'ssh es1724@anpkhsw21') called at ./elpaso.pl line 619 Starting EXPECT pattern matching... at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 561 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb71b60)', 'ARRAY(0xb71b50)', 'ARRAY(0xb53c70)', 'ARRAY(0xb53d50)', 'ARRAY(0xb53dc0)', 'ARRAY(0xb53e30)', 'ARRAY(0xb53f00)', ...) called at ./elpaso.pl line 347 main::exp_login('Expect=GLOB(0xb405c0)', 'bizbot') called at ./elpaso.pl line 629 spawn id(3): list of patterns: #1: -re `(?-xism:\(yes/no\)\?\s*$)' #2: -re `(?-xism:Your password has expired)' #3: -re `(?-xism:[Pp]assword.*?:|[Pp]assphrase.*?:)' #4: -re `(?-xism:ogin:\s*$)' #5: -re `(?-xism:Permission denied)' #6: -re `(?-xism:REMOTE HOST IDEN)' #7: -re `(?-xism:>$|# $|\$ $)' es1724@anpkhsw21's password: spawn id(3): Does `es1724@anpkhsw21\'s password: ' match: pattern #1: -re `(?-xism:\(yes/no\)\?\s*$)'? No. pattern #2: -re `(?-xism:Your password has expired)'? No. pattern #3: -re `(?-xism:[Pp]assword.*?:|[Pp]assphrase.*?:)'? YES!! Before match string: `es1724@anpkhsw21\'s ' Match string: `password:' After match string: ` ' Matchlist: () Calling hook CODE(0xb53bf0)... Sending 'bizbot\n' to spawn id(3) at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 Expect::print('Expect=GLOB(0xb405c0)', 'bizbot\x{a}') called at ./elpaso.pl line 312 main::__ANON__('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 Expect::_multi_expect(20, 'ARRAY(0xb75620)', 'ARRAY(0xb75360)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb71b60)', 'ARRAY(0xb71b50)', 'ARRAY(0xb53c70)', 'ARRAY(0xb53d50)', 'ARRAY(0xb53dc0)', 'ARRAY(0xb53e30)', 'ARRAY(0xb53f00)', ...) called at ./elpaso.pl line 347 main::exp_login('Expect=GLOB(0xb405c0)', 'bizbot') called at ./elpaso.pl line 629 Continuing expect, restarting timeout... spawn id(3): Does ` \n --> output abbreviated<-- \nWARNING: Your password has expired.\nYou must change your password now and login again!\n' match: pattern #1: -re `(?-xism:\(yes/no\)\?\s*$)'? No. pattern #2: -re `(?-xism:Your password has expired)'? YES!! Before match string: ` \n --> abbreviated<-- \n' Match string: `Your password has expired' After match string: `.\nYou must change your password now and login again!\n' Matchlist: () Calling hook CODE(0xb53ba0)... 304: Expired password detected! Starting EXPECT pattern matching... at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 561 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at ./elpaso.pl line 454 main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', 'qwerty') called at ./elpaso.pl line 661 spawn id(3): list of patterns: #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token manipulation error.*$)' #2: -re `(?i-xsm:New password:|New.*password:)' #3: -re `(?i-xsm:gain:)' #4: -re `(?i-xsm:password:\s?$)' #5: -re `(?-xism:>$|# $|\$ $)' #6: -re `(?i-xsm:Connection to.*closed)' #7: -re `(?i-xsm:Permission denied)' es1724's Old password: spawn id(3): Does `Changing password for \"es1724\"\nes1724\'s Old password: ' match: pattern #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token manipulation error.*$)'? No. pattern #2: -re `(?i-xsm:New password:|New.*password:)'? No. pattern #3: -re `(?i-xsm:gain:)'? No. pattern #4: -re `(?i-xsm:password:\s?$)'? YES!! Before match string: `Changing password for \"es1724\"\nes1724\'s Old ' Match string: `password: ' After match string: `' Matchlist: () Calling hook CODE(0xb53cc0)... Sending 'bizbot\n' to spawn id(3) at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 Expect::print('Expect=GLOB(0xb405c0)', 'bizbot\x{a}') called at ./elpaso.pl line 427 main::__ANON__('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at ./elpaso.pl line 454 main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', 'qwerty') called at ./elpaso.pl line 661 Sending 'bizbot\n' to spawn id(3) at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 Expect::print('Expect=GLOB(0xb405c0)', 'bizbot\x{a}') called at ./elpaso.pl line 428 main::__ANON__('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at ./elpaso.pl line 454 main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', 'qwerty') called at ./elpaso.pl line 661 Continuing expect, restarting timeout... sword: spawn id(3): Does `\nes1724\'s New password: ' match: pattern #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token manipulation error.*$)'? No. pattern #2: -re `(?i-xsm:New password:|New.*password:)'? YES!! Before match string: `\nes1724\'s ' Match string: `New password:' After match string: ` ' Matchlist: () Calling hook CODE(0xb71b90)... Sending 'qwerty\n' to spawn id(3) at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 Expect::print('Expect=GLOB(0xb405c0)', 'qwerty', '\x{a}') called at ./elpaso.pl line 415 main::__ANON__('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at ./elpaso.pl line 454 main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', 'qwerty') called at ./elpaso.pl line 661 Sending 'qwerty\n' to spawn id(3) at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 Expect::print('Expect=GLOB(0xb405c0)', 'qwerty', '\x{a}') called at ./elpaso.pl line 416 main::__ANON__('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at ./elpaso.pl line 454 main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', 'qwerty') called at ./elpaso.pl line 661 Continuing expect, restarting timeout... ssword again: spawn id(3): Does ` \nEnter the new password again:' match: pattern #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token manipulation error.*$)'? No. pattern #2: -re `(?i-xsm:New password:|New.*password:)'? No. pattern #3: -re `(?i-xsm:gain:)'? YES!! Before match string: ` \nEnter the new password a' Match string: `gain:' After match string: `' Matchlist: () Calling hook CODE(0xb71b20)... Sending 'qwerty\n' to spawn id(3) at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1264 Expect::print('Expect=GLOB(0xb405c0)', 'qwerty', '\x{a}') called at ./elpaso.pl line 422 main::__ANON__('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 760 Expect::_multi_expect(20, 'undef', 'ARRAY(0xb75450)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 565 Expect::expect('Expect=GLOB(0xb405c0)', 20, 'ARRAY(0xb51630)', 'ARRAY(0xb51600)', 'ARRAY(0xb53c60)', 'ARRAY(0xb53d80)', 'ARRAY(0xb53f00)', 'ARRAY(0xb75350)', 'ARRAY(0xb75400)', ...) called at ./elpaso.pl line 454 main::change_password('Expect=GLOB(0xb405c0)', 'bizbot', 'qwerty') called at ./elpaso.pl line 661 Continuing expect, restarting timeout... spawn id(3): Does `' match: pattern #1: -re `(?-xism:.*BAD PASSWORD.*$|Authentication token manipulation error.*$)'? No. pattern #2: -re `(?i-xsm:New password:|New.*password:)'? No. pattern #3: -re `(?i-xsm:gain:)'? No. pattern #4: -re `(?i-xsm:password:\s?$)'? No. pattern #5: -re `(?-xism:>$|# $|\$ $)'? No. pattern #6: -re `(?i-xsm:Connection to.*closed)'? No. pattern #7: -re `(?i-xsm:Permission denied)'? No. Closing spawn id(3). at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1431 Expect::hard_close('Expect=GLOB(0xb405c0)') called at ./elpaso.pl line 670 spawn id(3) closed. Pid 17376 of spawn id(3) terminated, Status: 0x01 Closing spawn id(3). at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1431 Expect::hard_close('Expect=GLOB(0xb405c0)') called at /usr/lib/perl5/site_perl/5.8.5/Expect.pm line 1621 Expect::DESTROY('Expect=GLOB(0xb405c0)') called at ./elpaso.pl line 670 eval {...} called at ./elpaso.pl line 670 password change for [anpkhsw21] failed. old pwd [bizbot] new pwd [qwerty] Script done on Fri 18 Apr 2008 09:43:30 AM EDT [es1724@wxgcpw200 elpaso]$ -----Original Message----- From: Roland Giersig [mailto:rgi...@cp...] Sent: Friday, April 18, 2008 6:54 AM To: Smith, Edward (IT TECH OPS) Cc: exp...@li... Subject: Re: [Expectperl-discuss] expired passwd in AIX Hmm, very strange. Have you tried other things? Sending double linefeeds "$new_pwd\n\n" or "\n$new_pwd\n"? Using "\r" instead of "\n"? Yes, please send debug output for the case with password expired and sending only one $new_pwd with $Expect::Internal = 1; Regards, Roland |
From: Ng, M. <CTR> <Mit...@as...> - 2008-04-18 13:12:27
|
To All, I've never used perl and expect. I would like to know if anyone has a script template to build off on developing a test script for validation of passwords on an array of systems: solaris, cisco router/switches. Does anyone have any examples? Any help is much appreciated. |
From: Roland G. <rgi...@cp...> - 2008-04-18 10:54:16
|
Hmm, very strange. Have you tried other things? Sending double linefeeds "$new_pwd\n\n" or "\n$new_pwd\n"? Using "\r" instead of "\n"? Yes, please send debug output for the case with password expired and sending only one $new_pwd with $Expect::Internal = 1; Regards, Roland Smith, Edward (IT TECH OPS) wrote: > Hi, > > I am hoping you can shed some light on my issue. > > > > I am writing a script to manage passwords in a large environment and > have come across a strange > > situation. The code I have works fine for Linux, AIX and Sun if one is > simply changing a password. > > > > The issue occurs when one is forced to change a password – specifically > in AIX if a user’s password > > has been changed by root and the ADMCHG flag is set in /etc/security/passwd. > > When this occurs I have to send each password twice. If I am just > setting the password normally I only have to send it once. > > > > Below is an excerpt for the script. I have run this with debug up and > all the correct events seem to occur. > > > > Let me know if you want me to post the debug info. > > > > The $EXPIRED is a global set on login when the expired password is > detected. > > This code runs fine but it’s disconcerting that I have to send each > password twice when it’s expired. > > > > Any insight would be most appreciated. > > > > Thanks, > > Ed > > > > code: > > sub change_password > > { > > my $exp = shift; > > my $old_pwd = shift; > > my $new_pwd = shift; > > my $rc = 1; > > my $cmd = "passwd"; > > $cmd = "passwd -r files" if $OS =~ /SunOS/; > > > > if(!$EXPIRED) > > { > > $exp->send("$cmd\n"); > > } > > $exp->expect($ENV{TIMEOUT}, > > [ qr/.*BAD PASSWORD.*$|Authentication token manipulation > error.*$/, sub { > > my $self = shift; > > print > "ERROR:set_user_password:".__LINE__.":".($self->match())."\n"; > > }], > > [ qr/New password:|New.*password:/i, sub { > > my $self = shift; > > $self->send($new_pwd,"\n") if $EXPIRED; > > $self->send($new_pwd,"\n"); > > exp_continue; > > }], > > [ qr/gain:/i, sub { > > my $self = shift; > > $self->send($new_pwd,"\n") if $EXPIRED; > > $self->send($new_pwd,"\n"); > > exp_continue; > > }], > > [ qr/password:\s?$/i, sub { > > my $self = shift; > > $self->send("$old_pwd\n") if $EXPIRED; > > $self->send("$old_pwd\n"); > > exp_continue; > > }], > > [ qr/$ENV{PROMPT}/, > > sub { > > my $self = shift; > > if($DEBUG >0) > > { > > my $foo = $self->before(); > > $foo .= $self->match(); > > print "--> PROMPT FOUND [".$foo."]\n"; > > } > > $rc = 0; > > print "----[ password >$new_pwd< set ]---\n"; > > } > > ], > > [ qr/Connection to.*closed/i, > > sub { > > print "sucess:".__LINE__.": expired pw reset\n" if > $DEBUG>0; > > $rc = 0; > > } > > ], > > [ qr/Permission denied/i, > > sub { > > print "password change failed[$old_pwd]\n" if $DEBUG>0; > > } > > ] > > ); > > return $rc; > > } > > > > ____________________________________________________________________________ > > Real Time, adj. > > Here and now as opposed to fake time which only occurs there and then. > > > > > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by the 2008 JavaOne(SM) Conference > Don't miss this year's exciting event. There's still time to save $100. > Use priority code J8TL2D2. > http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone > > > ------------------------------------------------------------------------ > > _______________________________________________ > Expectperl-discuss mailing list > Exp...@li... > https://lists.sourceforge.net/lists/listinfo/expectperl-discuss |
From: Smith, E. \(IT T. OPS\) <ES...@at...> - 2008-04-17 15:54:03
|
Hi, I am hoping you can shed some light on my issue. I am writing a script to manage passwords in a large environment and have come across a strange situation. The code I have works fine for Linux, AIX and Sun if one is simply changing a password. The issue occurs when one is forced to change a password - specifically in AIX if a user's password has been changed by root and the ADMCHG flag is set in /etc/security/passwd. When this occurs I have to send each password twice. If I am just setting the password normally I only have to send it once. Below is an excerpt for the script. I have run this with debug up and all the correct events seem to occur. Let me know if you want me to post the debug info. The $EXPIRED is a global set on login when the expired password is detected. This code runs fine but it's disconcerting that I have to send each password twice when it's expired. Any insight would be most appreciated. Thanks, Ed code: sub change_password { my $exp = shift; my $old_pwd = shift; my $new_pwd = shift; my $rc = 1; my $cmd = "passwd"; $cmd = "passwd -r files" if $OS =~ /SunOS/; if(!$EXPIRED) { $exp->send("$cmd\n"); } $exp->expect($ENV{TIMEOUT}, [ qr/.*BAD PASSWORD.*$|Authentication token manipulation error.*$/, sub { my $self = shift; print "ERROR:set_user_password:".__LINE__.":".($self->match())."\n"; }], [ qr/New password:|New.*password:/i, sub { my $self = shift; $self->send($new_pwd,"\n") if $EXPIRED; $self->send($new_pwd,"\n"); exp_continue; }], [ qr/gain:/i, sub { my $self = shift; $self->send($new_pwd,"\n") if $EXPIRED; $self->send($new_pwd,"\n"); exp_continue; }], [ qr/password:\s?$/i, sub { my $self = shift; $self->send("$old_pwd\n") if $EXPIRED; $self->send("$old_pwd\n"); exp_continue; }], [ qr/$ENV{PROMPT}/, sub { my $self = shift; if($DEBUG >0) { my $foo = $self->before(); $foo .= $self->match(); print "--> PROMPT FOUND [".$foo."]\n"; } $rc = 0; print "----[ password >$new_pwd< set ]---\n"; } ], [ qr/Connection to.*closed/i, sub { print "sucess:".__LINE__.": expired pw reset\n" if $DEBUG>0; $rc = 0; } ], [ qr/Permission denied/i, sub { print "password change failed[$old_pwd]\n" if $DEBUG>0; } ] ); return $rc; } ________________________________________________________________________ ____ Real Time, adj. Here and now as opposed to fake time which only occurs there and then. |
From: Roland G. <rgi...@cp...> - 2008-02-07 11:38:39
|
>> But come to think of, I have a nifty work-around! Use "ssh -t localhost >> cmd" to spawn the command with a terminal as stdin/out and interact with >> that via open2() or open3(). How does that sound? > > I'll try that but it sounds too simple, it can't work ;-P Yes it will work. :-P And probably save you a lot of coding... > unless( ioctl( \*$fd, &TIOCGPTN, $pty ) ) { > unless( ioctl( \*$fd, &DEF_TIOCGPTN, $pty ) ) { > ioctl( \*$fd, &TIOCGPTN|0x00040000, $pty ); > > For my purpose I would drop the GLOB ref. But how do I get the defines from > unistd.h into variables my perl script. Then I could replace the function refs. Easy. Just look up the values for TIOCGPTN etc. in the .h files and put them hard-coded into you program, eg ioctl($fd, 0x47110815, $pty); But I don't recommend that, use ssh instead, because that's more reliable and portable... Hope this helps, Roland |
From: Carlyle S. <car...@db...> - 2008-02-06 16:46:33
|
I answered all your comments including the mention of ptsname(). Roland Giersig <rgi...@cp...> wrote on 06.02.2008 16:56:30: > Carlyle Sutphen wrote: > > Thank you for picking this up. > > > > No, I can't install IO::Tty. I would have to justify rolling out > non-standard packages on many > > hundreds of servers. > > Comparing "rolling out a self-written custom script that probably > doesn't has an automatic testsuite" to "installing a proven-in-use > module" I fail to see the problem... :-) (don't flame me, I know, > company policies... *sigh*) Yes, we just don't fight global engineering any more :( The testing is not automized, true, but the scripts we roll out generally never get developed any further. The are written to do a simple task and last forever or until an OS upgrade breaks them. > > > But if I can't get this to fly, I may look at PAR. > > What I meant was installing the module in a private lib-dir. And yes, > then you can package this up with PAR. I understood that. Sounds good. I will certainly look into that at least for future use. > > > I only need the slave side (pts) name. I'm sure it must be > something simple. The rest > > works fine. > > No, I don't think it can be done with pure perl. In C you have ptsname() > for that purpose, but as it is not POSIX there is no standard perl > binding to that that I am aware of (other than in IO::Tty). > > Generally speaking, pty handling is a black magic and VERY system-dependent. > > But come to think of, I have a nifty work-around! Use "ssh -t localhost > cmd" to spawn the command with a terminal as stdin/out and interact with > that via open2() or open3(). How does that sound? I'll try that but it sounds too simple, it can't work ;-P > > Hope this helps, > > Roland > > > Here is the relevant code: > > > > #!/usr/bin/perl -w > > use strict; > > use Fcntl; # Needed for O_RDWR and O_NOCTTY flags to sysopen > > use POSIX qw/setsid ttyname/; > > use POSIX ":sys_wait_h"; > > # > > # Set up my variables and read the command line parameters. > > # > > # Open the control side and set non blocking > > sysopen( PTC, "/dev/ptc", O_RDWR | O_NOCTTY ) or die "Can't open a > pseudo-terminal. $!"; > > $s = select(PTC); $| = 1; select($s); > > # Get the name of the slave side > > That won't work, you need ptsname() here. That this works in AIX is... > well, I can't say non-standard, because there is no standard... :-) I saw that. I also found something else: #################### sub ptsname { my $fd = shift; my $name = '/dev/pts/'; my $pty; unless( ioctl( \*$fd, &TIOCGPTN, $pty ) ) { unless( ioctl( \*$fd, &DEF_TIOCGPTN, $pty ) ) { ioctl( \*$fd, &TIOCGPTN|0x00040000, $pty ); } } $pty = ord(unpack("A", $pty)); return $name.$pty; } #################### For my purpose I would drop the GLOB ref. But how do I get the defines from unistd.h into variables my perl script. Then I could replace the function refs. > > > $ptyname = ttyname(fileno(PTC)) or die "Cannot get slave name: $?, $!\n"; > > $pid = fork; > > if ($pid < 0) { > > die "Can't fork: $1\n"; > > } > > if( $pid == 0 ) { # I'm the son ; exec the program... > > # Break away from the old controling terminal. > > setsid() or die "Can't setsid: $!\n"; > > # Open the slave side of the new one and set non-blocking IO > > sysopen( PTS, $ptyname, O_RDWR ) or die "Can't open a pseudo- > terminal (child). $!"; > > $s = select(PTS); $| = 1; select($s); > > close STDIN; > > close STDOUT; > > close STDERR; > > open(STDIN,"<&PTS"); > > open(STDOUT,">&PTS"); > > open(STDERR,">&STDOUT"); > > $| = 1; > > exec $prog-needing-tty; > > } > > $| = 1; > > while( sysread(PTC, $_, 1) ) { > > print "$_"; > > $buf = $buf . $_; > > # > > # Check for specific string from child > > # and send the correct responses. > > # > > if( ($kid = waitpid(-1, WNOHANG)) > 0 ) { > > last; > > } > > } > > # Cleanup and exit > > > > > > Regards, > > Carlyle. > > > > Roland Giersig <rgi...@cp...> wrote on 06.02.2008 14:47:49: > > > >> Can you post the relevant parts of the script? > >> > >> PTY-handling is hard, that's why IO::Tty is doing it in C. And you have > >> no way of installing IO::Tty locally? If you worry about distribution, > >> have a look at PAR, the Perl Archiver, on CPAN which lets you package > >> required modules, even binary ones, with your script. > >> > >> Servus, Roland > >> > >> Carlyle Sutphen wrote: > >>> Hello, > >>> > >>> I am a system administrator in a large corporation which > >>> has not included Expect.pm and its siblings IO::Tty and IO::Stty > >>> in the packaging. > >>> > >>> I have written a perl script which creates a terminal for a child > >>> process which uses the terminal rather than standard IO; > >>> much as expect does but very simply and of very limited > >>> scope. > >>> > >>> This script works fine on AIX but not on SunOS or Linux. > >>> > >>> I need to know how to get the name of the slave side after > >>> opening the control side (/dev/ptc on AIX and /dev/ptmx on > >>> the others). On AIX ttyname does this for me but it returns > >>> "Inappropriate ioctl for device" elsewhere. > >>> > >>> I don't mean to take up time and space on this list but I have been > >>> looking unsuccessfully for a suitable mailing list more suited to > >>> my problem. > >>> > >>> Thank you for any pointers. > >>> > >>> Best regards, > >>> Carlyle -- Informationen (einschließlich Pflichtangaben) zu einzelnen, innerhalb der EU tätigen Gesellschaften und Zweigniederlassungen des Konzerns Deutsche Bank finden Sie unter http://www.db.com/de/content/pflichtangaben.htm. Diese E-Mail enthält vertrauliche und/ oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese E-Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail ist nicht gestattet. Please refer to http://www.db.com/en/content/eu_disclosures.htm for information (including mandatory corporate particulars) on selected Deutsche Bank branches and group companies registered or incorporated in the European Union. This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden. |
From: Roland G. <rgi...@cp...> - 2008-02-06 15:56:51
|
Carlyle Sutphen wrote: > Thank you for picking this up. > > No, I can't install IO::Tty. I would have to justify rolling out non-standard packages on many > hundreds of servers. Comparing "rolling out a self-written custom script that probably doesn't has an automatic testsuite" to "installing a proven-in-use module" I fail to see the problem... :-) (don't flame me, I know, company policies... *sigh*) > But if I can't get this to fly, I may look at PAR. What I meant was installing the module in a private lib-dir. And yes, then you can package this up with PAR. > I only need the slave side (pts) name. I'm sure it must be something simple. The rest > works fine. No, I don't think it can be done with pure perl. In C you have ptsname() for that purpose, but as it is not POSIX there is no standard perl binding to that that I am aware of (other than in IO::Tty). Generally speaking, pty handling is a black magic and VERY system-dependent. But come to think of, I have a nifty work-around! Use "ssh -t localhost cmd" to spawn the command with a terminal as stdin/out and interact with that via open2() or open3(). How does that sound? Hope this helps, Roland > Here is the relevant code: > > #!/usr/bin/perl -w > use strict; > use Fcntl; # Needed for O_RDWR and O_NOCTTY flags to sysopen > use POSIX qw/setsid ttyname/; > use POSIX ":sys_wait_h"; > # > # Set up my variables and read the command line parameters. > # > # Open the control side and set non blocking > sysopen( PTC, "/dev/ptc", O_RDWR | O_NOCTTY ) or die "Can't open a pseudo-terminal. $!"; > $s = select(PTC); $| = 1; select($s); > # Get the name of the slave side That won't work, you need ptsname() here. That this works in AIX is... well, I can't say non-standard, because there is no standard... :-) > $ptyname = ttyname(fileno(PTC)) or die "Cannot get slave name: $?, $!\n"; > $pid = fork; > if ($pid < 0) { > die "Can't fork: $1\n"; > } > if( $pid == 0 ) { # I'm the son ; exec the program... > # Break away from the old controling terminal. > setsid() or die "Can't setsid: $!\n"; > # Open the slave side of the new one and set non-blocking IO > sysopen( PTS, $ptyname, O_RDWR ) or die "Can't open a pseudo-terminal (child). $!"; > $s = select(PTS); $| = 1; select($s); > close STDIN; > close STDOUT; > close STDERR; > open(STDIN,"<&PTS"); > open(STDOUT,">&PTS"); > open(STDERR,">&STDOUT"); > $| = 1; > exec $prog-needing-tty; > } > $| = 1; > while( sysread(PTC, $_, 1) ) { > print "$_"; > $buf = $buf . $_; > # > # Check for specific string from child > # and send the correct responses. > # > if( ($kid = waitpid(-1, WNOHANG)) > 0 ) { > last; > } > } > # Cleanup and exit > > > Regards, > Carlyle. > > Roland Giersig <rgi...@cp...> wrote on 06.02.2008 14:47:49: > >> Can you post the relevant parts of the script? >> >> PTY-handling is hard, that's why IO::Tty is doing it in C. And you have >> no way of installing IO::Tty locally? If you worry about distribution, >> have a look at PAR, the Perl Archiver, on CPAN which lets you package >> required modules, even binary ones, with your script. >> >> Servus, Roland >> >> Carlyle Sutphen wrote: >>> Hello, >>> >>> I am a system administrator in a large corporation which >>> has not included Expect.pm and its siblings IO::Tty and IO::Stty >>> in the packaging. >>> >>> I have written a perl script which creates a terminal for a child >>> process which uses the terminal rather than standard IO; >>> much as expect does but very simply and of very limited >>> scope. >>> >>> This script works fine on AIX but not on SunOS or Linux. >>> >>> I need to know how to get the name of the slave side after >>> opening the control side (/dev/ptc on AIX and /dev/ptmx on >>> the others). On AIX ttyname does this for me but it returns >>> "Inappropriate ioctl for device" elsewhere. >>> >>> I don't mean to take up time and space on this list but I have been >>> looking unsuccessfully for a suitable mailing list more suited to >>> my problem. >>> >>> Thank you for any pointers. >>> >>> Best regards, >>> Carlyle >>> -- >>> >>> Informationen (einschließlich Pflichtangaben) zu einzelnen, >> innerhalb der EU tätigen Gesellschaften und Zweigniederlassungen des >> Konzerns Deutsche Bank finden Sie unter http://www.db. >> com/de/content/pflichtangaben.htm. Diese E-Mail enthält vertrauliche >> und/ oder rechtlich geschützte Informationen. Wenn Sie nicht der >> richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, >> informieren Sie bitte sofort den Absender und vernichten Sie diese >> E-Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe >> dieser E-Mail ist nicht gestattet. >>> Please refer to http://www.db.com/en/content/eu_disclosures.htm >> for information (including mandatory corporate particulars) on >> selected Deutsche Bank branches and group companies registered or >> incorporated in the European Union. This e-mail may contain >> confidential and/or privileged information. If you are not the >> intended recipient (or have received this e-mail in error) please >> notify the sender immediately and delete this e-mail. Any >> unauthorized copying, disclosure or distribution of the material in >> this e-mail is strictly forbidden. >>> >>> ------------------------------------------------------------------------- >>> This SF.net email is sponsored by: Microsoft >>> Defy all challenges. Microsoft(R) Visual Studio 2008. >>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ >>> _______________________________________________ >>> Expectperl-discuss mailing list >>> Exp...@li... >>> https://lists.sourceforge.net/lists/listinfo/expectperl-discuss >>> > > -- > > Informationen (einschließlich Pflichtangaben) zu einzelnen, innerhalb der EU tätigen Gesellschaften und Zweigniederlassungen des Konzerns Deutsche Bank finden Sie unter http://www.db.com/de/content/pflichtangaben.htm. Diese E-Mail enthält vertrauliche und/ oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese E-Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail ist nicht gestattet. > > Please refer to http://www.db.com/en/content/eu_disclosures.htm for information (including mandatory corporate particulars) on selected Deutsche Bank branches and group companies registered or incorporated in the European Union. This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden. > > |
From: Carlyle S. <car...@db...> - 2008-02-06 14:51:19
|
Thank you for picking this up. No, I can't install IO::Tty. I would have to justify rolling out non-standard packages on many hundreds of servers. But if I can't get this to fly, I may look at PAR. I only need the slave side (pts) name. I'm sure it must be something simple. The rest works fine. Here is the relevant code: #!/usr/bin/perl -w use strict; use Fcntl; # Needed for O_RDWR and O_NOCTTY flags to sysopen use POSIX qw/setsid ttyname/; use POSIX ":sys_wait_h"; # # Set up my variables and read the command line parameters. # # Open the control side and set non blocking sysopen( PTC, "/dev/ptc", O_RDWR | O_NOCTTY ) or die "Can't open a pseudo-terminal. $!"; $s = select(PTC); $| = 1; select($s); # Get the name of the slave side $ptyname = ttyname(fileno(PTC)) or die "Cannot get slave name: $?, $!\n"; $pid = fork; if ($pid < 0) { die "Can't fork: $1\n"; } if( $pid == 0 ) { # I'm the son ; exec the program... # Break away from the old controling terminal. setsid() or die "Can't setsid: $!\n"; # Open the slave side of the new one and set non-blocking IO sysopen( PTS, $ptyname, O_RDWR ) or die "Can't open a pseudo-terminal (child). $!"; $s = select(PTS); $| = 1; select($s); close STDIN; close STDOUT; close STDERR; open(STDIN,"<&PTS"); open(STDOUT,">&PTS"); open(STDERR,">&STDOUT"); $| = 1; exec $prog-needing-tty; } $| = 1; while( sysread(PTC, $_, 1) ) { print "$_"; $buf = $buf . $_; # # Check for specific string from child # and send the correct responses. # if( ($kid = waitpid(-1, WNOHANG)) > 0 ) { last; } } # Cleanup and exit Regards, Carlyle. Roland Giersig <rgi...@cp...> wrote on 06.02.2008 14:47:49: > Can you post the relevant parts of the script? > > PTY-handling is hard, that's why IO::Tty is doing it in C. And you have > no way of installing IO::Tty locally? If you worry about distribution, > have a look at PAR, the Perl Archiver, on CPAN which lets you package > required modules, even binary ones, with your script. > > Servus, Roland > > Carlyle Sutphen wrote: > > Hello, > > > > I am a system administrator in a large corporation which > > has not included Expect.pm and its siblings IO::Tty and IO::Stty > > in the packaging. > > > > I have written a perl script which creates a terminal for a child > > process which uses the terminal rather than standard IO; > > much as expect does but very simply and of very limited > > scope. > > > > This script works fine on AIX but not on SunOS or Linux. > > > > I need to know how to get the name of the slave side after > > opening the control side (/dev/ptc on AIX and /dev/ptmx on > > the others). On AIX ttyname does this for me but it returns > > "Inappropriate ioctl for device" elsewhere. > > > > I don't mean to take up time and space on this list but I have been > > looking unsuccessfully for a suitable mailing list more suited to > > my problem. > > > > Thank you for any pointers. > > > > Best regards, > > Carlyle > > -- > > > > Informationen (einschließlich Pflichtangaben) zu einzelnen, > innerhalb der EU tätigen Gesellschaften und Zweigniederlassungen des > Konzerns Deutsche Bank finden Sie unter http://www.db. > com/de/content/pflichtangaben.htm. Diese E-Mail enthält vertrauliche > und/ oder rechtlich geschützte Informationen. Wenn Sie nicht der > richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, > informieren Sie bitte sofort den Absender und vernichten Sie diese > E-Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe > dieser E-Mail ist nicht gestattet. > > > > Please refer to http://www.db.com/en/content/eu_disclosures.htm > for information (including mandatory corporate particulars) on > selected Deutsche Bank branches and group companies registered or > incorporated in the European Union. This e-mail may contain > confidential and/or privileged information. If you are not the > intended recipient (or have received this e-mail in error) please > notify the sender immediately and delete this e-mail. Any > unauthorized copying, disclosure or distribution of the material in > this e-mail is strictly forbidden. > > > > > > ------------------------------------------------------------------------- > > This SF.net email is sponsored by: Microsoft > > Defy all challenges. Microsoft(R) Visual Studio 2008. > > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > _______________________________________________ > > Expectperl-discuss mailing list > > Exp...@li... > > https://lists.sourceforge.net/lists/listinfo/expectperl-discuss > > -- Informationen (einschließlich Pflichtangaben) zu einzelnen, innerhalb der EU tätigen Gesellschaften und Zweigniederlassungen des Konzerns Deutsche Bank finden Sie unter http://www.db.com/de/content/pflichtangaben.htm. Diese E-Mail enthält vertrauliche und/ oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese E-Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail ist nicht gestattet. Please refer to http://www.db.com/en/content/eu_disclosures.htm for information (including mandatory corporate particulars) on selected Deutsche Bank branches and group companies registered or incorporated in the European Union. This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden. |