56 lines
1.7 KiB
Diff
56 lines
1.7 KiB
Diff
# HG changeset patch
|
|
# User Timo Sirainen <tss@iki.fi>
|
|
# Date 1289937106 0
|
|
# Node ID eeaf30cfad368fd0311b87d874f2d5b27a504e0f
|
|
# Parent f78260c108b0d86e5aa746e7e98a8015b8f691e7
|
|
Fixed home=/home/./user style chrooting to work again.
|
|
|
|
--- a/src/lib-storage/mail-storage-service.c Tue Nov 16 19:32:51 2010 +0000
|
|
+++ b/src/lib-storage/mail-storage-service.c Tue Nov 16 19:51:46 2010 +0000
|
|
@@ -167,7 +167,9 @@
|
|
const struct auth_user_reply *reply,
|
|
const char **error_r)
|
|
{
|
|
- const char *const *str, *line;
|
|
+ const char *home = reply->home;
|
|
+ const char *chroot = reply->chroot;
|
|
+ const char *const *str, *line, *p;
|
|
unsigned int i, count;
|
|
int ret = 0;
|
|
|
|
@@ -181,18 +183,26 @@
|
|
if (reply->gid != (uid_t)-1)
|
|
set_keyval(ctx, user, "mail_gid", dec2str(reply->gid));
|
|
|
|
- if (reply->home != NULL)
|
|
+ if (home != NULL && chroot == NULL &&
|
|
+ *user->user_set->valid_chroot_dirs != '\0' &&
|
|
+ (p = strstr(home, "/./")) != NULL) {
|
|
+ /* wu-ftpd like <chroot>/./<home> - check only if there's even
|
|
+ a possibility of using them (non-empty valid_chroot_dirs) */
|
|
+ chroot = t_strdup_until(home, p);
|
|
+ home = p + 2;
|
|
+ }
|
|
+
|
|
+ if (home != NULL)
|
|
set_keyval(ctx, user, "mail_home", reply->home);
|
|
|
|
- if (reply->chroot != NULL) {
|
|
- if (!validate_chroot(user->user_set, reply->chroot)) {
|
|
+ if (chroot != NULL) {
|
|
+ if (!validate_chroot(user->user_set, chroot)) {
|
|
*error_r = t_strdup_printf(
|
|
"userdb returned invalid chroot directory: %s "
|
|
- "(see valid_chroot_dirs setting)",
|
|
- reply->chroot);
|
|
+ "(see valid_chroot_dirs setting)", chroot);
|
|
return -1;
|
|
}
|
|
- set_keyval(ctx, user, "mail_chroot", reply->chroot);
|
|
+ set_keyval(ctx, user, "mail_chroot", chroot);
|
|
}
|
|
|
|
str = array_get(&reply->extra_fields, &count);
|
|
|
|
|