147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner/* 247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner * This file describes the internal interface used by the labeler 347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner * for calling the user-supplied memory allocation, validation, 447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner * and locking routine. 547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner * 647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner * Author : Eamon Walsh <ewalsh@epoch.ncsc.mil> 747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner */ 847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#ifndef _SELABEL_INTERNAL_H_ 947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#define _SELABEL_INTERNAL_H_ 1047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner 1147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <stdlib.h> 1247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <stdarg.h> 1347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <selinux/selinux.h> 1447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <selinux/label.h> 1547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include "dso.h" 1647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner 1747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner/* 1847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner * Installed backends 1947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner */ 2047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerint selabel_file_init(struct selabel_handle *rec, const struct selinux_opt *opts, 2147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner unsigned nopts) hidden; 2247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerint selabel_media_init(struct selabel_handle *rec, const struct selinux_opt *opts, 2347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner unsigned nopts) hidden; 2447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerint selabel_x_init(struct selabel_handle *rec, const struct selinux_opt *opts, 2547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner unsigned nopts) hidden; 2647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerint selabel_db_init(struct selabel_handle *rec, 2747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner const struct selinux_opt *opts, unsigned nopts) hidden; 2847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerint selabel_property_init(struct selabel_handle *rec, 2947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner const struct selinux_opt *opts, unsigned nopts) hidden; 3047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner 3147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner/* 3247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner * Labeling internal structures 3347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner */ 3447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerstruct selabel_sub { 3547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner char *src; 3647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner int slen; 3747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner char *dst; 3847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner struct selabel_sub *next; 3947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner}; 4047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner 4147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerstruct selabel_lookup_rec { 4247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner char * ctx_raw; 4347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner char * ctx_trans; 4447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner int validated; 4547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner}; 4647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner 4747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerstruct selabel_handle { 4847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner /* arguments that were passed to selabel_open */ 4947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner unsigned int backend; 5047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner int validating; 5147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner 5247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner /* labeling operations */ 5347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner struct selabel_lookup_rec *(*func_lookup) (struct selabel_handle *h, 5447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner const char *key, int type); 5547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner void (*func_close) (struct selabel_handle *h); 5647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner void (*func_stats) (struct selabel_handle *h); 5747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner bool (*func_partial_match) (struct selabel_handle *h, const char *key); 5847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner 5947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner /* supports backend-specific state information */ 6047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner void *data; 6147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner 6247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner /* substitution support */ 6347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner struct selabel_sub *subs; 6447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner}; 6547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner 6647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner/* 6747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner * Validation function 6847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner */ 6947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerextern int 7047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerselabel_validate(struct selabel_handle *rec, 7147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner struct selabel_lookup_rec *contexts) hidden; 7247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner 7347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#endif /* _SELABEL_INTERNAL_H_ */ 74