glibc/nis/nis_print.c
Ulrich Drepper 76b87c039b Update.
1997-05-29 12:48  Ulrich Drepper  <drepper@cygnus.com>

	* io/ftw.c: Complete rewrite.  Add implementation of `nftw'.
	* io/ftw.h: Update for new implementation and XPG4.2.

	* login/Makefile: Update for UTMP daemon implementation.

	Update resolver code to bind-4.9.6-T1A.
	* resolv/Banner: Update.
	* nss/digits_dots.c: Adapt text address matching to T1A.
	* nss/nss_files/files-hosts.c: Always use inet_pton.
	* resolv/base64.c (b64_pton): Follow T1A but don't use this code since
	it would lead to warnings.
	* resolv/gethnamaddr.c (getanswer): Test host name for maximal length
	at several places.
	* resolv/inet_net_pton.c (inet_net_pton_ipv4): Correct typo in comment.
	* resolv/res_comp.c (dn_expand): Check for overflow.
	(dn_comp): Likewise.
	* resolv/res_debug.c (precsize_aton): Better implementation.
	* resolv/res_init.c (res_init): Make `buf' of size MAXDNAME.
	* resolv/res_send.c (res_send): Check for overflow in descriptor set.
	* resolv/nss_dns/dns-host.c (getanswer_r): Test host name for maximal
	length at several places.

1997-05-29 12:51  Mark Kettenis  <kettenis@phys.uva.nl>

	* login/utmp-private.h (struct utfuncs): Add one more parameter
	to updwtmp function.
	Declare all three function jump tables.
	* login/utmp.h: Declare __utmpname.
	* login/getutent_r.c: Remove db backend and provide support for
	utmpd backend.
	* login/login.c: Use `updwtmp' function insteead of writing the
	record ourself.
	* login/logwtmp.c: Move `updwtmp' function to...
	* login/updwtmp.c: ...here.  New file.
	* login/utmp_db.h: Removed.
	* login/utmp_file.c: Add updwtmp function to write to file.
	* login/utmp_daemon.c: New file.  Daemon backend.
	* login/utmpname.c: New file.  Implementation of utmpname function.
	* login/utmpdump.c: New file.  Tool to dump utmp-like files.
	* login/utmpd/connection.c: New file.
	* login/utmpd/database.c: New file.
	* login/utmpd/error.c: New file.
	* login/utmpd/request.c: New file.
	* login/utmpd/utmpd-private.h: New file.
	* login/utmpd/utmpd.c: New file.
	* login/utmpd/utmpd.h: New file.
	* login/utmpd/xtmp.c: New file.
	* login/utmpd/xtmp.h: New file.

1997-05-29 12:28  Jim Meyering  <meyering@eng.ascend.com>

	* time/strftime.c: Correct/normalize indentation in cpp directives.

1997-05-28 20:43  Philip Blundell  <pjb27@cam.ac.uk>

	* nis/nis_error.c: Include <string.h> to fix warning.
	* nis/nis_print.c: Likewise.
	* nis/nss_nisplus/nisplus-hosts.c: Arg 3 of map_v4v6_hostent
	is int* not size_t*.

1997-05-28 21:56  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* math/cmathcalls.h: Correct typo in comment.

	* inet/netinet/icmp6.h: Include <netinet/in.h> for in6_addr.

	* sysdeps/unix/sysv/linux/netinet/ip_fw.h: Include <net/if.h> for
	IFNAMSIZ.

	* sysdeps/unix/sysv/linux/net/ppp_defs.h: Include <time.h> for
	time_t.

	* login/pty.h: Include <ioctl-types.h> for definition of struct
	winsize.

	* misc/regexp.h (compile): Correct typo.

	* argp/argp.h: Put extern before __const in defintion of
	argp_program_bug_address.

1997-05-29 00:20  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/wordsize-32/inttypes.h: Correct names of unsigned fast
	and least types.  Correct names of ?INT_FAST*_{MIN,MAX} macros.
	* sysdeps/wordsize-64/inttypes.h: Likewise.
	Reported by Andreas Jaeger <aj@arthur.rhein-neckar.de>.

1997-05-28 22:51  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/Makefile (make-ioctls-CFLAGS): Use generic
	ttydefaults.h file instead of non-existing version in termios/sys.
	Reported by Zack Weinberg <zack@rabi.phys.columbia.edu>.

	* time/strptime.c (strptime_internal, case 'Y'): Restrict year
	number to four digits and to representable range for 4 byte time_t
	values.
	Patch by H.J. Lu <hjl@lucon.org>.

1997-05-28 18:19  Philip Blundell  <pjb27@cam.ac.uk>

	* posix/execl.c: Include <alloca.h> to avoid warning.

