summaryrefslogtreecommitdiffstats
path: root/debian/patches/porting/NSS-Fix-FTBFS-on-Hurd-because-of-MAXPATHLEN.patch
blob: a5436936789bca72560542e450951181b3f9c623 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
From: Mike Hommey <mh@glandium.org>
Date: Mon, 13 Jan 2014 12:00:25 +0900
Subject: [NSS] Fix FTBFS on Hurd because of MAXPATHLEN

---
 security/nss/cmd/shlibsign/shlibsign.c | 21 ++++++++++++++++-----
 security/nss/lib/freebl/unix_rand.c    |  4 ++++
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/security/nss/cmd/shlibsign/shlibsign.c b/security/nss/cmd/shlibsign/shlibsign.c
index ad8f3b8..c33f2c9 100644
--- a/security/nss/cmd/shlibsign/shlibsign.c
+++ b/security/nss/cmd/shlibsign/shlibsign.c
@@ -725,7 +725,6 @@ main(int argc, char **argv)
 #ifdef USES_LINKS
     int ret;
     struct stat stat_buf;
-    char link_buf[MAXPATHLEN + 1];
     char *link_file = NULL;
 #endif
 
@@ -1068,10 +1067,22 @@ main(int argc, char **argv)
     }
     if (S_ISLNK(stat_buf.st_mode)) {
         char *dirpath, *dirend;
-        ret = readlink(input_file, link_buf, sizeof(link_buf) - 1);
-        if (ret < 0) {
-            perror(input_file);
-            goto cleanup;
+        char *link_buf = NULL;
+        size_t size = 64;
+        while (1) {
+            link_buf = realloc(link_buf, size);
+            if (!link_buf) {
+                perror(input_file);
+                goto cleanup;
+            }
+            ret = readlink(input_file, link_buf, size - 1);
+            if (ret < 0) {
+                perror(input_file);
+                goto cleanup;
+            }
+            if (ret < size - 1)
+                break;
+            size *= 2;
         }
         link_buf[ret] = 0;
         link_file = mkoutput(input_file);
diff --git a/security/nss/lib/freebl/unix_rand.c b/security/nss/lib/freebl/unix_rand.c
index 24381cb..f5520f0 100644
--- a/security/nss/lib/freebl/unix_rand.c
+++ b/security/nss/lib/freebl/unix_rand.c
@@ -843,6 +843,10 @@ RNG_FileForRNG(const char *fileName)
 #define _POSIX_PTHREAD_SEMANTICS
 #include <dirent.h>
 
+#ifndef PATH_MAX
+#define PATH_MAX 1024
+#endif
+
 PRBool
 ReadFileOK(char *dir, char *file)
 {