]> git.pld-linux.org Git - packages/autofs.git/blob - autofs-4.1.3-bad_chdir.patch
- initscript fixes by Kacper Kornet; rel 2; STBR
[packages/autofs.git] / autofs-4.1.3-bad_chdir.patch
1 diff -Nur autofs-4.1.3.orig/daemon/automount.c autofs-4.1.3/daemon/automount.c
2 --- autofs-4.1.3.orig/daemon/automount.c        2004-04-05 21:14:10.000000000 +0800
3 +++ autofs-4.1.3/daemon/automount.c     2004-06-05 21:13:28.000000000 +0800
4 @@ -99,8 +99,11 @@
5  
6                                         if (stat(buf, &st) == 0 && !S_ISDIR(st.st_mode))
7                                                 errno = ENOTDIR;
8 -                                       else
9 -                                               continue;
10 +                                       else {
11 +                                               /* last component, return -1 */
12 +                                               if (*cp != '\0')
13 +                                                       continue;
14 +                                       }
15                                 }
16                                 return -1;
17                         }
18 @@ -1088,9 +1091,11 @@
19                         close(ap.state_pipe[0]);
20                         close(ap.state_pipe[1]);
21  
22 +                       chdir(ap.path);
23                         err = ap.lookup->lookup_mount(ap.path,
24                                                       pkt->name, pkt->len,
25                                                       ap.lookup->context);
26 +                       chdir("/");
27  
28                         /*
29                          * If at first you don't succeed, hide all
30 @@ -1163,8 +1168,11 @@
31                    it.
32                  */
33  
34 +               chdir(ap.path);
35                 ret = ap.lookup->lookup_mount(ap.path, 
36                                         name, namelen, ap.lookup->context);
37 +               chdir("/");
38 +
39                 if (ret)
40                         error("failed to recover from partial expiry of %s\n",
41                                buf);
42 diff -Nur autofs-4.1.3.orig/modules/mount_bind.c autofs-4.1.3/modules/mount_bind.c
43 --- autofs-4.1.3.orig/modules/mount_bind.c      2004-05-10 20:44:30.000000000 +0800
44 +++ autofs-4.1.3/modules/mount_bind.c   2004-06-05 18:12:38.000000000 +0800
45 @@ -107,15 +107,19 @@
46                 fullpath[i] = '\0';
47  
48         if (bind_works) {
49 -               int status;
50 +               int status, existed = 1;
51  
52                 debug(MODPREFIX "calling mkdir_path %s", fullpath);
53  
54 -               if ((status = mkdir_path(fullpath, 0555)) && errno != EEXIST) {
55 +               status = mkdir_path(fullpath, 0555);
56 +               if (status && errno != EEXIST) {
57                         error(MODPREFIX "mkdir_path %s failed: %m", fullpath);
58                         return 1;
59                 }
60  
61 +               if (!status)
62 +                       existed = 0;
63 +
64                 if (is_mounted(fullpath)) {
65                         warn("BUG: %s already mounted", fullpath);
66                         return 0;
67 @@ -130,7 +134,7 @@
68                 unlink(AUTOFS_LOCK);
69  
70                 if (err) {
71 -                       if (!ap.ghost && name_len)
72 +                       if ((!ap.ghost && name_len) || !existed)
73                                 rmdir_path(name);
74                         return 1;
75                 } else {
76 diff -Nur autofs-4.1.3.orig/modules/mount_changer.c autofs-4.1.3/modules/mount_changer.c
77 --- autofs-4.1.3.orig/modules/mount_changer.c   2004-05-10 20:44:30.000000000 +0800
78 +++ autofs-4.1.3/modules/mount_changer.c        2004-06-05 18:18:04.000000000 +0800
79 @@ -52,7 +52,7 @@
80  {
81         char *fullpath;
82         int err;
83 -       int status;
84 +       int status, existed = 1;
85  
86         fstype = "iso9660";
87  
88 @@ -80,11 +80,15 @@
89  
90         debug(MODPREFIX "calling mkdir_path %s", fullpath);
91  
92 -       if ((status = mkdir_path(fullpath, 0555)) && errno != EEXIST) {
93 +       status = mkdir_path(fullpath, 0555);
94 +       if (status && errno != EEXIST) {
95                 error(MODPREFIX "mkdir_path %s failed: %m", fullpath);
96                 return 1;
97         }
98  
99 +       if (!status)
100 +               existed = 0;
101 +
102         debug(MODPREFIX "Swapping CD to slot %s", name);
103  
104         err = swapCD(what, name);
105 @@ -111,7 +115,7 @@
106         unlink(AUTOFS_LOCK);
107  
108         if (err) {
109 -               if (!ap.ghost && name_len)
110 +               if ((!ap.ghost && name_len) || !existed)
111                         rmdir_path(name);
112  
113                 error(MODPREFIX "failed to mount %s (type %s) on %s",
114 diff -Nur autofs-4.1.3.orig/modules/mount_ext2.c autofs-4.1.3/modules/mount_ext2.c
115 --- autofs-4.1.3.orig/modules/mount_ext2.c      2004-05-10 20:44:30.000000000 +0800
116 +++ autofs-4.1.3/modules/mount_ext2.c   2004-06-05 18:23:09.000000000 +0800
117 @@ -40,7 +40,6 @@
118         return 0;
119  }
120  
121 -
122  int mount_mount(const char *root, const char *name, int name_len,
123                 const char *what, const char *fstype, const char *options, void *context)
124  {
125 @@ -48,7 +47,7 @@
126         const char *p, *p1;
127         int err, ro = 0;
128         const char *fsck_prog;
129 -       int status;
130 +       int status, existed = 1;
131  
132         fullpath = alloca(strlen(root) + name_len + 2);
133         if (!fullpath) {
134 @@ -63,11 +62,15 @@
135  
136         debug(MODPREFIX "calling mkdir_path %s", fullpath);
137  
138 -       if ((status = mkdir_path(fullpath, 0555)) && errno != EEXIST) {
139 +       status = mkdir_path(fullpath, 0555);
140 +       if (status && errno != EEXIST) {
141                 error(MODPREFIX "mkdir_path %s failed: %m", fullpath);
142                 return 1;
143         }
144  
145 +       if (!status)
146 +               existed = 0;
147 +
148         if (is_mounted(fullpath)) {
149                 error("BUG: %s already mounted", fullpath);
150                 return 0;
151 @@ -120,7 +123,7 @@
152         unlink(AUTOFS_LOCK);
153  
154         if (err) {
155 -               if (!ap.ghost && name_len)
156 +               if ((!ap.ghost && name_len) || !existed)
157                         rmdir_path(name);
158                 error(MODPREFIX "failed to mount %s (type %s) on %s",
159                       what, fstype, fullpath);
160 diff -Nur autofs-4.1.3.orig/modules/mount_generic.c autofs-4.1.3/modules/mount_generic.c
161 --- autofs-4.1.3.orig/modules/mount_generic.c   2004-05-10 20:44:30.000000000 +0800
162 +++ autofs-4.1.3/modules/mount_generic.c        2004-06-05 18:22:10.000000000 +0800
163 @@ -46,7 +46,7 @@
164  {
165         char *fullpath;
166         int err;
167 -       int status;
168 +       int status, existed = 1;
169  
170         fullpath = alloca(strlen(root) + name_len + 2);
171         if (!fullpath) {
172 @@ -61,11 +61,15 @@
173  
174         debug(MODPREFIX "calling mkdir_path %s", fullpath);
175  
176 -       if ((status = mkdir_path(fullpath, 0555)) && errno != EEXIST) {
177 +       status = mkdir_path(fullpath, 0555);
178 +       if (status && errno != EEXIST) {
179                 error(MODPREFIX "mkdir_path %s failed: %m", fullpath);
180                 return 1;
181         }
182  
183 +       if (!status)
184 +               existed = 0;
185 +
186         if (is_mounted(fullpath)) {
187                 error("BUG: %s already mounted", fullpath);
188                 return 0;
189 @@ -89,7 +93,7 @@
190         unlink(AUTOFS_LOCK);
191  
192         if (err) {
193 -               if (!ap.ghost && name_len)
194 +               if ((!ap.ghost && name_len) || !existed)
195                         rmdir_path(name);
196  
197                 error(MODPREFIX "failed to mount %s (type %s) on %s",
198 diff -Nur autofs-4.1.3.orig/modules/mount_nfs.c autofs-4.1.3/modules/mount_nfs.c
199 --- autofs-4.1.3.orig/modules/mount_nfs.c       2004-06-05 14:24:58.000000000 +0800
200 +++ autofs-4.1.3/modules/mount_nfs.c    2004-06-05 21:10:17.000000000 +0800
201 @@ -445,14 +445,19 @@
202                                whatstr, "bind", NULL, mount_bind->context);
203         } else {
204                 /* Not a local host - do an NFS mount */
205 -               int status;
206 +               int status, existed = 1;
207  
208                 debug(MODPREFIX "calling mkdir_path %s", fullpath);
209 -               if ((status = mkdir_path(fullpath, 0555)) && errno != EEXIST) {
210 +
211 +               status = mkdir_path(fullpath, 0555);
212 +               if (status && errno != EEXIST) {
213                         error(MODPREFIX "mkdir_path %s failed: %m", fullpath);
214                         return 1;
215                 }
216  
217 +               if (!status)
218 +                       existed = 0;
219 +
220                 if (is_mounted(fullpath)) {
221                         error("BUG: %s already mounted", fullpath);
222                         return 0;
223 @@ -477,8 +482,9 @@
224                 unlink(AUTOFS_LOCK);
225  
226                 if (err) {
227 -                       if (!ap.ghost && name_len)
228 +                       if ((!ap.ghost && name_len) || !existed)
229                                 rmdir_path(name);
230 +
231                         error(MODPREFIX "nfs: mount failure %s on %s",
232                               whatstr, fullpath);
233                         return 1;
This page took 0.083894 seconds and 3 git commands to generate.