.TH semanage_user 3 "16 March 2006" "ivg2@cornell.edu" "Libsemanage API documentation"

.SH "NAME" 
semanage_user \- SELinux User Management API

.SH "SYNOPSIS"
.B #include <semanage/user_record.h>
.br
.B #include <semanage/users_policy.h>
.br
.B #include <semanage/users_local.h>

.PP
This object contains properties associated with a SELinux user. 
Typically many Unix users are mapped to the same SELinux user. See 
.BR semanage_seuser "(3)"
for overview of the Unix user API. 

.PP
For details on a specific function, see its manual page.

.SH "Record API Overview"

.HP 
.BR semanage_user_create "(3)" \- 
.br
create a user 

.HP
.BR semanage_user_free "(3)" \-
.br
release resources for this user

.HP
.BR semanage_user_key_create "(3)" \-
.br
create a key, which can be used to identify a user

.HP
.BR semanage_user_key_free "(3)" \-
.br
release resources for this user key

.HP
.BR semanage_user_key_extract "(3)" \- 
.br
create a key matching this user

.HP
.BR semanage_user_clone "(3)" \- 
.br
create an identical user (deep-copy clone)

.HP
.BR semanage_user_compare "(3)" \- 
.br
compare this user to the provided key

.HP
.BR semanage_user_compare2 "(3)" \-
.br
compare this user to another

.SH "Properties API Overview"

.HP
.BR semanage_user_get_name "(3)" \- 
.br
return the name of this user

.HP
.BR semanage_user_set_name "(3)" \-
.br
set the name of this user

.HP
.BR semanage_user_get_prefix "(3)" \-
.br
return the labeling prefix for this user, used to control the contexts of user directories

.HP
.BR semanage_user_set_prefix "(3)" \-
.br
set the labeling prefix for this user

.HP
.BR semanage_user_get_mlslevel "(3)" \-
.br
return the default MLS level, which is assigned to this user at login time

.HP
.BR semanage_user_set_mlslevel "(3)" \-
.br
set the default MLS level

.HP
.BR semanage_user_get_mlsrange "(3)" \-
.br
return the range of valid MLS sensitivities and categories for this user

.HP
.BR semanage_user_set_mlsrange "(3)" \-
.br
set the range of valid MLS sensitivities and categories for this user

.HP
.BR semanage_user_add_role "(3)" \-
.br
add a role to the user's list of valid roles

.HP
.BR semanage_user_del_role "(3)" \-
.br
remove a role from the user's list of valid roles

.HP
.BR semanage_user_has_role "(3)" \-
.br
check if a role is valid for this user

.HP
.BR semanage_user_get_num_roles "(3)" \-
.br
return the number of valid roles for this user

.HP
.BR semanage_user_get_roles "(3)" \-
.br
return an array containing the roles for this user

.HP
.BR semanage_user_set_roles "(3)" \-
set the roles for this user

.SH "Record Store API Overview"

.HP
.BR semanage_user_modify_local "(3)" \- 
.br
add or update a user in the local store

.HP
.BR semanage_user_del_local "(3)" \-
.br
delete a user from the local store

.HP
.BR semanage_user_exists "(3)" \-
.br
check if a user is defined in the persistent policy

.HP
.BR semanage_user_exists_local "(3)" \-
.br
check if a user is defined in the local store

.HP
.BR semanage_user_query "(3)" \-
.br
query a user in the persistent policy

.HP
.BR semanage_user_query_local "(3)" \- 
.br
query a user in the local store

.HP
.BR semanage_user_count "(3)" \-
.br
count the number of users defined in the persistent policy

.HP
.BR semanage_user_count_local "(3)" \-
.br
count the number of users defined in the local store

.HP
.BR semanage_user_iterate "(3)" \-
.br
execute a callback for each user in the persistent policy

.HP
.BR semanage_user_iterate_local "(3)" \-
.br
execute a callback for each user in the local store

.HP
.BR semanage_user_list "(3)" \-
.br
return an array containing all users in the persistent policy

.HP
.BR semanage_user_list_local "(3)" \-
.br
return an array containing all users in the local store
