aboutsummaryrefslogtreecommitdiff
path: root/gshadow
diff options
context:
space:
mode:
Diffstat (limited to 'gshadow')
-rw-r--r--gshadow/Makefile39
-rw-r--r--gshadow/Versions21
-rw-r--r--gshadow/fgetsgent.c87
-rw-r--r--gshadow/fgetsgent_r.c75
-rw-r--r--gshadow/getsgent.c32
-rw-r--r--gshadow/getsgent_r.c33
-rw-r--r--gshadow/getsgnam.c32
-rw-r--r--gshadow/getsgnam_r.c33
-rw-r--r--gshadow/gshadow.h128
-rw-r--r--gshadow/putsgent.c81
-rw-r--r--gshadow/sgetsgent.c77
-rw-r--r--gshadow/sgetsgent_r.c74
-rw-r--r--gshadow/tst-gshadow.c141
-rw-r--r--gshadow/tst-putsgent.c168
14 files changed, 0 insertions, 1021 deletions
diff --git a/gshadow/Makefile b/gshadow/Makefile
deleted file mode 100644
index 3558c3fba6..0000000000
--- a/gshadow/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright (C) 2009-2017 Free Software Foundation, Inc.
-# This file is part of the GNU C Library.
-
-# The GNU C Library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-
-# The GNU C Library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-
-# You should have received a copy of the GNU Lesser General Public
-# License along with the GNU C Library; if not, see
-# <http://www.gnu.org/licenses/>.
-
-#
-# Makefile for gshadow.
-#
-subdir := gshadow
-
-include ../Makeconfig
-
-headers = gshadow.h
-routines = getsgent getsgnam sgetsgent fgetsgent putsgent \
- getsgent_r getsgnam_r sgetsgent_r fgetsgent_r
-
-tests = tst-gshadow tst-putsgent
-
-CFLAGS-getsgent_r.c = -fexceptions
-CFLAGS-getsgent.c = -fexceptions
-CFLAGS-fgetsgent.c = -fexceptions
-CFLAGS-fgetsgent_r.c = -fexceptions $(libio-mtsafe)
-CFLAGS-putsgent.c = -fexceptions $(libio-mtsafe)
-CFLAGS-getsgnam.c = -fexceptions
-CFLAGS-getsgnam_r.c = -fexceptions
-
-include ../Rules
diff --git a/gshadow/Versions b/gshadow/Versions
deleted file mode 100644
index 1dba0c5f19..0000000000
--- a/gshadow/Versions
+++ /dev/null
@@ -1,21 +0,0 @@
-libc {
- GLIBC_2.10 {
- # e*
- endsgent;
-
- # f*
- fgetsgent; fgetsgent_r;
-
- # g*
- getsgent; getsgent_r; getsgnam; getsgnam_r;
-
- # p*
- putsgent;
-
- # s*
- setsgent;
-
- # s*
- sgetsgent; sgetsgent_r;
- }
-}
diff --git a/gshadow/fgetsgent.c b/gshadow/fgetsgent.c
deleted file mode 100644
index 848cf3f94b..0000000000
--- a/gshadow/fgetsgent.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <libc-lock.h>
-#include <gshadow.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-/* A reasonable size for a buffer to start with. */
-#define BUFLEN_SPWD 1024
-
-/* We need to protect the dynamic buffer handling. */
-__libc_lock_define_initialized (static, lock);
-
-libc_freeres_ptr (static char *buffer);
-
-/* Read one shadow entry from the given stream. */
-struct sgrp *
-fgetsgent (FILE *stream)
-{
- static size_t buffer_size;
- static struct sgrp resbuf;
- fpos_t pos;
- struct sgrp *result;
- int save;
-
- if (fgetpos (stream, &pos) != 0)
- return NULL;
-
- /* Get lock. */
- __libc_lock_lock (lock);
-
- /* Allocate buffer if not yet available. */
- if (buffer == NULL)
- {
- buffer_size = BUFLEN_SPWD;
- buffer = malloc (buffer_size);
- }
-
- while (buffer != NULL
- && (__fgetsgent_r (stream, &resbuf, buffer, buffer_size, &result)
- == ERANGE))
- {
- char *new_buf;
- buffer_size += BUFLEN_SPWD;
- new_buf = realloc (buffer, buffer_size);
- if (new_buf == NULL)
- {
- /* We are out of memory. Free the current buffer so that the
- process gets a chance for a normal termination. */
- save = errno;
- free (buffer);
- __set_errno (save);
- }
- buffer = new_buf;
-
- /* Reset the stream. */
- if (fsetpos (stream, &pos) != 0)
- buffer = NULL;
- }
-
- if (buffer == NULL)
- result = NULL;
-
- /* Release lock. Preserve error value. */
- save = errno;
- __libc_lock_unlock (lock);
- __set_errno (save);
-
- return result;
-}
diff --git a/gshadow/fgetsgent_r.c b/gshadow/fgetsgent_r.c
deleted file mode 100644
index f1d0650333..0000000000
--- a/gshadow/fgetsgent_r.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <ctype.h>
-#include <errno.h>
-#include <gshadow.h>
-#include <stdio.h>
-
-/* Define a line parsing function using the common code
- used in the nss_files module. */
-
-#define STRUCTURE sgrp
-#define ENTNAME sgent
-#define EXTERN_PARSER 1
-struct sgent_data {};
-
-#include <nss/nss_files/files-parse.c>
-
-
-/* Read one shadow entry from the given stream. */
-int
-__fgetsgent_r (FILE *stream, struct sgrp *resbuf, char *buffer, size_t buflen,
- struct sgrp **result)
-{
- char *p;
-
- _IO_flockfile (stream);
- do
- {
- buffer[buflen - 1] = '\xff';
- p = fgets_unlocked (buffer, buflen, stream);
- if (p == NULL && feof_unlocked (stream))
- {
- _IO_funlockfile (stream);
- *result = NULL;
- __set_errno (ENOENT);
- return errno;
- }
- if (p == NULL || buffer[buflen - 1] != '\xff')
- {
- _IO_funlockfile (stream);
- *result = NULL;
- __set_errno (ERANGE);
- return errno;
- }
-
- /* Skip leading blanks. */
- while (isspace (*p))
- ++p;
- } while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
- /* Parse the line. If it is invalid, loop to
- get the next line of the file to parse. */
- ! parse_line (buffer, (void *) resbuf, (void *) buffer, buflen,
- &errno));
-
- _IO_funlockfile (stream);
-
- *result = resbuf;
- return 0;
-}
-weak_alias (__fgetsgent_r, fgetsgent_r)
diff --git a/gshadow/getsgent.c b/gshadow/getsgent.c
deleted file mode 100644
index 6bb16e44f3..0000000000
--- a/gshadow/getsgent.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2009.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <gshadow.h>
-
-
-#define LOOKUP_TYPE struct sgrp
-#define SETFUNC_NAME setsgent
-#define GETFUNC_NAME getsgent
-#define ENDFUNC_NAME endsgent
-#define DATABASE_NAME gshadow
-#define BUFLEN 1024
-
-/* There is no nscd support for the shadow file. */
-#undef USE_NSCD
-
-#include "../nss/getXXent.c"
diff --git a/gshadow/getsgent_r.c b/gshadow/getsgent_r.c
deleted file mode 100644
index 8b4b8bf9bf..0000000000
--- a/gshadow/getsgent_r.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2009.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <gshadow.h>
-
-
-#define LOOKUP_TYPE struct sgrp
-#define SETFUNC_NAME setsgent
-#define GETFUNC_NAME getsgent
-#define ENDFUNC_NAME endsgent
-#define DATABASE_NAME gshadow
-#define BUFLEN 1024
-#define NO_COMPAT_NEEDED 1
-
-/* There is no nscd support for the shadow file. */
-#undef USE_NSCD
-
-#include "../nss/getXXent_r.c"
diff --git a/gshadow/getsgnam.c b/gshadow/getsgnam.c
deleted file mode 100644
index 12adf3fad8..0000000000
--- a/gshadow/getsgnam.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2009.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <gshadow.h>
-
-
-#define LOOKUP_TYPE struct sgrp
-#define FUNCTION_NAME getsgnam
-#define DATABASE_NAME gshadow
-#define ADD_PARAMS const char *name
-#define ADD_VARIABLES name
-#define BUFLEN 1024
-
-/* There is no nscd support for the shadow file. */
-#undef USE_NSCD
-
-#include "../nss/getXXbyYY.c"
diff --git a/gshadow/getsgnam_r.c b/gshadow/getsgnam_r.c
deleted file mode 100644
index 3ed1d5c8c0..0000000000
--- a/gshadow/getsgnam_r.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2009.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <gshadow.h>
-
-
-#define LOOKUP_TYPE struct sgrp
-#define FUNCTION_NAME getsgnam
-#define DATABASE_NAME gshadow
-#define ADD_PARAMS const char *name
-#define ADD_VARIABLES name
-#define BUFLEN 1024
-#define NO_COMPAT_NEEDED 1
-
-/* There is no nscd support for the shadow file. */
-#undef USE_NSCD
-
-#include "../nss/getXXbyYY_r.c"
diff --git a/gshadow/gshadow.h b/gshadow/gshadow.h
deleted file mode 100644
index 70ab83ddbd..0000000000
--- a/gshadow/gshadow.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Declaration of types and functions for shadow group suite. */
-
-#ifndef _GSHADOW_H
-#define _GSHADOW_H 1
-
-#include <features.h>
-#include <paths.h>
-#include <bits/types/FILE.h>
-
-#define __need_size_t
-#include <stddef.h>
-
-/* Path to the user database files. */
-#define GSHADOW _PATH_GSHADOW
-
-
-__BEGIN_DECLS
-
-/* Structure of the group file. */
-struct sgrp
- {
- char *sg_namp; /* Group name. */
- char *sg_passwd; /* Encrypted password. */
- char **sg_adm; /* Group administrator list. */
- char **sg_mem; /* Group member list. */
- };
-
-
-/* Open database for reading.
-
- This function is not part of POSIX and therefore no official
- cancellation point. But due to similarity with an POSIX interface
- or due to the implementation it is a cancellation point and
- therefore not marked with __THROW. */
-extern void setsgent (void);
-
-/* Close database.
-
- This function is not part of POSIX and therefore no official
- cancellation point. But due to similarity with an POSIX interface
- or due to the implementation it is a cancellation point and
- therefore not marked with __THROW. */
-extern void endsgent (void);
-
-/* Get next entry from database, perhaps after opening the file.
-
- This function is not part of POSIX and therefore no official
- cancellation point. But due to similarity with an POSIX interface
- or due to the implementation it is a cancellation point and
- therefore not marked with __THROW. */
-extern struct sgrp *getsgent (void);
-
-/* Get shadow entry matching NAME.
-
- This function is not part of POSIX and therefore no official
- cancellation point. But due to similarity with an POSIX interface
- or due to the implementation it is a cancellation point and
- therefore not marked with __THROW. */
-extern struct sgrp *getsgnam (const char *__name);
-
-/* Read shadow entry from STRING.
-
- This function is not part of POSIX and therefore no official
- cancellation point. But due to similarity with an POSIX interface
- or due to the implementation it is a cancellation point and
- therefore not marked with __THROW. */
-extern struct sgrp *sgetsgent (const char *__string);
-
-/* Read next shadow entry from STREAM.
-
- This function is not part of POSIX and therefore no official
- cancellation point. But due to similarity with an POSIX interface
- or due to the implementation it is a cancellation point and
- therefore not marked with __THROW. */
-extern struct sgrp *fgetsgent (FILE *__stream);
-
-/* Write line containing shadow password entry to stream.
-
- This function is not part of POSIX and therefore no official
- cancellation point. But due to similarity with an POSIX interface
- or due to the implementation it is a cancellation point and
- therefore not marked with __THROW. */
-extern int putsgent (const struct sgrp *__g, FILE *__stream);
-
-
-#ifdef __USE_MISC
-/* Reentrant versions of some of the functions above.
-
- These functions are not part of POSIX and therefore no official
- cancellation point. But due to similarity with an POSIX interface
- or due to the implementation they are cancellation points and
- therefore not marked with __THROW. */
-extern int getsgent_r (struct sgrp *__result_buf, char *__buffer,
- size_t __buflen, struct sgrp **__result);
-
-extern int getsgnam_r (const char *__name, struct sgrp *__result_buf,
- char *__buffer, size_t __buflen,
- struct sgrp **__result);
-
-extern int sgetsgent_r (const char *__string, struct sgrp *__result_buf,
- char *__buffer, size_t __buflen,
- struct sgrp **__result);
-
-extern int fgetsgent_r (FILE *__stream, struct sgrp *__result_buf,
- char *__buffer, size_t __buflen,
- struct sgrp **__result);
-#endif /* misc */
-
-__END_DECLS
-
-#endif /* gshadow.h */
diff --git a/gshadow/putsgent.c b/gshadow/putsgent.c
deleted file mode 100644
index 4e219c478a..0000000000
--- a/gshadow/putsgent.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <gshadow.h>
-#include <nss.h>
-
-#define _S(x) x ? x : ""
-
-
-/* Write an entry to the given stream.
- This must know the format of the group file. */
-int
-putsgent (const struct sgrp *g, FILE *stream)
-{
- int errors = 0;
-
- if (g->sg_namp == NULL || !__nss_valid_field (g->sg_namp)
- || !__nss_valid_field (g->sg_passwd)
- || !__nss_valid_list_field (g->sg_adm)
- || !__nss_valid_list_field (g->sg_mem))
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- _IO_flockfile (stream);
-
- if (fprintf (stream, "%s:%s:", g->sg_namp, _S (g->sg_passwd)) < 0)
- ++errors;
-
- bool first = true;
- char **sp = g->sg_adm;
- if (sp != NULL)
- while (*sp != NULL)
- {
- if (fprintf (stream, "%s%s", first ? "" : ",", *sp++) < 0)
- {
- ++errors;
- break;
- }
- first = false;
- }
- if (putc_unlocked (':', stream) == EOF)
- ++errors;
-
- first = true;
- sp = g->sg_mem;
- if (sp != NULL)
- while (*sp != NULL)
- {
- if (fprintf (stream, "%s%s", first ? "" : ",", *sp++) < 0)
- {
- ++errors;
- break;
- }
- first = false;
- }
- if (putc_unlocked ('\n', stream) == EOF)
- ++errors;
-
- _IO_funlockfile (stream);
-
- return errors ? -1 : 0;
-}
diff --git a/gshadow/sgetsgent.c b/gshadow/sgetsgent.c
deleted file mode 100644
index 8d15bf8293..0000000000
--- a/gshadow/sgetsgent.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <libc-lock.h>
-#include <gshadow.h>
-#include <stdlib.h>
-
-
-/* A reasonable size for a buffer to start with. */
-#define BUFLEN_SPWD 1024
-
-/* We need to protect the dynamic buffer handling. */
-__libc_lock_define_initialized (static, lock);
-
-/* Read one shadow entry from the given stream. */
-struct sgrp *
-sgetsgent (const char *string)
-{
- static char *buffer;
- static size_t buffer_size;
- static struct sgrp resbuf;
- struct sgrp *result;
- int save;
-
- /* Get lock. */
- __libc_lock_lock (lock);
-
- /* Allocate buffer if not yet available. */
- if (buffer == NULL)
- {
- buffer_size = BUFLEN_SPWD;
- buffer = malloc (buffer_size);
- }
-
- while (buffer != NULL
- && __sgetsgent_r (string, &resbuf, buffer, buffer_size, &result) != 0
- && errno == ERANGE)
- {
- char *new_buf;
- buffer_size += BUFLEN_SPWD;
- new_buf = realloc (buffer, buffer_size);
- if (new_buf == NULL)
- {
- /* We are out of memory. Free the current buffer so that the
- process gets a chance for a normal termination. */
- save = errno;
- free (buffer);
- __set_errno (save);
- }
- buffer = new_buf;
- }
-
- if (buffer == NULL)
- result = NULL;
-
- /* Release lock. Preserve error value. */
- save = errno;
- __libc_lock_unlock (lock);
- __set_errno (save);
-
- return result;
-}
diff --git a/gshadow/sgetsgent_r.c b/gshadow/sgetsgent_r.c
deleted file mode 100644
index b76b7a551a..0000000000
--- a/gshadow/sgetsgent_r.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <ctype.h>
-#include <errno.h>
-#include <gshadow.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Define a line parsing function using the common code
- used in the nss_files module. */
-
-#define STRUCTURE sgrp
-#define ENTNAME sgent
-struct sgent_data {};
-
-
-#define TRAILING_LIST_MEMBER sg_mem
-#define TRAILING_LIST_SEPARATOR_P(c) ((c) == ',')
-#include <nss/nss_files/files-parse.c>
-LINE_PARSER
-(,
- STRING_FIELD (result->sg_namp, ISCOLON, 0);
- if (line[0] == '\0'
- && (result->sg_namp[0] == '+' || result->sg_namp[0] == '-'))
- {
- result->sg_passwd = NULL;
- result->sg_adm = NULL;
- result->sg_mem = NULL;
- }
- else
- {
- STRING_FIELD (result->sg_passwd, ISCOLON, 0);
- STRING_LIST (result->sg_adm, ':');
- }
- )
-
-
-/* Read one shadow entry from the given stream. */
-int
-__sgetsgent_r (const char *string, struct sgrp *resbuf, char *buffer,
- size_t buflen, struct sgrp **result)
-{
- char *sp;
- if (string < buffer || string >= buffer + buflen)
- {
- buffer[buflen - 1] = '\0';
- sp = strncpy (buffer, string, buflen);
- if (buffer[buflen - 1] != '\0')
- return ERANGE;
- }
- else
- sp = (char *) string;
-
- int parse_result = parse_line (sp, resbuf, (void *) buffer, buflen, &errno);
- *result = parse_result > 0 ? resbuf : NULL;
-
- return *result == NULL ? errno : 0;
-}
-weak_alias (__sgetsgent_r, sgetsgent_r)
diff --git a/gshadow/tst-gshadow.c b/gshadow/tst-gshadow.c
deleted file mode 100644
index 8b469b723d..0000000000
--- a/gshadow/tst-gshadow.c
+++ /dev/null
@@ -1,141 +0,0 @@
-#include <gshadow.h>
-#include <stdio.h>
-#include <string.h>
-
-
-static const struct sgrp data[] =
- {
- { (char *) "one", (char *) "pwdone",
- (char *[]) { (char *) "admoneone", (char *) "admonetwo",
- (char *) "admonethree", NULL },
- (char *[]) { (char *) "memoneone", (char *) "memonetwo",
- (char *) "memonethree", NULL } },
- { (char *) "two", (char *) "pwdtwo",
- (char *[]) { (char *) "admtwoone", (char *) "admtwotwo", NULL },
- (char *[]) { (char *) "memtwoone", (char *) "memtwotwo",
- (char *) "memtwothree", NULL } },
- { (char *) "three", (char *) "pwdthree",
- (char *[]) { (char *) "admthreeone", (char *) "admthreetwo", NULL },
- (char *[]) { (char *) "memthreeone", (char *) "memthreetwo", NULL } },
- { (char *) "four", (char *) "pwdfour",
- (char *[]) { (char *) "admfourone", (char *) "admfourtwo", NULL },
- (char *[]) { NULL } },
- { (char *) "five", (char *) "pwdfive",
- (char *[]) { NULL },
- (char *[]) { (char *) "memfiveone", (char *) "memfivetwo", NULL } },
- };
-#define ndata (sizeof (data) / sizeof (data[0]))
-
-
-static int
-do_test (void)
-{
- FILE *fp = tmpfile ();
- if (fp == NULL)
- {
- puts ("cannot open temporary file");
- return 1;
- }
-
- for (size_t i = 0; i < ndata; ++i)
- if (putsgent (&data[i], fp) != 0)
- {
- printf ("putsgent call %zu failed\n", i + 1);
- return 1;
- }
-
- rewind (fp);
-
- int result = 0;
- int seen = -1;
- struct sgrp *g;
- while ((g = fgetsgent (fp)) != NULL)
- {
- ++seen;
- if (strcmp (g->sg_namp, data[seen].sg_namp) != 0)
- {
- printf ("sg_namp of entry %d does not match: %s vs %s\n",
- seen + 1, g->sg_namp, data[seen].sg_namp);
- result = 1;
- }
- if (strcmp (g->sg_passwd, data[seen].sg_passwd) != 0)
- {
- printf ("sg_passwd of entry %d does not match: %s vs %s\n",
- seen + 1, g->sg_passwd, data[seen].sg_passwd);
- result = 1;
- }
- if (g->sg_adm == NULL)
- {
- printf ("sg_adm of entry %d is NULL\n", seen + 1);
- result = 1;
- }
- else
- {
- int i = 1;
- char **sp1 = g->sg_adm;
- char **sp2 = data[seen].sg_adm;
- while (*sp1 != NULL && *sp2 != NULL)
- {
- if (strcmp (*sp1, *sp2) != 0)
- {
- printf ("sg_adm[%d] of entry %d does not match: %s vs %s\n",
- i, seen + 1, *sp1, *sp2);
- result = 1;
- }
- ++sp1;
- ++sp2;
- ++i;
- }
- if (*sp1 == NULL && *sp2 != NULL)
- {
- printf ("sg_adm of entry %d has too few entries\n", seen + 1);
- result = 1;
- }
- else if (*sp1 != NULL && *sp2 == NULL)
- {
- printf ("sg_adm of entry %d has too many entries\n", seen + 1);
- result = 1;
- }
- }
- if (g->sg_mem == NULL)
- {
- printf ("sg_mem of entry %d is NULL\n", seen + 1);
- result = 1;
- }
- else
- {
- int i = 1;
- char **sp1 = g->sg_mem;
- char **sp2 = data[seen].sg_mem;
- while (*sp1 != NULL && *sp2 != NULL)
- {
- if (strcmp (*sp1, *sp2) != 0)
- {
- printf ("sg_mem[%d] of entry %d does not match: %s vs %s\n",
- i, seen + 1, *sp1, *sp2);
- result = 1;
- }
- ++sp1;
- ++sp2;
- ++i;
- }
- if (*sp1 == NULL && *sp2 != NULL)
- {
- printf ("sg_mem of entry %d has too few entries\n", seen + 1);
- result = 1;
- }
- else if (*sp1 != NULL && *sp2 == NULL)
- {
- printf ("sg_mem of entry %d has too many entries\n", seen + 1);
- result = 1;
- }
- }
- }
-
- fclose (fp);
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/gshadow/tst-putsgent.c b/gshadow/tst-putsgent.c
deleted file mode 100644
index 218d458779..0000000000
--- a/gshadow/tst-putsgent.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/* Test for processing of invalid gshadow entries. [BZ #18724]
- Copyright (C) 2015-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <gshadow.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-static bool errors;
-
-static void
-check (struct sgrp e, const char *expected)
-{
- char *buf;
- size_t buf_size;
- FILE *f = open_memstream (&buf, &buf_size);
-
- if (f == NULL)
- {
- printf ("open_memstream: %m\n");
- errors = true;
- return;
- }
-
- int ret = putsgent (&e, f);
-
- if (expected == NULL)
- {
- if (ret == -1)
- {
- if (errno != EINVAL)
- {
- printf ("putsgent: unexpected error code: %m\n");
- errors = true;
- }
- }
- else
- {
- printf ("putsgent: unexpected success (\"%s\")\n", e.sg_namp);
- errors = true;
- }
- }
- else
- {
- /* Expect success. */
- size_t expected_length = strlen (expected);
- if (ret == 0)
- {
- long written = ftell (f);
-
- if (written <= 0 || fflush (f) < 0)
- {
- printf ("stream error: %m\n");
- errors = true;
- }
- else if (buf[written - 1] != '\n')
- {
- printf ("FAILED: \"%s\" without newline\n", expected);
- errors = true;
- }
- else if (strncmp (buf, expected, written - 1) != 0
- || written - 1 != expected_length)
- {
- printf ("FAILED: \"%s\" (%ld), expected \"%s\" (%zu)\n",
- buf, written - 1, expected, expected_length);
- errors = true;
- }
- }
- else
- {
- printf ("FAILED: putsgent (expected \"%s\"): %m\n", expected);
- errors = true;
- }
- }
-
- fclose (f);
- free (buf);
-}
-
-static int
-do_test (void)
-{
- check ((struct sgrp) {
- .sg_namp = (char *) "root",
- },
- "root:::");
- check ((struct sgrp) {
- .sg_namp = (char *) "root",
- .sg_passwd = (char *) "password",
- },
- "root:password::");
- check ((struct sgrp) {
- .sg_namp = (char *) "root",
- .sg_passwd = (char *) "password",
- .sg_adm = (char *[]) {(char *) "adm1", (char *) "adm2", NULL},
- .sg_mem = (char *[]) {(char *) "mem1", (char *) "mem2", NULL},
- },
- "root:password:adm1,adm2:mem1,mem2");
-
- /* Bad values. */
- {
- static const char *const bad_strings[] = {
- ":",
- "\n",
- ":bad",
- "\nbad",
- "b:ad",
- "b\nad",
- "bad:",
- "bad\n",
- "b:a\nd",
- ",",
- "\n,",
- ":,",
- ",bad",
- "b,ad",
- "bad,",
- NULL
- };
- for (const char *const *bad = bad_strings; *bad != NULL; ++bad)
- {
- char *members[]
- = {(char *) "first", (char *) *bad, (char *) "last", NULL};
- if (strpbrk (*bad, ":\n") != NULL)
- {
- check ((struct sgrp) {
- .sg_namp = (char *) *bad,
- }, NULL);
- check ((struct sgrp) {
- .sg_namp = (char *) "root",
- .sg_passwd = (char *) *bad,
- }, NULL);
- }
- check ((struct sgrp) {
- .sg_namp = (char *) "root",
- .sg_passwd = (char *) "password",
- .sg_adm = members
- }, NULL);
- check ((struct sgrp) {
- .sg_namp = (char *) "root",
- .sg_passwd = (char *) "password",
- .sg_mem = members
- }, NULL);
- }
- }
-
- return errors;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"