int
gfc_validate_kind (bt type, int kind, bool may_fail)
{
  int rc;

  switch (type)
    {
    case BT_REAL:		/* Fall through */
    case BT_COMPLEX:
      rc = validate_real (kind);
      break;
    case BT_INTEGER:
      rc = validate_integer (kind);
      break;
    case BT_LOGICAL:
      rc = validate_logical (kind);
      break;
    case BT_CHARACTER:
      rc = validate_character (kind);
      break;

    default:
      gfc_internal_error ("gfc_validate_kind(): Got bad type");
    }

  if (rc < 0 && !may_fail)
    gfc_internal_error ("gfc_validate_kind(): Got bad kind");

  return rc;
}
Пример #2
0
GkmXdgTrust*
gkm_xdg_trust_create_for_assertion (GkmModule *module, GkmManager *manager,
                                    GkmTransaction *transaction,
                                    CK_ATTRIBUTE_PTR attrs, CK_ULONG n_attrs)
{

	CK_ATTRIBUTE_PTR serial, issuer, cert;
	GkmXdgTrust *trust;

	g_return_val_if_fail (GKM_IS_MODULE (module), NULL);
	g_return_val_if_fail (GKM_IS_MANAGER (manager), NULL);
	g_return_val_if_fail (attrs || !n_attrs, NULL);

	serial = gkm_attributes_find (attrs, n_attrs, CKA_SERIAL_NUMBER);
	issuer = gkm_attributes_find (attrs, n_attrs, CKA_ISSUER);
	cert = gkm_attributes_find (attrs, n_attrs, CKA_X_CERTIFICATE_VALUE);

	/* A trust object with just serial + issuer */
	if (serial != NULL && issuer != NULL) {
		if (cert != NULL) {
			gkm_transaction_fail (transaction, CKR_TEMPLATE_INCONSISTENT);
			return NULL;
		}
		if (!validate_der (issuer, "Name") || !validate_integer (serial)) {
			gkm_transaction_fail (transaction, CKR_ATTRIBUTE_VALUE_INVALID);
			return NULL;
		}

		trust = create_trust_for_reference (module, manager, serial, issuer);

	/* A trust object with a full certificate */
	} else if (cert != NULL) {
		if (serial != NULL || issuer != NULL) {
			gkm_transaction_fail (transaction, CKR_TEMPLATE_INCONSISTENT);
			return NULL;
		}
		if (!validate_der (cert, "Certificate")) {
			gkm_transaction_fail (transaction, CKR_ATTRIBUTE_VALUE_INVALID);
			return NULL;
		}

		trust = create_trust_for_complete (module, manager, cert);

	/* Not sure what this is */
	} else {
		gkm_transaction_fail (transaction, CKR_TEMPLATE_INCOMPLETE);
		return NULL;
	}

	gkm_attributes_consume (attrs, n_attrs, CKA_X_CERTIFICATE_VALUE, CKA_ISSUER,
	                        CKA_SERIAL_NUMBER, G_MAXULONG);

	return trust;
}
Пример #3
0
MRESULT CreInstDlg::wmCommand(HM12){
USE_HM12;
USHORT command;
char typename[MAXNAMELENGTH]="";
char propname[MAXNAMELENGTH]="";
char newvalue[MAXNAMELENGTH]="";
int index,dbtype,oktype,i;
ODB_INT intval;
ODB_REAL realval;
ODB_SET coll;
object *obj,*o;
command=SHORT1FROMMP( mp1 ) ;
	switch(command)
	{
	case DID_OK:  //ok button pressed. Create object
		index=WinQueryLboxSelectedItem(hwndlbtypes);
		WinQueryLboxItemText(hwndlbtypes,index,typename,MAXNAMELENGTH);
		if (strlen(typename)<1) {
			//type not specified
			WinMessageBox(HWND_DESKTOP,hwndOwner,(PCH) "A type must be spec.",
			(PCH)"Alert",0,MB_NOICON|MB_OK);
			break;
			}
		else {
			obj=odb.create_instance(typename);
			if (obj==NULL) {
				//object could not be created, possibly because
				//extentless type selectd
				WinMessageBox(HWND_DESKTOP,hwndOwner,(PCH) "Could not create object",
				(PCH)"Alert",0,MB_NOICON|MB_OK);
				break;
			};
			i=WinQueryLboxCount(hwndassignedprop);
			i--;
			while(i>=0){
				//check that the data for each prop is ok
				//and set the properies for the object
				WinQueryLboxItemText(hwndassignedprop,i,propname,MAXNAMELENGTH);
				WinQueryLboxItemText(hwndassignedprop,i,propname,MAXNAMELENGTH);
				WinQueryLboxItemText(hwndpropval,i,newvalue,MAXNAMELENGTH);
				dbtype=odb.getpropertytype(typename,propname);

				if (dbtype==_INT_) {
					validate_integer(newvalue,intval);
					(*obj).setproperty_value(propname,intval);
					};
				if (dbtype==_OTHER_) {
					validate_integer(newvalue,intval);
					o=odb.getobjectwithoid("Usertypes",intval);
					(*obj).setproperty_value(propname,o);
					};
				if (dbtype==_REAL_) {
					validate_real(newvalue,realval);
					(*obj).setproperty_value(propname,realval);
					};
				if (dbtype==_COLLECTION_){
					coll=new collection(_OTHER_);
					if (validate_set(newvalue,&odb,coll)<0) (*coll).~collection();
					(*obj).setproperty_value(propname,coll);
					};
				if (dbtype==_INT_COLLECTION_){
					coll=new collection(_INT_);
					if (validate_set(newvalue,&odb,coll)<0) (*coll).~collection();
					(*obj).setproperty_value(propname,coll);
					};
				if (dbtype==_REAL_COLLECTION_){
					coll=new collection(_REAL_);
					if (validate_set(newvalue,&odb,coll)<0) (*coll).~collection();
					(*obj).setproperty_value(propname,coll);
					};
				if (dbtype==_CHAR_COLLECTION_){
					coll=new collection(_CHAR_);
					if (validate_set(newvalue,&odb,coll)<0) (*coll).~collection();
					(*obj).setproperty_value(propname,coll);
					};
				if (dbtype==_CHAR_) (*obj).setproperty_value(propname,newvalue);
				i--;
				}; //end while all properties set.
				//deleta all unassigned praps
			(*this).clearlbox(hwndassignedprop);
			clearlbox(hwndpropval);
			clearlbox(hwndlbprops);
			WinSetWindowText(hwndviewval,(PSZ)"");
			populate_props(hwndlbprops,typename,  odb);
			noassignedprops=0; //no assigned properties anymore
			WinMessageBox(HWND_DESKTOP,hwndOwner,(PCH) "Instance created.",
			(PCH)"Success",0,MB_NOICON|MB_OK);
		}; //else		//create the object and set properties
		return (MRESULT) FALSE;
		//break;
	case DID_CANCEL:  //quit this window
	  if(WinMessageBox(HWND_DESKTOP,hwndOwner,(PCH) "Quit this window?",
			(PCH)"Sanity Check",0,
			MB_NOICON|MB_OKCANCEL)==MBID_OK)
		WinDismissDlg( hwnd, TRUE );  // Removes the dialog box
	  return (MRESULT) FALSE;
	case PB_SET:
		//assign property a value. The prop is moved to assignedprops
		//and value is validated and moved to hidden listbox
		index=WinQueryLboxSelectedItem(hwndlbtypes); //typename
		WinQueryLboxItemText(hwndlbtypes,index,typename,MAXNAMELENGTH);
		index=WinQueryLboxSelectedItem(hwndlbprops); //propname
		WinQueryLboxItemText(hwndlbprops,index,propname,MAXNAMELENGTH);
		WinQueryWindowText(hwndnewvalue,MAXNAMELENGTH,newvalue);
		dbtype=odb.getpropertytype(typename,propname);
		if (dbtype==_INT_)
			oktype=validate_integer(newvalue,intval);
		if (dbtype==_OTHER_){
			oktype=validate_integer(newvalue,intval);
			if (oktype!=0) {
				//check that there is an object with the oid
				obj=odb.getobjectwithoid("Usertypes",intval);
				if (obj==NULL) oktype=0;
				}
			};
		if (dbtype==_REAL_)
			oktype=validate_real(newvalue,realval);
		if (dbtype==_CHAR_) oktype=1;
		if ((strlen(newvalue)>0)&&(strlen(propname)>0)&&(oktype!=0)){
			//move assigned prop from prop cmb box to assigned props
			WinInsertLboxItem(hwndassignedprop,noassignedprops,(PSZ)propname);
			WinInsertLboxItem(hwndpropval,noassignedprops,(PSZ)newvalue);
			noassignedprops++;
			WinDeleteLboxItem(hwndlbprops,index);
			WinSetWindowText(hwnddatatype,(PSZ)"");
			WinSetWindowText(hwndnewvalue,(PSZ)"");
			}
		else
		WinMessageBox(HWND_DESKTOP,hwndOwner,(PCH) "Missing or erroneous data",
			(PCH)"Alert",0,MB_OKCANCEL);
		break;
	default:
	  return  WinDefDlgProc( hwnd, msg, mp1, mp2 );
      }