IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Linux  >

developerWorks

返回原文..

		
	int main(){
    char ans[80+1];
    char buf[225];
    char *path;
    int ret_val, len, trans, ssid, tsid, tclass, pathlen;
    struct security_query q;
    struct security_response r;
    security_id_t out_sid;
    security_context_t scontext;
    unsigned int scontext_len;
    trans=0;
menu:
    printf("\nSelect an option:\n");
    printf("0)  Call compute_access_vector\n");
    printf("1)  Call sid_to_context\n");
    printf("2)  Call context_to_sid\n");
    printf("3)  Call transition_sid\n");
    printf("4)  Call member_sid\n");
    printf("5)  Call list_sids\n");
    printf("6)  Call load_policy\n");
    printf("m)  Show menu again\n");
    printf("q)  Exit\n");
    while (1)
    {
        printf("\nChoose:  ");
        fgets(ans,sizeof(ans),stdin);
        switch (ans[0])
        {/* here's the individual cases that switch based 
*on the menu selection. The structure of the individual 
*calls can be found in the security.h file */
          case '0':
            printf("source sid?  ");
            fgets(ans,sizeof(ans),stdin);
            q.ssid = atoi(ans);
 
            printf("target sid?  ");
            fgets(ans,sizeof(ans),stdin);
            q.tsid = atoi(ans);
            printf("target class?  ");
            fgets(ans,sizeof(ans),stdin);
	    q.tclass=class_to_digit(ans, 1);
	    if (!q.tclass) break;
 	    q.requested=0;
	
            ret_val=security_compute_av(&q, &r);
/* remember this little hummer from the first code 
*example? This is how s_c_av gets used*/
 	    if (ret_val) {
      		perror("security_compute_av");
  	    }
	    else {
                printf("\nAllowed: ");
                avc_dump_av(q.tclass, r.allowed);
                printf("\n\n");
	    }   
	    break;
          case '1':
	    len=sizeof(buf);
            printf("sid?  ");
            fgets(ans,sizeof(ans),stdin);
  	    ret_val=security_sid_to_context(atoi(ans),
       		 buf, &len);
            if (ret_val) 
		perror("\nsecurity_sid_to_context");
            else
                printf("\nScontext: %s\n", buf);
            break;
          case '2':
            printf("scontext?  ");
            fgets(ans,sizeof(ans),stdin);
            len = strlen(ans);
            ans[len - 1] = 0;
	    ret_val=security_context_to_sid(ans,
 		len, &out_sid);
            if (ret_val) 
		perror("\nsecurity_context_to_sid");
            else
                printf("\nsid %ld\n", out_sid);
            break;
          case '3':
	    trans=1;
          case '4':
            printf("source sid?  ");
            fgets(ans,sizeof(ans),stdin);
            ssid = atoi(ans);
 
            printf("target sid?  ");
            fgets(ans,sizeof(ans),stdin);
            tsid = atoi(ans);
 
            printf("object class?  ");
            fgets(ans,sizeof(ans),stdin);
            tclass=class_to_digit(ans, 1);
            if (!tclass) break;
	    if (trans){ 
                ret_val=security_transition_sid(ssid, tsid, 
                        tclass, &out_sid);
            }
            else{
		ret_val=security_member_sid(ssid, tsid, 
			tclass, &out_sid);
            }
 
            if (ret_val) { 
               if (trans) perror("\nsecurity_transition_sid");
	       else perror ("\nsecurity_member_sid");
            } 
	    else
               printf("\nsid %ld\n", out_sid);
            trans=0;
            break;
          case '5':
            list_sids();
            break;
          case '6':
            printf("pathname?  ");
            fgets(ans,sizeof(ans),stdin);
	    pathlen = strlen(ans);
	    ans[pathlen-1]=0;
	    ret_val = security_load_policy(pathlen, ans);
            if (ret_val) 
		perror("\nsecurity_load_policy");
	    else
                printf("\nsuccess\n");
            break;
	  case 'm':
	    goto menu;
          case 'q':
            exit(0);
            break;
          default:
            printf("\nUnknown option %s.\n", ans);
        }
    }    
    return 0;
}
		
	   
	   

返回原文.

    关于 IBM 隐私条约 联系 IBM 使用条款