Skip to content

Commit

Permalink
Update.
Browse files Browse the repository at this point in the history
1997-05-10 11:46  Thorsten Kukuk  <[email protected]>

	* 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  <[email protected]>

	* 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  <[email protected]>

	* argp/argp.h [!__error_t_defined] (__error_t_defined): Define.
	* argp/argp-help.c (canon_doc_option): Correct ctype tests.
  • Loading branch information
Ulrich Drepper committed May 10, 1997
1 parent 8b13cb5 commit 43b0e40
Show file tree
Hide file tree
Showing 26 changed files with 558 additions and 90 deletions.
30 changes: 30 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,33 @@
1997-05-10 11:46 Thorsten Kukuk <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* sysdeps/unix/sysv/linux/poll.c: Save errno.
Expand Down
7 changes: 5 additions & 2 deletions argp/argp-eexst.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
6 changes: 3 additions & 3 deletions argp/argp-help.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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, ...)
{
Expand Down
4 changes: 3 additions & 1 deletion argp/argp.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@

#ifndef __error_t_defined
typedef int error_t;
#define __error_t_defined
#endif

#ifndef __P
Expand Down Expand Up @@ -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. */
Expand Down
2 changes: 1 addition & 1 deletion config.guess
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion hurd/hurdfault.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion hurd/hurdsig.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
6 changes: 0 additions & 6 deletions nis/TODO
Original file line number Diff line number Diff line change
@@ -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
Expand Down
3 changes: 2 additions & 1 deletion nis/nis_add.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
211 changes: 189 additions & 22 deletions nis/nis_call.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}
2 changes: 1 addition & 1 deletion nis/nis_checkpoint.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
9 changes: 6 additions & 3 deletions nis/nis_intern.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 *);
Expand Down
Loading

0 comments on commit 43b0e40

Please sign in to comment.