> 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;
}

Reply via email to