Write-only option
Jurij Smakov
jurij.smakov at telia.com
Sun Feb 24 00:14:57 EST 2002
Hi!
I am doing backups from a number of machines to an rsync server. For some
time I was trying to come up with a solution, which would prevent users
from peeking at each other's files, which are backed up. Finally, I've
hacked rsync, introducing a new option "write only" for rsyncd.conf. When
set to true, this option forbids the transfers from server to the client,
thus solving my problems. Below is a patch against rsync-2.5.2 which
implements those changes. Hopefully, somebody else will find it useful. I
apologize, if that's the wrong list to post such stuff.
--Cut here----------------------------------------------------------------
diff -urN rsync-2.5.2.orig/loadparm.c rsync-2.5.2/loadparm.c
--- rsync-2.5.2.orig/loadparm.c Sun Dec 2 09:16:15 2001
+++ rsync-2.5.2/loadparm.c Sat Feb 23 13:48:12 2002
@@ -117,6 +117,7 @@
char *comment;
char *lock_file;
BOOL read_only;
+ BOOL write_only;
BOOL list;
BOOL use_chroot;
BOOL transfer_logging;
@@ -149,6 +150,7 @@
NULL, /* comment */
DEFAULT_LOCK_FILE, /* lock file */
True, /* read only */
+ False, /* write only */
True, /* list */
True, /* use chroot */
False, /* transfer logging */
@@ -265,6 +267,7 @@
{"lock file", P_STRING, P_LOCAL, &sDefault.lock_file, NULL, 0},
{"path", P_STRING, P_LOCAL, &sDefault.path, NULL, 0},
{"read only", P_BOOL, P_LOCAL, &sDefault.read_only, NULL, 0},
+ {"write only", P_BOOL, P_LOCAL, &sDefault.write_only, NULL, 0},
{"list", P_BOOL, P_LOCAL, &sDefault.list, NULL, 0},
{"use chroot", P_BOOL, P_LOCAL, &sDefault.use_chroot, NULL, 0},
{"ignore nonreadable",P_BOOL, P_LOCAL, &sDefault.ignore_nonreadable, NULL, 0},
@@ -342,6 +345,7 @@
FN_LOCAL_STRING(lp_path, path)
FN_LOCAL_STRING(lp_lock_file, lock_file)
FN_LOCAL_BOOL(lp_read_only, read_only)
+FN_LOCAL_BOOL(lp_write_only, write_only)
FN_LOCAL_BOOL(lp_list, list)
FN_LOCAL_BOOL(lp_use_chroot, use_chroot)
FN_LOCAL_BOOL(lp_transfer_logging, transfer_logging)
diff -urN rsync-2.5.2.orig/main.c rsync-2.5.2/main.c
--- rsync-2.5.2.orig/main.c Fri Jan 25 11:07:41 2002
+++ rsync-2.5.2/main.c Sat Feb 23 13:49:38 2002
@@ -306,10 +306,19 @@
extern int relative_paths;
extern int recurse;
extern int remote_version;
+ extern int am_daemon;
+ extern int module_id;
+ extern int am_sender;
if (verbose > 2)
rprintf(FINFO,"server_sender starting pid=%d\n",(int)getpid());
+ if (am_daemon && lp_write_only(module_id) && am_sender) {
+ rprintf(FERROR,"ERROR: module is write only\n");
+ exit_cleanup(RERR_SYNTAX);
+ return;
+ }
+
if (!relative_paths && !push_dir(dir, 0)) {
rprintf(FERROR,"push_dir %s: %s (3)\n",dir,strerror(errno));
exit_cleanup(RERR_FILESELECT);
diff -urN rsync-2.5.2.orig/proto.h rsync-2.5.2/proto.h
--- rsync-2.5.2.orig/proto.h Sat Jan 26 00:07:33 2002
+++ rsync-2.5.2/proto.h Sat Feb 23 13:48:12 2002
@@ -125,6 +125,7 @@
char *lp_path(int );
char *lp_lock_file(int );
BOOL lp_read_only(int );
+BOOL lp_write_only(int );
BOOL lp_list(int );
BOOL lp_use_chroot(int );
BOOL lp_transfer_logging(int );
--Cut here----------------------------------------------------------------
Best regards,
Jurij.
More information about the rsync
mailing list