Exemplo n.º 1
0
static void SetOption(char *line, BOOLEAN *option)
{
  CARDINAL index,
           value;
  Name     optionName;

  if (!initialised) {
    CopyName(0, "OFF", options);
    CopyName(1, "ON", options);
    CopyName(2, "HELP", options);
    CopyName(3, "QUIT", options);
    initialised = TRUE;
  }; /* if */
  do
   {
    index = 0 ;
    if (!SymbolTest(line,&index,&optionName))
     {
      WriteChs("Bad option name\\N") ;
      newLine[0] = CR ;
      return ;
     }

    if (NameLookup(options, optionName, TRUE, &value, NumberOfOptions)) {
      switch (value) {
        case 0:
        case 1:
        *option = value != 0;
        line += index; /* Something odd here */
        return;

        case 2:
        WriteChs("Options available:\\NOn\\NOff\\NHelp\\NQuit\\N");
        break;

        case 3:
        return;
      }; /* case */
    } else {
      WriteChs("Unknown option\\N");
      newLine[0] = CR;
      return;
    }; /* if */
    *line = CR;
  } while (1);
} /* End SetOption */
	bool Control::HasProperty(const CMIOObjectPropertyAddress& address) const
	{
		// Initialize the return value
		bool answer = false;
		
		// Initialize some commonly used variables
		CFStringRef cfstring = NULL;
		
		switch (address.mSelector)
		{
			case kCMIOObjectPropertyName:
				cfstring = CopyName();
				if (cfstring != NULL)
				{
					answer = true;
					CFRelease(cfstring);
				}
				break;
				
			case kCMIOObjectPropertyManufacturer:
				cfstring = CopyManufacturerName();
				if (cfstring != NULL)
				{
					answer = true;
					CFRelease(cfstring);
				}
				break;
			
			case kCMIOControlPropertyScope:
				answer = true;
				break;
				
			case kCMIOControlPropertyElement:
				answer = true;
				break;
				
			case kCMIOControlPropertyVariant:
				answer = true;
				break;
				
			default:
				answer = Object::HasProperty(address);
				break;
		};
		
		return answer;
	}
	void Control::GetPropertyData(const CMIOObjectPropertyAddress& address, UInt32 qualifierDataSize, const void* qualifierData, UInt32 dataSize, UInt32& dataUsed, void* data) const
	{
		switch (address.mSelector)
		{
			case kCMIOObjectPropertyName:
				ThrowIf(dataSize != GetPropertyDataSize(address, qualifierDataSize, qualifierData), CAException(kCMIOHardwareBadPropertySizeError), "CMIO::DP::Control::GetPropertyData: wrong data size for kCMIOObjectPropertyName");
				*static_cast<CFStringRef*>(data) = CopyName();
				dataUsed = sizeof(CFStringRef);
				break;
				
			case kCMIOObjectPropertyManufacturer:
				ThrowIf(dataSize != GetPropertyDataSize(address, qualifierDataSize, qualifierData), CAException(kCMIOHardwareBadPropertySizeError), "CMIO::DP::Control::GetPropertyData: wrong data size for kCMIOObjectPropertyManufacturer");
				*static_cast<CFStringRef*>(data) = CopyManufacturerName();
				dataUsed = sizeof(CFStringRef);
				break;
				
			case kCMIOControlPropertyScope:
				ThrowIf(dataSize != GetPropertyDataSize(address, qualifierDataSize, qualifierData), CAException(kCMIOHardwareBadPropertySizeError), "CMIO::DP::Control::GetPropertyData: wrong data size for kCMIOControlPropertyScope");
				*static_cast<CMIOObjectPropertyScope*>(data) = GetPropertyScope();
				dataUsed = sizeof(CMIOObjectPropertyScope);
				break;
				
			case kCMIOControlPropertyElement:
				ThrowIf(dataSize != GetPropertyDataSize(address, qualifierDataSize, qualifierData), CAException(kCMIOHardwareBadPropertySizeError), "CMIO::DP::Control::GetPropertyData: wrong data size for kCMIOControlPropertyElement");
				*static_cast<CMIOObjectPropertyElement*>(data) = GetPropertyElement();
				dataUsed = sizeof(CMIOObjectPropertyElement);
				break;
				
			case kCMIOControlPropertyVariant:
				ThrowIf(dataSize != GetPropertyDataSize(address, qualifierDataSize, qualifierData), CAException(kCMIOHardwareBadPropertySizeError), "CMIO::DP::Control::GetPropertyData: wrong data size for kCMIOControlPropertyVariant");
				*static_cast<UInt32*>(data) = GetVariant();
				dataUsed = sizeof(UInt32);
				break;
				
			default:
				Object::GetPropertyData(address, qualifierDataSize, qualifierData, dataSize, dataUsed, data);
				break;
		};
	}