1997-05-27 18:19  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* math/libm-test.c: Implement testing of inlined functions, make
	output nicer, update comments.

	* math/test-idouble.c: New file.  Frontend for double tests of
	inlined functions.
	* math/test-ildoubl.c: New file.  Frontend for long double tests of
	inlined functions.
	* math/test-ifloat.c: New file.  Frontend for float tests of
	inlined functions.

	* math/test-longdouble.c: Rename to...
	* math/test-ldouble.c: ...this.

	* math/Makefile: Add rules for new test programs, change rules for
	renaming of longdouble test.

1997-05-20 15:50  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* sunrpc/rpc/svc.h (__dispatch_fn_t): New.
	(svc_register): Use __dispatch_fn_t in prototype.

1997-05-28 17:02  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/generic/bzero.c (bzero): Fix typo.
	Patch by Witek Wnuk <spider@pest.waw.ids.edu.pl>.

1997-05-27 12:00  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* sysdeps/generic/vtimes.c: Use ISO C declaration style.

	* sysdeps/unix/bsd/ualarm.c: Include <unistd.h> for prototype.

	* sysdeps/generic/memccpy.c: Include <string.h> for prototype.

	* signal/tst-signal.c (handler): Correct function declaration to
	avoid warning.
	* stdlib/testsort.c (compare): Likewise.
	* string/tester.c: Likewise.

1997-05-27 14:16  Miles Bader  <miles@gnu.ai.mit.edu>

	* argp-help.c (argp_args_usage): Supply correct argp to filter_doc.

1997-05-27 17:51  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* db/hash/extern.h, db/hash/hash.c, db/hash/hash.h,
	db/hash/hash_log2.c: Rename __log2 to __hash_log2 to avoid clash
	with libm.

1997-05-27 14:47  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/e_atan2.c: Fix missing negate.  Use __m81_test
	instead of explicit comparisons.

1997-05-26 18:36  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* inet/netinet/icmp6.h: Remove use of <asm/bitops.h> which has no
	place in a generic header and is no user include file.
1997-05-29 12:06:58 +00:00

311 lines
8 KiB
C

