Thread: [Ssh-sftp-perl-users] Getting SETSTAT failures from sftp-put
Brought to you by:
dbrobins
From: Bob G. <sta...@ga...> - 2010-07-21 12:21:01
|
Dear perl-gods, I have a daemon, written in perl, that SFTP's files to target hosts based upon an INI file of local-directories to watch, and target-hosts. It has been working fine for some time. I am using Perl v5.8.8, Net::SFTP::Foreign v1.51 & ::Compat v1.36 The relevant code is: %LIBARGS=('user'+>$RHUSER,'port'=>$RHPORT,'late_setperm'=>1); $SLC = Net::SFTP::Foreign::Compat->new($RHNAME, %LIBARGS); my $FXSTAT = $SLC->put($SAF, $DAF); A new host to which I must now send things is a relatively new SFTP implementation and has internal processes that move files as soon as received. I suspect this is the reason I am getting an error: "Couldn't setstat remote file (setstat)': Specified file path is invalid" ...even though the file was received by the remote host. This new host also does not permit changing perms on open files so the "late_setperm" argument must be used (as is required on all my other hosts). Given a choice between error 3 "The requested operation cannot be performed because there is a file transfer in progress" or error 2 "Specified file path is invalid", I've opted to put in a workaround (the logic handling $FXSTAT values) to disregard error 2 from this particular host. I'd prefer eliminating the error. I am not talented enough to interpret all that is going on in Net/SFTP/Foreign/Compat.pm but I believe it is setting permissions and such, whether that is needed or not, and this is what is actually failing. I absolutely do NOT want to modify Compat.pm or any other parts of the module, for a variety of reasons. I am hoping there is some option to disable the setting of attributes. Thanks for any help with this. -- RLG, That's me. Si vis pacem, para bellum |
From: Bob G. <sta...@ga...> - 2010-07-21 14:43:24
|
Salva, Everything I'd previously read suggested using Compat so the local implementation of OpenSSH would be used instead of the perl-implementation. The logic being that OpenSSH is more rigorously kept patched with security updates. Your suggested change to the 'new' and 'put' arguments does indeed seem to work on the new host and seems to work just fine with all the others as well. Thank you very very much. -- Bob Si vis pacem, para bellum Salva wrote: > You will have to switch to the real thing and use Net::SFTP::Foreign in order to > solve your problem: > > $sftp = Net::SFTP::Foreign->new($RHNAME, user => $RHUSER, port => $RHPORT); > $sftp->put($SAF, $DAF, copy_perms => 0, copy_time => 0); > > Cheers, > - Salva > > > > ----- Original Message ---- >> From: Bob >> To: ssh...@li... >> Sent: Wed, July 21, 2010 2:20:54 PM >> Subject: [Ssh-sftp-perl-users] Getting SETSTAT failures from sftp-put >> >> Dear perl-gods, >> I have a daemon, written in perl, that SFTP's files to target hosts >> based upon an INI file of local-directories to watch, and target-hosts. >> It has been working fine for some time. >> >> I am using Perl v5.8.8, Net::SFTP::Foreign v1.51 & ::Compat v1.36 >> >> The relevant code is: >> %LIBARGS=('user'+>$RHUSER,'port'=>$RHPORT,'late_setperm'=>1); >> $SLC = Net::SFTP::Foreign::Compat->new($RHNAME, %LIBARGS); >> my $FXSTAT = $SLC->put($SAF, $DAF); >> >> A new host to which I must now send things is a relatively new SFTP >> implementation and has internal processes that move files as soon as >> received. I suspect this is the reason I am getting an error: >> "Couldn't setstat remote file (setstat)': Specified file path is invalid" >> ...even though the file was received by the remote host. >> >> This new host also does not permit changing perms on open files so the >> "late_setperm" argument must be used (as is required on all my other hosts). >> Given a choice between error 3 "The requested operation cannot be >> performed because there is a file transfer in progress" or error 2 >> "Specified file path is invalid", I've opted to put in a workaround (the >> logic handling $FXSTAT values) to disregard error 2 from this particular >> host. >> I'd prefer eliminating the error. >> >> I am not talented enough to interpret all that is going on in >> Net/SFTP/Foreign/Compat.pm >> but I believe it is setting permissions and such, whether that is needed >> or not, and this is what is actually failing. >> I absolutely do NOT want to modify Compat.pm or any other parts of the >> module, for a variety of reasons. >> I am hoping there is some option to disable the setting of attributes. > |
From: Salvador F. <sfa...@ya...> - 2010-07-21 16:47:42
|
----- Original Message ---- > From: Bob Gammage <sta...@ga...> > To: ssh...@li... > Cc: Salvador Fandino <sfa...@ya...> > Sent: Wed, July 21, 2010 4:41:56 PM > Subject: Re: [Ssh-sftp-perl-users] Getting SETSTAT failures from sftp-put >SOLVED > > Salva, > Everything I'd previously read suggested using Compat so the local >implementation of OpenSSH would be used instead of the perl-implementation. >The logic being that OpenSSH is more rigorously kept patched with security >updates. it seems you are confused! There are mainly two Perl modules implementing the SFTP protocol: Net::SFTP that runs on top of Net::SSH::Perl and Net::SFTP::Foreign that uses a binary SSH client to establish the SSH connection to the server. Net::SFTP::Foreign::Compact is a thin adapter layer on top of Net::SFTP::Foreign implementing (most of) the API of Net::SFTP, so that programs written for this module can be easily be changed to use Net::SFTP::Foreign. ... well, actually, there is a third module implementing SFTP in Perl, Net::SSH2::SFTP, distributed as part of Net::SSH2, but it is not very powerful yet, lacking some indispensable features as "put" and "get" methods. - Salva > Your suggested change to the 'new' and 'put' arguments does indeed seem to >work on the new host and seems to work just fine with all the others as well. > > Thank you very very much. > -- Bob > Si vis pacem, para bellum > > Salva wrote: > > You will have to switch to the real thing and use Net::SFTP::Foreign in >order to solve your problem: > > > > $sftp = Net::SFTP::Foreign->new($RHNAME, user => $RHUSER, port => >$RHPORT); > > $sftp->put($SAF, $DAF, copy_perms => 0, copy_time => 0); > > > > Cheers, > > - Salva > > > > > > > ----- Original Message ---- > >> From: Bob To: ssh...@li... > >> Sent: Wed, July 21, 2010 2:20:54 PM > >> Subject: [Ssh-sftp-perl-users] Getting SETSTAT failures from sftp-put > >> > >> Dear perl-gods, > >> I have a daemon, written in perl, that SFTP's files to target hosts > >> based upon an INI file of local-directories to watch, and target-hosts. > >> It has been working fine for some time. > >> > >> I am using Perl v5.8.8, Net::SFTP::Foreign v1.51 & ::Compat v1.36 > >> > >> The relevant code is: > >> %LIBARGS=('user'+>$RHUSER,'port'=>$RHPORT,'late_setperm'=>1); > >> $SLC = Net::SFTP::Foreign::Compat->new($RHNAME, %LIBARGS); > >> my $FXSTAT = $SLC->put($SAF, $DAF); > >> > >> A new host to which I must now send things is a relatively new SFTP > >> implementation and has internal processes that move files as soon as > >> received. I suspect this is the reason I am getting an error: > >> "Couldn't setstat remote file (setstat)': Specified file path is invalid" > >> ...even though the file was received by the remote host. > >> > >> This new host also does not permit changing perms on open files so the > >> "late_setperm" argument must be used (as is required on all my other >hosts). > >> Given a choice between error 3 "The requested operation cannot be > >> performed because there is a file transfer in progress" or error 2 > >> "Specified file path is invalid", I've opted to put in a workaround (the > >> logic handling $FXSTAT values) to disregard error 2 from this particular > >> host. > >> I'd prefer eliminating the error. > >> > >> I am not talented enough to interpret all that is going on in > >> Net/SFTP/Foreign/Compat.pm > >> but I believe it is setting permissions and such, whether that is needed > >> or not, and this is what is actually failing. > >> I absolutely do NOT want to modify Compat.pm or any other parts of the > >> module, for a variety of reasons. > >> I am hoping there is some option to disable the setting of attributes. > > > > > > |
From: Howard, C. <Ho...@pr...> - 2010-07-21 16:06:49
|
This may be an unhelpful response: It seems to me that you need more handshaking between the two systems to coordinate when the file has safely and completely arrived; either the file is in process or it has already been whisked away. Why not use sftp to send the file to an innocuous place or filename, get the permissions all set, then rename the file to be picked up by the second system's processes? If it has to be so tightly coupled, then maybe go to a web service or remote procedure call or other method of coordination. I expect I'm not really answering your question. > -----Original Message----- > From: Bob Gammage [mailto:sta...@ga...] > Sent: Wednesday, July 21, 2010 6:21 AM > To: ssh...@li... > Subject: [Ssh-sftp-perl-users] Getting SETSTAT failures from sftp-put > > Dear perl-gods, > I have a daemon, written in perl, that SFTP's files to target hosts > based upon an INI file of local-directories to watch, and target-hosts. > It has been working fine for some time. > > I am using Perl v5.8.8, Net::SFTP::Foreign v1.51 & ::Compat v1.36 > > The relevant code is: > %LIBARGS=('user'+>$RHUSER,'port'=>$RHPORT,'late_setperm'=>1); > $SLC = Net::SFTP::Foreign::Compat->new($RHNAME, %LIBARGS); > my $FXSTAT = $SLC->put($SAF, $DAF); > > A new host to which I must now send things is a relatively new SFTP > implementation and has internal processes that move files as soon as > received. I suspect this is the reason I am getting an error: > "Couldn't setstat remote file (setstat)': Specified file path is > invalid" > ...even though the file was received by the remote host. > > This new host also does not permit changing perms on open files so the > "late_setperm" argument must be used (as is required on all my other > hosts). > Given a choice between error 3 "The requested operation cannot be > performed because there is a file transfer in progress" or error 2 > "Specified file path is invalid", I've opted to put in a workaround > (the > logic handling $FXSTAT values) to disregard error 2 from this > particular > host. > I'd prefer eliminating the error. > > I am not talented enough to interpret all that is going on in > Net/SFTP/Foreign/Compat.pm > but I believe it is setting permissions and such, whether that is > needed > or not, and this is what is actually failing. > I absolutely do NOT want to modify Compat.pm or any other parts of the > module, for a variety of reasons. > I am hoping there is some option to disable the setting of attributes. > > Thanks for any help with this. > > -- > RLG, That's me. > Si vis pacem, para bellum > > ----------------------------------------------------------------------- > ------- > This SF.net email is sponsored by Sprint > What will you do first with EVO, the first 4G phone? > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first > _______________________________________________ > Ssh-sftp-perl-users mailing list > Ssh...@li... > https://lists.sourceforge.net/lists/listinfo/ssh-sftp-perl-users |