bool uid_wrapper_enabled(void)
{
- uwrap_init();
-
- return uwrap.enabled ? true : false;
- UWRAP_UNLOCK(uwrap_id);
+ bool enabled = false;
+ #ifdef HAVE_GCC_ATOMIC_BUILTINS
+ __atomic_load(&uwrap.enabled, &enabled, __ATOMIC_RELAXED);
+ #else
+ UWRAP_LOCK(uwrap_id);
+ enabled = uwrap.enabled;
+ UWRAP_UNLOCK(uwrap_id);
+ #endif
+ return enabled;
}
static int uwrap_setresuid_thread(uid_t ruid, uid_t euid, uid_t suid)
return libc_setuid(uid);
}
+ uwrap_init();
return uwrap_setresuid(uid, -1, -1);
}
return libc_seteuid(euid);
}
+ uwrap_init();
return uwrap_setresuid(-1, euid, -1);
}
#endif
return libc_setreuid(ruid, euid);
}
+ uwrap_init();
return uwrap_setresuid(ruid, euid, -1);
}
#endif
return libc_setresuid(ruid, euid, suid);
}
+ uwrap_init();
return uwrap_setresuid(ruid, euid, suid);
}
#endif
return libc_getuid();
}
+ uwrap_init();
return uwrap_getuid();
}
return libc_geteuid();
}
+ uwrap_init();
return uwrap_geteuid();
}
return libc_setgid(gid);
}
+ uwrap_init();
return uwrap_setresgid(gid, -1, -1);
}
return libc_setegid(egid);
}
+ uwrap_init();
return uwrap_setresgid(-1, egid, -1);
}
#endif
return libc_setregid(rgid, egid);
}
+ uwrap_init();
return uwrap_setresgid(rgid, egid, -1);
}
#endif
return libc_setresgid(rgid, egid, sgid);
}
+ uwrap_init();
return uwrap_setresgid(rgid, egid, sgid);
}
#endif
return libc_getgid();
}
+ uwrap_init();
return uwrap_getgid();
}
return libc_getegid();
}
+ uwrap_init();
return uwrap_getegid();
}
return libc_setgroups(size, list);
}
+ uwrap_init();
return uwrap_setgroups(size, list);
}
return libc_getgroups(size, list);
}
+ uwrap_init();
return uwrap_getgroups(size, list);
}
return rc;
}
+ uwrap_init();
rc = uwrap_syscall(sysno, va);
va_end(va);
pthread_atfork(&uwrap_thread_prepare,
&uwrap_thread_parent,
&uwrap_thread_child);
+
+ /* Here is safe place to call uwrap_init() and initialize data
+ * for main process.
+ */
+ uwrap_init();
}
/****************************