/* 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 <time.h>
#include <string.h>
#include <rpcsvc/nis.h>
#include <rpcsvc/nislib.h>
static const char *
nis_nstype2str (const nstype type)
{
switch (type)
{
case NIS:
return N_("NIS");
case SUNYP:
return N_("SUNYP");
case IVY:
return N_("IVY");
case DNS:
return N_("DNS");
case X500:
return N_("X500");
case DNANS:
return N_("DNANS");
case XCHS:
return N_("XCHS");
case CDS:
return N_("CDS");
default:
return N_("UNKNOWN");
}
}
static char *
nis_ttl2str (const u_long ttl)
{
static char buf[64];
unsigned long int time, s, m, h;
time = ttl;
h = time / (60 * 60);
time %= (60 * 60);
m = time / 60;
time %= 60;
s = time;
snprintf (buf, 63, "%lu:%02lu:%02lu", h, m, s);
return buf;
}
static char *
nis_flags2str (const u_long flags)
{
static char buf[1024];
snprintf (buf, 1023, "%lu", flags);
return buf;
}
void
nis_print_rights (const u_long access)
{
char result[17];
u_long acc;
int i;
acc = access; /* Parameter is const ! */
result[i = 16] = '\0';
while (i > 0)
{
i -= 4;
result[i + 0] = (acc & NIS_READ_ACC) ? 'r' : '-';
result[i + 1] = (acc & NIS_MODIFY_ACC) ? 'm' : '-';
result[i + 2] = (acc & NIS_CREATE_ACC) ? 'c' : '-';
result[i + 3] = (acc & NIS_DESTROY_ACC) ? 'd' : '-';
acc >>= 8;
}
printf ("%s", result);
}
void
nis_print_directory (const directory_obj *dir)
{
nis_server *sptr;
unsigned int i;
printf (_("Name : '%s'\n"), dir->do_name);
printf (_("Type : %s\n"), gettext (nis_nstype2str (dir->do_type)));
sptr = dir->do_servers.do_servers_val;
for (i = 0; i < dir->do_servers.do_servers_len; i++)
{
if (i == 0)
fputs (_("Master Server :\n"), stdout);
else
fputs (_("Replicate :\n"), stdout);
printf (_("\tName : %s\n"), sptr->name);
fputs (_("\tPublic Key : "), stdout);
switch (sptr->key_type)
{
case NIS_PK_NONE:
fputs (_("None.\n"), stdout);
break;
case NIS_PK_DH:
fputs (_("DH.\n"), stdout);
break;
case NIS_PK_RSA:
fputs (_("RSA.\n"), stdout);
break;
case NIS_PK_KERB:
fputs (_("Kerberous.\n"), stdout);
break;
default:
fputs (_("Unknown.\n"), stdout);
break;
}
if (sptr->ep.ep_len != 0)
{
unsigned int j;
endpoint *ptr;
ptr = sptr->ep.ep_val;
printf (_("\tUniversal addresses (%u)\n"), sptr->ep.ep_len);
for (j = 0; j < sptr->ep.ep_len; j++)
{
printf ("\t[%d] - ", j + 1);
if (ptr->proto != NULL && strlen (ptr->proto) > 0)
printf ("%s, ", ptr->proto);
else
printf ("-, ");
if (ptr->family != NULL && strlen (ptr->family) > 0)
printf ("%s, ", ptr->family);
else
printf ("-, ");
if (ptr->uaddr != NULL && strlen (ptr->uaddr) > 0)
printf ("%s\n", ptr->uaddr);
else
printf ("-\n");
ptr++;
}
}
sptr++;
}
printf (_("Time to live : %s\n"), nis_ttl2str (dir->do_ttl));
if (dir->do_armask.do_armask_len != 0)
{
oar_mask *ptr;
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);
ptr++;
}
}
}
void
nis_print_group (const group_obj *obj)
{
unsigned int i;
fputs (_("Group Flags :"), stdout);
if (obj->gr_flags)
printf ("0x%08lX", obj->gr_flags);
fputs (_("\nGroup Members :\n"), stdout);
for (i = 0; i < obj->gr_members.gr_members_len; i++)
printf ("\t%s\n", obj->gr_members.gr_members_val[i]);
}
void
nis_print_table (const table_obj *obj)
{
unsigned int i;
printf (_("Table Type : %s\n"), obj->ta_type);
printf (_("Number of Columns : %d\n"), obj->ta_maxcol);
printf (_("Character Separator : %c\n"), obj->ta_sep);
printf (_("Search Path : %s\n"), obj->ta_path);
fputs (_("Columns :\n"), stdout);
for (i = 0; i < obj->ta_cols.ta_cols_len; i++)
{
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\tAccess Rights : "), stdout);
nis_print_rights (obj->ta_cols.ta_cols_val[i].tc_rights);
fputc ('\n', stdout);
}
}
void
nis_print_link (const link_obj *obj)
{
printf (_("Type : %d\n"), obj->li_rtype);
printf (_("Name : %s\n"), obj->li_name);
printf (_("Attributes : %d\n"), obj->li_attrs.li_attrs_len);
}
void
nis_print_entry (const entry_obj *obj)
{
unsigned int i;
printf (_("\tEntry data of type %s\n"), obj->en_type);
for (i = 0; i < obj->en_cols.en_cols_len; i++)
{
printf (_("\t[%u] - [%u bytes] "), i,
obj->en_cols.en_cols_val[i].ec_value.ec_value_len);
if ((obj->en_cols.en_cols_val[i].ec_flags & EN_CRYPT) == EN_CRYPT)
fputs (_("Encrypted data\n"), stdout);
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);
}
}
void
nis_print_object (const nis_object * obj)
{
printf (_("Object Name : %s\n"), obj->zo_name);
printf (_("Directory : %s\n"), obj->zo_domain);
printf (_("Owner : %s\n"), obj->zo_owner);
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 (_("Creation Time : %s"), ctime (&obj->zo_oid.ctime));
printf (_("Mod. Time : %s"), ctime (&obj->zo_oid.mtime));
fputs (_("Object Type : "), stdout);
switch (obj->zo_data.zo_type)
{
case BOGUS_OBJ:
fputs (_("BOGUS OBJECT\n"), stdout);
break;
case NO_OBJ:
fputs (_("NO OBJECT\n"), stdout);
break;
case DIRECTORY_OBJ:
fputs (_("DIRECTORY\n"), stdout);
nis_print_directory (&obj->zo_data.objdata_u.di_data);
break;
case GROUP_OBJ:
fputs (_("GROUP\n"), stdout);
nis_print_group (&obj->zo_data.objdata_u.gr_data);
break;
case TABLE_OBJ:
fputs (_("TABLE\n"), stdout);
nis_print_table (&obj->zo_data.objdata_u.ta_data);
break;
case ENTRY_OBJ:
fputs (_("ENTRY\n"), stdout);
nis_print_entry (&obj->zo_data.objdata_u.en_data);
break;
case LINK_OBJ:
fputs (_("LINK\n"), stdout);
nis_print_link (&obj->zo_data.objdata_u.li_data);
break;
case PRIVATE_OBJ:
fputs (_("PRIVATE\n"), stdout);
printf (_(" Data Length = %u\n"),
obj->zo_data.objdata_u.po_data.po_data_len);
break;
default:
fputs (_("(Unknown object)\n"), stdout);
break;
}
}
void
nis_print_result (const nis_result *res)
{
unsigned int i;
printf (_("Status : %s\n"), nis_sperrno (res->status));
printf (_("Number of objects : %u\n"), res->objects.objects_len);
for (i = 0; i < res->objects.objects_len; i++)
{
printf (_("Object #%d:\n"), i);
nis_print_object (&res->objects.objects_val[i]);
}
}