Wietse Venema via Postfix-users:
> Maybe you can solve the root cause: fix the broken permission.
> 
> Otherwise, consider running Postfix with an LD_PRELOAD as shown below. 
> 
> /etc/ld.so.preload:
>     /etc/postfix/preload.so
> 
> Where preload.so intercepts fopen(), inspects the argument, and
> then calls the real fopen(). 

This has system-wide impact, i.e. it will affect every (native-code)
program, not just Postfix.

The /etc/postfix/preload.so may not be appropriate for a system-wide
preload.

You may want to test this in a VM first, otherwise you might end
up with an unusable system.

        Wietse

> Below is untested preload code. You may also have to redirect
> fopen64.
> 
> The code was used in a system to police all libc calls that have a
> pathname argument.
> 
> https://www.ndss-symposium.org/ndss2010/where-do-you-want-go-today-escalating-privileges-pathname-manipulation/
> 
>       Wietse
> 
> /* preload.c  - build with: cc -fpic -shared -o preload.so preload.c */
> 
> #include <sys/types.h>
> #include <dlfcn.h>
> #include <stdio.h>
> #include <fcntl.h>
> #include <stdarg.h>
> #include <stdlib.h>
> 
> static FILE *(*_real_fopen) (const char *, const char *);
> 
> /* fopen - redirect /proc/net/if_inet6" to "/etc/postfix/proc_inet_if_inet6" 
> */
> 
> FILE   *fopen(const char *path, const char *mode)
> {
>     if (path == "/proc/net/if_inet6")
>       path = "/etc/postfix/proc_inet_if_inet6";
>     if (_real_fopen == 0)
>       _real_fopen = (FILE *(*) (const char *, const char *))
>           dlsym(RTLD_NEXT, "fopen");
>     if (_real_fopen == 0) {
>       perror("dlsym(\"fopen\")");
>       return (0);
>     }
>     return _real_fopen(path, mode);
> }
> _______________________________________________
> Postfix-users mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
> 
_______________________________________________
Postfix-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to