diff --git a/Makeconfig b/Makeconfig
index 9ff6a902e9..ac7fa3dbb3 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -1353,7 +1353,7 @@ endif
all-subdirs = csu assert ctype locale intl catgets math setjmp signal \
stdlib stdio-common libio malloc string wcsmbs time dirent \
pwd posix io termios resource misc socket sysvipc gmon \
- gnulib iconv iconvdata wctype manual shadow gshadow po argp \
+ gnulib iconv iconvdata wctype manual shadow po argp \
localedata timezone rt conform debug mathvec support \
dlfcn elf
diff --git a/gshadow/Makefile b/gshadow/Makefile
deleted file mode 100644
index a95524593a..0000000000
--- a/gshadow/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright (C) 2009-2023 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
-# .
-
-#
-# 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 tst-fgetsgent_r tst-sgetsgent
-
-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/include/gshadow.h b/include/gshadow.h
index 1cefcfc641..95f8f950a9 100644
--- a/include/gshadow.h
+++ b/include/gshadow.h
@@ -1,5 +1,5 @@
#ifndef _GSHADOW_H
-#include
+#include
# ifndef _ISOMAC
diff --git a/nss/Makefile b/nss/Makefile
index baf7d9d0ab..5256b90f8b 100644
--- a/nss/Makefile
+++ b/nss/Makefile
@@ -24,6 +24,7 @@ include ../Makeconfig
headers := \
grp.h \
+ gshadow.h \
nss.h \
# headers
@@ -79,6 +80,29 @@ CFLAGS-initgroups.c += -fexceptions
CFLAGS-putgrent.c += -fexceptions $(libio-mtsafe)
endif
+# gshadow routines:
+routines += \
+ fgetsgent \
+ fgetsgent_r \
+ getsgent \
+ getsgent_r \
+ getsgnam \
+ getsgnam_r \
+ putsgent \
+ sgetsgent \
+ sgetsgent_r \
+ # routines
+
+ifeq ($(have-thread-library),yes)
+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
+endif
+
# These are the databases that go through nss dispatch.
# Caution: if you add a database here, you must add its real name
# in databases.def, too.
@@ -118,6 +142,8 @@ tests := \
test-digits-dots \
test-netdb \
testgrp \
+ tst-fgetsgent_r \
+ tst-gshadow \
tst-nss-getpwent \
tst-nss-hash \
tst-nss-test1 \
@@ -126,6 +152,8 @@ tests := \
tst-nss-test5 \
tst-nss-test_errno \
tst-putgrent \
+ tst-putsgent \
+ tst-sgetsgent \
# tests
xtests = bug-erange
diff --git a/nss/Versions b/nss/Versions
index 5401829911..6204ac0af1 100644
--- a/nss/Versions
+++ b/nss/Versions
@@ -37,6 +37,25 @@ libc {
# g*
getgrouplist;
}
+ GLIBC_2.10 {
+ # e*
+ endsgent;
+
+ # f*
+ fgetsgent; fgetsgent_r;
+
+ # g*
+ getsgent; getsgent_r; getsgnam; getsgnam_r;
+
+ # p*
+ putsgent;
+
+ # s*
+ setsgent;
+
+ # s*
+ sgetsgent; sgetsgent_r;
+ }
GLIBC_2.27 {
}
GLIBC_PRIVATE {
diff --git a/gshadow/fgetsgent.c b/nss/fgetsgent.c
similarity index 100%
rename from gshadow/fgetsgent.c
rename to nss/fgetsgent.c
diff --git a/gshadow/fgetsgent_r.c b/nss/fgetsgent_r.c
similarity index 100%
rename from gshadow/fgetsgent_r.c
rename to nss/fgetsgent_r.c
diff --git a/gshadow/getsgent.c b/nss/getsgent.c
similarity index 100%
rename from gshadow/getsgent.c
rename to nss/getsgent.c
diff --git a/gshadow/getsgent_r.c b/nss/getsgent_r.c
similarity index 100%
rename from gshadow/getsgent_r.c
rename to nss/getsgent_r.c
diff --git a/gshadow/getsgnam.c b/nss/getsgnam.c
similarity index 100%
rename from gshadow/getsgnam.c
rename to nss/getsgnam.c
diff --git a/gshadow/getsgnam_r.c b/nss/getsgnam_r.c
similarity index 100%
rename from gshadow/getsgnam_r.c
rename to nss/getsgnam_r.c
diff --git a/gshadow/gshadow.h b/nss/gshadow.h
similarity index 100%
rename from gshadow/gshadow.h
rename to nss/gshadow.h
diff --git a/gshadow/putsgent.c b/nss/putsgent.c
similarity index 100%
rename from gshadow/putsgent.c
rename to nss/putsgent.c
diff --git a/gshadow/sgetsgent.c b/nss/sgetsgent.c
similarity index 100%
rename from gshadow/sgetsgent.c
rename to nss/sgetsgent.c
diff --git a/gshadow/sgetsgent_r.c b/nss/sgetsgent_r.c
similarity index 100%
rename from gshadow/sgetsgent_r.c
rename to nss/sgetsgent_r.c
diff --git a/gshadow/tst-fgetsgent_r.c b/nss/tst-fgetsgent_r.c
similarity index 100%
rename from gshadow/tst-fgetsgent_r.c
rename to nss/tst-fgetsgent_r.c
diff --git a/gshadow/tst-gshadow.c b/nss/tst-gshadow.c
similarity index 100%
rename from gshadow/tst-gshadow.c
rename to nss/tst-gshadow.c
diff --git a/gshadow/tst-putsgent.c b/nss/tst-putsgent.c
similarity index 100%
rename from gshadow/tst-putsgent.c
rename to nss/tst-putsgent.c
diff --git a/gshadow/tst-sgetsgent.c b/nss/tst-sgetsgent.c
similarity index 100%
rename from gshadow/tst-sgetsgent.c
rename to nss/tst-sgetsgent.c