diff options
Diffstat (limited to 'gshadow')
-rw-r--r-- | gshadow/Makefile | 39 | ||||
-rw-r--r-- | gshadow/Versions | 21 | ||||
-rw-r--r-- | gshadow/fgetsgent.c | 87 | ||||
-rw-r--r-- | gshadow/fgetsgent_r.c | 75 | ||||
-rw-r--r-- | gshadow/getsgent.c | 32 | ||||
-rw-r--r-- | gshadow/getsgent_r.c | 33 | ||||
-rw-r--r-- | gshadow/getsgnam.c | 32 | ||||
-rw-r--r-- | gshadow/getsgnam_r.c | 33 | ||||
-rw-r--r-- | gshadow/gshadow.h | 128 | ||||
-rw-r--r-- | gshadow/putsgent.c | 81 | ||||
-rw-r--r-- | gshadow/sgetsgent.c | 77 | ||||
-rw-r--r-- | gshadow/sgetsgent_r.c | 74 | ||||
-rw-r--r-- | gshadow/tst-gshadow.c | 141 | ||||
-rw-r--r-- | gshadow/tst-putsgent.c | 168 |
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" |