#include <stdio.h>
#include <grp.h>

static struct group group;
static char buf[256];

struct group *
hes_getgrnam(nam)
	char *nam;
{
	struct group *grcommon();
	char **pp, **hes_resolve();

	pp = hes_resolve(nam, "group");
	return grcommon(pp);
}

struct group *
hes_getgrgid(gid)
	int gid;
{
	struct group *grcommon();
	char **pp, gidbuf[6];

	sprintf(gidbuf, "%u", gid);
	pp = hes_resolve(gidbuf, "gid");
	return grcommon(pp);
}

static char *gr_mem[1];	/* dummy -- no room for group members in Hesiod */

static
struct group *
grcommon(pp)
char **pp;
{
	register char *p;
	char *grskip();

	if (pp == NULL)
		return(NULL);
	/* choose only the first response (only 1 expected) */
	strcpy(buf, pp[0]);
	while(*pp) free(*pp++); /* necessary to avoid leaks */
	p = buf;
	group.gr_name = p;
	group.gr_passwd = p = grskip(p);
	group.gr_gid = atoi(grskip(p));
	group.gr_mem = gr_mem;
	gr_mem[0] = NULL;
	return(&group);
}

static char *
grskip(p)
register char *p;
{
	while (*p && *p != ':' && *p != '\n')
		++p;
	if (*p)
		*p++ = 0;
	return(p);
}

