lcl_gr.c revision 9525b14bcdeb5b5f6f95ab27c2f48f18bd2ec829
/*
* Copyright (c) 1989, 1993, 1995
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/*
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (c) 1996-1999 by Internet Software Consortium.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* from getgrent.c 8.2 (Berkeley) 3/21/94"; */
/* from BSDI Id: getgrent.c,v 2.8 1996/05/28 18:15:14 bostic Exp $ */
#endif /* LIBC_SCCS and not lint */
/* extern */
#include "port_before.h"
#ifndef WANT_IRS_PW
static int __bind_irs_gr_unneeded;
#else
#include <resolv.h>
#include <errno.h>
#include <fcntl.h>
#include <grp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <irs.h>
#include <isc/memcluster.h>
#include "irs_p.h"
#include "lcl_p.h"
#include "irp_p.h"
#include "port_after.h"
/* Types. */
struct pvt {
/*%<
* Need space to store the entries read from the group file.
* The members list also needs space per member, and the
* strings making up the user names must be allocated
* somewhere. Rather than doing lots of small allocations,
* we keep one buffer and resize it as needed.
*/
char * membuf;
};
/* Forward. */
static void gr_minimize(struct irs_gr *);
/* Portability. */
#ifndef SEEK_SET
# define SEEK_SET 0
#endif
/* Public. */
struct irs_gr *
return (NULL);
}
return (NULL);
}
return (gr);
}
/* Methods. */
static void
}
static struct group *
return (NULL);
}
static struct group *
return (NULL);
}
static struct group *
return (NULL);
}
static void
}
static void
}
}
/* Private. */
static int
return (1);
}
return (0);
return (0);
}
return (1);
}
static char *
char *w, *e;
int ch;
/* Make sure we have a buffer. */
return (NULL);
}
}
/* Read until EOF or EOL. */
/* Make sure we have room for this character and a \0. */
if (w + 1 == e) {
if (t == NULL)
goto enomem;
pvt->membufsize = n;
}
/* Store it. */
*w++ = (char)ch;
}
/* Hitting EOF on the first character really does mean EOF. */
return (NULL);
}
*w = '\0';
}
static struct group *
size_t n;
char *bp, **m, *p;
/* Read lines until we find one that matches our search criteria. */
for (;;) {
return (NULL);
/* Optimize the usual case of searching for a name. */
continue;
goto corrupt;
/* Skip past the password field. */
goto corrupt;
/* Checking for a gid. */
continue;
/*
* Unlike the tests above, the test below is supposed to be
* testing 'p' and not 'bp', in case you think it's a typo.
*/
if (p == NULL || *p == '\0') {
/* warning: corrupted %s file!", _PATH_GROUP */
continue;
}
continue;
/* We want this record. */
break;
}
/*
* Count commas to find out how many members there might be.
* Note that commas separate, so if there is one comma there
* can be two members (group:*:id:user1,user2). Add another
* to account for the NULL terminator. As above, allocate
* largest of INITIAL_NMEMB, or 2*n.
*/
n = 1;
p += strspn(p, ", ");
if ((n *= 2) < INITIAL_NMEMB)
n = INITIAL_NMEMB;
return (NULL);
}
/* Set the name pointers. */
if (p[0] != '\0')
*m++ = p;
*m = NULL;
}
#endif /* WANT_IRS_GR */
/*! \file */