コード例 #1
0
 private static DirectorySearcher DirectorySearcher(
     string loginId, string password, ParameterAccessor.Parts.Ldap ldap)
 {
     return(new DirectorySearcher(loginId != null && password != null
         ? new DirectoryEntry(ldap.LdapSearchRoot, loginId, password)
         : new DirectoryEntry(ldap.LdapSearchRoot)));
 }
コード例 #2
0
 public static string NetBiosName(
     Context context, LdapEntry entry, ParameterAccessor.Parts.Ldap ldap)
 {
     return(ldap.NetBiosDomainName + "\\" + entry.Property(
                context: context,
                name: "sAMAccountName"));
 }
コード例 #3
0
        private static void Sync(
            Context context,
            ParameterAccessor.Parts.Ldap ldap,
            string pattern,
            DateTime synchronizedTime)
        {
            var logs = new Logs()
            {
                new Log("pattern", pattern)
            };

            try
            {
                var directorySearcher = DirectorySearcher(
                    ldap.LdapSyncUser,
                    ldap.LdapSyncPassword,
                    ldap);
                directorySearcher.Filter   = pattern;
                directorySearcher.PageSize = 1000;
                var results = directorySearcher.FindAll();
                logs.Add("results", results.Count.ToString());
                foreach (SearchResult result in results)
                {
                    DirectoryEntry entry = result.Entry(
                        ldap.LdapSyncUser,
                        ldap.LdapSyncPassword);
                    if (Enabled(entry, ldap))
                    {
                        logs.Add("entry", entry.Path);
                        if (Authentications.Windows())
                        {
                            UpdateOrInsert(
                                context: context,
                                loginId: NetBiosName(
                                    context: context,
                                    entry: entry,
                                    ldap: ldap),
                                entry: entry,
                                ldap: ldap,
                                synchronizedTime: synchronizedTime);
                        }
                        else
                        {
                            UpdateOrInsert(
                                context: context,
                                loginId: entry.Property(
                                    context: context,
                                    name: ldap.LdapSearchProperty),
                                entry: entry,
                                ldap: ldap,
                                synchronizedTime: synchronizedTime);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                new SysLogModel(context: context, e: e, logs: logs);
            }
        }
コード例 #4
0
 public static string NetBiosName(
     Context context, SearchResult result, ParameterAccessor.Parts.Ldap ldap)
 {
     return(ldap.NetBiosDomainName + "\\" + result.Property(
                context: context,
                name: "sAMAccountName"));
 }
コード例 #5
0
        private static void UpdateOrInsert(
            string loginId, DirectoryEntry entry, ParameterAccessor.Parts.Ldap ldap)
        {
            var deptCode    = entry.Property(ldap.LdapDeptCode, ldap.LdapDeptCodePattern);
            var deptName    = entry.Property(ldap.LdapDeptName, ldap.LdapDeptNamePattern);
            var deptExists  = !deptCode.IsNullOrEmpty() && !deptName.IsNullOrEmpty();
            var userCode    = entry.Property(ldap.LdapUserCode, ldap.LdapUserCodePattern);
            var name        = Name(loginId, entry, ldap);
            var mailAddress = entry.Property(ldap.LdapMailAddress, ldap.LdapMailAddressPattern);
            var statements  = new List <SqlStatement>();

            if (deptExists)
            {
                statements.Add(Rds.UpdateOrInsertDepts(
                                   param: Rds.DeptsParam()
                                   .TenantId(ldap.LdapTenantId)
                                   .DeptCode(deptCode)
                                   .DeptName(deptName),
                                   where : Rds.DeptsWhere().DeptCode(deptCode)));
            }
            statements.Add(Rds.UpdateOrInsertUsers(
                               param: Rds.UsersParam()
                               .TenantId(ldap.LdapTenantId)
                               .LoginId(loginId)
                               .UserCode(userCode)
                               .Name(name)
                               .DeptId(
                                   sub: Rds.SelectDepts(
                                       column: Rds.DeptsColumn().DeptId(),
                                       where : Rds.DeptsWhere().DeptCode(deptCode)),
                                   _using: deptExists)
                               .DeptId(0, _using: !deptExists),
                               where : Rds.UsersWhere().LoginId(loginId)));
            if (!mailAddress.IsNullOrEmpty())
            {
                statements.Add(Rds.PhysicalDeleteMailAddresses(
                                   where : Rds.MailAddressesWhere()
                                   .OwnerType("Users")
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))));
                statements.Add(Rds.InsertMailAddresses(
                                   param: Rds.MailAddressesParam()
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))
                                   .OwnerType("Users")
                                   .MailAddress(mailAddress)));
            }
            statements.Add(StatusUtilities.UpdateStatus(
                               StatusUtilities.Types.DeptsUpdated,
                               tenantId: ldap.LdapTenantId));
            statements.Add(StatusUtilities.UpdateStatus(
                               StatusUtilities.Types.UsersUpdated,
                               tenantId: ldap.LdapTenantId));
            Rds.ExecuteNonQuery(
                transactional: true,
                statements: statements.ToArray());
        }
