diff options
-rw-r--r-- | Makefile.am | 20 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | nslcd-common.h | 3 | ||||
-rw-r--r-- | nss/Makefile.am | 6 | ||||
-rw-r--r-- | nss/exports.linux (renamed from exports.linux) | 0 | ||||
-rw-r--r-- | server/Makefile.am | 18 | ||||
-rw-r--r-- | server/log.c (renamed from log.c) | 0 | ||||
-rw-r--r-- | server/log.h (renamed from log.h) | 0 | ||||
-rw-r--r-- | server/nslcd-server.c (renamed from nslcd-server.c) | 0 | ||||
-rw-r--r-- | server/nslcd-server.h (renamed from nslcd-server.h) | 0 | ||||
-rw-r--r-- | server/nslcd.c (renamed from nslcd.c) | 0 | ||||
-rw-r--r-- | server/xmalloc.c (renamed from xmalloc.c) | 0 | ||||
-rw-r--r-- | server/xmalloc.h (renamed from xmalloc.h) | 0 | ||||
-rw-r--r-- | tests/Makefile.am | 37 | ||||
-rw-r--r-- | tests/test_aliases.c | 93 | ||||
-rw-r--r-- | tests/test_ethers.c | 98 | ||||
-rw-r--r-- | tests/test_group.c | 119 | ||||
-rw-r--r-- | tests/test_hosts.c | 163 | ||||
-rw-r--r-- | tests/test_netgroup.c | 99 | ||||
-rw-r--r-- | tests/test_networks.c | 113 | ||||
-rw-r--r-- | tests/test_passwd.c | 112 | ||||
-rw-r--r-- | tests/test_protocols.c | 102 | ||||
-rw-r--r-- | tests/test_rpc.c | 102 | ||||
-rw-r--r-- | tests/test_services.c | 104 | ||||
-rw-r--r-- | tests/test_shadow.c | 97 | ||||
-rw-r--r-- | tests/testnss.c (renamed from testnss.c) | 0 |
26 files changed, 1260 insertions, 28 deletions
diff --git a/Makefile.am b/Makefile.am index eb65e0f..f697e8d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -19,29 +19,15 @@ # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, # MA 02110-1301 USA -SUBDIRS = nss server - -noinst_PROGRAMS = nss_ldap.so nslcd testnss +SUBDIRS = nss server tests man_MANS = nss_ldap.5 EXTRA_DIST = ChangeLog \ AUTHORS ANNOUNCE NEWS INSTALL README COPYING \ ldap.conf \ - debian doc exports.linux nss_ldap.5 tests - -nss_ldap_so_SOURCES = nslcd.h -nss_ldap_so_LDADD = nss/libnss.a -nss_ldap_so_LDFLAGS = @nss_ldap_so_LDFLAGS@ - -nslcd_SOURCES = nslcd.c nslcd.h \ - nslcd-server.c nslcd-server.h \ - log.c log.h \ - xmalloc.c xmalloc.h -nslcd_LDADD = server/libserver.a - -testnss_SOURCES = testnss.c nslcd.h -testnss_LDADD = nss/libnss.a + debian doc exports.linux nss_ldap.5 tests \ + nslcd.h nslcd-common.h NSS_LDAP_PATH_CONF = @NSS_LDAP_PATH_CONF@ NSS_LDAP_PATH_ROOTPASSWD = @NSS_LDAP_PATH_ROOTPASSWD@ diff --git a/configure.ac b/configure.ac index fbacc4f..b7f3e0a 100644 --- a/configure.ac +++ b/configure.ac @@ -371,5 +371,5 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <ldap.h>]], [[ldap_set_rebind_proc(0, 0, 0);]])],[nss_ldap_cv_ldap_set_rebind_proc=3],[nss_ldap_cv_ldap_set_rebind_proc=2]) ]) AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $nss_ldap_cv_ldap_set_rebind_proc,[Define to the number of arguments to ldap_set_rebindproc.]) -AC_CONFIG_FILES([Makefile nss/Makefile server/Makefile]) +AC_CONFIG_FILES([Makefile nss/Makefile server/Makefile tests/Makefile]) AC_OUTPUT diff --git a/nslcd-common.h b/nslcd-common.h index 5daebca..25efd83 100644 --- a/nslcd-common.h +++ b/nslcd-common.h @@ -26,9 +26,6 @@ #include <stdio.h> -#undef DEBUG_PROT -#undef DEBUG_PROT_DUMP - #ifdef DEBUG_PROT /* define a debugging macro to output logging */ #include <string.h> diff --git a/nss/Makefile.am b/nss/Makefile.am index 655e94d..b149a46 100644 --- a/nss/Makefile.am +++ b/nss/Makefile.am @@ -19,9 +19,15 @@ # MA 02110-1301 USA noinst_LIBRARIES = libnss.a +noinst_PROGRAMS = nss_ldap.so libnss_a_SOURCES = common.c common.h prototypes.h \ ../nslcd.h ../nslcd-common.h \ aliases.c ethers.c group.c hosts.c netgroup.c \ networks.c passwd.c protocols.c rpc.c services.c \ shadow.c + +nss_ldap_so_SOURCES = ../nslcd.h +nss_ldap_so_LDADD = libnss.a +nss_ldap_so_LDFLAGS = @nss_ldap_so_LDFLAGS@ + diff --git a/exports.linux b/nss/exports.linux index f2ecf08..f2ecf08 100644 --- a/exports.linux +++ b/nss/exports.linux diff --git a/server/Makefile.am b/server/Makefile.am index 4534311..c5f5ed0 100644 --- a/server/Makefile.am +++ b/server/Makefile.am @@ -18,11 +18,15 @@ # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, # MA 02110-1301 USA -noinst_LIBRARIES = libserver.a +noinst_PROGRAMS = nslcd -libserver_a_SOURCES = common.c common.h \ - alias.c ether.c group.c host.c netgroup.c network.c \ - passwd.c protocol.c rpc.c service.c shadow.c \ - dnsconfig.c dnsconfig.h ldap-nss.c ldap-nss.h \ - ldap-schema.c ldap-schema.h pagectrl.c pagectrl.h \ - resolve.c resolve.h util.c util.h +nslcd_SOURCES = nslcd.c ../nslcd.h ../nslcd-common.h \ + nslcd-server.c nslcd-server.h \ + log.c log.h \ + xmalloc.c xmalloc.h \ + common.c common.h \ + alias.c ether.c group.c host.c netgroup.c network.c \ + passwd.c protocol.c rpc.c service.c shadow.c \ + dnsconfig.c dnsconfig.h ldap-nss.c ldap-nss.h \ + ldap-schema.c ldap-schema.h pagectrl.c pagectrl.h \ + resolve.c resolve.h util.c util.h diff --git a/nslcd-server.c b/server/nslcd-server.c index 7f3c10d..7f3c10d 100644 --- a/nslcd-server.c +++ b/server/nslcd-server.c diff --git a/nslcd-server.h b/server/nslcd-server.h index 2b6b80a..2b6b80a 100644 --- a/nslcd-server.h +++ b/server/nslcd-server.h diff --git a/xmalloc.c b/server/xmalloc.c index f316ad8..f316ad8 100644 --- a/xmalloc.c +++ b/server/xmalloc.c diff --git a/xmalloc.h b/server/xmalloc.h index a4a6238..a4a6238 100644 --- a/xmalloc.h +++ b/server/xmalloc.h diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 0000000..4f1683b --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,37 @@ +# Makefile.am - use automake to generate Makefile.in +# +# Copyright (C) 2006 West consulting +# Copyright (C) 2006 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +noinst_PROGRAMS = test_aliases test_ethers test_group test_hosts \ + test_netgroup test_networks test_passwd test_protocols \ + test_rpc test_services test_shadow + +AM_CFLAGS=-DDEBUG_PROT -DDEBUG_PROT_DUMP + +test_aliases_SOURCES = test_aliases.c ../nss/aliases.c ../nss/common.c ../nslcd.h ../nss/prototypes.h +test_ethers_SOURCES = test_ethers.c ../nss/ethers.c ../nss/common.c ../nslcd.h ../nss/prototypes.h +test_group_SOURCES = test_group.c ../nss/group.c ../nss/common.c ../nslcd.h ../nss/prototypes.h +test_hosts_SOURCES = test_hosts.c ../nss/hosts.c ../nss/common.c ../nslcd.h ../nss/prototypes.h +test_netgroup_SOURCES = test_netgroup.c ../nss/netgroup.c ../nss/common.c ../nslcd.h ../nss/prototypes.h +test_networks_SOURCES = test_networks.c ../nss/networks.c ../nss/common.c ../nslcd.h ../nss/prototypes.h +test_passwd_SOURCES = test_passwd.c ../nss/passwd.c ../nss/common.c ../nslcd.h ../nss/prototypes.h +test_protocols_SOURCES = test_protocols.c ../nss/protocols.c ../nss/common.c ../nslcd.h ../nss/prototypes.h +test_rpc_SOURCES = test_rpc.c ../nss/rpc.c ../nss/common.c ../nslcd.h ../nss/prototypes.h +test_services_SOURCES = test_services.c ../nss/services.c ../nss/common.c ../nslcd.h ../nss/prototypes.h +test_shadow_SOURCES = test_shadow.c ../nss/shadow.c ../nss/common.c ../nslcd.h ../nss/prototypes.h diff --git a/tests/test_aliases.c b/tests/test_aliases.c new file mode 100644 index 0000000..b340cb5 --- /dev/null +++ b/tests/test_aliases.c @@ -0,0 +1,93 @@ +/* + test_aliases.c - simple tests of developed nss code + + Copyright (C) 2006 West Consulting + Copyright (C) 2006 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#include "config.h" + +#include <string.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + +#include "nss/prototypes.h" + +static char *nssstatus(enum nss_status retv) +{ + switch(retv) + { + case NSS_STATUS_TRYAGAIN: return "NSS_STATUS_TRYAGAIN"; + case NSS_STATUS_UNAVAIL: return "NSS_STATUS_UNAVAIL"; + case NSS_STATUS_NOTFOUND: return "NSS_STATUS_NOTFOUND"; + case NSS_STATUS_SUCCESS: return "NSS_STATUS_SUCCESS"; + case NSS_STATUS_RETURN: return "NSS_STATUS_RETURN"; + default: return "NSS_STATUS_**ILLEGAL**"; + } +} + +static void printalias(struct aliasent *alias) +{ + int i; + printf("struct alias {\n" + " alias_name=\"%s\",\n" + " alias_members_len=%d,\n", + alias->alias_name,(int)alias->alias_members_len); + for (i=0;i<(int)alias->alias_members_len;i++) + printf(" alias_members[%d]=\"%s\",\n", + i,alias->alias_members[i]); + printf(" alias_local=%d\n" + "}\n",(int)alias->alias_local); +} + +/* the main program... */ +int main(int argc,char *argv[]) +{ + struct aliasent aliasresult; + char buffer[1024]; + enum nss_status res; + int errnocp; + + /* test getaliasbyname() */ + printf("\nTEST getaliasbyname()\n"); + res=_nss_ldap_getaliasbyname_r("wij@arthurenhella.demon.nl",&aliasresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printalias(&aliasresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test {set,get,end}aliasent() */ + printf("\nTEST {set,get,end}aliasent()\n"); + res=_nss_ldap_setaliasent(); + printf("status=%s\n",nssstatus(res)); + while ((res=_nss_ldap_getaliasent_r(&aliasresult,buffer,1024,&errnocp))==NSS_STATUS_SUCCESS) + { + printf("status=%s\n",nssstatus(res)); + printalias(&aliasresult); + } + printf("status=%s\n",nssstatus(res)); + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + res=_nss_ldap_endaliasent(); + printf("status=%s\n",nssstatus(res)); + + return 0; +} diff --git a/tests/test_ethers.c b/tests/test_ethers.c new file mode 100644 index 0000000..ef77a99 --- /dev/null +++ b/tests/test_ethers.c @@ -0,0 +1,98 @@ +/* + test_ethers.c - simple tests of developed nss code + + Copyright (C) 2006 West Consulting + Copyright (C) 2006 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#include "config.h" + +#include <string.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + +#include "nss/prototypes.h" + +static char *nssstatus(enum nss_status retv) +{ + switch(retv) + { + case NSS_STATUS_TRYAGAIN: return "NSS_STATUS_TRYAGAIN"; + case NSS_STATUS_UNAVAIL: return "NSS_STATUS_UNAVAIL"; + case NSS_STATUS_NOTFOUND: return "NSS_STATUS_NOTFOUND"; + case NSS_STATUS_SUCCESS: return "NSS_STATUS_SUCCESS"; + case NSS_STATUS_RETURN: return "NSS_STATUS_RETURN"; + default: return "NSS_STATUS_**ILLEGAL**"; + } +} + +static void printether(struct etherent *ether) +{ + printf("struct etherent {\n" + " e_name=\"%s\",\n" + " e_addr=%s\n" + "}\n", + ether->e_name,ether_ntoa(&(ether->e_addr))); +} + +/* the main program... */ +int main(int argc,char *argv[]) +{ + struct etherent etherresult; + char buffer[1024]; + enum nss_status res; + int errnocp; + + /* test ether_hostton() */ + printf("\nTEST ether_hostton()\n"); + res=_nss_ldap_gethostton_r("spiritus",ðerresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printether(ðerresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test ether_ntohost() */ + printf("\nTEST ether_ntohost()\n"); + res=_nss_ldap_getntohost_r(ether_aton("00:E0:4C:39:D3:6A"), + ðerresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printether(ðerresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test {set,get,end}etherent() */ + printf("\nTEST {set,get,end}etherent()\n"); + res=_nss_ldap_setetherent(1); + printf("status=%s\n",nssstatus(res)); + while ((res=_nss_ldap_getetherent_r(ðerresult,buffer,1024,&errnocp))==NSS_STATUS_SUCCESS) + { + printf("status=%s\n",nssstatus(res)); + printether(ðerresult); + } + printf("status=%s\n",nssstatus(res)); + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + res=_nss_ldap_endetherent(); + printf("status=%s\n",nssstatus(res)); + + return 0; +} diff --git a/tests/test_group.c b/tests/test_group.c new file mode 100644 index 0000000..408b0a9 --- /dev/null +++ b/tests/test_group.c @@ -0,0 +1,119 @@ +/* + test_group.c - simple tests of developed nss code + + Copyright (C) 2006 West Consulting + Copyright (C) 2006 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#include "config.h" + +#include <string.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + +#include "nss/prototypes.h" + +static char *nssstatus(enum nss_status retv) +{ + switch(retv) + { + case NSS_STATUS_TRYAGAIN: return "NSS_STATUS_TRYAGAIN"; + case NSS_STATUS_UNAVAIL: return "NSS_STATUS_UNAVAIL"; + case NSS_STATUS_NOTFOUND: return "NSS_STATUS_NOTFOUND"; + case NSS_STATUS_SUCCESS: return "NSS_STATUS_SUCCESS"; + case NSS_STATUS_RETURN: return "NSS_STATUS_RETURN"; + default: return "NSS_STATUS_**ILLEGAL**"; + } +} + +static void printgroup(struct group *group) +{ + int i; + printf("struct group {\n" + " gr_name=\"%s\",\n" + " gr_passwd=\"%s\",\n" + " gr_gid=%d,\n", + group->gr_name,group->gr_passwd,(int)group->gr_gid); + for (i=0;group->gr_mem[i]!=NULL;i++) + printf(" gr_mem[%d]=\"%s\",\n", + i,group->gr_mem[i]); + printf(" gr_mem[%d]=NULL\n" + "}\n",i); +} + +/* the main program... */ +int main(int argc,char *argv[]) +{ + struct group groupresult; + char buffer[1024]; + enum nss_status res; + int errnocp; + long int start,size=40; + gid_t *gidlist=(gid_t *)buffer; + + /* test getgrnam() */ + printf("\nTEST getgrnam()\n"); + res=_nss_ldap_getgrnam_r("testgroup",&groupresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printgroup(&groupresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test getgrgid() */ + printf("\nTEST getgrgid()\n"); + res=_nss_ldap_getgrgid_r(100,&groupresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printgroup(&groupresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test initgroups() */ + printf("\nTEST initgroups()\n"); + res=_nss_ldap_initgroups_dyn("arthur",10,&start,&size,&gidlist,size,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + { + for (size=0;size<start;size++) + { + printf("gidlist[%d]=%d\n",(int)size,(int)gidlist[size]); + } + } + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test {set,get,end}grent() */ + printf("\nTEST {set,get,end}grent()\n"); + res=_nss_ldap_setgrent(1); + printf("status=%s\n",nssstatus(res)); + while ((res=_nss_ldap_getgrent_r(&groupresult,buffer,1024,&errnocp))==NSS_STATUS_SUCCESS) + { + printf("status=%s\n",nssstatus(res)); + printgroup(&groupresult); + } + printf("status=%s\n",nssstatus(res)); + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + res=_nss_ldap_endgrent(); + printf("status=%s\n",nssstatus(res)); + + return 0; +} diff --git a/tests/test_hosts.c b/tests/test_hosts.c new file mode 100644 index 0000000..3c77f62 --- /dev/null +++ b/tests/test_hosts.c @@ -0,0 +1,163 @@ +/* + test_hosts.c - simple tests of developed nss code + + Copyright (C) 2006 West Consulting + Copyright (C) 2006 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#include <string.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + +#include "nss/prototypes.h" + +static char *nssstatus(enum nss_status retv) +{ + switch(retv) + { + case NSS_STATUS_TRYAGAIN: return "NSS_STATUS_TRYAGAIN"; + case NSS_STATUS_UNAVAIL: return "NSS_STATUS_UNAVAIL"; + case NSS_STATUS_NOTFOUND: return "NSS_STATUS_NOTFOUND"; + case NSS_STATUS_SUCCESS: return "NSS_STATUS_SUCCESS"; + case NSS_STATUS_RETURN: return "NSS_STATUS_RETURN"; + default: return "NSS_STATUS_**ILLEGAL**"; + } +} + +static void printhost(struct hostent *host) +{ + int i,j; + char buffer[1024]; + 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++) + { + if (inet_ntop(host->h_addrtype,host->h_addr_list[i], + buffer,1024)!=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)((const uint8_t*)host->h_addr_list[i])[j]); + printf(",\n"); + } + } + printf(" h_addr_list[%d]=NULL\n" + "}\n",i); +} + +/* the main program... */ +int main(int argc,char *argv[]) +{ + struct hostent hostresult; + char buffer[1024]; + enum nss_status res; + int errnocp,h_errnocp; + char address[1024]; + + /* 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)errnocp,strerror(errnocp)); + printf("h_errno=%d:%s\n",(int)h_errnocp,hstrerror(h_errnocp)); + } + + /* test gethostbyname2(AF_INET6) */ +/* this is currently unsupported + printf("\nTEST gethostbyname2(AF_INET6)\n"); + res=_nss_ldap_gethostbyname2_r("appelscha",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)errnocp,strerror(errnocp)); + printf("h_errno=%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(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)errnocp,strerror(errnocp)); + printf("h_errno=%d:%s\n",(int)h_errnocp,hstrerror(h_errnocp)); + } + + /* test gethostbyaddr(AF_INET6) */ +/* this is currently unsupported + printf("\nTEST gethostbyaddr(AF_INET6)\n"); + inet_pton(AF_INET6,"2001:200:0:8002:203:47ff:fea5:3085",address); + res=_nss_ldap_gethostbyaddr_r(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)errnocp,strerror(errnocp)); + printf("h_errno=%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(1); + 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)errnocp,strerror(errnocp)); + printf("h_errno=%d:%s\n",(int)h_errnocp,hstrerror(h_errnocp)); + res=_nss_ldap_endhostent(); + printf("status=%s\n",nssstatus(res)); + + return 0; +} diff --git a/tests/test_netgroup.c b/tests/test_netgroup.c new file mode 100644 index 0000000..3adb2ae --- /dev/null +++ b/tests/test_netgroup.c @@ -0,0 +1,99 @@ +/* + test_netgroup.c - simple tests of developed nss code + + Copyright (C) 2006 West Consulting + Copyright (C) 2006 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#include "config.h" + +#include <string.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + +#include "nss/prototypes.h" + +static char *nssstatus(enum nss_status retv) +{ + switch(retv) + { + case NSS_STATUS_TRYAGAIN: return "NSS_STATUS_TRYAGAIN"; + case NSS_STATUS_UNAVAIL: return "NSS_STATUS_UNAVAIL"; + case NSS_STATUS_NOTFOUND: return "NSS_STATUS_NOTFOUND"; + case NSS_STATUS_SUCCESS: return "NSS_STATUS_SUCCESS"; + case NSS_STATUS_RETURN: return "NSS_STATUS_RETURN"; + default: return "NSS_STATUS_**ILLEGAL**"; + } +} + +static void printnetgroup(struct __netgrent *netgroup) +{ + printf("struct __netgrent {\n"); + if (netgroup->type==triple_val) + { + printf(" type=triple_val,\n"); + if (netgroup->val.triple.host==NULL) + printf(" val.triple.host=NULL,\n"); + else + printf(" val.triple.host=\"%s\",\n",netgroup->val.triple.host); + if (netgroup->val.triple.user==NULL) + printf(" val.triple.user=NULL,\n"); + else + printf(" val.triple.user=\"%s\",\n",netgroup->val.triple.user); + if (netgroup->val.triple.domain==NULL) + printf(" val.triple.domain=NULL,\n"); + else + printf(" val.triple.domain=\"%s\",\n",netgroup->val.triple.domain); + } + else + { + printf(" type=triple_val,\n" + " val.group=\"%s\",\n", + netgroup->val.group); + } + printf(" ...\n" + "}\n"); +} + +/* the main program... */ +int main(int argc,char *argv[]) +{ + struct __netgrent netgroupresult; + char buffer[1024]; + enum nss_status res; + int errnocp; + + /* test {set,get,end}netgrent() */ + printf("\nTEST {set,get,end}netgrent()\n"); + res=_nss_ldap_setnetgrent("westcomp",&netgroupresult); + printf("status=%s\n",nssstatus(res)); + while ((_nss_ldap_getnetgrent_r(&netgroupresult,buffer,1024,&errnocp))==NSS_STATUS_SUCCESS) + { + printf("status=%s\n",nssstatus(res)); + printnetgroup(&netgroupresult); + } + printf("status=%s\n",nssstatus(res)); + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + res=_nss_ldap_endnetgrent(&netgroupresult); + printf("status=%s\n",nssstatus(res)); + + return 0; +} diff --git a/tests/test_networks.c b/tests/test_networks.c new file mode 100644 index 0000000..6cc41b2 --- /dev/null +++ b/tests/test_networks.c @@ -0,0 +1,113 @@ +/* + test_networks.c - simple tests of developed nss code + + Copyright (C) 2006 West Consulting + Copyright (C) 2006 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#include <string.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + +#include "nss/prototypes.h" + +static char *nssstatus(enum nss_status retv) +{ + switch(retv) + { + case NSS_STATUS_TRYAGAIN: return "NSS_STATUS_TRYAGAIN"; + case NSS_STATUS_UNAVAIL: return "NSS_STATUS_UNAVAIL"; + case NSS_STATUS_NOTFOUND: return "NSS_STATUS_NOTFOUND"; + case NSS_STATUS_SUCCESS: return "NSS_STATUS_SUCCESS"; + case NSS_STATUS_RETURN: return "NSS_STATUS_RETURN"; + default: return "NSS_STATUS_**ILLEGAL**"; + } +} + +static void printnetwork(struct netent *network) +{ + int i; + printf("struct netent {\n" + " n_name=\"%s\",\n", + network->n_name); + for (i=0;network->n_aliases[i]!=NULL;i++) + printf(" n_aliases[%d]=\"%s\",\n", + i,network->n_aliases[i]); + printf(" n_aliases[%d]=NULL,\n",i); + if (network->n_addrtype==AF_INET) + printf(" n_addrtype=AF_INET,\n"); + else if (network->n_addrtype==AF_INET6) + printf(" n_addrtype=AF_INET6,\n"); + else + printf(" n_addrtype=%d,\n",network->n_addrtype); + printf(" n_net=%s\n" + "}\n",inet_ntoa(inet_makeaddr(network->n_net,0))); +} + +/* the main program... */ +int main(int argc,char *argv[]) +{ + struct netent netresult; + char buffer[1024]; + enum nss_status res; + int errnocp,h_errnocp; + + /* test getnetbyname() */ + printf("\nTEST getnetbyname()\n"); + res=_nss_ldap_getnetbyname_r("west",&netresult,buffer,1024,&errnocp,&h_errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printnetwork(&netresult); + else + { + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + printf("h_errno=%d:%s\n",(int)h_errnocp,hstrerror(h_errnocp)); + } + + /* test getnetbyaddr() */ + printf("\nTEST getnetbyaddr()\n"); + res=_nss_ldap_getnetbyaddr_r(inet_network("192.43.210.0"),AF_INET,&netresult,buffer,1024,&errnocp,&h_errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printnetwork(&netresult); + else + { + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + printf("h_errno=%d:%s\n",(int)h_errnocp,hstrerror(h_errnocp)); + } + + /* test {set,get,end}netent() */ + printf("\nTEST {set,get,end}netent()\n"); + res=_nss_ldap_setnetent(1); + printf("status=%s\n",nssstatus(res)); + while ((res=_nss_ldap_getnetent_r(&netresult,buffer,1024,&errnocp,&h_errnocp))==NSS_STATUS_SUCCESS) + { + printf("status=%s\n",nssstatus(res)); + printnetwork(&netresult); + } + printf("status=%s\n",nssstatus(res)); + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + printf("h_errno=%d:%s\n",(int)h_errnocp,hstrerror(h_errnocp)); + res=_nss_ldap_endnetent(); + printf("status=%s\n",nssstatus(res)); + + return 0; +} diff --git a/tests/test_passwd.c b/tests/test_passwd.c new file mode 100644 index 0000000..c37e5d6 --- /dev/null +++ b/tests/test_passwd.c @@ -0,0 +1,112 @@ +/* + test_passwd.c - simple tests of developed nss code + + Copyright (C) 2006 West Consulting + Copyright (C) 2006 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#include "config.h" + +#include <string.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + +#include "nss/prototypes.h" + +static char *nssstatus(enum nss_status retv) +{ + switch(retv) + { + case NSS_STATUS_TRYAGAIN: return "NSS_STATUS_TRYAGAIN"; + case NSS_STATUS_UNAVAIL: return "NSS_STATUS_UNAVAIL"; + case NSS_STATUS_NOTFOUND: return "NSS_STATUS_NOTFOUND"; + case NSS_STATUS_SUCCESS: return "NSS_STATUS_SUCCESS"; + case NSS_STATUS_RETURN: return "NSS_STATUS_RETURN"; + default: return "NSS_STATUS_**ILLEGAL**"; + } +} + +static void printpasswd(struct passwd *pw) +{ + printf("struct passwd {\n" + " pw_name=\"%s\",\n" + " pw_passwd=\"%s\",\n" + " pw_uid=%d,\n" + " pw_gid=%d,\n" + " pw_gecos=\"%s\",\n" + " pw_dir=\"%s\",\n" + " pw_shell=\"%s\"\n" + "}\n",pw->pw_name,pw->pw_passwd, + (int)(pw->pw_uid),(int)(pw->pw_gid), + pw->pw_gecos,pw->pw_dir,pw->pw_shell); +} + +/* the main program... */ +int main(int argc,char *argv[]) +{ + struct passwd passwdresult; + char buffer[1024]; + enum nss_status res; + int errnocp; + + /* test getpwnam() */ + printf("\nTEST getpwnam()\n"); + res=_nss_ldap_getpwnam_r("arthur",&passwdresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printpasswd(&passwdresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test getpwnam() with non-existing user */ + printf("\nTEST getpwnam() with non-existing user\n"); + res=_nss_ldap_getpwnam_r("nonexist",&passwdresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printpasswd(&passwdresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test getpwuid() */ + printf("\nTEST getpwuid()\n"); + res=_nss_ldap_getpwuid_r(1004,&passwdresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printpasswd(&passwdresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test {set,get,end}pwent() */ + printf("\nTEST {set,get,end}pwent()\n"); + res=_nss_ldap_setpwent(1); + printf("status=%s\n",nssstatus(res)); + while ((res=_nss_ldap_getpwent_r(&passwdresult,buffer,1024,&errnocp))==NSS_STATUS_SUCCESS) + { + printf("status=%s\n",nssstatus(res)); + printpasswd(&passwdresult); + } + printf("status=%s\n",nssstatus(res)); + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + res=_nss_ldap_endpwent(); + printf("status=%s\n",nssstatus(res)); + + return 0; +} diff --git a/tests/test_protocols.c b/tests/test_protocols.c new file mode 100644 index 0000000..cfcf413 --- /dev/null +++ b/tests/test_protocols.c @@ -0,0 +1,102 @@ +/* + test_protocols.c - simple tests of developed nss code + + Copyright (C) 2006 West Consulting + Copyright (C) 2006 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#include "config.h" + +#include <string.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + +#include "nss/prototypes.h" + +static char *nssstatus(enum nss_status retv) +{ + switch(retv) + { + case NSS_STATUS_TRYAGAIN: return "NSS_STATUS_TRYAGAIN"; + case NSS_STATUS_UNAVAIL: return "NSS_STATUS_UNAVAIL"; + case NSS_STATUS_NOTFOUND: return "NSS_STATUS_NOTFOUND"; + case NSS_STATUS_SUCCESS: return "NSS_STATUS_SUCCESS"; + case NSS_STATUS_RETURN: return "NSS_STATUS_RETURN"; + default: return "NSS_STATUS_**ILLEGAL**"; + } +} + +static void printproto(struct protoent *protocol) +{ + int i; + printf("struct protoent {\n" + " p_name=\"%s\",\n", + protocol->p_name); + for (i=0;protocol->p_aliases[i]!=NULL;i++) + printf(" p_aliases[%d]=\"%s\",\n", + i,protocol->p_aliases[i]); + printf(" p_aliases[%d]=NULL,\n" + " p_proto=%d\n" + "}\n",i,(int)(protocol->p_proto)); +} + +/* the main program... */ +int main(int argc,char *argv[]) +{ + struct protoent protoresult; + char buffer[1024]; + enum nss_status res; + int errnocp; + + /* test getprotobyname() */ + printf("\nTEST getprotobyname()\n"); + res=_nss_ldap_getprotobyname_r("foo",&protoresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printproto(&protoresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test getprotobynumber() */ + printf("\nTEST getprotobynumber()\n"); + res=_nss_ldap_getprotobynumber_r(10,&protoresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printproto(&protoresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test {set,get,end}protoent() */ + printf("\nTEST {set,get,end}protoent()\n"); + res=_nss_ldap_setprotoent(1); + printf("status=%s\n",nssstatus(res)); + while ((res=_nss_ldap_getprotoent_r(&protoresult,buffer,1024,&errnocp))==NSS_STATUS_SUCCESS) + { + printf("status=%s\n",nssstatus(res)); + printproto(&protoresult); + } + printf("status=%s\n",nssstatus(res)); + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + res=_nss_ldap_endprotoent(); + printf("status=%s\n",nssstatus(res)); + + return 0; +} diff --git a/tests/test_rpc.c b/tests/test_rpc.c new file mode 100644 index 0000000..85de284 --- /dev/null +++ b/tests/test_rpc.c @@ -0,0 +1,102 @@ +/* + test_rpc.c - simple tests of developed nss code + + Copyright (C) 2006 West Consulting + Copyright (C) 2006 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#include "config.h" + +#include <string.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + +#include "nss/prototypes.h" + +static char *nssstatus(enum nss_status retv) +{ + switch(retv) + { + case NSS_STATUS_TRYAGAIN: return "NSS_STATUS_TRYAGAIN"; + case NSS_STATUS_UNAVAIL: return "NSS_STATUS_UNAVAIL"; + case NSS_STATUS_NOTFOUND: return "NSS_STATUS_NOTFOUND"; + case NSS_STATUS_SUCCESS: return "NSS_STATUS_SUCCESS"; + case NSS_STATUS_RETURN: return "NSS_STATUS_RETURN"; + default: return "NSS_STATUS_**ILLEGAL**"; + } +} + +static void printrpc(struct rpcent *rpc) +{ + int i; + printf("struct rpcent {\n" + " r_name=\"%s\",\n", + rpc->r_name); + for (i=0;rpc->r_aliases[i]!=NULL;i++) + printf(" r_aliases[%d]=\"%s\",\n", + i,rpc->r_aliases[i]); + printf(" r_aliases[%d]=NULL,\n" + " r_number=%d\n" + "}\n",i,(int)(rpc->r_number)); +} + +/* the main program... */ +int main(int argc,char *argv[]) +{ + struct rpcent rpcresult; + char buffer[1024]; + enum nss_status res; + int errnocp; + + /* test getrpcbyname() */ + printf("\nTEST getrpcbyname()\n"); + res=_nss_ldap_getrpcbyname_r("rpcfoo",&rpcresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printrpc(&rpcresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test getrpcbynumber() */ + printf("\nTEST getrpcbynumber()\n"); + res=_nss_ldap_getrpcbynumber_r(7899,&rpcresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printrpc(&rpcresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test {set,get,end}rpcent() */ + printf("\nTEST {set,get,end}rpcent()\n"); + res=_nss_ldap_setrpcent(1); + printf("status=%s\n",nssstatus(res)); + while ((res=_nss_ldap_getrpcent_r(&rpcresult,buffer,1024,&errnocp))==NSS_STATUS_SUCCESS) + { + printf("status=%s\n",nssstatus(res)); + printrpc(&rpcresult); + } + printf("status=%s\n",nssstatus(res)); + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + res=_nss_ldap_endrpcent(); + printf("status=%s\n",nssstatus(res)); + + return 0; +} diff --git a/tests/test_services.c b/tests/test_services.c new file mode 100644 index 0000000..75cc612 --- /dev/null +++ b/tests/test_services.c @@ -0,0 +1,104 @@ +/* + test_services.c - simple tests of developed nss code + + Copyright (C) 2006 West Consulting + Copyright (C) 2006 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#include "config.h" + +#include <string.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + +#include "nss/prototypes.h" + +static char *nssstatus(enum nss_status retv) +{ + switch(retv) + { + case NSS_STATUS_TRYAGAIN: return "NSS_STATUS_TRYAGAIN"; + case NSS_STATUS_UNAVAIL: return "NSS_STATUS_UNAVAIL"; + case NSS_STATUS_NOTFOUND: return "NSS_STATUS_NOTFOUND"; + case NSS_STATUS_SUCCESS: return "NSS_STATUS_SUCCESS"; + case NSS_STATUS_RETURN: return "NSS_STATUS_RETURN"; + default: return "NSS_STATUS_**ILLEGAL**"; + } +} + +static void printserv(struct servent *serv) +{ + int i; + printf("struct servent {\n" + " s_name=\"%s\",\n", + serv->s_name); + for (i=0;serv->s_aliases[i]!=NULL;i++) + printf(" s_aliases[%d]=\"%s\",\n", + i,serv->s_aliases[i]); + printf(" s_aliases[%d]=NULL,\n" + " s_port=%d,\n" + " s_proto=\"%s\"\n" + "}\n",i,(int)(ntohs(serv->s_port)), + serv->s_proto); +} + +/* the main program... */ +int main(int argc,char *argv[]) +{ + struct servent servresult; + char buffer[1024]; + enum nss_status res; + int errnocp; + + /* test getservbyname() */ + printf("\nTEST getservbyname()\n"); + res=_nss_ldap_getservbyname_r("srvfoo","udp",&servresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printserv(&servresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test getservbyport() */ + printf("\nTEST getservbyport()\n"); + res=_nss_ldap_getservbyport_r(ntohs(9988),NULL,&servresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printserv(&servresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test {set,get,end}servent() */ + printf("\nTEST {set,get,end}servent()\n"); + res=_nss_ldap_setservent(1); + printf("status=%s\n",nssstatus(res)); + while ((res=_nss_ldap_getservent_r(&servresult,buffer,1024,&errnocp))==NSS_STATUS_SUCCESS) + { + printf("status=%s\n",nssstatus(res)); + printserv(&servresult); + } + printf("status=%s\n",nssstatus(res)); + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + res=_nss_ldap_endservent(); + printf("status=%s\n",nssstatus(res)); + + return 0; +} diff --git a/tests/test_shadow.c b/tests/test_shadow.c new file mode 100644 index 0000000..88cbba0 --- /dev/null +++ b/tests/test_shadow.c @@ -0,0 +1,97 @@ +/* + test_shadow.c - simple tests of developed nss code + + Copyright (C) 2006 West Consulting + Copyright (C) 2006 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#include "config.h" + +#include <string.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> + +#include "nss/prototypes.h" + +static char *nssstatus(enum nss_status retv) +{ + switch(retv) + { + case NSS_STATUS_TRYAGAIN: return "NSS_STATUS_TRYAGAIN"; + case NSS_STATUS_UNAVAIL: return "NSS_STATUS_UNAVAIL"; + case NSS_STATUS_NOTFOUND: return "NSS_STATUS_NOTFOUND"; + case NSS_STATUS_SUCCESS: return "NSS_STATUS_SUCCESS"; + case NSS_STATUS_RETURN: return "NSS_STATUS_RETURN"; + default: return "NSS_STATUS_**ILLEGAL**"; + } +} + +static void printshadow(struct spwd *shadow) +{ + printf("struct spwd {\n" + " sp_namp=\"%s\",\n" + " sp_pwdp=\"%s\",\n" + " sp_lstchg=%ld,\n" + " sp_min=%ld,\n" + " sp_max=%ld,\n" + " sp_warn=%ld,\n" + " sp_inact=%ld,\n" + " sp_expire=%ld,\n" + " sp_flag=%lu\n" + "}\n", + shadow->sp_namp,shadow->sp_pwdp,shadow->sp_lstchg, + shadow->sp_min,shadow->sp_max,shadow->sp_warn, + shadow->sp_inact,shadow->sp_expire,shadow->sp_flag); +} + +/* the main program... */ +int main(int argc,char *argv[]) +{ + struct spwd shadowresult; + char buffer[1024]; + enum nss_status res; + int errnocp; + + /* test getspnam() */ + printf("\nTEST getspnam()\n"); + res=_nss_ldap_getspnam_r("arthur",&shadowresult,buffer,1024,&errnocp); + printf("status=%s\n",nssstatus(res)); + if (res==NSS_STATUS_SUCCESS) + printshadow(&shadowresult); + else + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + + /* test {set,get,end}spent() */ + printf("\nTEST {set,get,end}spent()\n"); + res=_nss_ldap_setspent(1); + printf("status=%s\n",nssstatus(res)); + while ((res=_nss_ldap_getspent_r(&shadowresult,buffer,1024,&errnocp))==NSS_STATUS_SUCCESS) + { + printf("status=%s\n",nssstatus(res)); + printshadow(&shadowresult); + } + printf("status=%s\n",nssstatus(res)); + printf("errno=%d:%s\n",(int)errnocp,strerror(errnocp)); + res=_nss_ldap_endspent(); + printf("status=%s\n",nssstatus(res)); + + return 0; +} diff --git a/testnss.c b/tests/testnss.c index 50b36c8..50b36c8 100644 --- a/testnss.c +++ b/tests/testnss.c |