Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/testnss.c
diff options
context:
space:
mode:
Diffstat (limited to 'testnss.c')
-rw-r--r--testnss.c124
1 files changed, 122 insertions, 2 deletions
diff --git a/testnss.c b/testnss.c
index 72ae187..1481d34 100644
--- a/testnss.c
+++ b/testnss.c
@@ -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;
}