#include <stdio.h>
#include <errno.h>
#include <afs/ptint.h>
#include <afs/cellconfig.h>
#include "q.h"

/*
 * This routine expands the members of an AFS group, like `pts membership
 * groupname.'  It returns a pointer to a group structure.
 * On failure, it returns NULL and sets err_code.
 */

Group *
Q_afs_get_membership (groupname, cellname, err_code)
     char *groupname;
     char *cellname;
     long *err_code;
{
  namelist *names;
  Group *grp;
  int i;

  Q_init ();

  names = (namelist *) Q_malloc (sizeof (namelist));

  names->namelist_val = 0;
  names->namelist_len = 0;

  *err_code = pr_Initialize (1, AFSCONF_CLIENTNAME, cellname);

  if (*err_code)
    return NULL;

  *err_code = pr_ListMembers (groupname, names);

  if (*err_code)
    return NULL;

  grp = (Group *) Q_malloc (sizeof (Group));

  grp->type = ON_AFS;
  grp->num_members = names->namelist_len;

  if (names->namelist_len > 0)
    {
      grp->members = (char **) Q_malloc (names->namelist_len * sizeof (char *));
      for (i = 0; i < names->namelist_len; i++)
	grp->members[i] = names->namelist_val[i];
    }

  Q_free (names);

  return grp;
}
