*/
if (packet_global_init() < 0) return -1;
+ fr_suid_up = rad_suid_up;
+ fr_suid_down = rad_suid_down;
+
return 0;
}
* Free xlat instance data, and call any detach methods
*/
xlat_instances_free();
+
+ fr_suid_up = fr_suid_noop;
+ fr_suid_down = fr_suid_noop;
}
return p_p;
}
+
+/*
+ * Trampoline points for wrapping rad_suid_up() and rad_suid_down().
+ */
+void fr_suid_noop(void)
+{
+}
+
+fr_suid_t fr_suid_up = fr_suid_noop;
+fr_suid_t fr_suid_down = fr_suid_noop;
char const *fr_filename(char const *path);
char const *fr_filename_common_trim(char const *path, char const *common);
+/*
+ * Some libraries need to call suid up/down, except that those are functions in the server, and we don't
+ * want to link everything to the server library. As a result, we include trampoline functions which do
+ * nothing, but which can be over-written by the server when is starts.
+ */
+typedef void (*fr_suid_t)(void);
+
+void fr_suid_noop(void);
+extern fr_suid_t fr_suid_up;
+extern fr_suid_t fr_suid_down;
+
#ifdef __cplusplus
}
#endif