@@ -17,15 +17,33 @@
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#ifdef NO_MEDIA_BACKEND
+#define CONFIG_MEDIA_BACKEND(fnptr) NULL
+#else
+#define CONFIG_MEDIA_BACKEND(fnptr) &fnptr
+#endif
+
+#ifdef NO_X_BACKEND
+#define CONFIG_X_BACKEND(fnptr) NULL
+#else
+#define CONFIG_X_BACKEND(fnptr) &fnptr
+#endif
+
+#ifdef NO_DB_BACKEND
+#define CONFIG_DB_BACKEND(fnptr) NULL
+#else
+#define CONFIG_DB_BACKEND(fnptr) &fnptr
+#endif
+
typedef int (*selabel_initfunc)(struct selabel_handle *rec,
const struct selinux_opt *opts,
unsigned nopts);
static selabel_initfunc initfuncs[] = {
&selabel_file_init,
- &selabel_media_init,
- &selabel_x_init,
- &selabel_db_init,
+ CONFIG_MEDIA_BACKEND(selabel_media_init),
+ CONFIG_X_BACKEND(selabel_x_init),
+ CONFIG_DB_BACKEND(selabel_db_init),
&selabel_property_init,
};
@@ -325,6 +343,11 @@ struct selabel_handle *selabel_open(unsigned int backend,
goto out;
}
+ if (!initfuncs[backend]) {
+ errno = ENOTSUP;
+ goto out;
+ }
+
rec = (struct selabel_handle *)malloc(sizeof(*rec));
if (!rec)
goto out;