selinux/libselinux/man/man3
Mike Palmiotto 05bdc03130 libselinux: use kernel status page by default
Commit bc2a8f418e ("libselinux: add selinux_status_* interfaces for
/selinux/status") introduced the sestatus mechanism, which allows for
mmap()'ing of the kernel status page as a replacement for avc_netlink.

The mechanism was initially intended for userspace object managers that
were calculating access decisions within their application and did not
rely on the libselinux AVC implementation. In order to properly make use
of sestatus within avc_has_perm(), the status mechanism needs to
properly set avc internals during status events; else, avc_enforcing is
never updated upon sestatus changes.

This commit gets rid of the default avc_netlink_open() in
avc_init_internal(), replacing it with selinux_status_open(). In the
event that the kernel status page cannot be mapped, the netlink fallback
will be used. By default, avc_has_perm_noaudit() and
selinux_check_access() will now attempt to read the kernel status page,
which removes a system call from two critical code paths.

Since the AVC thread create/stop callbacks were intended to avoid a
system call in the critical code path, they no longer need to be created
by default. In the event that the kernel status page is successfully
mapped, threads will not be created. Threads will still be
created/stopped for the sestatus fallback codepaths.

Userspace object managers that still need a netlink socket can call
avc_netlink_acquire_fd() to open and/or obtain one.

Update the manpage to reflect the new avc_netlink_acquire_fd()
functionality.

Signed-off-by: Mike Palmiotto <mike.palmiotto@crunchydata.com>
Acked-by: Stephen Smalley <stephen.smalley.work@gmail.com>
2020-08-11 08:11:40 -04:00
..
avc_add_callback.3 Fix multiple spelling errors 2016-05-02 08:45:45 -04:00
avc_audit.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
avc_av_stats.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
avc_cache_stats.3 libselinux: man: Fix man pages formatting 2013-02-05 20:14:43 -05:00
avc_cleanup.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
avc_compute_create.3 libselinux: man: Fix man pages formatting 2013-02-05 20:14:43 -05:00
avc_compute_member.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
avc_context_to_sid.3 man: standardize spacing with pointers in prototypes 2016-12-12 14:44:26 -05:00
avc_destroy.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
avc_entry_ref_init.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
avc_get_initial_context.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
avc_get_initial_sid.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
avc_has_perm_noaudit.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
avc_has_perm.3 libselinux: update man pages for userspace policy enforcers 2020-01-21 14:32:42 -05:00
avc_init.3 libselinux: use kernel status page by default 2020-08-11 08:11:40 -04:00
avc_netlink_acquire_fd.3 The attached patch enables userspace object managers to handle notification 2009-04-07 22:08:48 -04:00
avc_netlink_check_nb.3 The attached patch enables userspace object managers to handle notification 2009-04-07 22:08:48 -04:00
avc_netlink_close.3 The attached patch enables userspace object managers to handle notification 2009-04-07 22:08:48 -04:00
avc_netlink_loop.3 libselinux: use kernel status page by default 2020-08-11 08:11:40 -04:00
avc_netlink_open.3 The attached patch enables userspace object managers to handle notification 2009-04-07 22:08:48 -04:00
avc_netlink_release_fd.3 The attached patch enables userspace object managers to handle notification 2009-04-07 22:08:48 -04:00
avc_open.3 libselinux: use kernel status page by default 2020-08-11 08:11:40 -04:00
avc_reset.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
avc_sid_stats.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
avc_sid_to_context.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
checkPasswdAccess.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
context_free.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
context_new.3 libselinux: man: context_new(3): fix the return value description 2013-02-05 20:14:44 -05:00
context_range_get.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
context_range_set.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
context_role_get.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
context_role_set.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
context_type_get.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
context_type_set.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
context_user_get.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
context_user_set.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
fgetfilecon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
fgetfilecon.3 Author: Daniel J Walsh 2008-09-29 15:12:38 -04:00
fini_selinuxmnt.3 Author: Guido Trentalancia 2009-11-27 14:44:41 -05:00
freecon.3 libselinux: merge freecon with getcon man page 2011-12-21 12:35:06 -05:00
freeconary.3 libselinux: merge freecon with getcon man page 2011-12-21 12:35:06 -05:00
fsetfilecon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
fsetfilecon.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
get_default_context_with_level.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
get_default_context_with_role.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
get_default_context_with_rolelevel.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
get_default_context.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
get_default_type.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
get_ordered_context_list_with_level.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
get_ordered_context_list.3 libselinux: deprecate security_compute_user(), update man pages 2020-02-27 17:30:56 +01:00
getcon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
getcon.3 man: standardize spacing with pointers in prototypes 2016-12-12 14:44:26 -05:00
getexeccon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
getexeccon.3 man: standardize spacing with pointers in prototypes 2016-12-12 14:44:26 -05:00
getfilecon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
getfilecon.3 Get rid of security_context_t and fix const declarations. 2014-02-19 16:11:48 -05:00
getfscreatecon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
getfscreatecon.3 man: standardize spacing with pointers in prototypes 2016-12-12 14:44:26 -05:00
getkeycreatecon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
getkeycreatecon.3 man: standardize spacing with pointers in prototypes 2016-12-12 14:44:26 -05:00
getpeercon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
getpeercon.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
getpidcon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
getpidcon.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
getprevcon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
getprevcon.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
getseuserbyname.3 libselinux: man: Fix man pages formatting 2013-02-05 20:14:43 -05:00
getsockcreatecon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
getsockcreatecon.3 man: standardize spacing with pointers in prototypes 2016-12-12 14:44:26 -05:00
init_selinuxmnt.3 libselinux: man: Fix man pages formatting 2013-02-05 20:14:43 -05:00
is_context_customizable.3 man: standardize spacing with pointers in prototypes 2016-12-12 14:44:26 -05:00
is_selinux_enabled.3 libselinux: drop error return from is_selinux_enabled documentation 2020-02-18 10:38:19 -05:00
is_selinux_mls_enabled.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
lgetfilecon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
lgetfilecon.3 Author: Daniel J Walsh 2008-09-29 15:12:38 -04:00
lsetfilecon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
lsetfilecon.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
manual_user_enter_context.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
matchmediacon.3 Get rid of security_context_t and fix const declarations. 2014-02-19 16:11:48 -05:00
matchpathcon_checkmatches.3 libselinux: man: Fix man pages formatting 2013-02-05 20:14:43 -05:00
matchpathcon_filespec_add.3 Author: Guido Trentalancia 2009-11-27 14:44:41 -05:00
matchpathcon_filespec_destroy.3 Author: Guido Trentalancia 2009-11-27 14:44:41 -05:00
matchpathcon_filespec_eval.3 Author: Guido Trentalancia 2009-11-27 14:44:41 -05:00
matchpathcon_fini.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
matchpathcon_index.3 Author: Guido Trentalancia 2009-11-27 14:44:41 -05:00
matchpathcon_init.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
matchpathcon.3 libselinux: matchpathcon/selabel_file: Fix man pages. 2015-05-11 09:53:37 -04:00
mode_to_security_class.3 libselinux: mode_to_security_class: interface to translate a mode_t in to a security class 2013-02-05 20:14:40 -05:00
print_access_vector.3 Author: Guido Trentalancia 2009-11-27 14:44:41 -05:00
query_user_context.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
rpm_execcon.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_av_perm_to_string.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_av_string.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_check_context_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
security_check_context.3 man: standardize spacing with pointers in prototypes 2016-12-12 14:44:26 -05:00
security_class_to_string.3 libselinux: Expunge remaining references to flask.h and av_permissions.h. 2015-05-27 11:44:40 -04:00
security_commit_booleans.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_compute_av_flags_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
security_compute_av_flags.3 This patch enables applications to handle permissive domain correctly. 2009-04-07 22:10:30 -04:00
security_compute_av_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
security_compute_av.3 libselinux: deprecate security_compute_user(), update man pages 2020-02-27 17:30:56 +01:00
security_compute_create_name_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
security_compute_create_name.3 libselinux: security_compute_create_name(3) 2012-03-28 14:52:14 -04:00
security_compute_create_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
security_compute_create.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_compute_member_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
security_compute_member.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_compute_relabel_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
security_compute_relabel.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_compute_user_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
security_compute_user.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_deny_unknown.3 It is useful for userspace object manager, if libselinux has an 2009-04-07 22:48:01 -04:00
security_disable.3 Fix location of selinuxfs mount point 2016-03-25 09:36:30 -04:00
security_get_boolean_active.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_get_boolean_names.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_get_boolean_pending.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_get_initial_context_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
security_get_initial_context.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_getenforce.3 libselinux: Add security_reject_unknown(3) man page 2019-03-11 11:47:36 -04:00
security_load_booleans.3 selinux: Update manpages after removing legacy boolean and user code 2019-07-29 23:46:47 +02:00
security_load_policy.3 Laurent Bigonville patch to fix various minor manpage issues and correct section numbering. 2013-10-24 13:58:37 -04:00
security_mkload_policy.3 Author: Guido Trentalancia 2009-11-27 14:44:41 -05:00
security_policyvers.3 libselinux: man: Fix man pages formatting 2013-02-05 20:14:43 -05:00
security_reject_unknown.3 libselinux: Add security_reject_unknown(3) man page 2019-03-11 11:47:36 -04:00
security_set_boolean.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_setenforce.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
security_validatetrans_raw.c Add security_validatetrans support 2019-04-09 06:51:02 -07:00
security_validatetrans.c Add security_validatetrans support 2019-04-09 06:51:02 -07:00
selabel_close.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
selabel_digest.3 libselinux: Add selabel_digest function 2015-10-13 17:13:24 -04:00
selabel_get_digests_all_partial_matches.3 libselinux: Save digest of all partial matches for directory 2019-07-27 10:39:24 +02:00
selabel_lookup_best_match_raw.3 libselinux: Add selabel partial and best match APIs 2015-05-06 11:58:44 -04:00
selabel_lookup_best_match.3 libselinux: Add selabel partial and best match APIs 2015-05-06 11:58:44 -04:00
selabel_lookup_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
selabel_lookup.3 Get rid of security_context_t and fix const declarations. 2014-02-19 16:11:48 -05:00
selabel_open.3 libselinux: Add selabel_digest function 2015-10-13 17:13:24 -04:00
selabel_partial_match.3 libselinux: Add selabel partial and best match APIs 2015-05-06 11:58:44 -04:00
selabel_stats.3 libselinux: man: Fix man pages formatting 2013-02-05 20:14:43 -05:00
selinux_binary_policy_path.3 selinux: Update manpages after removing legacy boolean and user code 2019-07-29 23:46:47 +02:00
selinux_boolean_sub.3 libselinux: fix the whatis line for the selinux_boolean_sub.3 manpage 2018-05-30 22:07:49 +02:00
selinux_check_access.3 libselinux: simple interface for access checks 2011-11-02 15:37:10 -04:00
selinux_check_passwd_access.3 Author: Guido Trentalancia 2009-11-27 14:44:41 -05:00
selinux_check_securetty_context.3 man: standardize spacing with pointers in prototypes 2016-12-12 14:44:26 -05:00
selinux_colors_path.3 libselinux: man: Fix man pages formatting 2013-02-05 20:14:43 -05:00
selinux_contexts_path.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
selinux_current_policy_path.3 Add selinux_current_policy_path, which returns the a pointer to the loaded policy 2013-10-24 13:58:38 -04:00
selinux_default_context_path.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
selinux_default_type_path.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
selinux_failsafe_context_path.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
selinux_file_context_cmp.3 man: standardize spacing with pointers in prototypes 2016-12-12 14:44:26 -05:00
selinux_file_context_homedir_path.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
selinux_file_context_local_path.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
selinux_file_context_path.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
selinux_file_context_verify.3 libselinux: man: Fix man pages formatting 2013-02-05 20:14:43 -05:00
selinux_getenforcemode.3 libselinux: man: Fix man pages formatting 2013-02-05 20:14:43 -05:00
selinux_getpolicytype.3 libselinux: man: Explain how to free policy type from selinux_getpolicytype() 2016-06-23 12:58:03 -04:00
selinux_homedir_context_path.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
selinux_init_load_policy.3 libselinux: man: Add missing manpage links to security_load_policy.3 2014-09-02 08:31:15 -04:00
selinux_lsetfilecon_default.3 libselinux: man: Fix man pages formatting 2013-02-05 20:14:43 -05:00
selinux_media_context_path.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
selinux_mkload_policy.3 libselinux: man: Add missing manpage links to security_load_policy.3 2014-09-02 08:31:15 -04:00
selinux_netfilter_context_path.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
selinux_path.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
selinux_policy_root.3 Fix minor typos 2018-06-30 20:28:25 +02:00
selinux_raw_context_to_color.3 man: standardize spacing with pointers in prototypes 2016-12-12 14:44:26 -05:00
selinux_removable_context_path.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
selinux_restorecon_default_handle.3 libselinux: Add function to find security.restorecon_last entries 2016-09-26 14:05:54 -04:00
selinux_restorecon_set_alt_rootpath.3 libselinux: Add function to find security.restorecon_last entries 2016-09-26 14:05:54 -04:00
selinux_restorecon_set_exclude_list.3 libselinux: Add function to find security.restorecon_last entries 2016-09-26 14:05:54 -04:00
selinux_restorecon_set_sehandle.3 libselinux: Add function to find security.restorecon_last entries 2016-09-26 14:05:54 -04:00
selinux_restorecon_xattr.3 libselinux: Save digest of all partial matches for directory 2019-07-27 10:39:24 +02:00
selinux_restorecon.3 libselinux: Add selinux_restorecon option to treat conflicting specifications as an error. 2020-04-14 18:22:17 +02:00
selinux_securetty_types_path.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
selinux_set_callback.3 Get rid of security_context_t and fix const declarations. 2014-02-19 16:11:48 -05:00
selinux_set_mapping.3 libselinux: update man pages for userspace policy enforcers 2020-01-21 14:32:42 -05:00
selinux_set_policy_root.3 Add selinux_set_policy_root sets an alternate policy root directory path 2013-10-24 13:58:37 -04:00
selinux_status_close.3 libselinux: add selinux_status_* interfaces for /selinux/status 2011-03-01 11:21:19 -05:00
selinux_status_deny_unknown.3 libselinux: add selinux_status_* interfaces for /selinux/status 2011-03-01 11:21:19 -05:00
selinux_status_getenforce.3 libselinux: add selinux_status_* interfaces for /selinux/status 2011-03-01 11:21:19 -05:00
selinux_status_open.3 libselinux: use kernel status page by default 2020-08-11 08:11:40 -04:00
selinux_status_policyload.3 libselinux: add selinux_status_* interfaces for /selinux/status 2011-03-01 11:21:19 -05:00
selinux_status_updated.3 libselinux: add selinux_status_* interfaces for /selinux/status 2011-03-01 11:21:19 -05:00
selinux_user_contexts_path.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
selinux_usersconf_path.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
selinux_x_context_path.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
set_matchpathcon_flags.3 libselinux: man: Fix man pages formatting 2013-02-05 20:14:43 -05:00
set_matchpathcon_invalidcon.3 Author: Guido Trentalancia 2009-11-27 14:44:41 -05:00
set_matchpathcon_printf.3 Author: Guido Trentalancia 2009-11-27 14:44:41 -05:00
set_selinuxmnt.3 Author: Guido Trentalancia 2009-11-27 14:44:41 -05:00
setcon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
setcon.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
setexeccon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
setexeccon.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
setfilecon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
setfilecon.3 man: standardize spacing with pointers in prototypes 2016-12-12 14:44:26 -05:00
setfscreatecon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
setfscreatecon.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
setkeycreatecon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
setkeycreatecon.3 Author: Daniel J Walsh 2008-09-29 15:12:38 -04:00
setsockcreatecon_raw.3 libselinux: man: Add references and man page links to _raw function variants 2013-02-05 20:14:43 -05:00
setsockcreatecon.3 Author: Daniel J Walsh 2008-09-29 15:55:18 -04:00
sidget.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
sidput.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
string_to_av_perm.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00
string_to_security_class.3 initial import from svn trunk revision 2950 2008-08-19 15:30:36 -04:00