static bool CheckPrivilege( const char* privilege )
{
cynara* cynara;
- int fd = 0;
int ret = 0;
- char subjectLabel[SMACK_LABEL_LENGTH + 1] = "";
+ char subjectLabel[ SMACK_LABEL_LENGTH + 1 ] = "";
+ char labelPath[ SMACK_LABEL_LENGTH + 1 ] = "/proc/self/attr/current";
char uid[10] = { 0, };
const char* clientSession = "";
+ FILE *fp = NULL;
ret = cynara_initialize( &cynara, NULL );
if( ret != CYNARA_API_SUCCESS )
return false;
}
- fd = open( "/proc/self/attr/current", O_RDONLY );
- if( fd < 0 )
+ fp = fopen( labelPath , "r" );
+ if(fp != NULL)
{
- cynara_finish( cynara );
- return false;
- }
-
- ret = read( fd, subjectLabel, SMACK_LABEL_LENGTH );
- if( ret < 0 )
- {
- close( fd );
- cynara_finish( cynara );
- return false;
+ if (fread( subjectLabel, 1, sizeof(subjectLabel), fp) <= 0)
+ {
+ fclose(fp);
+ cynara_finish( cynara );
+ return false;
+ }
+ fclose(fp);
}
- close( fd );
-
snprintf( uid, 10, "%d", getuid() );
ret = cynara_check( cynara, subjectLabel, clientSession, uid, privilege );