Automatic import for version 2.13

This commit is contained in:
Rosa 2012-02-01 14:42:15 +04:00
commit f4e418c74a
47 changed files with 5521 additions and 0 deletions

8
.abf.yml Normal file
View file

@ -0,0 +1,8 @@
---
sources:
crypt_blowfish-1.0.2.tar.gz: e83e798528e72695e610e2a6419b57272d00fa0b
glibc-2.13.tar.xz: 38e7d510b41a2c36eb392c79eb5c80e0ec35a7f2
glibc-2.13.tar.xz.sig: c7953c5c032a3394af6711c21ee8972500f5667d
glibc-manpages.tar.bz2: ca54bfb832b703c8e35170fcc1c1f5470b45ff0f
glibc-powerpc-cpu-addon-v0.03.tar.bz2: a88f5e1e7647f131984cb831d54ea885b820001e
glibc-redhat.tar.bz2: 4ac897d3bb2367d00bfed2c45a00e4a8a532e9fc

View file

@ -0,0 +1,43 @@
From 03f3e2574dc5f8cd7a1fad83edee7f1d9f6b45cb Mon Sep 17 00:00:00 2001
From: Felipe Contreras <felipe.contreras@gmail.com>
Date: Mon, 11 Apr 2011 13:41:20 +0300
Subject: [PATCH] x86_64: fix for new memcpy behavior
On 2.14 memcpy@GLIBC_2.2.5 is an alias to memmove, only
memcpy@GLIBC_2.13 uses the new behavior.
This backports the old behavior for versions before than 2.14.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
sysdeps/x86_64/multiarch/memcpy-ssse3-back.S | 1 +
sysdeps/x86_64/multiarch/memcpy-ssse3.S | 1 +
2 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/sysdeps/x86_64/multiarch/memcpy-ssse3-back.S b/sysdeps/x86_64/multiarch/memcpy-ssse3-back.S
index 48c974e..2867d45 100644
--- a/sysdeps/x86_64/multiarch/memcpy-ssse3-back.S
+++ b/sysdeps/x86_64/multiarch/memcpy-ssse3-back.S
@@ -30,6 +30,7 @@
#ifndef MEMCPY
# define MEMCPY __memcpy_ssse3_back
# define MEMCPY_CHK __memcpy_chk_ssse3_back
+# define USE_AS_MEMMOVE
#endif
#ifndef ALIGN
diff --git a/sysdeps/x86_64/multiarch/memcpy-ssse3.S b/sysdeps/x86_64/multiarch/memcpy-ssse3.S
index 9a878d3..fb60e06 100644
--- a/sysdeps/x86_64/multiarch/memcpy-ssse3.S
+++ b/sysdeps/x86_64/multiarch/memcpy-ssse3.S
@@ -30,6 +30,7 @@
#ifndef MEMCPY
# define MEMCPY __memcpy_ssse3
# define MEMCPY_CHK __memcpy_chk_ssse3
+# define USE_AS_MEMMOVE
#endif
#ifndef ALIGN
--
1.7.5.rc1

766
crypt_freesec.c Normal file
View file

