class Net::SFTP::Protocol::V04::Attributes

A class representing the attributes of a file or directory on the server. It may be used to specify new attributes, or to query existing attributes. This particular class is specific to versions 4 and 5 of the SFTP protocol.

To specify new attributes, just pass a hash as the argument to the constructor. The following keys are supported:

Likewise, when the server sends an Attributes object, all of the above attributes are exposed as methods (though not all will be set with non-nil values from the server).

Constants

ACL

A simple struct for representing a single entry in an Access Control List. (See Net::SFTP::Constants::ACE)

F_ACCESSTIME
F_ACL
F_CREATETIME
F_MODIFYTIME
F_OWNERGROUP
F_SUBSECOND_TIMES

Attributes

acl[RW]

The array of access control entries for this item.

atime_nseconds[RW]

The nanosecond component of the access time.

createtime[RW]

The creation time of the remote item, in seconds since the epoch.

createtime_nseconds[RW]

The nanosecond component of the creation time.

group[W]

The group of the item on the remote server, as a string.

mtime_nseconds[RW]

The nanosecond component of the modification time.

owner[W]

The owner of the item on the remote server, as a string.

type[RW]

The type of the item on the remote server. Must be one of the T_* constants.

Public Class Methods

new(attributes={}) click to toggle source

Create a new Attributes instance with the given attributes. The following keys are supported:

  • :type

    the type of the item (integer, one of the T_ constants)

  • :size

    the size of the item (integer)

  • :uid

    the user-id that owns the file (integer)

  • :gid

    the group-id that owns the file (integer)

  • :owner

    the name of the user that owns the file (string)

  • :group

    the name of the group that owns the file (string)

  • :permissions

    the permissions on the file (integer, e.g. 0755)

  • :atime

    the access time of the file (integer, seconds since epoch)

  • :atime_nseconds

    the nanosecond component of atime (integer)

  • :createtime

    the time at which the file was created (integer, seconds since epoch)

  • :createtime_nseconds

    the nanosecond component of createtime (integer)

  • :mtime

    the modification time of the file (integer, seconds since epoch)

  • :mtime_nseconds

    the nanosecond component of mtime (integer)

  • :acl

    an array of ACL entries for the item

  • :extended

    a hash of name/value pairs identifying extended info

All of them default to nil if omitted, except for type, which defaults to T_REGULAR.

# File lib/net/sftp/protocol/04/attributes.rb, line 124
def initialize(attributes={})
  super
  attributes[:type] ||= T_REGULAR
end

Private Class Methods

parse_acl(buffer) click to toggle source

A helper method for parsing the ACL entry in an Attributes struct.

# File lib/net/sftp/protocol/04/attributes.rb, line 69
def parse_acl(buffer)
  acl_buf = Net::SSH::Buffer.new(buffer.read_string)
  acl = []
  acl_buf.read_long.times do
    acl << ACL.new(acl_buf.read_long, acl_buf.read_long, acl_buf.read_long, acl_buf.read_string)
  end
  acl
end

Private Instance Methods

encode_acl(buffer) click to toggle source

Performs protocol-version-specific encoding of the access control list, if one exists.

# File lib/net/sftp/protocol/04/attributes.rb, line 141
def encode_acl(buffer)
  acl_buf = Net::SSH::Buffer.from(:long, acl.length)
  acl.each do |item|
    acl_buf.write_long item.type, item.flag, item.mask
    acl_buf.write_string item.who
  end
  buffer.write_string(acl_buf.to_s)
end
prepare_serialization!() click to toggle source

Perform protocol-version-specific preparations for serialization.

# File lib/net/sftp/protocol/04/attributes.rb, line 132
def prepare_serialization!
  # force the group/owner to be translated from uid/gid, if those keys
  # were given on instantiation
  owner
  group
end