diff options
| author | Ulrich Drepper <drepper@redhat.com> | 1997-05-10 23:37:32 +0000 |
|---|---|---|
| committer | Ulrich Drepper <drepper@redhat.com> | 1997-05-10 23:37:32 +0000 |
| commit | 43b0e40f85770cd1f362c3abbad41e09bd9f0b17 (patch) | |
| tree | 799af104f1ab7419ac37f0d9a8d5d34a73bba54b | |
| parent | 8b13cb56b3433bed5233840af66127a745c27718 (diff) | |
| download | glibc-43b0e40f85770cd1f362c3abbad41e09bd9f0b17.tar.xz glibc-43b0e40f85770cd1f362c3abbad41e09bd9f0b17.zip | |
Update.cvs/libc-ud-970511
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-- | ChangeLog | 30 | ||||
| -rw-r--r-- | argp/argp-eexst.c | 7 | ||||
| -rw-r--r-- | argp/argp-help.c | 6 | ||||
| -rw-r--r-- | argp/argp.h | 4 | ||||
| -rwxr-xr-x | config.guess | 2 | ||||
| -rw-r--r-- | hurd/hurdfault.c | 2 | ||||
| -rw-r--r-- | hurd/hurdsig.c | 2 | ||||
| -rw-r--r-- | nis/TODO | 6 | ||||
| -rw-r--r-- | nis/nis_add.c | 3 | ||||
| -rw-r--r-- | nis/nis_call.c | 211 | ||||
| -rw-r--r-- | nis/nis_checkpoint.c | 2 | ||||
| -rw-r--r-- | nis/nis_intern.h | 9 | ||||
| -rw-r--r-- | nis/nis_lookup.c | 4 | ||||
| -rw-r--r-- | nis/nis_mkdir.c | 10 | ||||
| -rw-r--r-- | nis/nis_modify.c | 2 | ||||
| -rw-r--r-- | nis/nis_ping.c | 9 | ||||
| -rw-r--r-- | nis/nis_remove.c | 2 | ||||
| -rw-r--r-- | nis/nis_rmdir.c | 10 | ||||
| -rw-r--r-- | nis/nis_server.c | 16 | ||||
| -rw-r--r-- | nis/nis_table.c | 22 | ||||
| -rw-r--r-- | nis/rpcsvc/nis_callback.x | 65 | ||||
| -rw-r--r-- | sys/ttydefaults.h | 1 | ||||
| -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.h | 104 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/poll.c | 3 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/sys/ttydefaults.h | 104 |
26 files changed, 558 insertions, 90 deletions
@@ -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 */ @@ -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 |
