#####################Chmod 755 mkdir problem#########################
Ok enabling "virtual -v" and nuking /website/vuser with chmod 755 on it we
have:
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: deliver_mailbox[2]:
recip te...@test2.com deliver te...@test2.com
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: dict_mysql_get_active:
attempting to connect to host unix:/tmp/mysql.sock
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: dict_mysql: successful
connection to host unix:/tmp/mysql.sock
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: dict_mysql: successful
query from host unix:/tmp/mysql.sock
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: dict_mysql_lookup:
retrieved 1 rows
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: maps_find:
virtual_mailbox_maps:
mysql:/usr/local/etc/postfix/mysql_mailbox.cf(0,lock|no_regsub|no_proxy|no_unauth):
te...@test2.com = test2.com/test2/Maildir/
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: mail_addr_find:
te...@test2.com -> test2.com/test2/Maildir/
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: dict_mysql_get_active:
attempting to connect to host unix:/tmp/mysql.sock
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: dict_mysql: successful
connection to host unix:/tmp/mysql.sock
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: dict_mysql: successful
query from host unix:/tmp/mysql.sock
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: dict_mysql_lookup:
retrieved 1 rows
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: maps_find:
virtual_uid_maps:
mysql:/usr/local/etc/postfix/mysql_uids.cf(0,lock|no_regsub|no_proxy|no_unauth):
te...@test2.com = 2003
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: mail_addr_find:
te...@test2.com -> 2003
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: dict_mysql_get_active:
attempting to connect to host unix:/tmp/mysql.sock
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: dict_mysql: successful
connection to host unix:/tmp/mysql.sock
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: dict_mysql: successful
query from host unix:/tmp/mysql.sock
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: dict_mysql_lookup:
retrieved 1 rows
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: maps_find:
virtual_gid_maps:
mysql:/usr/local/etc/postfix/mysql_gids.cf(0,lock|no_regsub|no_proxy|no_unauth):
te...@test2.com = 2001
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: mail_addr_find:
te...@test2.com -> 2001
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: deliver_mailbox[2]: set
user_attr: /website/vuser/test2.com/test2/Maildir/, uid = 2003, gid = 2001
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: deliver_maildir[3]:
recip te...@test2.com deliver te...@test2.com
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: set_eugid: euid 2003
egid 2001
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: set_eugid: euid 125 egid
125
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: warning: maildir access
problem for UID/GID=2003/2001: create maildir file
/website/vuser/test2.com/test2/Maildir/tmp/1291172927.P25625.sunsaturn.com:
Permission denied
Nov 30 21:08:47 sunsaturn postfix/virtual[25625]: warning: perhaps you
need to create the maildirs in advance
#####################Chmod 777 GID problem#########################
lets go back to chmod 777 /website/vuser and check GID issues:
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: deliver_mailbox[2]:
recip te...@test2.com deliver te...@test2.com
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: dict_mysql_get_active:
attempting to connect to host unix:/tmp/mysql.sock
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: dict_mysql: successful
connection to host unix:/tmp/mysql.sock
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: dict_mysql: successful
query from host unix:/tmp/mysql.sock
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: dict_mysql_lookup:
retrieved 1 rows
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: maps_find:
virtual_mailbox_maps:
mysql:/usr/local/etc/postfix/mysql_mailbox.cf(0,lock|no_regsub|no_proxy|no_unauth):
te...@test2.com = test2.com/test2/Maildir/
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: mail_addr_find:
te...@test2.com -> test2.com/test2/Maildir/
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: dict_mysql_get_active:
attempting to connect to host unix:/tmp/mysql.sock
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: dict_mysql: successful
connection to host unix:/tmp/mysql.sock
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: dict_mysql: successful
query from host unix:/tmp/mysql.sock
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: dict_mysql_lookup:
retrieved 1 rows
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: maps_find:
virtual_uid_maps:
mysql:/usr/local/etc/postfix/mysql_uids.cf(0,lock|no_regsub|no_proxy|no_unauth):
te...@test2.com = 2003
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: mail_addr_find:
te...@test2.com -> 2003
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: dict_mysql_get_active:
attempting to connect to host unix:/tmp/mysql.sock
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: dict_mysql: successful
connection to host unix:/tmp/mysql.sock
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: dict_mysql: successful
query from host unix:/tmp/mysql.sock
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: dict_mysql_lookup:
retrieved 1 rows
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: maps_find:
virtual_gid_maps:
mysql:/usr/local/etc/postfix/mysql_gids.cf(0,lock|no_regsub|no_proxy|no_unauth):
te...@test2.com = 2001
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: mail_addr_find:
te...@test2.com -> 2001
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: deliver_mailbox[2]: set
user_attr: /website/vuser/test2.com/test2/Maildir/, uid = 2003, gid = 2001
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: deliver_maildir[3]:
recip te...@test2.com deliver te...@test2.com
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: set_eugid: euid 2003
egid 2001
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: set_eugid: euid 125 egid
125
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: 6FE80119C5B:
to=<te...@test2.com>, relay=virtual, delay=0.06, delays=0.03/0.02/0/0.01,
dsn=2.0.0, status=sent (delivered to maildir)
Nov 30 21:13:24 sunsaturn postfix/virtual[25712]: deliver_request_final:
send: "" 0
src/virtual/mailbox.c:deliver_maildir():
set_eugid(usr_attr.uid, usr_attr.gid);
/* Creates files, writes data, ... */
I can only think there is an issue here with usr_attr.gid for GID problem.
For creating initial directory it should set_eugid(0,0); create
directory then change permissions on it because how are we suppose to not
777 the directory if everytime it creates a new file in there its owned by
uid 2002 then 2003 then 2004 and so on...
Code is fine way it is except for initial creation.
Another note: I beleive you made a typo?
src/virtual/mailbox.c:deliver_maildir():
should be src/virtual/maildir.c:deliver_maildir():
Lets modify src/virtual/maildir.c to just touch a /tmp/file after
set_eugid(usr_attr.uid, usr_attr.gid);
by placing
system("/usr/bin/touch /tmp/gid_debug.txt");
right after and see what /tmp/gid_debug.txt looks like.
sunsaturn:/usr/ports/mail/postfix-current# echo test|mail te...@test2.com
sunsaturn:/usr/ports/mail/postfix-current# ls -al /tmp/gid*
-rw------- 1 2003 wheel 0 Nov 30 21:54 /tmp/gid_debug.txt
sunsaturn:/usr/ports/mail/postfix-current#
so we definately have an issue with usr_attr.gid here somewhere.
for your own reference:
sunsaturn:/website/vuser# tmp=$(mktemp /tmp/test.XXXXXX)
sunsaturn:/website/vuser# chown 2003:2001 "$tmp"
sunsaturn:/website/vuser# ls -l "$tmp"
-rw------- 1 2003 vuser 0 Nov 30 21:19 /tmp/test.Kev8V1
sunsaturn:/website/vuser# rm "$tmp"
Dan.
On Tue, 30 Nov 2010, Victor Duchovni wrote:
On Tue, Nov 30, 2010 at 07:39:39PM -0600, Dan wrote:
virtual_gid_maps = mysql:$config_directory/mysql_gids.cf
virtual_minimum_uid = 2002
virtual_uid_maps = mysql:$config_directory/mysql_uids.cf
Mysql relevant table entries:
email domain maildir
te...@test.com test2.com test2.com/test2/Maildir/
uid gid
2003 2001
And in /etc/group, what is group 2001?
Now lets chmod 777 /website/vuser so that it can create directories under
UID/GID=2003/2001 as it wants but in fact see that gid never is 2001.
Gid 2001 under my system is vuser:
sunsaturn:~# grep 2001 /etc/group
vuser:*:2001:
Prove this by posting the output of:
# tmp=$(mktemp /tmp/test.XXXXXX)
# chown 2003:2001 "$tmp"
# ls -l "$tmp"
# rm "$tmp"
sunsaturn:~# chmod 777 /website/vuser; cd /website/vuser
Never use world-writable directories in this context.
Nov 30 19:28:03 sunsaturn postfix/virtual[23237]: DC276119C60:
to=<te...@test2.com>, relay=virtual, delay=0.01, delays=0.01/0/0/0,
dsn=2.0.0, status=sent (delivered to maildir)
Nov 30 19:29:03 sunsaturn postfix/virtual[23237]: 3EA8C119C56:
to=<te...@test2.com>, relay=virtual, delay=372, delays=372/0/0/0,
dsn=2.0.0, status=sent (delivered to maildir)
-rw------- 1 2003 postfix 347 Nov 30 19:28
test2.com/test2/Maildir/new/1291166883.V59Ib97008M906598.sunsaturn.com
-rw------- 1 2003 postfix 347 Nov 30 19:29
test2.com/test2/Maildir/new/1291166943.V59Ib97001M911353.sunsaturn.com
Well Postfix asks the operating system nicely by setting its effective
uid and gid. If the operating system does not cooperate, you need to
find out why.
src/virtual/mailbox.c:deliver_mailbox():
/* Look up the mailbox owner rights. Defer in case of trouble. */
uid_res = mail_addr_find(virtual_uid_maps, state.msg_attr.user,
IGNORE_EXTENSION);
if (uid_res == 0) { /* error handling */ }
if ((n = atol(uid_res)) < var_virt_minimum_uid) { /* error handling */ }
usr_attr.uid = (uid_t) n;
/* Look up the mailbox group rights. Defer in case of trouble. */
gid_res = mail_addr_find(virtual_gid_maps, state.msg_attr.user,
IGNORE_EXTENSION);
if (gid_res == 0) { /* error handling */ }
if ((n = atol(gid_res)) <= 0) { /* error handling */ }
usr_attr.gid = (gid_t) n;
if (msg_verbose)
msg_info("%s[%d]: set user_attr: %s, uid = %u, gid = %u",
myname, state.level, usr_attr.mailbox,
(unsigned) usr_attr.uid, (unsigned) usr_attr.gid);
You can configure "virtual -v" in master.cf to see the uid/gid logged.
/* Deliver to mailbox or to maildir. */
#define LAST_CHAR(s) (s[strlen(s) - 1])
if (LAST_CHAR(usr_attr.mailbox) == '/')
*statusp = deliver_maildir(state, usr_attr);
else
*statusp = deliver_mailbox_file(state, usr_attr);
src/virtual/mailbox.c:deliver_maildir():
set_eugid(usr_attr.uid, usr_attr.gid);
/* Creates files, writes data, ... */
set_eugid(var_owner_uid, var_owner_gid);
--
Viktor.