@ -0,0 +1,766 @@
/*
* This version is derived from the original implementation of FreeSec
* (release 1.1) by David Burren. I've reviewed the changes made in
* OpenBSD (as of 2.7) and modified the original code in a similar way
* where applicable. I've also made it reentrant and did a number of
* other changes -- SD.
*/
/*
* FreeSec: libcrypt for NetBSD
*
* Copyright (c) 1994 David Burren
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the author nor the names of other contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Owl: Owl/packages/glibc/crypt_freesec.c,v 1.4 2005/11/16 13:08:32 solar Exp $
* $Id: crypt.c,v 1.15 1994/09/13 04:58:49 davidb Exp $
*
* This is an original implementation of the DES and the crypt(3) interfaces
* by David Burren <davidb at werj.com.au>.
*
* An excellent reference on the underlying algorithm (and related
* algorithms) is:
*
* B. Schneier, Applied Cryptography: protocols, algorithms,
* and source code in C, John Wiley & Sons, 1994.
*
* Note that in that book's description of DES the lookups for the initial,
* pbox, and final permutations are inverted (this has been brought to the
* attention of the author). A list of errata for this book has been
* posted to the sci.crypt newsgroup by the author and is available for FTP.
*
* ARCHITECTURE ASSUMPTIONS:
* This code used to have some nasty ones, but I believe these have
* been removed by now. The code isn't very portable and requires a
* 32-bit integer type, though -- SD.
*/
#include <sys/types.h>
#include <string.h>
#ifdef TEST
#include <stdio.h>
#endif
#include "crypt_freesec.h"
#define _PASSWORD_EFMT1 '_'
static u_char IP[64] = {
58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7
};
static u_char key_perm[56] = {
57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18,
10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,
63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,
14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4
};
static u_char key_shifts[16] = {
1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
};
static u_char comp_perm[48] = {
14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,
23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,
41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,
44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32
};
/*
* No E box is used, as it's replaced by some ANDs, shifts, and ORs.
*/
static u_char sbox[8][64] = {
{
14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13
},
{
15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9
},
{
10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12
},
{
7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14
},
{
2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3
},
{
12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13
},
{
4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12
},
{
13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11
}
};
static u_char pbox[32] = {
16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10,
2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25
};
static u_int32_t bits32[32] =
{
0x80000000, 0x40000000, 0x20000000, 0x10000000,
0x08000000, 0x04000000, 0x02000000, 0x01000000,
0x00800000, 0x00400000, 0x00200000, 0x00100000,
0x00080000, 0x00040000, 0x00020000, 0x00010000,
0x00008000, 0x00004000, 0x00002000, 0x00001000,
0x00000800, 0x00000400, 0x00000200, 0x00000100,
0x00000080, 0x00000040, 0x00000020, 0x00000010,
0x00000008, 0x00000004, 0x00000002, 0x00000001
};
static u_char bits8[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
static u_char ascii64[] =
"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
/* 0000000000111111111122222222223333333333444444444455555555556666 */
/* 0123456789012345678901234567890123456789012345678901234567890123 */
static u_char m_sbox[4][4096];
static u_int32_t psbox[4][256];
static u_int32_t ip_maskl[8][256], ip_maskr[8][256];
static u_int32_t fp_maskl[8][256], fp_maskr[8][256];
static u_int32_t key_perm_maskl[8][128], key_perm_maskr[8][128];
static u_int32_t comp_maskl[8][128], comp_maskr[8][128];
static inline int
ascii_to_bin(char ch)
{
if (ch > 'z')
return(0);
if (ch >= 'a')
return(ch - 'a' + 38);
if (ch > 'Z')
return(0);
if (ch >= 'A')
return(ch - 'A' + 12);
if (ch > '9')
return(0);
if (ch >= '.')
return(ch - '.');
return(0);
}
void
_crypt_extended_init(void)
{
int i, j, b, k, inbit, obit;
u_int32_t *p, *il, *ir, *fl, *fr;
u_int32_t *bits28, *bits24;
u_char inv_key_perm[64];
u_char u_key_perm[56];
u_char inv_comp_perm[56];
u_char init_perm[64], final_perm[64];
u_char u_sbox[8][64];
u_char un_pbox[32];
bits24 = (bits28 = bits32 + 4) + 4;
/*
* Invert the S-boxes, reordering the input bits.
*/
for (i = 0; i < 8; i++)
for (j = 0; j < 64; j++) {
b = (j & 0x20) | ((j & 1) << 4) | ((j >> 1) & 0xf);
u_sbox[i][j] = sbox[i][b];
}
/*
* Convert the inverted S-boxes into 4 arrays of 8 bits.
* Each will handle 12 bits of the S-box input.
*/
for (b = 0; b < 4; b++)
for (i = 0; i < 64; i++)
for (j = 0; j < 64; j++)
m_sbox[b][(i << 6) | j] =
(u_sbox[(b << 1)][i] << 4) |
u_sbox[(b << 1) + 1][j];
/*
* Set up the initial & final permutations into a useful form, and
* initialise the inverted key permutation.
*/
for (i = 0; i < 64; i++) {
init_perm[final_perm[i] = IP[i] - 1] = i;
inv_key_perm[i] = 255;
}
/*
* Invert the key permutation and initialise the inverted key
* compression permutation.
*/
for (i = 0; i < 56; i++) {
u_key_perm[i] = key_perm[i] - 1;
inv_key_perm[key_perm[i] - 1] = i;
inv_comp_perm[i] = 255;
}
/*
* Invert the key compression permutation.
*/
for (i = 0; i < 48; i++) {
inv_comp_perm[comp_perm[i] - 1] = i;
}
/*
* Set up the OR-mask arrays for the initial and final permutations,
* and for the key initial and compression permutations.
*/
for (k = 0; k < 8; k++) {
for (i = 0; i < 256; i++) {
*(il = &ip_maskl[k][i]) = 0;
*(ir = &ip_maskr[k][i]) = 0;
*(fl = &fp_maskl[k][i]) = 0;
*(fr = &fp_maskr[k][i]) = 0;
for (j = 0; j < 8; j++) {
inbit = 8 * k + j;
if (i & bits8[j]) {
if ((obit = init_perm[inbit]) < 32)
*il |= bits32[obit];
else
*ir |= bits32[obit-32];
if ((obit = final_perm[inbit]) < 32)
*fl |= bits32[obit];
else
*fr |= bits32[obit - 32];
}
}
}
for (i = 0; i < 128; i++) {
*(il = &key_perm_maskl[k][i]) = 0;
*(ir = &key_perm_maskr[k][i]) = 0;
for (j = 0; j < 7; j++) {
inbit = 8 * k + j;
if (i & bits8[j + 1]) {
if ((obit = inv_key_perm[inbit]) == 255)
continue;
if (obit < 28)
*il |= bits28[obit];
else
*ir |= bits28[obit - 28];
}
}
*(il = &comp_maskl[k][i]) = 0;
*(ir = &comp_maskr[k][i]) = 0;
for (j = 0; j < 7; j++) {
inbit = 7 * k + j;
if (i & bits8[j + 1]) {
if ((obit=inv_comp_perm[inbit]) == 255)
continue;
if (obit < 24)
*il |= bits24[obit];
else
*ir |= bits24[obit - 24];
}
}
}
}
/*
* Invert the P-box permutation, and convert into OR-masks for
* handling the output of the S-box arrays setup above.
*/
for (i = 0; i < 32; i++)
un_pbox[pbox[i] - 1] = i;
for (b = 0; b < 4; b++)
for (i = 0; i < 256; i++) {
*(p = &psbox[b][i]) = 0;
for (j = 0; j < 8; j++) {
if (i & bits8[j])
*p |= bits32[un_pbox[8 * b + j]];
}
}
}
static void
des_init_local(struct _crypt_extended_data *data)
{
data->old_rawkey0 = data->old_rawkey1 = 0;
data->saltbits = 0;
data->old_salt = 0;
data->initialized = 1;
}
static void
setup_salt(u_int32_t salt, struct _crypt_extended_data *data)
{
u_int32_t obit, saltbit, saltbits;
int i;
if (salt == data->old_salt)
return;
data->old_salt = salt;
saltbits = 0;
saltbit = 1;
obit = 0x800000;
for (i = 0; i < 24; i++) {
if (salt & saltbit)
saltbits |= obit;
saltbit <<= 1;
obit >>= 1;
}
data->saltbits = saltbits;
}
static int
des_setkey(const char *key, struct _crypt_extended_data *data)
{
u_int32_t k0, k1, rawkey0, rawkey1;
int shifts, round;
rawkey0 =
(u_int32_t)(u_char)key[3] |
((u_int32_t)(u_char)key[2] << 8) |
((u_int32_t)(u_char)key[1] << 16) |
((u_int32_t)(u_char)key[0] << 24);
rawkey1 =
(u_int32_t)(u_char)key[7] |
((u_int32_t)(u_char)key[6] << 8) |
((u_int32_t)(u_char)key[5] << 16) |
((u_int32_t)(u_char)key[4] << 24);
if ((rawkey0 | rawkey1)
&& rawkey0 == data->old_rawkey0
&& rawkey1 == data->old_rawkey1) {
/*
* Already setup for this key.
* This optimisation fails on a zero key (which is weak and
* has bad parity anyway) in order to simplify the starting
* conditions.
*/
return(0);
}
data->old_rawkey0 = rawkey0;
data->old_rawkey1 = rawkey1;
/*
* Do key permutation and split into two 28-bit subkeys.
*/
k0 = key_perm_maskl[0][rawkey0 >> 25]
| key_perm_maskl[1][(rawkey0 >> 17) & 0x7f]
| key_perm_maskl[2][(rawkey0 >> 9) & 0x7f]
| key_perm_maskl[3][(rawkey0 >> 1) & 0x7f]
| key_perm_maskl[4][rawkey1 >> 25]
| key_perm_maskl[5][(rawkey1 >> 17) & 0x7f]
| key_perm_maskl[6][(rawkey1 >> 9) & 0x7f]
| key_perm_maskl[7][(rawkey1 >> 1) & 0x7f];
k1 = key_perm_maskr[0][rawkey0 >> 25]
| key_perm_maskr[1][(rawkey0 >> 17) & 0x7f]
| key_perm_maskr[2][(rawkey0 >> 9) & 0x7f]
| key_perm_maskr[3][(rawkey0 >> 1) & 0x7f]
| key_perm_maskr[4][rawkey1 >> 25]
| key_perm_maskr[5][(rawkey1 >> 17) & 0x7f]
| key_perm_maskr[6][(rawkey1 >> 9) & 0x7f]
| key_perm_maskr[7][(rawkey1 >> 1) & 0x7f];
/*
* Rotate subkeys and do compression permutation.
*/
shifts = 0;
for (round = 0; round < 16; round++) {
u_int32_t t0, t1;
shifts += key_shifts[round];
t0 = (k0 << shifts) | (k0 >> (28 - shifts));
t1 = (k1 << shifts) | (k1 >> (28 - shifts));
data->de_keysl[15 - round] =
data->en_keysl[round] = comp_maskl[0][(t0 >> 21) & 0x7f]
| comp_maskl[1][(t0 >> 14) & 0x7f]
| comp_maskl[2][(t0 >> 7) & 0x7f]
| comp_maskl[3][t0 & 0x7f]
| comp_maskl[4][(t1 >> 21) & 0x7f]
| comp_maskl[5][(t1 >> 14) & 0x7f]
| comp_maskl[6][(t1 >> 7) & 0x7f]
| comp_maskl[7][t1 & 0x7f];
data->de_keysr[15 - round] =
data->en_keysr[round] = comp_maskr[0][(t0 >> 21) & 0x7f]
| comp_maskr[1][(t0 >> 14) & 0x7f]
| comp_maskr[2][(t0 >> 7) & 0x7f]
| comp_maskr[3][t0 & 0x7f]
| comp_maskr[4][(t1 >> 21) & 0x7f]
| comp_maskr[5][(t1 >> 14) & 0x7f]
| comp_maskr[6][(t1 >> 7) & 0x7f]
| comp_maskr[7][t1 & 0x7f];
}
return(0);
}
static int
do_des(u_int32_t l_in, u_int32_t r_in, u_int32_t *l_out, u_int32_t *r_out,
int count, struct _crypt_extended_data *data)
{
/*
* l_in, r_in, l_out, and r_out are in pseudo-"big-endian" format.
*/
u_int32_t l, r, *kl, *kr, *kl1, *kr1;
u_int32_t f, r48l, r48r, saltbits;
int round;
if (count == 0) {
return(1);
} else if (count > 0) {
/*
* Encrypting
*/
kl1 = data->en_keysl;
kr1 = data->en_keysr;
} else {
/*
* Decrypting
*/
count = -count;
kl1 = data->de_keysl;
kr1 = data->de_keysr;
}
/*
* Do initial permutation (IP).
*/
l = ip_maskl[0][l_in >> 24]
| ip_maskl[1][(l_in >> 16) & 0xff]
| ip_maskl[2][(l_in >> 8) & 0xff]
| ip_maskl[3][l_in & 0xff]
| ip_maskl[4][r_in >> 24]
| ip_maskl[5][(r_in >> 16) & 0xff]
| ip_maskl[6][(r_in >> 8) & 0xff]
| ip_maskl[7][r_in & 0xff];
r = ip_maskr[0][l_in >> 24]
| ip_maskr[1][(l_in >> 16) & 0xff]
| ip_maskr[2][(l_in >> 8) & 0xff]
| ip_maskr[3][l_in & 0xff]
| ip_maskr[4][r_in >> 24]
| ip_maskr[5][(r_in >> 16) & 0xff]
| ip_maskr[6][(r_in >> 8) & 0xff]
| ip_maskr[7][r_in & 0xff];
saltbits = data->saltbits;
while (count--) {
/*
* Do each round.
*/
kl = kl1;
kr = kr1;
round = 16;
while (round--) {
/*
* Expand R to 48 bits (simulate the E-box).
*/
r48l = ((r & 0x00000001) << 23)
| ((r & 0xf8000000) >> 9)
| ((r & 0x1f800000) >> 11)
| ((r & 0x01f80000) >> 13)
| ((r & 0x001f8000) >> 15);
r48r = ((r & 0x0001f800) << 7)
| ((r & 0x00001f80) << 5)
| ((r & 0x000001f8) << 3)
| ((r & 0x0000001f) << 1)
| ((r & 0x80000000) >> 31);
/*
* Do salting for crypt() and friends, and
* XOR with the permuted key.
*/
f = (r48l ^ r48r) & saltbits;
r48l ^= f ^ *kl++;
r48r ^= f ^ *kr++;
/*
* Do sbox lookups (which shrink it back to 32 bits)
* and do the pbox permutation at the same time.
*/
f = psbox[0][m_sbox[0][r48l >> 12]]
| psbox[1][m_sbox[1][r48l & 0xfff]]
| psbox[2][m_sbox[2][r48r >> 12]]
| psbox[3][m_sbox[3][r48r & 0xfff]];
/*
* Now that we've permuted things, complete f().
*/
f ^= l;
l = r;
r = f;
}
r = l;
l = f;
}
/*
* Do final permutation (inverse of IP).
*/
*l_out = fp_maskl[0][l >> 24]
| fp_maskl[1][(l >> 16) & 0xff]
| fp_maskl[2][(l >> 8) & 0xff]
| fp_maskl[3][l & 0xff]
| fp_maskl[4][r >> 24]
| fp_maskl[5][(r >> 16) & 0xff]
| fp_maskl[6][(r >> 8) & 0xff]
| fp_maskl[7][r & 0xff];
*r_out = fp_maskr[0][l >> 24]
| fp_maskr[1][(l >> 16) & 0xff]
| fp_maskr[2][(l >> 8) & 0xff]
| fp_maskr[3][l & 0xff]
| fp_maskr[4][r >> 24]
| fp_maskr[5][(r >> 16) & 0xff]
| fp_maskr[6][(r >> 8) & 0xff]
| fp_maskr[7][r & 0xff];
return(0);
}
static int
des_cipher(const char *in, char *out, u_int32_t salt, int count,
struct _crypt_extended_data *data)
{
u_int32_t l_out, r_out, rawl, rawr;
int retval;
setup_salt(salt, data);
rawl =
(u_int32_t)(u_char)in[3] |
((u_int32_t)(u_char)in[2] << 8) |
((u_int32_t)(u_char)in[1] << 16) |
((u_int32_t)(u_char)in[0] << 24);
rawr =
(u_int32_t)(u_char)in[7] |
((u_int32_t)(u_char)in[6] << 8) |
((u_int32_t)(u_char)in[5] << 16) |
((u_int32_t)(u_char)in[4] << 24);
retval = do_des(rawl, rawr, &l_out, &r_out, count, data);
out[0] = l_out >> 24;
out[1] = l_out >> 16;
out[2] = l_out >> 8;
out[3] = l_out;
out[4] = r_out >> 24;
out[5] = r_out >> 16;
out[6] = r_out >> 8;
out[7] = r_out;
return(retval);
}
char *
_crypt_extended_r(const char *key, const char *setting,
struct _crypt_extended_data *data)
{
int i;
u_int32_t count, salt, l, r0, r1, keybuf[2];
u_char *p, *q;
if (!data->initialized)
des_init_local(data);
/*
* Copy the key, shifting each character up by one bit
* and padding with zeros.
*/
q = (u_char *) keybuf;
while (q - (u_char *) keybuf < sizeof(keybuf)) {
if ((*q++ = *key << 1))
key++;
}
if (des_setkey((u_char *) keybuf, data))
return(NULL);
if (*setting == _PASSWORD_EFMT1) {
/*
* "new"-style:
* setting - underscore, 4 bytes of count, 4 bytes of salt
* key - unlimited characters
*/
for (i = 1, count = 0; i < 5; i++)
count |= ascii_to_bin(setting[i]) << (i - 1) * 6;
for (i = 5, salt = 0; i < 9; i++)
salt |= ascii_to_bin(setting[i]) << (i - 5) * 6;
while (*key) {
/*
* Encrypt the key with itself.
*/
if (des_cipher((u_char *) keybuf, (u_char *) keybuf,
0, 1, data))
return(NULL);
/*
* And XOR with the next 8 characters of the key.
*/
q = (u_char *) keybuf;
while (q - (u_char *) keybuf < sizeof(keybuf) && *key)
*q++ ^= *key++ << 1;
if (des_setkey((u_char *) keybuf, data))
return(NULL);
}
strncpy(data->output, setting, 9);
/*
* Double check that we weren't given a short setting.
* If we were, the above code will probably have created
* wierd values for count and salt, but we don't really care.
* Just make sure the output string doesn't have an extra
* NUL in it.
*/
data->output[9] = '\0';
p = (u_char *) data->output + strlen(data->output);
} else {
/*
* "old"-style:
* setting - 2 bytes of salt
* key - up to 8 characters
*/
count = 25;
salt = (ascii_to_bin(setting[1]) << 6)
| ascii_to_bin(setting[0]);
data->output[0] = setting[0];
/*
* If the encrypted password that the salt was extracted from
* is only 1 character long, the salt will be corrupted. We
* need to ensure that the output string doesn't have an extra
* NUL in it!
*/
data->output[1] = setting[1] ? setting[1] : data->output[0];
p = (u_char *) data->output + 2;
}
setup_salt(salt, data);
/*
* Do it.
*/
if (do_des(0, 0, &r0, &r1, count, data))
return(NULL);
/*
* Now encode the result...
*/
l = (r0 >> 8);
*p++ = ascii64[(l >> 18) & 0x3f];
*p++ = ascii64[(l >> 12) & 0x3f];
*p++ = ascii64[(l >> 6) & 0x3f];
*p++ = ascii64[l & 0x3f];
l = (r0 << 16) | ((r1 >> 16) & 0xffff);
*p++ = ascii64[(l >> 18) & 0x3f];
*p++ = ascii64[(l >> 12) & 0x3f];
*p++ = ascii64[(l >> 6) & 0x3f];
*p++ = ascii64[l & 0x3f];
l = r1 << 2;
*p++ = ascii64[(l >> 12) & 0x3f];
*p++ = ascii64[(l >> 6) & 0x3f];
*p++ = ascii64[l & 0x3f];
*p = 0;
return(data->output);
}
#ifdef TEST
static char *
_crypt_extended(const char *key, const char *setting)
{
static int initialized = 0;
static struct _crypt_extended_data data;
if (!initialized) {
_crypt_extended_init();
initialized = 1;
data.initialized = 0;
}
return _crypt_extended_r(key, setting, &data);
}
#define crypt _crypt_extended
static struct {
char *hash;
char *pw;
} tests[] = {
{"_J9..CCCCXBrJUJV154M", "U*U*U*U*"},
{"_J9..CCCCXUhOBTXzaiE", "U*U***U"},
{"_J9..CCCC4gQ.mB/PffM", "U*U***U*"},
{"_J9..XXXXvlzQGqpPPdk", "*U*U*U*U"},
{"_J9..XXXXsqM/YSSP..Y", "*U*U*U*U*"},
{"_J9..XXXXVL7qJCnku0I", "*U*U*U*U*U*U*U*U"},
{"_J9..XXXXAj8cFbP5scI", "*U*U*U*U*U*U*U*U*"},
{"_J9..SDizh.vll5VED9g", "ab1234567"},
{"_J9..SDizRjWQ/zePPHc", "cr1234567"},
{"_J9..SDizxmRI1GjnQuE", "zxyDPWgydbQjgq"},
{"_K9..SaltNrQgIYUAeoY", "726 even"},
{"_J9..SDSD5YGyRCr4W4c", ""},
{NULL}
};
int main(void)
{
int i;
for (i = 0; tests[i].hash; i++)
if (strcmp(crypt(tests[i].pw, tests[i].hash), tests[i].hash)) {
puts("FAILED");
return 1;
}
puts("PASSED");
return 0;
}
#endif

24
crypt_freesec.h Normal file
View file

@ -0,0 +1,24 @@
#ifndef _CRYPT_FREESEC_H
#define _CRYPT_FREESEC_H
struct _crypt_extended_data {
int initialized;
u_int32_t saltbits;
u_int32_t old_salt;
u_int32_t en_keysl[16], en_keysr[16];
u_int32_t de_keysl[16], de_keysr[16];
u_int32_t old_rawkey0, old_rawkey1;
char output[21];
};
/*
* _crypt_extended_init() must be called explicitly before first use of
* _crypt_extended_r().
*/
void _crypt_extended_init(void);
char *_crypt_extended_r(const char *key, const char *setting,
struct _crypt_extended_data *data);
#endif

View file

@ -0,0 +1,17 @@
2004-01-23 Gwenole Beauchesne <gbeauchesne@mandrakesoft.com>
* Makeconfig (%.v.i): Make sure to define __$(base-machine)__ for
biarch asm headers.
diff -p -up glibc-2.10.1/Makeconfig.orig glibc-2.10.1/Makeconfig
--- glibc-2.10.1/Makeconfig.orig 2009-05-26 23:40:06.000000000 -0300
+++ glibc-2.10.1/Makeconfig 2009-05-26 23:41:42.000000000 -0300
@@ -795,7 +795,7 @@ ifeq (yes, $(build-shared))
%.v.i: $(common-objpfx)config.h $(..)Makeconfig
sed '/^[ ]*%/!s/#.*$$//;/^[ ]*$$/d;s/^[ ]*%/#/' \
$(filter-out FORCE %.h $(..)Makeconfig,$^) \
- | $(CC) -E -undef $(CPPFLAGS) -x assembler-with-cpp - \
+ | $(CC) -E -undef $(CPPFLAGS) -D__$(base-machine)__ -x assembler-with-cpp - \
> $@T
mv -f $@T $@
%.v: %.v.i

View file

@ -0,0 +1,57 @@
diff -p -up glibc-2.10.1/crypt/Makefile.orig glibc-2.10.1/crypt/Makefile
--- glibc-2.10.1/crypt/Makefile.orig 2009-04-07 15:34:04.000000000 -0300
+++ glibc-2.10.1/crypt/Makefile 2009-05-27 00:02:34.000000000 -0300
@@ -21,13 +21,13 @@
#
subdir := crypt
-headers := crypt.h
+headers := crypt.h gnu-crypt.h ow-crypt.h
extra-libs := libcrypt
extra-libs-others := $(extra-libs)
libcrypt-routines := crypt-entry md5-crypt sha256-crypt sha512-crypt crypt \
- crypt_util
+ crypt_util crypt_blowfish x86 crypt_gensalt wrapper
tests := cert md5c-test sha256c-test sha512c-test
diff -p -up glibc-2.10.1/crypt/Versions.orig glibc-2.10.1/crypt/Versions
--- glibc-2.10.1/crypt/Versions.orig 2000-03-03 21:47:30.000000000 -0300
+++ glibc-2.10.1/crypt/Versions 2009-05-26 23:58:49.000000000 -0300
@@ -1,5 +1,6 @@
libcrypt {
GLIBC_2.0 {
crypt; crypt_r; encrypt; encrypt_r; fcrypt; setkey; setkey_r;
+ crypt_rn; crypt_ra; crypt_gensalt; crypt_gensalt_rn; crypt_gensalt_ra;
}
}
diff -p -up glibc-2.10.1/crypt/crypt-entry.c.orig glibc-2.10.1/crypt/crypt-entry.c
--- glibc-2.10.1/crypt/crypt-entry.c.orig 2007-09-19 17:37:15.000000000 -0300
+++ glibc-2.10.1/crypt/crypt-entry.c 2009-05-26 23:58:49.000000000 -0300
@@ -82,7 +82,7 @@ extern struct crypt_data _ufc_foobar;
*/
char *
-__crypt_r (key, salt, data)
+__des_crypt_r (key, salt, data)
const char *key;
const char *salt;
struct crypt_data * __restrict data;
@@ -137,6 +137,7 @@ __crypt_r (key, salt, data)
_ufc_output_conversion_r (res[0], res[1], salt, data);
return data->crypt_3_buf;
}
+#if 0
weak_alias (__crypt_r, crypt_r)
char *
@@ -160,6 +161,7 @@ crypt (key, salt)
return __crypt_r (key, salt, &_ufc_foobar);
}
+#endif
/*

View file

@ -0,0 +1,127 @@
diff -p -up glibc-2.10.1/crypt/Makefile.orig glibc-2.10.1/crypt/Makefile
--- glibc-2.10.1/crypt/Makefile.orig 2009-05-27 00:19:48.000000000 -0300
+++ glibc-2.10.1/crypt/Makefile 2009-05-27 00:21:27.000000000 -0300
@@ -27,7 +27,8 @@ extra-libs := libcrypt
extra-libs-others := $(extra-libs)
libcrypt-routines := crypt-entry md5-crypt sha256-crypt sha512-crypt crypt \
- crypt_util crypt_blowfish x86 crypt_gensalt wrapper
+ crypt_util crypt_blowfish x86 crypt_gensalt crypt_freesec \
+ wrapper
tests := cert md5c-test sha256c-test sha512c-test
diff -p -up glibc-2.10.1/crypt/wrapper.c.orig glibc-2.10.1/crypt/wrapper.c
--- glibc-2.10.1/crypt/wrapper.c.orig 2006-03-05 11:28:17.000000000 -0300
+++ glibc-2.10.1/crypt/wrapper.c 2009-05-27 00:20:03.000000000 -0300
@@ -105,32 +105,72 @@ static char *_crypt_retval_magic(char *r
* its initialization code. Thus, it is important that our multiple hashing
* algorithms either don't conflict with each other in their use of the
* data area or reset the initialized field themselves whenever required.
- * Currently, the hashing algorithms simply have no conflicts: the first
- * field of struct crypt_data is the 128-byte large DES key schedule which
- * __des_crypt_r() calculates each time it is called while the two other
- * hashing algorithms use less than 128 bytes of the data area.
+ * Currently, three of the four supported hashing algorithms simply have no
+ * conflicts: the first field of struct crypt_data is the 128-byte large
+ * DES key schedule which __des_crypt_r() calculates each time it is called
+ * while two other hashing algorithms use less than 128 bytes of the data
+ * area.
*/
+#include "crypt_freesec.h"
+
+#include <signal.h>
+#include <bits/libc-lock.h>
+
+__libc_lock_define_initialized (static, _crypt_extended_init_lock)
+
+static void _crypt_extended_init_r(void)
+{
+ static volatile sig_atomic_t initialized = 0;
+
+ if (initialized) return;
+
+ __libc_lock_lock(_crypt_extended_init_lock);
+ if (!initialized) {
+ _crypt_extended_init();
+ initialized = 1;
+ }
+ __libc_lock_unlock(_crypt_extended_init_lock);
+}
+
char *__crypt_rn(__const char *key, __const char *setting,
void *data, int size)
{
+ char *retval;
+
if (setting[0] == '$' && setting[1] == '2')
return _crypt_blowfish_rn(key, setting, (char *)data, size);
if (setting[0] == '$' && setting[1] == '1')
return __md5_crypt_r(key, setting, (char *)data, size);
- if (setting[0] == '$' || setting[0] == '_') {
- __set_errno(EINVAL);
- return NULL;
+ if (setting[0] == '$') goto out_einval;
+ if (setting[0] == '_') {
+ if (size < sizeof(struct _crypt_extended_data)) goto out_erange;
+ _crypt_extended_init_r();
+ ((struct _crypt_extended_data *)data)->initialized = 0;
+ if (size >= sizeof(struct crypt_data))
+ ((struct crypt_data *)data)->initialized = 0;
+ retval = _crypt_extended_r(key, setting,
+ (struct _crypt_extended_data *)data);
+ if (!retval) goto out_einval;
+ return retval;
}
if (size >= sizeof(struct crypt_data))
return __des_crypt_r(key, setting, (struct crypt_data *)data);
+
+out_erange:
__set_errno(ERANGE);
return NULL;
+
+out_einval:
+ __set_errno(EINVAL);
+ return NULL;
}
char *__crypt_ra(__const char *key, __const char *setting,
void **data, int *size)
{
+ char *retval;
+
if (setting[0] == '$' && setting[1] == '2') {
if (_crypt_data_alloc(data, size, CRYPT_OUTPUT_SIZE))
return NULL;
@@ -141,13 +181,27 @@ char *__crypt_ra(__const char *key, __co
return NULL;
return __md5_crypt_r(key, setting, (char *)*data, *size);
}
- if (setting[0] == '$' || setting[0] == '_') {
- __set_errno(EINVAL);
- return NULL;
+ if (setting[0] == '$') goto out_einval;
+ if (setting[0] == '_') {
+ if (_crypt_data_alloc(data, size,
+ sizeof(struct _crypt_extended_data)))
+ return NULL;
+ _crypt_extended_init_r();
+ ((struct _crypt_extended_data *)*data)->initialized = 0;
+ if (*size >= sizeof(struct crypt_data))
+ ((struct crypt_data *)*data)->initialized = 0;
+ retval = _crypt_extended_r(key, setting,
+ (struct _crypt_extended_data *)*data);
+ if (!retval) goto out_einval;
+ return retval;
}
if (_crypt_data_alloc(data, size, sizeof(struct crypt_data)))
return NULL;
return __des_crypt_r(key, setting, (struct crypt_data *)*data);
+
+out_einval:
+ __set_errno(EINVAL);
+ return NULL;
}
char *__crypt_r(__const char *key, __const char *setting,

View file

@ -0,0 +1,15 @@
2006-05-16 Gwenole Beauchesne <gbeauchesne@mandriva.com>
* scripts/check-local-headers.sh: Filter out multiarch headers.
diff -p -up glibc-2.10.1/scripts/check-local-headers.sh.orig glibc-2.10.1/scripts/check-local-headers.sh
--- glibc-2.10.1/scripts/check-local-headers.sh.orig 2009-04-02 13:59:53.000000000 -0300
+++ glibc-2.10.1/scripts/check-local-headers.sh 2009-05-26 23:45:32.000000000 -0300
@@ -30,6 +30,7 @@ if fgrep "$includedir" */*.{o,os,oS}.d |
fgrep -v "$includedir/asm" |
fgrep -v "$includedir/linux" |
fgrep -v "$includedir/selinux" |
+fgrep -v "$includedir/multiarch-" |
fgrep -v "$includedir/sys/capability.h" |
fgrep -v "$includedir/gd" |
fgrep -v "$includedir/nss3"; then

View file

@ -0,0 +1,18 @@
localedef --add-to-archive doesn't follow symbolic links, thus if you have any
locale with symlinked files to save disk space, for example:
/usr/share/locale/pt_BR/LC_CTYPE -> ../ISO-8859-1/LC_CTYPE
"localedef --add-to-archive /usr/share/locale/pt_BR" will not work, because
current locarchive.c code doesn't consider symlink case.
diff -p -up glibc-2.11.1/locale/programs/locarchive.c.orig glibc-2.11.1/locale/programs/locarchive.c
--- glibc-2.11.1/locale/programs/locarchive.c.orig 2010-04-08 14:10:46.515770746 -0300
+++ glibc-2.11.1/locale/programs/locarchive.c 2010-04-08 14:11:55.587520585 -0300
@@ -1323,7 +1323,7 @@ add_locales_to_archive (nlist, list, rep
char fullname[fnamelen + 2 * strlen (d->d_name) + 7];
#ifdef _DIRENT_HAVE_D_TYPE
- if (d_type == DT_UNKNOWN)
+ if (d_type == DT_UNKNOWN || d_type == DT_LNK)
#endif
{
strcpy (stpcpy (stpcpy (fullname, fname), "/"),

View file

@ -0,0 +1,44 @@
See https://qa.mandriva.com/show_bug.cgi?id=58834
Patch from bug report, updated for glibc 2.12.1 in Mandriva
diff -p -up glibc-2.12.1/posix/gai.conf.orig glibc-2.12.1/posix/gai.conf
--- glibc-2.12.1/posix/gai.conf.orig 2010-07-27 08:34:39.000000000 -0300
+++ glibc-2.12.1/posix/gai.conf 2010-08-25 11:27:32.302898528 -0300
@@ -56,9 +56,7 @@
#
# scopev4 <mask> <value>
# Add another rule to the RFC 3484 scope table for IPv4 addresses.
-# By default the scope IDs described in section 3.2 in RFC 3484 are
-# used. Changing these defaults should hardly ever be necessary.
-# The defaults are equivalent to:
+# The definitions in RFC 3484 are equivalent to:
#
#scopev4 ::ffff:169.254.0.0/112 2
#scopev4 ::ffff:127.0.0.0/104 2
@@ -69,8 +67,8 @@
#
# For sites which use site-local IPv4 addresses behind NAT there is
# the problem that even if IPv4 addresses are preferred they do not
-# have the same scope and are therefore not sorted first. To change
-# this use only these rules:
+# have the same scope and are therefore not sorted first. Therefore,
+# the following settings are used by default on this system:
#
#scopev4 ::ffff:169.254.0.0/112 2
#scopev4 ::ffff:127.0.0.0/104 2
diff -p -up glibc-2.12.1/sysdeps/posix/getaddrinfo.c.orig glibc-2.12.1/sysdeps/posix/getaddrinfo.c
--- glibc-2.12.1/sysdeps/posix/getaddrinfo.c.orig 2010-07-27 08:34:39.000000000 -0300
+++ glibc-2.12.1/sysdeps/posix/getaddrinfo.c 2010-08-25 11:24:03.960253468 -0300
@@ -1099,10 +1099,12 @@ static const struct scopeentry
/* Link-local addresses: scope 2. */
{ { { 169, 254, 0, 0 } }, htonl_c (0xffff0000), 2 },
{ { { 127, 0, 0, 0 } }, htonl_c (0xff000000), 2 },
+#if 0
/* Site-local addresses: scope 5. */
{ { { 10, 0, 0, 0 } }, htonl_c (0xff000000), 5 },
{ { { 172, 16, 0, 0 } }, htonl_c (0xfff00000), 5 },
{ { { 192, 168, 0, 0 } }, htonl_c (0xffff0000), 5 },
+#endif
/* Default: scope 14. */
{ { { 0, 0, 0, 0 } }, htonl_c (0x00000000), 14 }
};

38
glibc-2.12.1-fhs.patch Normal file
View file

@ -0,0 +1,38 @@
diff -p -up glibc-2.12.1/sysdeps/generic/paths.h.orig glibc-2.12.1/sysdeps/generic/paths.h
--- glibc-2.12.1/sysdeps/generic/paths.h.orig 2010-07-27 08:34:39.000000000 -0300
+++ glibc-2.12.1/sysdeps/generic/paths.h 2010-12-27 11:19:18.515673954 -0200
@@ -62,13 +62,13 @@
#define _PATH_UNIX "/vmunix"
#define _PATH_UTMP "/var/run/utmp"
#define _PATH_UTMP_DB "/var/run/utmp.db"
-#define _PATH_VI "/usr/bin/vi"
+#define _PATH_VI "/bin/vi"
#define _PATH_WTMP "/var/log/wtmp"
/* Provide trailing slash, since mostly used for building pathnames. */
#define _PATH_DEV "/dev/"
#define _PATH_TMP "/tmp/"
-#define _PATH_VARDB "/var/db/"
+#define _PATH_VARDB "/var/lib/misc/"
#define _PATH_VARRUN "/var/run/"
#define _PATH_VARTMP "/var/tmp/"
diff -p -up glibc-2.12.1/sysdeps/unix/sysv/linux/paths.h.orig glibc-2.12.1/sysdeps/unix/sysv/linux/paths.h
--- glibc-2.12.1/sysdeps/unix/sysv/linux/paths.h.orig 2010-07-27 08:34:39.000000000 -0300
+++ glibc-2.12.1/sysdeps/unix/sysv/linux/paths.h 2010-12-27 11:20:43.701245004 -0200
@@ -62,13 +62,13 @@
#define _PATH_TTY "/dev/tty"
#define _PATH_UNIX "/boot/vmlinux"
#define _PATH_UTMP "/var/run/utmp"
-#define _PATH_VI "/usr/bin/vi"
+#define _PATH_VI "/bin/vi"
#define _PATH_WTMP "/var/log/wtmp"
/* Provide trailing slash, since mostly used for building pathnames. */
#define _PATH_DEV "/dev/"
#define _PATH_TMP "/tmp/"
-#define _PATH_VARDB "/var/db/"
+#define _PATH_VARDB "/var/lib/misc/"
#define _PATH_VARRUN "/var/run/"
#define _PATH_VARTMP "/var/tmp/"

View file

@ -0,0 +1,92 @@
From: Andreas Schwab <schwab at redhat dot com>
Subject: [PATCH] Never expand $ORIGIN in privileged programs
Date: Mon, 18 Oct 2010 15:12:09 +0200
Path elements containing $ORIGIN should always be ignored in privileged
programs.
Andreas.
2010-10-18 Andreas Schwab <schwab@redhat.com>
* elf/dl-load.c (is_dst): Remove last parameter.
(_dl_dst_count): Ignore $ORIGIN in privileged programs.
(_dl_dst_substitute): Likewise.
---
elf/dl-load.c | 30 +++++++++++++-----------------
1 files changed, 13 insertions(+), 17 deletions(-)
diff --git a/elf/dl-load.c b/elf/dl-load.c
index a7162eb..776f7e4 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -169,8 +169,7 @@ local_strdup (const char *s)
static size_t
-is_dst (const char *start, const char *name, const char *str,
- int is_path, int secure)
+is_dst (const char *start, const char *name, const char *str, int is_path)
{
size_t len;
bool is_curly = false;
@@ -199,11 +198,6 @@ is_dst (const char *start, const char *name, const char *str,
&& (!is_path || name[len] != ':'))
return 0;
- if (__builtin_expect (secure, 0)
- && ((name[len] != '\0' && (!is_path || name[len] != ':'))
- || (name != start + 1 && (!is_path || name[-2] != ':'))))
- return 0;
-
return len;
}
@@ -218,13 +212,12 @@ _dl_dst_count (const char *name, int is_path)
{
size_t len;
- /* $ORIGIN is not expanded for SUID/GUID programs (except if it
- is $ORIGIN alone) and it must always appear first in path. */
+ /* $ORIGIN is not expanded for SUID/GUID programs. */
++name;
- if ((len = is_dst (start, name, "ORIGIN", is_path,
- INTUSE(__libc_enable_secure))) != 0
- || (len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0
- || (len = is_dst (start, name, "LIB", is_path, 0)) != 0)
+ if (((len = is_dst (start, name, "ORIGIN", is_path)) != 0
+ && !INTUSE(__libc_enable_secure))
+ || (len = is_dst (start, name, "PLATFORM", is_path)) != 0
+ || (len = is_dst (start, name, "LIB", is_path)) != 0)
++cnt;
name = strchr (name + len, '$');
@@ -256,9 +249,12 @@ _dl_dst_substitute (struct link_map *l, const char *name, char *result,
size_t len;
++name;
- if ((len = is_dst (start, name, "ORIGIN", is_path,
- INTUSE(__libc_enable_secure))) != 0)
+ if ((len = is_dst (start, name, "ORIGIN", is_path)) != 0)
{
+ /* Ignore this path element in SUID/SGID programs. */
+ if (INTUSE(__libc_enable_secure))
+ repl = (const char *) -1;
+ else
#ifndef SHARED
if (l == NULL)
repl = _dl_get_origin ();
@@ -266,9 +262,9 @@ _dl_dst_substitute (struct link_map *l, const char *name, char *result,
#endif
repl = l->l_origin;
}
- else if ((len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0)
+ else if ((len = is_dst (start, name, "PLATFORM", is_path)) != 0)
repl = GLRO(dl_platform);
- else if ((len = is_dst (start, name, "LIB", is_path, 0)) != 0)
+ else if ((len = is_dst (start, name, "LIB", is_path)) != 0)
repl = DL_DST_LIB;
if (repl != NULL && repl != (const char *) -1)
--
1.7.2.3

View file

@ -0,0 +1,35 @@
2010-06-13 Aurelien Jarno <aurelien@aurel32.net>
* locale/C-translit.h.in: Add entry for U20A1.
diff --git a/locale/C-translit.h.in b/locale/C-translit.h.in
index ab0b130..5286802 100644
--- a/locale/C-translit.h.in
+++ b/locale/C-translit.h.in
@@ -103,6 +103,7 @@
"\x2061" "" /* <U2061> FUNCTION APPLICATION */
"\x2062" "" /* <U2062> INVISIBLE TIMES */
"\x2063" "" /* <U2063> INVISIBLE SEPARATOR */
+"\x20a1" "CRC" /* <U20A1> COLON SIGN */
"\x20a8" "Rs" /* <U20A8> RUPEE SIGN */
"\x20ac" "EUR" /* <U20AC> EURO SIGN */
"\x2100" "a/c" /* <U2100> ACCOUNT OF */
2010-06-13 Aurelien Jarno <aurelien@aurel32.net>
* locales/translit_neutral: Add entry for U20A1.
diff --git a/localedata/locales/translit_neutral b/localedata/locales/translit_neutral
index 5883d28..5712361 100644
--- a/localedata/locales/translit_neutral
+++ b/localedata/locales/translit_neutral
@@ -128,6 +128,8 @@ include "translit_wide";""
<U2063> ""
% DONG SIGN
<U20AB> "<U0110><U1ED3><U006E><U0067>"
+% COLON SIGN
+<U20A1> "<U0043><U0052><U0043>"
% EURO SIGN
<U20AC> "<U0045><U0055><U0052>"
% TRADE MARK SIGN

View file

@ -0,0 +1,64 @@
Fix a bug in tls initialization which caused __tls_get_addr to return NULL.
We need to postpone all calls to _dl_update_slotinfo until after
_dl_add_to_slotinfo is complete. This is because _dl_update_slotinfo
will modify the generation of the DTV to match that of the new
slot. We cannot allow this to happen until all slots of the generation
have been added.
2010-01-30 Martin von Gagern
References:
http://sources.redhat.com/bugzilla/show_bug.cgi?id=12453
https://github.com/cschwan/sage-on-gentoo/issues/#issue/40
https://bugs.gentoo.org/353224
Index: glibc-2.12.2/elf/dl-open.c
===================================================================
--- glibc-2.12.2.orig/elf/dl-open.c
+++ glibc-2.12.2/elf/dl-open.c
@@ -346,7 +346,7 @@ dl_open_worker (void *a)
/* If the file is not loaded now as a dependency, add the search
list of the newly loaded object to the scope. */
- bool any_tls = false;
+ bool any_tls = false, any_static_tls = false;
for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i)
{
struct link_map *imap = new->l_searchlist.r_list[i];
@@ -426,6 +426,25 @@ dl_open_worker (void *a)
_dl_add_to_slotinfo (imap);
if (imap->l_need_tls_init)
+ any_static_tls = true;
+
+ /* We have to bump the generation counter. */
+ any_tls = true;
+ }
+ }
+
+ /* We need a second pass for static tls data, because _dl_update_slotinfo
+ must not be run while calls to _dl_add_to_slotinfo are still pending. */
+ if (__builtin_expect (any_static_tls, 0))
+ {
+ for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i)
+ {
+ struct link_map *imap = new->l_searchlist.r_list[i];
+ if (__builtin_expect (imap->l_need_tls_init, 0)
+ /* The following two can likely be dropped, but let's be extra
+ safe and copy all the conditions for now. */
+ && ! imap->l_init_called
+ && __builtin_expect (imap->l_tls_blocksize > 0, 0))
{
/* For static TLS we have to allocate the memory here
and now. This includes allocating memory in the DTV.
@@ -449,9 +468,6 @@ cannot load any more object with static
GL(dl_init_static_tls) (imap);
assert (imap->l_need_tls_init == 0);
}
-
- /* We have to bump the generation counter. */
- any_tls = true;
}
}

View file

@ -0,0 +1,30 @@
Index: sysdeps/unix/sysv/linux/i386/sysdep.h
===================================================================
--- sysdeps/unix/sysv/linux/i386/sysdep.h (revision 1469)
+++ sysdeps/unix/sysv/linux/i386/sysdep.h (working copy)
@@ -29,6 +29,10 @@
#include <dl-sysdep.h>
#include <tls.h>
+#if defined __i686 && defined __ASSEMBLER__
+#undef __i686
+#define __i686 __i686
+#endif
/* For Linux we can use the system call table in the header file
/usr/include/asm/unistd.h
Index: nptl/sysdeps/pthread/pt-initfini.c
===================================================================
--- nptl/sysdeps/pthread/pt-initfini.c (revision 1469)
+++ nptl/sysdeps/pthread/pt-initfini.c (working copy)
@@ -45,6 +45,11 @@
/* Embed an #include to pull in the alignment and .end directives. */
asm ("\n#include \"defs.h\"");
+asm ("\n#if defined __i686 && defined __ASSEMBLER__");
+asm ("\n#undef __i686");
+asm ("\n#define __i686 __i686");
+asm ("\n#endif");
+
/* The initial common code ends here. */
asm ("\n/*@HEADER_ENDS*/");

32
glibc-2.13-prelink.patch Normal file
View file

@ -0,0 +1,32 @@
--- glibc-2.13/ChangeLog.orig 2011-04-08 05:49:27.201205590 -0300
+++ glibc-2.13/ChangeLog 2011-04-08 05:50:13.815394267 -0300
@@ -0,0 +1,5 @@
+2010-09-28 Andreas Schwab <schwab@redhat.com>
+
+ * elf/rtld.c (dl_main): Move setting of GLRO(dl_init_all_dirs)
+ before performing relro protection.
+
--- glibc-2.13/elf/rtld.c.orig 2011-04-08 05:47:56.573838933 -0300
+++ glibc-2.13/elf/rtld.c 2011-04-08 05:48:53.401068817 -0300
@@ -2187,6 +2187,10 @@ ERROR: ld.so: object '%s' cannot be load
we need it in the memory handling later. */
GLRO(dl_initial_searchlist) = *GL(dl_ns)[LM_ID_BASE]._ns_main_searchlist;
+ /* Remember the last search directory added at startup, now that
+ malloc will no longer be the one from dl-minimal.c. */
+ GLRO(dl_init_all_dirs) = GL(dl_all_dirs);
+
if (prelinked)
{
if (main_map->l_info [ADDRIDX (DT_GNU_CONFLICT)] != NULL)
@@ -2306,10 +2310,6 @@ ERROR: ld.so: object '%s' cannot be load
lossage);
}
- /* Remember the last search directory added at startup, now that
- malloc will no longer be the one from dl-minimal.c. */
- GLRO(dl_init_all_dirs) = GL(dl_all_dirs);
-
if (! prelinked && rtld_multiple_ref)
{
/* There was an explicit ref to the dynamic linker as a shared lib.

View file

@ -0,0 +1,26 @@
--- glibc-2.2/nss/nsswitch.c.chmou Fri Mar 31 22:38:32 2000
+++ glibc-2.2/nss/nsswitch.c Wed Nov 22 00:35:53 2000
@@ -333,9 +333,20 @@
ni->library->lib_handle = __libc_dlopen (shlib_name);
if (ni->library->lib_handle == NULL)
{
- /* Failed to load the library. */
- ni->library->lib_handle = (void *) -1l;
- __set_errno (saved_errno);
+ /* Failed to load the library. Try a fallback. */
+ int n = __snprintf(shlib_name, shlen, "libnss_%s.so.%d.%d",
+ ni->library->name, __GLIBC__, __GLIBC_MINOR__);
+ if (n >= shlen)
+ ni->library->lib_handle = NULL;
+ else
+ ni->library->lib_handle = __libc_dlopen (shlib_name);
+
+ if (ni->library->lib_handle == NULL)
+ {
+ /* Ok, really fail now. */
+ ni->library->lib_handle = (void *) -1l;
+ __set_errno (saved_errno);
+ }
}
}

View file

@ -0,0 +1,13 @@
--- glibc-2.2.4/debug/xtrace.sh.chmou Mon Jul 9 20:56:57 2001
+++ glibc-2.2.4/debug/xtrace.sh Mon Nov 12 14:16:51 2001
@@ -78,8 +78,8 @@
# If the variable COLUMNS is not set do this now.
COLUMNS=${COLUMNS:-80}
-# If `TERMINAL_PROG' is not set, set it to `xterm'.
-TERMINAL_PROG=${TERMINAL_PROG:-xterm}
+# If `TERMINAL_PROG' is not set, set it to `xvt'.
+TERMINAL_PROG=${TERMINAL_PROG:-xvt}
# The data file to process, if any.
data=

View file

@ -0,0 +1,47 @@
--- glibc-2.3.2/sysdeps/unix/sysv/linux/tcsetattr.c.tcsetattr-kernel-bug-workaround 2003-02-24 21:26:01.000000000 +0100
+++ glibc-2.3.2/sysdeps/unix/sysv/linux/tcsetattr.c 2003-06-05 11:11:01.000000000 +0200
@@ -56,6 +56,7 @@ tcsetattr (fd, optional_actions, termios
{
struct __kernel_termios k_termios;
unsigned long int cmd;
+ int retval;
switch (optional_actions)
{
@@ -87,6 +88,35 @@ tcsetattr (fd, optional_actions, termios
memcpy (&k_termios.c_cc[0], &termios_p->c_cc[0],
__KERNEL_NCCS * sizeof (cc_t));
- return INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
+ retval = INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
+
+ if (retval == 0 && cmd == TCSETS)
+ {
+ /* The Linux kernel has a bug which silently ignore the invalid
+ c_cflag on pty. We have to check it here. */
+ int save = errno;
+ retval = INLINE_SYSCALL (ioctl, 3, fd, TCGETS, &k_termios);
+ if (retval)
+ {
+ /* We cannot verify if the setting is ok. We don't return
+ an error (?). */
+ __set_errno (save);
+ retval = 0;
+ }
+ else if ((termios_p->c_cflag & (PARENB | CREAD))
+ != (k_termios.c_cflag & (PARENB | CREAD))
+ || ((termios_p->c_cflag & CSIZE)
+ && ((termios_p->c_cflag & CSIZE)
+ != (k_termios.c_cflag & CSIZE))))
+ {
+ /* It looks like the Linux kernel silently changed the
+ PARENB/CREAD/CSIZE bits in c_cflag. Report it as an
+ error. */
+ __set_errno (EINVAL);
+ retval = -1;
+ }
+ }
+
+ return retval;
}
libc_hidden_def (tcsetattr)

View file

@ -0,0 +1,11 @@
--- glibc-2.3.3/nscd/nscd.init.nscd-enable 2004-08-24 10:31:20.000000000 -0400
+++ glibc-2.3.3/nscd/nscd.init 2004-08-25 04:41:47.571810880 -0400
@@ -2,7 +2,7 @@
#
# nscd: Starts the Name Switch Cache Daemon
#
-# chkconfig: - 30 74
+# chkconfig: 345 30 74
# description: This is a daemon which handles passwd and group lookups \
# for running programs and cache the results for the next \
# query. You should start this daemon if you use \

View file

@ -0,0 +1,30 @@
2003-08-29 Gwenole Beauchesne <gbeauchesne@mandrakesoft.com>
* sysdeps/i386/dl-machine.h (dl_platform_init): Avoid i686
libraries to be loaded if the host doesn't support CMOV.
--- glibc-2.3.3/sysdeps/i386/dl-machine.h.i586-if-no-cmov 2004-06-03 01:21:36.000000000 +0200
+++ glibc-2.3.3/sysdeps/i386/dl-machine.h 2004-06-03 07:09:51.518703634 +0200
@@ -347,6 +347,9 @@ _dl_start_user:\n\
Prelinked libraries may use Elf32_Rela though. */
#define ELF_MACHINE_PLT_REL 1
+/* We need the definition of HWCAP_I386_CMOV. */
+#include <sysdeps/i386/dl-hwcapinfo.h>
+
/* We define an initialization functions. This is called very early in
_dl_sysdep_start. */
#define DL_PLATFORM_INIT dl_platform_init ()
@@ -357,6 +360,12 @@ dl_platform_init (void)
if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0')
/* Avoid an empty string which would disturb us. */
GLRO(dl_platform) = NULL;
+
+ if (GLRO(dl_platform) != NULL
+ && GLRO(dl_platform)[1] >= '6' && (GLRO(dl_hwcap) & HWCAP_I386_CMOV) == 0)
+ /* Avoid i686 compiled libraries to be loaded if the host doesn't
+ support CMOV instructions. */
+ GLRO(dl_platform) = "i586";
}
static inline Elf32_Addr

View file

@ -0,0 +1,21 @@
--- glibc-2.3.4/timezone/backward.timezone 2005-03-07 18:47:33.000000000 -0500
+++ glibc-2.3.4/timezone/backward 2005-03-10 11:09:08.973233047 -0500
@@ -98,3 +98,18 @@ Link Etc/UTC UTC
Link Etc/UTC Universal
Link Europe/Moscow W-SU
Link Etc/UTC Zulu
+
+# links requested by users (to access timezones by the name of main cities)
+# pablo@mandrakesoft.com
+# Canada/Saskatchewan
+Link America/Regina America/Saskatoon
+# Canada/Mountain (Alberta)
+Link America/Edmonton America/Calgary
+# Canada/Atlantic (New Brunswick)
+Link America/Halifax America/Fredericton
+# America/Eastern (Ontario)
+Link America/Montreal America/Ontario
+# PRC
+Link Asia/Shanghai Asia/Beijing
+# South Africa
+Link Africa/Johannesburg Africa/Pretoria

View file

@ -0,0 +1,57 @@
2005-08-29 Gwenole Beauchesne <gbeauchesne@mandriva.com>
* debug/xtrace.sh: Make it biarch capable on 64-bit Linux platforms.
* malloc/memusage.sh: Likewise.
--- glibc-2.3.5/debug/xtrace.sh.biarch-utils 2005-08-29 12:48:24.000000000 -0400
+++ glibc-2.3.5/debug/xtrace.sh 2005-08-29 16:58:02.000000000 -0400
@@ -151,6 +151,23 @@ if test ! -x "$program"; then
help_info
fi
+# Biarch transmutation.
+host_os=`uname -o`
+host_cpu=`uname -m`
+case $host_os in
+*Linux*)
+ # test if the binary is 32-bit
+ elf32=no
+ if file -L `which $program` | grep -q "ELF 32"; then
+ elf32=yes
+ fi
+esac
+case $host_cpu:$elf32 in
+powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes)
+ pcprofileso=`echo $pcprofileso | sed -e "s,/lib64/,/lib/,"`
+ ;;
+esac
+
# We have two modes. If a data file is given simply print the included data.
printf "%-20s %-*s %6s\n" Function $(expr $COLUMNS - 30) File Line
for i in $(seq 1 $COLUMNS); do printf -; done; printf '\n'
--- glibc-2.3.5/malloc/memusage.sh.biarch-utils 2005-03-07 18:44:10.000000000 -0500
+++ glibc-2.3.5/malloc/memusage.sh 2005-08-29 16:25:12.000000000 -0400
@@ -205,6 +205,23 @@ if test $# -eq 0; then
do_usage
fi
+# Biarch transmutation.
+host_os=`uname -o`
+host_cpu=`uname -m`
+case $host_os in
+*Linux*)
+ # test if the binary is 32-bit
+ elf32=no
+ if file -L `which $1` | grep -q "ELF 32"; then
+ elf32=yes
+ fi
+esac
+case $host_cpu:$elf32 in
+powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes)
+ memusageso=`echo $memusageso | sed -e "s,/lib64/,/lib/,"`
+ ;;
+esac
+
# This will be in the environment.
add_env="LD_PRELOAD=$memusageso"

View file

@ -0,0 +1,13 @@
--- glibc-2.3.5/crypt/x86.S.avx 2006-07-06 11:16:18.000000000 -0600
+++ glibc-2.3.5/crypt/x86.S 2006-07-06 11:16:30.000000000 -0600
@@ -32,8 +32,8 @@
#define DO_ALIGN(log) .align (1 << (log))
#endif
-#define BF_FRAME 0x200
-#define BF_CLEAN 0x300
+#define BF_FRAME 0x400
+#define BF_CLEAN 0x500
#define ctx %esp
#define BF_ptr (ctx)

View file

@ -0,0 +1,50 @@
--- glibc-2.3.6/mandriva/nsswitch.conf.nsswitch.conf 2006-03-20 10:39:14.000000000 +0100
+++ glibc-2.3.6/mandriva/nsswitch.conf 2006-03-20 10:38:42.000000000 +0100
@@ -0,0 +1,47 @@
+#
+# /etc/nsswitch.conf
+#
+# An example Name Service Switch config file. This file should be
+# sorted with the most-used services at the beginning.
+#
+# The entry '[NOTFOUND=return]' means that the search for an
+# entry should stop if the search in the previous entry turned
+# up nothing. Note that if the search failed due to some other reason
+# (like no NIS server responding) then the search continues with the
+# next entry.
+#
+# Legal entries are:
+#
+# compat Use compatibility setup
+# nisplus or nis+ Use NIS+ (NIS version 3)
+# nis or yp Use NIS (NIS version 2), also called YP
+# dns Use DNS (Domain Name Service)
+# files Use the local files
+# db Use the local database (.db) files
+# [NOTFOUND=return] Stop searching if not found so far
+#
+# For more information, please read the nsswitch.conf.5 manual page.
+#
+
+# passwd: files nis
+# shadow: files nis
+# group: files nis
+
+passwd: compat
+shadow: files nis
+group: compat
+
+hosts: files nis dns wins
+networks: files
+
+services: files
+protocols: files
+rpc: files
+ethers: files
+netmasks: files
+netgroup: files
+publickey: files
+
+bootparams: files
+automount: files nis
+aliases: files

View file

@ -0,0 +1,14 @@
--- glibc-2.3.3/sysdeps/unix/sysv/linux/powerpc/Makefile.ppc-build 2004-04-19 06:18:35.000000000 +0000
+++ glibc-2.3.3/sysdeps/unix/sysv/linux/powerpc/Makefile 2004-11-26 12:50:57.884944570 +0000
@@ -1,4 +1,11 @@
64bit-predefine = __powerpc64__
+
+ifeq ($(config-machine),powerpc)
+ifeq ($(subdir),elf)
+sysdep-others += lddlibc4
+install-bin += lddlibc4
+endif
+endif
ifeq ($(subdir),rt)
librt-routines += rt-sysdep
endif

View file

@ -0,0 +1,29 @@
pt_BR i18n fixes from glibc-2.3.4-77143cl.src.rpm (Conectiva Linux)
--- glibc-2.3.6/po/pt_BR.po.orig 2006-04-17 04:47:44.000000000 -0300
+++ glibc-2.3.6/po/pt_BR.po 2006-04-17 04:48:03.000000000 -0300
@@ -84,6 +84,7 @@
msgstr "\t[%u] - [%u bytes] "
#: nscd/nscd_stat.c:153
+#, c-format
msgid ""
"\n"
"%s cache:\n"
@@ -103,11 +104,14 @@
"cache %s:\n"
"\n"
"%15s cache está habilitado\n"
-"%15Zd tamanho sugerido%15ld segundos de vida para entradas positivas\n"
+"%15Zd tamanho sugerido\n"
+"%15ld segundos de vida para entradas positivas\n"
"%15ld segundos de vida para entradas negativas\n"
"%15ld hits do cache para entradas positivas\n"
"%15ld hits do cache para entradas negativas\n"
-"%15ld%% quantidade de hits no cache\n"
+"%15ld ausências no cache para entradas positivas\n"
+"%15ld ausências no cache para entradas negativas\n"
+"%15ld%% taxa de hits no cache\n"
"%15s verifique o arquivo /etc/%s para mudanças\n"
#: nis/nis_print.c:251

View file

@ -0,0 +1,93 @@
--- glibc-2.4.90/locale/iso-4217.def.compat-EUR-currencies 2006-04-27 08:54:33.000000000 -0400
+++ glibc-2.4.90/locale/iso-4217.def 2006-05-11 12:00:04.000000000 -0400
@@ -8,6 +8,7 @@
*
* !!! The list has to be sorted !!!
*/
+DEFINE_INT_CURR("ADP") /* Andorran Peseta -> EUR */
DEFINE_INT_CURR("AED") /* United Arab Emirates Dirham */
DEFINE_INT_CURR("AFN") /* Afghanistan Afgani */
DEFINE_INT_CURR("ALL") /* Albanian Lek */
@@ -15,12 +16,14 @@ DEFINE_INT_CURR("AMD") /* Armenia Dram
DEFINE_INT_CURR("ANG") /* Netherlands Antilles */
DEFINE_INT_CURR("AOA") /* Angolan Kwanza */
DEFINE_INT_CURR("ARS") /* Argentine Peso */
+DEFINE_INT_CURR("ATS") /* Austrian Schilling */
DEFINE_INT_CURR("AUD") /* Australian Dollar */
DEFINE_INT_CURR("AWG") /* Aruba Guilder */
DEFINE_INT_CURR("AZM") /* Azerbaijan Manat */
DEFINE_INT_CURR("BAM") /* Bosnian and Herzegovina Convertible Mark */
DEFINE_INT_CURR("BBD") /* Barbados Dollar */
DEFINE_INT_CURR("BDT") /* Bangladesh Taka */
+DEFINE_INT_CURR("BEF") /* Belgian Franc -> EUR */
DEFINE_INT_CURR("BGN") /* Bulgarian Lev */
DEFINE_INT_CURR("BHD") /* Bahraini Dinar */
DEFINE_INT_CURR("BIF") /* Burundi Franc */
@@ -45,6 +48,7 @@ DEFINE_INT_CURR("CUP") /* Cuban Peso *
DEFINE_INT_CURR("CVE") /* Cape Verde Escudo */
DEFINE_INT_CURR("CYP") /* Cypriot Pound */
DEFINE_INT_CURR("CZK") /* Czech Koruna */
+DEFINE_INT_CURR("DEM") /* German Mark -> EUR */
DEFINE_INT_CURR("DJF") /* Djibouti Franc */
DEFINE_INT_CURR("DKK") /* Danish Krone (Faroe Islands, Greenland) */
DEFINE_INT_CURR("DOP") /* Dominican Republic */
@@ -52,16 +56,20 @@ DEFINE_INT_CURR("DZD") /* Algerian Dina
DEFINE_INT_CURR("EEK") /* Estonian Kroon */
DEFINE_INT_CURR("EGP") /* Egyptian Pound */
DEFINE_INT_CURR("ERN") /* Eritrean Nakfa */
+DEFINE_INT_CURR("ESP") /* Spanish Peseta -> EUR */
DEFINE_INT_CURR("ETB") /* Ethiopian Birr */
DEFINE_INT_CURR("EUR") /* European Union Euro */
+DEFINE_INT_CURR("FIM") /* Finnish Markka -> EUR */
DEFINE_INT_CURR("FJD") /* Fiji Dollar */
DEFINE_INT_CURR("FKP") /* Falkland Islands Pound (Malvinas) */
+DEFINE_INT_CURR("FRF") /* French Franc -> EUR */
DEFINE_INT_CURR("GBP") /* British Pound */
DEFINE_INT_CURR("GEL") /* Georgia Lari */
DEFINE_INT_CURR("GHC") /* Ghana Cedi */
DEFINE_INT_CURR("GIP") /* Gibraltar Pound */
DEFINE_INT_CURR("GMD") /* Gambian Dalasi */
DEFINE_INT_CURR("GNF") /* Guinea Franc */
+DEFINE_INT_CURR("GRD") /* Greek Drachma -> EUR */
DEFINE_INT_CURR("GTQ") /* Guatemala Quetzal */
DEFINE_INT_CURR("GYD") /* Guyana Dollar */
DEFINE_INT_CURR("HKD") /* Hong Kong Dollar */
@@ -70,12 +78,14 @@ DEFINE_INT_CURR("HRK") /* Croatia Kuna
DEFINE_INT_CURR("HTG") /* Haiti Gourde */
DEFINE_INT_CURR("HUF") /* Hungarian Forint */
DEFINE_INT_CURR("IDR") /* Indonesia Rupiah */
+DEFINE_INT_CURR("IEP") /* Irish Pound -> EUR */
DEFINE_INT_CURR("ILS") /* Israeli Shekel */
DEFINE_INT_CURR("IMP") /* Isle of Man Pounds */
DEFINE_INT_CURR("INR") /* Indian Rupee (Bhutan) */
DEFINE_INT_CURR("IQD") /* Iraqi Dinar */
DEFINE_INT_CURR("IRR") /* Iranian Rial */
DEFINE_INT_CURR("ISK") /* Iceland Krona */
+DEFINE_INT_CURR("ITL") /* Italian Lira -> EUR */
DEFINE_INT_CURR("JEP") /* Jersey Pound */
DEFINE_INT_CURR("JMD") /* Jamaican Dollar */
DEFINE_INT_CURR("JOD") /* Jordanian Dinar */
@@ -95,6 +105,7 @@ DEFINE_INT_CURR("LKR") /* Sri Lankan Ru
DEFINE_INT_CURR("LRD") /* Liberian Dollar */
DEFINE_INT_CURR("LSL") /* Lesotho Maloti */
DEFINE_INT_CURR("LTL") /* Lithuanian Litas */
+DEFINE_INT_CURR("LUF") /* Luxembourg Franc -> EUR */
DEFINE_INT_CURR("LVL") /* Latvia Lat */
DEFINE_INT_CURR("LYD") /* Libyan Arab Jamahiriya Dinar */
DEFINE_INT_CURR("MAD") /* Moroccan Dirham */
@@ -115,6 +126,7 @@ DEFINE_INT_CURR("MZM") /* Mozambique Me
DEFINE_INT_CURR("NAD") /* Namibia Dollar */
DEFINE_INT_CURR("NGN") /* Nigeria Naira */
DEFINE_INT_CURR("NIO") /* Nicaragua Cordoba Oro */
+DEFINE_INT_CURR("NLG") /* Netherlands Guilder -> EUR */
DEFINE_INT_CURR("NOK") /* Norwegian Krone */
DEFINE_INT_CURR("NPR") /* Nepalese Rupee */
DEFINE_INT_CURR("NZD") /* New Zealand Dollar */
@@ -125,6 +137,7 @@ DEFINE_INT_CURR("PGK") /* Papau New Gui
DEFINE_INT_CURR("PHP") /* Philippines Peso */
DEFINE_INT_CURR("PKR") /* Pakistan Rupee */
DEFINE_INT_CURR("PLN") /* Polish Zloty */
+DEFINE_INT_CURR("PTE") /* Portugese Escudo -> EUR */
DEFINE_INT_CURR("PYG") /* Paraguay Guarani */
DEFINE_INT_CURR("QAR") /* Qatar Rial */
DEFINE_INT_CURR("ROL") /* Romanian Leu */

View file

@ -0,0 +1,11 @@
--- glibc-2.4.90/include/features.h.gcc4-fortify 2006-04-27 08:54:33.000000000 -0400
+++ glibc-2.4.90/include/features.h 2006-05-11 12:22:19.000000000 -0400
@@ -275,7 +275,7 @@
#endif
#if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 \
- && __GNUC_PREREQ (4, 1) && defined __OPTIMIZE__ && __OPTIMIZE__ > 0
+ && __GNUC_PREREQ (4, 0) && defined __OPTIMIZE__ && __OPTIMIZE__ > 0
# if _FORTIFY_SOURCE > 1
# define __USE_FORTIFY_LEVEL 2
# else

View file

@ -0,0 +1,100 @@
2002-12-07 Gwenole Beauchesne <gbeauchesne@mandriva.com>
* sysdeps/i386/dl-procinfo.h (HWCAP_I386_*): Move to...
* sysdeps/i386/dl-hwcapinfo.h: ... here. New file.
--- glibc-2.4.90/sysdeps/i386/dl-procinfo.h.i386-hwcapinfo 2004-03-10 19:29:31.000000000 +0100
+++ glibc-2.4.90/sysdeps/i386/dl-procinfo.h 2006-05-17 06:23:50.000000000 +0200
@@ -32,34 +32,8 @@
#define _DL_HWCAP_PLATFORM (((1ULL << _DL_PLATFORMS_COUNT) - 1) \
<< _DL_FIRST_PLATFORM)
-enum
-{
- HWCAP_I386_FPU = 1 << 0,
- HWCAP_I386_VME = 1 << 1,
- HWCAP_I386_DE = 1 << 2,
- HWCAP_I386_PSE = 1 << 3,
- HWCAP_I386_TSC = 1 << 4,
- HWCAP_I386_MSR = 1 << 5,
- HWCAP_I386_PAE = 1 << 6,
- HWCAP_I386_MCE = 1 << 7,
- HWCAP_I386_CX8 = 1 << 8,
- HWCAP_I386_APIC = 1 << 9,
- HWCAP_I386_SEP = 1 << 11,
- HWCAP_I386_MTRR = 1 << 12,
- HWCAP_I386_PGE = 1 << 13,
- HWCAP_I386_MCA = 1 << 14,
- HWCAP_I386_CMOV = 1 << 15,
- HWCAP_I386_FCMOV = 1 << 16,
- HWCAP_I386_MMX = 1 << 23,
- HWCAP_I386_OSFXSR = 1 << 24,
- HWCAP_I386_XMM = 1 << 25,
- HWCAP_I386_XMM2 = 1 << 26,
- HWCAP_I386_AMD3D = 1 << 31,
-
- /* XXX Which others to add here? */
- HWCAP_IMPORTANT = (HWCAP_I386_XMM2)
-
-};
+/* Get HWCAP definitions. */
+#include <sysdeps/i386/dl-hwcapinfo.h>
/* We cannot provide a general printing function. */
#define _dl_procinfo(word) -1
--- glibc-2.4.90/sysdeps/i386/dl-hwcapinfo.h.i386-hwcapinfo 2006-05-17 06:28:35.000000000 +0200
+++ glibc-2.4.90/sysdeps/i386/dl-hwcapinfo.h 2006-05-17 06:25:38.000000000 +0200
@@ -0,0 +1,53 @@
+/* i386 version of processor capability definitions.
+ Copyright (C) 1998, 2000, 2003, 2004 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
+
+ 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. */
+
+#ifndef _DL_HWCAPINFO_H
+#define _DL_HWCAPINFO_H 1
+
+enum
+{
+ HWCAP_I386_FPU = 1 << 0,
+ HWCAP_I386_VME = 1 << 1,
+ HWCAP_I386_DE = 1 << 2,
+ HWCAP_I386_PSE = 1 << 3,
+ HWCAP_I386_TSC = 1 << 4,
+ HWCAP_I386_MSR = 1 << 5,
+ HWCAP_I386_PAE = 1 << 6,
+ HWCAP_I386_MCE = 1 << 7,
+ HWCAP_I386_CX8 = 1 << 8,
+ HWCAP_I386_APIC = 1 << 9,
+ HWCAP_I386_SEP = 1 << 11,
+ HWCAP_I386_MTRR = 1 << 12,
+ HWCAP_I386_PGE = 1 << 13,
+ HWCAP_I386_MCA = 1 << 14,
+ HWCAP_I386_CMOV = 1 << 15,
+ HWCAP_I386_FCMOV = 1 << 16,
+ HWCAP_I386_MMX = 1 << 23,
+ HWCAP_I386_OSFXSR = 1 << 24,
+ HWCAP_I386_XMM = 1 << 25,
+ HWCAP_I386_XMM2 = 1 << 26,
+ HWCAP_I386_AMD3D = 1 << 31,
+
+ /* XXX Which others to add here? */
+ HWCAP_IMPORTANT = (HWCAP_I386_XMM2)
+
+};
+
+#endif /* dl-hwcapinfo.h */

View file

@ -0,0 +1,132 @@
2006-05-17 Gwenole Beauchesne <gbeauchesne@mandriva.com>
* Update and simplify for glibc 2.4.90.
2002-12-07 Gwenole Beauchesne <gbeauchesne@mandrakesoft.com>
Let an i586 rtld load i686 libraries (especially libpthread)
* elf/rtld.c (HP_TIMING_AVAIL): Redefine to HP_TIMING_HWCAP_AVAIL
since early statistics require high-precision timers.
* sysdeps/generic/ldsodefs.h (rtld_global): Declare
_dl_cpuclock_offset if HP_TIMING_HWCAP_AVAIL is defined too.
* sysdeps/unix/sysv/linux/i386/i586/Makefile: New file.
* sysdeps/unix/sysv/linux/i386/i586/hp-timing.c: New file.
* sysdeps/unix/sysv/linux/i386/i586/hp-timing.h: New file.
--- glibc-2.4.90/elf/rtld.c.i586-hptiming 2006-04-27 14:54:33.000000000 +0200
+++ glibc-2.4.90/elf/rtld.c 2006-05-17 08:31:50.000000000 +0200
@@ -17,6 +17,9 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
+/* Early statistics require high-precision timing. */
+#define NEED_HP_TIMING_HWCAP_AVAIL 1
+
#include <errno.h>
#include <dlfcn.h>
#include <fcntl.h>
@@ -178,6 +181,12 @@ static void dl_main (const ElfW(Phdr) *p
static struct libname_list _dl_rtld_libname;
static struct libname_list _dl_rtld_libname2;
+/* Run-time detect availability of high-precision timer? */
+#ifdef HP_TIMING_HWCAP_AVAIL
+# undef HP_TIMING_AVAIL
+# define HP_TIMING_AVAIL HP_TIMING_HWCAP_AVAIL
+#endif
+
/* We expect less than a second for relocation. */
#ifdef HP_SMALL_TIMING_AVAIL
# undef HP_TIMING_AVAIL
@@ -311,9 +320,8 @@ _dl_start_final (void *arg, struct dl_st
#endif
-#if HP_TIMING_AVAIL
- HP_TIMING_NOW (GL(dl_cpuclock_offset));
-#endif
+ if (HP_TIMING_AVAIL)
+ HP_TIMING_NOW (GL(dl_cpuclock_offset));
/* Initialize the stack end variable. */
__libc_stack_end = __builtin_frame_address (0);
--- glibc-2.4.90/sysdeps/generic/ldsodefs.h.i586-hptiming 2006-05-10 15:42:19.000000000 +0200
+++ glibc-2.4.90/sysdeps/generic/ldsodefs.h 2006-05-17 08:13:21.000000000 +0200
@@ -408,7 +408,7 @@ struct rtld_global
/* The object to be initialized first. */
EXTERN struct link_map *_dl_initfirst;
-#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL
+#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL || defined HP_TIMING_HWCAP_AVAIL
/* Start time on CPU clock. */
EXTERN hp_timing_t _dl_cpuclock_offset;
#endif
@@ -619,7 +619,7 @@ struct rtld_global_ro
/* All search directories defined at startup. */
EXTERN struct r_search_path_elem *_dl_init_all_dirs;
-#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL
+#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL || defined HP_TIMING_HWCAP_AVAIL
/* Overhead of a high-precision timing measurement. */
EXTERN hp_timing_t _dl_hp_timing_overhead;
#endif
--- glibc-2.4.90/sysdeps/i386/i586/Makefile.i586-hptiming 2006-05-17 06:35:29.000000000 +0200
+++ glibc-2.4.90/sysdeps/i386/i586/Makefile 2006-05-17 06:35:41.000000000 +0200
@@ -0,0 +1,4 @@
+ifeq ($(subdir),csu)
+sysdep_routines += hp-timing
+static-only-routines += hp-timing
+endif
--- glibc-2.4.90/sysdeps/i386/i586/hp-timing.c.i586-hptiming 2006-05-17 06:36:28.000000000 +0200
+++ glibc-2.4.90/sysdeps/i386/i586/hp-timing.c 2006-05-17 08:17:51.000000000 +0200
@@ -0,0 +1,2 @@
+/* We can use the i686 implementation without changes. */
+#include <sysdeps/i386/i686/hp-timing.c>
--- glibc-2.4.90/sysdeps/i386/i586/hp-timing.h.i586-hptiming 2006-05-17 06:37:28.000000000 +0200
+++ glibc-2.4.90/sysdeps/i386/i586/hp-timing.h 2006-05-17 08:30:06.000000000 +0200
@@ -0,0 +1,43 @@
+#ifndef _HP_HWCAP_TIMING_H
+#define _HP_HWCAP_TIMING_H 1
+
+/* We can use the i686 implementation with slight changes. */
+#include <sysdeps/i386/i686/hp-timing.h>
+
+/* We need the definition of HWCAP_I386_TSC. */
+#include <sysdeps/i386/dl-hwcapinfo.h>
+
+/* We need to perform a runtime check for the timestamp register. */
+#undef HP_TIMING_AVAIL
+#define HP_TIMING_AVAIL (0)
+
+/* HP_TIMING_HWCAP_AVAIL: this macro performs a run-time check for the
+ capability. */
+#define HP_TIMING_HWCAP_AVAIL (_dl_hp_timing_avail())
+
+/* Perform the TSC check. */
+#ifdef NEED_HP_TIMING_HWCAP_AVAIL
+static inline
+unsigned int
+_dl_cpuid_edx (unsigned int op)
+{
+ unsigned int edx;
+ __asm__ __volatile__("push %%ebx ; cpuid ; pop %%ebx"
+ : "=d" (edx) : "a" (op) : "ecx");
+ return edx;
+}
+
+static int
+internal_function
+_dl_hp_timing_avail (void)
+{
+ static int has_tsc = -1;
+
+ if (__builtin_expect (has_tsc == -1, 0))
+ has_tsc = (_dl_cpuid_edx(1) & HWCAP_I386_TSC) == HWCAP_I386_TSC;
+
+ return has_tsc;
+}
+#endif
+
+#endif /* hp-timing.h */

View file

@ -0,0 +1,18 @@
--- glibc-2.4.90/stdlib/Makefile.testsuite-ldbl-bits 2006-03-20 04:39:04.000000000 -0500
+++ glibc-2.4.90/stdlib/Makefile 2006-07-21 05:39:34.000000000 -0400
@@ -124,9 +124,14 @@ ifeq (no,$(cross-compiling))
tests: $(objpfx)tst-fmtmsg.out
endif
+isomac-includes = -I../include $(+sysdep-includes) $(sysincludes) -I..
+ifeq (powerpc:8, $(base-machine):$(sizeof-long-double))
+# XXX only necessary for bootstrapping...
+isomac-includes += -I../libio -I../stdlib -I../wcsmbs
+endif
$(objpfx)isomac.out: $(objpfx)isomac
$(dir $<)$(notdir $<) '$(CC)' \
- '-I../include $(+sysdep-includes) $(sysincludes) -I..' > $<.out
+ '$(isomac-includes)' > $<.out
isomac-CFLAGS = -O
$(objpfx)isomac: isomac.c

View file

@ -0,0 +1,24 @@
2006-07-26 Gwenole Beauchesne <gbeauchesne@mandriva.com>
* rt/Makefile (tests): Don't run tests in parallel on fine-grained
SMT systems.
--- glibc-2.4.90/rt/Makefile.testsuite-rt-notparallel 2006-02-16 09:32:18.000000000 -0500
+++ glibc-2.4.90/rt/Makefile 2006-10-25 03:00:03.000000000 -0400
@@ -81,6 +81,16 @@ endif
tst-mqueue7-ARGS = -- $(built-program-cmd)
+# XXX avoid timing issues on fine-grained SMT systems
+ifeq (powerpc, $(base-machine))
+no-parallel-testing = yes
+endif
+ifneq ($(filter %tests,$(MAKECMDGOALS)),)
+ifeq ($(no-parallel-testing),yes)
+.NOTPARALLEL:
+endif
+endif
+
ifeq (yes,$(build-static-nss))
otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
$(resolvobjdir)/libresolv.a

16
glibc-2.6-nice_fix.patch Normal file
View file

@ -0,0 +1,16 @@
--- glibc-2.6.orig/sysdeps/unix/nice.c 2006-08-15 02:24:45.000000000 -0300
+++ glibc-2.6/sysdeps/unix/nice.c 2007-06-25 14:40:24.000000000 -0300
@@ -42,7 +42,12 @@
__set_errno (save);
}
- result = setpriority (PRIO_PROCESS, 0, prio + incr);
+ prio += incr;
+ if (prio < PRIO_MIN)
+ prio = PRIO_MIN;
+ else if (prio >= PRIO_MAX)
+ prio = PRIO_MAX - 1;
+ result = setpriority (PRIO_PROCESS, 0, prio);
if (result == -1)
{
if (errno == EACCES)

View file

@ -0,0 +1,147 @@
--- crypt/wrapper.c.org 2008-06-17 13:29:30.000000000 -0600
+++ crypt/wrapper.c 2008-06-17 15:33:47.000000000 -0600
@@ -43,6 +43,10 @@ extern char *_crypt_gensalt_extended_rn(
__CONST char *input, int size, char *output, int output_size);
extern char *_crypt_gensalt_md5_rn(unsigned long count,
__CONST char *input, int size, char *output, int output_size);
+extern char *_crypt_gensalt_sha256c_rn(unsigned long count,
+ __CONST char *input, int size, char *output, int output_size);
+extern char *_crypt_gensalt_sha512c_rn(unsigned long count,
+ __CONST char *input, int size, char *output, int output_size);
#if defined(__GLIBC__) && defined(_LIBC)
/* crypt.h from glibc-crypt-2.1 will define struct crypt_data for us */
@@ -54,6 +58,11 @@ extern char *__md5_crypt_r(const char *k
extern char *__des_crypt_r(const char *key, const char *salt,
struct crypt_data *data);
extern struct crypt_data _ufc_foobar;
+/* support for sha256-crypt and sha512-crypt */
+extern char *__sha256_crypt_r (const char *key, const char *salt,
+ char *buffer, int buflen);
+extern char *__sha512_crypt_r (const char *key, const char *salt,
+ char *buffer, int buflen);
#endif
static int _crypt_data_alloc(void **data, int *size, int need)
@@ -142,6 +151,10 @@ char *__crypt_rn(__const char *key, __co
return _crypt_blowfish_rn(key, setting, (char *)data, size);
if (setting[0] == '$' && setting[1] == '1')
return __md5_crypt_r(key, setting, (char *)data, size);
+ if (setting[0] == '$' && setting[1] == '5')
+ return __sha256_crypt_r(key, setting, (char *)data, size);
+ if (setting[0] == '$' && setting[1] == '6')
+ return __sha512_crypt_r(key, setting, (char *)data, size);
if (setting[0] == '$') goto out_einval;
if (setting[0] == '_') {
if (size < sizeof(struct _crypt_extended_data)) goto out_erange;
@@ -181,6 +194,16 @@ char *__crypt_ra(__const char *key, __co
return NULL;
return __md5_crypt_r(key, setting, (char *)*data, *size);
}
+ if (setting[0] == '$' && setting[1] == '5') {
+ if (_crypt_data_alloc(data, size, CRYPT_OUTPUT_SIZE))
+ return NULL;
+ return __sha256_crypt_r(key, setting, (char *)*data, *size);
+ }
+ if (setting[0] == '$' && setting[1] == '6') {
+ if (_crypt_data_alloc(data, size, CRYPT_OUTPUT_SIZE))
+ return NULL;
+ return __sha512_crypt_r(key, setting, (char *)*data, *size);
+ }
if (setting[0] == '$') goto out_einval;
if (setting[0] == '_') {
if (_crypt_data_alloc(data, size,
@@ -271,6 +294,12 @@ char *__crypt_gensalt_rn(__CONST char *p
if (!strncmp(prefix, "$1$", 3))
use = _crypt_gensalt_md5_rn;
else
+ if (!strncmp(prefix, "$5$", 3))
+ use = _crypt_gensalt_sha256c_rn;
+ else
+ if (!strncmp(prefix, "$6$", 3))
+ use = _crypt_gensalt_sha512c_rn;
+ else
if (prefix[0] == '_')
use = _crypt_gensalt_extended_rn;
else
--- crypt/crypt_gensalt.c.org 2008-06-17 13:31:49.000000000 -0600
+++ crypt/crypt_gensalt.c 2008-06-17 15:30:35.000000000 -0600
@@ -109,3 +109,78 @@ char *_crypt_gensalt_md5_rn(unsigned lon
return output;
}
+
+char *_crypt_gensalt_sha256c_rn(unsigned long count,
+ __CONST char *input, int size, char *output, int output_size)
+{
+ unsigned long value;
+
+ if (size < 3 || output_size < 3 + 4 + 1 || (count && count != 1000)) {
+ if (output_size > 0) output[0] = '\0';
+ __set_errno((output_size < 3 + 4 + 1) ? ERANGE : EINVAL);
+ return NULL;
+ }
+
+ output[0] = '$';
+ output[1] = '5';
+ output[2] = '$';
+ value = (unsigned long)(unsigned char)input[0] |
+ ((unsigned long)(unsigned char)input[1] << 8) |
+ ((unsigned long)(unsigned char)input[2] << 16);
+ output[3] = _crypt_itoa64[value & 0x3f];
+ output[4] = _crypt_itoa64[(value >> 6) & 0x3f];
+ output[5] = _crypt_itoa64[(value >> 12) & 0x3f];
+ output[6] = _crypt_itoa64[(value >> 18) & 0x3f];
+ output[7] = '\0';
+
+ if (size >= 6 && output_size >= 3 + 4 + 4 + 1) {
+ value = (unsigned long)(unsigned char)input[3] |
+ ((unsigned long)(unsigned char)input[4] << 8) |
+ ((unsigned long)(unsigned char)input[5] << 16);
+ output[7] = _crypt_itoa64[value & 0x3f];
+ output[8] = _crypt_itoa64[(value >> 6) & 0x3f];
+ output[9] = _crypt_itoa64[(value >> 12) & 0x3f];
+ output[10] = _crypt_itoa64[(value >> 18) & 0x3f];
+ output[11] = '\0';
+ }
+
+ return output;
+}
+
+
+char *_crypt_gensalt_sha512c_rn(unsigned long count,
+ __CONST char *input, int size, char *output, int output_size)
+{
+ unsigned long value;
+
+ if (size < 3 || output_size < 3 + 4 + 1 || (count && count != 1000)) {
+ if (output_size > 0) output[0] = '\0';
+ __set_errno((output_size < 3 + 4 + 1) ? ERANGE : EINVAL);
+ return NULL;
+ }
+
+ output[0] = '$';
+ output[1] = '6';
+ output[2] = '$';
+ value = (unsigned long)(unsigned char)input[0] |
+ ((unsigned long)(unsigned char)input[1] << 8) |
+ ((unsigned long)(unsigned char)input[2] << 16);
+ output[3] = _crypt_itoa64[value & 0x3f];
+ output[4] = _crypt_itoa64[(value >> 6) & 0x3f];
+ output[5] = _crypt_itoa64[(value >> 12) & 0x3f];
+ output[6] = _crypt_itoa64[(value >> 18) & 0x3f];
+ output[7] = '\0';
+
+ if (size >= 6 && output_size >= 3 + 4 + 4 + 1) {
+ value = (unsigned long)(unsigned char)input[3] |
+ ((unsigned long)(unsigned char)input[4] << 8) |
+ ((unsigned long)(unsigned char)input[5] << 16);
+ output[7] = _crypt_itoa64[value & 0x3f];
+ output[8] = _crypt_itoa64[(value >> 6) & 0x3f];
+ output[9] = _crypt_itoa64[(value >> 12) & 0x3f];
+ output[10] = _crypt_itoa64[(value >> 18) & 0x3f];
+ output[11] = '\0';
+ }
+
+ return output;
+}

View file

@ -0,0 +1,58 @@
2006-11-30 Jan Kratochvil <jan.kratochvil@redhat.com>
* sysdeps/unix/sysv/linux/i386/clone.S: Provide CFI for the outermost
`clone' function to ensure proper unwinding stop of gdb.
* sysdeps/unix/sysv/linux/x86_64/clone.S: Likewise.
Index: sysdeps/unix/sysv/linux/i386/clone.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/i386/clone.S,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -p -r1.26 -r1.27
--- sysdeps/unix/sysv/linux/i386/clone.S 4 May 2005 17:52:08 -0000 1.26
+++ sysdeps/unix/sysv/linux/i386/clone.S 3 Dec 2006 23:12:36 -0000 1.27
@@ -120,6 +120,9 @@ L(pseudo_end):
ret
L(thread_start):
+ cfi_startproc;
+ /* Clearing frame pointer is insufficient, use CFI. */
+ cfi_undefined (eip);
/* Note: %esi is zero. */
movl %esi,%ebp /* terminate the stack frame */
#ifdef RESET_PID
@@ -152,6 +155,7 @@ L(nomoregetpid):
jmp L(haspid)
.previous
#endif
+ cfi_endproc;
cfi_startproc
PSEUDO_END (BP_SYM (__clone))
Index: sysdeps/unix/sysv/linux/x86_64/clone.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/x86_64/clone.S,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- sysdeps/unix/sysv/linux/x86_64/clone.S 31 Mar 2005 10:00:12 -0000 1.6
+++ sysdeps/unix/sysv/linux/x86_64/clone.S 3 Dec 2006 23:12:36 -0000 1.7
@@ -89,6 +89,9 @@ L(pseudo_end):
ret
L(thread_start):
+ cfi_startproc;
+ /* Clearing frame pointer is insufficient, use CFI. */
+ cfi_undefined (rip);
/* Clear the frame pointer. The ABI suggests this be done, to mark
the outermost frame obviously. */
xorl %ebp, %ebp
@@ -113,6 +116,7 @@ L(thread_start):
/* Call exit with return value from function call. */
movq %rax, %rdi
call HIDDEN_JUMPTARGET (_exit)
+ cfi_endproc;
cfi_startproc;
PSEUDO_END (BP_SYM (__clone))

View file

@ -0,0 +1,12 @@
diff -p -up glibc-2.8/po/fr.po.orig glibc-2.8/po/fr.po
--- glibc-2.8/po/fr.po.orig 2008-05-20 20:01:33.000000000 -0400
+++ glibc-2.8/po/fr.po 2008-05-20 20:02:10.000000000 -0400
@@ -5351,7 +5351,7 @@ msgstr "Trop de fichiers ouverts dans le
#. TRANS modes on an ordinary file.
#: sysdeps/gnu/errlist.c:285
msgid "Inappropriate ioctl for device"
-msgstr "Ioctl() inappropré pour un périphérique"
+msgstr "Ioctl() inapproprié pour un périphérique"
#. TRANS An attempt to execute a file that is currently open for writing, or
#. TRANS write to a file that is currently being executed. Often using a

View file

@ -0,0 +1,12 @@
https://qa.mandriva.com/show_bug.cgi?id=41055
--- glibc-2.8/nscd/nscd.init.orig 2008-05-26 10:33:11.000000000 -0400
+++ glibc-2.8/nscd/nscd.init 2008-05-26 10:36:56.000000000 -0400
@@ -13,6 +13,7 @@
### BEGIN INIT INFO
# Provides: nscd
# Required-Start: $syslog
+# Should-Start: $network ldap mysqld ypbind
# Default-Stop: 0 1 6
# Short-Description: Starts the Name Switch Cache Daemon
# Description: This is a daemon which handles passwd and group lookups \

View file

@ -0,0 +1,49 @@
diff -p -up glibc-2.9/crypt/crypt-entry.c.orig glibc-2.9/crypt/crypt-entry.c
--- glibc-2.9/crypt/crypt-entry.c.orig 2009-01-15 10:43:01.000000000 -0500
+++ glibc-2.9/crypt/crypt-entry.c 2009-01-15 10:43:18.000000000 -0500
@@ -164,18 +164,3 @@ crypt (key, salt)
#endif
-/*
- * To make fcrypt users happy.
- * They don't need to call init_des.
- */
-#ifdef _LIBC
-weak_alias (crypt, fcrypt)
-#else
-char *
-__fcrypt (key, salt)
- const char *key;
- const char *salt;
-{
- return crypt (key, salt);
-}
-#endif
diff -p -up glibc-2.9/crypt/wrapper.c.orig glibc-2.9/crypt/wrapper.c
--- glibc-2.9/crypt/wrapper.c.orig 2009-01-15 10:43:01.000000000 -0500
+++ glibc-2.9/crypt/wrapper.c 2009-01-15 10:43:18.000000000 -0500
@@ -326,7 +326,22 @@ weak_alias(__crypt_gensalt_rn, crypt_gen
weak_alias(__crypt_gensalt_ra, crypt_gensalt_ra)
weak_alias(__crypt_gensalt, crypt_gensalt)
#endif
-
+/*
+ * To make fcrypt users happy.
+ * They don't need to call init_des.
+ */
+#ifdef _LIBC
+weak_alias (crypt, fcrypt)
+#else
+char *
+__fcrypt (key, salt)
+ const char *key;
+ const char *salt;
+{
+ return crypt (key, salt);
+}
+#endif
+
#ifdef TEST
static struct {
char *hash;

View file

@ -0,0 +1,40 @@
diff -p -up glibc-2.9/elf/ldd.bash.in.orig glibc-2.9/elf/ldd.bash.in
--- glibc-2.9/elf/ldd.bash.in.orig 2008-01-02 14:25:22.000000000 -0500
+++ glibc-2.9/elf/ldd.bash.in 2009-01-15 07:47:41.000000000 -0500
@@ -31,6 +31,7 @@ RTLDLIST=@RTLD@
warn=
bind_now=
verbose=
+file_magic_regex="ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib)"
while test $# -gt 0; do
case "$1" in
@@ -151,8 +152,11 @@ for file do
echo "ldd: ${file}:" $"not regular file" >&2
result=1
elif test -r "$file"; then
+ if eval file -L "$file" 2>/dev/null \
+ | sed 10q | egrep -v "$file_magic_regex" > /dev/null; then
test -x "$file" || echo 'ldd:' $"\
warning: you do not have execution permission for" "\`$file'" >&2
+ fi
RTLD=
ret=1
for rtld in ${RTLDLIST}; do
@@ -169,8 +173,14 @@ warning: you do not have execution permi
# If the program exits with exit code 5, it means the process has been
# invoked with __libc_enable_secure. Fall back to running it through
# the dynamic linker.
- try_trace "$file"
- rc=$?
+ if [ ! -x "$file" ] && eval file -L "$file" 2>/dev/null \
+ | sed 10q | egrep "$file_magic_regex" > /dev/null; then
+ try_trace "$RTLD" "$file"
+ rc=$?
+ else
+ try_trace "$file"
+ rc=$?
+ fi
if [ $rc = 5 ]; then
try_trace "$RTLD" "$file"
rc=$?

View file

@ -0,0 +1,16 @@
diff -p -up glibc-2.9/nscd/nscd.conf.orig glibc-2.9/nscd/nscd.conf
--- glibc-2.9/nscd/nscd.conf.orig 2007-11-05 19:50:48.000000000 -0500
+++ glibc-2.9/nscd/nscd.conf 2009-01-15 09:56:22.000000000 -0500
@@ -60,7 +60,11 @@
max-db-size group 33554432
auto-propagate group yes
- enable-cache hosts yes
+# !!!!!WARNING!!!!! Host cache is insecure!!! The mechanism in nscd to
+# cache hosts will cause your local system to not be able to trust
+# forward/reverse lookup checks. DO NOT USE THIS if your system relies on
+# this sort of security mechanism. Use a caching DNS server instead.
+ enable-cache hosts no
positive-time-to-live hosts 3600
negative-time-to-live hosts 20
suggested-size hosts 211

View file

@ -0,0 +1,36 @@
diff -p -up glibc-2.9/Makeconfig.orig glibc-2.9/Makeconfig
--- glibc-2.9/Makeconfig.orig 2008-08-18 05:42:17.000000000 -0400
+++ glibc-2.9/Makeconfig 2009-01-15 09:44:31.000000000 -0500
@@ -226,7 +226,7 @@ inst_zonedir = $(install_root)$(zonedir)
# Where to install the locale files.
ifndef localedir
-localedir = $(libdir)/locale
+localedir = $(datadir)/locale
endif
inst_localedir = $(install_root)$(localedir)
diff -p -up glibc-2.9/sysdeps/unix/sysv/linux/configure.in.orig glibc-2.9/sysdeps/unix/sysv/linux/configure.in
--- glibc-2.9/sysdeps/unix/sysv/linux/configure.in.orig 2008-04-11 17:13:38.000000000 -0400
+++ glibc-2.9/sysdeps/unix/sysv/linux/configure.in 2009-01-15 09:44:31.000000000 -0500
@@ -169,7 +169,7 @@ case "$prefix" in
if test "$libdir" = '${exec_prefix}/lib'; then
libdir='${exec_prefix}/lib64';
# Locale data can be shared between 32bit and 64bit libraries
- libc_cv_localedir='${exec_prefix}/lib/locale'
+ libc_cv_localedir='${datadir}/locale'
fi
;;
*)
diff -p -up glibc-2.9/sysdeps/unix/sysv/linux/configure.orig glibc-2.9/sysdeps/unix/sysv/linux/configure
--- glibc-2.9/sysdeps/unix/sysv/linux/configure.orig 2008-04-11 17:13:51.000000000 -0400
+++ glibc-2.9/sysdeps/unix/sysv/linux/configure 2009-01-15 09:44:31.000000000 -0500
@@ -381,7 +381,7 @@ case "$prefix" in
if test "$libdir" = '${exec_prefix}/lib'; then
libdir='${exec_prefix}/lib64';
# Locale data can be shared between 32bit and 64bit libraries
- libc_cv_localedir='${exec_prefix}/lib/locale'
+ libc_cv_localedir='${datadir}/locale'
fi
;;
*)

59
glibc-check.sh Executable file
View file

@ -0,0 +1,59 @@
#!/bin/sh
##
## Glibc "make check" helper script
##
while [[ $# -gt 0 ]]; do
opt=$1
shift 1
optarg=$1
case $opt in
-d) DIR=$optarg; shift 1;;
-k) K=$opt;;
-l) LDSO=$optarg; shift 1;;
-j) JOBS=-j$optarg; shift 1;;
-j[0-9]*) JOBS=$opt;;
esac
done
[[ -n "$DIR" ]] || {
echo "ERROR: check dir not specified"
exit 1
}
function CMD() {
echo + ${1+"$@"}
${1+"$@"} || return $?
}
echo "########################################################################"
echo "##"
echo "## Testing in $DIR with ${LDSO:-default ld.so}"
echo "##"
echo "########################################################################"
[[ -n "$LDSO" ]] && {
CMD mv -f $DIR/elf/ld.so $DIR/elf/ld.so.orig
CMD cp -a $LDSO $DIR/elf/ld.so
CMD find $DIR -name \*.out -exec mv -f '{}' '{}'.origldso \;
}
CMD make $JOBS -C $DIR check $K PARALLELMFLAGS=-s
rc=$?
if [[ $rc -eq 0 ]]; then
STATUS="PASS"
else
STATUS="FAIL"
if [[ -n "$K" ]]; then
rc=0
fi
fi
[[ -n "$LDSO" ]] && {
CMD mv -f $DIR/elf/ld.so.orig $DIR/elf/ld.so
}
echo "##"
echo "## Result: $STATUS"
echo "##"
exit $rc

140
glibc-find-requires.sh Executable file
View file

@ -0,0 +1,140 @@
#!/bin/bash
#
# Auto-generate requirements for executables (both ELF and a.out) and library
# sonames, script interpreters, and perl modules.
#
ulimit -c 0
#
# --- Set needed to 0 for traditional find-requires behavior.
needed=0
if [ X"$1" = Xldd ]; then
needed=0
elif [ X"$1" = Xobjdump ]; then
needed=1
fi
#
# --- Mandrake Linux specific part
#
# --- Grab the file manifest and classify files.
filelist=`sed "s/['\"]/\\\&/g"`
exelist=`echo $filelist | xargs -r file | egrep -v ":.* (commands|script) " | \
grep ":.*executable" | cut -d: -f1`
scriptlist=`echo $filelist | grep -v /usr/doc | grep -v /usr/share/doc | xargs -r file | \
egrep ":.* (commands|script) " | cut -d: -f1`
liblist=`echo $filelist | xargs -r file | \
grep ":.*shared object" | cut -d : -f1`
interplist=
perllist=
pythonlist=
tcllist=
#
# --- Alpha does not mark 64bit dependencies
case `uname -m` in
alpha*) mark64="" ;;
*) mark64="()(64bit)" ;;
esac
if [ "$needed" -eq 0 ]; then
#
# --- Executable dependency sonames.
for f in $exelist; do
[ -r $f -a -x $f ] || continue
lib64=`if file -L $f 2>/dev/null | \
grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
ldd $f | awk '/=>/ {
if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /libredhat-kernel.so/) {
gsub(/'\''"/,"\\&",$1);
printf "%s'$lib64'\n", $1
}
}'
done | xargs -r -n 1 basename | sort -u | grep -v 'libsafe|libfakeroot'
#
# --- Library dependency sonames.
for f in $liblist; do
[ -r $f ] || continue
lib64=`if file -L $f 2>/dev/null | \
grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
ldd $f | awk '/=>/ {
if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /libredhat-kernel.so/) {
gsub(/'\''"/,"\\&",$1);
printf "%s'$lib64'\n", $1
}
}'
done | xargs -r -n 1 basename | sort -u | grep -v 'libsafe|libfakeroot'
fi
#
# --- Perl or python deps
#
# --- Script interpreters.
for f in $scriptlist; do
[ -r $f -a -x $f ] || continue
interp=`head -1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1`
interplist="$interplist $interp"
case $interp in
*/perl) perllist="$perllist $f" ;;
esac
done
if [ -n "$interplist" ]; then
for i in `echo "$interplist" | tr '[:blank:]' \\\n | sort -u`; do
if ! rpm -qf $i --qf '%{NAME}\n' 2>/dev/null; then
echo $i
fi
done | sort -u | grep -v 'libsafe|libfakeroot'
fi
#
# --- Add perl module files to perllist.
for f in $filelist; do
[ -r $f -a "${f%.pm}" != "${f}" ] && perllist="$perllist $f"
done
#
# --- Weak symbol versions (from glibc).
[ -n "$mark64" ] && mark64="(64bit)"
for f in $liblist $exelist ; do
[ -r $f ] || continue
lib64=`if file -L $f 2>/dev/null | \
grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
objdump -p $f | awk 'BEGIN { START=0; LIBNAME=""; needed='$needed'; }
/^$/ { START=0; }
/^Dynamic Section:$/ { START=1; }
(START==1) && /NEEDED/ {
if (needed) { print $2 ; }
}
/^Version References:$/ { START=2; }
(START==2) && /required from/ {
sub(/:/, "", $3);
LIBNAME=$3;
}
(START==2) && (LIBNAME!="") && ($4!="") && (($4~/^GLIBC_*/) || ($4~/^GCC_*/)) {
print LIBNAME "(" $4 ")'$lib64'";
}
'
done | sort -u | grep -v 'libsafe|libfakeroot'
#
# --- Perl modules.
#[ -x /usr/lib/rpm/perl.req -a -n "$perllist" ] && \
# echo $perllist | tr '[:blank:]' \\n | /usr/lib/rpm/perl.req | sort -u
#
# --- Python modules.
[ -x /usr/lib/rpm/python.req -a -n "$pythonlist" ] && \
echo $pythonlist | tr '[:blank:]' \\n | /usr/lib/rpm/python.req | sort -u
#
# --- Tcl modules.
[ -x /usr/lib/rpm/tcl.req -a -n "$tcllist" ] && \
echo $tcllist | tr '[:blank:]' \\n | /usr/lib/rpm/tcl.req | sort -u
exit 0

141
glibc-post-wrapper.c Normal file
View file

@ -0,0 +1,141 @@
/* Portions derived from Fedora Core glibc_post_upgrade.c */
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <errno.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#define verbose_exec(failcode, path...) \
do \
{ \
char *const arr[] = { path, NULL }; \
vexec (failcode, arr); \
} while (0)
__attribute__((noinline)) void vexec (int failcode, char *const path[]);
__attribute__((noinline)) void says (const char *str);
__attribute__((noinline)) void sayn (long num);
__attribute__((noinline)) void message (char *const path[]);
int main(int argc, char *argv[])
{
static const char *libs[] = {
"libc.so.6",
"libm.so.6",
"libpthread.so.0",
"librt.so.1",
"libthread_db.so.1"
};
static const char *dirs[] = {
SLIBDIR "/tls"
};
int i, j, ret;
/* Remove obsolete libraries. */
for (i = 0; i < sizeof(dirs) / sizeof(dirs[0]); i++) {
for (j = 0; j < sizeof(libs) / sizeof(libs[0]); j++) {
char path[PATH_MAX], temp_path[PATH_MAX];
ret = snprintf(path, sizeof(path), "%s/%s", dirs[i], libs[j]);
if (ret < 0 || ret >= sizeof(path))
continue;
if ((ret = readlink(path, temp_path, sizeof(temp_path) - 1)) != -1) {
char resolved_path[PATH_MAX];
temp_path[ret] = '\0';
if (temp_path[0] == '/')
strcpy(resolved_path, temp_path);
else
ret = snprintf(resolved_path, sizeof(resolved_path), "%s/%s", dirs[i], temp_path);
if (ret > 0 && ret < sizeof(resolved_path))
unlink(resolved_path);
}
unlink(path);
}
}
/* Update ld.so.cache only. */
if (access("/sbin/ldconfig", X_OK) == 0)
verbose_exec(110, "/sbin/ldconfig", "/sbin/ldconfig", "-X");
/* Delegate to ash for normal %post execution. */
argv[0] = ASH_BIN;
execv(ASH_BIN, argv);
return 0;
}
void
vexec (int failcode, char *const path[])
{
pid_t pid;
int status, save_errno;
pid = vfork ();
if (pid == 0)
{
execv (path[0], path + 1);
save_errno = errno;
message (path);
says (" exec failed with errno ");
sayn (save_errno);
says ("\n");
_exit (failcode);
}
else if (pid < 0)
{
save_errno = errno;
message (path);
says (" fork failed with errno ");
sayn (save_errno);
says ("\n");
_exit (failcode + 1);
}
if (waitpid (0, &status, 0) != pid || !WIFEXITED (status))
{
message (path);
says (" child terminated abnormally\n");
_exit (failcode + 2);
}
if (WEXITSTATUS (status))
{
message (path);
says (" child exited with exit code ");
sayn (WEXITSTATUS (status));
says ("\n");
_exit (WEXITSTATUS (status));
}
}
void
says (const char *str)
{
write (1, str, strlen (str));
}
void
sayn (long num)
{
char string[sizeof (long) * 3 + 1];
char *p = string + sizeof (string) - 1;
*p = '\0';
if (num == 0)
*--p = '0';
else
while (num)
{
*--p = '0' + num % 10;
num = num / 10;
}
says (p);
}
void
message (char *const path[])
{
says ("/usr/sbin/glibc_post_upgrade: While trying to execute ");
says (path[0]);
}

2669
glibc.spec Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,27 @@
Description: unset CALL_MCOUNT for __libc_do_syscall
unset CALL_MCOUNT before __libc_do_syscall, because it only supports Thumb-2
and ARM mode, not Thumb-1; and because profiling this internal routine
is of dubious value.
Origin: https://bugs.launchpad.net/linaro-toolchain-misc/+bug/605030/+attachment/1484534/+files/libc-do-syscall.S
Author: Peter Pearse <peter.pearse@linaro.org>
Bug-Linaro: https://bugs.launchpad.net/linaro-toolchain-misc/+bug/605030
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/605030
Reviewed-by: Steve Langasek <steve.langasek@linaro.org>
Index: glibc-2.12.1/ports/sysdeps/unix/sysv/linux/arm/eabi/libc-do-syscall.S
===================================================================
--- glibc-2.12.1.orig/ports/sysdeps/unix/sysv/linux/arm/eabi/libc-do-syscall.S
+++ glibc-2.12.1/ports/sysdeps/unix/sysv/linux/arm/eabi/libc-do-syscall.S
@@ -29,6 +29,12 @@
.syntax unified
.hidden __libc_do_syscall
+/*
+ * PMP Work round for https://bugs.launchpad.net/gcc-linaro/+bug/605030
+ */
+#undef CALL_MCOUNT
+#define CALL_MCOUNT
+
ENTRY (__libc_do_syscall)
.fnstart
push {r7, lr}