Module jcifs

Class SID

All Implemented Interfaces:
SID

public class SID extends rpc.sid_t implements SID
Internal representation of SIDs A Windows SID is a numeric identifier used to represent Windows accounts. SIDs are commonly represented using a textual format such as S-1-5-21-1496946806-2192648263-3843101252-1029 but they may also be resolved to yield the name of the associated Windows account such as Administrators or MYDOM\alice.

Consider the following output of examples/SidLookup.java:

        toString: S-1-5-21-4133388617-793952518-2001621813-512
 toDisplayString: WNET\Domain Admins
         getType: 2
     getTypeText: Domain group
   getDomainName: WNET
  getAccountName: Domain Admins
 

This section is intended for internal use.

  • Field Details

    • SID_FLAG_RESOLVE_SIDS

      public static final int SID_FLAG_RESOLVE_SIDS
      Flag indicating that SIDs should be resolved to names.
      See Also:
    • EVERYONE

      public static SID EVERYONE
      Well known SID: EVERYONE
    • CREATOR_OWNER

      public static SID CREATOR_OWNER
      Well known SID: CREATOR_OWNER
    • SYSTEM

      public static SID SYSTEM
      Well known SID: SYSTEM
  • Constructor Details

    • SID

      public SID(byte[] src, int si)
      Construct a SID from it's binary representation.
      Parameters:
      src - the byte array containing the SID
      si - the starting index in the array
    • SID

      public SID(String textual) throws SmbException
      Construct a SID from it's textual representation such as S-1-5-21-1496946806-2192648263-3843101252-1029.
      Parameters:
      textual - the textual representation of the SID
      Throws:
      SmbException - if the textual format is invalid
    • SID

      public SID(SID domsid, int rid)
      Construct a SID from a domain SID and an RID (relative identifier). For example, a domain SID S-1-5-21-1496946806-2192648263-3843101252 and RID 1029 would yield the SID S-1-5-21-1496946806-2192648263-3843101252-1029.
      Parameters:
      domsid - the domain SID
      rid - the relative identifier
    • SID

      public SID(SID domsid, SID id)
      Construct a relative SID
      Parameters:
      domsid - the domain SID
      id - the SID to append to the domain SID
    • SID

      public SID(rpc.sid_t sid, int type, String domainName, String acctName, boolean decrementAuthority)
      Constructs a SID from an RPC sid_t structure.
      Parameters:
      sid - the RPC sid_t structure
      type - the SID type
      domainName - the domain name for this SID
      acctName - the account name for this SID
      decrementAuthority - whether to decrement the authority count
  • Method Details

    • toByteArray

      public static byte[] toByteArray(rpc.sid_t sid)
      Convert a sid_t to byte array
      Parameters:
      sid - the RPC sid_t structure to convert
      Returns:
      byte encoded form
    • unwrap

      public <T> T unwrap(Class<T> t)
      Unwraps this SID to the specified type.
      Specified by:
      unwrap in interface SID
      Type Parameters:
      T - the type to unwrap to
      Parameters:
      t - the class of the type to unwrap to
      Returns:
      unwrapped instance
      See Also:
    • toByteArray

      public byte[] toByteArray()
      Gets the byte array representation of this SID.
      Returns:
      encoded SID
    • isEmpty

      public boolean isEmpty()
      Checks whether the SID is empty (no sub-authorities).
      Returns:
      whether the SID is empty (no sub-authorities)
    • isBlank

      public boolean isBlank()
      Checks whether the SID is blank (all sub-authorities zero).
      Returns:
      whether the SID is blank (all sub-authorities zero)
    • getDomainSid

      public SID getDomainSid()
      Description copied from interface: SID
      Gets the domain SID for this SID.
      Specified by:
      getDomainSid in interface SID
      Returns:
      domain SID
    • getRid

      public int getRid()
      Get the RID This is the last subauthority identifier
      Specified by:
      getRid in interface SID
      Returns:
      the RID
    • getType

      public int getType()
      Description copied from interface: SID
      Returns the type of this SID indicating the state or type of account.

      SID types are described in the following table.

      Type codes
      Type Name
      SID_TYPE_USE_NONE 0
      SID_TYPE_USER User
      SID_TYPE_DOM_GRP Domain group
      SID_TYPE_DOMAIN Domain
      SID_TYPE_ALIAS Local group
      SID_TYPE_WKN_GRP Builtin group
      SID_TYPE_DELETED Deleted
      SID_TYPE_INVALID Invalid
      SID_TYPE_UNKNOWN Unknown
      Specified by:
      getType in interface SID
      Returns:
      type code
    • getTypeText

      public String getTypeText()
      Description copied from interface: SID
      Return text representing the SID type suitable for display to users. Text includes 'User', 'Domain group', 'Local group', etc.
      Specified by:
      getTypeText in interface SID
      Returns:
      textual representation of type
    • getDomainName

      public String getDomainName()
      Description copied from interface: SID
      Return the domain name of this SID unless it could not be resolved in which case the numeric representation is returned.
      Specified by:
      getDomainName in interface SID
      Returns:
      the domain name
    • getAccountName

      public String getAccountName()
      Description copied from interface: SID
      Return the sAMAccountName of this SID unless it could not be resolved in which case the numeric RID is returned. If this SID is a domain SID, this method will return an empty String.
      Specified by:
      getAccountName in interface SID
      Returns:
      the account name
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • toString

      public String toString()
      Return the numeric representation of this sid such as S-1-5-21-1496946806-2192648263-3843101252-1029.
      Overrides:
      toString in class Object
    • toDisplayString

      public String toDisplayString()
      Description copied from interface: SID
      Return a String representing this SID ideal for display to users. This method should return the same text that the ACL editor in Windows would display.

      Specifically, if the SID has been resolved and it is not a domain SID or builtin account, the full DOMAIN\name form of the account will be returned (e.g. MYDOM\alice or MYDOM\Domain Users). If the SID has been resolved but it is is a domain SID, only the domain name will be returned (e.g. MYDOM). If the SID has been resolved but it is a builtin account, only the name component will be returned (e.g. SYSTEM). If the sid cannot be resolved the numeric representation from toString() is returned.

      Specified by:
      toDisplayString in interface SID
      Returns:
      display format, potentially with resolved names
    • resolve

      public void resolve(String authorityServerName, CIFSContext tc) throws IOException
      Manually resolve this SID. Normally SIDs are automatically resolved. However, if a SID is constructed explicitly using a SID constructor, JCIFS will have no knowledge of the server that created the SID and therefore cannot possibly resolve it automatically. In this case, this method will be necessary.
      Parameters:
      authorityServerName - The FQDN of the server that is an authority for the SID.
      tc - Context to use
      Throws:
      IOException - if there is an error resolving the SID
    • getGroupMemberSids

      public SID[] getGroupMemberSids(String authorityServerName, CIFSContext tc, int flags) throws IOException
      Get members of the group represented by this SID, if it is one.
      Parameters:
      authorityServerName - the server to use for SID resolution
      tc - the CIFS context to use
      flags - resolution flags
      Returns:
      the members of the group
      Throws:
      IOException - if there is an error retrieving group members
    • initContext

      public void initContext(String server, CIFSContext context)
      Initializes the context and server for this SID for deferred resolution.
      Parameters:
      context - the CIFS context to use
      server - the server name for SID resolution