コード例 #6
0
        private static bool Enabled(SearchResult result, ParameterAccessor.Parts.Ldap ldap)
        {
            var accountDisabled = 2;

            return(!ldap.LdapExcludeAccountDisabled ||
                   !result.Properties.Contains("UserAccountControl") ||
                   (result.Properties["UserAccountControl"].ToLong() & accountDisabled) == 0);
        }
コード例 #7
0
        private static bool Enabled(DirectoryEntry entry, ParameterAccessor.Parts.Ldap ldap)
        {
            var accountDisabled = 2;

            return
                (!ldap.LdapExcludeAccountDisabled ||
                 (entry.Properties["UserAccountControl"].Value.ToLong() & accountDisabled) == 0);
        }
コード例 #8
0
        private static bool Enabled(LdapEntry entry, ParameterAccessor.Parts.Ldap ldap)
        {
            var accountDisabled = 2;

            return
                (!ldap.LdapExcludeAccountDisabled ||
                 (entry.GetAttribute("UserAccountControl")?.StringValue.ToLong() & accountDisabled) == 0);
        }
コード例 #9
0
        private static string Name(
            string loginId, DirectoryEntry entry, ParameterAccessor.Parts.Ldap ldap)
        {
            var name = "{0} {1}".Params(
                entry.Property(ldap.LdapLastName, ldap.LdapLastNamePattern),
                entry.Property(ldap.LdapFirstName, ldap.LdapFirstNamePattern));

            return(name != " "
                ? name.Trim()
                : loginId);
        }
コード例 #10
0
        private static void Sync(
            Context context,
            ParameterAccessor.Parts.Ldap ldap,
            string pattern,
            DateTime synchronizedTime)
        {
            var logs = new Logs()
            {
                new Log("pattern", pattern)
            };

            try
            {
                using (var con = LdapConnection(
                           ldap.LdapSyncUser,
                           ldap.LdapSyncPassword,
                           ldap))
                {
                    var results = con.Search(
                        con.DN(ldap),
                        Novell.Directory.Ldap.LdapConnection.ScopeSub,
                        pattern,
                        null,
                        false,
                        new LdapSearchConstraints()
                    {
                        MaxResults = 0, ReferralFollowing = true
                    });
                    logs.Add("results", results.Count.ToString());
                    while (results.HasMore())
                    {
                        var entry = results.Next();
                        if (Enabled(entry, ldap))
                        {
                            logs.Add("entry", entry.Dn);
                            UpdateOrInsert(
                                context: context,
                                entry: entry,
                                ldap: ldap,
                                synchronizedTime: synchronizedTime);
                        }
                    }
                }
            }
            catch (LdapException le)
            {
                logs.Add(new Log("LdapErrorMessage", le.LdapErrorMessage?.TrimEnd('\0')));
                new SysLogModel(context: context, e: le, logs: logs);
            }
            catch (Exception e)
            {
                new SysLogModel(context: context, e: e, logs: logs);
            }
        }
