glibc_post_upgrade: Remove process restart logic
The sshd restart looks potentially useful, but it has not run for a long time because the file /etc/rc.d/init.d/sshd does not exit anymore, so it appears unnecessary after all.
This commit is contained in:
parent
cc5db6cdfd
commit
a071c6801c
@ -32,10 +32,10 @@ index 2a432d8beebcd207..368dcae477fff2ae 100644
|
|||||||
-D'SLIBDIR="$(slibdir)"'
|
-D'SLIBDIR="$(slibdir)"'
|
||||||
diff --git a/elf/glibc_post_upgrade.c b/elf/glibc_post_upgrade.c
|
diff --git a/elf/glibc_post_upgrade.c b/elf/glibc_post_upgrade.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000..3c9839ae523d2cc7
|
index 0000000000000000..19b59f70e2308032
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/elf/glibc_post_upgrade.c
|
+++ b/elf/glibc_post_upgrade.c
|
||||||
@@ -0,0 +1,322 @@
|
@@ -0,0 +1,229 @@
|
||||||
+#include <sys/types.h>
|
+#include <sys/types.h>
|
||||||
+#include <sys/wait.h>
|
+#include <sys/wait.h>
|
||||||
+#include <stdio.h>
|
+#include <stdio.h>
|
||||||
@ -46,8 +46,6 @@ index 0000000000000000..3c9839ae523d2cc7
|
|||||||
+#include <stddef.h>
|
+#include <stddef.h>
|
||||||
+#include <fcntl.h>
|
+#include <fcntl.h>
|
||||||
+#include <string.h>
|
+#include <string.h>
|
||||||
+#include <sys/stat.h>
|
|
||||||
+#include <elf.h>
|
|
||||||
+
|
+
|
||||||
+#define LD_SO_CONF "/etc/ld.so.conf"
|
+#define LD_SO_CONF "/etc/ld.so.conf"
|
||||||
+#define ICONVCONFIG "/usr/sbin/iconvconfig"
|
+#define ICONVCONFIG "/usr/sbin/iconvconfig"
|
||||||
@ -63,12 +61,10 @@ index 0000000000000000..3c9839ae523d2cc7
|
|||||||
+__attribute__((noinline)) static void says (const char *str);
|
+__attribute__((noinline)) static void says (const char *str);
|
||||||
+__attribute__((noinline)) static void sayn (long num);
|
+__attribute__((noinline)) static void sayn (long num);
|
||||||
+__attribute__((noinline)) static void message (char *const path[]);
|
+__attribute__((noinline)) static void message (char *const path[]);
|
||||||
+__attribute__((noinline)) static int check_elf (const char *name);
|
|
||||||
+
|
+
|
||||||
+int
|
+int
|
||||||
+main (void)
|
+main (void)
|
||||||
+{
|
+{
|
||||||
+ struct stat statbuf;
|
|
||||||
+ char initpath[256];
|
+ char initpath[256];
|
||||||
+
|
+
|
||||||
+ char buffer[4096];
|
+ char buffer[4096];
|
||||||
@ -180,50 +176,6 @@ index 0000000000000000..3c9839ae523d2cc7
|
|||||||
+ (char *) iconv_dir);
|
+ (char *) iconv_dir);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ /* Check if telinit is available and either SysVInit fifo,
|
|
||||||
+ or upstart telinit. */
|
|
||||||
+ if (access ("/sbin/telinit", X_OK)
|
|
||||||
+ || ((!!access ("/dev/initctl", F_OK))
|
|
||||||
+ ^ !access ("/sbin/initctl", X_OK)))
|
|
||||||
+ _exit (0);
|
|
||||||
+
|
|
||||||
+ /* Check if we are not inside of some chroot, because we'd just
|
|
||||||
+ timeout and leave /etc/initrunlvl.
|
|
||||||
+
|
|
||||||
+ On more modern systems this test is not sufficient to detect
|
|
||||||
+ if we're in a chroot. */
|
|
||||||
+ if (readlink ("/proc/1/exe", initpath, 256) <= 0 ||
|
|
||||||
+ readlink ("/proc/1/root", initpath, 256) <= 0)
|
|
||||||
+ _exit (0);
|
|
||||||
+
|
|
||||||
+ /* Here's another well known way to detect chroot, at least on an
|
|
||||||
+ ext and xfs filesystems and assuming nothing mounted on the chroot's
|
|
||||||
+ root. */
|
|
||||||
+ if (stat ("/", &statbuf) != 0
|
|
||||||
+ || (statbuf.st_ino != 2
|
|
||||||
+ && statbuf.st_ino != 128))
|
|
||||||
+ _exit (0);
|
|
||||||
+
|
|
||||||
+ if (check_elf ("/proc/1/exe"))
|
|
||||||
+ verbose_exec (116,
|
|
||||||
+ (char *) "/sbin/telinit",
|
|
||||||
+ (char *) "/sbin/telinit",
|
|
||||||
+ (char *) "u");
|
|
||||||
+
|
|
||||||
+ /* Check if we can safely condrestart sshd. */
|
|
||||||
+ if (access ("/sbin/service", X_OK) == 0
|
|
||||||
+ && access ("/usr/sbin/sshd", X_OK) == 0
|
|
||||||
+ && access ("/etc/rc.d/init.d/sshd", X_OK) == 0
|
|
||||||
+ && access ("/bin/bash", X_OK) == 0)
|
|
||||||
+ {
|
|
||||||
+ if (check_elf ("/usr/sbin/sshd"))
|
|
||||||
+ verbose_exec (-121,
|
|
||||||
+ (char *) "/sbin/service",
|
|
||||||
+ (char *) "/sbin/service",
|
|
||||||
+ (char *) "sshd",
|
|
||||||
+ (char *) "condrestart");
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ _exit(0);
|
+ _exit(0);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
@ -313,48 +265,3 @@ index 0000000000000000..3c9839ae523d2cc7
|
|||||||
+ says ("/usr/sbin/glibc_post_upgrade: While trying to execute ");
|
+ says ("/usr/sbin/glibc_post_upgrade: While trying to execute ");
|
||||||
+ says (path[0]);
|
+ says (path[0]);
|
||||||
+}
|
+}
|
||||||
+
|
|
||||||
+static int
|
|
||||||
+check_elf (const char *name)
|
|
||||||
+{
|
|
||||||
+ /* Play safe, if we can't open or read, assume it might be
|
|
||||||
+ ELF for the current arch. */
|
|
||||||
+ int ret = 1;
|
|
||||||
+ int fd = open (name, O_RDONLY);
|
|
||||||
+ if (fd >= 0)
|
|
||||||
+ {
|
|
||||||
+ Elf32_Ehdr ehdr;
|
|
||||||
+ if (read (fd, &ehdr, offsetof (Elf32_Ehdr, e_version))
|
|
||||||
+ == offsetof (Elf32_Ehdr, e_version))
|
|
||||||
+ {
|
|
||||||
+ ret = 0;
|
|
||||||
+ if (ehdr.e_ident[EI_CLASS]
|
|
||||||
+ == (sizeof (long) == 8 ? ELFCLASS64 : ELFCLASS32))
|
|
||||||
+ {
|
|
||||||
+#if defined __i386__
|
|
||||||
+ ret = ehdr.e_machine == EM_386;
|
|
||||||
+#elif defined __x86_64__
|
|
||||||
+ ret = ehdr.e_machine == EM_X86_64;
|
|
||||||
+#elif defined __powerpc64__
|
|
||||||
+ ret = ehdr.e_machine == EM_PPC64;
|
|
||||||
+#elif defined __powerpc__
|
|
||||||
+ ret = ehdr.e_machine == EM_PPC;
|
|
||||||
+#elif defined __s390__ || defined __s390x__
|
|
||||||
+ ret = ehdr.e_machine == EM_S390;
|
|
||||||
+#elif defined __x86_64__
|
|
||||||
+ ret = ehdr.e_machine == EM_X86_64;
|
|
||||||
+#elif defined __sparc__
|
|
||||||
+ if (sizeof (long) == 8)
|
|
||||||
+ ret = ehdr.e_machine == EM_SPARCV9;
|
|
||||||
+ else
|
|
||||||
+ ret = (ehdr.e_machine == EM_SPARC
|
|
||||||
+ || ehdr.e_machine == EM_SPARC32PLUS);
|
|
||||||
+#else
|
|
||||||
+ ret = 1;
|
|
||||||
+#endif
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ close (fd);
|
|
||||||
+ }
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user