update from main archive 970122 libc-970124
authordrepper <drepper>
Fri, 24 Jan 1997 02:23:43 +0000 (02:23 +0000)
committerdrepper <drepper>
Fri, 24 Jan 1997 02:23:43 +0000 (02:23 +0000)
sysdeps/unix/sysv/linux/alpha/sys/kernel_termios.h
sysdeps/unix/sysv/linux/net/if.h
sysdeps/unix/sysv/linux/net/if_arp.h
sysdeps/unix/sysv/linux/sparc/clone.S
sysdeps/unix/sysv/linux/sys/kernel_termios.h
time/mktime.c
time/time.h
time/tzfile.c

index eebe976..4be759a 100644 (file)
@@ -1,5 +1,10 @@
+#ifndef _SYS_KERNEL_TERMIOS_H
+#define _SYS_KERNEL_TERMIOS_H 1
 /* The following corresponds to the values from the Linux 2.1.20 kernel.  */
 
+/* We need the definition of tcflag_t, cc_t, and speed_t.  */
+#include <termbits.h>
+
 #define __KERNEL_NCCS 19
 
 struct __kernel_termios
@@ -16,3 +21,5 @@ struct __kernel_termios
 
 #define _HAVE_C_ISPEED 1
 #define _HAVE_C_OSPEED 1
+
+#endif /* sys/kernel_termios.h */
index bf26117..db86d20 100644 (file)
@@ -105,7 +105,7 @@ struct ifreq
        struct sockaddr ifru_netmask;
        struct sockaddr ifru_hwaddr;
        short int ifru_flags;
-       int ifru_metric;
+       int ifru_ivalue;
        int ifru_mtu;
        struct ifmap ifru_map;
        char ifru_slave[IFNAMSIZ];      /* Just fits the size */
@@ -120,11 +120,12 @@ struct ifreq
 #define        ifr_broadaddr   ifr_ifru.ifru_broadaddr /* broadcast address    */
 #define        ifr_netmask     ifr_ifru.ifru_netmask   /* interface net mask   */
 #define        ifr_flags       ifr_ifru.ifru_flags     /* flags                */
-#define        ifr_metric      ifr_ifru.ifru_metric    /* metric               */
+#define        ifr_metric      ifr_ifru.ifru_ivalue    /* metric               */
 #define        ifr_mtu         ifr_ifru.ifru_mtu       /* mtu                  */
 #define ifr_map                ifr_ifru.ifru_map       /* device map           */
 #define ifr_slave      ifr_ifru.ifru_slave     /* slave device         */
 #define        ifr_data        ifr_ifru.ifru_data      /* for use by interface */
+#define ifr_ifindex    ifr_ifru.ifru_ivalue    /* interface index      */
 
 
 /* Structure used in SIOCGIFCONF request.  Used to retrieve interface
index ae0e799..cf48f10 100644 (file)
 
 __BEGIN_DECLS
 
+/* Some internals from deep down in the kernel.  */
+#define MAX_ADDR_LEN   7
+
+
 /* This structure defines an ethernet arp header.  */
 
 /* ARP protocol opcodes. */
index 9e1ba81..64735e9 100644 (file)
@@ -1,6 +1,5 @@
 /* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
-   Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx)
-   Based on code written for the Intel by Richard Henderson (rth@tamu.edu).
+   Contributed by Richard Henderson (rth@tamu.edu).
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public License as
index 9534976..629508e 100644 (file)
@@ -1,5 +1,10 @@
+#ifndef _SYS_KERNEL_TERMIOS_H
+#define _SYS_KERNEL_TERMIOS_H 1
 /* The following corresponds to the values from the Linux 2.1.20 kernel.  */
 
+/* We need the definition of tcflag_t, cc_t, and speed_t.  */
+#include <termbits.h>
+
 #define __KERNEL_NCCS 19
 
 struct __kernel_termios
@@ -11,3 +16,5 @@ struct __kernel_termios
     cc_t c_line;               /* line discipline */
     cc_t c_cc[__KERNEL_NCCS];  /* control characters */
   };
+
+#endif /* sys/kernel_termios.h */
index 223872f..fd242b1 100644 (file)
@@ -85,9 +85,6 @@
   ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
 #endif
 
-/* Prototype for the internal function to get information based on TZ.  */
-extern void __tzset_internal __P ((int always));
-
 /* How many days come before each month (0-12).  */
 const unsigned short int __mon_yday[2][13] =
   {
@@ -164,8 +161,10 @@ mktime (tp)
      struct tm *tp;
 {
 #ifdef _LIBC
-  /* Update internal database according to current TZ setting.  */
-  __tzset_internal (1);
+  /* POSIX.1 8.1.1 requires that whenever mktime() is called, the
+     time zone names contained in the external variable `tzname' shall
+     be set as if the tzset() function had been called.  */
+  __tzset ();
 #endif
 
   return __mktime_internal (tp, localtime_r, &localtime_offset);
index d12236f..681b600 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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
@@ -171,7 +171,7 @@ extern struct tm *gmtime __P ((__const time_t *__timer));
    of *TIMER in the local timezone.  */
 extern struct tm *localtime __P ((__const time_t *__timer));
 
-#ifdef __USE_REENTRANT
+#if defined __USE_POSIX || defined __USE_REENTRANT
 /* Return the `struct tm' representation of *TIMER in UTC,
    using *TP to store the result.  */
 extern struct tm *__gmtime_r __P ((__const time_t *__timer,
@@ -185,7 +185,7 @@ extern struct tm *__localtime_r __P ((__const time_t *__timer,
                                      struct tm *__tp));
 extern struct tm *localtime_r __P ((__const time_t *__timer,
                                    struct tm *__tp));
-#endif /* reentrant */
+#endif /* POSIX or reentrant */
 
 /* Compute the `struct tm' representation of *T,
    offset OFFSET seconds east of UTC,
@@ -201,7 +201,7 @@ extern char *asctime __P ((__const struct tm *__tp));
 /* Equivalent to `asctime (localtime (timer))'.  */
 extern char *ctime __P ((__const time_t *__timer));
 
-#ifdef __USE_REENTRANT
+#if defined __USE_POSIX || defined __USE_REENTRANT
 /* Reentrant versions of the above functions.  */
 
 /* Return in BUF a string of the form "Day Mon dd hh:mm:ss yyyy\n"
@@ -211,7 +211,7 @@ extern char *asctime_r __P ((__const struct tm *__tp, char *__buf));
 
 /* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'.  */
 extern char *ctime_r __P ((__const time_t *__timer, char *__buf));
-#endif /* reentrant */
+#endif /* POSIX or reentrant */
 
 
 /* Defined in localtime.c.  */
index 761ddc9..ed7b093 100644 (file)
@@ -21,6 +21,7 @@
 #include <time.h>
 #include <string.h>
 #include <limits.h>
+#include <unistd.h>
 
 #define        NOID
 #include <tzfile.h>
@@ -79,6 +80,7 @@ decode (const void *ptr)
 void
 __tzfile_read (const char *file)
 {
+  static const char default_tzdir[] = TZDIR;
   size_t num_isstd, num_isgmt;
   register FILE *f;
   struct tzhead tzhead;
@@ -111,9 +113,19 @@ __tzfile_read (const char *file)
     /* User specified the empty string; use UTC explicitly.  */
     file = "Universal";
 
+  /* We must not allow to read an arbitrary file in a setuid program.
+     So we fail for any file which is not in the directory hierachy
+     starting at TZDIR.  */
+  if (__libc_enable_secure
+      && ((*file == '/'
+          && memcmp (file, default_tzdir, sizeof (default_tzdir) - 1) != 0)
+         || strstr (file, "../") != NULL))
+    /* This test a certainly a bit too restrictive but it should catch all
+       critical case.  */
+    return;
+
   if (*file != '/')
     {
-      static const char default_tzdir[] = TZDIR;
       const char *tzdir;
       unsigned int len, tzdir_len;
       char *new;