void m_fillproperties(String ldapPath)
        {
            IDictionary <String, Object> props = DsUtils.GetEntryProperties(
                ldapPath,
                DsUtils.PropCN,
                DsUtils.PropDN,
                DsUtils.PropDisplayName,
                DsUtils.PropFlags,
                DsUtils.PropCpsOid,
                DsUtils.PropCertTemplateOid,
                DsUtils.PropLocalizedOid,
                DsUtils.PropPkiTemplateMajorVersion,
                DsUtils.PropPkiTemplateMinorVersion,
                DsUtils.PropPkiSchemaVersion,
                DsUtils.PropWhenChanged,
                DsUtils.PropPkiSubjectFlags,
                DsUtils.PropPkiEnrollFlags,
                DsUtils.PropPkiPKeyFlags,
                DsUtils.PropPkiNotAfter,
                DsUtils.PropPkiRenewalPeriod,
                DsUtils.PropPkiPathLength,
                DsUtils.PropCertTemplateEKU,
                DsUtils.PropPkiCertPolicy,
                DsUtils.PropPkiCriticalExt,
                DsUtils.PropPkiSupersede,
                DsUtils.PropPkiKeyCsp,
                DsUtils.PropPkiKeySize,
                DsUtils.PropPkiKeySpec,
                DsUtils.PropPkiKeySddl,
                DsUtils.PropPkiRaAppPolicy,
                DsUtils.PropPkiRaCertPolicy,
                DsUtils.PropPkiRaSignature,
                DsUtils.PropPkiAsymAlgo,
                DsUtils.PropPkiSymAlgo,
                DsUtils.PropPkiSymLength,
                DsUtils.PropPkiHashAlgo,
                DsUtils.PropPkiKeyUsage,
                DsUtils.PropPkiKeyUsageCng
                );

            flags             = (Int32)props[DsUtils.PropFlags];
            Name              = (String)props[DsUtils.PropCN];
            DistinguishedName = (String)props[DsUtils.PropDN];
            DisplayName       = (String)props[DsUtils.PropDisplayName];
            major             = (Int32)props[DsUtils.PropPkiTemplateMajorVersion];
            minor             = (Int32)props[DsUtils.PropPkiTemplateMinorVersion];
            SchemaVersion     = (Int32)props[DsUtils.PropPkiSchemaVersion];
            OID           = new Oid((String)props[DsUtils.PropCertTemplateOid]);
            LastWriteTime = (DateTime)props[DsUtils.PropWhenChanged];
            Settings      = new CertificateTemplateSettings(props);
        }
Esempio n. 2
0
        void initializeDS(String oid, OidGroupEnum group)
        {
            List <Int32> exclude = new List <Int32>(new[] { 1, 2, 3, 4, 5, 6, 10 });

            if (exclude.Contains((Int32)group))
            {
                initializeLocal(oid, group);
                return;
            }
            Boolean found    = false;
            String  oidvalue = oid;

            if (_searchBy.ToLower() == "byname")
            {
                Oid oidobj = new Oid(oid);
                if (String.IsNullOrEmpty(oidobj.Value))
                {
                    return;
                }
                oidvalue = oidobj.Value;
            }
            String cn       = computeOidHash(oidvalue);
            String ldapPath = $"CN={cn},{_baseDsPath}";

            try {
                IDictionary <String, Object> oidInDs = DsUtils.GetEntryProperties(
                    ldapPath,
                    DsUtils.PropFlags,
                    DsUtils.PropDN,
                    DsUtils.PropDisplayName,
                    DsUtils.PropCpsOid);
                found             = true;
                DistinguishedName = (String)oidInDs[DsUtils.PropDN];
                flags             = (Int32)oidInDs[DsUtils.PropFlags];
                FriendlyName      = (String)oidInDs[DsUtils.PropDisplayName];
                switch (flags)
                {
                case 1:
                    if (group != OidGroupEnum.AllGroups && group != OidGroupEnum.CertificateTemplate)
                    {
                        throw new Exception("Oid type mismatch.");
                    }
                    OidGroup = OidGroupEnum.CertificateTemplate;
                    break;

                case 2:
                    if (group != OidGroupEnum.AllGroups && group != OidGroupEnum.IssuancePolicy)
                    {
                        throw new Exception("Oid type mismatch.");
                    }
                    OidGroup = OidGroupEnum.IssuancePolicy;
                    if (oidInDs[DsUtils.PropCpsOid] == null)
                    {
                        break;
                    }
                    try {
                        Object[] cps = (Object[])oidInDs[DsUtils.PropCpsOid];
                        urls = cps.Cast <String>().ToArray();
                    } catch {
                        urls = new[] { (String)oidInDs[DsUtils.PropCpsOid] };
                    }
                    break;

                case 3:
                    if (group != OidGroupEnum.AllGroups && group != OidGroupEnum.ApplicationPolicy)
                    {
                        throw new Exception("Oid type mismatch.");
                    }
                    OidGroup = OidGroupEnum.ApplicationPolicy;
                    break;
                }
            } catch {
                FriendlyName      = String.Empty;
                Value             = String.Empty;
                OidGroup          = OidGroupEnum.AllGroups;
                DistinguishedName = String.Empty;
            }
            if (!found)
            {
                initializeLocal(oid, group);
            }
        }