]> git.pld-linux.org Git - packages/mdadm.git/blame - mdadm-BOOT.patch
- massive attack: source-md5
[packages/mdadm.git] / mdadm-BOOT.patch
CommitLineData
18339cab
MM
1diff -u mdadm-1.2.0/mdadm.h mdadm-1.2.0-/mdadm.h
2--- mdadm-1.2.0/mdadm.h Tue Mar 11 03:29:58 2003
3+++ mdadm-1.2.0-/mdadm.h Thu May 22 22:06:13 2003
4@@ -29,7 +29,6 @@
5
6 #define __USE_LARGEFILE64
7 #include <unistd.h>
8-extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence));
9
10 #include <sys/types.h>
11 #include <sys/stat.h>
12@@ -41,6 +40,8 @@
13 #include <errno.h>
14 #include <string.h>
15
16+#define __KERNEL_STRICT_NAMES
17+
18 #include <linux/kdev_t.h>
19 /*#include <linux/fs.h> */
20 #include <sys/mount.h>
21Only in mdadm-1.2.0-: mdadm.h.orig
22diff -u mdadm-1.2.0/util.c mdadm-1.2.0-/util.c
23--- mdadm-1.2.0/util.c Tue Feb 11 23:50:49 2003
24+++ mdadm-1.2.0-/util.c Thu May 22 22:09:03 2003
d00216b1 25@@ -30,6 +30,7 @@
18339cab 26 #include "mdadm.h"
d00216b1
MM
27 #include "md_p.h"
28 #include <sys/utsname.h>
29+#include <dirent.h>
30
31 /*
32 * Parse a 128 bit uuid in 4 integers
18339cab 33@@ -369,62 +370,78 @@
d00216b1
MM
34 /*
35 * convert a major/minor pair for a block device into a name in /dev, if possible.
36 * On the first call, walk /dev collecting name.
37- * Put them in a simple linked listfor now.
38 */
39-struct devmap {
40- int major, minor;
41- char *name;
42- struct devmap *next;
43-} *devlist = NULL;
18339cab
MM
44+
45 int devlist_ready = 0;
d00216b1
MM
46+char **devlist[256];
47
18339cab
MM
48-#ifdef UCLIBC
49-char *map_dev(int major, int minor)
d00216b1
MM
50+void collect_devs(const char *name)
51 {
18339cab
MM
52-#if 0
53- fprintf(stderr, "Warning - fail to map %d,%d to a device name\n",
54- major, minor);
55-#endif
56- return NULL;
57-}
58-#else
59-#define __USE_XOPEN_EXTENDED
60-#include <ftw.h>
61-
62-
63-int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s)
64-{
d00216b1
MM
65- if ((stb->st_mode&S_IFMT)== S_IFBLK) {
66- char *n = strdup(name);
67- struct devmap *dm = malloc(sizeof(*dm));
68- if (dm) {
69- dm->major = MAJOR(stb->st_rdev);
70- dm->minor = MINOR(stb->st_rdev);
71- dm->name = n;
72- dm->next = devlist;
73- devlist = dm;
74+ DIR *d;
75+ struct dirent *e;
76+ int n = strlen(name);
77+ char *cur;
78+ int major, minor;
79+ struct stat st;
80+
81+ chdir(name);
82+ d = opendir(".");
83+ if (d == NULL)
84+ return;
85+
86+ while ((e = readdir(d))) {
87+ stat(e->d_name, &st);
88+ if (strcmp(e->d_name, ".") == 0 || strcmp(e->d_name, "..") == 0)
89+ continue;
90+ if (!S_ISDIR(st.st_mode) && !S_ISBLK(st.st_mode))
91+ continue;
92+ cur = malloc(n + strlen(e->d_name) + 2);
93+ strcpy(cur, name);
94+ cur[n] = '/';
95+ strcpy(cur + n + 1, e->d_name);
96+ if (S_ISDIR(st.st_mode)) {
97+ lstat(name, &st);
98+ if (!S_ISLNK(st.st_mode))
99+ collect_devs(cur);
100+ free(cur);
101+ chdir(name);
102+ } else {
103+ major = MAJOR(st.st_rdev) & 0xff;
104+ minor = MINOR(st.st_rdev) & 0xff;
105+
106+ if (devlist[major] == NULL)
107+ devlist[major] = calloc(sizeof(char*), 256);
108+ /* shortest name wins, this can be quite usable
109+ * with devfs and devfsd (/dev/hdaX links)
110+ */
111+ if (devlist[major][minor] &&
112+ strlen(devlist[major][minor]) < strlen(cur))
113+ free(cur);
114+ else {
115+ free(devlist[major][minor]);
116+ devlist[major][minor] = cur;
117+ }
118+ }
119 }
120- }
121- return 0;
122+
123+ closedir(d);
124 }
125
126 char *map_dev(int major, int minor)
127 {
128- struct devmap *p;
129 if (!devlist_ready) {
130- nftw("/dev", add_dev, 10, FTW_PHYS);
131+ collect_devs("/dev");
132 devlist_ready=1;
133 }
134
135- for (p=devlist; p; p=p->next)
136- if (p->major == major &&
137- p->minor == minor)
138- return p->name;
139- return NULL;
140+ major &= 0xff;
141+ minor &= 0xff;
142+ if (devlist[major])
143+ return devlist[major][minor];
144+ else
145+ return NULL;
146 }
147
18339cab 148-#endif
d00216b1
MM
149-
150 int calc_sb_csum(mdp_super_t *super)
151 {
152 unsigned int oldcsum = super->sb_csum;
18339cab
MM
153@@ -525,3 +542,14 @@
154 if (strncmp(name, "/dev/.tmp.md", 12)==0)
155 unlink(name);
d00216b1
MM
156 }
157+
158+#ifdef __UCLIBC__
159+long long lseek64(int fd, long long off, int w)
160+{
161+ long long res;
162+
163+ llseek(fd, off >> 32, off & 0xffffffff, &res, w);
164+
165+ return res;
166+}
167+#endif
18339cab
MM
168Only in mdadm-1.2.0-: util.c.orig
169Only in mdadm-1.2.0-: util.c.rej
This page took 0.075419 seconds and 4 git commands to generate.