コード例 #11
0
        private static void UpdateOrInsert(
            Context context,
            LdapEntry entry,
            ParameterAccessor.Parts.Ldap ldap,
            DateTime synchronizedTime)
        {
            var deptCode = entry.Property(
                context: context,
                name: ldap.LdapDeptCode,
                pattern: ldap.LdapDeptCodePattern);
            var deptName = entry.Property(
                context: context,
                name: ldap.LdapDeptName,
                pattern: ldap.LdapDeptNamePattern);
            var userCode = entry.Property(
                context: context,
                name: ldap.LdapUserCode,
                pattern: ldap.LdapUserCodePattern);
            var loginId = LoginId(
                context: context,
                ldap: ldap,
                entry: entry);
            var name = Name(
                context: context,
                loginId: loginId,
                entry: entry,
                ldap: ldap);
            var mailAddress = entry.Property(
                context: context,
                name: ldap.LdapMailAddress,
                pattern: ldap.LdapMailAddressPattern);
            var attributes = ldap.LdapExtendedAttributes?
                             .Select(attribute =>
                                     new KeyValuePair <LdapExtendedAttribute, string>(
                                         attribute,
                                         entry.Property(
                                             context: context,
                                             name: attribute.Name,
                                             pattern: attribute.Pattern)))
                             .ToList();

            UpdateOrInsert(
                context: context,
                loginId: loginId,
                deptCode: deptCode,
                deptName: deptName,
                userCode: userCode,
                name: name,
                mailAddress: mailAddress,
                attributes: attributes,
                ldap: ldap,
                synchronizedTime: synchronizedTime);
        }
コード例 #12
0
        private static void Sync(
            Context context,
            ParameterAccessor.Parts.Ldap ldap,
            string pattern,
            DateTime synchronizedTime)
        {
            var logs = new Logs()
            {
                new Log("pattern", pattern)
            };

            try
            {
                var directorySearcher = DirectorySearcher(
                    ldap.LdapSyncUser,
                    ldap.LdapSyncPassword,
                    ldap);
                directorySearcher.Filter = pattern;
                if (ldap.LdapSyncPageSize == 0)
                {
                    directorySearcher.PageSize = 1000;
                }
                else if (ldap.LdapSyncPageSize > 0)
                {
                    directorySearcher.PageSize = ldap.LdapSyncPageSize;
                }
                var results = directorySearcher.FindAll();
                logs.Add("results", results.Count.ToString());
                foreach (SearchResult result in results)
                {
                    if (Enabled(result, ldap))
                    {
                        logs.Add("result", result.Path);
                        UpdateOrInsert(
                            context: context,
                            result: result,
                            ldap: ldap,
                            synchronizedTime: synchronizedTime);
                    }
                }
            }
            catch (DirectoryServicesCOMException e)
            {
                new SysLogModel(
                    context: context,
                    extendedErrorMessage: e.ExtendedErrorMessage,
                    e: e);
            }
            catch (Exception e)
            {
                new SysLogModel(context: context, e: e, logs: logs);
            }
        }
コード例 #13
0
 private static DirectorySearcher DirectorySearcher(
     string loginId, string password, ParameterAccessor.Parts.Ldap ldap)
 {
     if (!Enum.TryParse(ldap.LdapAuthenticationType, out AuthenticationTypes type) ||
         !Enum.IsDefined(typeof(AuthenticationTypes), type))
     {
         type = AuthenticationTypes.Secure;
     }
     return(new DirectorySearcher(loginId == null || password == null
         ? new DirectoryEntry(ldap.LdapSearchRoot)
         : new DirectoryEntry(ldap.LdapSearchRoot, loginId, password, type)));
 }
コード例 #14
0
        private static string LoginId(
            Context context,
            ParameterAccessor.Parts.Ldap ldap,
            LdapEntry entry)
        {
            var loginId = Authentications.Windows(context: context)
                ? NetBiosName(
                context: context,
                entry: entry,
                ldap: ldap)
                : entry.Property(
                context: context,
                name: ldap.LdapSearchProperty);

            return(loginId);
        }
コード例 #15
0
        private static string LoginId(
            Context context,
            ParameterAccessor.Parts.Ldap ldap,
            SearchResult result)
        {
            var loginId = Authentications.Windows(context: context)
                ? NetBiosName(
                context: context,
                result: result,
                ldap: ldap)
                : result.Property(
                context: context,
                name: ldap.LdapSearchProperty);

            return(loginId);
        }
コード例 #16
0
        private static LdapConnection LdapConnection(
            string loginId, string password, ParameterAccessor.Parts.Ldap ldap)
        {
            var url = new LdapUrl(ldap.LdapSearchRoot);
            var con = new LdapConnection();

            con.Connect(url.Host, url.Port);
            if (loginId != null && password != null)
            {
                con.Bind(loginId, password);
            }
            else
            {
                con.Bind(null, null);
            }
            return(con);
        }
コード例 #17
0
        private static string Name(
            Context context,
            string loginId,
            LdapEntry entry,
            ParameterAccessor.Parts.Ldap ldap)
        {
            var name = "{0} {1}".Params(
                entry.Property(
                    context: context,
                    name: ldap.LdapLastName,
                    pattern: ldap.LdapLastNamePattern),
                entry.Property(
                    context: context,
                    name: ldap.LdapFirstName,
                    pattern: ldap.LdapFirstNamePattern));

            return(name != " "
                ? name.Trim()
                : loginId);
        }
コード例 #18
0
        private static bool Enabled(LdapEntry entry, ParameterAccessor.Parts.Ldap ldap)
        {
            var accountDisabled = 2;

            if (!ldap.LdapExcludeAccountDisabled)
            {
                return(true);
            }
            if (entry.GetAttributeSet().Any(o => o.Key == "userAccountControl"))
            {
                var userAccountControl = entry.GetAttribute("userAccountControl")?.StringValue;
                return(userAccountControl.IsNullOrEmpty()
                    ? true
                    : (userAccountControl.ToLong() & accountDisabled) == 0);
            }
            else
            {
                return(true);
            }
        }
コード例 #19
0
ファイル: Ldap.cs プロジェクト: wagatsumaw/Implem.Pleasanter
        private static void UpdateOrInsert(
            Context context,
            string loginId,
            SearchResult result,
            ParameterAccessor.Parts.Ldap ldap,
            DateTime synchronizedTime)
        {
            var deptCode = result.Property(
                context: context,
                name: ldap.LdapDeptCode,
                pattern: ldap.LdapDeptCodePattern);
            var deptName = result.Property(
                context: context,
                name: ldap.LdapDeptName,
                pattern: ldap.LdapDeptNamePattern);
            var deptExists   = !deptCode.IsNullOrEmpty() && !deptName.IsNullOrEmpty();
            var deptSettings = !ldap.LdapDeptCode.IsNullOrEmpty() && !ldap.LdapDeptName.IsNullOrEmpty();
            var userCode     = result.Property(
                context: context,
                name: ldap.LdapUserCode,
                pattern: ldap.LdapUserCodePattern);
            var name = Name(
                context: context,
                loginId: loginId,
                result: result,
                ldap: ldap);
            var mailAddress = result.Property(
                context: context,
                name: ldap.LdapMailAddress,
                pattern: ldap.LdapMailAddressPattern);
            var statements = new List <SqlStatement>();

            if (deptExists)
            {
                statements.Add(Rds.UpdateOrInsertDepts(
                                   param: Rds.DeptsParam()
                                   .TenantId(ldap.LdapTenantId)
                                   .DeptCode(deptCode)
                                   .DeptName(deptName),
                                   where : Rds.DeptsWhere().DeptCode(deptCode)));
            }
            var param = Rds.UsersParam()
                        .TenantId(ldap.LdapTenantId)
                        .LoginId(loginId)
                        .UserCode(userCode)
                        .Name(name)
                        .DeptId(
                sub: Rds.SelectDepts(
                    column: Rds.DeptsColumn().DeptId(),
                    where : Rds.DeptsWhere().DeptCode(deptCode)),
                _using: deptExists)
                        .DeptId(0, _using: deptSettings && !deptExists)
                        .LdapSearchRoot(ldap.LdapSearchRoot)
                        .SynchronizedTime(synchronizedTime);

            ldap.LdapExtendedAttributes?.ForEach(attribute =>
                                                 param.Add(
                                                     $"[Users].[{attribute.ColumnName}]",
                                                     attribute.ColumnName,
                                                     result.Property(
                                                         context: context,
                                                         name: attribute.Name,
                                                         pattern: attribute.Pattern)));
            statements.Add(Rds.UpdateOrInsertUsers(
                               param: param,
                               where : Rds.UsersWhere().LoginId(loginId),
                               addUpdatorParam: false,
                               addUpdatedTimeParam: false));
            if (!mailAddress.IsNullOrEmpty())
            {
                statements.Add(Rds.PhysicalDeleteMailAddresses(
                                   where : Rds.MailAddressesWhere()
                                   .OwnerType("Users")
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))));
                statements.Add(Rds.InsertMailAddresses(
                                   param: Rds.MailAddressesParam()
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(loginId)))
                                   .OwnerType("Users")
                                   .MailAddress(mailAddress)));
            }
            var ss = new SiteSettings();

            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: ldap.LdapTenantId, type: StatusUtilities.Types.DeptsUpdated));
            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: ldap.LdapTenantId, type: StatusUtilities.Types.UsersUpdated));
            Rds.ExecuteNonQuery(
                context: context,
                transactional: true,
                statements: statements.ToArray());
        }
コード例 #20
0
 public static string NetBiosName(DirectoryEntry entry, ParameterAccessor.Parts.Ldap ldap)
 {
     return(ldap.NetBiosDomainName + "\\" + entry.Property("sAMAccountName", null));
 }
コード例 #21
0
 private static string DN(this LdapConnection con, ParameterAccessor.Parts.Ldap ldap)
 {
     return((new LdapUrl(ldap.LdapSearchRoot)).GetDn());
 }
コード例 #22
0
        private static void Sync(
            Context context,
            ParameterAccessor.Parts.Ldap ldap,
            string pattern,
            DateTime synchronizedTime)
        {
            var logs = new Logs()
            {
                new Log("pattern", pattern)
            };

            try
            {
                var directorySearcher = DirectorySearcher(
                    ldap.LdapSyncUser,
                    ldap.LdapSyncPassword,
                    ldap);
                directorySearcher.Filter   = pattern;
                directorySearcher.PageSize = 1000;
                var results = directorySearcher.FindAll();
                logs.Add("results", results.Count.ToString());
                foreach (SearchResult result in results)
                {
                    DirectoryEntry entry = result.Entry(
                        ldap.LdapSyncUser,
                        ldap.LdapSyncPassword);
                    if (Enabled(entry, ldap))
                    {
                        logs.Add("entry", entry.Path);
                        if (Authentications.Windows())
                        {
                            UpdateOrInsert(
                                context: context,
                                loginId: NetBiosName(
                                    context: context,
                                    entry: entry,
                                    ldap: ldap),
                                entry: entry,
                                ldap: ldap,
                                synchronizedTime: synchronizedTime);
                        }
                        else
                        {
                            UpdateOrInsert(
                                context: context,
                                loginId: entry.Property(
                                    context: context,
                                    name: ldap.LdapSearchProperty),
                                entry: entry,
                                ldap: ldap,
                                synchronizedTime: synchronizedTime);
                        }
                    }
                }
                if (ldap.AutoDisable)
                {
                    Rds.ExecuteNonQuery(
                        context: context,
                        statements: Rds.UpdateUsers(
                            param: Rds.UsersParam().Disabled(true),
                            where : Rds.UsersWhere()
                            .Disabled(false)
                            .LdapSearchRoot(ldap.LdapSearchRoot)
                            .SynchronizedTime(_operator: " is not null")
                            .SynchronizedTime(synchronizedTime, _operator: "<>")));
                }
                if (ldap.AutoEnable)
                {
                    Rds.ExecuteNonQuery(
                        context: context,
                        statements: Rds.UpdateUsers(
                            param: Rds.UsersParam().Disabled(false),
                            where : Rds.UsersWhere()
                            .Disabled(true)
                            .LdapSearchRoot(ldap.LdapSearchRoot)
                            .SynchronizedTime(_operator: " is not null")
                            .SynchronizedTime(synchronizedTime)));
                }
            }
            catch (Exception e)
            {
                new SysLogModel(context: context, e: e, logs: logs);
            }
        }
コード例 #23
0
 public static string NetBiosName(DirectoryEntry entry, ParameterAccessor.Parts.Ldap ldap)
 {
     return(ldap.NetBiosDomainName + System.IO.Path.DirectorySeparatorChar + entry.Property("sAMAccountName", null));
 }
