Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 59

Как получить срок действия пароля в LDAP?

03.10.2022, 11:44. Показов 1740. Ответов 8
Метки ldap (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Подскажите пожалуйста как можно получить дату окончания пароля пользователя изпользую код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
        private void Proverit_Click(object sender, EventArgs e)
        {
            DirectoryEntry de = new DirectoryEntry("LDAP://yuf.energo.gazprom.ru");
            DirectorySearcher ds = new DirectorySearcher(de);
            ds.Filter = "(SAMAccountName=" + textBox2.Text + ")";
            SearchResult result = ds.FindOne();
            if (result != null)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Name");
                dt.Columns.Add("EmailID");
                dt.Columns.Add("PosledniiVhod");
                DataRow dr = dt.NewRow();
 
                DirectoryEntry entry = result.GetDirectoryEntry();
 
                if (entry.Properties["cn"].Count > 0)
                {
                    dr["Name"] = entry.Properties["cn"][0].ToString();
                }
                else
                    dr["Name"] = "";
 
                if (entry.Properties["mail"].Count > 0)
                {
                    dr["EmailID"] = entry.Properties["mail"][0].ToString();
                }
                else
                    dr["EmailID"] = "";
 
                if (entry.Properties["pwdChangedTime[0]"].Count > 0)
                {
                    dr["PosledniiVhod"] = entry.Properties["pwdChangedTime"][0].ToString();
                }
                else
                {
                    dr["PosledniiVhod"] = "";
                }
                dt.Rows.Add(dr);
                dataGridView1.DataSource = dt;
            }
        }
В место pwdChangedTime пробовал значения: Modified, modifyTimeStamp но эти значения пустые, хотя в выгрузке с АД они заполнены. Как пожно получить дату окончания пароля или дату изменения пароля и прибавить к ней срок действия?

P.S. Хочу в LDAP реализовать аналог команды PowerShell "net user i.ivanov /domain"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.10.2022, 11:44
Ответы с готовыми решениями:

Изменить срок действия запроса пароля
Всем привет) Есть такой вопрос. Я хочу создать директорию, доступ к которой будет только у рута или только у текущего пользователя по...

Задайте срок действия пароля командой usermod
Задайте срок действия пароля пользователю user2 на месяц вперед (командой usermod).

Выбрать срок действия пароля не ограничен, через командную строку
Здравствуйте, хочу сделать так, чтобы через командную строку можно было ставить галочку в Выбрать срок действия пароля не ограничен у...

8
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
03.10.2022, 20:00
А какие значения присутствуют в entry.Properties?
0
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 59
04.10.2022, 09:23  [ТС]
А вот с этим проблема. Пишу на 1м компьютере, а тестировать приходится на другом. Поэтому не могу в отладчике посмотреть. Но имя и почту выводит. А pwdChangedTime пробовал через MessageBox выводить, расценивает как пустое значение (отрабатывает код):
C#
1
2
3
4
                else
                {
                    dr["PosledniiVhod"] = "";
                }
0
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,690
04.10.2022, 11:52
Цитата Сообщение от Stegoman Посмотреть сообщение
Пишу на 1м компьютере, а тестировать приходится на другом
Ну так используйте remote debugger, проект будет запущен на удаленном ПК, а дебажить будите на своем
0
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 59
04.10.2022, 14:01  [ТС]
Компы ни как не связаны между собой. В разных сетях.

Добавлено через 35 минут
Переделал код на:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
       private void Proverit_Click(object sender, EventArgs e)
        {
            string domainAndUsername = string.Empty;
            string domain = string.Empty;
            string userName = string.Empty;
            string passWord = string.Empty;
            AuthenticationTypes at = AuthenticationTypes.Anonymous;
            StringBuilder sb = new StringBuilder();
 
            domain = @"LDAP://мой домен";
            userName = "admin";
            passWord = "123456";
            at = AuthenticationTypes.Secure;
 
            DirectoryEntry entry = new DirectoryEntry(
                        domain, userName, passWord, at);
 
            DirectorySearcher mySearcher = new DirectorySearcher(entry);
 
            SearchResultCollection results;
            string filter = "maxPwdAge=*";
            mySearcher.Filter = filter;
 
            results = mySearcher.FindAll();
            long maxDays = 0;
            if (results.Count >= 1)
            {
                Int64 maxPwdAge = (Int64)results[0].Properties["maxPwdAge"][0];
                maxDays = maxPwdAge / -864000000000;
                MessageBox.Show("maxPwdAge= " + maxPwdAge.ToString());
                MessageBox.Show("maxDays= " + maxDays.ToString());
            }
 
            DirectoryEntry entryUser = new DirectoryEntry(
                        domainAndUsername, userName, passWord, at);
            mySearcher = new DirectorySearcher(entryUser);
 
            results = mySearcher.FindAll();
            long daysLeft = 0;
            if (results.Count >= 1)
            {
                MessageBox.Show("results.Count= " + results.Count.ToString());
                //Int64 pwdLastSets = (Int64)results[0].Properties["pwdLastSet"][0];
                //MessageBox.Show("pwdLastSet[0]= " + pwdLastSets.ToString());
                Int64 Modifieds = (Int64)results[0].Properties["Modified"][0];
                MessageBox.Show("Modified= " + Modifieds.ToString());
                var lastChanged = results[0].Properties["pwdLastSet"][0];
                MessageBox.Show("lastChanged= " + lastChanged.ToString());
                daysLeft = maxDays - DateTime.Today.Subtract(
                        DateTime.FromFileTime((long)lastChanged)).Days;
            }
            MessageBox.Show(daysLeft.ToString());
        }