Exemplo n.º 4
0
/****
 *
 * tc_create_crl
 *
 * return
 *    0 okay
 *    TC_E_INVARGS
 *    TC_E_NOMEMORY
 *    TC_E_INVDATE
 *
 *****/
int tc_create_crl (TC_CertificateList **crl,
		   const unsigned char *alg,	/* alg to sign crl */
		   size_t algLen,		/* len of `alg' */
		   const unsigned char *algParm,
		   size_t algParmLen,
		   TC_Name *issuer,	/* crl issuer */
		   time_t nextUpdate,	/* next crl update expected */
		   TC_ExtensionList *crlExts, /* CRL ext's */
                   TC_CONTEXT *ctx)
{
    int status = 0;
    PKICertificateList *localCRL = NULL;
    TC_Name *localIssuer = NULL;

    do {
 
        if (crl == NULL || issuer == NULL || nextUpdate < 0) {
            status = TC_E_INVARGS;
            break;
        }

        localCRL = PKINewCertificateList(ctx->certasnctx);
        if (localCRL == NULL) {
            status = TC_E_NOMEMORY;
            break;
        }

	/* set the version, if there are extensions then its v2, otherwise
	   leave NULL */
	if (crlExts != NULL) {
	    localCRL->tbsCertList.version = PKINewINTEGER(ctx->certasnctx);
	    if (localCRL->tbsCertList.version == NULL) {
		status = TC_E_NOMEMORY;
		break;
	    }
	    PKIPutIntVal(ctx->certasnctx, localCRL->tbsCertList.version,
			 TC_X509_VERSION_2);
	}

        if ((status = tc_set_alg(&localCRL->tbsCertList.signature,
		  alg, algLen, algParm, algParmLen, ctx)) != 0)
            break;
        if ((status = tc_set_alg(&localCRL->signatureAlgorithm,
		  alg, algLen, algParm, algParmLen, ctx)) != 0)
            break;

	/* issuer, create a local copy first */
	if ((status = CopyName(&localIssuer, issuer, ctx)) != 0)
	    break;
        localCRL->tbsCertList.issuer.CHOICE_field_type = 
                        localIssuer->CHOICE_field_type;
        localCRL->tbsCertList.issuer.data = localIssuer->data;
	/* now free just the upper level structure, free'ing the Cert will
           free the rest */
	TC_Free(ctx->memMgr, localIssuer);

	/* this update */
        localCRL->tbsCertList.thisUpdate.CHOICE_field_type =
                                        PKIID_UTCTime;
        if ((status = tc_encode_utctime (
               (PKIUTCTime **)&localCRL->tbsCertList.thisUpdate.data, 
               time(NULL), ctx) ) != 0)
           break;
 
	/* next update */
	if (nextUpdate != 0) { /* its optional */

	    /* the value for nextUpdate must be later than current time */
	    if (nextUpdate <= time(NULL)) {
		status = TC_E_INVDATE;
		break;
	    }

	    localCRL->tbsCertList.nextUpdate =
		PKINewTime(ctx->certasnctx);
	    localCRL->tbsCertList.nextUpdate->CHOICE_field_type =
                                        PKIID_UTCTime;
	    if ((status = tc_encode_utctime (
		     (PKIUTCTime **)&localCRL->tbsCertList.nextUpdate->data, 
                     nextUpdate, ctx)) != 0)
		break;
	}

	/* extensions */
	if (crlExts != NULL) {
	    if ((status = CopyExtList(&localCRL->tbsCertList.crlExtensions,
				      crlExts, ctx)) != 0)
		break;
	}
	else
	    localCRL->tbsCertList.crlExtensions = NULL;

    } while (0);
 
    if (status == 0)
        *crl = localCRL;
    else
        *crl = NULL;

    return status;
} /* tc_create_crl */