+bool Capture::CheckPrivilege( const char* privilege ) const
+{
+ cynara* cynara;
+ int fd = 0;
+ int ret = 0;
+ char subjectLabel[SMACK_LABEL_LENGTH + 1] = "";
+ char uid[10] = { 0, };
+ const char* clientSession = "";
+
+ ret = cynara_initialize( &cynara, NULL );
+ if( ret != CYNARA_API_SUCCESS )
+ {
+ return false;
+ }
+
+ fd = open( CYNARA_CHECK_FILE, O_RDONLY );
+ if( fd < 0 )
+ {
+ cynara_finish( cynara );
+ return false;
+ }
+
+ ret = read( fd, subjectLabel, SMACK_LABEL_LENGTH );
+ if( ret < 0 )
+ {
+ close( fd );
+ cynara_finish( cynara );
+ return false;
+ }
+
+ close( fd );
+
+ snprintf( uid, 10, "%d", getuid() );
+
+ ret = cynara_check( cynara, subjectLabel, clientSession, uid, privilege );
+ if( ret != CYNARA_API_ACCESS_ALLOWED )
+ {
+ cynara_finish( cynara );
+ return false;
+ }
+
+ cynara_finish( cynara );
+
+ return true;
+}
+