maildir.c mods:

msg_info("TESTING1 set_eugid: euid %ld egid %ld", (long) usr_attr.uid, (long) usr_attr.gid);
    set_eugid(usr_attr.uid, usr_attr.gid);
msg_info("TESTING2 set_eugid: euid %ld egid %ld", (long) usr_attr.uid, (long) usr_attr.gid);


Nov 30 22:21:55 sunsaturn postfix/virtual[53617]: deliver_maildir[3]: recip te...@test2.com deliver te...@test2.com Nov 30 22:21:55 sunsaturn postfix/virtual[53617]: TESTING1 set_eugid: euid 2003 egid 2001 Nov 30 22:21:55 sunsaturn postfix/virtual[53617]: set_eugid: euid 2003 egid 2001 Nov 30 22:21:55 sunsaturn postfix/virtual[53617]: TESTING2 set_eugid: euid 2003 egid 2001 Nov 30 22:21:55 sunsaturn postfix/virtual[53617]: set_eugid: euid 125 egid 125

Appears to be a freebsd issue with GID from what I can see if this works for linux users.

Either way I was hoping for a mod on maildir.c for initial create of directory as root.

Can debug gid issue more if you like to get freebsd to play nice, but uid is only thing that will matter regardless for permissions, but be nice to fix anyways.



Dan.



On Tue, 30 Nov 2010, Dan wrote:


#####################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.


Reply via email to