spiegel_podman/vendor/github.com/pkg/sftp/request-readme.md
Chris Evich be7b956790
Fix compilation errors for v4.4.1-rhel compatibility
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>
2026-03-30 14:52:52 -04:00

2.2 KiB

Request Based SFTP API

The request based API allows for custom backends in a way similar to the http package. In order to create a backend you need to implement 4 handler interfaces; one for reading, one for writing, one for misc commands and one for listing files. Each has 1 required method and in each case those methods take the Request as the only parameter and they each return something different. These 4 interfaces are enough to handle all the SFTP traffic in a simplified manner.

The Request structure has 5 public fields which you will deal with.

  • Method (string) - string name of incoming call
  • Filepath (string) - POSIX path of file to act on
  • Flags (uint32) - 32bit bitmask value of file open/create flags
  • Attrs ([]byte) - byte string of file attribute data
  • Target (string) - target path for renames and sym-links

Below are the methods and a brief description of what they need to do.

Fileread(*Request) (io.Reader, error)

Handler for "Get" method and returns an io.Reader for the file which the server then sends to the client.

Filewrite(*Request) (io.Writer, error)

Handler for "Put" method and returns an io.Writer for the file which the server then writes the uploaded file to. The file opening "pflags" are currently preserved in the Request.Flags field as a 32bit bitmask value. See the SFTP spec for details.

Filecmd(*Request) error

Handles "SetStat", "Rename", "Rmdir", "Mkdir" and "Symlink" methods. Makes the appropriate changes and returns nil for success or an filesystem like error (eg. os.ErrNotExist). The attributes are currently propagated in their raw form ([]byte) and will need to be unmarshalled to be useful. See the respond method on sshFxpSetstatPacket for example of you might want to do this.

Fileinfo(*Request) ([]os.FileInfo, error)

Handles "List", "Stat", "Readlink" methods. Gathers/creates FileInfo structs with the data on the files and returns in a list (list of 1 for Stat and Readlink).

TODO

  • Add support for API users to see trace/debugging info of what is going on inside SFTP server.
  • Unmarshal the file attributes into a structure on the Request object.