Beispiel #1
0
 internal DcerpcBind(DcerpcBinding binding, DcerpcHandle handle)
 {
     this.Binding = binding;
     MaxXmit      = handle.MaxXmit;
     MaxRecv      = handle.MaxRecv;
     Ptype        = 11;
     Flags        = DcerpcConstants.DcerpcFirstFrag | DcerpcConstants.DcerpcLastFrag;
 }
Beispiel #2
0
		internal DcerpcBind(DcerpcBinding binding, DcerpcHandle handle)
		{
			this.Binding = binding;
			MaxXmit = handle.MaxXmit;
			MaxRecv = handle.MaxRecv;
			Ptype = 11;
            Flags = DcerpcConstants.DcerpcFirstFrag | DcerpcConstants.DcerpcLastFrag;
		}
Beispiel #3
0
        /// <exception cref="System.IO.IOException"></exception>
        internal static void ResolveSids(DcerpcHandle handle, LsaPolicyHandle policyHandle
			, Sid[] sids)
        {
            MsrpcLookupSids rpc = new MsrpcLookupSids(policyHandle, sids);
            handle.Sendrecv(rpc);
            switch (rpc.Retval)
            {
                case 0:
                case NtStatus.NtStatusNoneMapped:
                case unchecked(0x00000107):
                {
                    // NT_STATUS_SOME_NOT_MAPPED
                    break;
                }

                default:
                {
                    throw new SmbException(rpc.Retval, false);
                }
            }
            for (int si = 0; si < sids.Length; si++)
            {
                sids[si].Type = rpc.Names.Names[si].SidType;
                sids[si].DomainName = null;
                switch (sids[si].Type)
                {
                    case SidTypeUser:
                    case SidTypeDomGrp:
                    case SidTypeDomain:
                    case SidTypeAlias:
                    case SidTypeWknGrp:
                    {
                        int sidIndex = rpc.Names.Names[si].SidIndex;
                        Rpc.Unicode_string ustr = rpc.Domains.Domains[sidIndex].Name;
                        sids[si].DomainName = (new UnicodeString(ustr, false)).ToString();
                        break;
                    }
                }
                sids[si].AcctName = (new UnicodeString(rpc.Names.Names[si].Name, false)).ToString
                    ();
                sids[si].OriginServer = null;
                sids[si].OriginAuth = null;
            }
        }
Beispiel #4
0
        /// <exception cref="System.IO.IOException"></exception>
        internal static Sid[] GetGroupMemberSids0(DcerpcHandle handle, SamrDomainHandle
			 domainHandle, Sid domsid, int rid, int flags)
        {
            SamrAliasHandle aliasHandle = null;
            Lsarpc.LsarSidArray sidarray = new Lsarpc.LsarSidArray();
            MsrpcGetMembersInAlias rpc = null;
            try
            {
                aliasHandle = new SamrAliasHandle(handle, domainHandle, unchecked(0x0002000c), rid);
                rpc = new MsrpcGetMembersInAlias(aliasHandle, sidarray);
                handle.Sendrecv(rpc);
                if (rpc.Retval != 0)
                {
                    throw new SmbException(rpc.Retval, false);
                }
                Sid[] sids = new Sid[rpc.Sids.NumSids];
                string originServer = handle.GetServer();
                NtlmPasswordAuthentication originAuth = (NtlmPasswordAuthentication)handle.GetPrincipal
                    ();
                for (int i = 0; i < sids.Length; i++)
                {
                    sids[i] = new Sid(rpc.Sids.Sids[i].Sid, 0, null, null, false);
                    sids[i].OriginServer = originServer;
                    sids[i].OriginAuth = originAuth;
                }
                if (sids.Length > 0 && (flags & SidFlagResolveSids) != 0)
                {
                    ResolveSids(originServer, originAuth, sids);
                }
                return sids;
            }
            finally
            {
                if (aliasHandle != null)
                {
                    aliasHandle.Close();
                }
            }
        }