예제 #1
0
int semanage_user_exists(semanage_handle_t * handle,
			 const semanage_user_key_t * key, int *response)
{

	dbase_config_t *dconfig = semanage_user_dbase_policy(handle);
	return dbase_exists(handle, dconfig, key, response);
}
예제 #2
0
int semanage_user_list(semanage_handle_t * handle,
		       semanage_user_t *** records, unsigned int *count)
{

	dbase_config_t *dconfig = semanage_user_dbase_policy(handle);
	return dbase_list(handle, dconfig, records, count);
}
예제 #3
0
int semanage_user_count(
	semanage_handle_t* handle,
	unsigned int* response) {

	dbase_config_t* dconfig = semanage_user_dbase_policy(handle);
	return dbase_count(handle, dconfig, response);
}
예제 #4
0
int semanage_user_iterate(semanage_handle_t * handle,
			  int (*handler) (const semanage_user_t * record,
					  void *varg), void *handler_arg)
{

	dbase_config_t *dconfig = semanage_user_dbase_policy(handle);
	return dbase_iterate(handle, dconfig, handler, handler_arg);
}
예제 #5
0
int semanage_user_query(semanage_handle_t * handle,
			const semanage_user_key_t * key,
			semanage_user_t ** response)
{

	dbase_config_t *dconfig = semanage_user_dbase_policy(handle);
	return dbase_query(handle, dconfig, key, response);
}
예제 #6
0
static int semanage_direct_disconnect(semanage_handle_t *sh) {
	/* destroy transaction */
	if (sh->is_in_transaction) {
		/* destroy sandbox */
		if (semanage_remove_directory(semanage_path(SEMANAGE_TMP, SEMANAGE_TOPLEVEL)) < 0) {
			ERR(sh, "Could not cleanly remove sandbox %s.", semanage_path(SEMANAGE_TMP, SEMANAGE_TOPLEVEL));
			return -1;
		}
		semanage_release_trans_lock(sh);
	}

	/* Release object databases: local modifications */
	user_base_file_dbase_release(semanage_user_base_dbase_local(sh));
	user_extra_file_dbase_release(semanage_user_extra_dbase_local(sh));
	user_join_dbase_release(semanage_user_dbase_local(sh));
	port_file_dbase_release(semanage_port_dbase_local(sh));
	iface_file_dbase_release(semanage_iface_dbase_local(sh));
	bool_file_dbase_release(semanage_bool_dbase_local(sh));
	fcontext_file_dbase_release(semanage_fcontext_dbase_local(sh));
	seuser_file_dbase_release(semanage_seuser_dbase_local(sh));
	node_file_dbase_release(semanage_node_dbase_local(sh));

	/* Release object databases: local modifications + policy */
	user_base_policydb_dbase_release(semanage_user_base_dbase_policy(sh));
	user_extra_file_dbase_release(semanage_user_extra_dbase_policy(sh));
	user_join_dbase_release(semanage_user_dbase_policy(sh));
	port_policydb_dbase_release(semanage_port_dbase_policy(sh));
	iface_policydb_dbase_release(semanage_iface_dbase_policy(sh));
	bool_policydb_dbase_release(semanage_bool_dbase_policy(sh));
	fcontext_file_dbase_release(semanage_fcontext_dbase_policy(sh));
	seuser_file_dbase_release(semanage_seuser_dbase_policy(sh));
	node_policydb_dbase_release(semanage_node_dbase_policy(sh));

	/* Release object databases: active kernel policy */
	bool_activedb_dbase_release(semanage_bool_dbase_active(sh));

	return 0;
}
예제 #7
0
/* Check that the module store exists, creating it if necessary.
 */
