if (cwd->do_chdir) {
int _fail = restore_cwd(cwd, NULL, NULL);
free_cwd(cwd);
- if (_fail)
+ if (_fail) {
return 1;
+ }
}
return 0;
}
(indicating success) and will set *CREATED_DIR_P to zero. */
static int
-make_dir(void *jcr, const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
+make_dir(JCR *jcr, const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
{
int fail = 0;
int created_dir;
+ int save_errno;
Dmsg2(300, "make_dir mode=%o dir=%s\n", mode, dir);
created_dir = (mkdir(dir, mode) == 0);
+ save_errno = errno;
if (!created_dir) {
struct stat stats;
would fail with EEXIST. */
if (stat(dir, &stats)) {
- Jmsg(jcr, M_ERROR, 0, "Cannot create directory %s: %s\n",
- dirpath, strerror(errno));
+ Jmsg(jcr, M_ERROR, 0, _("Cannot create directory %s: ERR=%s\n"),
+ dirpath, strerror(save_errno));
fail = 1;
} else if (!S_ISDIR(stats.st_mode)) {
- Jmsg(jcr, M_ERROR, 0, "%s exists but is not a directory\n", quote(dirpath));
+ Jmsg(jcr, M_ERROR, 0, _("%s exists but is not a directory\n"), quote(dirpath));
fail = 1;
} else {
/* DIR (aka DIRPATH) already exists and is a directory. */
int
make_path(
- void *jcr,
+ JCR *jcr,
const char *argpath,
int mode,
int parent_mode,
char *dirpath;
/* Temporarily relax umask in case it's overly restrictive. */
- mode_t oldmask = umask (0);
+ mode_t oldmask = umask(0);
/* Make a copy of ARGPATH that we can scribble NULs on. */
dirpath = (char *)alloca(strlen(argpath) + 1);
or should have set[ug]id or sticky bits set and we are setting
their owners, we need to fix their permissions after making them. */
if (((parent_mode & WX_USR) != WX_USR)
- || ((owner != (uid_t) -1 || group != (gid_t) -1)
- && (parent_mode & (S_ISUID | S_ISGID | S_ISVTX)) != 0))
- {
- tmp_mode = S_IRWXU;
- re_protect = 1;
- }
- else {
- tmp_mode = parent_mode;
- re_protect = 0;
+ || ((owner != (uid_t)-1 || group != (gid_t)-1)
+ && (parent_mode & (S_ISUID | S_ISGID | S_ISVTX)) != 0)) {
+ tmp_mode = S_IRWXU;
+ re_protect = 1;
+ } else {
+ tmp_mode = parent_mode;
+ re_protect = 0;
}
/* If we can record the current working directory, we may be able
if (newly_created_dir) {
Dmsg0(300, "newly_created_dir\n");
- if (verbose_fmt_string) {
- Jmsg(jcr, M_ERROR, 0, verbose_fmt_string, quote(dirpath));
- }
- if ((owner != (uid_t) -1 || group != (gid_t) -1)
- && chown (basename_dir, owner, group)
+ if ((owner != (uid_t)-1 || group != (gid_t)-1)
+ && chown(basename_dir, owner, group)
#if defined(AFS) && defined (EPERM)
&& errno != EPERM
#endif
) {
- Jmsg(jcr, M_ERROR, 0, "Cannot change owner and/or group of %s: %s\n",
- quote (dirpath), strerror(errno));
- umask(oldmask);
- cleanup(&cwd);
- return 1;
+ /* Note, if we are restoring as NON-root, this may not be fatal */
+ Jmsg(jcr, M_ERROR, 0, _("Cannot change owner and/or group of %s: ERR=%s\n"),
+ quote(dirpath), strerror(errno));
}
Dmsg0(300, "Chown done.\n");
if (re_protect) {
struct ptr_list *pnew = (struct ptr_list *)
- alloca (sizeof (struct ptr_list));
+ alloca(sizeof (struct ptr_list));
pnew->dirname_end = slash;
pnew->next = leading_dirs;
leading_dirs = pnew;
creating an entry in that directory. This avoids making
stat and mkdir process O(n^2) file name components. */
if (cwd.do_chdir && chdir(basename_dir) < 0) {
- Jmsg(jcr, M_ERROR, 0, "Cannot chdir to directory, %s: %s\n",
- quote (dirpath), strerror(errno));
+ Jmsg(jcr, M_ERROR, 0, _("Cannot chdir to directory, %s: ERR=%s\n"),
+ quote(dirpath), strerror(errno));
umask(oldmask);
cleanup(&cwd);
return 1;
}
/* Done creating directories. Restore original umask. */
- umask (oldmask);
+ umask(oldmask);
- if (verbose_fmt_string != NULL) {
- Jmsg(jcr, M_ERROR, 0, verbose_fmt_string, dirpath);
- }
-
- if (owner != (uid_t) -1 || group != (gid_t) -1) {
+ if (owner != (uid_t)-1 || group != (gid_t)-1) {
if (chown(basename_dir, owner, group)
#ifdef AFS
&& errno != EPERM
#endif
)
{
- Jmsg(jcr, M_ERROR, 0, "Cannot change owner and/or group of %s: %s\n",
- quote (dirpath), strerror(errno));
- retval = 1;
+ Jmsg(jcr, M_ERROR, 0, _("Cannot change owner and/or group of %s: ERR=%s\n"),
+ quote(dirpath), strerror(errno));
}
}
Dmsg1(300, "Final chmod mode=%o\n", mode);
}
if ((mode & ~S_IRWXUGO) && chmod(basename_dir, mode)) {
- Jmsg(jcr, M_ERROR, 0, "Cannot change permissions of %s: %s\n",
+ Jmsg(jcr, M_ERROR, 0, _("Cannot change permissions of %s: ERR=%s\n"),
quote(dirpath), strerror(errno));
- retval = 1;
}
- if (cleanup(&cwd))
+ if (cleanup(&cwd)) {
return 1;
+ }
/* If the mode for leading directories didn't include owner "wx"
privileges, we have to reset their protections to the correct
*(p->dirname_end) = '\0';
Dmsg2(300, "Reset parent mode=%o dir=%s\n", parent_mode, dirpath);
if (chmod(dirpath, parent_mode)) {
- Jmsg(jcr, M_ERROR, 0, "Cannot change permissions of %s: %s\n",
+ Jmsg(jcr, M_ERROR, 0, _("Cannot change permissions of %s: ERR=%s\n"),
quote (dirpath), strerror(errno));
- retval = 1;
}
}
} else {
const char *dirpath = argpath;
if (!S_ISDIR(stats.st_mode)) {
- Jmsg(jcr, M_ERROR, 0, "%s exists but is not a directory\n", quote(dirpath));
+ Jmsg(jcr, M_ERROR, 0, _("%s exists but is not a directory\n"), quote(dirpath));
return 1;
}
On System V, users can give away files with chown and then not
be able to chmod them. So don't give files away. */
- if ((owner != (uid_t) -1 || group != (gid_t) -1)
+ if ((owner != (uid_t)-1 || group != (gid_t)-1)
&& chown(dirpath, owner, group)
#ifdef AFS
&& errno != EPERM
#endif
- )
- {
- Jmsg(jcr, M_ERROR, 0, "Cannot change owner and/or group of %s: %s\n",
+ ) {
+ Jmsg(jcr, M_ERROR, 0, _("Cannot change owner and/or group of %s: ERR=%s\n"),
quote(dirpath), strerror(errno));
- retval = 1;
}
if (chmod(dirpath, mode)) {
- Jmsg(jcr, M_ERROR, 0, "Cannot change permissions of %s: %s\n",
+ Jmsg(jcr, M_ERROR, 0, _("Cannot change permissions of %s: ERR=%s\n"),
quote(dirpath), strerror(errno));
- retval = 1;
}
Dmsg2(300, "pathexists chmod mode=%o dir=%s\n", mode, dirpath);
}