Lines Matching refs:rec

44 typedef int (*selabel_initfunc)(struct selabel_handle *rec,
124 int selabel_validate(struct selabel_handle *rec,
129 if (!rec->validating || contexts->validated)
142 static int selabel_fini(struct selabel_handle *rec,
148 if (rec->spec_file != NULL) {
149 path = rec->spec_file[0];
151 if (compat_validate(rec, lr, path, lr->lineno))
154 if (compat_validate(rec, lr, rec->spec_file, lr->lineno))
166 selabel_lookup_common(struct selabel_handle *rec, int translating,
176 lr = rec->func_lookup(rec, key, type);
180 if (selabel_fini(rec, lr, translating))
187 selabel_lookup_bm_common(struct selabel_handle *rec, int translating,
197 lr = rec->func_lookup_best_match(rec, key, aliases, type);
201 if (selabel_fini(rec, lr, translating))
208 static void free_spec_files(struct selabel_handle *rec)
210 if (rec->spec_file != NULL) {
211 for (int path_index = 0; path_index < rec->spec_file_nums; path_index++) {
212 if (rec->spec_file[path_index] != NULL) {
213 free(rec->spec_file[path_index]);
216 free(rec->spec_file);
229 struct selabel_handle *rec = NULL;
241 rec = (struct selabel_handle *)malloc(sizeof(*rec));
242 if (!rec)
245 memset(rec, 0, sizeof(*rec));
246 rec->backend = backend;
247 rec->validating = selabel_is_validate_set(opts, nopts);
249 rec->digest = selabel_is_digest_set(opts, nopts, rec->digest);
251 if ((*initfuncs[backend])(rec, opts, nopts)) {
252 if (rec->digest)
253 selabel_digest_fini(rec->digest);
255 free_spec_files(rec);
257 free(rec->spec_file);
259 free(rec);
260 rec = NULL;
264 return rec;
267 int selabel_lookup(struct selabel_handle *rec, char **con,
272 lr = selabel_lookup_common(rec, 1, key, type);
280 int selabel_lookup_raw(struct selabel_handle *rec, char **con,
285 lr = selabel_lookup_common(rec, 0, key, type);
293 bool selabel_partial_match(struct selabel_handle *rec, const char *key)
295 if (!rec->func_partial_match) {
303 return rec->func_partial_match(rec, key);
306 bool selabel_get_digests_all_partial_matches(struct selabel_handle *rec,
312 if (!rec->func_get_digests_all_partial_matches)
315 return rec->func_get_digests_all_partial_matches(rec, key,
321 bool selabel_hash_all_partial_matches(struct selabel_handle *rec,
323 if (!rec->func_hash_all_partial_matches) {
327 return rec->func_hash_all_partial_matches(rec, key, digest);
330 int selabel_lookup_best_match(struct selabel_handle *rec, char **con,
335 if (!rec->func_lookup_best_match) {
340 lr = selabel_lookup_bm_common(rec, 1, key, type, aliases);
348 int selabel_lookup_best_match_raw(struct selabel_handle *rec, char **con,
353 if (!rec->func_lookup_best_match) {
358 lr = selabel_lookup_bm_common(rec, 0, key, type, aliases);
375 int selabel_digest(struct selabel_handle *rec,
379 if (!rec->digest) {
384 *digest = rec->digest->digest;
386 *specfiles = rec->digest->specfile_list;
387 *num_specfiles = rec->digest->specfile_cnt;
391 void selabel_close(struct selabel_handle *rec)
393 if (rec->digest)
394 selabel_digest_fini(rec->digest);
395 rec->func_close(rec);
397 free_spec_files(rec);
399 free(rec->spec_file);
401 free(rec);
404 void selabel_stats(struct selabel_handle *rec)
406 rec->func_stats(rec);