* on the Fri, May 25, 2007 at 02:31:54PM +0100, John Robinson wrote:

> I'm trying to get the name of the owner of a file, because I want to run 
> spamassassin as that user (one real user per domain, basically). I 
> started with
>    address_data = ${extract{uid} 
> {${stat:/etc/mail/domains/$domain/mailboxes}} {$value} fail}
> but of course that gets me the uid, not the user name. I've looked and I 
> don't see any expansion method of turning a uid into a username, and a 
> grep of the source doesn't point up any calls to getpwuid() in 
> likely-looking places. So then I've tried
>    address_data = ${run{stat -c %U /etc/mail/domains/$domain/mailboxes} 
> {$value} fail}
> which seems to fail, then in desperation
>    address_data = ${run{bash -c "stat -c %U 
> /etc/mail/domains/$domain/mailboxes"} {$value} fail}
> which is no better. The following is the result of testing with `exim -v 
> -d+all -bv`, firstly without bash:

I don't know if there's a nice solution. If your users are locally
stored in /etc/passwd you can grab the uid via stat and then look them
up from /etc/passwd using a ${readfile} and some regex's. The horrifying
solution:

Figure out the owner of the "/etc/passwd" file and the "/etc/openvpn"
dir:

[EMAIL PROTECTED]:~$ ls -l /etc/passwd
-rw-r--r-- 1 root root 1858 2007-05-25 07:34 /etc/passwd
[EMAIL PROTECTED]:~$ ls -ld /etc/openvpn
drwx------ 5 openvpn openvpn 4096 2007-05-02 20:52 /etc/openvpn
[EMAIL PROTECTED]:~$
[EMAIL PROTECTED]:~$ /usr/sbin/exim -be
> ${if 
> match{${sg{${readfile{/etc/passwd}}}{\n}{|}}}{^(.*\\|)?([^:]+):[^:]*:${extract{uid}{${stat:/etc/passwd}}}:}{$2}{UNKNOWN}}
root
> ${if 
> match{${sg{${readfile{/etc/passwd}}}{\n}{|}}}{^(.*\\|)?([^:]+):[^:]*:${extract{uid}{${stat:/etc/openvpn}}}:}{$2}{UNKNOWN}}
openvpn

Mike

-- 
## List details at http://www.exim.org/mailman/listinfo/exim-users 
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://www.exim.org/eximwiki/

Reply via email to