2002-10-15 16:08:49

by Juan Gomez

[permalink] [raw]
Subject: Patch to enable rmtab's that are symbolic links


has anyone had anytime to look into this? could anyone include it in the
distribution?

Juan

----- Forwarded by Juan Gomez/Almaden/IBM on 10/15/02 09:09 AM -----

Juan Gomez
<[email protected] To: [email protected]
u> cc: Juan Gomez/Almaden/IBM@IBMUS
Subject: Patch to enable rmtab's that are symbolic links
10/12/02 01:06 AM






In clustered NAS environments we have found useful to support
symbolic links to the rmtab files. I would like to propose the following
patch for review and future inclusion on nfs-utils so that this feature
can be supported.

Regards, Juan

diff -ur nfs-utils/utils/mountd/rmtab.c
nfs-utils-new-mountd/utils/mountd/rmtab.c
--- nfs-utils/utils/mountd/rmtab.c Wed May 31 17:57:13 2000
+++ nfs-utils-new-mountd/utils/mountd/rmtab.c Sat Oct 12 07:54:01
2002
@@ -8,7 +8,9 @@

#include "config.h"

+#include <sys/types.h>
#include <sys/stat.h>
+#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
@@ -18,6 +20,40 @@
#include "xio.h"
#include "mountd.h"

+#include <limits.h> /* PATH_MAX */
+
+/* If new path is a link do not destroy it but place the
+ * file where the link points.
+ */
+
+static int
+slink_safe_rename(const char * oldpath, const char * newpath)
+{
+ int r;
+ struct stat s;
+ char slink_path[PATH_MAX];
+ char real_newpath = newpath;
+
+ if((lstat(newpath, &s) == 0) && (S_ISLNK(s.st_mode))) {
+
+ /* New path is a symbolic link, do not destroy but follow */
+
+ if((r = readlink(newpath, slink_path, PATH_MAX))==-1) {
+
+ return -1;
+
+ }
+
+ slink_path[ (r < PATH_MAX) ? (r + 1) : (PATH_MAX - 1)] = '\0';
+
+ real_newpath = slink_path;
+
+ }
+
+ return rename(oldpath, real_newpath);
+
+}/* static int slink_safe_rename() */
+
void
mountlist_add(nfs_export *exp, const char *path)
{
@@ -82,7 +118,7 @@
if (!match || rep->r_count)
fputrmtabent(fp, rep, NULL);
}
- if (rename(_PATH_RMTABTMP, _PATH_RMTAB) < 0) {
+ if (slink_safe_rename(_PATH_RMTABTMP, _PATH_RMTAB) < 0) {
xlog(L_ERROR, "couldn't rename %s to %s",
_PATH_RMTABTMP,
_PATH_RMTAB);
}
@@ -130,7 +166,7 @@
}
fputrmtabent(fp, rep, NULL);
}
- if (rename(_PATH_RMTABTMP, _PATH_RMTAB) < 0) {
+ if (slink_safe_rename(_PATH_RMTABTMP, _PATH_RMTAB) < 0) {
xlog(L_ERROR, "couldn't rename %s to %s",
_PATH_RMTABTMP,
_PATH_RMTAB);
}






-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs


2002-10-15 16:35:39

by H. J. Lu

[permalink] [raw]
Subject: Re: Patch to enable rmtab's that are symbolic links

On Tue, Oct 15, 2002 at 09:07:12AM -0700, Juan Gomez wrote:
>
> has anyone had anytime to look into this? could anyone include it in the
> distribution?
>
> Juan
>

I checked it into CVS. Please check it out.

Thanks.


H.J.


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs

2002-10-15 17:14:45

by Juan Gomez

[permalink] [raw]
Subject: Re: Patch to enable rmtab's that are symbolic links






Thanks a lot H.J.


Juan




"H. J. Lu"
<[email protected]> To: Juan Gomez/Almaden/IBM@IBMUS
cc: [email protected]
10/15/02 09:35 AM Subject: Re: [NFS] Patch to enable rmtab's that are symbolic links






On Tue, Oct 15, 2002 at 09:07:12AM -0700, Juan Gomez wrote:
>
> has anyone had anytime to look into this? could anyone include it in the
> distribution?
>
> Juan
>

I checked it into CVS. Please check it out.

Thanks.


H.J.





-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs