diff options
Diffstat (limited to 'testnss.c')
-rw-r--r-- | testnss.c | 124 |
1 files changed, 122 insertions, 2 deletions
@@ -23,6 +23,9 @@ #include <string.h> #include <stdio.h> #include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> #include "nss/exports.h" @@ -83,17 +86,57 @@ static void printgroup(struct group *group) "}\n",i); } +static void printhost(struct hostent *host) +{ + int i,j; + char buffer[1024]; + const char *res; + printf("struct hostent {\n" + " h_name=\"%s\",\n", + host->h_name); + for (i=0;host->h_aliases[i]!=NULL;i++) + printf(" h_aliases[%d]=\"%s\",\n", + i,host->h_aliases[i]); + printf(" h_aliases[%d]=NULL,\n",i); + if (host->h_addrtype==AF_INET) + printf(" h_addrtype=AF_INET,\n"); + else if (host->h_addrtype==AF_INET6) + printf(" h_addrtype=AF_INET6,\n"); + else + printf(" h_addrtype=%d,\n",host->h_addrtype); + printf(" h_length=%d,\n",host->h_length); + for (i=0;host->h_addr_list[i]!=NULL;i++) + { + res=inet_ntop(host->h_addrtype,host->h_addr_list[i], + buffer,host->h_length); + if (res!=NULL) + { + printf(" h_addr_list[%d]=%s,\n",i,buffer); + } + else + { + printf(" h_addr_list[%d]=",i); + for (j=0;j<host->h_length;j++) + printf("%02x",(int)host->h_addr_list[i][j]); + printf(",\n"); + } + } + printf(" h_addr_list[%d]=NULL\n",i); +} + /* the main program... */ int main(int argc,char *argv[]) { struct passwd passwdresult; struct aliasent aliasresult; struct group groupresult; + struct hostent hostresult; char buffer[1024]; enum nss_status res; - int errnocp; + int errnocp,h_errnocp; long int start,size=40; - gid_t *gidlist=(gid_t)buffer; + gid_t *gidlist=(gid_t *)buffer; + char address[1024]; /* test getpwnam() */ printf("\nTEST getpwnam()\n"); @@ -229,5 +272,82 @@ int main(int argc,char *argv[]) res=_nss_ldap_endgrent(); printf("status=%s\n",nssstatus(res)); + /* test gethostbyname2(AF_INET) */ + printf("\nTEST gethostbyname2(AF_INET)\n"); + res=_nss_ldap_gethostbyname2_r("oostc",AF_INET,&hostresult,buffer,1024,&errnocp,&h_errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printhost(&hostresult); + else + { + printf("errno=%d:%s\n",(int)errno,strerror(errno)); + printf("errnocp=%d:%s\n",(int)errnocp,strerror(errnocp)); + printf("h_errno=%d:%s\n",(int)h_errno,hstrerror(h_errno)); + printf("h_errnocp=%d:%s\n",(int)h_errnocp,hstrerror(h_errnocp)); + } + + /* test gethostbyname2(AF_INET6) */ + printf("\nTEST gethostbyname2(AF_INET6)\n"); + res=_nss_ldap_gethostbyname2_r("oostc",AF_INET6,&hostresult,buffer,1024,&errnocp,&h_errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printhost(&hostresult); + else + { + printf("errno=%d:%s\n",(int)errno,strerror(errno)); + printf("errnocp=%d:%s\n",(int)errnocp,strerror(errnocp)); + printf("h_errno=%d:%s\n",(int)h_errno,hstrerror(h_errno)); + printf("h_errnocp=%d:%s\n",(int)h_errnocp,hstrerror(h_errnocp)); + } + + /* test gethostbyaddr(AF_INET) */ + printf("\nTEST gethostbyaddr(AF_INET)\n"); + inet_pton(AF_INET,"192.43.210.81",address); + res=_nss_ldap_gethostbyaddr_r((void *)address,sizeof(struct in_addr),AF_INET, + &hostresult,buffer,1024,&errnocp,&h_errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printhost(&hostresult); + else + { + printf("errno=%d:%s\n",(int)errno,strerror(errno)); + printf("errnocp=%d:%s\n",(int)errnocp,strerror(errnocp)); + printf("h_errno=%d:%s\n",(int)h_errno,hstrerror(h_errno)); + printf("h_errnocp=%d:%s\n",(int)h_errnocp,hstrerror(h_errnocp)); + } + + /* test gethostbyaddr(AF_INET6) */ + printf("\nTEST gethostbyaddr(AF_INET6)\n"); + inet_pton(AF_INET6,"2001:200:0:8002:203:47ff:fea5:3085",address); + res=_nss_ldap_gethostbyaddr_r((void *)address,sizeof(struct in6_addr),AF_INET6, + &hostresult,buffer,1024,&errnocp,&h_errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printhost(&hostresult); + else + { + printf("errno=%d:%s\n",(int)errno,strerror(errno)); + printf("errnocp=%d:%s\n",(int)errnocp,strerror(errnocp)); + printf("h_errno=%d:%s\n",(int)h_errno,hstrerror(h_errno)); + printf("h_errnocp=%d:%s\n",(int)h_errnocp,hstrerror(h_errnocp)); + } + + /* test {set,get,end}hostent() */ + printf("\nTEST {set,get,end}hostent()\n"); + res=_nss_ldap_sethostent(); + printf("status=%s\n",nssstatus(res)); + while ((res=_nss_ldap_gethostent_r(&hostresult,buffer,1024,&errnocp,&h_errnocp))==NSS_STATUS_SUCCESS) + { + printf("status=%s\n",nssstatus(res)); + printhost(&hostresult); + } + printf("status=%s\n",nssstatus(res)); + printf("errno=%d:%s\n",(int)errno,strerror(errno)); + printf("errnocp=%d:%s\n",(int)errnocp,strerror(errnocp)); + printf("h_errno=%d:%s\n",(int)h_errno,hstrerror(h_errno)); + printf("h_errnocp=%d:%s\n",(int)h_errnocp,hstrerror(h_errnocp)); + res=_nss_ldap_endhostent(); + printf("status=%s\n",nssstatus(res)); + return 0; } |