<i id='jmDQm'><tr id='jmDQm'><dt id='jmDQm'><q id='jmDQm'><span id='jmDQm'><b id='jmDQm'><form id='jmDQm'><ins id='jmDQm'></ins><ul id='jmDQm'></ul><sub id='jmDQm'></sub></form><legend id='jmDQm'></legend><bdo id='jmDQm'><pre id='jmDQm'><center id='jmDQm'></center></pre></bdo></b><th id='jmDQm'></th></span></q></dt></tr></i><div id='jmDQm'><tfoot id='jmDQm'></tfoot><dl id='jmDQm'><fieldset id='jmDQm'></fieldset></dl></div>

      1. <tfoot id='jmDQm'></tfoot>

          <bdo id='jmDQm'></bdo><ul id='jmDQm'></ul>

        <small id='jmDQm'></small><noframes id='jmDQm'>

      2. <legend id='jmDQm'><style id='jmDQm'><dir id='jmDQm'><q id='jmDQm'></q></dir></style></legend>

        无法使用内容同步操作 (syncrepl) 从 OpenLDAP 服务器获取已删除的项目

        Can#39;t get deleted items from OpenLDAP Server using Content Synchronization Operation (syncrepl)(无法使用内容同步操作 (syncrepl) 从 OpenLDAP 服务器获取已删除的项目)

                <bdo id='G8y8S'></bdo><ul id='G8y8S'></ul>

                  <tbody id='G8y8S'></tbody>

                <small id='G8y8S'></small><noframes id='G8y8S'>

              • <i id='G8y8S'><tr id='G8y8S'><dt id='G8y8S'><q id='G8y8S'><span id='G8y8S'><b id='G8y8S'><form id='G8y8S'><ins id='G8y8S'></ins><ul id='G8y8S'></ul><sub id='G8y8S'></sub></form><legend id='G8y8S'></legend><bdo id='G8y8S'><pre id='G8y8S'><center id='G8y8S'></center></pre></bdo></b><th id='G8y8S'></th></span></q></dt></tr></i><div id='G8y8S'><tfoot id='G8y8S'></tfoot><dl id='G8y8S'><fieldset id='G8y8S'></fieldset></dl></div>
                <tfoot id='G8y8S'></tfoot>

              • <legend id='G8y8S'><style id='G8y8S'><dir id='G8y8S'><q id='G8y8S'></q></dir></style></legend>
                  本文介绍了无法使用内容同步操作 (syncrepl) 从 OpenLDAP 服务器获取已删除的项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我在 Ubuntu 19.04 VM 上设置了我的 OpenLDAP 服务器并允许复制(使用本教程:https://help.ubuntu.com/lts/serverguide/openldap-server.html#openldap-server-replication).复制的一切似乎都很好.我没有设置消费者服务器,因为我的代码将充当一个,定期拉取修改过的元素.

                  I set up my OpenLDAP server on a Ubuntu 19.04 VM and allowed replication (using this tutorial: https://help.ubuntu.com/lts/serverguide/openldap-server.html#openldap-server-replication). Everything for replication seems ok. I don't have set up a consumer server as my code will act as one, pulling modified elements regularly.

                  已正确检索到修改/添加的条目,但我想删除已删除的项目,但似乎无法正常工作.

                  The modified/added entries are correctly retrieved BUT I want to get deleted items and I can't seem to get it to work.

                  如 RFC https://www.rfc-editor.org/rfc/rfc4533#section-3.3.2,我应该收到一条包含名为syncUUIDs"的属性的同步信息消息

                  As described by the RFC https://www.rfc-editor.org/rfc/rfc4533#section-3.3.2, I should receive a Sync Info Message Containing an attribute named "syncUUIDs"

                  syncUUIDs 包含自上次同步操作以来已从内容中删除的条目和引用的一组 UUID

                  syncUUIDs contain a set of UUIDs of the entries and references that have been deleted from the content since the last Sync Operation

                  我的同步请求控制初始化

                  My Sync Request Control initialization

                  syncRequestValue = BerConverter.Encode("{iob}", new object[] { refreshOnly, cookieSrc, true });
                  testdsrc = new DirectoryControl("1.3.6.1.4.1.4203.1.9.1.1", syncRequestValue, true, true);
                  
                  

                  将控件添加到请求中,然后发送.

                  Adding the control to the request and then send it.

                  request.Controls.Add(testdsrc);
                  connection.SendRequest(request);
                  response = (SearchResponse)connection.SendRequest(request);
                  

                  获取条目,这里我删除了 1 个条目,修改了 1 个并添加了 1 个,我只得到了 2 个条目(添加/修改的条目)

                  Getting the Entries, here I deleted 1 entry, modified 1 and added 1, I only get 2 entries (the added/modified ones)

                  entries = response.Entries;
                  if (response.Entries.Count > 0)
                  {
                      object[] controlvalue = BerConverter.Decode("{Ob}", 
                      response.Controls[0].GetValue());
                      cookieSrc = (byte[])controlvalue[0];
                      var refreshDeletes = (bool)controlvalue[1];
                      File.WriteAllBytes(strFileName, cookieSrc);
                  }
                  

                  你知道它是来自我的 LDAP 服务器的配置还是我的 C# 代码?

                  Do you know if it comes from the configuration of my LDAP server or my code in C#?

                  我不知道:

                  • 我的服务器发送了正确的响应,而 SearchResponse 类不知道如何解释它

                  • 如果我的服务器配置错误并且根本没有发送已删除条目的列表...

                  推荐答案

                  通过在我的 OpenLdap 服务器上添加同步"日志级别,我能够看到发送了具有正确 OID 的中间消息.

                  By adding the "sync" loglevel on my OpenLdap server I was able to see that a Intermediate message with the correct OID was sent.

                  slapd debug  conn=1131 fd=15 ACCEPT from IP=x.x.x.x (IP=0.0.0.0:389)
                  slapd debug  conn=1131 op=0 BIND dn="cn=admin,dc=example,dc=com" method=128
                  slapd debug  conn=1131 op=0 BIND dn="cn=admin,dc=example,dc=com" mech=SIMPLE ssf=0
                  slapd debug  conn=1131 op=0 RESULT tag=97 err=0 text=
                  slapd debug  conn=1131 op=1 SRCH base="dc=example,dc=com" scope=2 deref=0 filter="(objectClass=*)"
                  slapd debug  conn=1131 op=1 SRCH attr=dn objectClass cn displayName
                  **slapd debug  conn=1131 op=1 INTERM oid=1.3.6.1.4.1.4203.1.9.1.4**
                  slapd debug  conn=1131 op=1 ENTRY dn="ou=uni,dc=example,dc=com"
                  slapd debug  syncprov_search_response: cookie=rid=000,csn=20190924091959.141380Z#000000#000#000000
                  slapd debug  conn=1131 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=
                  slapd debug  conn=1131 op=2 UNBIND
                  slapd debug  conn=1131 fd=15 closed
                  

                  通过使用 Perl 脚本和 Perl Net::LDAP 库,我能够看到响应值包含已删除条目的 UUIDS.

                  By using a Perl script and the Perl Net::LDAP library I was able to see that the response value contained the UUIDS of the deleted entries.

                  我现在知道我的服务器已正确配置,但我不知道如何使用 .NET 获取 UUID

                  I know now that my server is correctly configured but I don't know how to get the UUIDs using .NET

                  use Net::LDAP;
                  use Net::LDAP::Control::SyncRequest;
                  use Net::LDAP::Intermediate::SyncInfo;
                  use Net::LDAP::Constant qw(
                   LDAP_SYNC_REFRESH_ONLY
                   LDAP_SYNC_REFRESH_AND_PERSIST
                   LDAP_SUCCESS );
                  use Data::Dumper qw(Dumper);
                  
                  $ldap = Net::LDAP->new( "127.0.0.1:389" ) or die($@);
                  
                  $req = Net::LDAP::Control::SyncRequest->new( mode => LDAP_SYNC_REFRESH_ONLY, cookie => "rid=000,csn=20190912114502.963050Z#000000#000#000000" );
                  my $mesg = $ldap->search(base=> 'dc=example,dc=com',
                                           scope    => 'sub',
                                           control  => [ $req ],
                                           callback => &searchCallback, # call for each entry
                                           filter   => "(objectClass=*)",
                                           attrs    => [ '*']);
                  
                     print "
                  ==========
                  ";
                     print Dumper($mesg);  
                  
                  
                  sub searchCallback {
                    my $message = shift;
                    my $entry = shift;
                    my @controls = $message->control;
                    print Dumper($message);
                    print "
                  ==========
                  ";
                    my $count = scalar(@controls);
                    print "  $count controls in response
                  ";
                    if ( $count == 0 ) {
                      if ($message->isa('Net::LDAP::Intermediate::SyncInfo')) {
                        print "Received Sync Info message
                  ";
                      }
                      return;
                    }
                  
                  
                    if (!defined($controls[0]) ) {
                      print "  control 0 is undefined
                  ";
                      return;
                    }
                  
                    if ($controls[0]->isa('Net::LDAP::Control::SyncState')) {
                      print "Received Sync State Control
                  ";
                      print $entry->dn()."
                  ";
                      #print Dumper($controls[0]->entryUUID);
                      print 'State: '.$controls[0]->state."
                    entryUUID: ".$controls[0]->entryUUID."
                    cookie: ".$controls[0]->cookie."
                  ";
                    } elsif ($controls[0]->isa('Net::LDAP::Control::SyncDone')) {
                      print "Received Sync Done Control
                  ";
                      print '  Cookie: '.$controls[0]->cookie."
                    refreshDeletes: ".$controls[0]->refreshDeletes."
                  ";
                    } else {
                      print Dumper($controls[0]);
                    }
                  }
                  

                  我创建了一个新问题,询问如何使用 .Net 获取同步信息消息.

                  I created a new question asking how to get the Sync Info Message using .Net.

                  这篇关于无法使用内容同步操作 (syncrepl) 从 OpenLDAP 服务器获取已删除的项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Adding and removing users from Active Directory groups in .NET(在 .NET 中的 Active Directory 组中添加和删除用户)
                  set equality in linq(在 linq 中设置相等)
                  HashSet conversion to List(HashSet 转换为 List)
                  How to set timeout for webBrowser navigate event(如何为 webBrowser 导航事件设置超时)
                  Test whether two IEnumerablelt;Tgt; have the same values with the same frequencies(测试两个IEnumerablelt;Tgt;具有相同频率的相同值)
                  How do you determine if two HashSets are equal (by value, not by reference)?(您如何确定两个 HashSet 是否相等(按值,而不是按引用)?)

                  <small id='QRkvG'></small><noframes id='QRkvG'>

                    <tfoot id='QRkvG'></tfoot>

                  • <legend id='QRkvG'><style id='QRkvG'><dir id='QRkvG'><q id='QRkvG'></q></dir></style></legend>
                        <tbody id='QRkvG'></tbody>

                          <i id='QRkvG'><tr id='QRkvG'><dt id='QRkvG'><q id='QRkvG'><span id='QRkvG'><b id='QRkvG'><form id='QRkvG'><ins id='QRkvG'></ins><ul id='QRkvG'></ul><sub id='QRkvG'></sub></form><legend id='QRkvG'></legend><bdo id='QRkvG'><pre id='QRkvG'><center id='QRkvG'></center></pre></bdo></b><th id='QRkvG'></th></span></q></dt></tr></i><div id='QRkvG'><tfoot id='QRkvG'></tfoot><dl id='QRkvG'><fieldset id='QRkvG'></fieldset></dl></div>

                          • <bdo id='QRkvG'></bdo><ul id='QRkvG'></ul>