コード例 #24
0
        private static void UpdateOrInsert(
            Context context,
            string loginId,
            string deptCode,
            string deptName,
            string userCode,
            string name,
            string mailAddress,
            List <KeyValuePair <LdapExtendedAttribute, string> > attributes,
            ParameterAccessor.Parts.Ldap ldap,
            DateTime synchronizedTime)
        {
            var deptExists   = !deptCode.IsNullOrEmpty() && !deptName.IsNullOrEmpty();
            var deptSettings = !ldap.LdapDeptCode.IsNullOrEmpty() && !ldap.LdapDeptName.IsNullOrEmpty();
            var statements   = new List <SqlStatement>();

            if (deptExists)
            {
                statements.Add(Rds.UpdateOrInsertDepts(
                                   param: Rds.DeptsParam()
                                   .TenantId(ldap.LdapTenantId)
                                   .DeptCode(deptCode)
                                   .DeptName(deptName),
                                   where : Rds.DeptsWhere().DeptCode(deptCode)));
            }
            var exists = Rds.ExecuteScalar_int(
                context: context,
                statements: Rds.SelectUsers(
                    column: Rds.UsersColumn().UsersCount(),
                    where : Rds.UsersWhere().LoginId(
                        value: context.Sqls.EscapeValue(loginId),
                        _operator: context.Sqls.LikeWithEscape))) == 1;
            var param = Rds.UsersParam()
                        .TenantId(ldap.LdapTenantId)
                        .LoginId(loginId, _using: !exists)
                        .UserCode(userCode)
                        .Name(name)
                        .DeptId(
                sub: Rds.SelectDepts(
                    column: Rds.DeptsColumn().DeptId(),
                    where : Rds.DeptsWhere().DeptCode(deptCode)),
                _using: deptExists)
                        .DeptId(0, _using: deptSettings && !deptExists)
                        .LdapSearchRoot(ldap.LdapSearchRoot)
                        .SynchronizedTime(synchronizedTime);

            attributes?.ForEach(attributeAndName =>
                                param.Add(
                                    $"\"Users\".\"{attributeAndName.Key.ColumnName}\"",
                                    attributeAndName.Key.ColumnName,
                                    attributeAndName.Value));
            statements.Add(Rds.UpdateOrInsertUsers(
                               param: param,
                               where : Rds.UsersWhere().LoginId(
                                   value: context.Sqls.EscapeValue(loginId),
                                   _operator: context.Sqls.LikeWithEscape),
                               addUpdatorParam: false,
                               addUpdatedTimeParam: false));
            if (!mailAddress.IsNullOrEmpty())
            {
                statements.Add(Rds.PhysicalDeleteMailAddresses(
                                   where : Rds.MailAddressesWhere()
                                   .OwnerType("Users")
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(
                                                    value: context.Sqls.EscapeValue(loginId),
                                                    _operator: context.Sqls.LikeWithEscape)))));
                statements.Add(Rds.InsertMailAddresses(
                                   param: Rds.MailAddressesParam()
                                   .OwnerId(sub: Rds.SelectUsers(
                                                column: Rds.UsersColumn().UserId(),
                                                where : Rds.UsersWhere().LoginId(
                                                    value: context.Sqls.EscapeValue(loginId),
                                                    _operator: context.Sqls.LikeWithEscape)))
                                   .OwnerType("Users")
                                   .MailAddress(mailAddress)));
            }
            var ss = new SiteSettings();

            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: ldap.LdapTenantId, type: StatusUtilities.Types.DeptsUpdated));
            statements.Add(StatusUtilities.UpdateStatus(
                               tenantId: ldap.LdapTenantId, type: StatusUtilities.Types.UsersUpdated));
            Repository.ExecuteNonQuery(
                context: context,
                transactional: true,
                statements: statements.ToArray());
        }
コード例 #25
0
        private static void Sync(
            Context context,
            ParameterAccessor.Parts.Ldap ldap,
            string pattern,
            DateTime synchronizedTime)
        {
            var logs = new Logs()
            {
                new Log("pattern", pattern)
            };

            try
            {
                using (var con = LdapConnection(
                           ldap.LdapSyncUser,
                           ldap.LdapSyncPassword,
                           ldap))
                {
                    var results = con.Search(
                        con.DN(ldap),
                        Novell.Directory.Ldap.LdapConnection.SCOPE_SUB,
                        pattern,
                        null,
                        false,
                        new LdapSearchConstraints()
                    {
                        MaxResults = 1000
                    });
                    logs.Add("results", results.Count.ToString());
                    while (results.hasMore())
                    {
                        var entry = results.next();
                        if (Enabled(entry, ldap))
                        {
                            logs.Add("entry", entry.DN);
                            if (Authentications.Windows(context: context))
                            {
                                UpdateOrInsert(
                                    context: context,
                                    loginId: NetBiosName(
                                        context: context,
                                        entry: entry,
                                        ldap: ldap),
                                    entry: entry,
                                    ldap: ldap,
                                    synchronizedTime: synchronizedTime);
                            }
                            else
                            {
                                UpdateOrInsert(
                                    context: context,
                                    loginId: entry.Property(
                                        context: context,
                                        name: ldap.LdapSearchProperty),
                                    entry: entry,
                                    ldap: ldap,
                                    synchronizedTime: synchronizedTime);
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                new SysLogModel(context: context, e: e, logs: logs);
            }
        }