теперь здесь:
C#
1
                Int64 pwdLastSets = (Int64)results[0].Properties["pwdLastSet"][0];
и здесь:
C#
1
                Int64 Modifieds = (Int64)results[0].Properties["Modified"][0];
ругается на:
System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
в System.Collections.ArrayList.get_Item(In t32 index)
в System.DirectoryServices.ResultPropertyV alueCollection.get_Item(Int32 index)
в Role.UserPass.Proverit_Click(Object sender, EventArgs e) в C:\Users\Admin\source\repos\Role.GitFlic \Role\Role\UserPass.cs:строка 83
в System.Windows.Forms.Control.OnClick(Eve ntArgs e)
в System.Windows.Forms.Button.OnClick(Even tArgs e)
в System.Windows.Forms.Button.OnMouseUp(Mo useEventArgs mevent)
в System.Windows.Forms.Control.WmMouseUp(M essage& m, MouseButtons button, Int32 clicks)
в System.Windows.Forms.Control.WndProc(Mes sage& m)
в System.Windows.Forms.ButtonBase.WndProc( Message& m)
в System.Windows.Forms.Button.WndProc(Mess age& m)
в System.Windows.Forms.Control.ControlNati veWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNati veWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
04.10.2022, 21:11
Stegoman, а если сделать энумерацию и вывести все в MessageBox?
0
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 59
07.10.2022, 14:26  [ТС]
Получилось сделать следующим образом.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
private void Proverit_Click(object sender, EventArgs e)
        {
            {
                DirectoryEntry de = new DirectoryEntry("LDAP://домен", "логин", "пароль");
                DirectorySearcher ds = new DirectorySearcher(de);
                ds.Filter = "(SAMAccountName=" + textBox2.Text + ")";
                SearchResult result = ds.FindOne();
                if (result != null)
                {
                    dataGridView1.RowCount = 10;
                    dataGridView1.ColumnCount = 2;
                    dataGridView1[0, 0].Value = "Имя пользователя";
                    dataGridView1[0, 1].Value = "Полное имя";
                    dataGridView1[0, 2].Value = "Почта";
                    dataGridView1[0, 3].Value = "Пароль задан";
                    
                    DirectoryEntry entry = result.GetDirectoryEntry();
 
                    if (entry.Properties["sAMAccountName"].Count > 0)
                    {
                        dataGridView1.Rows[0].Cells[1].Value = entry.Properties["sAMAccountName"][0].ToString();
                    }
                    else
                    {
                        dataGridView1.Rows[0].Cells[1].Value = "";
                    }
 
                    if (entry.Properties["cn"].Count > 0)//Полное имя
                    {
                        dataGridView1.Rows[1].Cells[1].Value = entry.Properties["cn"][0].ToString();
                    }
                    else
                    {
                        dataGridView1.Rows[1].Cells[1].Value = ""; 
                    }
 
                    if (entry.Properties["mail"].Count > 0)//Почта
                    {
                        dataGridView1.Rows[2].Cells[1].Value = entry.Properties["mail"][0].ToString();
                    }
                    else
                    {
                        dataGridView1.Rows[2].Cells[1].Value = "";
                    }
 
                    if (entry.Properties["whenChanged"].Count > 0)//Пароль задан
                    {
                        dataGridView1.Rows[3].Cells[1].Value = entry.Properties["whenChanged"][0].ToString();
                    }
                    else
                    {
                        dataGridView1.Rows[3].Cells[1].Value = "";
                    }
 
                }
            }
        }
pwdChangedTime и Modified пустые и были.
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
07.10.2022, 16:35
Stegoman, название свойств найдены методом угадывания?
0
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 59
10.10.2022, 09:27  [ТС]
Нет. Через PowerShell выгрузил всех пользователей с их свойствами и там посмотрел все свойства и увидел имена свойств с паролем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.10.2022, 09:27
Помогаю со студенческими работами здесь

Можно ли сделать так, чтобы срок действия пароля истекал в определенное время?
Windows Server 2008 R2 Enterptise. Можно ли сделать так, чтобы у пользователей домена срок действия пароля истекал в определенное время дня...

Вывод списка пользователей, у которых в ближайшее время истечёт срок действия пароля
Привет всем. Можно ли написать скрипт, который выводил бы список пользователей, у которых в ближайшее время истечет срок действия пароля?

Рассчитать минимальный срок действия пароля, при котором обеспечивается требуемый уровень надежности
Задача Определить мощность пространства паролей, обеспечивающую требуемый уровень надежности парольной защиты (вероятность вскрытия 10-4)...

"Запретить смену пароля пользователем" и "Срок действия пароля не ограничен"
Добрый день. Скрипт добавления пользователя в PowerShell. $objOU="LDAP://CN=Users,DC=first,DC=control,DC=com" ...

Минимальный срок действия пароля, при котором обеспечивается требуемый уровень надежности парольной защиты
Рассчитать минимальный срок действия пароля, при котором обеспечивается требуемый уровень надежности парольной защиты. Исходные данные: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru