浏览域中的LDAP服务器

时间:2014-12-12 14:19:39

标签: macos dns ldap

我关注this guide

我使用以下代码在域中显示LDAP服务器:

#include <dns_sd.h>
#include <stdio.h>
#include <pthread.h>

void ResolveCallBack(DNSServiceRef sdRef,
                     DNSServiceFlags flags,
                     uint32_t interfaceIndex,
                     DNSServiceErrorType errorCode,
                     const char                          *fullname,
                     const char                          *hosttarget,
                     uint16_t port,                                   /* In network byte order */
                     uint16_t txtLen,
                     const unsigned char                 *txtRecord,
                     void                                *context) {
}

void BrowserCallBack(DNSServiceRef inServiceRef,
                     DNSServiceFlags inFlags,
                     uint32_t inIFI,
                     DNSServiceErrorType inError,
                     const char* inName,
                     const char* inType,
                     const char* inDomain,
                     void* inContext) {
    DNSServiceErrorType err = DNSServiceResolve(&inServiceRef,
                                                0, // Indicate it's a shared connection.
                                                inIFI,
                                                inName,
                                                inType,
                                                inDomain,
                                                ResolveCallBack,
                                                NULL);
    printf("DNSServiceResolve err = %x, name = %s, type=%s, domain=%s\n",
           err, inName, inType, inDomain);

}

int main() {
    DNSServiceRef ServiceRef;
    DNSServiceErrorType err = DNSServiceBrowse(&ServiceRef,             // Receives reference to Bonjour browser object.
                                               kDNSServiceFlagsDefault, // Indicate it's a shared connection.
                                               kDNSServiceInterfaceIndexAny,        // Browse on all network interfaces.
                                               "_ldap._tcp",                        // Browse for service types.
                                               NULL,                                // Browse on the default domain (e.g. local.).
                                               BrowserCallBack,                 // Callback function when Bonjour events occur.
                                               NULL);                               // Callback context.

    printf("err = 0x%x\n", err);

    int sockfd = DNSServiceRefSockFD(ServiceRef);
    printf("sockfd = %d\n", sockfd);

    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, 0);
    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, 0);


    struct timeval timeout;
    timeout.tv_sec = 1;
    timeout.tv_usec = 0;
    fd_set descriptors;
    FD_ZERO(&descriptors);
    FD_SET(sockfd, &descriptors);
    int r = select(sockfd + 1, &descriptors, NULL, NULL, &timeout);
    printf("r = %d\n", r);
    fflush(stdout);
    if (r > 0) {
        if (FD_ISSET(sockfd, &descriptors)) {
            // This function will call the appropiate callback to process the
            // event, in this case the BrowseReply static method.
            err = DNSServiceProcessResult(ServiceRef);
            if (err != kDNSServiceErr_NoError) {
                printf("Error on process an event in event loop, e = 0x%x\n", err);
            }
        }

    } else if (r == -1) {
        printf("The select() call failed");
    }


    return 0;
}

但是,这并没有给我任何LDAP服务器。 对此有何帮助?

提前致谢

N.B:

  • 此命令返回结果:

    $ nslookup -type = any _ldap._tcp

    因此域中有LDAP服务器。

  • 当我尝试&#34; _http._tcp&#34;作为注册类型返回 结果

  • 操作系统是Mac OS X 10.9。

0 个答案:

没有答案