dovecot-2.0: eacces_error_get*(): Show current directory if path...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Jul 8 20:51:07 EEST 2009
details: http://hg.dovecot.org/dovecot-2.0/rev/f564209e9396
changeset: 9589:f564209e9396
user: Timo Sirainen <tss at iki.fi>
date: Wed Jul 08 13:50:32 2009 -0400
description:
eacces_error_get*(): Show current directory if path is relative.
diffstat:
1 file changed, 11 insertions(+), 3 deletions(-)
src/lib/eacces-error.c | 14 +++++++++++---
diffs (39 lines):
diff -r a1dfbec72a6f -r f564209e9396 src/lib/eacces-error.c
--- a/src/lib/eacces-error.c Tue Jul 07 23:53:18 2009 -0400
+++ b/src/lib/eacces-error.c Wed Jul 08 13:50:32 2009 -0400
@@ -83,17 +83,24 @@ static const char *
static const char *
eacces_error_get_full(const char *func, const char *path, bool creating)
{
- const char *prev_path = path, *dir = "/", *p;
+ const char *prev_path = path, *dir, *p;
const struct passwd *pw;
const struct group *group;
string_t *errmsg;
struct stat st, dir_st;
+ char cwd[PATH_MAX];
int orig_errno, ret = -1;
orig_errno = errno;
errmsg = t_str_new(256);
- str_printfa(errmsg, "%s(%s) failed: Permission denied (euid=%s",
- func, path, dec2str(geteuid()));
+ str_printfa(errmsg, "%s(%s)", func, path);
+ if (*path != '/') {
+ dir = getcwd(cwd, sizeof(cwd));
+ if (dir != NULL)
+ str_printfa(errmsg, " in directory %s", dir);
+ }
+ str_printfa(errmsg, " failed: Permission denied (euid=%s",
+ dec2str(geteuid()));
pw = getpwuid(geteuid());
if (pw != NULL)
@@ -104,6 +111,7 @@ eacces_error_get_full(const char *func,
if (group != NULL)
str_printfa(errmsg, "(%s)", group->gr_name);
+ dir = "/";
while ((p = strrchr(prev_path, '/')) != NULL) {
dir = t_strdup_until(prev_path, p);
ret = stat(dir, &st);
More information about the dovecot-cvs
mailing list