> I think there will be more than I who are interested.
> Please send it either to me or to the list.
Ok, here it is.
Calling "ptsdump prdb.DB0" returns a list in that format:
5004;h8751166;-204;3
-206;pflafs:azi;0;3274
25001;h8551326;-204;3
There's also -v switch which dumps all fields for all main entries.
The program does not list the members of the groups, but this should be
fairly simple to combine, I guess.
Good luck.
+gg
--
[EMAIL PROTECTED] Fax: +43/1/31336/702 [EMAIL PROTECTED]
/*
* FILE %usr/admux/pts/ptsdump.c
*
* dump information from a pts database file
* - HELP
* - prototypes
*
* written: 1995-05-02
* latest update: 1995-09-15
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <afs/ptserver.h>
#ifdef MSDOS
#include <conio.h>
#endif
/* ------------------------------------------------------------------------ */
static struct prheader pts_db_header;
static struct prentry pts_db_entry;
static long pts_db_name_hash_table [HASHSIZE];
static long pts_db_id_hash_table [HASHSIZE];
static int verbose_mode= 0;
#define FORMAT_PLAIN 0
#define FORMAT_LEX 1
static int format= FORMAT_PLAIN;
#define ARG_C_max 10
#define DEFAULT_PTS_FILE "prdb.DB0"
/* ------------------------------------------------------------------------ */
#define GPL
static char *HELP []=
{
"USAGE: ptsdump.c [options] {file name}\n",
" dump contents of a pts database file\n",
"OPTIONS:\n",
" -l ... lex format\n",
" -v ... verbose mode\n",
"\n",
"(@)Aptsdump.c 1.02 #D$1995-09-15 11:00:00\n"
} ;
/* prototypes: ------------------------------------------------------------ */
int main (int argc, char *argv []);
int pts_dump (FILE *fo, char *fnm);
int pts_dump_header (FILE *fo, struct prheader *ptsh);
int pts_dump_hash_table (FILE *fo, long pts_db_name_hash_table [], int cnt);
int pts_dump_entry (FILE *fo, struct prentry *ptse);
/* ------------------------------------------------------------------------ */
int main (int argc, char *argv [])
{
int i, j;
int arg_c= 0;
char *arg_v [ARG_C_max];
if (argc <= 1) goto HLP;
for (i= 1; i < argc; i++)
if (argv [i][0] == '-')
switch (argv [i][1])
{
case 'l': case 'L':
case 'v': case 'V':
for (j= 1; argv [i][j]; j++)
switch (argv [i][j])
{
case 'l': case 'L':
format= FORMAT_LEX;
break;
case 'v': case 'V':
verbose_mode++;
break;
default:
fprintf (stderr, "unknown option %c\n", argv[i][j]);
goto HLP;
}
break;
}
else if (arg_c+1 < ARG_C_max) arg_v [arg_c++]= argv [i];
if (arg_c)
{
for (i= 0; i < arg_c; i++)
if (arg_v [i][0] == '-')
{
goto HLP;
}
else
{
pts_dump (stdout, arg_v [i]);
}
}
else
{
pts_dump (stdout, DEFAULT_PTS_FILE);
}
return 0;
}
/* ------------------------------------------------------------------------ */
int pts_dump (FILE *fo, char *fnm)
{
FILE *fi;
int rc;
long pos;
if ((fi= fopen (fnm, "rb")) == (FILE *) 0)
{
fprintf (stderr, "can't open %s\n", fnm);
return -1;
}
if ((rc= fread (&pts_db_header, sizeof (struct prheader), 1, fi)) > 0)
{
if (verbose_mode)
pts_dump_header (fo, &pts_db_header);
}
#ifdef JUNK
if ((rc= fread (&pts_db_name_hash_table, sizeof (long), HASHSIZE, fi)) > 0)
pts_dump_hash_table (fo, pts_db_name_hash_table, rc);
if ((rc= fread (&pts_db_id_hash_table, sizeof (long), HASHSIZE, fi)) > 0)
pts_dump_hash_table (fo, pts_db_id_hash_table, rc);
#endif /* JUNK */
fseek (fi, (long) 0x00010080, 0);
for (;;)
{
if ((rc= fread (&pts_db_entry, sizeof (struct prentry), 1, fi)) <= 0)
break;
if (verbose_mode)
{
fprintf (fo, "\n----------------------------\n");
fprintf (fo, "pos: 0x%08lX %ld\n", pos, pos);
pts_dump_entry (fo, &pts_db_entry);
}
else
{
pts_print_entry (fo, &pts_db_entry);
}
}
fclose (fi);
return 0;
}
/* ------------------------------------------------------------------------ */
int pts_dump_header (FILE *fo, struct prheader *ptsh)
{
fprintf (fo, "version: 0x%08lX\n", ptsh->version);
fprintf (fo, "headerSize: 0x%08lX\n", ptsh->headerSize);
fprintf (fo, "freePtr: 0x%08lX\n", ptsh->freePtr);
fprintf (fo, "eofPtr: 0x%08lX\n", ptsh->eofPtr);
fprintf (fo, "maxGroup: 0x%08lX\n", ptsh->maxGroup);
fprintf (fo, "maxID: 0x%08lX\n", ptsh->maxID);
fprintf (fo, "maxForeign: 0x%08lX\n", ptsh->maxForeign);
fprintf (fo, "maxInst: 0x%08lX\n", ptsh->maxInst);
fprintf (fo, "orphan: 0x%08lX\n", ptsh->orphan);
fprintf (fo, "foreigncount: 0x%08lX\n", ptsh->foreigncount);
fprintf (fo, "instcount: 0x%08lX\n", ptsh->instcount);
return 0;
}
/* ------------------------------------------------------------------------ */
int pts_dump_hash_table (FILE *fo, long pts_db_name_hash_table [], int cnt)
{
}
/* ------------------------------------------------------------------------ */
int pts_print_entry (FILE *fo, struct prentry *ptse)
{
if ((ptse->flags & 0x0004) || ptse->id == 0) return;
switch (format)
{
case FORMAT_LEX:
fprintf (fo,
"<:><LE>%s</LE><ud.afs><ud.afsuname>%s<ud.afsuid>%d<ud.owner>%d<ud.creator>%d</ud.afs><;>\n",
ptse->name, ptse->name, ptse->id, ptse->owner, ptse->creator);
break;
default:
fprintf (fo, "%d;%s;%d;%d\n",
ptse->id, ptse->name, ptse->owner, ptse->creator);
break;
}
return 0;
}
/* ------------------------------------------------------------------------ */
int pts_dump_entry (FILE *fo, struct prentry *ptse)
{
fprintf (fo, "name: '%s'\n", ptse->name);
fprintf (fo, "flags: 0x%08lX\n", ptse->flags);
fprintf (fo, "id: 0x%08lX %ld\n", ptse->id, ptse->id);
fprintf (fo, "cellid: 0x%08lX\n", ptse->cellid);
fprintf (fo, "next: 0x%08lX\n", ptse->next);
#ifdef PR_REMEMBER_TIMES
fprintf (fo, "createTime: 0x%08lX\n", ptse->createTime);
fprintf (fo, "addTime: 0x%08lX\n", ptse->addTime);
fprintf (fo, "removeTime: 0x%08lX\n", ptse->removeTime);
fprintf (fo, "changeTime: 0x%08lX\n", ptse->changeTime);
#endif
fprintf (fo, "nextID: 0x%08lX\n", ptse->nextID);
fprintf (fo, "nextName: 0x%08lX\n", ptse->nextName);
fprintf (fo, "owner: 0x%08lX\n", ptse->owner);
fprintf (fo, "creator: 0x%08lX\n", ptse->creator);
fprintf (fo, "ngroups: 0x%08lX\n", ptse->ngroups);
fprintf (fo, "nusers: 0x%08lX\n", ptse->nusers);
fprintf (fo, "count: 0x%08lX\n", ptse->count);
fprintf (fo, "instance: 0x%08lX\n", ptse->instance);
fprintf (fo, "owned: 0x%08lX\n", ptse->owned);
fprintf (fo, "nextOwned: 0x%08lX\n", ptse->nextOwned);
fprintf (fo, "parent: 0x%08lX\n", ptse->parent);
fprintf (fo, "sibling: 0x%08lX\n", ptse->sibling);
fprintf (fo, "child: 0x%08lX\n", ptse->child);
return 0;
}