int semanage_direct_connect(semanage_handle_t *sh) {
	char polpath[PATH_MAX];

	snprintf(polpath, PATH_MAX, "%s%s", selinux_path(), sh->conf->store_path);
	
	if (semanage_check_init(polpath))
		goto err;

	if (sh->create_store)
		if (semanage_create_store(sh, 1))
			goto err;

	if (semanage_access_check(sh) < SEMANAGE_CAN_READ) 
		goto err;

	sh->u.direct.translock_file_fd = -1;
	sh->u.direct.activelock_file_fd = -1;

	/* set up function pointers */
	sh->funcs = &direct_funcs;

        /* Object databases: local modifications */
	if (user_base_file_dbase_init(sh, 
		semanage_fname(SEMANAGE_USERS_BASE_LOCAL),
		semanage_user_base_dbase_local(sh)) < 0)
		goto err;

	if (user_extra_file_dbase_init(sh, 
		semanage_fname(SEMANAGE_USERS_EXTRA_LOCAL),
		semanage_user_extra_dbase_local(sh)) < 0)
		goto err;

	if (user_join_dbase_init(sh,
		semanage_user_base_dbase_local(sh),
		semanage_user_extra_dbase_local(sh),
		semanage_user_dbase_local(sh)) < 0)
		goto err;

	if (port_file_dbase_init(sh, 
		semanage_fname(SEMANAGE_PORTS_LOCAL), 
		semanage_port_dbase_local(sh)) < 0)
		goto err;

	if (iface_file_dbase_init(sh, 
		semanage_fname(SEMANAGE_INTERFACES_LOCAL),
		semanage_iface_dbase_local(sh)) < 0)
		goto err;

	if (bool_file_dbase_init(sh, 
		semanage_fname(SEMANAGE_BOOLEANS_LOCAL),
		semanage_bool_dbase_local(sh)) < 0)
		goto err;

	if (fcontext_file_dbase_init(sh, 
		semanage_fname(SEMANAGE_FC_LOCAL), 
		semanage_fcontext_dbase_local(sh)) < 0)
		goto err;

	if (seuser_file_dbase_init(sh, 
		semanage_fname(SEMANAGE_SEUSERS_LOCAL),
		semanage_seuser_dbase_local(sh)) < 0)
		goto err;

	if (node_file_dbase_init(sh, 
		semanage_fname(SEMANAGE_NODES_LOCAL),
		semanage_node_dbase_local(sh)) < 0)
		goto err;

	/* Object databases: local modifications + policy */
	if (user_base_policydb_dbase_init(sh, 
		semanage_user_base_dbase_policy(sh)) < 0)
		goto err;

	if (user_extra_file_dbase_init(sh, 
		semanage_fname(SEMANAGE_USERS_EXTRA), 
		semanage_user_extra_dbase_policy(sh)) < 0)
		goto err;

	if (user_join_dbase_init(sh, 
		semanage_user_base_dbase_policy(sh),
		semanage_user_extra_dbase_policy(sh),
		semanage_user_dbase_policy(sh)) < 0)
		goto err;

	if (port_policydb_dbase_init(sh, semanage_port_dbase_policy(sh)) < 0)
		goto err;

	if (iface_policydb_dbase_init(sh, semanage_iface_dbase_policy(sh)) < 0)
		goto err;

	if (bool_policydb_dbase_init(sh, semanage_bool_dbase_policy(sh)) < 0)
		goto err;

	if (fcontext_file_dbase_init(sh, 
		semanage_fname(SEMANAGE_FC), 
		semanage_fcontext_dbase_policy(sh)) < 0)
		goto err;

	if (seuser_file_dbase_init(sh, 
		semanage_fname(SEMANAGE_SEUSERS), 
		semanage_seuser_dbase_policy(sh)) < 0)
		goto err;

	if (node_policydb_dbase_init(sh, semanage_node_dbase_policy(sh)) < 0)
		goto err;

	/* Active kernel policy */
	if (bool_activedb_dbase_init(sh, semanage_bool_dbase_active(sh)) < 0)
		goto err;

	return STATUS_SUCCESS;

	err:
	ERR(sh, "could not establish direct connection");
	sepol_handle_destroy(sh->sepolh);
	return STATUS_ERR;
}