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

.SH "NAME" 
semanage_seuser \- Linux UID to SELinux User Management API

.SH "SYNOPSIS"
.B #include <semanage/seuser_record.h>
.br
.B #include <semanage/seusers_policy.h>
.br
.B #include <semanage/seusers_local.h>

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

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

.SH "Record API Overview"

.HP 
.BR semanage_seuser_create "(3)" \- 
.br
create a seuser

.HP
.BR semanage_seuser_free "(3)" \-
.br
release resources for this seuser

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

.HP
.BR semanage_seuser_key_free "(3)" \-
.br
release resources for this seuser key

.HP
.BR semanage_seuser_key_extract "(3)" \- 
.br
create a key matching this seuser 

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

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

.HP
.BR semanage_seuser_compare2 "(3)" \-
.br
compare this seuser to another

.SH "Properties API Overview"

.HP
.BR semanage_seuser_get_name "(3)" \- 
.br
return the name of this seuser

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

.HP
.BR semanage_seuser_get_sename "(3)" \-
.br
return the name of the (SELinux) user mapped to this seuser

.HP
.BR semanage_user_set_sename "(3)" \-
.br
set the name of the (SELinux) user mapped to this seuser

.HP
.BR semanage_user_get_mlsrange "(3)" \-
.br
return a 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

.SH "Record Store API Overview"

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

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

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

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

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

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

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

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

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

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

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

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