changeset 9212:6d7f6ea02e17 HEAD

eacces_error_get*(): Show current directory if path is relative.
author Timo Sirainen <tss@iki.fi>
date Wed, 08 Jul 2009 13:50:32 -0400
parents 219ee9858156
children 5cc26d4fc00f
files src/lib/eacces-error.c
diffstat 1 files changed, 11 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/eacces-error.c	Tue Jul 07 23:52:06 2009 -0400
+++ b/src/lib/eacces-error.c	Wed Jul 08 13:50:32 2009 -0400
@@ -83,17 +83,24 @@
 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 @@
 	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);