diff options
Diffstat (limited to 'nis')
55 files changed, 857 insertions, 1910 deletions
@@ -1 +1 @@ -NIS(YP)/NIS+ NSS modules 0.14 by Thorsten Kukuk +NIS(YP)/NIS+ NSS modules 0.15 by Thorsten Kukuk diff --git a/nis/Makefile b/nis/Makefile index 82c5f24..e114faf 100644 --- a/nis/Makefile +++ b/nis/Makefile @@ -44,14 +44,15 @@ vpath %.c $(subdir-dirs) libnsl-routines = yp_xdr ypclnt ypupdate_xdr \ nis_subr nis_local_names nis_free nis_file \ - nis_print nis_error nis_call nis_lookup nis_clone\ - nis_cache nis_table nis_xdr nis_server nis_ping\ + nis_print nis_error nis_call nis_lookup\ + nis_table nis_xdr nis_server nis_ping\ nis_checkpoint nis_mkdir nis_rmdir nis_getservlist\ nis_verifygroup nis_ismember nis_addmember nis_util\ nis_removemember nis_creategroup nis_destroygroup\ nis_print_group_entry nis_domain_of nis_domain_of_r\ - nis_modify nis_remove nis_add nis_defaults lckcache\ - nis_findserv nis_callback + nis_modify nis_remove nis_add nis_defaults\ + nis_findserv nis_callback nis_clone_dir nis_clone_obj\ + nis_clone_res libnsl-map = libnsl.map libnss_compat-routines := $(addprefix compat-,grp pwd spwd) nisplus-parser diff --git a/nis/TODO b/nis/TODO deleted file mode 100644 index 8528de7..0000000 --- a/nis/TODO +++ /dev/null @@ -1,3 +0,0 @@ - - * nis_addmember: Where checks for duplicate group members ? nisgrpadm or - nis_addmember ? diff --git a/nis/lckcache.c b/nis/lckcache.c deleted file mode 100644 index f8c0a97..0000000 --- a/nis/lckcache.c +++ /dev/null @@ -1,181 +0,0 @@ -/* Handle locking of NIS+ cache file. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. - This file is part of the GNU C Library and based on shadow/lckfile.c. - - The GNU C 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. - - The GNU C 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 the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include <fcntl.h> -#include <bits/libc-lock.h> -#include <shadow.h> -#include <signal.h> -#include <string.h> -#include <unistd.h> -#include <sys/file.h> -#include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> -#include <rpcsvc/nis_cache.h> - -/* How long to wait for getting the lock before returning with an - error. */ -#define TIMEOUT 5 /* sec */ - - -/* File descriptor for lock file. */ -static int lock_fd = -1; - -/* Prevent problems in multithreaded program by using mutex. */ -__libc_lock_define_initialized (static, lock) - - -/* Prototypes for local functions. */ -static void noop_handler __P ((int __sig)); - - -/* We cannot simply return in error cases. We have to close the file - and perhaps restore the signal handler. */ -#define RETURN_CLOSE_FD(code) \ - do { \ - if ((code) < 0 && lock_fd >= 0) \ - { \ - close (lock_fd); \ - lock_fd = -1; \ - } \ - __libc_lock_unlock (lock); \ - return (code); \ - } while (0) - -#define RETURN_RESTORE_HANDLER(code) \ - do { \ - /* Restore old action handler for alarm. We don't need to know \ - about the current one. */ \ - sigaction (SIGALRM, &saved_act, NULL); \ - RETURN_CLOSE_FD (code); \ - } while (0) - -#define RETURN_CLEAR_ALARM(code) \ - do { \ - /* Clear alarm. */ \ - alarm (0); \ - /* Restore old set of handled signals. We don't need to know \ - about the current one.*/ \ - sigprocmask (SIG_SETMASK, &saved_set, NULL); \ - RETURN_RESTORE_HANDLER (code); \ - } while (0) - - -int -__nis_lock_cache (void) -{ - int flags; - sigset_t saved_set; /* Saved set of caught signals. */ - struct sigaction saved_act; /* Saved signal action. */ - sigset_t new_set; /* New set of caught signals. */ - struct sigaction new_act; /* New signal action. */ - struct flock fl; /* Information struct for locking. */ - int result; - - if (lock_fd != -1) - /* Still locked by own process. */ - return -1; - - /* Prevent problems caused by multiple threads. */ - __libc_lock_lock (lock); - - lock_fd = open (CACHELOCK, O_RDONLY|O_CREAT, 0666); - if (lock_fd == -1) - /* Cannot create lock file. */ - RETURN_CLOSE_FD (-1); - - /* Make sure file gets correctly closed when process finished. */ - flags = fcntl (lock_fd, F_GETFD, 0); - if (flags == -1) - /* Cannot get file flags. */ - RETURN_CLOSE_FD (-1); - flags |= FD_CLOEXEC; /* Close on exit. */ - if (fcntl (lock_fd, F_SETFD, flags) < 0) - /* Cannot set new flags. */ - RETURN_CLOSE_FD (-1); - - /* Now we have to get exclusive write access. Since multiple - process could try this we won't stop when it first fails. - Instead we set a timeout for the system call. Once the timer - expires it is likely that there are some problems which cannot be - resolved by waiting. - - It is important that we don't change the signal state. We must - restore the old signal behaviour. */ - memset (&new_act, '\0', sizeof (struct sigaction)); - new_act.sa_handler = noop_handler; - sigfillset (&new_act.sa_mask); - new_act.sa_flags = 0ul; - - /* Install new action handler for alarm and save old. */ - if (sigaction (SIGALRM, &new_act, &saved_act) < 0) - /* Cannot install signal handler. */ - RETURN_CLOSE_FD (-1); - - /* Now make sure the alarm signal is not blocked. */ - sigemptyset (&new_set); - sigaddset (&new_set, SIGALRM); - if (sigprocmask (SIG_UNBLOCK, &new_set, &saved_set) < 0) - RETURN_RESTORE_HANDLER (-1); - - /* Start timer. If we cannot get the lock in the specified time we - get a signal. */ - alarm (TIMEOUT); - - /* Try to get the lock. */ - memset (&fl, '\0', sizeof (struct flock)); - fl.l_type = F_RDLCK; - fl.l_whence = SEEK_SET; - result = fcntl (lock_fd, F_SETLKW, &fl); - - RETURN_CLEAR_ALARM (result); -} - - -int -__nis_unlock_cache () -{ - int result; - - if (lock_fd == -1) - /* There is no lock set. */ - result = -1; - else - { - /* Prevent problems caused by multiple threads. */ - __libc_lock_lock (lock); - - result = close (lock_fd); - - /* Mark descriptor as unused. */ - lock_fd = -1; - - /* Clear mutex. */ - __libc_lock_unlock (lock); - } - - return result; -} - - -static void -noop_handler (sig) - int sig; -{ - /* We simply return which makes the `fcntl' call return with an error. */ -} diff --git a/nis/libnsl.map b/nis/libnsl.map index cf22d27..49b3754 100644 --- a/nis/libnsl.map +++ b/nis/libnsl.map @@ -1,20 +1,12 @@ GLIBC_2.0 { global: - __nis_default_access; __nis_default_group; __nis_default_owner; - __nis_default_ttl; __nis_finddirectory; __nis_lock_cache; - __nis_unlock_cache; __nis_hash; - nis_add; - nis_add_entry; nis_addmember; nis_checkpoint; - nis_clone_directory; nis_clone_entry; nis_clone_group; - nis_clone_link; nis_clone_nis_attr; nis_clone_objdata; - nis_clone_object; nis_clone_result; nis_clone_table; - nis_creategroup; nis_destroy_object; nis_destroygroup; - nis_dir_cmp; nis_domain_of; nis_domain_of_r; - nis_first_entry; nis_free_attr; nis_free_directory; - nis_free_endpoints; nis_free_entry; nis_free_group; - nis_free_link; nis_free_object; nis_free_request; - nis_free_servers; nis_free_table; nis_freenames; + nis_add; nis_add_entry; nis_addmember; + nis_checkpoint; nis_clone_directory; nis_clone_object; + nis_clone_result; nis_creategroup; nis_destroy_object; + nis_destroygroup; nis_dir_cmp; nis_domain_of; + nis_domain_of_r; nis_first_entry; nis_free_directory; + nis_free_object; nis_free_request; nis_freenames; nis_freeresult; nis_freeservlist; nis_freetags; nis_getnames; nis_getservlist; nis_ismember; nis_leaf_of; nis_leaf_of_r; nis_lerror; @@ -31,8 +23,15 @@ GLIBC_2.0 { nis_sperror; nis_sperror_r; nis_stats; nis_verifygroup; nis_write_obj; - readColdStartFile; writeColdStartFile; + # This functions are needed by the NIS+ tools and rpc.nisd, + # they should never be used in a normal user program ! + __nis_default_access; __nis_default_group; __nis_default_owner; + __nis_default_ttl; __nis_free_fdresult; __nis_finddirectory; + __nis_hash; readColdStartFile; writeColdStartFile; + # Many programs expect this, but every user program should + # have it's own version, since the interface is different on + # various platforms. xdr_cp_result; xdr_directory_obj; xdr_domainname; xdr_dump_args; xdr_endpoint; xdr_entry_col; xdr_entry_obj; xdr_fd_args; xdr_fd_result; @@ -54,7 +53,7 @@ GLIBC_2.0 { xdr_ypresp_xfr; xdr_ypstat; xdr_ypupdate_args; xdr_ypxfrstat; xdr_zotypes; - __yp_check; + __yp_check; yp_all; yp_bind; yp_first; yp_get_default_domain; yp_maplist; yp_master; yp_match; yp_next; yp_order; diff --git a/nis/nis_add.c b/nis/nis_add.c index 6693a25..d30ccde 100644 --- a/nis/nis_add.c +++ b/nis/nis_add.c @@ -18,7 +18,6 @@ Boston, MA 02111-1307, USA. */ #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> #include "nis_intern.h" diff --git a/nis/nis_addmember.c b/nis/nis_addmember.c index 8fd7e12..6d55bd0 100644 --- a/nis/nis_addmember.c +++ b/nis/nis_addmember.c @@ -19,7 +19,6 @@ #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> nis_error nis_addmember (const_nis_name member, const_nis_name group) @@ -42,28 +41,28 @@ nis_addmember (const_nis_name member, const_nis_name group) stpcpy (cp, cp2); } res = nis_lookup (buf, FOLLOW_LINKS|EXPAND_NAME); - if (res->status != NIS_SUCCESS) + if (NIS_RES_STATUS (res) != NIS_SUCCESS) { - status = res->status; + status = NIS_RES_STATUS (res); nis_freeresult (res); return status; } - if ((res->objects.objects_len != 1) || - (res->objects.objects_val[0].zo_data.zo_type != GROUP_OBJ)) + if ((NIS_RES_NUMOBJ (res) != 1) || + (__type_of (NIS_RES_OBJECT (res)) != NIS_GROUP_OBJ)) return NIS_INVALIDOBJ; - res->objects.objects_val[0].GR_data.gr_members.gr_members_val - = realloc (res->objects.objects_val[0].GR_data.gr_members.gr_members_val, - (res->objects.objects_val[0].GR_data.gr_members.gr_members_len + 1) + NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val + = realloc (NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val, + (NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_len + 1) * sizeof (char *)); - res->objects.objects_val[0].GR_data.gr_members.gr_members_val[res->objects.objects_val[0].GR_data.gr_members.gr_members_len] = strdup (member); - ++res->objects.objects_val[0].GR_data.gr_members.gr_members_len; + NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val[NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_len] = strdup (member); + ++NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_len; - cp = stpcpy (buf, res->objects.objects_val->zo_name); + cp = stpcpy (buf, NIS_RES_OBJECT(res)->zo_name); *cp++ = '.'; - strncpy (cp, res->objects.objects_val->zo_domain, NIS_MAXNAMELEN); - res2 = nis_modify (buf, res->objects.objects_val); - status = res2->status; + strncpy (cp, NIS_RES_OBJECT (res)->zo_domain, NIS_MAXNAMELEN); + res2 = nis_modify (buf, NIS_RES_OBJECT (res)); + status = NIS_RES_STATUS (res2); nis_freeresult (res); nis_freeresult (res2); diff --git a/nis/nis_cache.c b/nis/nis_cache.c deleted file mode 100644 index e10b8c0..0000000 --- a/nis/nis_cache.c +++ /dev/null @@ -1,307 +0,0 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. - - The GNU C 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. - - The GNU C 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 the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include <fcntl.h> -#include <unistd.h> -#include <syslog.h> -#include <string.h> -#include <sys/stat.h> -#include <sys/mman.h> -#include <rpcsvc/nis.h> -#include <rpcsvc/nis_cache.h> -#include <bits/libc-lock.h> - -#include "nis_intern.h" - -static struct timeval TIMEOUT = {10, 0}; - -#define HEADER_MAGIC 0x07021971 -#define SPACER_MAGIC 0x07654321 - -#define CACHE_VERSION 0x00000001 - -struct cache_header -{ - u_long magic; /* Magic number */ - u_long vers; /* Cache file format version */ - u_short tcp_port; /* tcp port of nis_cachemgr */ - u_short udp_port; /* udp port of nis_cachemgr */ - u_long entries; /* Number of cached objs. */ - off_t used; /* How many space are used ? */ -}; -typedef struct cache_header cache_header; - -struct cache_spacer -{ - u_long magic; /* Magic number */ - u_long hashval; - time_t ctime; /* time we have created this object */ - time_t ttl; /* time to life of this object */ - off_t next_offset; -}; -typedef struct cache_spacer cache_spacer; - -static int cache_fd = -1; -static int clnt_sock; -static caddr_t maddr = NULL; -static size_t msize; -static CLIENT *cache_clnt = NULL; - -/* If there is no cachemgr, we shouldn't use NIS_SHARED_DIRCACHE, if - there is no NIS_SHARED_DIRCACHE, we couldn't use nis_cachemgr. - So, if the clnt_call to nis_cachemgr fails, we also close the cache file. - But another thread could read the cache => lock the cache_fd and cache_clnt - variables with the same lock */ -__libc_lock_define_initialized (static, mgrlock) - -/* close file handles and nis_cachemgr connection */ -static void -__cache_close (void) -{ - if (cache_fd != -1) - { - close (cache_fd); - cache_fd = -1; - } - if (cache_clnt != NULL) - { - clnt_destroy (cache_clnt); - close (clnt_sock); - cache_clnt = NULL; - } -} - -/* open the cache file and connect to nis_cachemgr */ -static bool_t -__cache_open (void) -{ - struct sockaddr_in sin; - cache_header hptr; - - if ((cache_fd = open (CACHEFILE, O_RDONLY)) == -1) - return FALSE; - - if (read (cache_fd, &hptr, sizeof (cache_header)) == -1 - || lseek (cache_fd, 0, SEEK_SET) < 0) - { - close (cache_fd); - cache_fd = -1; - return FALSE; - } - if (hptr.magic != HEADER_MAGIC) - { - close (cache_fd); - cache_fd = -1; - syslog (LOG_ERR, _("NIS+: cache file is corrupt!")); - return FALSE; - } - - memset (&sin, '\0', sizeof (sin)); - sin.sin_family = AF_INET; - clnt_sock = RPC_ANYSOCK; - sin.sin_addr.s_addr = htonl (INADDR_LOOPBACK); - sin.sin_port = htons (hptr.tcp_port); - cache_clnt = clnttcp_create (&sin, CACHEPROG, CACHE_VER_1, &clnt_sock, 0, 0); - if (cache_clnt == NULL) - { - close (cache_fd); - cache_fd = -1; - return FALSE; - } - /* If the program exists, close the socket */ - if (fcntl (clnt_sock, F_SETFD, FD_CLOEXEC) == -1) - perror (_("fcntl: F_SETFD")); - return TRUE; -} - -/* Ask the cache manager to update directory 'name' - for us (because the ttl has expired). */ -static nis_error -__cache_refresh (nis_name name) -{ - char clnt_res = 0; - nis_error result = NIS_SUCCESS; - - __libc_lock_lock (mgrlock); - - if (cache_clnt == NULL) - result = NIS_FAIL; - else if (clnt_call (cache_clnt, NIS_CACHE_REFRESH_ENTRY, - (xdrproc_t) xdr_wrapstring, (caddr_t) &name, - (xdrproc_t) xdr_void, &clnt_res, TIMEOUT) - != RPC_SUCCESS) - { - __cache_close (); - result = NIS_FAIL; - } - - __libc_lock_unlock (mgrlock); - - return result; -} - -static nis_error -__cache_find (const_nis_name name, directory_obj **obj) -{ - unsigned long hash; - struct cache_header *hptr; - struct cache_spacer *cs; - struct directory_obj *dir; - XDR xdrs; - caddr_t addr, ptr; - time_t now = time (NULL); - - if (maddr == NULL) - return NIS_FAIL; - - hash = __nis_hash (name, strlen(name)); - hptr = (cache_header *)maddr; - if ((hptr->magic != HEADER_MAGIC) || (hptr->vers != CACHE_VERSION)) - { - syslog (LOG_ERR, _("NIS+: cache file is corrupt!")); - return NIS_SYSTEMERROR; - } - cs = (cache_spacer *)(maddr + sizeof (cache_header)); - while (cs->next_offset) - { - if (cs->magic != SPACER_MAGIC) - { - syslog (LOG_ERR, _("NIS+: cache file is corrupt!")); - return NIS_SYSTEMERROR; - } - if (cs->hashval == hash) - { - if ((now - cs->ctime) > cs->ttl) - return NIS_CACHEEXPIRED; - dir = calloc (1, sizeof (directory_obj)); - addr = (caddr_t)cs + sizeof (cache_spacer); - xdrmem_create (&xdrs, addr, cs->next_offset, XDR_DECODE); - xdr_directory_obj (&xdrs, dir); - xdr_destroy (&xdrs); - *obj = dir; - return NIS_SUCCESS; - } - ptr = (caddr_t)cs; - ptr += cs->next_offset + sizeof (struct cache_spacer); - cs = (struct cache_spacer *)ptr; - } - return NIS_NOTFOUND; -} - -static directory_obj * -internal_cache_search (const_nis_name name) -{ - directory_obj *dir; - nis_error res; - int second_refresh = 0; - struct stat s; - - if (cache_fd == -1) - if (__cache_open () == FALSE) - return NULL; - - again: - /* This lock is for nis_cachemgr, so it couldn't write a new cache - file if we reading it */ - if (__nis_lock_cache () == -1) - return NULL; - - if (maddr != NULL) - munmap (maddr, msize); - if (fstat (cache_fd, &s) < 0) - maddr = MAP_FAILED; - else - { - msize = s.st_size; - maddr = mmap (0, msize, PROT_READ, MAP_SHARED, cache_fd, 0); - } - if (maddr == MAP_FAILED) - { - __nis_unlock_cache (); - return NULL; - } - - res = __cache_find (name, &dir); - - munmap (maddr, msize); - maddr = NULL; - /* Allow nis_cachemgr to write a new cachefile */ - __nis_unlock_cache (); - - switch(res) - { - case NIS_CACHEEXPIRED: - if (second_refresh) - { - __cache_close (); - syslog (LOG_WARNING, - _("NIS+: nis_cachemgr failed to refresh object for us")); - return NULL; - } - ++second_refresh; - if (__cache_refresh ((char *) name) != NIS_SUCCESS) - return NULL; - goto again; - break; - case NIS_SUCCESS: - return dir; - default: - return NULL; - } -} - -directory_obj * -__cache_search (const_nis_name name) -{ - directory_obj *dir; - - __libc_lock_lock (mgrlock); - - dir = internal_cache_search (name); - - __libc_lock_unlock (mgrlock); - - return dir; -} - -nis_error -__cache_add (fd_result *fd) -{ - char clnt_res = 0; - nis_error result = NIS_SUCCESS; - - __libc_lock_lock (mgrlock); - - if (cache_clnt == NULL) - if (__cache_open () == FALSE) - result = NIS_FAIL; - - if (cache_clnt != NULL && - (clnt_call (cache_clnt, NIS_CACHE_ADD_ENTRY, (xdrproc_t) xdr_fd_result, - (caddr_t)fd, (xdrproc_t) xdr_void, &clnt_res, TIMEOUT) - != RPC_SUCCESS)) - { - __cache_close (); - result = NIS_RPCERROR; - } - - __libc_lock_unlock (mgrlock); - - return result; -} diff --git a/nis/nis_call.c b/nis/nis_call.c index 06f63ee..aaefdd2 100644 --- a/nis/nis_call.c +++ b/nis/nis_call.c @@ -462,13 +462,12 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, u_long flags, xdr_free((xdrproc_t)xdr_fd_result, (caddr_t)fd_res); return NULL; } - __cache_add (fd_res); obj = calloc(1, sizeof(directory_obj)); xdrmem_create(&xdrs, fd_res->dir_data.dir_data_val, fd_res->dir_data.dir_data_len, XDR_DECODE); xdr_directory_obj(&xdrs, obj); xdr_destroy(&xdrs); - xdr_free((xdrproc_t)xdr_fd_result, (caddr_t)fd_res); + __free_fdresult (fd_res); if (obj != NULL) { /* We have found a NIS+ server serving ndomain, now @@ -515,13 +514,12 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, u_long flags, xdr_free((xdrproc_t)xdr_fd_result, (caddr_t)fd_res); return NULL; } - __cache_add (fd_res); obj = calloc(1, sizeof(directory_obj)); xdrmem_create(&xdrs, fd_res->dir_data.dir_data_val, fd_res->dir_data.dir_data_len, XDR_DECODE); xdr_directory_obj(&xdrs, obj); xdr_destroy(&xdrs); - xdr_free((xdrproc_t)xdr_fd_result, (caddr_t)fd_res); + __free_fdresult (fd_res); if (obj != NULL) { /* We have found a NIS+ server serving ndomain, now @@ -554,9 +552,6 @@ __do_niscall (const_nis_name name, u_long prog, xdrproc_t xargs, if (name == NULL) return NIS_BADNAME; - if ((flags & NO_CACHE) != NO_CACHE) - dir = __cache_search (name); - if (dir == NULL) { nis_error status; diff --git a/nis/nis_checkpoint.c b/nis/nis_checkpoint.c index 15cdd58..f4bd072 100644 --- a/nis/nis_checkpoint.c +++ b/nis/nis_checkpoint.c @@ -18,7 +18,6 @@ Boston, MA 02111-1307, USA. */ #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> #include "nis_intern.h" nis_result * @@ -35,26 +34,25 @@ nis_checkpoint(const_nis_name dirname) u_int i; res2 = nis_lookup (dirname, EXPAND_NAME); - if (res2->status != NIS_SUCCESS && res2->status != NIS_S_SUCCESS) + if (NIS_RES_STATUS (res2) != NIS_SUCCESS) return res2; /* Check if obj is really a diryectory object */ - if (res2->objects.objects_val[0].zo_data.zo_type != DIRECTORY_OBJ) + if (__type_of (NIS_RES_OBJECT (res2)) != NIS_DIRECTORY_OBJ) { nis_freeresult (res); - res->status = NIS_INVALIDOBJ; + NIS_RES_STATUS (res) = NIS_INVALIDOBJ; return res; } for (i = 0; - i < res2->objects.objects_val[0].DI_data.do_servers.do_servers_len; - ++i) + i < NIS_RES_OBJECT (res2)->DI_data.do_servers.do_servers_len; ++i) { - if (__do_niscall2 (&res2->objects.objects_val[0].DI_data.do_servers.do_servers_val[i], - 1, NIS_CHECKPOINT, (xdrproc_t) xdr_nis_name, - (caddr_t) &dirname, (xdrproc_t) xdr_cp_result, - (caddr_t) &cpres, 0, NULL) != RPC_SUCCESS) - res->status = NIS_RPCERROR; + if (__do_niscall2 (&NIS_RES_OBJECT(res2)->DI_data.do_servers.do_servers_val[i], + 1, NIS_CHECKPOINT, (xdrproc_t) xdr_nis_name, + (caddr_t) &dirname, (xdrproc_t) xdr_cp_result, + (caddr_t) &cpres, 0, NULL) != RPC_SUCCESS) + NIS_RES_STATUS (res) = NIS_RPCERROR; else { res->status += cpres->cp_status; @@ -65,7 +63,7 @@ nis_checkpoint(const_nis_name dirname) nis_freeresult (res2); } else - res->status = NIS_NOSUCHNAME; + NIS_RES_STATUS (res) = NIS_NOSUCHNAME; return res; } diff --git a/nis/nis_clone.c b/nis/nis_clone.c deleted file mode 100644 index a1d7536..0000000 --- a/nis/nis_clone.c +++ /dev/null @@ -1,573 +0,0 @@ -/* Copyright (c) 1997 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. - - The GNU C 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. - - The GNU C 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 the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include <string.h> -#include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> - -directory_obj * -nis_clone_directory (const directory_obj *src, directory_obj *dest) -{ - directory_obj *res; - - if (src == NULL) - return NULL; - - if (dest == NULL) - { - res = calloc (1, sizeof (directory_obj)); - if (res == NULL) - return NULL; - } - else - res = dest; - - if (src->do_name) - res->do_name = strdup (src->do_name); - else - res->do_name = NULL; - res->do_type = src->do_type; - if (src->do_servers.do_servers_len > 0) - { - size_t i; - - res->do_servers.do_servers_len = src->do_servers.do_servers_len; - if ((res->do_servers.do_servers_val = - malloc (src->do_servers.do_servers_len * sizeof (nis_server))) - == NULL) - return NULL; - - for (i = 0; i < src->do_servers.do_servers_len; ++i) - { - if (src->do_servers.do_servers_val[i].name != NULL) - res->do_servers.do_servers_val[i].name = - strdup (src->do_servers.do_servers_val[i].name); - else - res->do_servers.do_servers_val[i].name = NULL; - - res->do_servers.do_servers_val[i].ep.ep_len = - src->do_servers.do_servers_val[i].ep.ep_len; - if (res->do_servers.do_servers_val[i].ep.ep_len > 0) - { - size_t j; - - res->do_servers.do_servers_val[i].ep.ep_val = - malloc (src->do_servers.do_servers_val[i].ep.ep_len * - sizeof (endpoint)); - for (j = 0; j < res->do_servers.do_servers_val[i].ep.ep_len; ++j) - { - if (src->do_servers.do_servers_val[i].ep.ep_val[j].uaddr) - res->do_servers.do_servers_val[i].ep.ep_val[j].uaddr - = strdup (src->do_servers.do_servers_val[i].ep.ep_val[j].uaddr); - else - res->do_servers.do_servers_val[i].ep.ep_val[j].uaddr = NULL; - - if (src->do_servers.do_servers_val[i].ep.ep_val[j].family) - res->do_servers.do_servers_val[i].ep.ep_val[j].family - = strdup (src->do_servers.do_servers_val[i].ep.ep_val[j].family); - else - res->do_servers.do_servers_val[i].ep.ep_val[j].family = NULL; - - if (src->do_servers.do_servers_val[i].ep.ep_val[j].proto) - res->do_servers.do_servers_val[i].ep.ep_val[j].proto - = strdup (src->do_servers.do_servers_val[i].ep.ep_val[j].proto); - else - res->do_servers.do_servers_val[i].ep.ep_val[j].proto = NULL; - } - } - else - { - res->do_servers.do_servers_val[i].ep.ep_val = NULL; - } - res->do_servers.do_servers_val[i].key_type = - src->do_servers.do_servers_val[i].key_type; - res->do_servers.do_servers_val[i].pkey.n_len = - src->do_servers.do_servers_val[i].pkey.n_len; - if (res->do_servers.do_servers_val[i].pkey.n_len > 0) - { - res->do_servers.do_servers_val[i].pkey.n_bytes = - malloc (src->do_servers.do_servers_val[i].pkey.n_len); - if (res->do_servers.do_servers_val[i].pkey.n_bytes == NULL) - return NULL; - memcpy (res->do_servers.do_servers_val[i].pkey.n_bytes, - src->do_servers.do_servers_val[i].pkey.n_bytes, - src->do_servers.do_servers_val[i].pkey.n_len); - } - else - res->do_servers.do_servers_val[i].pkey.n_bytes = NULL; - } - } - else - { - res->do_servers.do_servers_len = 0; - res->do_servers.do_servers_val = NULL; - } - res->do_ttl = src->do_ttl; - res->do_armask.do_armask_len = src->do_armask.do_armask_len; - if (res->do_armask.do_armask_len > 0) - { - if ((res->do_armask.do_armask_val = - malloc (src->do_armask.do_armask_len * sizeof (oar_mask))) == NULL) - return NULL; - memcpy (res->do_armask.do_armask_val, src->do_armask.do_armask_val, - src->do_armask.do_armask_len * sizeof (oar_mask)); - } - else - { - res->do_armask.do_armask_val = NULL; - } - - return res; -} - -group_obj * -nis_clone_group (const group_obj *src, group_obj *dest) -{ - size_t i; - group_obj *res = NULL; - - if (src == NULL) - return NULL; - - if (dest == NULL) - { - res = calloc (1, sizeof (group_obj)); - if (res == NULL) - return NULL; - } - else - res = dest; - - res->gr_flags = src->gr_flags; - - res->gr_members.gr_members_len = src->gr_members.gr_members_len; - if (res->gr_members.gr_members_len > 0) - { - if (res->gr_members.gr_members_val == NULL) - { - if ((res->gr_members.gr_members_val = - malloc (res->gr_members.gr_members_len * sizeof (nis_name))) == NULL) - return NULL; - } - for (i = 0; i < res->gr_members.gr_members_len; ++i) - if (src->gr_members.gr_members_val[i] != NULL) - res->gr_members.gr_members_val[i] = - strdup (src->gr_members.gr_members_val[i]); - else - res->gr_members.gr_members_val[i] = NULL; - } - - return res; -} - -table_obj * -nis_clone_table (const table_obj *src, table_obj *dest) -{ - size_t i; - table_obj *res = NULL; - - if (src == NULL) - return NULL; - - if (dest == NULL) - { - res = calloc (1, sizeof (table_obj)); - if (res == NULL) - return res; - } - else - res = dest; - - if (src->ta_type != NULL) - { - if ((res->ta_type = strdup (src->ta_type)) == NULL) - return NULL; - } - else - res->ta_type = NULL; - - res->ta_maxcol = src->ta_maxcol; - res->ta_sep = src->ta_sep; - res->ta_cols.ta_cols_len = src->ta_cols.ta_cols_len; - if (res->ta_cols.ta_cols_val == NULL) - { - if ((res->ta_cols.ta_cols_val = - calloc (1, src->ta_cols.ta_cols_len * sizeof (table_col))) == NULL) - return NULL; - } - for (i = 0; i < res->ta_cols.ta_cols_len; i++) - { - if (src->ta_cols.ta_cols_val[i].tc_name == NULL) - res->ta_cols.ta_cols_val[i].tc_name = NULL; - else - res->ta_cols.ta_cols_val[i].tc_name = - strdup (src->ta_cols.ta_cols_val[i].tc_name); - res->ta_cols.ta_cols_val[i].tc_flags = - src->ta_cols.ta_cols_val[i].tc_flags; - res->ta_cols.ta_cols_val[i].tc_rights = - src->ta_cols.ta_cols_val[i].tc_rights; - } - - if (src->ta_path != NULL) - { - if ((res->ta_path = strdup (src->ta_path)) == NULL) - return NULL; - } - else - res->ta_path = NULL; - - return res; -} - -entry_obj * -nis_clone_entry (const entry_obj *src, entry_obj *dest) -{ - size_t i; - entry_obj *res = NULL; - - if (src == NULL) - return NULL; - - if (dest == NULL) - { - res = calloc (1, sizeof (entry_obj)); - if (res == NULL) - return NULL; - } - else - res = dest; - - if (src->en_type) - res->en_type = strdup (src->en_type); - else - res->en_type = NULL; - - res->en_cols.en_cols_len = src->en_cols.en_cols_len; - if (res->en_cols.en_cols_val == NULL && src->en_cols.en_cols_len > 0) - { - res->en_cols.en_cols_val = - calloc (1, src->en_cols.en_cols_len * sizeof (entry_col)); - if (res->en_cols.en_cols_val == NULL) - return NULL; - } - for (i = 0; i < res->en_cols.en_cols_len; ++i) - { - res->en_cols.en_cols_val[i].ec_flags = - src->en_cols.en_cols_val[i].ec_flags; - res->en_cols.en_cols_val[i].ec_value.ec_value_len = - src->en_cols.en_cols_val[i].ec_value.ec_value_len; - if (res->en_cols.en_cols_val[i].ec_value.ec_value_val == NULL && - src->en_cols.en_cols_val[i].ec_value.ec_value_len > 0) - res->en_cols.en_cols_val[i].ec_value.ec_value_val = - malloc (src->en_cols.en_cols_val[i].ec_value.ec_value_len); - memcpy (res->en_cols.en_cols_val[i].ec_value.ec_value_val, - src->en_cols.en_cols_val[i].ec_value.ec_value_val, - res->en_cols.en_cols_val[i].ec_value.ec_value_len); - } - - return res; -} - -nis_attr * -nis_clone_nis_attr (const nis_attr *src, nis_attr *dest) -{ - nis_attr *res = NULL; - - if (src == NULL) - return NULL; - - if (dest == NULL) - { - res = calloc (1, sizeof (nis_attr)); - if (res == NULL) - return NULL; - } - else - res = dest; - - if (src->zattr_ndx != NULL) - { - if ((res->zattr_ndx = strdup (src->zattr_ndx)) == NULL) - return NULL; - } - else - res->zattr_ndx = NULL; - - res->zattr_val.zattr_val_len = src->zattr_val.zattr_val_len; - if (res->zattr_val.zattr_val_len > 0) - { - if (res->zattr_val.zattr_val_val == NULL) - { - if ((res->zattr_val.zattr_val_val = - calloc (1, src->zattr_val.zattr_val_len)) == NULL) - return NULL; - } - memcpy (res->zattr_val.zattr_val_val, src->zattr_val.zattr_val_val, - src->zattr_val.zattr_val_len); - } - else - res->zattr_val.zattr_val_val = NULL; - return res; -} - -static nis_attr * -__nis_clone_attrs (const nis_attr *src, nis_attr *dest, u_int len) -{ - unsigned int i; - nis_attr *res; - - if (len == 0) - return dest; - - if (dest == NULL) - { - res = calloc (len, sizeof (nis_attr)); - if (res == NULL) - return NULL; - } - else - res = dest; - - for (i = 0; i < len; i++) - nis_clone_nis_attr(&src[i], &res[i]); - - return res; -} - -link_obj * -nis_clone_link (const link_obj *src, link_obj *dest) -{ - link_obj *res = NULL; - - if (src == NULL) - return NULL; - - if (dest == NULL) - { - res = calloc (1, sizeof (link_obj)); - if (res == NULL) - return NULL; - } - else - res = dest; - - res->li_rtype = src->li_rtype; - - res->li_attrs.li_attrs_len = src->li_attrs.li_attrs_len; - res->li_attrs.li_attrs_val = - __nis_clone_attrs (src->li_attrs.li_attrs_val, - res->li_attrs.li_attrs_val, - src->li_attrs.li_attrs_len); - - if (src->li_name) - { - if ((res->li_name = strdup (src->li_name)) == NULL) - return NULL; - } - else - res->li_name = NULL; - - return res; -} - -objdata * -nis_clone_objdata (const objdata *src, objdata *dest) -{ - objdata *res = NULL; - - if (src == NULL) - return NULL; - - if (dest == NULL) - { - res = calloc (1, sizeof (objdata)); - if (res == NULL) - return res; - } - else - res = dest; - - res->zo_type = src->zo_type; - - switch (src->zo_type) - { - case BOGUS_OBJ: - break; - case NO_OBJ: - break; - case DIRECTORY_OBJ: - if (nis_clone_directory (&src->objdata_u.di_data, - &res->objdata_u.di_data) == NULL) - return NULL; - break; - case GROUP_OBJ: - if (nis_clone_group (&src->objdata_u.gr_data, - &res->objdata_u.gr_data) == NULL) - return NULL; - break; - case TABLE_OBJ: - if (nis_clone_table (&src->objdata_u.ta_data, - &res->objdata_u.ta_data) == NULL) - return NULL; - break; - case ENTRY_OBJ: - if (nis_clone_entry (&src->objdata_u.en_data, - &res->objdata_u.en_data) == NULL) - return NULL; - break; - case LINK_OBJ: - if (nis_clone_link (&src->objdata_u.li_data, - &res->objdata_u.li_data) == NULL) - return NULL; - break; - case PRIVATE_OBJ: - res->objdata_u.po_data.po_data_len = - src->objdata_u.po_data.po_data_len; - if (src->objdata_u.po_data.po_data_val) - { - if ((res->objdata_u.po_data.po_data_val = - malloc (res->objdata_u.po_data.po_data_len)) == NULL) - return NULL; - memcpy (res->objdata_u.po_data.po_data_val, - src->objdata_u.po_data.po_data_val, - src->objdata_u.po_data.po_data_len); - } - else - { - res->objdata_u.po_data.po_data_val = NULL; - res->objdata_u.po_data.po_data_len = 0; - } - break; - default: - return NULL; - } - - return res; -} - -nis_object * -nis_clone_object (const nis_object *src, nis_object *dest) -{ - nis_object *res = NULL; - - if (src == NULL) - return NULL; - - if (dest == NULL) - { - res = calloc (1, sizeof (nis_object)); - if (res == NULL) - return NULL; - } - else - res = dest; - - res->zo_oid = src->zo_oid; - - if (src->zo_name) - { - if ((res->zo_name = strdup (src->zo_name)) == NULL) - return NULL; - } - else - res->zo_name = NULL; - if (src->zo_owner) - { - if ((res->zo_owner = strdup (src->zo_owner)) == NULL) - return NULL; - } - else - res->zo_owner = NULL; - if (src->zo_group) - { - if ((res->zo_group = strdup (src->zo_group)) == NULL) - return NULL; - } - else - res->zo_group = NULL; - if (src->zo_domain) - { - if ((res->zo_domain = strdup (src->zo_domain)) == NULL) - return NULL; - } - else - res->zo_domain = NULL; - res->zo_access = src->zo_access; - res->zo_ttl = src->zo_ttl; - - if (nis_clone_objdata (&src->zo_data, &res->zo_data) == NULL) - return NULL; - - return res; -} - -static nis_object * -__nis_clone_objects (const nis_object *src, nis_object *dest, u_int len) -{ - unsigned int i; - nis_object *res; - - if (len == 0) - return dest; - - if (dest == NULL) - { - res = calloc (len, sizeof (nis_object)); - if (res == NULL) - return NULL; - } - else - res = dest; - - for (i = 0; i < len; ++i) - nis_clone_object(&src[i], &res[i]); - - return res; -} - -nis_result * -nis_clone_result (const nis_result *src, nis_result *dest) -{ - nis_result *res = NULL; - - if (src == NULL) - return NULL; - - if (dest == NULL) - { - res = calloc (1, sizeof (nis_result)); - if (res == NULL) - return NULL; - } - else - res = dest; - - res->status = src->status; - res->objects.objects_len = src->objects.objects_len; - res->objects.objects_val = - __nis_clone_objects (src->objects.objects_val, - res->objects.objects_val, - src->objects.objects_len); - res->zticks = src->zticks; - res->dticks = src->dticks; - res->aticks = src->aticks; - res->cticks = src->cticks; - - return res; -} diff --git a/nis/nis_clone_dir.c b/nis/nis_clone_dir.c new file mode 100644 index 0000000..4d641e5 --- /dev/null +++ b/nis/nis_clone_dir.c @@ -0,0 +1,69 @@ +/* Copyright (c) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. + + The GNU C 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. + + The GNU C 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 the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <string.h> +#include <rpc/rpc.h> +#include <rpcsvc/nis.h> + +directory_obj * +nis_clone_directory (const directory_obj *src, directory_obj *dest) +{ + unsigned char *addr; + unsigned int size; + XDR xdrs; + directory_obj *res; + + if (src == NULL) + return (NULL); + + size = xdr_sizeof ((xdrproc_t)xdr_directory_obj, (char *)src); + if ((addr = calloc(1, size)) == NULL) + return NULL; + + if (dest == NULL) + { + if ((res = calloc (1, sizeof (directory_obj))) == NULL) + { + free (addr); + return NULL; + } + } + else + res = dest; + + xdrmem_create(&xdrs, addr, size, XDR_ENCODE); + if (!xdr_directory_obj (&xdrs, (directory_obj *)src)) + { + xdr_destroy (&xdrs); + free (addr); + return NULL; + } + xdr_destroy (&xdrs); + xdrmem_create (&xdrs, addr, size, XDR_DECODE); + if (!xdr_directory_obj (&xdrs, res)) + { + xdr_destroy (&xdrs); + free (addr); + return NULL; + } + xdr_destroy (&xdrs); + free (addr); + + return res; +} diff --git a/nis/nis_clone_obj.c b/nis/nis_clone_obj.c new file mode 100644 index 0000000..291148f --- /dev/null +++ b/nis/nis_clone_obj.c @@ -0,0 +1,69 @@ +/* Copyright (c) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. + + The GNU C 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. + + The GNU C 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 the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <string.h> +#include <rpc/rpc.h> +#include <rpcsvc/nis.h> + +nis_object * +nis_clone_object (const nis_object *src, nis_object *dest) +{ + unsigned char *addr; + unsigned int size; + XDR xdrs; + nis_object *res; + + if (src == NULL) + return (NULL); + + size = xdr_sizeof ((xdrproc_t)xdr_nis_object, (char *)src); + if ((addr = calloc(1, size)) == NULL) + return NULL; + + if (dest == NULL) + { + if ((res = calloc (1, sizeof (nis_object))) == NULL) + { + free (addr); + return NULL; + } + } + else + res = dest; + + xdrmem_create(&xdrs, addr, size, XDR_ENCODE); + if (!xdr_nis_object (&xdrs, (nis_object *)src)) + { + xdr_destroy (&xdrs); + free (addr); + return NULL; + } + xdr_destroy (&xdrs); + xdrmem_create(&xdrs, addr, size, XDR_DECODE); + if (!xdr_nis_object(&xdrs, res)) + { + xdr_destroy (&xdrs); + free (addr); + return NULL; + } + xdr_destroy (&xdrs); + free (addr); + + return res; +} diff --git a/nis/nis_clone_res.c b/nis/nis_clone_res.c new file mode 100644 index 0000000..9bdc4d8 --- /dev/null +++ b/nis/nis_clone_res.c @@ -0,0 +1,69 @@ +/* Copyright (c) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. + + The GNU C 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. + + The GNU C 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 the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <string.h> +#include <rpc/rpc.h> +#include <rpcsvc/nis.h> + +nis_result * +nis_clone_result (const nis_result *src, nis_result *dest) +{ + unsigned char *addr; + unsigned int size; + XDR xdrs; + nis_result *res; + + if (src == NULL) + return (NULL); + + size = xdr_sizeof ((xdrproc_t)xdr_nis_result, (char *)src); + if ((addr = calloc(1, size)) == NULL) + return NULL; + + if (dest == NULL) + { + if ((res = calloc (1, sizeof (nis_result))) == NULL) + { + free (addr); + return NULL; + } + } + else + res = dest; + + xdrmem_create(&xdrs, addr, size, XDR_ENCODE); + if (!xdr_nis_result (&xdrs, (nis_result *)src)) + { + xdr_destroy (&xdrs); + free (addr); + return NULL; + } + xdr_destroy (&xdrs); + xdrmem_create(&xdrs, addr, size, XDR_DECODE); + if (!xdr_nis_result(&xdrs, res)) + { + xdr_destroy (&xdrs); + free (addr); + return NULL; + } + xdr_destroy (&xdrs); + free (addr); + + return res; +} diff --git a/nis/nis_creategroup.c b/nis/nis_creategroup.c index d1de08c..2405731 100644 --- a/nis/nis_creategroup.c +++ b/nis/nis_creategroup.c @@ -19,7 +19,6 @@ #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> nis_error nis_creategroup (const_nis_name group, u_long flags) @@ -50,7 +49,7 @@ nis_creategroup (const_nis_name group, u_long flags) obj->zo_group = strdup (__nis_default_group (NULL)); obj->zo_access = __nis_default_access (NULL, 0); obj->zo_ttl = __nis_default_ttl (0); - obj->zo_data.zo_type = GROUP_OBJ; + obj->zo_data.zo_type = NIS_GROUP_OBJ; obj->zo_data.objdata_u.gr_data.gr_flags = flags; obj->zo_data.objdata_u.gr_data.gr_members.gr_members_len = 0; obj->zo_data.objdata_u.gr_data.gr_members.gr_members_val = NULL; diff --git a/nis/nis_defaults.c b/nis/nis_defaults.c index 53a585b..21a8050 100644 --- a/nis/nis_defaults.c +++ b/nis/nis_defaults.c @@ -23,7 +23,6 @@ #include <sys/types.h> #include <rpc/rpc.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> #define DEFAULT_TTL 43200 @@ -33,8 +32,7 @@ static nis_name searchgroup (char *str) { - static char default_group[NIS_MAXNAMELEN]; - char *cptr; + char *cptr; int i; cptr = strstr (str, "group="); @@ -48,13 +46,12 @@ searchgroup (char *str) if (i == 0) /* only "group=" ? */ return (nis_name) ""; - return strncpy (default_group, cptr, i); + return strndup (cptr, i); } static nis_name searchowner (char *str) { - static char default_owner[NIS_MAXNAMELEN]; char *cptr; int i; @@ -67,9 +64,9 @@ searchowner (char *str) while (cptr[i] != '\0' && cptr[i] != ':') i++; if (i == 0) /* only "owner=" ? */ - return (nis_name)""; + return strdup (""); - return strncpy (default_owner, cptr, i); + return strndup (cptr, i); } static u_long @@ -134,9 +131,9 @@ searchttl (char *str) static u_long searchaccess (char *str, u_long access) { - static char buf[NIS_MAXNAMELEN]; + char buf[NIS_MAXNAMELEN]; char *cptr; - u_long result; + u_long result = access; int i; int n, o, g, w; @@ -153,7 +150,7 @@ searchaccess (char *str, u_long access) strncpy (buf, cptr, i); - result = n = o = g = w = 0; + n = o = g = w = 0; cptr = buf; while (*cptr != '\0') { @@ -221,11 +218,11 @@ searchaccess (char *str, u_long access) result = result & ~(NIS_DESTROY_ACC); break; default: - fprintf (stderr, "Parse error in \"%s\"\n", buf); - return 0; + return ULONG_MAX; } cptr++; } + n = o = g = w = 0; break; case '+': cptr++; /* Remove "=" from beginning */ @@ -274,11 +271,11 @@ searchaccess (char *str, u_long access) result = result | (NIS_DESTROY_ACC); break; default: - fprintf (stderr, "Parse error in \"%s\"\n", buf); - return 0; + return ULONG_MAX; } cptr++; } + n = o = g = w = 0; break; case '=': cptr++; /* Remove "=" from beginning */ @@ -341,26 +338,25 @@ searchaccess (char *str, u_long access) result = result | (NIS_DESTROY_ACC); break; default: - fprintf (stderr, "Parse error in \"%s\"\n", buf); - return 0; + return result = ULONG_MAX; } cptr++; } + n = o = g = w = 0; break; default: - fprintf (stderr, "Parse error in \"%s\"\n", buf); - return 0; + return result = ULONG_MAX; } cptr++; } - return 0; + return result; } nis_name __nis_default_owner (char *defaults) { - static char default_owner[NIS_MAXNAMELEN]; + char default_owner[NIS_MAXNAMELEN]; char *cptr, *dptr; strcpy (default_owner, nis_local_principal ()); @@ -369,7 +365,11 @@ __nis_default_owner (char *defaults) { dptr = strstr (defaults, "owner="); if (dptr != NULL) - strcpy (default_owner, searchowner (defaults)); + { + char *p = searchowner (defaults); + strcpy (default_owner, p); + free (p); + } } else { @@ -378,17 +378,21 @@ __nis_default_owner (char *defaults) { dptr = strstr (cptr, "owner="); if (dptr != NULL) - strcpy (default_owner, searchowner (cptr)); + { + char *p = searchowner (cptr); + strcpy (default_owner, p); + free (p); + } } } - return default_owner; + return strdup (default_owner); } nis_name __nis_default_group (char *defaults) { - static char default_group[NIS_MAXNAMELEN]; + char default_group[NIS_MAXNAMELEN]; char *cptr, *dptr; strcpy (default_group, nis_local_group ()); @@ -397,7 +401,11 @@ __nis_default_group (char *defaults) { dptr = strstr (defaults, "group="); if (dptr != NULL) - strcpy (default_group, searchgroup (defaults)); + { + char *p = searchgroup (defaults); + strcpy (default_group, p); + free (p); + } } else { @@ -406,11 +414,15 @@ __nis_default_group (char *defaults) { dptr = strstr (cptr, "group="); if (dptr != NULL) - strcpy (default_group, searchgroup (cptr)); + { + char *p = searchgroup (cptr); + strcpy (default_group, p); + free (p); + } } } - return default_group; + return strdup (default_group); } u_long diff --git a/nis/nis_destroygroup.c b/nis/nis_destroygroup.c index 6ece453..5b70a67 100644 --- a/nis/nis_destroygroup.c +++ b/nis/nis_destroygroup.c @@ -19,7 +19,6 @@ #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> nis_error nis_destroygroup (const_nis_name group) @@ -42,7 +41,7 @@ nis_destroygroup (const_nis_name group) stpcpy (cp, cp2); } res = nis_remove (buf, NULL); - status = res->status; + status = NIS_RES_STATUS (res); nis_freeresult (res); return status; } diff --git a/nis/nis_domain_of.c b/nis/nis_domain_of.c index f0cfe31..f6cca81 100644 --- a/nis/nis_domain_of.c +++ b/nis/nis_domain_of.c @@ -18,7 +18,6 @@ Boston, MA 02111-1307, USA. */ #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> nis_name nis_domain_of (const_nis_name name) diff --git a/nis/nis_domain_of_r.c b/nis/nis_domain_of_r.c index 3435233..00238d0 100644 --- a/nis/nis_domain_of_r.c +++ b/nis/nis_domain_of_r.c @@ -20,7 +20,6 @@ #include <errno.h> #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> nis_name nis_domain_of_r (const_nis_name name, char *buffer, size_t buflen) diff --git a/nis/nis_error.c b/nis/nis_error.c index 6ed1cc9..ced0f71 100644 --- a/nis/nis_error.c +++ b/nis/nis_error.c @@ -21,7 +21,6 @@ #include <syslog.h> #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> static const char *nis_errlist[] = diff --git a/nis/nis_file.c b/nis/nis_file.c index c32d54a..fdd7cd4 100644 --- a/nis/nis_file.c +++ b/nis/nis_file.c @@ -21,8 +21,6 @@ #include <stdlib.h> #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> - static const char cold_start_file[] = "/var/nis/NIS_COLD_START"; diff --git a/nis/nis_free.c b/nis/nis_free.c index a4ab737..5d08882 100644 --- a/nis/nis_free.c +++ b/nis/nis_free.c @@ -18,317 +18,53 @@ Boston, MA 02111-1307, USA. */ #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> void -nis_free_attr (nis_attr *obj) +__free_fdresult (fd_result *res) { - if (obj == NULL) - return; - - if (obj->zattr_ndx) - { - free (obj->zattr_ndx); - obj->zattr_ndx = NULL; - } - - if (obj->zattr_val.zattr_val_val) + if (res != NULL) { - free (obj->zattr_val.zattr_val_val); - obj->zattr_val.zattr_val_val = NULL; - obj->zattr_val.zattr_val_len = 0; + xdr_free ((xdrproc_t)xdr_fd_result, (char *)res); + free (res); } } void nis_free_request (ib_request *ibreq) { - unsigned int i; - - for (i = 0; i < ibreq->ibr_srch.ibr_srch_len; ++i) - { - nis_free_attr (&(ibreq->ibr_srch.ibr_srch_val)[i]); - ibreq->ibr_srch.ibr_srch_val = NULL; - ibreq->ibr_srch.ibr_srch_len = 0; - } - - if (ibreq->ibr_name) - { - free (ibreq->ibr_name); - ibreq->ibr_name = NULL; - } - - if (ibreq->ibr_cookie.n_bytes) - { - free (ibreq->ibr_cookie.n_bytes); - ibreq->ibr_cookie.n_bytes = NULL; - ibreq->ibr_cookie.n_len = 0; - } -} - -void -nis_free_endpoints (endpoint *ep, unsigned int len) -{ - unsigned int i; - - if (ep == NULL) - return; - - for (i = 0; i < len; ++i) - { - if (ep[i].uaddr) - { - free (ep[i].uaddr); - ep[i].uaddr = NULL; - } - if (ep[i].family) - { - free (ep[i].family); - ep[i].family = NULL; - } - if (ep[i].proto) - { - free (ep[i].proto); - ep[i].proto = NULL; - } - } -} - -void -nis_free_servers (nis_server *obj, unsigned int len) -{ - unsigned int i; - - if (obj == NULL) - return; - - for (i = 0; i < len; i++) + if (ibreq != NULL) { - if (obj[i].name) - { - free (obj[i].name); - obj[i].name = NULL; - } - if (obj[i].ep.ep_len > 0) - { - nis_free_endpoints (obj[i].ep.ep_val, obj[i].ep.ep_len); - free (obj[i].ep.ep_val); - obj[i].ep.ep_val = NULL; - obj[i].ep.ep_len = 0; - } - if (obj[i].pkey.n_bytes && obj[i].pkey.n_len > 0) - { - free (obj[i].pkey.n_bytes); - obj[i].pkey.n_bytes = NULL; - obj[i].pkey.n_len = 0; - } + xdr_free ((xdrproc_t)xdr_ib_request, (char *)ibreq); + free (ibreq); } } void nis_free_directory (directory_obj *obj) { - if (obj == NULL) - return; - if (obj->do_name) - { - free (obj->do_name); - obj->do_name = NULL; - } - if (obj->do_servers.do_servers_len > 0) + if (obj != NULL) { - nis_free_servers (obj->do_servers.do_servers_val, - obj->do_servers.do_servers_len); - free (obj->do_servers.do_servers_val); - obj->do_servers.do_servers_val = NULL; - obj->do_servers.do_servers_len = 0; - } - if (obj->do_armask.do_armask_len > 0) - { - free (obj->do_armask.do_armask_val); - obj->do_armask.do_armask_val = NULL; - obj->do_armask.do_armask_len = 0; - } -} - -void -nis_free_group (group_obj *obj) -{ - unsigned int i; - - if (obj->gr_members.gr_members_len > 0) - { - for (i = 0; i < obj->gr_members.gr_members_len; ++i) - if (obj->gr_members.gr_members_val[i]) - free (obj->gr_members.gr_members_val[i]); - free (obj->gr_members.gr_members_val); - obj->gr_members.gr_members_val = NULL; - obj->gr_members.gr_members_len = 0; - } -} - -void -nis_free_table (table_obj *obj) -{ - if (obj == NULL) - return; - - if (obj->ta_type) - { - free (obj->ta_type); - obj->ta_type = NULL; - } - - if (obj->ta_cols.ta_cols_val) - { - unsigned int i; - - for (i = 0; i < obj->ta_cols.ta_cols_len; ++i) - if (obj->ta_cols.ta_cols_val[i].tc_name) - free (obj->ta_cols.ta_cols_val[i].tc_name); - free (obj->ta_cols.ta_cols_val); - obj->ta_cols.ta_cols_val = NULL; - obj->ta_cols.ta_cols_len = 0; - } - - if (obj->ta_path) - { - free (obj->ta_path); - obj->ta_path = NULL; - } -} - -void -nis_free_entry (entry_obj *obj) -{ - if (obj == NULL) - return; - - if (obj->en_type) - { - free (obj->en_type); - obj->en_type = 0; - } - - if (obj->en_cols.en_cols_val) - { - unsigned int i; - - for (i = 0; i < obj->en_cols.en_cols_len; ++i) - if (obj->en_cols.en_cols_val[i].ec_value.ec_value_val) - free (obj->en_cols.en_cols_val[i].ec_value.ec_value_val); - free (obj->en_cols.en_cols_val); - obj->en_cols.en_cols_val = NULL; - obj->en_cols.en_cols_len = 0; - } -} - -void -nis_free_link (link_obj *obj) -{ - if (obj == NULL) - return; - - if (obj->li_attrs.li_attrs_val) - { - unsigned int i; - - for (i = 0; i < obj->li_attrs.li_attrs_len; ++i) - { - if (obj->li_attrs.li_attrs_val[i].zattr_ndx) - free (obj->li_attrs.li_attrs_val[i].zattr_ndx); - if (obj->li_attrs.li_attrs_val[i].zattr_val.zattr_val_val) - free (obj->li_attrs.li_attrs_val[i].zattr_val.zattr_val_val); - } - free (obj->li_attrs.li_attrs_val); - obj->li_attrs.li_attrs_val = NULL; - obj->li_attrs.li_attrs_len = 0; - } - - if (obj->li_name) - { - free (obj->li_name); - obj->li_name = NULL; + xdr_free ((xdrproc_t)xdr_directory_obj, (char *)obj); + free (obj); } } void nis_free_object (nis_object *obj) { - - if (obj == NULL) - return; - - if (obj->zo_name) - { - free (obj->zo_name); - obj->zo_name = NULL; - } - if (obj->zo_owner) - { - free (obj->zo_owner); - obj->zo_owner = NULL; - } - if (obj->zo_group) + if (obj != NULL) { - free (obj->zo_group); - obj->zo_group = NULL; + xdr_free ((xdrproc_t)xdr_nis_object, (char *)obj); + free (obj); } - if (obj->zo_domain) - { - free (obj->zo_domain); - obj->zo_domain = NULL; - } - switch (obj->zo_data.zo_type) - { - case BOGUS_OBJ: - break; - case NO_OBJ: - break; - case DIRECTORY_OBJ: - nis_free_directory (&obj->zo_data.objdata_u.di_data); - break; - case GROUP_OBJ: - nis_free_group (&obj->zo_data.objdata_u.gr_data); - break; - case TABLE_OBJ: - nis_free_table (&obj->zo_data.objdata_u.ta_data); - break; - case ENTRY_OBJ: - nis_free_entry (&obj->zo_data.objdata_u.en_data); - break; - case LINK_OBJ: - nis_free_link (&obj->zo_data.objdata_u.li_data); - break; - case PRIVATE_OBJ: - if (obj->zo_data.objdata_u.po_data.po_data_val) - { - free (obj->zo_data.objdata_u.po_data.po_data_val); - obj->zo_data.objdata_u.po_data.po_data_val = NULL; - } - break; - default: - break; - } - obj->zo_data.zo_type = NO_OBJ; } void nis_freeresult (nis_result *res) { - unsigned int i; - - if (res == NULL) - return; - - for (i = 0; i < res->objects.objects_len; i++) - nis_free_object (&(res->objects.objects_val)[i]); - - if (res->objects.objects_val != NULL) - free (res->objects.objects_val); - - if (res->cookie.n_bytes != NULL && res->cookie.n_len > 0) - free (res->cookie.n_bytes); - - free (res); + if (res != NULL) + { + xdr_free ((xdrproc_t)xdr_nis_result, (char *)res); + free (res); + } } diff --git a/nis/nis_getservlist.c b/nis/nis_getservlist.c index b30b70b..1629c24 100644 --- a/nis/nis_getservlist.c +++ b/nis/nis_getservlist.c @@ -19,7 +19,6 @@ #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> #include "nis_intern.h" nis_server ** @@ -30,19 +29,21 @@ nis_getservlist (const_nis_name dir) res = nis_lookup (dir, FOLLOW_LINKS); - if (res->status == NIS_SUCCESS || res->status == NIS_S_SUCCESS) + if (NIS_RES_STATUS (res) == NIS_SUCCESS) { unsigned long i; nis_server *server; - serv = calloc (1, sizeof (nis_server *) * - (res->objects.objects_val->DI_data.do_servers.do_servers_len + 1)); + serv = + calloc (1, sizeof (nis_server *) * + (NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_len + 1)); if (serv == NULL) return NULL; - for (i = 0; i < res->objects.objects_val->DI_data.do_servers.do_servers_len; ++i) + for (i = 0; i < NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_len; + ++i) { server = - &res->objects.objects_val->DI_data.do_servers.do_servers_val[i]; + &NIS_RES_OBJECT (res)->DI_data.do_servers.do_servers_val[i]; serv[i] = calloc (1, sizeof (nis_server)); if (server->name != NULL) serv[i]->name = strdup (server->name); @@ -110,7 +111,7 @@ nis_freeservlist (nis_server **serv) i = 0; while (serv[i] != NULL) { - nis_free_servers (serv[i], 1); + xdr_free ((xdrproc_t)xdr_nis_server, (char *)serv[i]); free (serv[i]); ++i; } diff --git a/nis/nis_intern.h b/nis/nis_intern.h index ce88f07..e714621 100644 --- a/nis/nis_intern.h +++ b/nis/nis_intern.h @@ -67,10 +67,6 @@ extern nis_error __do_niscall __P ((const_nis_name name, u_long prog, extern AUTH *authdes_pk_create __P ((const char *, const netobj *, u_int, struct sockaddr *, des_block *)); -/* NIS+ cache */ -extern directory_obj *__cache_search __P ((const_nis_name name)); -extern nis_error __cache_add __P ((fd_result *)); - /* NIS+ callback */ extern nis_error __nis_do_callback __P ((struct dir_binding *bptr, netobj *cookie, struct nis_cb *cb)); diff --git a/nis/nis_ismember.c b/nis/nis_ismember.c index 85c4015..aadd197 100644 --- a/nis/nis_ismember.c +++ b/nis/nis_ismember.c @@ -19,7 +19,6 @@ #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> /* internal_nis_ismember () return codes: -1 principal is in -group @@ -28,105 +27,97 @@ static int internal_ismember (const_nis_name principal, const_nis_name group) { - if (group != NULL && strlen (group) > 0) - { - char buf[strlen (group) + 50]; - char leafbuf[strlen (group) + 2]; - char domainbuf[strlen (group) + 2]; - nis_result *res; - char *cp, *cp2; - u_int i; + char buf[strlen (group) + 50]; + char leafbuf[strlen (group) + 2]; + char domainbuf[strlen (group) + 2]; + nis_result *res; + char *cp, *cp2; + u_int i; - cp = stpcpy (buf, nis_leaf_of_r (group, leafbuf, sizeof (leafbuf) - 1)); - cp = stpcpy (cp, ".groups_dir"); - cp2 = nis_domain_of_r (group, domainbuf, sizeof (domainbuf) - 1); - if (cp2 != NULL && strlen (cp2) > 0) - { - *cp++ = '.'; - strcpy (cp, cp2); - } - res = nis_lookup (buf, EXPAND_NAME|FOLLOW_LINKS); - if (res->status != NIS_SUCCESS && res->status != NIS_S_SUCCESS) - return 0; + cp = stpcpy (buf, nis_leaf_of_r (group, leafbuf, sizeof (leafbuf) - 1)); + cp = stpcpy (cp, ".groups_dir"); + cp2 = nis_domain_of_r (group, domainbuf, sizeof (domainbuf) - 1); + if (cp2 != NULL && strlen (cp2) > 0) + { + *cp++ = '.'; + strcpy (cp, cp2); + } + res = nis_lookup (buf, EXPAND_NAME|FOLLOW_LINKS); + if (NIS_RES_STATUS (res) != NIS_SUCCESS) + return 0; - if ((res->objects.objects_len != 1) || - (res->objects.objects_val[0].zo_data.zo_type != GROUP_OBJ)) - return 0; + if ((NIS_RES_NUMOBJ (res) != 1) || + (__type_of (NIS_RES_OBJECT (res)) != NIS_GROUP_OBJ)) + return 0; - /* We search twice in the list, at first, if we have the name - with a "-", then if without. "-member" has priority */ - for (i = 0; - i < res->objects.objects_val[0].GR_data.gr_members.gr_members_len; - ++i) + /* We search twice in the list, at first, if we have the name + with a "-", then if without. "-member" has priority */ + for (i = 0; i < NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_len; ++i) + { + cp = NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val[i]; + if (cp[0] == '-') { - cp =res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i]; - if (cp[0] == '-') - { - if (strcmp (&cp[1], principal) == 0) + if (strcmp (&cp[1], principal) == 0) + return -1; + if (cp[1] == '@') + switch (internal_ismember (principal, &cp[2])) + { + case -1: return -1; - if (cp[1] == '@') - switch (internal_ismember (principal, &cp[2])) - { - case -1: - return -1; - case 1: - return -1; - default: - break; - } - else - if (cp[1] == '*') - { - char buf1[strlen (principal) + 2]; - char buf2[strlen (cp) + 2]; + case 1: + return -1; + default: + break; + } + else + if (cp[1] == '*') + { + char buf1[strlen (principal) + 2]; + char buf2[strlen (cp) + 2]; - strcpy (buf1, nis_domain_of (principal)); - strcpy (buf2, nis_domain_of (cp)); - if (strcmp (buf1, buf2) == 0) - return -1; - } - } + strcpy (buf1, nis_domain_of (principal)); + strcpy (buf2, nis_domain_of (cp)); + if (strcmp (buf1, buf2) == 0) + return -1; + } } - for (i = 0; - i < res->objects.objects_val[0].GR_data.gr_members.gr_members_len; - ++i) + } + for (i = 0; i < NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_len; ++i) + { + cp = NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val[i]; + if (cp[0] != '-') { - cp =res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i]; - if (cp[0] != '-') - { - if (strcmp (cp, principal) == 0) + if (strcmp (cp, principal) == 0) + return 1; + if (cp[0] == '@') + switch (internal_ismember (principal, &cp[1])) + { + case -1: + return -1; + case 1: return 1; - if (cp[0] == '@') - switch (internal_ismember (principal, &cp[1])) - { - case -1: - return -1; - case 1: - return 1; - default: - break; - } - else - if (cp[0] == '*') - { - char buf1[strlen (principal) + 2]; - char buf2[strlen (cp) + 2]; + default: + break; + } + else + if (cp[0] == '*') + { + char buf1[strlen (principal) + 2]; + char buf2[strlen (cp) + 2]; - if (strcmp (nis_domain_of_r (principal, buf1, sizeof buf1), - nis_domain_of_r (cp, buf2, sizeof buf2)) == 0) - return 1; - } - } + if (strcmp (nis_domain_of_r (principal, buf1, sizeof buf1), + nis_domain_of_r (cp, buf2, sizeof buf2)) == 0) + return 1; + } } } - return 0; } bool_t nis_ismember (const_nis_name principal, const_nis_name group) { - if (group != NULL && strlen (group) > 0) + if (group != NULL && strlen (group) > 0 && principal != NULL) return internal_ismember (principal, group) == 1 ? TRUE : FALSE; else return FALSE; diff --git a/nis/nis_local_names.c b/nis/nis_local_names.c index 348c753..bcae995 100644 --- a/nis/nis_local_names.c +++ b/nis/nis_local_names.c @@ -21,7 +21,6 @@ #include <string.h> #include <unistd.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> nis_name nis_local_group (void) diff --git a/nis/nis_lookup.c b/nis/nis_lookup.c index bdce5d5..cbc64c3 100644 --- a/nis/nis_lookup.c +++ b/nis/nis_lookup.c @@ -19,7 +19,6 @@ #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> #include "nis_intern.h" @@ -72,7 +71,7 @@ nis_lookup (const_nis_name name, const u_long flags) case NIS_PARTIAL: case NIS_SUCCESS: case NIS_S_SUCCESS: - if (__type_of(NIS_RES_OBJECT (res)) == LINK_OBJ && + if (__type_of(NIS_RES_OBJECT (res)) == NIS_LINK_OBJ && flags & FOLLOW_LINKS) /* We are following links */ { /* if we hit the link limit, bail */ @@ -93,7 +92,7 @@ nis_lookup (const_nis_name name, const u_long flags) ++done; break; case NIS_CBRESULTS: - /* XXX Implement CALLBACK here ! */ + /* The callback is handled in __do_niscall2 */ ++done; break; case NIS_UNAVAIL: diff --git a/nis/nis_mkdir.c b/nis/nis_mkdir.c index ab693d7..acd0122 100644 --- a/nis/nis_mkdir.c +++ b/nis/nis_mkdir.c @@ -18,7 +18,6 @@ Boston, MA 02111-1307, USA. */ #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> #include "nis_intern.h" nis_error diff --git a/nis/nis_modify.c b/nis/nis_modify.c index 739ae0c..3f2cca4 100644 --- a/nis/nis_modify.c +++ b/nis/nis_modify.c @@ -18,7 +18,6 @@ Boston, MA 02111-1307, USA. */ #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> #include "nis_intern.h" @@ -60,7 +59,7 @@ nis_modify (const_nis_name name, const nis_object *obj) (caddr_t) & req, (xdrproc_t) xdr_nis_result, (caddr_t) res, MASTER_ONLY, NULL)) != RPC_SUCCESS) - res->status = status; + NIS_RES_STATUS (res) = status; req.ns_object.ns_object_val[0].zo_name = p1; req.ns_object.ns_object_val[0].zo_owner = p2; diff --git a/nis/nis_ping.c b/nis/nis_ping.c index a06dfde..1397cb9 100644 --- a/nis/nis_ping.c +++ b/nis/nis_ping.c @@ -18,7 +18,6 @@ Boston, MA 02111-1307, USA. */ #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> #include "nis_intern.h" void @@ -35,7 +34,7 @@ nis_ping (const_nis_name dirname, u_long utime, const nis_object *dirobj) if (dirobj == NULL) { res = nis_lookup (dirname, MASTER_ONLY); - if (res->status != NIS_SUCCESS && res->status != NIS_S_SUCCESS) + if (res->status != NIS_SUCCESS) return; obj = res->objects.objects_val; } @@ -43,7 +42,7 @@ nis_ping (const_nis_name dirname, u_long utime, const nis_object *dirobj) obj = (nis_object *) dirobj; /* Check if obj is really a diryectory object */ - if (obj->zo_data.zo_type != DIRECTORY_OBJ) + if (__type_of (obj) != NIS_DIRECTORY_OBJ) { if (res != NULL) nis_freeresult (res); diff --git a/nis/nis_print.c b/nis/nis_print.c index 1914840..5aa43c3 100644 --- a/nis/nis_print.c +++ b/nis/nis_print.c @@ -21,7 +21,6 @@ #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> static const char * nis_nstype2str (const nstype type) @@ -49,10 +48,9 @@ nis_nstype2str (const nstype type) } } -static char * -nis_ttl2str (const u_long ttl) +static void +print_ttl (const u_long ttl) { - static char buf[64]; unsigned long int time, s, m, h; time = ttl; @@ -62,19 +60,40 @@ nis_ttl2str (const u_long ttl) m = time / 60; time %= 60; s = time; - snprintf (buf, 63, "%lu:%02lu:%02lu", h, m, s); - - return buf; + printf ("%lu:%lu:%lu\n", h, m, s); } -static char * -nis_flags2str (const u_long flags) +static void +print_flags (const u_long flags) { - static char buf[1024]; + fputs ("(", stdout); - snprintf (buf, 1023, "%lu", flags); + if (flags & TA_SEARCHABLE) + fputs ("SEARCHABLE, ", stdout); - return buf; + if (flags & TA_BINARY) + { + fputs ("BINARY DATA", stdout); + if (flags & TA_XDR) + fputs (", XDR ENCODED", stdout); + if (flags & TA_ASN1) + fputs (", ASN.1 ENCODED", stdout); + if (flags & TA_CRYPT) + fputs (", ENCRYPTED", stdout); + } + else + { + fputs("TEXTUAL DATA", stdout); + if (flags & TA_SEARCHABLE) + { + if (flags & TA_CASE) + fputs (", CASE INSENSITIVE", stdout); + else + fputs (", CASE SENSITIVE", stdout); + } + } + + fputs (")\n", stdout); } static void @@ -82,28 +101,28 @@ nis_print_objtype (enum zotypes type) { switch (type) { - case BOGUS_OBJ: + case NIS_BOGUS_OBJ: fputs (_("BOGUS OBJECT\n"), stdout); break; - case NO_OBJ: + case NIS_NO_OBJ: fputs (_("NO OBJECT\n"), stdout); break; - case DIRECTORY_OBJ: + case NIS_DIRECTORY_OBJ: fputs (_("DIRECTORY\n"), stdout); break; - case GROUP_OBJ: + case NIS_GROUP_OBJ: fputs (_("GROUP\n"), stdout); break; - case TABLE_OBJ: + case NIS_TABLE_OBJ: fputs (_("TABLE\n"), stdout); break; - case ENTRY_OBJ: + case NIS_ENTRY_OBJ: fputs (_("ENTRY\n"), stdout); break; - case LINK_OBJ: + case NIS_LINK_OBJ: fputs (_("LINK\n"), stdout); break; - case PRIVATE_OBJ: + case NIS_PRIVATE_OBJ: fputs (_("PRIVATE\n"), stdout); break; default: @@ -141,7 +160,7 @@ nis_print_directory (const directory_obj *dir) unsigned int i; printf (_("Name : '%s'\n"), dir->do_name); - printf (_("Type : %s\n"), gettext (nis_nstype2str (dir->do_type))); + printf (_("Type : %s\n"), nis_nstype2str (dir->do_type)); sptr = dir->do_servers.do_servers_val; for (i = 0; i < dir->do_servers.do_servers_len; i++) { @@ -157,16 +176,20 @@ nis_print_directory (const directory_obj *dir) fputs (_("None.\n"), stdout); break; case NIS_PK_DH: - fputs (_("DH.\n"), stdout); + fprintf (stdout, _("Diffie-Hellmann (%d bits)\n"), + (sptr->pkey.n_len - 1) * 4); + /* sptr->pkey.n_len counts the last 0, too */ break; case NIS_PK_RSA: - fputs (_("RSA.\n"), stdout); + fprintf (stdout, _("RSA (%d bits)\n"), + (sptr->pkey.n_len - 1) * 4); break; case NIS_PK_KERB: - fputs (_("Kerberous.\n"), stdout); + fputs (_("Kerberos.\n"), stdout); break; default: - fputs (_("Unknown.\n"), stdout); + fprintf (stdout, _("Unknown (type = %d, bits = %d)\n"), + sptr->key_type, (sptr->pkey.n_len - 1) * 4); break; } @@ -198,7 +221,9 @@ nis_print_directory (const directory_obj *dir) sptr++; } - printf (_("Time to live : %s\n"), nis_ttl2str (dir->do_ttl)); + fputs (_("Time to live : "), stdout); + print_ttl (dir->do_ttl); + fputs (_("Default Access rights :\n"), stdout); if (dir->do_armask.do_armask_len != 0) { oar_mask *ptr; @@ -206,9 +231,11 @@ nis_print_directory (const directory_obj *dir) ptr = dir->do_armask.do_armask_val; for (i = 0; i < dir->do_armask.do_armask_len; i++) { - fputs (_("Default Access rights: "), stdout); nis_print_rights (ptr->oa_rights); - printf (_("\nDirect Type : %d\n"), ptr->oa_otype); + printf (_("\tType : %s\n"), nis_nstype2str (ptr->oa_otype)); + printf (_("\tAccess rights: ")); + nis_print_rights (ptr->oa_rights); + fputs ("\n", stdout); ptr++; } } @@ -242,8 +269,8 @@ nis_print_table (const table_obj *obj) { printf (_("\t[%d]\tName : %s\n"), i, obj->ta_cols.ta_cols_val[i].tc_name); - printf (_("\t\tAttributes : %s\n"), - nis_flags2str (obj->ta_cols.ta_cols_val[i].tc_flags)); + fputs (_("\t\tAttributes : "), stdout); + print_flags (obj->ta_cols.ta_cols_val[i].tc_flags); fputs (_("\t\tAccess Rights : "), stdout); nis_print_rights (obj->ta_cols.ta_cols_val[i].tc_rights); fputc ('\n', stdout); @@ -274,7 +301,8 @@ nis_print_entry (const entry_obj *obj) else if ((obj->en_cols.en_cols_val[i].ec_flags & EN_BINARY) == EN_BINARY) fputs (_("Binary data\n"), stdout); else - printf ("%s\n", obj->en_cols.en_cols_val[i].ec_value.ec_value_val); + printf ("%.*s\n", (int)obj->en_cols.en_cols_val[i].ec_value.ec_value_len, + obj->en_cols.en_cols_val[i].ec_value.ec_value_val); } } @@ -287,29 +315,30 @@ nis_print_object (const nis_object * obj) printf (_("Group : %s\n"), obj->zo_group); fputs (_("Access Rights : "), stdout); nis_print_rights (obj->zo_access); - printf (_("\nTime to Live : %lu (seconds)\n"), obj->zo_ttl); + printf (_("\nTime to Live : ")); + print_ttl (obj->zo_ttl); printf (_("Creation Time : %s"), ctime (&obj->zo_oid.ctime)); printf (_("Mod. Time : %s"), ctime (&obj->zo_oid.mtime)); fputs (_("Object Type : "), stdout); nis_print_objtype (obj->zo_data.zo_type); switch (obj->zo_data.zo_type) { - case DIRECTORY_OBJ: + case NIS_DIRECTORY_OBJ: nis_print_directory (&obj->zo_data.objdata_u.di_data); break; - case GROUP_OBJ: + case NIS_GROUP_OBJ: nis_print_group (&obj->zo_data.objdata_u.gr_data); break; - case TABLE_OBJ: + case NIS_TABLE_OBJ: nis_print_table (&obj->zo_data.objdata_u.ta_data); break; - case ENTRY_OBJ: + case NIS_ENTRY_OBJ: nis_print_entry (&obj->zo_data.objdata_u.en_data); break; - case LINK_OBJ: + case NIS_LINK_OBJ: nis_print_link (&obj->zo_data.objdata_u.li_data); break; - case PRIVATE_OBJ: + case NIS_PRIVATE_OBJ: printf (_(" Data Length = %u\n"), obj->zo_data.objdata_u.po_data.po_data_len); break; diff --git a/nis/nis_print_group_entry.c b/nis/nis_print_group_entry.c index 1063ef8..fbc9ad1 100644 --- a/nis/nis_print_group_entry.c +++ b/nis/nis_print_group_entry.c @@ -19,7 +19,6 @@ #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> void nis_print_group_entry (const_nis_name group) @@ -29,6 +28,10 @@ nis_print_group_entry (const_nis_name group) char buf[strlen (group) + 50]; char leafbuf[strlen (group) + 3]; char domainbuf[strlen (group) + 3]; + unsigned long mem_exp_cnt = 0, mem_imp_cnt = 0, mem_rec_cnt = 0; + unsigned long nomem_exp_cnt = 0, nomem_imp_cnt = 0, nomem_rec_cnt = 0; + char **mem_exp, **mem_imp, **mem_rec; + char **nomem_exp, **nomem_imp, **nomem_rec; nis_result *res; char *cp, *cp2; u_int i; @@ -41,19 +44,132 @@ nis_print_group_entry (const_nis_name group) *cp++ = '.'; stpcpy (cp, cp2); } - res = nis_lookup (buf, FOLLOW_LINKS|EXPAND_NAME); + res = nis_lookup (buf, FOLLOW_LINKS | EXPAND_NAME); - if (res->status != NIS_SUCCESS && res->status != NIS_S_SUCCESS) + if (NIS_RES_STATUS(res) != NIS_SUCCESS) return; - if ((res->objects.objects_len != 1) || - (res->objects.objects_val[0].zo_data.zo_type != GROUP_OBJ)) + if ((NIS_RES_NUMOBJ (res) != 1) || + (__type_of (NIS_RES_OBJECT (res)) != NIS_GROUP_OBJ)) return; + mem_exp = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res)); + mem_imp = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res)); + mem_rec = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res)); + nomem_exp = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res)); + nomem_imp = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res)); + nomem_rec = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res)); + for (i = 0; - i < res->objects.objects_val[0].GR_data.gr_members.gr_members_len; - ++i) - fprintf (stdout, " %s\n", - res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i]); + i < NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_len; ++i) + { + char *grmem = + NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val[i]; + int neg = grmem[0] == '-'; + + switch (grmem[neg]) + { + case '*': + if (neg) + { + nomem_imp[nomem_imp_cnt] = grmem; + ++nomem_imp_cnt; + } + else + { + mem_imp[mem_imp_cnt] = grmem; + ++mem_imp_cnt; + } + break; + case '@': + if (neg) + { + nomem_rec[nomem_rec_cnt] = grmem; + ++nomem_rec_cnt; + } + else + { + mem_rec[mem_rec_cnt] = grmem; + ++mem_rec_cnt; + } + break; + default: + if (neg) + { + nomem_exp[nomem_exp_cnt] = grmem; + ++nomem_exp_cnt; + } + else + { + mem_exp[mem_exp_cnt] = grmem; + ++mem_exp_cnt; + } + break; + } + } + { + char buf[strlen (NIS_RES_OBJECT (res)->zo_domain) + 10]; + printf (_("Group entry for \"%s.%s\" group:\n"), + NIS_RES_OBJECT (res)->zo_name, + nis_domain_of_r (NIS_RES_OBJECT (res)->zo_domain, + buf, strlen (NIS_RES_OBJECT (res)->zo_domain) + + 10)); + } + if (mem_exp_cnt) + { + fputs (_(" Explicit members:\n"), stdout); + for (i = 0; i < mem_exp_cnt; ++i) + printf ("\t%s\n", mem_exp[i]); + } + else + fputs (_(" No explicit members\n"), stdout); + if (mem_imp_cnt) + { + fputs (_(" Implicit members:\n"), stdout); + for (i = 0; i < mem_imp_cnt; ++i) + printf ("\t%s\n", &mem_imp[i][2]); + } + else + fputs (_(" No implicit members\n"), stdout); + if (mem_rec_cnt) + { + fputs (_(" Recursive members:\n"), stdout); + for (i = 0; i < mem_rec_cnt; ++i) + printf ("\t%s\n", &mem_rec[i][1]); + } + else + fputs (_(" No recursive members\n"), stdout); + if (nomem_exp_cnt) + { + fputs (_(" Explicit nonmembers:\n"), stdout); + for (i = 0; i < nomem_exp_cnt; ++i) + printf ("\t%s\n", &nomem_exp[i][1]); + } + else + fputs (_(" No explicit nonmembers\n"), stdout); + if (nomem_imp_cnt) + { + fputs (_(" Implicit nonmembers:\n"), stdout); + for (i = 0; i < nomem_imp_cnt; ++i) + printf ("\t%s\n", &mem_imp[i][3]); + } + else + fputs (_(" No implicit nonmembers\n"), stdout); + if (nomem_rec_cnt) + { + fputs (_(" Explicit nonmembers:\n"), stdout); + for (i = 0; i < nomem_rec_cnt; ++i) + printf ("\t%s=n", &nomem_rec[i][2]); + } + else + fputs (_(" No recursive nonmembers\n"), stdout); + + free (mem_exp); + free (mem_imp); + free (mem_rec); + free (nomem_exp); + free (nomem_imp); + free (nomem_rec); + nis_freeresult (res); } } diff --git a/nis/nis_remove.c b/nis/nis_remove.c index 2fa9ecc..cbbbdfc 100644 --- a/nis/nis_remove.c +++ b/nis/nis_remove.c @@ -18,7 +18,6 @@ Boston, MA 02111-1307, USA. */ #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> #include "nis_intern.h" @@ -48,7 +47,7 @@ nis_remove (const_nis_name name, const nis_object *obj) (caddr_t) & req, (xdrproc_t) xdr_nis_result, (caddr_t) res, MASTER_ONLY, NULL)) != RPC_SUCCESS) - res->status = status; + NIS_RES_STATUS (res) = status; nis_destroy_object (req.ns_object.ns_object_val); diff --git a/nis/nis_removemember.c b/nis/nis_removemember.c index 8ed67ca..71807a3 100644 --- a/nis/nis_removemember.c +++ b/nis/nis_removemember.c @@ -19,7 +19,6 @@ #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> nis_error nis_removemember (const_nis_name member, const_nis_name group) @@ -50,40 +49,40 @@ nis_removemember (const_nis_name member, const_nis_name group) nis_freeresult (res); return status; } + if ((res->objects.objects_len != 1) || - (res->objects.objects_val[0].zo_data.zo_type != GROUP_OBJ)) + (__type_of (NIS_RES_OBJECT (res)) != NIS_GROUP_OBJ)) return NIS_INVALIDOBJ; - - newmem = calloc (1, res->objects.objects_val[0].GR_data.gr_members.gr_members_len * - sizeof (char *)); - - k = res->objects.objects_val[0].GR_data.gr_members.gr_members_len; + newmem = + calloc (1, NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_len * + sizeof (char *)); + k = NIS_RES_OBJECT (res)[0].GR_data.gr_members.gr_members_len; j = 0; - for (i = 0; i < res->objects.objects_val[0].GR_data.gr_members.gr_members_len; + for (i = 0; i < NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_len; ++i) { - if (strcmp (res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i], + if (strcmp (NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_val[i], member) != 0) { - newmem[j] = res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i]; + newmem[j] = NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_val[i]; ++j; } else { - free (res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i]); + free (NIS_RES_OBJECT(res)->GR_data.gr_members.gr_members_val[i]); --k; } } - free (res->objects.objects_val[0].GR_data.gr_members.gr_members_val); + free (NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val); newmem = realloc (newmem, k * sizeof (char*)); - res->objects.objects_val[0].GR_data.gr_members.gr_members_val = newmem; - res->objects.objects_val[0].GR_data.gr_members.gr_members_len = k; + NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val = newmem; + NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_len = k; - cp = stpcpy (buf, res->objects.objects_val->zo_name); + cp = stpcpy (buf, NIS_RES_OBJECT (res)->zo_name); *cp++ = '.'; - strncpy (cp, res->objects.objects_val->zo_domain, NIS_MAXNAMELEN); - res2 = nis_modify (buf, res->objects.objects_val); + strncpy (cp, NIS_RES_OBJECT (res)->zo_domain, NIS_MAXNAMELEN); + res2 = nis_modify (buf, NIS_RES_OBJECT (res)); status = res2->status; nis_freeresult (res); nis_freeresult (res2); diff --git a/nis/nis_rmdir.c b/nis/nis_rmdir.c index ff84ed8..f1214f9 100644 --- a/nis/nis_rmdir.c +++ b/nis/nis_rmdir.c @@ -18,7 +18,6 @@ Boston, MA 02111-1307, USA. */ #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> #include "nis_intern.h" nis_error diff --git a/nis/nis_subr.c b/nis/nis_subr.c index fcd1903..3283e4c 100644 --- a/nis/nis_subr.c +++ b/nis/nis_subr.c @@ -20,7 +20,6 @@ #include <errno.h> #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> nis_name nis_leaf_of (const_nis_name name) diff --git a/nis/nis_table.c b/nis/nis_table.c index 3efba60..d2a1df7 100644 --- a/nis/nis_table.c +++ b/nis/nis_table.c @@ -19,7 +19,6 @@ #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> #include "nis_intern.h" static void @@ -146,9 +145,7 @@ __create_ib_request (const_nis_name name, struct ib_request *ibreq, if (ibreq->ibr_name == NULL) return NULL; - ibreq->ibr_flags = (flags & (RETURN_RESULT | ADD_OVERWRITE | REM_MULTIPLE | - MOD_SAMEOBJ | ADD_RESERVED | REM_RESERVED | - MOD_EXCLUSIVE | ALL_RESULTS)); + ibreq->ibr_flags = flags; ibreq->ibr_obj.ibr_obj_len = 0; ibreq->ibr_obj.ibr_obj_val = NULL; ibreq->ibr_cbhost.ibr_cbhost_len = 0; @@ -168,7 +165,7 @@ nis_list (const_nis_name name, u_long flags, const void *userdata) { nis_result *res = NULL; - struct ib_request ibreq; + ib_request *ibreq = calloc (1, sizeof (ib_request)); int status; int count_links = 0; /* We will only follow NIS_MAXLINKS links! */ int done = 0; @@ -179,7 +176,7 @@ nis_list (const_nis_name name, u_long flags, res = calloc (1, sizeof (nis_result)); - if (__create_ib_request (name, &ibreq, flags) == NULL) + if (__create_ib_request (name, ibreq, flags) == NULL) { res->status = NIS_BADNAME; return res; @@ -187,20 +184,20 @@ nis_list (const_nis_name name, u_long flags, if (flags & EXPAND_NAME) { - names = nis_getnames (ibreq.ibr_name); - free (ibreq.ibr_name); - ibreq.ibr_name = NULL; + names = nis_getnames (ibreq->ibr_name); + free (ibreq->ibr_name); + ibreq->ibr_name = NULL; if (names == NULL) { res->status = NIS_BADNAME; return res; } - ibreq.ibr_name = strdup (names[name_nr]); + ibreq->ibr_name = strdup (names[name_nr]); } else { names = namebuf; - names[name_nr] = ibreq.ibr_name; + names[name_nr] = ibreq->ibr_name; } cb = NULL; @@ -228,7 +225,7 @@ nis_list (const_nis_name name, u_long flags, /* nis_lookup handles FOLLOW_LINKS, so we must have a table object. */ - if (__type_of (NIS_RES_OBJECT (lres)) != TABLE_OBJ) + if (__type_of (NIS_RES_OBJECT (lres)) != NIS_TABLE_OBJ) { nis_freeresult (lres); res->status = NIS_INVALIDOBJ; @@ -276,17 +273,17 @@ nis_list (const_nis_name name, u_long flags, if (callback != NULL) { cb = __nis_create_callback (callback, userdata, flags); - ibreq.ibr_cbhost.ibr_cbhost_len = 1; - ibreq.ibr_cbhost.ibr_cbhost_val = cb->serv; + ibreq->ibr_cbhost.ibr_cbhost_len = 1; + ibreq->ibr_cbhost.ibr_cbhost_val = cb->serv; } while (!done) { memset (res, '\0', sizeof (nis_result)); - status = __do_niscall (ibreq.ibr_name, NIS_IBLIST, + status = __do_niscall (ibreq->ibr_name, NIS_IBLIST, (xdrproc_t) xdr_ib_request, - (caddr_t) & ibreq, (xdrproc_t) xdr_nis_result, + (caddr_t) ibreq, (xdrproc_t) xdr_nis_result, (caddr_t) res, flags, cb); if (status != NIS_SUCCESS) res->status = status; @@ -296,7 +293,7 @@ nis_list (const_nis_name name, u_long flags, case NIS_PARTIAL: case NIS_SUCCESS: case NIS_S_SUCCESS: - if (__type_of (NIS_RES_OBJECT (res)) == LINK_OBJ && + if (__type_of (NIS_RES_OBJECT (res)) == NIS_LINK_OBJ && flags & FOLLOW_LINKS) /* We are following links. */ { /* If we hit the link limit, bail. */ @@ -307,17 +304,17 @@ nis_list (const_nis_name name, u_long flags, break; } if (count_links) - free (ibreq.ibr_name); + free (ibreq->ibr_name); ++count_links; - free (ibreq.ibr_name); - ibreq.ibr_name = + free (ibreq->ibr_name); + ibreq->ibr_name = strdup (NIS_RES_OBJECT (res)->LI_data.li_name); if (NIS_RES_OBJECT (res)->LI_data.li_attrs.li_attrs_len) - if (ibreq.ibr_srch.ibr_srch_len == 0) + if (ibreq->ibr_srch.ibr_srch_len == 0) { - ibreq.ibr_srch.ibr_srch_len = + ibreq->ibr_srch.ibr_srch_len = NIS_RES_OBJECT (res)->LI_data.li_attrs.li_attrs_len; - ibreq.ibr_srch.ibr_srch_val = + ibreq->ibr_srch.ibr_srch_val = NIS_RES_OBJECT (res)->LI_data.li_attrs.li_attrs_val; } nis_freeresult (res); @@ -338,7 +335,7 @@ nis_list (const_nis_name name, u_long flags, /* Try the next domainname if we don't follow a link. */ if (count_links) { - free (ibreq.ibr_name); + free (ibreq->ibr_name); res->status = NIS_LINKNAMEERROR; ++done; break; @@ -349,7 +346,7 @@ nis_list (const_nis_name name, u_long flags, ++done; break; } - ibreq.ibr_name = names[name_nr]; + ibreq->ibr_name = names[name_nr]; break; } } @@ -358,10 +355,14 @@ nis_list (const_nis_name name, u_long flags, if (names != namebuf) nis_freenames (names); - nis_free_request (&ibreq); - if (cb) - __nis_destroy_callback (cb); + { + __nis_destroy_callback (cb); + ibreq->ibr_cbhost.ibr_cbhost_len = 0; + ibreq->ibr_cbhost.ibr_cbhost_val = NULL; + } + + nis_free_request (ibreq); return res; } @@ -372,53 +373,52 @@ nis_add_entry (const_nis_name name, const nis_object *obj, { nis_result *res; nis_error status; - struct ib_request ibreq; + ib_request *ibreq = calloc (1, sizeof (ib_request)); char *p1, *p2, *p3, *p4; char buf1[strlen (name) + 20]; char buf4[strlen (name) + 20]; res = calloc (1, sizeof (nis_result)); - if (__create_ib_request (name, &ibreq, flags) == NULL) + if (__create_ib_request (name, ibreq, flags) == NULL) { res->status = NIS_BADNAME; return res; } - ibreq.ibr_flags = flags; - ibreq.ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL); - ibreq.ibr_obj.ibr_obj_len = 1; + ibreq->ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL); + ibreq->ibr_obj.ibr_obj_len = 1; - p1 = ibreq.ibr_obj.ibr_obj_val->zo_name; + p1 = ibreq->ibr_obj.ibr_obj_val->zo_name; if (p1 == NULL || strlen (p1) == 0) - ibreq.ibr_obj.ibr_obj_val->zo_name = + ibreq->ibr_obj.ibr_obj_val->zo_name = nis_leaf_of_r (name, buf1, sizeof (buf1)); - p2 = ibreq.ibr_obj.ibr_obj_val->zo_owner; + p2 = ibreq->ibr_obj.ibr_obj_val->zo_owner; if (p2 == NULL || strlen (p2) == 0) - ibreq.ibr_obj.ibr_obj_val->zo_owner = nis_local_principal (); + ibreq->ibr_obj.ibr_obj_val->zo_owner = nis_local_principal (); - p3 = ibreq.ibr_obj.ibr_obj_val->zo_group; + p3 = ibreq->ibr_obj.ibr_obj_val->zo_group; if (p3 == NULL || strlen (p3) == 0) - ibreq.ibr_obj.ibr_obj_val->zo_group = nis_local_group (); + ibreq->ibr_obj.ibr_obj_val->zo_group = nis_local_group (); - p4 = ibreq.ibr_obj.ibr_obj_val->zo_domain; - ibreq.ibr_obj.ibr_obj_val->zo_domain = + p4 = ibreq->ibr_obj.ibr_obj_val->zo_domain; + ibreq->ibr_obj.ibr_obj_val->zo_domain = nis_domain_of_r (name, buf4, sizeof (buf4)); - if ((status = __do_niscall (ibreq.ibr_name, NIS_IBADD, + if ((status = __do_niscall (ibreq->ibr_name, NIS_IBADD, (xdrproc_t) xdr_ib_request, - (caddr_t) & ibreq, + (caddr_t) ibreq, (xdrproc_t) xdr_nis_result, (caddr_t) res, 0, NULL)) != NIS_SUCCESS) res->status = status; - ibreq.ibr_obj.ibr_obj_val->zo_name = p1; - ibreq.ibr_obj.ibr_obj_val->zo_owner = p2; - ibreq.ibr_obj.ibr_obj_val->zo_group = p3; - ibreq.ibr_obj.ibr_obj_val->zo_domain = p4; + ibreq->ibr_obj.ibr_obj_val->zo_name = p1; + ibreq->ibr_obj.ibr_obj_val->zo_owner = p2; + ibreq->ibr_obj.ibr_obj_val->zo_group = p3; + ibreq->ibr_obj.ibr_obj_val->zo_domain = p4; - nis_free_request (&ibreq); + nis_free_request (ibreq); return res; } @@ -429,52 +429,51 @@ nis_modify_entry (const_nis_name name, const nis_object *obj, { nis_result *res; nis_error status; - struct ib_request ibreq; + ib_request *ibreq = calloc (1, sizeof (ib_request)); char *p1, *p2, *p3, *p4; char buf1[strlen (name) + 20]; char buf4[strlen (name) + 20]; res = calloc (1, sizeof (nis_result)); - if (__create_ib_request (name, &ibreq, flags) == NULL) + if (__create_ib_request (name, ibreq, flags) == NULL) { res->status = NIS_BADNAME; return res; } - ibreq.ibr_flags = flags; - ibreq.ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL); - ibreq.ibr_obj.ibr_obj_len = 1; + ibreq->ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL); + ibreq->ibr_obj.ibr_obj_len = 1; - p1 = ibreq.ibr_obj.ibr_obj_val->zo_name; + p1 = ibreq->ibr_obj.ibr_obj_val->zo_name; if (p1 == NULL || strlen (p1) == 0) - ibreq.ibr_obj.ibr_obj_val->zo_name = + ibreq->ibr_obj.ibr_obj_val->zo_name = nis_leaf_of_r (name, buf1, sizeof (buf1)); - p2 = ibreq.ibr_obj.ibr_obj_val->zo_owner; + p2 = ibreq->ibr_obj.ibr_obj_val->zo_owner; if (p2 == NULL || strlen (p2) == 0) - ibreq.ibr_obj.ibr_obj_val->zo_owner = nis_local_principal (); + ibreq->ibr_obj.ibr_obj_val->zo_owner = nis_local_principal (); - p3 = ibreq.ibr_obj.ibr_obj_val->zo_group; + p3 = ibreq->ibr_obj.ibr_obj_val->zo_group; if (p3 == NULL || strlen (p3) == 0) - ibreq.ibr_obj.ibr_obj_val->zo_group = nis_local_group (); + ibreq->ibr_obj.ibr_obj_val->zo_group = nis_local_group (); - p4 = ibreq.ibr_obj.ibr_obj_val->zo_domain; - ibreq.ibr_obj.ibr_obj_val->zo_domain = + p4 = ibreq->ibr_obj.ibr_obj_val->zo_domain; + ibreq->ibr_obj.ibr_obj_val->zo_domain = nis_domain_of_r (name, buf4, sizeof (buf4)); - if ((status = __do_niscall (ibreq.ibr_name, NIS_IBMODIFY, + if ((status = __do_niscall (ibreq->ibr_name, NIS_IBMODIFY, (xdrproc_t) xdr_ib_request, - (caddr_t) & ibreq, (xdrproc_t) xdr_nis_result, + (caddr_t) ibreq, (xdrproc_t) xdr_nis_result, (caddr_t) res, 0, NULL)) != NIS_SUCCESS) res->status = status; - ibreq.ibr_obj.ibr_obj_val->zo_name = p1; - ibreq.ibr_obj.ibr_obj_val->zo_owner = p2; - ibreq.ibr_obj.ibr_obj_val->zo_group = p3; - ibreq.ibr_obj.ibr_obj_val->zo_domain = p4; + ibreq->ibr_obj.ibr_obj_val->zo_name = p1; + ibreq->ibr_obj.ibr_obj_val->zo_owner = p2; + ibreq->ibr_obj.ibr_obj_val->zo_group = p3; + ibreq->ibr_obj.ibr_obj_val->zo_domain = p4; - nis_free_request (&ibreq); + nis_free_request (ibreq); return res; } @@ -484,31 +483,30 @@ nis_remove_entry (const_nis_name name, const nis_object *obj, u_long flags) { nis_result *res; - struct ib_request ibreq; + ib_request *ibreq = calloc (1, sizeof (ib_request)); nis_error status; res = calloc (1, sizeof (nis_result)); - if (__create_ib_request (name, &ibreq, flags) == NULL) + if (__create_ib_request (name, ibreq, flags) == NULL) { res->status = NIS_BADNAME; return res; } - ibreq.ibr_flags = flags; if (obj != NULL) { - ibreq.ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL); - ibreq.ibr_obj.ibr_obj_len = 1; + ibreq->ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL); + ibreq->ibr_obj.ibr_obj_len = 1; } - if ((status = __do_niscall (ibreq.ibr_name, NIS_IBREMOVE, + if ((status = __do_niscall (ibreq->ibr_name, NIS_IBREMOVE, (xdrproc_t) xdr_ib_request, - (caddr_t) & ibreq, (xdrproc_t) xdr_nis_result, + (caddr_t) ibreq, (xdrproc_t) xdr_nis_result, (caddr_t) res, 0, NULL)) != NIS_SUCCESS) res->status = status; - nis_free_request (&ibreq); + nis_free_request (ibreq); return res; } @@ -517,24 +515,24 @@ nis_result * nis_first_entry (const_nis_name name) { nis_result *res; - struct ib_request ibreq; + ib_request *ibreq = calloc (1, sizeof (ib_request)); nis_error status; res = calloc (1, sizeof (nis_result)); - if (__create_ib_request (name, &ibreq, 0) == NULL) + if (__create_ib_request (name, ibreq, 0) == NULL) { res->status = NIS_BADNAME; return res; } - if ((status = __do_niscall (ibreq.ibr_name, NIS_IBFIRST, + if ((status = __do_niscall (ibreq->ibr_name, NIS_IBFIRST, (xdrproc_t) xdr_ib_request, - (caddr_t) & ibreq, (xdrproc_t) xdr_nis_result, + (caddr_t) ibreq, (xdrproc_t) xdr_nis_result, (caddr_t) res, 0, NULL)) != NIS_SUCCESS) res->status = status; - nis_free_request (&ibreq); + nis_free_request (ibreq); return res; } @@ -543,12 +541,12 @@ nis_result * nis_next_entry (const_nis_name name, const netobj *cookie) { nis_result *res; - struct ib_request ibreq; + ib_request *ibreq = calloc (1, sizeof (ib_request)); nis_error status; res = calloc (1, sizeof (nis_result)); - if (__create_ib_request (name, &ibreq, 0) == NULL) + if (__create_ib_request (name, ibreq, 0) == NULL) { res->status = NIS_BADNAME; return res; @@ -556,24 +554,24 @@ nis_next_entry (const_nis_name name, const netobj *cookie) if (cookie != NULL) { - ibreq.ibr_cookie.n_bytes = malloc (cookie->n_len); - if (ibreq.ibr_cookie.n_bytes == NULL) + ibreq->ibr_cookie.n_bytes = malloc (cookie->n_len); + if (ibreq->ibr_cookie.n_bytes == NULL) { res->status = NIS_NOMEMORY; free (res); return NULL; } - memcpy (ibreq.ibr_cookie.n_bytes, cookie->n_bytes, cookie->n_len); - ibreq.ibr_cookie.n_len = cookie->n_len; + memcpy (ibreq->ibr_cookie.n_bytes, cookie->n_bytes, cookie->n_len); + ibreq->ibr_cookie.n_len = cookie->n_len; } - if ((status = __do_niscall (ibreq.ibr_name, NIS_IBNEXT, + if ((status = __do_niscall (ibreq->ibr_name, NIS_IBNEXT, (xdrproc_t) xdr_ib_request, - (caddr_t) & ibreq, (xdrproc_t) xdr_nis_result, + (caddr_t) ibreq, (xdrproc_t) xdr_nis_result, (caddr_t) res, 0, NULL)) != NIS_SUCCESS) res->status = status; - nis_free_request (&ibreq); + nis_free_request (ibreq); return res; } diff --git a/nis/nis_verifygroup.c b/nis/nis_verifygroup.c index 6a8ab01..be65120 100644 --- a/nis/nis_verifygroup.c +++ b/nis/nis_verifygroup.c @@ -19,7 +19,6 @@ #include <string.h> #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> nis_error nis_verifygroup (const_nis_name group) diff --git a/nis/nis_xdr.c b/nis/nis_xdr.c index 82df04e..0c253da 100644 --- a/nis/nis_xdr.c +++ b/nis/nis_xdr.c @@ -198,34 +198,34 @@ xdr_objdata (XDR *xdrs, objdata *objp) return FALSE; switch (objp->zo_type) { - case DIRECTORY_OBJ: + case NIS_DIRECTORY_OBJ: if (!xdr_directory_obj (xdrs, &objp->objdata_u.di_data)) return FALSE; break; - case GROUP_OBJ: + case NIS_GROUP_OBJ: if (!xdr_group_obj (xdrs, &objp->objdata_u.gr_data)) return FALSE; break; - case TABLE_OBJ: + case NIS_TABLE_OBJ: if (!xdr_table_obj (xdrs, &objp->objdata_u.ta_data)) return FALSE; break; - case ENTRY_OBJ: + case NIS_ENTRY_OBJ: if (!xdr_entry_obj (xdrs, &objp->objdata_u.en_data)) return FALSE; break; - case LINK_OBJ: + case NIS_LINK_OBJ: if (!xdr_link_obj (xdrs, &objp->objdata_u.li_data)) return FALSE; break; - case PRIVATE_OBJ: + case NIS_PRIVATE_OBJ: if (!xdr_bytes (xdrs, (char **) &objp->objdata_u.po_data.po_data_val, (u_int *) & objp->objdata_u.po_data.po_data_len, ~0)) return FALSE; break; - case NO_OBJ: + case NIS_NO_OBJ: break; - case BOGUS_OBJ: + case NIS_BOGUS_OBJ: break; default: break; diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c index f074c5f..76c6f25 100644 --- a/nis/nss_nisplus/nisplus-alias.c +++ b/nis/nss_nisplus/nisplus-alias.c @@ -67,7 +67,7 @@ _nss_nisplus_parse_aliasent (nis_result *result, unsigned long entry, return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - __type_of (&result->objects.objects_val[entry]) != ENTRY_OBJ || + __type_of (&result->objects.objects_val[entry]) != NIS_ENTRY_OBJ || strcmp(result->objects.objects_val[entry].EN_data.en_type, "mail_aliases") != 0 || result->objects.objects_val[entry].EN_data.en_cols.en_cols_len < 2) diff --git a/nis/nss_nisplus/nisplus-ethers.c b/nis/nss_nisplus/nisplus-ethers.c index b21c276..8ca6935 100644 --- a/nis/nss_nisplus/nisplus-ethers.c +++ b/nis/nss_nisplus/nisplus-ethers.c @@ -63,7 +63,7 @@ _nss_nisplus_parse_etherent (nis_result *result, struct etherent *ether, if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_len != 1 || - __type_of (NIS_RES_OBJECT (result)) != ENTRY_OBJ || + __type_of (NIS_RES_OBJECT (result)) != NIS_ENTRY_OBJ || strcmp(NIS_RES_OBJECT (result)->EN_data.en_type, "ethers_tbl") != 0 || NIS_RES_OBJECT(result)->EN_data.en_cols.en_cols_len < 2) diff --git a/nis/nss_nisplus/nisplus-hosts.c b/nis/nss_nisplus/nisplus-hosts.c index 7fefec0..d1aa5ef 100644 --- a/nis/nss_nisplus/nisplus-hosts.c +++ b/nis/nss_nisplus/nisplus-hosts.c @@ -57,7 +57,7 @@ _nss_nisplus_parse_hostent (nis_result *result, int af, struct hostent *host, return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - __type_of (result->objects.objects_val) != ENTRY_OBJ || + __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ || strcmp(result->objects.objects_val[0].EN_data.en_type, "hosts_tbl") != 0 || result->objects.objects_val[0].EN_data.en_cols.en_cols_len < 4) @@ -340,7 +340,7 @@ _nss_nisplus_gethostbyname2_r (const char *name, int af, struct hostent *host, /* If we do not find it, try it as original name. But if the database is correct, we should find it in the first case, too */ if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - __type_of (result->objects.objects_val) != ENTRY_OBJ || + __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ || strcmp(result->objects.objects_val->EN_data.en_type, "hosts_tbl") != 0 || result->objects.objects_val->EN_data.en_cols.en_cols_len < 3) diff --git a/nis/nss_nisplus/nisplus-network.c b/nis/nss_nisplus/nisplus-network.c index 8aa8bc0..e548017 100644 --- a/nis/nss_nisplus/nisplus-network.c +++ b/nis/nss_nisplus/nisplus-network.c @@ -54,7 +54,7 @@ _nss_nisplus_parse_netent (nis_result *result, struct netent *network, return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - __type_of (result->objects.objects_val) != ENTRY_OBJ || + __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ || strcmp(result->objects.objects_val[0].EN_data.en_type, "networks_tbl") != 0 || result->objects.objects_val[0].EN_data.en_cols.en_cols_len < 3) @@ -310,7 +310,7 @@ _nss_nisplus_getnetbyname_r (const char *name, struct netent *network, database is correct, we should find it in the first case, too */ if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - __type_of (result->objects.objects_val) != ENTRY_OBJ || + __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ || strcmp(result->objects.objects_val[0].EN_data.en_type, "networks_tbl") != 0 || result->objects.objects_val[0].EN_data.en_cols.en_cols_len < 3) diff --git a/nis/nss_nisplus/nisplus-parser.c b/nis/nss_nisplus/nisplus-parser.c index db5f487..b700fa6 100644 --- a/nis/nss_nisplus/nisplus-parser.c +++ b/nis/nss_nisplus/nisplus-parser.c @@ -44,7 +44,7 @@ _nss_nisplus_parse_pwent (nis_result *result, struct passwd *pw, if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_len != 1 || - __type_of (result->objects.objects_val) != ENTRY_OBJ || + __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ || strcmp(result->objects.objects_val->EN_data.en_type, "passwd_tbl") != 0 || result->objects.objects_val->EN_data.en_cols.en_cols_len < 7) @@ -141,7 +141,7 @@ _nss_nisplus_parse_grent (nis_result *result, u_long entry, return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - __type_of(result->objects.objects_val) != ENTRY_OBJ || + __type_of(result->objects.objects_val) != NIS_ENTRY_OBJ || strcmp (result->objects.objects_val[entry].EN_data.en_type, "group_tbl") != 0 || result->objects.objects_val[entry].EN_data.en_cols.en_cols_len < 4) @@ -250,7 +250,7 @@ _nss_nisplus_parse_spent (nis_result *result, struct spwd *sp, if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_len != 1 || - __type_of(result->objects.objects_val) != ENTRY_OBJ || + __type_of(result->objects.objects_val) != NIS_ENTRY_OBJ || strcmp (result->objects.objects_val->EN_data.en_type, "passwd_tbl") != 0 || result->objects.objects_val[0].EN_data.en_cols.en_cols_len < 8) diff --git a/nis/nss_nisplus/nisplus-proto.c b/nis/nss_nisplus/nisplus-proto.c index b64d4bd..2cbd9fe 100644 --- a/nis/nss_nisplus/nisplus-proto.c +++ b/nis/nss_nisplus/nisplus-proto.c @@ -52,7 +52,7 @@ _nss_nisplus_parse_protoent (nis_result * result, struct protoent *proto, return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - __type_of (NIS_RES_OBJECT (result)) != ENTRY_OBJ || + __type_of (NIS_RES_OBJECT (result)) != NIS_ENTRY_OBJ || strcmp (NIS_RES_OBJECT (result)->EN_data.en_type, "protocols_tbl") != 0 || NIS_RES_OBJECT (result)->EN_data.en_cols.en_cols_len < 3) return 0; @@ -282,7 +282,7 @@ _nss_nisplus_getprotobyname_r (const char *name, struct protoent *proto, database is correct, we should find it in the first case, too */ if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - __type_of (result->objects.objects_val) != ENTRY_OBJ || + __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ || strcmp (result->objects.objects_val->EN_data.en_type, "protocols_tbl") != 0 || result->objects.objects_val->EN_data.en_cols.en_cols_len < 3) diff --git a/nis/nss_nisplus/nisplus-rpc.c b/nis/nss_nisplus/nisplus-rpc.c index e93a516..77a7248 100644 --- a/nis/nss_nisplus/nisplus-rpc.c +++ b/nis/nss_nisplus/nisplus-rpc.c @@ -53,7 +53,7 @@ _nss_nisplus_parse_rpcent (nis_result *result, struct rpcent *rpc, return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - __type_of (result->objects.objects_val) != ENTRY_OBJ || + __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ || strcmp(result->objects.objects_val[0].EN_data.en_type, "rpc_tbl") != 0 || result->objects.objects_val[0].EN_data.en_cols.en_cols_len < 3) @@ -282,7 +282,7 @@ _nss_nisplus_getrpcbyname_r (const char *name, struct rpcent *rpc, database is correct, we should find it in the first case, too */ if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - __type_of (result->objects.objects_val) != ENTRY_OBJ || + __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ || strcmp (result->objects.objects_val->EN_data.en_type, "rpc_tbl") != 0 || result->objects.objects_val->EN_data.en_cols.en_cols_len < 3) diff --git a/nis/nss_nisplus/nisplus-service.c b/nis/nss_nisplus/nisplus-service.c index e1a89f9..95a8cfa 100644 --- a/nis/nss_nisplus/nisplus-service.c +++ b/nis/nss_nisplus/nisplus-service.c @@ -52,7 +52,7 @@ _nss_nisplus_parse_servent (nis_result *result, struct servent *serv, return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - __type_of (result->objects.objects_val) != ENTRY_OBJ || + __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ || strcmp (result->objects.objects_val->EN_data.en_type, "services_tbl") != 0 || result->objects.objects_val->EN_data.en_cols.en_cols_len < 4) @@ -294,7 +294,7 @@ _nss_nisplus_getservbyname_r (const char *name, const char *protocol, database is correct, we should find it in the first case, too */ if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - __type_of (result->objects.objects_val) != ENTRY_OBJ || + __type_of (result->objects.objects_val) != NIS_ENTRY_OBJ || strcmp (result->objects.objects_val->EN_data.en_type, "services_tbl") != 0 || result->objects.objects_val->EN_data.en_cols.en_cols_len < 4) diff --git a/nis/rpcsvc/nis.h b/nis/rpcsvc/nis.h index f94b96c..c0d2532 100644 --- a/nis/rpcsvc/nis.h +++ b/nis/rpcsvc/nis.h @@ -46,14 +46,15 @@ __BEGIN_DECLS * which defines the tag values. This allows the tags to change without * having to change the nis.x file. * - * NOTE : DO NOT EDIT THIS FILE! It is automatically generated when - * rpcgen is run on the nis.x file. Note that there is a - * simple sed script to remove some unneeded lines. (See the - * Makefile target nis.h) + * NOTE : THIS FILE IS NOT GENERATED WITH RPCGEN ! SO YOU HAVE TO + * ADD ALL THE CHANGES ON nis_*.x FILES HERE AGAIN ! * + * I have removed all the Solaris internal structs and variables, + * because they are not supported, Sun changed them between various + * releases and they shouldn't be used in user programs. + * <kukuk@vt.uni-paderborn.de> */ -#pragma ident "@(#)nis_object.x 1.7 92/07/14 SMI" #ifndef __nis_object_h #define __nis_object_h @@ -94,6 +95,14 @@ enum zotypes { ENTRY_OBJ = 5, LINK_OBJ = 6, PRIVATE_OBJ = 7, + NIS_BOGUS_OBJ = 0, + NIS_NO_OBJ = 1, + NIS_DIRECTORY_OBJ = 2, + NIS_GROUP_OBJ = 3, + NIS_TABLE_OBJ = 4, + NIS_ENTRY_OBJ = 5, + NIS_LINK_OBJ = 6, + NIS_PRIVATE_OBJ = 7 }; typedef enum zotypes zotypes; extern bool_t xdr_zotypes __P ((XDR *, zotypes*)); @@ -472,30 +481,6 @@ struct fd_result { typedef struct fd_result fd_result; extern bool_t xdr_fd_result __P ((XDR *, fd_result*)); -/* - * Generic "hash" datastructures, used by all types of hashed data. - */ -struct nis_hash_data { - nis_name name; /* NIS name of hashed item */ - int keychain; /* It's hash key (for pop) */ - struct nis_hash_data *next; /* Hash collision pointer */ - struct nis_hash_data *prv_item; /* A serial, doubly linked list */ - struct nis_hash_data *nxt_item; /* of items in the hash table */ -}; -typedef struct nis_hash_data NIS_HASH_ITEM; - -struct nis_hash_table { - NIS_HASH_ITEM *keys[64]; /* A hash table of items */ - NIS_HASH_ITEM *first; /* The first "item" in serial list */ -}; -typedef struct nis_hash_table NIS_HASH_TABLE; - -/* Structure for storing dynamically allocated static data */ -struct nis_sdata { - void *buf; /* Memory allocation pointer */ - u_long size; /* Buffer size */ -}; - /* Generic client creating flags */ #define ZMH_VC 1 #define ZMH_DG 2 @@ -508,6 +493,15 @@ struct nis_sdata { #define NIS_CREATE_ACC 4 #define NIS_DESTROY_ACC 8 /* Test macros. a == access rights, m == desired rights. */ +#define NIS_WORLD(a, m) (((a) & (m)) != 0) +#define NIS_GROUP(a, m) (((a) & ((m) << 8)) != 0) +#define NIS_OWNER(a, m) (((a) & ((m) << 16)) != 0) +#define NIS_NOBODY(a, m) (((a) & ((m) << 24)) != 0) +/* + * EOL Alert - The following non-prefixed test macros are + * here for backward compatability, and will be not be present + * in future releases - use the NIS_*() macros above. + */ #define WORLD(a, m) (((a) & (m)) != 0) #define GROUP(a, m) (((a) & ((m) << 8)) != 0) #define OWNER(a, m) (((a) & ((m) << 16)) != 0) diff --git a/nis/rpcsvc/nis.x b/nis/rpcsvc/nis.x index 20a4733..2d19f37 100644 --- a/nis/rpcsvc/nis.x +++ b/nis/rpcsvc/nis.x @@ -28,13 +28,6 @@ % * Mountain View, California 94043 % */ -/* - * From 4.1 : @(#)nis.x 1.61 Copyright 1989 Sun Microsystems - * - * RPC Language Protocol description file for NIS Plus - * This version : 1.61 - * Last Modified : 3/19/91 - */ #ifdef RPC_HDR %/* % * nis.h @@ -44,9 +37,9 @@ % * structures used by the NIS service. It includes the file nis_tags.h % * which defines the tag values. This allows the tags to change without % * having to change the nis.x file. -% * +% * % * NOTE : DO NOT EDIT THIS FILE! It is automatically generated when -% * rpcgen is run on the nis.x file. Note that there is a +% * rpcgen is run on the nis.x file. Note that there is a % * simple sed script to remove some unneeded lines. (See the % * Makefile target nis.h) % * @@ -75,7 +68,7 @@ enum nis_error { NIS_NAMEUNREACHABLE = 5, /* Can't get there from here */ NIS_UNKNOWNOBJ = 6, /* Object type is bogus */ NIS_TRYAGAIN = 7, /* I'm busy, call back */ - NIS_SYSTEMERROR = 8, /* Out of band failure */ + NIS_SYSTEMERROR = 8, /* Generic system error */ NIS_CHAINBROKEN = 9, /* First/Next warning */ NIS_PERMISSION = 10, /* Not enough permission to access */ NIS_NOTOWNER = 11, /* You don't own it, sorry */ @@ -118,11 +111,11 @@ enum nis_error { }; -/* +/* * Structure definitions for the parameters and results of the actual * NIS RPC calls. * - * This is the standard result (in the protocol) of most of the nis + * This is the standard result (in the protocol) of most of the nis * requests. */ @@ -136,11 +129,11 @@ struct nis_result { u_long cticks; /* Client ticks */ }; -/* - * A Name Service request - * This request is used to access the name space, ns_name is the name +/* + * A Name Service request + * This request is used to access the name space, ns_name is the name * of the object within the namespace and the object is it's value, for - * add/modify, a copy of the original for remove. + * add/modify, a copy of the original for remove. */ struct ns_request { @@ -148,7 +141,7 @@ struct ns_request { nis_object ns_object<1>; /* Optional Object (add/remove) */ }; -/* +/* * An information base request * This request includes the NIS name of the table we wish to search, the * search criteria in the form of attribute/value pairs and an optional @@ -168,7 +161,7 @@ struct ib_request { }; /* - * This argument to the PING call notifies the replicas that something in + * This argument to the PING call notifies the replicas that something in * a directory has changed and this is it's timestamp. The replica will use * the timestamp to determine if its resync operation was successful. */ @@ -177,8 +170,8 @@ struct ping_args { u_long stamp; /* timestamp of the transaction */ }; -/* - * These are the type of entries that are stored in the transaction log, +/* + * These are the type of entries that are stored in the transaction log, * note that modifications will appear as two entries, for names, they have * a "OLD" entry followed by a "NEW" entry. For entries in tables, there * is a remove followed by an add. It is done this way so that we can read @@ -196,13 +189,13 @@ enum log_entry_t { MOD_IBASE = 7, /* Entry was modified in information base */ UPD_STAMP = 8 /* Update timestamp (used as fenceposts) */ }; - + /* - * This result is returned from the name service when it is requested to + * This result is returned from the name service when it is requested to * dump logged entries from its transaction log. Information base updates * will have the name of the information base in the le_name field and * a canonical set of attribute/value pairs to fully specify the entry's - * 'name'. + * 'name'. */ struct log_entry { u_long le_time; /* Time in seconds */ @@ -218,7 +211,7 @@ struct log_result { netobj lr_cookie; /* Used by the dump callback */ log_entry lr_entries<>; /* zero or more entries */ }; - + struct cp_result { nis_error cp_status; /* Status of the checkpoint */ u_long cp_zticks; /* Service 'ticks' */ @@ -227,7 +220,7 @@ struct cp_result { /* * This structure defines a generic NIS tag list. The taglist contains - * zero or tags, each of which is a type and a value. (u_long). + * zero or tags, each of which is a type and a value. (u_long). * These are used to report statistics (see tag definitions below) * and to set or reset state variables. */ @@ -254,17 +247,59 @@ struct fd_args { struct fd_result { nis_error status; /* Status returned by function */ nis_name source; /* Source of this answer */ - opaque dir_data<>; /* Directory Data (XDR'ed) */ + opaque dir_data<>; /* Directory Data (XDR'ed) */ opaque signature<>; /* Signature of the source */ }; +%/* +% * Structures used for server binding. +% */ +struct nis_bound_endpoint { + endpoint ep; + int generation; + int rank; + u_long flags; + int hostnum; + int epnum; + nis_name uaddr; + endpoint cbep; +}; +typedef struct nis_bound_endpoint nis_bound_endpoint; + +struct nis_bound_directory { + int generation; + int min_rank; /* minimum rank of bound endpoints */ + int optimal_rank; /* best possible rank of all endpoints */ + directory_obj dobj; + nis_bound_endpoint BEP<>; +}; +typedef struct nis_bound_directory nis_bound_directory; +%#define bep_len BEP.BEP_len +%#define bep_val BEP.BEP_val + +struct nis_active_endpoint { + endpoint ep; + nis_name hostname; + int rank; + int uaddr_generation; + nis_name uaddr; + int cbep_generation; + endpoint cbep; +}; +typedef struct nis_active_endpoint nis_active_endpoint; + +%/* defines for nis_bound_endpoint.flags */ +%#define NIS_BOUND 0x1 +%#define NIS_TRANSIENT_ERRORS 0x2 + -/* + +/* * What's going on here? Well, it's like this. When the service * is being compiled it wants to have the service definition specific * info included, and when the client is being compiled it wants that * info. This includes the appropriate file which was generated by - * make in the protocols directory (probably /usr/include/rpcsvc). + * make in the protocols directory (probably /usr/include/rpcsvc). */ #ifdef RPC_SVC %#include "nis_svc.h" @@ -296,10 +331,10 @@ program NIS_PROG { /* If fetch and optionally reset statistics */ nis_taglist NIS_STATUS(nis_taglist) = 14; - + /* Dump changes to directory since time in da_time */ log_result NIS_DUMPLOG(dump_args) = 15; - + /* Dump contents of directory named */ log_result NIS_DUMP(dump_args) = 16; @@ -314,16 +349,16 @@ program NIS_PROG { /* Send 'status changed' ping to replicates */ void NIS_PING(ping_args) = 20; - + /* Modify server behaviour (such as debugging) */ nis_taglist NIS_SERVSTATE(nis_taglist) = 21; - + /* Create a Directory */ nis_error NIS_MKDIR(nis_name) = 22; - + /* Remove a Directory */ nis_error NIS_RMDIR(nis_name) = 23; - + /* Update public keys of a directory object */ nis_error NIS_UPDKEYS(nis_name) = 24; } = 3; @@ -372,6 +407,15 @@ program NIS_PROG { %#define NIS_CREATE_ACC 4 %#define NIS_DESTROY_ACC 8 %/* Test macros. a == access rights, m == desired rights. */ +%#define NIS_WORLD(a, m) (((a) & (m)) != 0) +%#define NIS_GROUP(a, m) (((a) & ((m) << 8)) != 0) +%#define NIS_OWNER(a, m) (((a) & ((m) << 16)) != 0) +%#define NIS_NOBODY(a, m) (((a) & ((m) << 24)) != 0) +%/* +% * EOL Alert - The following non-prefixed test macros are +% * here for backward compatability, and will be not be present +% * in future releases - use the NIS_*() macros above. +% */ %#define WORLD(a, m) (((a) & (m)) != 0) %#define GROUP(a, m) (((a) & ((m) << 8)) != 0) %#define OWNER(a, m) (((a) & ((m) << 16)) != 0) @@ -418,6 +462,8 @@ program NIS_PROG { %#define ENTRY_LEN(obj, col) \ % (obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len % +% +% %#ifdef __cplusplus %} %#endif @@ -429,12 +475,12 @@ program NIS_PROG { % %/* % * nis_3.h -% * +% * % * This file contains definitions that are only of interest to the actual % * service daemon and client stubs. Normal users of NIS will not include % * this file. % * -% * NOTE : This include file is automatically created by a combination +% * NOTE : This include file is automatically created by a combination % * of rpcgen and sed. DO NOT EDIT IT, change the nis.x file instead % * and then remake this file. % */ diff --git a/nis/rpcsvc/nis_cache.h b/nis/rpcsvc/nis_cache.h deleted file mode 100644 index ca91a22..0000000 --- a/nis/rpcsvc/nis_cache.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef __RPCSVC_NIS_CACHE_H_ -#define __RPCSVC_NIS_CACHE_H_ - -#include <features.h> -#include <rpc/rpc.h> -#include <rpc/types.h> -#include <rpcsvc/nis.h> - -__BEGIN_DECLS - -/* default cache file */ -#define CACHEFILE "/var/nis/NIS_SHARED_DIRCACHE" - -/* clients have to read-lock the cache file, and SVR4 locking requires that */ -/* the file be writable, but we don't want a world-writable cache file. */ -/* So... everyone agrees to use a different, world-writable file for the */ -/* locking operations, but the data is in CACHEFILE. */ -#define CACHELOCK "/usr/tmp/.NIS_DIR_CACHELOCK" - -/* the file containing one trusted XDR'ed directory object. - * This has to be present for the system to work. - */ -#define COLD_START_FILE "/var/nis/NIS_COLD_START" - -enum pc_status {HIT, MISS, NEAR_MISS}; - -#define CACHEPROG ((u_long)100301) -#define CACHE_VER_1 ((u_long)1) - -#define NIS_CACHE_ADD_ENTRY ((u_long)1) -#define NIS_CACHE_REMOVE_ENTRY ((u_long)2) -#define NIS_CACHE_READ_COLDSTART ((u_long)3) -#define NIS_CACHE_REFRESH_ENTRY ((u_long)4) - -extern void *nis_cache_add_entry_1 __P ((fd_result *, CLIENT *)); -extern void *nis_cache_add_entry_1_svc __P ((fd_result *, struct svc_req *)); -extern void *nis_cache_remove_entry_1 __P ((directory_obj *, CLIENT *)); -extern void *nis_cache_remove_entry_1_svc __P ((directory_obj *, - struct svc_req *)); -extern void *nis_cache_read_coldstart_1 __P ((void *, CLIENT *)); -extern void *nis_cache_read_coldstart_1_svc __P ((void *, struct svc_req *)); -extern void *nis_cache_refresh_entry_1 __P ((char **, CLIENT *)); -extern void *nis_cache_refresh_entry_1_svc __P ((char **, struct svc_req *)); - -__END_DECLS - -#endif /* !_RPCSVC_NIS_CACHE_H_ */ diff --git a/nis/rpcsvc/nis_cache.x b/nis/rpcsvc/nis_cache.x deleted file mode 100644 index 91870d8..0000000 --- a/nis/rpcsvc/nis_cache.x +++ /dev/null @@ -1,47 +0,0 @@ -/* - * nis_cache.x - * - * Copyright (c) 1988-1992 Sun Microsystems Inc - * All Rights Reserved. - */ - -%#pragma ident "@(#)nis_cache.x 1.8 92/07/14 SMI" - - -#ifdef RPC_HDR -%#include <rpc/types.h> -%#include <rpcsvc/nis.h> -% -%/* default cache file */ -%#define CACHEFILE "/var/nis/NIS_SHARED_DIRCACHE" -% -%/* clients have to read-lock the cache file, and SVR4 locking requires that */ -%/* the file be writable, but we don't want a world-writable cache file. */ -%/* So... everyone agrees to use a different, world-writable file for the */ -%/* locking operations, but the data is in CACHEFILE. */ -%#define CACHELOCK "/usr/tmp/.NIS_DIR_CACHELOCK" -% -%/* the file containing one trusted XDR'ed directory object. -% * This has to be present for the system to work. -% */ -%#define COLD_START_FILE "/var/nis/NIS_COLD_START" -% -%enum pc_status {HIT, MISS, NEAR_MISS}; -% -%extern int __nis_debuglevel; -% -% -#endif - -#ifdef RPC_CLNT -%#include "../gen/nis_clnt.h" -#endif - -program CACHEPROG { - version CACHE_VER_1 { - void NIS_CACHE_ADD_ENTRY(fd_result) = 1; - void NIS_CACHE_REMOVE_ENTRY(directory_obj) = 2; - void NIS_CACHE_READ_COLDSTART(void) = 3; - void NIS_CACHE_REFRESH_ENTRY(string<>) = 4; - } = 1; -} = 100301; diff --git a/nis/rpcsvc/nis_object.x b/nis/rpcsvc/nis_object.x index e13ae47..496a16a 100644 --- a/nis/rpcsvc/nis_object.x +++ b/nis/rpcsvc/nis_object.x @@ -5,7 +5,7 @@ * All Rights Reserved. */ -%#pragma ident "@(#)nis_object.x 1.7 92/07/14 SMI" +%#pragma ident "@(#)nis_object.x 1.9 96/07/09 SMI" #if RPC_HDR % @@ -65,9 +65,14 @@ typedef string nis_name<>; /* The NIS name itself. */ * 1024 - 2047 are defined to be private to a particular tree. * 2048 - 4095 are defined to be user defined. * 4096 - ... are reserved for future use. + * + * EOL Alert - The non-prefixed names are present for backward + * compatability only, and will not exist in future releases. Use + * the NIS_* names for future compatability. */ enum zotypes { + BOGUS_OBJ = 0, /* Uninitialized object structure */ NO_OBJ = 1, /* NULL object (no data) */ DIRECTORY_OBJ = 2, /* Directory object describing domain */ @@ -75,7 +80,16 @@ enum zotypes { TABLE_OBJ = 4, /* Table object (a database schema) */ ENTRY_OBJ = 5, /* Entry object (a database record) */ LINK_OBJ = 6, /* A name link. */ - PRIVATE_OBJ = 7 /* Private object (all opaque data) */ + PRIVATE_OBJ = 7, /* Private object (all opaque data) */ + + NIS_BOGUS_OBJ = 0, /* Uninitialized object structure */ + NIS_NO_OBJ = 1, /* NULL object (no data) */ + NIS_DIRECTORY_OBJ = 2, /* Directory object describing domain */ + NIS_GROUP_OBJ = 3, /* Group object (a list of names) */ + NIS_TABLE_OBJ = 4, /* Table object (a database schema) */ + NIS_ENTRY_OBJ = 5, /* Entry object (a database record) */ + NIS_LINK_OBJ = 6, /* A name link. */ + NIS_PRIVATE_OBJ = 7 /* Private object (all opaque data) */ }; /* @@ -230,21 +244,21 @@ struct table_obj { * This union joins together all of the currently known objects. */ union objdata switch (zotypes zo_type) { - case DIRECTORY_OBJ : + case NIS_DIRECTORY_OBJ : struct directory_obj di_data; - case GROUP_OBJ : + case NIS_GROUP_OBJ : struct group_obj gr_data; - case TABLE_OBJ : + case NIS_TABLE_OBJ : struct table_obj ta_data; - case ENTRY_OBJ: + case NIS_ENTRY_OBJ: struct entry_obj en_data; - case LINK_OBJ : + case NIS_LINK_OBJ : struct link_obj li_data; - case PRIVATE_OBJ : + case NIS_PRIVATE_OBJ : opaque po_data<>; - case NO_OBJ : + case NIS_NO_OBJ : void; - case BOGUS_OBJ : + case NIS_BOGUS_OBJ : void; default : void; diff --git a/nis/rpcsvc/nis_tags.h b/nis/rpcsvc/nis_tags.h index 30bdff6..19a5bca 100644 --- a/nis/rpcsvc/nis_tags.h +++ b/nis/rpcsvc/nis_tags.h @@ -12,7 +12,7 @@ #ifndef _RPCSVC_NIS_TAGS_H #define _RPCSVC_NIS_TAGS_H -#pragma ident "@(#)nis_tags.h 1.13 95/02/17 SMI" +#pragma ident "@(#)nis_tags.h 1.16 96/10/25 SMI" /* from file: zns_tags.h 1.7 Copyright (c) 1990 Sun Microsystems */ #ifdef __cplusplus @@ -40,6 +40,9 @@ extern "C" { #define REM_RESERVED (1<<12) /* Spare REM semantic */ #define MOD_EXCLUSIVE (1<<13) /* Modify no overwrite on modified keys */ +/* Lookup and List function flags (continued) */ +#define SOFT_LOOKUP (1<<14) /* The "old default" return on failure */ + /* Transport specific modifications to the operation */ #define USE_DGRAM (1<<16) /* Use a datagram transport */ #define NO_AUTHINFO (1<<17) /* Don't bother attaching auth info */ @@ -63,6 +66,8 @@ extern "C" { #define TAG_TCACHE_ALL 9 /* Flush entire table cache */ #define TAG_GCACHE_ONE 10 /* Flush one group object */ #define TAG_DCACHE_ONE_REFRESH 11 /* Flush and refresh one DO */ +#define TAG_READONLY 12 /* Set read only mode */ +#define TAG_READWRITE 14 /* Reset read-write mode */ #define TAG_OPSTATS 2048 /* NIS+ operations statistics */ #define TAG_THREADS 2049 /* Child process/thread status */ diff --git a/nis/rpcsvc/nislib.h b/nis/rpcsvc/nislib.h index 73b3804..016bedc 100644 --- a/nis/rpcsvc/nislib.h +++ b/nis/rpcsvc/nislib.h @@ -224,29 +224,14 @@ extern bool_t nis_write_obj __P ((const char *file, const nis_object *obj)); */ extern directory_obj *nis_clone_directory __P ((const directory_obj *src, directory_obj *dest)); -extern group_obj *nis_clone_group __P ((const group_obj *src, - group_obj *dest)); -extern table_obj *nis_clone_table __P ((const table_obj *src, - table_obj *dest)); -extern entry_obj *nis_clone_entry __P ((const entry_obj *src, - entry_obj *dest)); -extern link_obj *nis_clone_link __P ((const link_obj *src, link_obj *dest)); -extern objdata *nis_clone_objdata __P ((const objdata *src, objdata *dest)); extern nis_result *nis_clone_result __P ((const nis_result *src, nis_result *dest)); /* nis_free - nis_freeresult */ extern void nis_freeresult __P ((nis_result *result)); /* (XXX THE FOLLOWING ARE INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) */ -extern void nis_free_attr __P ((nis_attr *attr)); extern void nis_free_request __P ((ib_request *req)); -extern void nis_free_endpoints __P ((endpoint *ep, unsigned int count)); -extern void nis_free_servers __P ((nis_server *machine, unsigned int count)); extern void nis_free_directory __P ((directory_obj *dirobj)); -extern void nis_free_group __P ((group_obj *grpobj)); -extern void nis_free_table __P ((table_obj *tblobj)); -extern void nis_free_entry __P ((entry_obj *enobj)); -extern void nis_free_link __P ((link_obj *lnkobj)); extern void nis_free_object __P ((nis_object *obj)); /* (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) */ @@ -255,10 +240,9 @@ extern nis_name __nis_default_group __P ((char *)); extern u_long __nis_default_ttl __P ((char *)); extern u_long __nis_default_access __P ((char *, u_long)); extern fd_result *__nis_finddirectory __P ((directory_obj *, const_nis_name)); +extern void __free_fdresult __P ((fd_result *)); extern u_long __nis_hash __P ((const void *keyarg, register size_t len)); -extern log_result *__nis_dumplog __P ((nis_server *,nis_name, u_long)); -extern log_result *__nis_dump __P ((nis_server *, nis_name, - int (*)(nis_name, nis_object *, void *))); + /* NIS+ cache locking */ extern int __nis_lock_cache __P ((void)); extern int __nis_unlock_cache __P ((void)); diff --git a/nis/rpcsvc/ypupd.h b/nis/rpcsvc/ypupd.h index dace782..d7ce0d7 100644 --- a/nis/rpcsvc/ypupd.h +++ b/nis/rpcsvc/ypupd.h @@ -85,4 +85,6 @@ extern u_int * ypu_delete_1_svc __P ((ypdelete_args *, struct svc_req *)); extern u_int * ypu_store_1 __P ((ypupdate_args *, CLIENT *)); extern u_int * ypu_store_1_svc __P ((ypupdate_args *, struct svc_req *)); +__END_DECLS + #endif /* !__RPCSVC_YPUPD_H__ */ |