diff options
| author | Andre Noll <maan@systemlinux.org> | 2008-12-23 23:14:34 +0100 |
|---|---|---|
| committer | Andre Noll <maan@systemlinux.org> | 2008-12-23 23:14:34 +0100 |
| commit | 1b6ecb6d4ea35cbc9ab77dddaaa8a68b7436d019 (patch) | |
| tree | c2ebc3166c99985b9573c08f676cd599c57747c8 | |
| parent | f3b245ab25dbcf1ba18dc7c99d2e599128a90229 (diff) | |
| parent | a883830b42e84c58233efcf05c16e9aa4bb7597f (diff) | |
Merge commit 'fml/master'
| -rw-r--r-- | README | 2 | ||||
| -rw-r--r-- | dss.c | 23 |
2 files changed, 20 insertions, 5 deletions
@@ -9,7 +9,7 @@ sparse or snapshots become older than the specified time. dss is also user-friendly because users can browse the snapshot directories without admin intervention and see the contents of the file system at the various times a snapshot was taken. In particular, users -can easily restore accidently removed files by using their favorite +can easily restore accidentally removed files by using their favorite file browser to simply copy files from the snapshot directory back to the live system. @@ -175,13 +175,13 @@ static void compute_next_snapshot_time(void) tmp.tv_sec = x; tmp.tv_usec = 0; ret = tv_diff(&unit_interval, &tmp, &diff); /* total sleep time per unit interval */ - gettimeofday(&now, NULL); - if (ret < 0 || !s) + if (ret < 0 || !s) /* unit_interval < tmp or no snapshot */ goto min_sleep; tv_divide(wanted, &diff, &tmp); /* sleep time betweeen two snapshots */ - diff.tv_sec = s->completion_time; + diff.tv_sec = s->completion_time; /* completion time of the the latest snaphot */ diff.tv_usec = 0; tv_add(&diff, &tmp, &next_snapshot_time); + gettimeofday(&now, NULL); if (tv_diff(&now, &next_snapshot_time, NULL) < 0) goto out; min_sleep: @@ -695,6 +695,21 @@ out: return ret; } +/* + * We can not use rsync locally if the local user is different from the remote + * user or if the src dir is not on the local host (or both). + */ +static int use_rsync_locally(char *logname) +{ + char *h = conf.remote_host_arg; + + if (strcmp(h, "localhost") && strcmp(h, "127.0.0.1")) + return 0; + if (conf.remote_user_given && strcmp(conf.remote_user_arg, logname)) + return 0; + return 1; +} + static void create_rsync_argv(char ***argv, int64_t *num) { char *logname, *newest; @@ -718,7 +733,7 @@ static void create_rsync_argv(char ***argv, int64_t *num) } else DSS_INFO_LOG("no previous snapshot found\n"); logname = dss_logname(); - if (conf.remote_user_given && !strcmp(conf.remote_user_arg, logname)) + if (use_rsync_locally(logname)) (*argv)[i++] = dss_strdup(conf.source_dir_arg); else (*argv)[i++] = make_message("%s@%s:%s/", conf.remote_user_given? |
