mirror of
https://gitlab.freedesktop.org/libbsd/libbsd.git
synced 2025-10-14 15:05:39 +02:00
Move setproctitle() automatic initialization to its own library
The automatic initialization cannot be part of the main shared library, because there is no thread-safe way to change the environ global variable. This is not a problem if the initializaion happens just at program load time, but becomes one if the shared library is directly or indirectly dlopen()ed during the execution of the program, which could have either kept references to the old environ or could change it in some other thread. This has been observed for example on systems using Samba NSS modules. To avoid any other possible fallout, the constructor is split into a new static library that needs to be linked explicitly into programs using setproctitle(). As an additional safety measure the pkg-config linker flags will mark the program as not allowing to be dlopen()ed so that we avoid the problem described above. Reported-by: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=66679
This commit is contained in:
@@ -56,6 +56,10 @@ void *setmode(const char *mode_str);
|
||||
|
||||
void closefrom(int lowfd);
|
||||
|
||||
/* Compatibility with sendmail implementations. */
|
||||
#define initsetproctitle(c, a, e) setproctitle_init((c), (a), (e))
|
||||
|
||||
void setproctitle_init(int argc, char *argv[], char *envp[]);
|
||||
void setproctitle(const char *fmt, ...);
|
||||
|
||||
int getpeereid(int s, uid_t *euid, gid_t *egid);
|
||||
|
Reference in New Issue
Block a user