Merge tag 'debian/1.8.5p2-1' into squeeze
[debian/sudo] / tsgetgrpw.c
diff --git a/tsgetgrpw.c b/tsgetgrpw.c
deleted file mode 100644 (file)
index 6f14d3f..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * Copyright (c) 2005, 2008, 2010 Todd C. Miller <Todd.Miller@courtesan.com>
- *
- * 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 THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR 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.
- */
-
-/*
- * Trivial replacements for the libc get{gr,pw}{uid,nam}() routines
- * for use by testsudoers in the sudo test harness.
- * We need our own since many platforms don't provide set{pw,gr}file().
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <stdio.h>
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif /* STDC_HEADERS */
-#ifdef HAVE_STRING_H
-# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS)
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif /* HAVE_STRING_H */
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif /* HAVE_STRINGS_H */
-#include <fcntl.h>
-#include <limits.h>
-#include <pwd.h>
-#include <grp.h>
-
-#include "sudo.h"
-
-#ifndef LINE_MAX
-# define LINE_MAX 2048
-#endif
-
-#undef GRMEM_MAX
-#define GRMEM_MAX 200
-
-static FILE *pwf;
-static const char *pwfile = "/etc/passwd";
-static int pw_stayopen;
-
-static FILE *grf;
-static const char *grfile = "/etc/group";
-static int gr_stayopen;
-
-void setgrfile __P((const char *));
-void setgrent __P((void));
-void endgrent __P((void));
-struct group *getgrent __P((void));
-struct group *getgrnam __P((const char *));
-struct group *getgrgid __P((gid_t));
-
-void setpwfile __P((const char *));
-void setpwent __P((void));
-void endpwent __P((void));
-struct passwd *getpwent __P((void));
-struct passwd *getpwnam __P((const char *));
-struct passwd *getpwuid __P((uid_t));
-
-void
-setpwfile(file)
-    const char *file;
-{
-    pwfile = file;
-    if (pwf != NULL)
-       endpwent();
-}
-
-void
-setpwent()
-{
-    if (pwf == NULL) {
-       pwf = fopen(pwfile, "r");
-       if (pwf != NULL)
-           fcntl(fileno(pwf), F_SETFD, FD_CLOEXEC);
-    } else {
-       rewind(pwf);
-    }
-    pw_stayopen = 1;
-}
-
-void
-endpwent()
-{
-    if (pwf != NULL) {
-       fclose(pwf);
-       pwf = NULL;
-    }
-    pw_stayopen = 0;
-}
-
-struct passwd *
-getpwent()
-{
-    static struct passwd pw;
-    static char pwbuf[LINE_MAX];
-    size_t len;
-    char *cp, *colon;
-
-    if ((colon = fgets(pwbuf, sizeof(pwbuf), pwf)) == NULL)
-       return(NULL);
-
-    zero_bytes(&pw, sizeof(pw));
-    if ((colon = strchr(cp = colon, ':')) == NULL)
-       return(NULL);
-    *colon++ = '\0';
-    pw.pw_name = cp;
-    if ((colon = strchr(cp = colon, ':')) == NULL)
-       return(NULL);
-    *colon++ = '\0';
-    pw.pw_passwd = cp;
-    if ((colon = strchr(cp = colon, ':')) == NULL)
-       return(NULL);
-    *colon++ = '\0';
-    pw.pw_uid = atoi(cp);
-    if ((colon = strchr(cp = colon, ':')) == NULL)
-       return(NULL);
-    *colon++ = '\0';
-    pw.pw_gid = atoi(cp);
-    if ((colon = strchr(cp = colon, ':')) == NULL)
-       return(NULL);
-    *colon++ = '\0';
-    pw.pw_gecos = cp;
-    if ((colon = strchr(cp = colon, ':')) == NULL)
-       return(NULL);
-    *colon++ = '\0';
-    pw.pw_dir = cp;
-    pw.pw_shell = colon;
-    len = strlen(colon);
-    if (len > 0 && colon[len - 1] == '\n')
-       colon[len - 1] = '\0';
-    return(&pw);
-}
-
-struct passwd *
-getpwnam(name)
-    const char *name;
-{
-    struct passwd *pw;
-
-    if (pwf == NULL) {
-       if ((pwf = fopen(pwfile, "r")) == NULL)
-           return(NULL);
-       fcntl(fileno(pwf), F_SETFD, FD_CLOEXEC);
-    } else {
-       rewind(pwf);
-    }
-    while ((pw = getpwent()) != NULL) {
-       if (strcmp(pw->pw_name, name) == 0)
-           break;
-    }
-    if (!pw_stayopen) {
-       fclose(pwf);
-       pwf = NULL;
-    }
-    return(pw);
-}
-
-struct passwd *
-getpwuid(uid)
-    uid_t uid;
-{
-    struct passwd *pw;
-
-    if (pwf == NULL) {
-       if ((pwf = fopen(pwfile, "r")) == NULL)
-           return(NULL);
-       fcntl(fileno(pwf), F_SETFD, FD_CLOEXEC);
-    } else {
-       rewind(pwf);
-    }
-    while ((pw = getpwent()) != NULL) {
-       if (pw->pw_uid == uid)
-           break;
-    }
-    if (!pw_stayopen) {
-       fclose(pwf);
-       pwf = NULL;
-    }
-    return(pw);
-}
-
-void
-setgrfile(file)
-    const char *file;
-{
-    grfile = file;
-    if (grf != NULL)
-       endgrent();
-}
-
-void
-setgrent()
-{
-    if (grf == NULL) {
-       grf = fopen(grfile, "r");
-       if (grf != NULL)
-           fcntl(fileno(grf), F_SETFD, FD_CLOEXEC);
-    } else {
-       rewind(grf);
-    }
-    gr_stayopen = 1;
-}
-
-void
-endgrent()
-{
-    if (grf != NULL) {
-       fclose(grf);
-       grf = NULL;
-    }
-    gr_stayopen = 0;
-}
-
-struct group *
-getgrent()
-{
-    static struct group gr;
-    static char grbuf[LINE_MAX], *gr_mem[GRMEM_MAX+1];
-    size_t len;
-    char *cp, *colon;
-    int n;
-
-    if ((colon = fgets(grbuf, sizeof(grbuf), grf)) == NULL)
-       return(NULL);
-
-    zero_bytes(&gr, sizeof(gr));
-    if ((colon = strchr(cp = colon, ':')) == NULL)
-       return(NULL);
-    *colon++ = '\0';
-    gr.gr_name = cp;
-    if ((colon = strchr(cp = colon, ':')) == NULL)
-       return(NULL);
-    *colon++ = '\0';
-    gr.gr_passwd = cp;
-    if ((colon = strchr(cp = colon, ':')) == NULL)
-       return(NULL);
-    *colon++ = '\0';
-    gr.gr_gid = atoi(cp);
-    len = strlen(colon);
-    if (len > 0 && colon[len - 1] == '\n')
-       colon[len - 1] = '\0';
-    if (*colon != '\0') {
-       gr.gr_mem = gr_mem;
-       cp = strtok(colon, ",");
-       for (n = 0; cp != NULL && n < GRMEM_MAX; n++) {
-           gr.gr_mem[n] = cp;
-           cp = strtok(NULL, ",");
-       }
-       gr.gr_mem[n++] = NULL;
-    } else
-       gr.gr_mem = NULL;
-    return(&gr);
-}
-
-struct group *
-getgrnam(name)
-    const char *name;
-{
-    struct group *gr;
-
-    if (grf == NULL) {
-       if ((grf = fopen(grfile, "r")) == NULL)
-           return(NULL);
-       fcntl(fileno(grf), F_SETFD, FD_CLOEXEC);
-    } else {
-       rewind(grf);
-    }
-    while ((gr = getgrent()) != NULL) {
-       if (strcmp(gr->gr_name, name) == 0)
-           break;
-    }
-    if (!gr_stayopen) {
-       fclose(grf);
-       grf = NULL;
-    }
-    return(gr);
-}
-
-struct group *
-getgrgid(gid)
-    gid_t gid;
-{
-    struct group *gr;
-
-    if (grf == NULL) {
-       if ((grf = fopen(grfile, "r")) == NULL)
-           return(NULL);
-       fcntl(fileno(grf), F_SETFD, FD_CLOEXEC);
-    } else {
-       rewind(grf);
-    }
-    while ((gr = getgrent()) != NULL) {
-       if (gr->gr_gid == gid)
-           break;
-    }
-    if (!gr_stayopen) {
-       fclose(grf);
-       grf = NULL;
-    }
-    return(gr);
-}