mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-09-10 17:47:52 +00:00
Align codebase with v4.4.1-rhel PodmanConfig structure and API signatures to resolve compilation errors. - Update all cfg.Engine.* references to cfg.ContainersConf.Engine.* or cfg.ContainersConfDefaultsRO.Engine.* - Update all cfg.Network.* references to cfg.ContainersConf.Network.* - Update all cfg.Containers.* references to cfg.ContainersConf.Containers.* or cfg.ContainersConfDefaultsRO.Containers.* - Update cfg.Machine.* references to cfg.ContainersConfDefaultsRO.Machine.* - Fix PodmanConfig initialization in config.go to use ContainersConf and ContainersConfDefaultsRO fields - Add createOptions parameter to NetworkCreate method across all implementations (abi, tunnel, handlers) - Update ContainerEngine interface to match new NetworkCreate signature - Fix manager.Store call in secrets.go to use StoreOptions struct - Update DiskUsage to handle 3 return values - Fix NewConnectionWithIdentity call signature - Remove duplicate setupRemoteConnection function - Remove duplicate readRemoteCliFlags function - Remove duplicate function declarations in container_path_resolution.go, oci_conmon_linux.go - Comment out duplicate SpecGenToOCI and helper functions in oci.go/oci_linux.go - Remove unused imports across multiple files - Fix SSHMode flag handling (field doesn't exist in current PodmanConfig) - Fix ns.NetNS type handling in container_internal_linux.go - Add missing Terminal() method to Container struct - Add missing SdNotifySocket field to ContainerConfig - Fix DefaultCapabilities to use .Get() method - Fix cgroups.AvailableControllers reference - Fix ConmonPath type conversion (attributedstring.Slice) - Add missing ErrNetworkConnected error definition - Fix NetworkCreateOptions handling in secrets.go - Update networking code to use getNetNSPathCommon helper - Fix teardownNetwork method signature - Fix makeInspectPorts to makeInspectPortBindings - Remove hardcoded IsPasta() checks - Fix runtime_libpod.go field access patterns All changes align with the v4.4.1-rhel worktree structure to ensure compatibility with upcoming cherry-picks. Substantially Assisted-by AI: Cursor <auto> Signed-off-by: Chris Evich <cevich@redhat.com>
135 lines
4.3 KiB
Go
135 lines
4.3 KiB
Go
package sftp
|
|
|
|
import (
|
|
"encoding"
|
|
"fmt"
|
|
)
|
|
|
|
// all incoming packets
|
|
type requestPacket interface {
|
|
encoding.BinaryUnmarshaler
|
|
id() uint32
|
|
}
|
|
|
|
type responsePacket interface {
|
|
encoding.BinaryMarshaler
|
|
id() uint32
|
|
}
|
|
|
|
// interfaces to group types
|
|
type hasPath interface {
|
|
requestPacket
|
|
getPath() string
|
|
}
|
|
|
|
type hasHandle interface {
|
|
requestPacket
|
|
getHandle() string
|
|
}
|
|
|
|
type notReadOnly interface {
|
|
notReadOnly()
|
|
}
|
|
|
|
// // define types by adding methods
|
|
// hasPath
|
|
func (p *sshFxpLstatPacket) getPath() string { return p.Path }
|
|
func (p *sshFxpStatPacket) getPath() string { return p.Path }
|
|
func (p *sshFxpRmdirPacket) getPath() string { return p.Path }
|
|
func (p *sshFxpReadlinkPacket) getPath() string { return p.Path }
|
|
func (p *sshFxpRealpathPacket) getPath() string { return p.Path }
|
|
func (p *sshFxpMkdirPacket) getPath() string { return p.Path }
|
|
func (p *sshFxpSetstatPacket) getPath() string { return p.Path }
|
|
func (p *sshFxpStatvfsPacket) getPath() string { return p.Path }
|
|
func (p *sshFxpRemovePacket) getPath() string { return p.Filename }
|
|
func (p *sshFxpRenamePacket) getPath() string { return p.Oldpath }
|
|
func (p *sshFxpSymlinkPacket) getPath() string { return p.Targetpath }
|
|
func (p *sshFxpOpendirPacket) getPath() string { return p.Path }
|
|
func (p *sshFxpOpenPacket) getPath() string { return p.Path }
|
|
|
|
func (p *sshFxpExtendedPacketPosixRename) getPath() string { return p.Oldpath }
|
|
func (p *sshFxpExtendedPacketHardlink) getPath() string { return p.Oldpath }
|
|
|
|
// getHandle
|
|
func (p *sshFxpFstatPacket) getHandle() string { return p.Handle }
|
|
func (p *sshFxpFsetstatPacket) getHandle() string { return p.Handle }
|
|
func (p *sshFxpReadPacket) getHandle() string { return p.Handle }
|
|
func (p *sshFxpWritePacket) getHandle() string { return p.Handle }
|
|
func (p *sshFxpReaddirPacket) getHandle() string { return p.Handle }
|
|
func (p *sshFxpClosePacket) getHandle() string { return p.Handle }
|
|
|
|
// notReadOnly
|
|
func (p *sshFxpWritePacket) notReadOnly() {}
|
|
func (p *sshFxpSetstatPacket) notReadOnly() {}
|
|
func (p *sshFxpFsetstatPacket) notReadOnly() {}
|
|
func (p *sshFxpRemovePacket) notReadOnly() {}
|
|
func (p *sshFxpMkdirPacket) notReadOnly() {}
|
|
func (p *sshFxpRmdirPacket) notReadOnly() {}
|
|
func (p *sshFxpRenamePacket) notReadOnly() {}
|
|
func (p *sshFxpSymlinkPacket) notReadOnly() {}
|
|
func (p *sshFxpExtendedPacketPosixRename) notReadOnly() {}
|
|
func (p *sshFxpExtendedPacketHardlink) notReadOnly() {}
|
|
|
|
// some packets with ID are missing id()
|
|
func (p *sshFxpDataPacket) id() uint32 { return p.ID }
|
|
func (p *sshFxpStatusPacket) id() uint32 { return p.ID }
|
|
func (p *sshFxpStatResponse) id() uint32 { return p.ID }
|
|
func (p *sshFxpNamePacket) id() uint32 { return p.ID }
|
|
func (p *sshFxpHandlePacket) id() uint32 { return p.ID }
|
|
func (p *StatVFS) id() uint32 { return p.ID }
|
|
func (p *sshFxVersionPacket) id() uint32 { return 0 }
|
|
|
|
// take raw incoming packet data and build packet objects
|
|
func makePacket(p rxPacket) (requestPacket, error) {
|
|
var pkt requestPacket
|
|
switch p.pktType {
|
|
case sshFxpInit:
|
|
pkt = &sshFxInitPacket{}
|
|
case sshFxpLstat:
|
|
pkt = &sshFxpLstatPacket{}
|
|
case sshFxpOpen:
|
|
pkt = &sshFxpOpenPacket{}
|
|
case sshFxpClose:
|
|
pkt = &sshFxpClosePacket{}
|
|
case sshFxpRead:
|
|
pkt = &sshFxpReadPacket{}
|
|
case sshFxpWrite:
|
|
pkt = &sshFxpWritePacket{}
|
|
case sshFxpFstat:
|
|
pkt = &sshFxpFstatPacket{}
|
|
case sshFxpSetstat:
|
|
pkt = &sshFxpSetstatPacket{}
|
|
case sshFxpFsetstat:
|
|
pkt = &sshFxpFsetstatPacket{}
|
|
case sshFxpOpendir:
|
|
pkt = &sshFxpOpendirPacket{}
|
|
case sshFxpReaddir:
|
|
pkt = &sshFxpReaddirPacket{}
|
|
case sshFxpRemove:
|
|
pkt = &sshFxpRemovePacket{}
|
|
case sshFxpMkdir:
|
|
pkt = &sshFxpMkdirPacket{}
|
|
case sshFxpRmdir:
|
|
pkt = &sshFxpRmdirPacket{}
|
|
case sshFxpRealpath:
|
|
pkt = &sshFxpRealpathPacket{}
|
|
case sshFxpStat:
|
|
pkt = &sshFxpStatPacket{}
|
|
case sshFxpRename:
|
|
pkt = &sshFxpRenamePacket{}
|
|
case sshFxpReadlink:
|
|
pkt = &sshFxpReadlinkPacket{}
|
|
case sshFxpSymlink:
|
|
pkt = &sshFxpSymlinkPacket{}
|
|
case sshFxpExtended:
|
|
pkt = &sshFxpExtendedPacket{}
|
|
default:
|
|
return nil, fmt.Errorf("unhandled packet type: %s", p.pktType)
|
|
}
|
|
if err := pkt.UnmarshalBinary(p.pktBytes); err != nil {
|
|
// Return partially unpacked packet to allow callers to return
|
|
// error messages appropriately with necessary id() method.
|
|
return pkt, err
|
|
}
|
|
return pkt, nil
|
|
}
|