diff options
-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
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..9c5aad7913 100644 --- a/nis/nis_modify.c +++ b/nis/nis_modify.c @@ -36,7 +36,7 @@ nis_modify (const_nis_name name, const nis_object *obj) req.ns_object.ns_object_len = 1; req.ns_object.ns_object_val = nis_clone_object (obj, NULL); - if ((status = __do_niscall (NULL, 0, NIS_MODIFY, (xdrproc_t) xdr_ns_request, + if ((status = __do_niscall (name, NIS_MODIFY, (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_ping.c b/nis/nis_ping.c index 0aa56ed37e..610cf03ea5 100644 --- a/nis/nis_ping.c +++ b/nis/nis_ping.c @@ -53,11 +53,10 @@ nis_ping (const_nis_name dirname, u_long utime, const nis_object *dirobj) args.stamp = utime; for (i = 0; i < obj->DI_data.do_servers.do_servers_len; ++i) - __do_niscall (&obj->DI_data.do_servers.do_servers_val[i], 1, - NIS_PING, (xdrproc_t) xdr_ping_args, - (caddr_t) &args, (xdrproc_t) xdr_void, - (caddr_t) NULL, 0); - + __do_niscall2 (&obj->DI_data.do_servers.do_servers_val[i], 1, + NIS_PING, (xdrproc_t) xdr_ping_args, + (caddr_t) &args, (xdrproc_t) xdr_void, + (caddr_t) NULL, 0); if (res) nis_freeresult (res); } diff --git a/nis/nis_remove.c b/nis/nis_remove.c index 0415dca731..3ffd66dfe0 100644 --- a/nis/nis_remove.c +++ b/nis/nis_remove.c @@ -44,7 +44,7 @@ nis_remove (const_nis_name name, const nis_object *obj) req.ns_object.ns_object_val = NULL; } - if ((status = __do_niscall (NULL, 0, NIS_REMOVE, (xdrproc_t) xdr_ns_request, + if ((status = __do_niscall (name, NIS_REMOVE, (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_rmdir.c b/nis/nis_rmdir.c index 5b6f1d181b..a8c239ec70 100644 --- a/nis/nis_rmdir.c +++ b/nis/nis_rmdir.c @@ -28,17 +28,17 @@ nis_rmdir (const_nis_name dir, const nis_server *server) if (server == NULL) { - if (__do_niscall (NULL, 0, NIS_RMDIR, (xdrproc_t) xdr_nis_name, + if (__do_niscall (dir, NIS_RMDIR, (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_RMDIR, - (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_RMDIR, + (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_server.c b/nis/nis_server.c index 393f6c6eb4..4d6b1c1100 100644 --- a/nis/nis_server.c +++ b/nis/nis_server.c @@ -37,16 +37,16 @@ nis_servstate (const nis_server *serv, const nis_tag *tags, if (serv == NULL) { - if (__do_niscall (NULL, 0, NIS_SERVSTATE, (xdrproc_t) xdr_nis_taglist, + if (__do_niscall (NULL, NIS_SERVSTATE, (xdrproc_t) xdr_nis_taglist, (caddr_t) &taglist, (xdrproc_t) xdr_nis_taglist, (caddr_t) &tagres, 0) != RPC_SUCCESS) return NIS_RPCERROR; } else { - if (__do_niscall (serv, 1, NIS_SERVSTATE, (xdrproc_t) xdr_nis_taglist, - (caddr_t) &taglist, (xdrproc_t) xdr_nis_taglist, - (caddr_t) &tagres, 0) != RPC_SUCCESS) + if (__do_niscall2 (serv, 1, NIS_SERVSTATE, (xdrproc_t) xdr_nis_taglist, + (caddr_t) &taglist, (xdrproc_t) xdr_nis_taglist, + (caddr_t) &tagres, 0) != RPC_SUCCESS) return NIS_RPCERROR; } if (tagres.tags.tags_len > 0) @@ -84,16 +84,16 @@ nis_stats (const nis_server *serv, const nis_tag *tags, if (serv == NULL) { - if (__do_niscall (NULL, 0, NIS_STATUS, (xdrproc_t) xdr_nis_taglist, + if (__do_niscall (NULL, NIS_STATUS, (xdrproc_t) xdr_nis_taglist, (caddr_t) &taglist, (xdrproc_t) xdr_nis_taglist, (caddr_t) &tagres, 0) != RPC_SUCCESS) return NIS_RPCERROR; } else { - if (__do_niscall (serv, 1, NIS_STATUS, (xdrproc_t) xdr_nis_taglist, - (caddr_t) &taglist, (xdrproc_t) xdr_nis_taglist, - (caddr_t) &tagres, 0) != RPC_SUCCESS) + if (__do_niscall2 (serv, 1, NIS_STATUS, (xdrproc_t) xdr_nis_taglist, + (caddr_t) &taglist, (xdrproc_t) xdr_nis_taglist, + (caddr_t) &tagres, 0) != RPC_SUCCESS) return NIS_RPCERROR; } if (tagres.tags.tags_len > 0) diff --git a/nis/nis_table.c b/nis/nis_table.c index 268ea2f76c..5fa3c89e0b 100644 --- a/nis/nis_table.c +++ b/nis/nis_table.c @@ -197,9 +197,9 @@ nis_list (const_nis_name name, u_long flags, { memset (res, '\0', sizeof (nis_result)); - if ((result = __do_niscall (NULL, 0, NIS_IBLIST, + if ((result = __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)) != RPC_SUCCESS) { res->status = result; @@ -276,9 +276,9 @@ nis_add_entry (const_nis_name name, const nis_object *obj, ibreq.ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL); ibreq.ibr_obj.ibr_obj_len = 1; - if ((status = __do_niscall (NULL, 0, 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)) != RPC_SUCCESS) res->status = status; @@ -308,7 +308,7 @@ nis_modify_entry (const_nis_name name, const nis_object *obj, ibreq.ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL); ibreq.ibr_obj.ibr_obj_len = 1; - if ((status = __do_niscall (NULL, 0, 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) res, 0)) != RPC_SUCCESS) @@ -342,7 +342,7 @@ nis_remove_entry (const_nis_name name, const nis_object *obj, ibreq.ibr_obj.ibr_obj_len = 1; } - if ((status = __do_niscall (NULL, 0, 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) res, 0)) != RPC_SUCCESS) @@ -368,8 +368,9 @@ nis_first_entry (const_nis_name name) return res; } - if ((status = __do_niscall (NULL, 0, NIS_IBFIRST, (xdrproc_t) xdr_ib_request, - (caddr_t) & ibreq, (xdrproc_t) xdr_nis_result, + if ((status = __do_niscall (ibreq.ibr_name, NIS_IBFIRST, + (xdrproc_t) xdr_ib_request, + (caddr_t) &ibreq, (xdrproc_t) xdr_nis_result, (caddr_t) res, 0)) != RPC_SUCCESS) res->status = status; @@ -406,8 +407,9 @@ nis_next_entry (const_nis_name name, const netobj *cookie) ibreq.ibr_cookie.n_len = cookie->n_len; } - if ((status = __do_niscall (NULL, 0, NIS_IBNEXT, (xdrproc_t) xdr_ib_request, - (caddr_t) & ibreq, (xdrproc_t) xdr_nis_result, + if ((status = __do_niscall (ibreq.ibr_name, NIS_IBNEXT, + (xdrproc_t) xdr_ib_request, + (caddr_t) &ibreq, (xdrproc_t) xdr_nis_result, (caddr_t) res, 0)) != RPC_SUCCESS) res->status = status; diff --git a/nis/rpcsvc/nis_callback.x b/nis/rpcsvc/nis_callback.x new file mode 100644 index 0000000000..48178655cf --- /dev/null +++ b/nis/rpcsvc/nis_callback.x @@ -0,0 +1,65 @@ +%/* +% * Sun RPC is a product of Sun Microsystems, Inc. and is provided for +% * unrestricted use provided that this legend is included on all tape +% * media and as a part of the software program in whole or part. Users +% * may copy or modify Sun RPC without charge, but are not authorized +% * to license or distribute it to anyone else except as part of a product or +% * program developed by the user or with the express written consent of +% * Sun Microsystems, Inc. +% * +% * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE +% * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR +% * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. +% * +% * Sun RPC is provided with no support and without any obligation on the +% * part of Sun Microsystems, Inc. to assist in its use, correction, +% * modification or enhancement. +% * +% * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE +% * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC +% * OR ANY PART THEREOF. +% * +% * In no event will Sun Microsystems, Inc. be liable for any lost revenue +% * or profits or other special, indirect and consequential damages, even if +% * Sun has been advised of the possibility of such damages. +% * +% * Sun Microsystems, Inc. +% * 2550 Garcia Avenue +% * Mountain View, California 94043 +% */ + +/* + * nis_callback.x + * + * Copyright (c) 1988-1992 Sun Microsystems Inc + * All Rights Reserved. + */ + +%#pragma ident "@(#)nis_callback.x 1.7 94/05/03 SMI" + +/* + * "@(#)zns_cback.x 1.2 90/09/10 Copyr 1990 Sun Micro" + * + * RPCL description of the Callback Service. + */ + +#ifdef RPC_HDR +%#include <rpcsvc/nis.h> +#endif +#ifdef RPC_XDR +%#include "nis_clnt.h" +#endif + +typedef nis_object *obj_p; + +struct cback_data { + obj_p entries<>; /* List of objects */ +}; + +program CB_PROG { + version CB_VERS { + bool CBPROC_RECEIVE(cback_data) = 1; + void CBPROC_FINISH(void) = 2; + void CBPROC_ERROR(nis_error) = 3; + } = 1; +} = 100302; diff --git a/sys/ttydefaults.h b/sys/ttydefaults.h deleted file mode 100644 index 9cf7f1b6b9..0000000000 --- a/sys/ttydefaults.h +++ /dev/null @@ -1 +0,0 @@ -#include <termios/sys/ttydefaults.h> diff --git a/termios/sys/ttydefaults.h b/sysdeps/generic/sys/ttydefaults.h index 14903923da..ab9a1f6934 100644 --- a/termios/sys/ttydefaults.h +++ b/sysdeps/generic/sys/ttydefaults.h @@ -39,7 +39,7 @@ */ /* - * System wide defaults for terminal state. + * System wide defaults for terminal state. 4.4 BSD/generic GNU version. */ #ifndef _SYS_TTYDEFAULTS_H_ #define _SYS_TTYDEFAULTS_H_ @@ -48,15 +48,7 @@ * Defaults on "first" open. */ #define TTYDEF_IFLAG (BRKINT | ISTRIP | ICRNL | IMAXBEL | IXON | IXANY) -#ifdef OXTABS -# define TTYDEF_OFLAG (OPOST | ONLCR | OXTABS) -#else -# if defined TAB3 -# define TTYDEF_OFLAG (OPOST | ONLCR | TAB3) -# else -# define TTYDEF_OFLAG (OPOST | ONLCR) -# endif -#endif +#define TTYDEF_OFLAG (OPOST | ONLCR | OXTABS) #define TTYDEF_LFLAG (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL) #define TTYDEF_CFLAG (CREAD | CS7 | PARENB | HUPCL) #define TTYDEF_SPEED (B9600) diff --git a/sysdeps/unix/bsd/sun/sunos4/sys/ttydefaults.h b/sysdeps/unix/bsd/sun/sunos4/sys/ttydefaults.h new file mode 100644 index 0000000000..d4ee4ac451 --- /dev/null +++ b/sysdeps/unix/bsd/sun/sunos4/sys/ttydefaults.h @@ -0,0 +1,104 @@ +/*- + * Copyright (c) 1982, 1986, 1993 + * The Regents of the University of California. All rights reserved. + * (c) UNIX System Laboratories, Inc. + * All or some portions of this file are derived from material licensed + * to the University of California by American Telephone and Telegraph + * Co. or Unix System Laboratories, Inc. and are reproduced herein with + * the permission of UNIX System Laboratories, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)ttydefaults.h 8.4 (Berkeley) 1/21/94 + */ + +/* + * System wide defaults for terminal state. SunOS 4 version. + */ +#ifndef _SYS_TTYDEFAULTS_H_ +#define _SYS_TTYDEFAULTS_H_ + +/* + * Defaults on "first" open. + */ +#define TTYDEF_IFLAG (BRKINT | ISTRIP | ICRNL | IMAXBEL | IXON | IXANY) +#define TTYDEF_OFLAG (OPOST | ONLCR | XTABS) +#define TTYDEF_LFLAG (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL) +#define TTYDEF_CFLAG (CREAD | CS7 | PARENB | HUPCL) +#define TTYDEF_SPEED (B9600) + +/* + * Control Character Defaults + */ +#define CTRL(x) (x&037) +#define CEOF CTRL('d') +#ifdef _POSIX_VDISABLE +# define CEOL _POSIX_VDISABLE +#else +# define CEOL ((unsigned char)'\377') /* XXX avoid _POSIX_VDISABLE */ +#endif +#define CERASE 0177 +#define CINTR CTRL('c') +#ifdef _POSIX_VDISABLE +# define CSTATUS _POSIX_VDISABLE +#else +# define CSTATUS ((unsigned char)'\377') /* XXX avoid _POSIX_VDISABLE */ +#endif +#define CKILL CTRL('u') +#define CMIN 1 +#define CQUIT 034 /* FS, ^\ */ +#define CSUSP CTRL('z') +#define CTIME 0 +#define CDSUSP CTRL('y') +#define CSTART CTRL('q') +#define CSTOP CTRL('s') +#define CLNEXT CTRL('v') +#define CDISCARD CTRL('o') +#define CWERASE CTRL('w') +#define CREPRINT CTRL('r') +#define CEOT CEOF +/* compat */ +#define CBRK CEOL +#define CRPRNT CREPRINT +#define CFLUSH CDISCARD + +/* PROTECTED INCLUSION ENDS HERE */ +#endif /* !_SYS_TTYDEFAULTS_H_ */ + +/* + * #define TTYDEFCHARS to include an array of default control characters. + */ +#ifdef TTYDEFCHARS +cc_t ttydefchars[NCCS] = { + CEOF, CEOL, CEOL, CERASE, CWERASE, CKILL, CREPRINT, + _POSIX_VDISABLE, CINTR, CQUIT, CSUSP, CDSUSP, CSTART, CSTOP, CLNEXT, + CDISCARD, CMIN, CTIME, CSTATUS, _POSIX_VDISABLE +}; +#undef TTYDEFCHARS +#endif diff --git a/sysdeps/unix/sysv/linux/poll.c b/sysdeps/unix/sysv/linux/poll.c index 875c3b48f8..b92139aab4 100644 --- a/sysdeps/unix/sysv/linux/poll.c +++ b/sysdeps/unix/sysv/linux/poll.c @@ -41,10 +41,13 @@ poll (fds, nfds, timeout) { if (syscall) { + int errno_saved = errno; int retval = __syscall_poll (fds, nfds, timeout); if (retval >= 0 || errno != ENOSYS) return retval; + + __set_errno (errno_saved); } must_emulate = 1; diff --git a/sysdeps/unix/sysv/linux/sys/ttydefaults.h b/sysdeps/unix/sysv/linux/sys/ttydefaults.h new file mode 100644 index 0000000000..28512ebebb --- /dev/null +++ b/sysdeps/unix/sysv/linux/sys/ttydefaults.h @@ -0,0 +1,104 @@ +/*- + * Copyright (c) 1982, 1986, 1993 + * The Regents of the University of California. All rights reserved. + * (c) UNIX System Laboratories, Inc. + * All or some portions of this file are derived from material licensed + * to the University of California by American Telephone and Telegraph + * Co. or Unix System Laboratories, Inc. and are reproduced herein with + * the permission of UNIX System Laboratories, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)ttydefaults.h 8.4 (Berkeley) 1/21/94 + */ + +/* + * System wide defaults for terminal state. Linux version. + */ +#ifndef _SYS_TTYDEFAULTS_H_ +#define _SYS_TTYDEFAULTS_H_ + +/* + * Defaults on "first" open. + */ +#define TTYDEF_IFLAG (BRKINT | ISTRIP | ICRNL | IMAXBEL | IXON | IXANY) +#define TTYDEF_OFLAG (OPOST | ONLCR | XTABS) +#define TTYDEF_LFLAG (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL) +#define TTYDEF_CFLAG (CREAD | CS7 | PARENB | HUPCL) +#define TTYDEF_SPEED (B9600) + +/* + * Control Character Defaults + */ +#define CTRL(x) (x&037) +#define CEOF CTRL('d') +#ifdef _POSIX_VDISABLE +# define CEOL _POSIX_VDISABLE +#else +# define CEOL ((unsigned char)'\377') /* XXX avoid _POSIX_VDISABLE */ +#endif +#define CERASE 0177 +#define CINTR CTRL('c') +#ifdef _POSIX_VDISABLE +# define CSTATUS _POSIX_VDISABLE +#else +# define CSTATUS ((unsigned char)'\377') /* XXX avoid _POSIX_VDISABLE */ +#endif +#define CKILL CTRL('u') +#define CMIN 1 +#define CQUIT 034 /* FS, ^\ */ +#define CSUSP CTRL('z') +#define CTIME 0 +#define CDSUSP CTRL('y') +#define CSTART CTRL('q') +#define CSTOP CTRL('s') +#define CLNEXT CTRL('v') +#define CDISCARD CTRL('o') +#define CWERASE CTRL('w') +#define CREPRINT CTRL('r') +#define CEOT CEOF +/* compat */ +#define CBRK CEOL +#define CRPRNT CREPRINT +#define CFLUSH CDISCARD + +/* PROTECTED INCLUSION ENDS HERE */ +#endif /* !_SYS_TTYDEFAULTS_H_ */ + +/* + * #define TTYDEFCHARS to include an array of default control characters. + */ +#ifdef TTYDEFCHARS +cc_t ttydefchars[NCCS] = { + CEOF, CEOL, CEOL, CERASE, CWERASE, CKILL, CREPRINT, + _POSIX_VDISABLE, CINTR, CQUIT, CSUSP, CDSUSP, CSTART, CSTOP, CLNEXT, + CDISCARD, CMIN, CTIME, CSTATUS, _POSIX_VDISABLE +}; +#undef TTYDEFCHARS +#endif |