#include "rsync.h"
extern int verbose;
-extern int suffix_specified;
+extern int backup_suffix_len;
+extern int backup_dir_len;
extern char *backup_suffix;
extern char *backup_dir;
-
extern int am_root;
extern int preserve_devices;
extern int preserve_links;
static int make_simple_backup(char *fname)
{
char fnamebak[MAXPATHLEN];
- if (strlen(fname) + strlen(backup_suffix) > (MAXPATHLEN-1)) {
+ if (strlen(fname) + backup_suffix_len > MAXPATHLEN-1) {
rprintf(FERROR, "backup filename too long\n");
return 0;
}
do_mkdir(fullpath, 0777 & ~orig_umask);
if(p>q) {
if(do_lstat(q, &st) != 0) {
- rprintf(FERROR, "make_bak_dir stat %s : %s\n", fullpath, strerror(errno));
+ rprintf(FERROR, "make_bak_dir stat %s failed: %s\n",
+ full_fname(fullpath), strerror(errno));
} else {
st2 = &st;
set_modtime(fullpath, st2->st_mtime);
if(do_lchown(fullpath, st2->st_uid, st2->st_gid) != 0) {
- rprintf(FERROR, "make_bak_dir chown %s : %s\n", fullpath, strerror(errno));
+ rprintf(FERROR, "make_bak_dir chown %s failed: %s\n",
+ full_fname(fullpath), strerror(errno));
}
if(do_chmod(fullpath, st2->st_mode) != 0) {
- rprintf(FERROR, "make_bak_dir failed to set permissions on %s : %s\n", fullpath, strerror(errno));
+ rprintf(FERROR, "make_bak_dir failed to set permissions on %s: %s\n",
+ full_fname(fullpath), strerror(errno));
}
}
}
break;
/* no directory to write to */
case ENOENT:
- make_dir (dst, 0755);
+ make_dir(dst, 0700);
keep_trying--;
break;
default:
int ret_code;
if (!initialised) {
- if (backup_dir[strlen(backup_dir) - 1] == '/')
- backup_dir[strlen(backup_dir) - 1] = 0;
+ if (backup_dir_len && backup_dir[backup_dir_len - 1] == '/')
+ backup_dir[--backup_dir_len] = '\0';
if (verbose > 0)
rprintf (FINFO, "backup_dir is %s\n", backup_dir);
initialised = 1;
if (!file) return 1;
/* make a complete pathname for backup file */
- if (strlen(backup_dir) + strlen(fname) +
- (suffix_specified ? strlen(backup_suffix) : 0) > (MAXPATHLEN - 1)) {
+ if (backup_dir_len+strlen(fname)+backup_suffix_len > MAXPATHLEN-1) {
rprintf (FERROR, "keep_backup filename too long\n");
return 0;
}
- if (suffix_specified) {
- snprintf(keep_name, sizeof (keep_name), "%s/%s%s",
- backup_dir, fname, backup_suffix);
- } else {
- snprintf(keep_name, sizeof (keep_name), "%s/%s",
- backup_dir, fname);
- }
-
+ snprintf(keep_name, sizeof (keep_name), "%s/%s%s",
+ backup_dir, fname, backup_suffix);
#ifdef HAVE_MKNOD
/* Check to see if this is a device file, or link */
if(am_root && preserve_devices) {
make_bak_dir(fname, backup_dir);
if(do_mknod(keep_name, file->mode, file->rdev) != 0) {
- rprintf(FERROR, "mknod %s : %s\n",
- keep_name, strerror(errno));
+ rprintf(FERROR, "mknod %s failed: %s\n",
+ full_fname(keep_name), strerror(errno));
} else if(verbose>2) {
- rprintf(FINFO, "make_backup : DEVICE %s successful.\n", fname);
+ rprintf(FINFO, "make_backup: DEVICE %s successful.\n", fname);
}
}
kept = 1;
ret_code = do_rmdir(fname);
if(verbose>2) {
- rprintf(FINFO, "make_backup : RMDIR %s returns %i\n",
- fname, ret_code);
+ rprintf(FINFO, "make_backup: RMDIR %s returns %i\n",
+ full_fname(fname), ret_code);
}
kept = 1;
}
if (safe_symlinks && unsafe_symlink(file->link, keep_name)) {
if (verbose) {
rprintf(FINFO, "ignoring unsafe symlink %s -> %s\n",
- keep_name, file->link);
+ full_fname(keep_name), file->link);
}
kept = 1;
}
make_bak_dir(fname, backup_dir);
if(do_symlink(file->link, keep_name) != 0) {
rprintf(FERROR, "link %s -> %s : %s\n",
- keep_name, file->link, strerror(errno));
+ full_fname(keep_name), file->link, strerror(errno));
}
do_unlink(fname);
kept = 1;
/* move to keep tree if a file */
if(!kept) {
if (!robust_move (fname, keep_name)) {
- rprintf(FERROR, "keep_backup failed %s -> %s : %s\n",
- fname, keep_name, strerror(errno));
+ rprintf(FERROR, "keep_backup failed: %s -> \"%s\": %s\n",
+ full_fname(fname), keep_name, strerror(errno));
}
}
set_perms (keep_name, file, NULL, 0);