mirror of
https://abf.rosa.ru/djam/glibc40.git
synced 2025-02-23 07:42:54 +00:00
Automatic import for version 2.13
This commit is contained in:
commit
f4e418c74a
47 changed files with 5521 additions and 0 deletions
8
.abf.yml
Normal file
8
.abf.yml
Normal 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
|
43
0001-x86_64-fix-for-new-memcpy-behavior.patch
Normal file
43
0001-x86_64-fix-for-new-memcpy-behavior.patch
Normal 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
766
crypt_freesec.c
Normal 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
24
crypt_freesec.h
Normal 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
|
17
glibc-2.10.1-biarch-cpp-defines.patch
Normal file
17
glibc-2.10.1-biarch-cpp-defines.patch
Normal 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
|
57
glibc-2.10.1-mdv-avx-owl-crypt.patch
Normal file
57
glibc-2.10.1-mdv-avx-owl-crypt.patch
Normal 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
|
||||
|
||||
|
||||
/*
|
127
glibc-2.10.1-mdv-owl-crypt_freesec.patch
Normal file
127
glibc-2.10.1-mdv-owl-crypt_freesec.patch
Normal 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,
|
15
glibc-2.10.1-multiarch.patch
Normal file
15
glibc-2.10.1-multiarch.patch
Normal 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
|
18
glibc-2.11.1-localedef-archive-follow-symlinks.patch
Normal file
18
glibc-2.11.1-localedef-archive-follow-symlinks.patch
Normal 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), "/"),
|
44
glibc-2.12.1-assign-global-scope-to-RFC-1918-addresses.patch
Normal file
44
glibc-2.12.1-assign-global-scope-to-RFC-1918-addresses.patch
Normal 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
38
glibc-2.12.1-fhs.patch
Normal 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/"
|
||||
|
|
@ -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
|
35
glibc-2.12.1-submitted-translit-colon.patch
Normal file
35
glibc-2.12.1-submitted-translit-colon.patch
Normal 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
|
64
glibc-2.12.2-resolve-tls.patch
Normal file
64
glibc-2.12.2-resolve-tls.patch
Normal 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;
|
||||
}
|
||||
}
|
||||
|
30
glibc-2.13-fix-compile-error.patch
Normal file
30
glibc-2.13-fix-compile-error.patch
Normal 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
32
glibc-2.13-prelink.patch
Normal 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.
|
26
glibc-2.2-nss-upgrade.patch
Normal file
26
glibc-2.2-nss-upgrade.patch
Normal 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);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
13
glibc-2.2.4-xterm-xvt.patch
Normal file
13
glibc-2.2.4-xterm-xvt.patch
Normal 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=
|
47
glibc-2.3.2-tcsetattr-kernel-bug-workaround.patch
Normal file
47
glibc-2.3.2-tcsetattr-kernel-bug-workaround.patch
Normal 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)
|
11
glibc-2.3.3-nscd-enable.patch
Normal file
11
glibc-2.3.3-nscd-enable.patch
Normal 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 \
|
30
glibc-2.3.4-i586-if-no-cmov.patch
Normal file
30
glibc-2.3.4-i586-if-no-cmov.patch
Normal 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
|
21
glibc-2.3.4-timezone.patch
Normal file
21
glibc-2.3.4-timezone.patch
Normal 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
|
57
glibc-2.3.5-biarch-utils.patch
Normal file
57
glibc-2.3.5-biarch-utils.patch
Normal 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"
|
||||
|
13
glibc-2.3.6-avx-increase_BF_FRAME.patch
Normal file
13
glibc-2.3.6-avx-increase_BF_FRAME.patch
Normal 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)
|
50
glibc-2.3.6-nsswitch.conf.patch
Normal file
50
glibc-2.3.6-nsswitch.conf.patch
Normal 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
|
14
glibc-2.3.6-ppc-build-lddlibc4.patch
Normal file
14
glibc-2.3.6-ppc-build-lddlibc4.patch
Normal 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
|
29
glibc-2.3.6-pt_BR-i18nfixes.patch
Normal file
29
glibc-2.3.6-pt_BR-i18nfixes.patch
Normal 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
|
93
glibc-2.4.90-compat-EUR-currencies.patch
Normal file
93
glibc-2.4.90-compat-EUR-currencies.patch
Normal 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 */
|
11
glibc-2.4.90-gcc4-fortify.patch
Normal file
11
glibc-2.4.90-gcc4-fortify.patch
Normal 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
|
100
glibc-2.4.90-i386-hwcapinfo.patch
Normal file
100
glibc-2.4.90-i386-hwcapinfo.patch
Normal 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 */
|
132
glibc-2.4.90-i586-hptiming.patch
Normal file
132
glibc-2.4.90-i586-hptiming.patch
Normal 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 */
|
18
glibc-2.4.90-testsuite-ldbl-bits.patch
Normal file
18
glibc-2.4.90-testsuite-ldbl-bits.patch
Normal 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
|
24
glibc-2.4.90-testsuite-rt-notparallel.patch
Normal file
24
glibc-2.4.90-testsuite-rt-notparallel.patch
Normal 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
16
glibc-2.6-nice_fix.patch
Normal 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)
|
147
glibc-2.7-mdv-wrapper_handle_sha.patch
Normal file
147
glibc-2.7-mdv-wrapper_handle_sha.patch
Normal 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;
|
||||
+}
|
58
glibc-2.7-provide_CFI_for_the_outermost_function.patch
Normal file
58
glibc-2.7-provide_CFI_for_the_outermost_function.patch
Normal 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))
|
12
glibc-2.8-ENOTTY-fr-translation.patch
Normal file
12
glibc-2.8-ENOTTY-fr-translation.patch
Normal 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
|
12
glibc-2.8-nscd-init-should-start.patch
Normal file
12
glibc-2.8-nscd-init-should-start.patch
Normal 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 \
|
49
glibc-2.9-avx-relocate_fcrypt.patch
Normal file
49
glibc-2.9-avx-relocate_fcrypt.patch
Normal 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;
|
40
glibc-2.9-ldd-non-exec.patch
Normal file
40
glibc-2.9-ldd-non-exec.patch
Normal 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=$?
|
16
glibc-2.9-nscd-no-host-cache.patch
Normal file
16
glibc-2.9-nscd-no-host-cache.patch
Normal 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
|
36
glibc-2.9-share-locale.patch
Normal file
36
glibc-2.9-share-locale.patch
Normal 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
59
glibc-check.sh
Executable 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
140
glibc-find-requires.sh
Executable 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
141
glibc-post-wrapper.c
Normal 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
2669
glibc.spec
Normal file
File diff suppressed because it is too large
Load diff
27
glibc_local-syscall-mcount.diff
Normal file
27
glibc_local-syscall-mcount.diff
Normal 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}
|
Loading…
Add table
Reference in a new issue