Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[BZ #9955]
2009-04-23  Ulrich Drepper  <drepper@redhat.com>
	[BZ #9955]
	* gshadow/Makefile: New file.
	* gshadow/Versions: New file.
	* gshadow/fgetsgent.c: New file.
	* gshadow/fgetsgent_r.c: New file.
	* gshadow/getsgent.c: New file.
	* gshadow/getsgent_r.c: New file.
	* gshadow/getsgnam.c: New file.
	* gshadow/getsgnam_r.c: New file.
	* gshadow/gshadow.h: New file.
	* gshadow/putsgent.c: New file.
	* gshadow/sgetsgent.c: New file.
	* gshadow/sgetsgent_r.c: New file.
	* gshadow/tst-gshadow.c: New file.
	* include/gshadow.h: New file.
	* Makeconfig (all-subdirs): Add gshadow.
	* Makefile (installed-headers): Add gshadow/gshadow.h.
	* nss/Makefile (databases): Add sgrp.
	* nss/Versions: Add gshadow functions as private exports.
	* nss/nsswitch.conf: Add gshadow entry.
	* nss/sgrp-lookup.c: New file.
	* nss/nss_files/files-parse.c: Add STRING_LIST macro.  Rewrite
	parse_list to handle STRING_LIST and TRAILING_LIST_PARSER.
	* nss/nss_files/files-sgrp.c: New file.
	* sysdeps/generic/paths.h: Add _PATH_GSHADOW.
	* sysdeps/unix/sysv/linux/paths.h: Likewise.
  • Loading branch information
Ulrich Drepper committed Apr 23, 2009
1 parent 5497de8 commit 829fea4
Show file tree
Hide file tree
Showing 25 changed files with 1,018 additions and 25 deletions.
29 changes: 29 additions & 0 deletions ChangeLog
@@ -1,3 +1,32 @@
2009-04-23 Ulrich Drepper <drepper@redhat.com>

[BZ #9955]
* gshadow/Makefile: New file.
* gshadow/Versions: New file.
* gshadow/fgetsgent.c: New file.
* gshadow/fgetsgent_r.c: New file.
* gshadow/getsgent.c: New file.
* gshadow/getsgent_r.c: New file.
* gshadow/getsgnam.c: New file.
* gshadow/getsgnam_r.c: New file.
* gshadow/gshadow.h: New file.
* gshadow/putsgent.c: New file.
* gshadow/sgetsgent.c: New file.
* gshadow/sgetsgent_r.c: New file.
* gshadow/tst-gshadow.c: New file.
* include/gshadow.h: New file.
* Makeconfig (all-subdirs): Add gshadow.
* Makefile (installed-headers): Add gshadow/gshadow.h.
* nss/Makefile (databases): Add sgrp.
* nss/Versions: Add gshadow functions as private exports.
* nss/nsswitch.conf: Add gshadow entry.
* nss/sgrp-lookup.c: New file.
* nss/nss_files/files-parse.c: Add STRING_LIST macro. Rewrite
parse_list to handle STRING_LIST and TRAILING_LIST_PARSER.
* nss/nss_files/files-sgrp.c: New file.
* sysdeps/generic/paths.h: Add _PATH_GSHADOW.
* sysdeps/unix/sysv/linux/paths.h: Likewise.

2009-04-22 Ulrich Drepper <drepper@redhat.com>

* stdio-common/printf.h: Add missing const to register_printf_modifier.
Expand Down
2 changes: 1 addition & 1 deletion Makeconfig
Expand Up @@ -918,7 +918,7 @@ endif
all-subdirs = csu assert ctype locale intl catgets math setjmp signal \
stdlib stdio-common libio malloc string wcsmbs time dirent \
grp pwd posix io termios resource misc socket sysvipc gmon \
gnulib iconv iconvdata wctype manual shadow po argp \
gnulib iconv iconvdata wctype manual shadow gshadow po argp \
crypt nss localedata timezone rt conform debug \
$(add-on-subdirs) $(dlfcn) $(binfmt-subdir)

Expand Down
2 changes: 1 addition & 1 deletion Makefile
Expand Up @@ -271,7 +271,7 @@ installed-headers = argp/argp.h assert/assert.h catgets/nl_types.h \
crypt/crypt.h ctype/ctype.h debug/execinfo.h \
dirent/dirent.h dlfcn/dlfcn.h elf/elf.h elf/link.h \
gmon/sys/gmon.h gmon/sys/gmon_out.h gmon/sys/profil.h \
grp/grp.h iconv/iconv.h iconv/gconv.h \
grp/grp.h gshadow/gshadow.h iconv/iconv.h iconv/gconv.h \
$(wildcard inet/netinet/*.h) \
$(wildcard inet/arpa/*.h inet/protocols/*.h) \
inet/aliases.h inet/ifaddrs.h inet/netinet/ip6.h \
Expand Down
38 changes: 38 additions & 0 deletions gshadow/Makefile
@@ -0,0 +1,38 @@
# Copyright (C) 2009 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, write to the Free
# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
# 02111-1307 USA.

#
# Makefile for gshadow.
#
subdir := gshadow

headers = gshadow.h
routines = getsgent getsgnam sgetsgent fgetsgent putsgent \
getsgent_r getsgnam_r sgetsgent_r fgetsgent_r

tests = tst-gshadow

CFLAGS-getsgent_r.c = -fexceptions
CFLAGS-getsgent.c = -fexceptions
CFLAGS-fgetsgent.c = -fexceptions
CFLAGS-fgetsgent_r.c = -fexceptions -D_IO_MTSAFE_IO
CFLAGS-putsgent.c = -fexceptions -D_IO_MTSAFE_IO
CFLAGS-getsgnam.c = -fexceptions
CFLAGS-getsgnam_r.c = -fexceptions

include ../Rules
21 changes: 21 additions & 0 deletions gshadow/Versions
@@ -0,0 +1,21 @@
libc {
GLIBC_2.10 {
# e*
endsgent;

# f*
fgetsgent; fgetsgent_r;

# g*
getsgent; getsgent_r; getsgnam; getsgnam_r; getsgent_r; getsgnam_r;

# p*
putsgent;

# s*
setsgent;

# s*
sgetsgent; sgetsgent_r;
}
}
88 changes: 88 additions & 0 deletions gshadow/fgetsgent.c
@@ -0,0 +1,88 @@
/* Copyright (C) 2009 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, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */

#include <errno.h>
#include <bits/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;
}
76 changes: 76 additions & 0 deletions gshadow/fgetsgent_r.c
@@ -0,0 +1,76 @@
/* Copyright (C) 2009 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, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */

#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)
30 changes: 30 additions & 0 deletions gshadow/getsgent.c
@@ -0,0 +1,30 @@
/* Copyright (C) 2009 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, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */

#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

#include "../nss/getXXent.c"
30 changes: 30 additions & 0 deletions gshadow/getsgent_r.c
@@ -0,0 +1,30 @@
/* Copyright (C) 2009 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, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */

#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

#include "../nss/getXXent_r.c"
30 changes: 30 additions & 0 deletions gshadow/getsgnam.c
@@ -0,0 +1,30 @@
/* Copyright (C) 2009 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, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */

#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

#include "../nss/getXXbyYY.c"

0 comments on commit 829fea4

Please sign in to comment.