aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-05-10 23:37:32 +0000
committerUlrich Drepper <drepper@redhat.com>1997-05-10 23:37:32 +0000
commit43b0e40f85770cd1f362c3abbad41e09bd9f0b17 (patch)
tree799af104f1ab7419ac37f0d9a8d5d34a73bba54b
parent8b13cb56b3433bed5233840af66127a745c27718 (diff)
downloadglibc-43b0e40f85770cd1f362c3abbad41e09bd9f0b17.tar.xz
glibc-43b0e40f85770cd1f362c3abbad41e09bd9f0b17.zip
1997-05-10 11:46 Thorsten Kukuk <kukuk@vt.uni-paderborn.de> * nis/rpcsvc/nis_callback.x: New, from tirpcsrc-2.3. * nis/nis_call.c (__nis_docall): Rewritten for navigation in NIS+ namespace hierachy. * nis/nis_intern.h: Add new __nis_docall function prototypes. * nis/nis_add.c: Change __nis_docall/__nis_docall2 parameters for new rewritten functions. * nis/nis_checkpoint.c: Likewise. * nis/nis_lookup.c: Likewise. * nis/nis_mkdir.c: Likewise. * nis/nis_modify.c: Likewise. * nis/nis_ping.c: Likewise. * nis/nis_remove.c: Likewise. * nis/nis_rmdir.c: Likewise. * nis/nis_server.c: Likewise. * nis/nis_table.c: Likewise. 1997-05-09 16:09 Miles Bader <miles@gnu.ai.mit.edu> * argp/argp-eexst.c: Include <sysexits.h>. (argp_err_exit_status): Initialize to EX_USAGE. * argp/argp.h, argp/argp-help.c: Doc fixes. 1997-05-08 17:15 Miles Bader <miles@gnu.ai.mit.edu> * argp/argp.h [!__error_t_defined] (__error_t_defined): Define. * argp/argp-help.c (canon_doc_option): Correct ctype tests.
-rw-r--r--ChangeLog30
-rw-r--r--argp/argp-eexst.c7
-rw-r--r--argp/argp-help.c6
-rw-r--r--argp/argp.h4
-rwxr-xr-xconfig.guess2
-rw-r--r--hurd/hurdfault.c2
-rw-r--r--hurd/hurdsig.c2
-rw-r--r--nis/TODO6
-rw-r--r--nis/nis_add.c3
-rw-r--r--nis/nis_call.c211
-rw-r--r--nis/nis_checkpoint.c2
-rw-r--r--nis/nis_intern.h9
-rw-r--r--nis/nis_lookup.c4
-rw-r--r--nis/nis_mkdir.c10
-rw-r--r--nis/nis_modify.c2
-rw-r--r--nis/nis_ping.c9
-rw-r--r--nis/nis_remove.c2
-rw-r--r--nis/nis_rmdir.c10
-rw-r--r--nis/nis_server.c16
-rw-r--r--nis/nis_table.c22
-rw-r--r--nis/rpcsvc/nis_callback.x65
-rw-r--r--sys/ttydefaults.h1
-rw-r--r--sysdeps/generic/sys/ttydefaults.h (renamed from termios/sys/ttydefaults.h)12
-rw-r--r--sysdeps/unix/bsd/sun/sunos4/sys/ttydefaults.h104
-rw-r--r--sysdeps/unix/sysv/linux/poll.c3
-rw-r--r--sysdeps/unix/sysv/linux/sys/ttydefaults.h104
26 files changed, 558 insertions, 90 deletions
diff --git a/ChangeLog b/ChangeLog
index cfc98c31cb..794d891b44 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,33 @@
+1997-05-10 11:46 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
+
+ * nis/rpcsvc/nis_callback.x: New, from tirpcsrc-2.3.
+
+ * nis/nis_call.c (__nis_docall): Rewritten for navigation in NIS+
+ namespace hierachy.
+ * nis/nis_intern.h: Add new __nis_docall function prototypes.
+ * nis/nis_add.c: Change __nis_docall/__nis_docall2 parameters for new
+ rewritten functions.
+ * nis/nis_checkpoint.c: Likewise.
+ * nis/nis_lookup.c: Likewise.
+ * nis/nis_mkdir.c: Likewise.
+ * nis/nis_modify.c: Likewise.
+ * nis/nis_ping.c: Likewise.
+ * nis/nis_remove.c: Likewise.
+ * nis/nis_rmdir.c: Likewise.
+ * nis/nis_server.c: Likewise.
+ * nis/nis_table.c: Likewise.
+
+1997-05-09 16:09 Miles Bader <miles@gnu.ai.mit.edu>
+
+ * argp/argp-eexst.c: Include <sysexits.h>.
+ (argp_err_exit_status): Initialize to EX_USAGE.
+ * argp/argp.h, argp/argp-help.c: Doc fixes.
+
+1997-05-08 17:15 Miles Bader <miles@gnu.ai.mit.edu>
+
+ * argp/argp.h [!__error_t_defined] (__error_t_defined): Define.
+ * argp/argp-help.c (canon_doc_option): Correct ctype tests.
+
1997-05-08 07:53 H.J. Lu <hjl@gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/poll.c: Save errno.
diff --git a/argp/argp-eexst.c b/argp/argp-eexst.c
index 676d1ec517..9040058e4a 100644
--- a/argp/argp-eexst.c
+++ b/argp/argp-eexst.c
@@ -22,8 +22,11 @@
#include <config.h>
#endif
+#include <sysexits.h>
+
#include "argp.h"
/* The exit status that argp will use when exiting due to a parsing error.
- If not defined or set by the user program, this defaults to 1. */
-error_t argp_err_exit_status = 1;
+ If not defined or set by the user program, this defaults to EX_USAGE from
+ <sysexits.h>. */
+error_t argp_err_exit_status = EX_USAGE;
diff --git a/argp/argp-help.c b/argp/argp-help.c
index ed934e0e3a..b17c56d3a5 100644
--- a/argp/argp-help.c
+++ b/argp/argp-help.c
@@ -658,12 +658,12 @@ canon_doc_option (const char **name)
{
int non_opt;
/* Skip initial whitespace. */
- while (isspace (*name))
+ while (isspace (**name))
(*name)++;
/* Decide whether this looks like an option (leading `-') or not. */
non_opt = (**name != '-');
/* Skip until part of name used for sorting. */
- while (**name && !isalnum (*name))
+ while (**name && !isalnum (**name))
(*name)++;
return non_opt;
}
@@ -1612,7 +1612,7 @@ weak_alias (__argp_state_help, argp_state_help)
/* If appropriate, print the printf string FMT and following args, preceded
by the program name and `:', to stderr, and followed by a `Try ... --help'
- message, then exit (ARGP_ERR_EXIT_STATUS). */
+ message, then exit (1). */
void
__argp_error (const struct argp_state *state, const char *fmt, ...)
{
diff --git a/argp/argp.h b/argp/argp.h
index d418253692..6f430d4c23 100644
--- a/argp/argp.h
+++ b/argp/argp.h
@@ -34,6 +34,7 @@
#ifndef __error_t_defined
typedef int error_t;
+#define __error_t_defined
#endif
#ifndef __P
@@ -397,7 +398,8 @@ extern void (*argp_program_version_hook) __P ((FILE *__stream,
__const extern char *argp_program_bug_address;
/* The exit status that argp will use when exiting due to a parsing error.
- If not defined or set by the user program, this defaults to 1. */
+ If not defined or set by the user program, this defaults to EX_USAGE from
+ <sysexits.h>. */
extern error_t argp_err_exit_status;
/* Flags for argp_help. */
diff --git a/config.guess b/config.guess
index bfd352355e..ea44a2a9ca 100755
--- a/config.guess
+++ b/config.guess
@@ -430,7 +430,7 @@ EOF
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
*:GNU:*:*)
- echo `echo ${UNAME_MACHINE}|sed -e 's,-.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;;
*:Linux:*:*)
# The BFD linker knows what the default object file format is, so
diff --git a/hurd/hurdfault.c b/hurd/hurdfault.c
index 671f8cb21a..6c1134a663 100644
--- a/hurd/hurdfault.c
+++ b/hurd/hurdfault.c
@@ -29,7 +29,7 @@
#include <assert.h>
jmp_buf _hurdsig_fault_env;
-struct hurd_signal_preemptor _hurdsig_fault_preemptor;
+struct hurd_signal_preemptor _hurdsig_fault_preemptor = {0};
/* XXX temporary to deal with spelling fix */
weak_alias (_hurdsig_fault_preemptor, _hurdsig_fault_preempter)
diff --git a/hurd/hurdsig.c b/hurd/hurdsig.c
index 6ebd7bed14..592dc12e66 100644
--- a/hurd/hurdsig.c
+++ b/hurd/hurdsig.c
@@ -426,7 +426,7 @@ abort_all_rpcs (int signo, struct machine_thread_all_state *state, int live)
}
}
-struct hurd_signal_preemptor *_hurdsig_preemptors;
+struct hurd_signal_preemptor *_hurdsig_preemptors = 0;
sigset_t _hurdsig_preempted_set;
/* XXX temporary to deal with spelling fix */
diff --git a/nis/TODO b/nis/TODO
index 33072fa730..f87b02a407 100644
--- a/nis/TODO
+++ b/nis/TODO
@@ -1,12 +1,6 @@
* nss_nisplus: When using parser form nss_files, rewrite parser
- * nss_nisplus: Search the data in the complete NIS+ namespace
- specified by NIS_PATH
-
- * What does nis_list give back, if rpc.nisd is not running or
- if /var/nis/NIS_START_FILE does not exist ?
-
* nis_table.c: nis_list():
Missing flags: FOLLOW_PATH, ALL_RESULTS
callback: Don't simulate it, use server callback thread
diff --git a/nis/nis_add.c b/nis/nis_add.c
index 0eb838efed..6e11f17ff6 100644
--- a/nis/nis_add.c
+++ b/nis/nis_add.c
@@ -55,7 +55,8 @@ nis_add (const_nis_name name, const nis_object *obj)
req.ns_object.ns_object_val[0].zo_domain =
nis_domain_of_r (name, buf4, sizeof (buf4));
- if ((status = __do_niscall (NULL, 0, NIS_ADD, (xdrproc_t) xdr_ns_request,
+ if ((status = __do_niscall (req.ns_object.ns_object_val[0].zo_domain,
+ NIS_ADD, (xdrproc_t) xdr_ns_request,
(caddr_t) &req, (xdrproc_t) xdr_nis_result,
(caddr_t) res, MASTER_ONLY)) != RPC_SUCCESS)
res->status = status;
diff --git a/nis/nis_call.c b/nis/nis_call.c
index a92f1445f4..17f67abbde 100644
--- a/nis/nis_call.c
+++ b/nis/nis_call.c
@@ -160,36 +160,19 @@ __nis_dobind (const nis_server *server, u_long flags)
}
nis_error
-__do_niscall (const nis_server *serv, int serv_len, u_long prog,
- xdrproc_t xargs, caddr_t req, xdrproc_t xres, caddr_t resp,
- u_long flags)
+__do_niscall2 (const nis_server *server, u_int server_len, u_long prog,
+ xdrproc_t xargs, caddr_t req, xdrproc_t xres, caddr_t resp,
+ u_long flags)
{
CLIENT *clnt;
- directory_obj *dir = NULL;
- const nis_server *server;
int try, result;
- unsigned int server_len;
- if (serv == NULL || serv_len == 0)
- {
- dir = readColdStartFile ();
- if (dir == NULL) /* No /var/nis/NIS_COLD_START -> no NIS+ installed */
- return NIS_UNAVAIL;
- server = dir->do_servers.do_servers_val;
- server_len = dir->do_servers.do_servers_len;
- }
- else
- {
- server = serv;
- server_len = serv_len;
- }
+ try = 0;
+ result = NIS_NAMEUNREACHABLE;
if (((flags & MASTER_ONLY) == MASTER_ONLY) && server_len > 1)
server_len = 1; /* The first entry is the master */
- try = 0;
- result = NIS_NAMEUNREACHABLE;
-
while (try < MAXTRIES && result != RPC_SUCCESS)
{
unsigned int i;
@@ -215,7 +198,191 @@ __do_niscall (const nis_server *serv, int serv_len, u_long prog,
}
}
+ return result;
+}
+
+static directory_obj *
+dir_lookup (const_nis_name name, nis_server *serv, u_long flags)
+{
+ CLIENT *clnt;
+ int try, result;
+ nis_result *res;
+ struct ns_request req;
+ directory_obj *dir;
+
+ res = calloc (1, sizeof (nis_result));
+ req.ns_name = (char *)name;
+ req.ns_object.ns_object_len = 0;
+ req.ns_object.ns_object_val = NULL;
+ try = 0;
+ result = NIS_NAMEUNREACHABLE;
+
+ while (try < MAXTRIES && result != RPC_SUCCESS)
+ {
+ if ((clnt = __nis_dobind (serv, flags)) == NULL)
+ continue;
+
+ result = clnt_call (clnt, NIS_LOOKUP, (xdrproc_t) xdr_ns_request,
+ (caddr_t) &req, (xdrproc_t) xdr_nis_result,
+ (caddr_t) res, TIMEOUT);
+
+ if (result != RPC_SUCCESS)
+ {
+ clnt_perror (clnt, "do_niscall: clnt_call");
+ clnt_destroy (clnt);
+ result = NIS_RPCERROR;
+ }
+ else
+ clnt_destroy (clnt);
+ }
+ if (result != RPC_SUCCESS || res->status != NIS_SUCCESS)
+ return NULL;
+
+ dir = nis_clone_directory (&res->objects.objects_val->DI_data, NULL);
+ nis_freeresult (res);
+
+ return dir;
+}
+
+static directory_obj *
+rec_dirsearch (const_nis_name name, directory_obj *dir, u_long flags)
+{
+ char domain [strlen (name) + 3];
+
+ nis_domain_of_r (name, domain, sizeof (domain));
+ if (strncmp (domain, "org_dir.", 8) == 0)
+ {
+ char tmp[strlen (name) + 3];
+
+ nis_domain_of_r (domain, tmp, sizeof (tmp));
+ strcpy (domain, tmp);
+ }
+ else
+ if (strncmp (domain, "groups_dir.", 11) == 0)
+ {
+ char tmp[strlen (name) + 3];
+
+ nis_domain_of_r (domain, tmp, sizeof (tmp));
+ strcpy (domain, tmp);
+ }
+ else
+ {
+ /* We have no grous_dir or org_dir, so try the complete name */
+ strcpy (domain, name);
+ }
+
+ switch (nis_dir_cmp (domain, dir->do_name))
+ {
+ case SAME_NAME:
+ return dir;
+ case NOT_SEQUENTIAL:
+ /* NOT_SEQUENTIAL means, go one up and try it there ! */
+ case HIGHER_NAME:
+ { /* We need data from a parent domain */
+ directory_obj *obj;
+ char ndomain [strlen (name) + 3];
+
+ nis_domain_of_r (dir->do_name, ndomain, sizeof (ndomain));
+
+ /* The root server of our domain is a replica of the parent
+ domain ! (Now I understand why a root server must be a
+ replica of the parent domain) */
+ obj = dir_lookup (ndomain, dir->do_servers.do_servers_val,
+ flags);
+ if (obj != NULL)
+ {
+ /* We have found a NIS+ server serving ndomain, now
+ let us search for "name" */
+ nis_free_directory (dir);
+ return rec_dirsearch (name, obj, flags);
+ }
+ else
+ {
+ /* Ups, very bad. Are we already the root server ? */
+ nis_free_directory (dir);
+ return NULL;
+ }
+ }
+ break;
+ case LOWER_NAME:
+ {
+ directory_obj *obj;
+ char leaf [strlen (name) + 3];
+ char ndomain [strlen (name) + 3];
+ u_int i;
+
+ do
+ {
+ if (strlen (domain) == 0)
+ {
+ nis_free_directory (dir);
+ return NULL;
+ }
+ nis_leaf_of_r (domain, leaf, sizeof (leaf));
+ nis_domain_of_r (domain, ndomain, sizeof (ndomain));
+ strcpy (domain, ndomain);
+ }
+ while (nis_dir_cmp (domain, dir->do_name) != SAME_NAME);
+ strcat (leaf, ".");
+ strcat (leaf, domain);
+
+ for (i = 0; i < dir->do_servers.do_servers_len; ++i)
+ {
+ obj = dir_lookup (leaf, &dir->do_servers.do_servers_val[i],
+ flags);
+ if (obj != NULL)
+ {
+ /* We have found a NIS+ server serving ndomain, now
+ let us search for "name" */
+ nis_free_directory (dir);
+ return rec_dirsearch (name, obj, flags);
+ }
+ }
+ }
+ break;
+ case BAD_NAME:
+ nis_free_directory (dir);
+ return NULL;
+ }
+ nis_free_directory (dir);
+ return NULL;
+}
+
+nis_error
+__do_niscall (const_nis_name name, u_long prog, xdrproc_t xargs,
+ caddr_t req, xdrproc_t xres, caddr_t resp, u_long flags)
+{
+ nis_error result;
+ directory_obj *dir = NULL;
+ const nis_server *server;
+ u_int server_len;
+
+
+ dir = readColdStartFile ();
+ if (dir == NULL) /* No /var/nis/NIS_COLD_START -> no NIS+ installed */
+ return NIS_UNAVAIL;
+
+ if (name != NULL)
+ {
+ dir = rec_dirsearch (name, dir, flags);
+ if (dir == NULL)
+ {
+ if (nis_dir_cmp (nis_local_directory(), name) == NOT_SEQUENTIAL)
+ return NIS_NAMEUNREACHABLE;
+ else
+ return NIS_NOTFOUND;
+ }
+ }
+ server = dir->do_servers.do_servers_val;
+ server_len = dir->do_servers.do_servers_len;
+
+ if (((flags & MASTER_ONLY) == MASTER_ONLY) && server_len > 1)
+ server_len = 1; /* The first entry is the master */
+
+ result = __do_niscall2 (server, server_len, prog, xargs, req, xres,
+ resp, flags);
if (dir != NULL)
nis_free_directory (dir);
+
return result;
}
diff --git a/nis/nis_checkpoint.c b/nis/nis_checkpoint.c
index 56e98b2ac5..ff0a9b37a7 100644
--- a/nis/nis_checkpoint.c
+++ b/nis/nis_checkpoint.c
@@ -50,7 +50,7 @@ nis_checkpoint(const_nis_name dirname)
i < res2->objects.objects_val[0].DI_data.do_servers.do_servers_len;
++i)
{
- if (__do_niscall (&res2->objects.objects_val[0].DI_data.do_servers.do_servers_val[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) != RPC_SUCCESS)
diff --git a/nis/nis_intern.h b/nis/nis_intern.h
index 855a7cab51..25c88a2b22 100644
--- a/nis/nis_intern.h
+++ b/nis/nis_intern.h
@@ -24,9 +24,12 @@
__BEGIN_DECLS
-extern nis_error __do_niscall (__const nis_server *server, int server_len,
- u_long prog, xdrproc_t xargs, caddr_t req,
- xdrproc_t xres, caddr_t resp, u_long flags);
+extern nis_error __do_niscall2 (const nis_server *server, u_int server_len,
+ u_long prog, xdrproc_t xargs, caddr_t req,
+ xdrproc_t xres, caddr_t resp, u_long flags);
+extern nis_error __do_niscall (const_nis_name name, u_long prog,
+ xdrproc_t xargs, caddr_t req, xdrproc_t xres,
+ caddr_t resp, u_long flags);
#if defined (HAVE_SECURE_RPC)
extern AUTH *authdes_pk_create (const char *, const netobj *, u_int,
struct sockaddr *, des_block *);
diff --git a/nis/nis_lookup.c b/nis/nis_lookup.c
index 9173437bfa..6f5b12b285 100644
--- a/nis/nis_lookup.c
+++ b/nis/nis_lookup.c
@@ -56,7 +56,7 @@ nis_lookup (const_nis_name name, const u_long flags)
req.ns_object.ns_object_val = NULL;
memset (res, '\0', sizeof (nis_result));
- if ((status = __do_niscall (NULL, 0, NIS_LOOKUP,
+ if ((status = __do_niscall (req.ns_name, NIS_LOOKUP,
(xdrproc_t) xdr_ns_request,
(caddr_t) & req,
(xdrproc_t) xdr_nis_result,
@@ -113,7 +113,7 @@ nis_lookup (const_nis_name name, const u_long flags)
req.ns_object.ns_object_val = NULL;
memset (res, '\0', sizeof (nis_result));
- if ((status = __do_niscall (NULL, 0, NIS_LOOKUP,
+ if ((status = __do_niscall (req.ns_name, NIS_LOOKUP,
(xdrproc_t) xdr_ns_request,
(caddr_t) &req,
(xdrproc_t) xdr_nis_result,
diff --git a/nis/nis_mkdir.c b/nis/nis_mkdir.c
index a781c041ba..685dae64aa 100644
--- a/nis/nis_mkdir.c
+++ b/nis/nis_mkdir.c
@@ -28,17 +28,17 @@ nis_mkdir (const_nis_name dir, const nis_server *server)
if (server == NULL)
{
- if (__do_niscall (NULL, 0, NIS_MKDIR, (xdrproc_t) xdr_nis_name,
+ if (__do_niscall (dir, NIS_MKDIR, (xdrproc_t) xdr_nis_name,
(caddr_t) &dir, (xdrproc_t) xdr_nis_error,
(caddr_t) &res, 0) != RPC_SUCCESS)
return NIS_RPCERROR;
}
else
{
- if (__do_niscall (server, 1, NIS_MKDIR,
- (xdrproc_t) xdr_nis_name,
- (caddr_t) &dir, (xdrproc_t) xdr_nis_error,
- (caddr_t) &res, 0) != RPC_SUCCESS)
+ if (__do_niscall2 (server, 1, NIS_MKDIR,
+ (xdrproc_t) xdr_nis_name,
+ (caddr_t) &dir, (xdrproc_t) xdr_nis_error,
+ (caddr_t) &res, 0) != RPC_SUCCESS)
return NIS_RPCERROR;
}
diff --git a/nis/nis_modify.c b/nis/nis_modify.c
index 9c371c03bc..9c5aad79