bool gss_eap_radius_attr_provider::deleteAttribute(const gss_buffer_t attr) { gss_eap_attrid attrid; if (!getAttributeId(attr, &attrid)) return false; return deleteAttribute(attrid); }
bool gss_eap_radius_attr_provider::setAttribute(int complete GSSEAP_UNUSED, const gss_eap_attrid &attrid, const gss_buffer_t value) { OM_uint32 major = GSS_S_UNAVAILABLE, minor; if (!isSecretAttributeP(attrid) && !isInternalAttributeP(attrid)) { deleteAttribute(attrid); major = gssEapRadiusAddAvp(&minor, &m_vps, attrid, value); } return !GSS_ERROR(major); }
QgsVectorLayerProperties::QgsVectorLayerProperties( QgsVectorLayer *lyr, QWidget * parent, Qt::WFlags fl ) : QDialog( parent, fl ) , layer( lyr ) , mMetadataFilled( false ) , mRendererDialog( 0 ) { setupUi( this ); setupEditTypes(); connect( buttonBox, SIGNAL( accepted() ), this, SLOT( accept() ) ); connect( buttonBox, SIGNAL( rejected() ), this, SLOT( reject() ) ); connect( buttonBox->button( QDialogButtonBox::Apply ), SIGNAL( clicked() ), this, SLOT( apply() ) ); connect( this, SIGNAL( accepted() ), this, SLOT( apply() ) ); connect( mAddAttributeButton, SIGNAL( clicked() ), this, SLOT( addAttribute() ) ); connect( mDeleteAttributeButton, SIGNAL( clicked() ), this, SLOT( deleteAttribute() ) ); connect( mToggleEditingButton, SIGNAL( clicked() ), this, SLOT( toggleEditing() ) ); connect( this, SIGNAL( toggleEditing( QgsMapLayer* ) ), QgisApp::instance(), SLOT( toggleEditing( QgsMapLayer* ) ) ); connect( layer, SIGNAL( editingStarted() ), this, SLOT( editingToggled() ) ); connect( layer, SIGNAL( editingStopped() ), this, SLOT( editingToggled() ) ); connect( layer, SIGNAL( attributeAdded( int ) ), this, SLOT( attributeAdded( int ) ) ); connect( layer, SIGNAL( attributeDeleted( int ) ), this, SLOT( attributeDeleted( int ) ) ); connect( insertFieldButton, SIGNAL( clicked() ), this, SLOT( insertField() ) ); connect( insertExpressionButton, SIGNAL( clicked() ), this, SLOT( insertExpression() ) ); mAddAttributeButton->setIcon( QgsApplication::getThemeIcon( "/mActionNewAttribute.png" ) ); mDeleteAttributeButton->setIcon( QgsApplication::getThemeIcon( "/mActionDeleteAttribute.png" ) ); mToggleEditingButton->setIcon( QgsApplication::getThemeIcon( "/mActionToggleEditing.png" ) ); mCalculateFieldButton->setIcon( QgsApplication::getThemeIcon( "/mActionCalculateField.png" ) ); connect( btnUseNewSymbology, SIGNAL( clicked() ), this, SLOT( useNewSymbology() ) ); QVBoxLayout *layout; if ( layer->hasGeometryType() ) { // Create the Labeling dialog tab layout = new QVBoxLayout( labelingFrame ); layout->setMargin( 0 ); labelingDialog = new QgsLabelingGui( QgisApp::instance()->palLabeling(), layer, QgisApp::instance()->mapCanvas(), labelingFrame ); layout->addWidget( labelingDialog ); labelingFrame->setLayout( layout ); // Create the Labeling (deprecated) dialog tab layout = new QVBoxLayout( labelOptionsFrame ); layout->setMargin( 0 ); labelDialog = new QgsLabelDialog( layer->label(), labelOptionsFrame ); layout->addWidget( labelDialog ); labelOptionsFrame->setLayout( layout ); connect( labelDialog, SIGNAL( labelSourceSet() ), this, SLOT( setLabelCheckBox() ) ); } else { tabWidget->setTabEnabled( 1, false ); // hide labeling item tabWidget->setTabEnabled( 2, false ); // hide labeling (deprecated) item } // Create the Actions dialog tab QVBoxLayout *actionLayout = new QVBoxLayout( actionOptionsFrame ); actionLayout->setMargin( 0 ); const QgsFieldMap &fields = layer->pendingFields(); actionDialog = new QgsAttributeActionDialog( layer->actions(), fields, actionOptionsFrame ); actionLayout->addWidget( actionDialog ); // Create the menu for the save style button to choose the output format mSaveAsMenu = new QMenu( pbnSaveStyleAs ); mSaveAsMenu->addAction( tr( "QGIS Layer Style File" ) ); mSaveAsMenu->addAction( tr( "SLD File" ) ); QObject::connect( mSaveAsMenu, SIGNAL( triggered( QAction * ) ), this, SLOT( saveStyleAsMenuTriggered( QAction * ) ) ); reset(); if ( layer->dataProvider() )//enable spatial index button group if supported by provider { int capabilities = layer->dataProvider()->capabilities(); if ( !( capabilities&QgsVectorDataProvider::CreateSpatialIndex ) ) { pbnIndex->setEnabled( false ); } if ( capabilities & QgsVectorDataProvider::SetEncoding ) { cboProviderEncoding->addItems( QgsVectorDataProvider::availableEncodings() ); QString enc = layer->dataProvider()->encoding(); int encindex = cboProviderEncoding->findText( enc ); if ( encindex < 0 ) { cboProviderEncoding->insertItem( 0, enc ); encindex = 0; } cboProviderEncoding->setCurrentIndex( encindex ); } else { // currently only encoding can be set in this group, so hide it completely grpProviderOptions->hide(); } } updateButtons(); leSpatialRefSys->setText( layer->crs().authid() + " - " + layer->crs().description() ); leSpatialRefSys->setCursorPosition( 0 ); leEditForm->setText( layer->editForm() ); leEditFormInit->setText( layer->editFormInit() ); connect( sliderTransparency, SIGNAL( valueChanged( int ) ), this, SLOT( sliderTransparency_valueChanged( int ) ) ); //insert existing join info const QList< QgsVectorJoinInfo >& joins = layer->vectorJoins(); for ( int i = 0; i < joins.size(); ++i ) { addJoinToTreeWidget( joins[i] ); } diagramPropertiesDialog = new QgsDiagramProperties( layer, mDiagramFrame ); mDiagramFrame->setLayout( new QVBoxLayout( mDiagramFrame ) ); mDiagramFrame->layout()->addWidget( diagramPropertiesDialog ); //for each overlay plugin create a new tab int position; QList<QgsVectorOverlayPlugin*> overlayPluginList = overlayPlugins(); QList<QgsVectorOverlayPlugin*>::const_iterator it = overlayPluginList.constBegin(); for ( ; it != overlayPluginList.constEnd(); ++it ) { QgsApplyDialog* d = ( *it )->dialog( lyr ); position = tabWidget->insertTab( tabWidget->count(), qobject_cast<QDialog*>( d ), QgsApplication::getThemeIcon( "propertyicons/diagram.png" ), tr( "Overlay" ) ); tabWidget->setCurrentIndex( position ); //ugly, but otherwise the properties dialog is a mess mOverlayDialogs.push_back( d ); } //layer title and abstract if ( layer ) { mLayerTitleLineEdit->setText( layer->title() ); mLayerAbstractTextEdit->setPlainText( layer->abstract() ); } QSettings settings; restoreGeometry( settings.value( "/Windows/VectorLayerProperties/geometry" ).toByteArray() ); int tabIndex = settings.value( "/Windows/VectorLayerProperties/row", 0 ).toInt(); // if the last used tab is not enabled display the first enabled one if ( !tabWidget->isTabEnabled( tabIndex ) ) { tabIndex = 0; for ( int i = 0; i < tabWidget->count(); i++ ) { if ( tabWidget->isTabEnabled( i ) ) { tabIndex = i; break; } } } tabWidget->setCurrentIndex( tabIndex ); setWindowTitle( tr( "Layer Properties - %1" ).arg( layer->name() ) ); } // QgsVectorLayerProperties ctor
int deleteCertComponent( INOUT CERT_INFO *certInfoPtr, IN_ATTRIBUTE const CRYPT_ATTRIBUTE_TYPE certInfoType ) { int status; assert( isWritePtr( certInfoPtr, sizeof( CERT_INFO ) ) ); REQUIRES( isAttribute( certInfoType ) || \ isInternalAttribute( certInfoType ) ); /* If it's a GeneralName or DN component, delete it. These are special-case attribute values so they have to come before the general attribute-handling code */ if( isGeneralNameSelectionComponent( certInfoType ) ) { /* Check whether this GeneralName is present */ status = selectGeneralName( certInfoPtr, certInfoType, MUST_BE_PRESENT ); if( cryptStatusError( status ) ) return( status ); /* Delete each field in the GeneralName */ if( deleteCompositeAttributeField( &certInfoPtr->attributes, &certInfoPtr->attributeCursor, certInfoPtr->attributeCursor, certInfoPtr->currentSelection.dnPtr ) == OK_SPECIAL ) { /* We've deleted the attribute containing the currently selected DN, deselect it */ certInfoPtr->currentSelection.dnPtr = NULL; } return( CRYPT_OK ); } if( isGeneralNameComponent( certInfoType ) ) { SELECTION_STATE selectionState; ATTRIBUTE_PTR *attributePtr = DUMMY_INIT_PTR; /* Find the requested GeneralName component. Since selectGeneralNameComponent() changes the current selection within the GeneralName, we save the selection state around the call */ saveSelectionState( selectionState, certInfoPtr ); status = selectGeneralNameComponent( certInfoPtr, certInfoType ); if( cryptStatusOK( status ) ) attributePtr = certInfoPtr->attributeCursor; restoreSelectionState( selectionState, certInfoPtr ); if( cryptStatusError( status )) return( status ); ENSURES( attributePtr != NULL ); /* Delete the field within the GeneralName */ if( deleteAttributeField( &certInfoPtr->attributes, &certInfoPtr->attributeCursor, attributePtr, certInfoPtr->currentSelection.dnPtr ) == OK_SPECIAL ) { /* We've deleted the attribute containing the currently selected DN, deselect it */ certInfoPtr->currentSelection.dnPtr = NULL; } return( CRYPT_OK ); } if( isDNComponent( certInfoType ) ) { status = selectDN( certInfoPtr, CRYPT_ATTRIBUTE_NONE, MUST_BE_PRESENT ); if( cryptStatusOK( status ) ) status = deleteDNComponent( certInfoPtr->currentSelection.dnPtr, certInfoType, NULL, 0 ); return( status ); } /* If it's standard certificate or CMS attribute, delete it */ if( ( certInfoType >= CRYPT_CERTINFO_FIRST_EXTENSION && \ certInfoType <= CRYPT_CERTINFO_LAST_EXTENSION ) || \ ( certInfoType >= CRYPT_CERTINFO_FIRST_CMS && \ certInfoType <= CRYPT_CERTINFO_LAST_CMS ) ) return( deleteCertAttribute( certInfoPtr, certInfoType ) ); /* If it's anything else, handle it specially */ switch( certInfoType ) { case CRYPT_CERTINFO_SELFSIGNED: if( !( certInfoPtr->flags & CERT_FLAG_SELFSIGNED ) ) return( CRYPT_ERROR_NOTFOUND ); certInfoPtr->flags &= ~CERT_FLAG_SELFSIGNED; return( CRYPT_OK ); case CRYPT_CERTINFO_CURRENT_CERTIFICATE: case CRYPT_ATTRIBUTE_CURRENT_GROUP: case CRYPT_ATTRIBUTE_CURRENT: case CRYPT_ATTRIBUTE_CURRENT_INSTANCE: if( certInfoPtr->attributeCursor == NULL ) return( CRYPT_ERROR_NOTFOUND ); if( certInfoType == CRYPT_ATTRIBUTE_CURRENT_GROUP ) { status = deleteAttribute( &certInfoPtr->attributes, &certInfoPtr->attributeCursor, certInfoPtr->attributeCursor, certInfoPtr->currentSelection.dnPtr ); } else { /* The current component and field are essentially the same thing since a component is one of a set of entries in a multivalued field, thus they're handled identically */ status = deleteAttributeField( &certInfoPtr->attributes, &certInfoPtr->attributeCursor, certInfoPtr->attributeCursor, certInfoPtr->currentSelection.dnPtr ); } if( status == OK_SPECIAL ) { /* We've deleted the attribute containing the currently selected DN, deselect it */ certInfoPtr->currentSelection.dnPtr = NULL; } return( CRYPT_OK ); case CRYPT_CERTINFO_TRUSTED_USAGE: if( certInfoPtr->cCertCert->trustedUsage == CRYPT_ERROR ) return( CRYPT_ERROR_NOTFOUND ); certInfoPtr->cCertCert->trustedUsage = CRYPT_ERROR; return( CRYPT_OK ); case CRYPT_CERTINFO_TRUSTED_IMPLICIT: return( krnlSendMessage( certInfoPtr->ownerHandle, IMESSAGE_USER_TRUSTMGMT, &certInfoPtr->objectHandle, MESSAGE_TRUSTMGMT_DELETE ) ); case CRYPT_CERTINFO_VALIDFROM: case CRYPT_CERTINFO_THISUPDATE: if( certInfoPtr->startTime <= 0 ) return( CRYPT_ERROR_NOTFOUND ); certInfoPtr->startTime = 0; return( CRYPT_OK ); case CRYPT_CERTINFO_VALIDTO: case CRYPT_CERTINFO_NEXTUPDATE: if( certInfoPtr->endTime <= 0 ) return( CRYPT_ERROR_NOTFOUND ); certInfoPtr->endTime = 0; return( CRYPT_OK ); case CRYPT_CERTINFO_SUBJECTNAME: if( certInfoPtr->currentSelection.dnPtr == &certInfoPtr->subjectName ) { /* This is the currently selected DN, deselect it before deleting it */ certInfoPtr->currentSelection.dnPtr = NULL; } deleteDN( &certInfoPtr->subjectName ); return( CRYPT_OK ); #ifdef USE_CERTREV case CRYPT_CERTINFO_REVOCATIONDATE: { time_t *revocationTimePtr = ( time_t * ) \ getRevocationTimePtr( certInfoPtr ); if( revocationTimePtr == NULL ) return( CRYPT_ERROR_NOTFOUND ); *revocationTimePtr = 0; return( CRYPT_OK ); } #endif /* USE_CERTREV */ #ifdef USE_PKIUSER case CRYPT_CERTINFO_PKIUSER_RA: if( !certInfoPtr->cCertUser->isRA ) return( CRYPT_ERROR_NOTFOUND ); certInfoPtr->cCertUser->isRA = FALSE; return( CRYPT_OK ); #endif /* USE_PKIUSER */ } retIntError(); }
static int copyPkiUserAttributes( INOUT CERT_INFO *certInfoPtr, INOUT ATTRIBUTE_PTR *pkiUserAttributes ) { ATTRIBUTE_PTR *requestAttrPtr, *pkiUserAttrPtr; int value, status; assert( isWritePtr( certInfoPtr, sizeof( CERT_INFO ) ) ); assert( isWritePtr( pkiUserAttributes, sizeof( ATTRIBUTE_LIST ) ) ); REQUIRES( certInfoPtr->type == CRYPT_CERTTYPE_CERTREQUEST || \ certInfoPtr->type == CRYPT_CERTTYPE_REQUEST_CERT ); /* If there are altNames present in both the PKI user data and the request, make sure that they match */ requestAttrPtr = findAttribute( certInfoPtr->attributes, CRYPT_CERTINFO_SUBJECTALTNAME, FALSE ); pkiUserAttrPtr = findAttribute( pkiUserAttributes, CRYPT_CERTINFO_SUBJECTALTNAME, FALSE ); if( requestAttrPtr != NULL && pkiUserAttrPtr != NULL ) { /* Both the certificate request and the PKI user have altNames, make sure that they're identical */ if( !compareAttribute( requestAttrPtr, pkiUserAttrPtr ) ) { setErrorInfo( certInfoPtr, CRYPT_CERTINFO_SUBJECTALTNAME, CRYPT_ERRTYPE_ISSUERCONSTRAINT ); return( CRYPT_ERROR_INVALID ); } /* The two altNames are identical, delete the one in the request in order to allow the one from the PKI user data to be copied across when we call copyAttributes() */ status = deleteAttribute( &certInfoPtr->attributes, &certInfoPtr->attributeCursor, requestAttrPtr, certInfoPtr->currentSelection.dnPtr ); if( cryptStatusError( status ) ) return( status ); } /* There's one rather ugly special-case situation that we have to handle which is when the user has submitted a PnP PKI request for a generic signing certificate but their PKI user information indicates that they're intended to be a CA user. The processing flow for this is: Read request data from an external source into certificate request object, creating a state=high object; Add PKI user information to state=high request; When augmenting the request with the PKI user information the incoming request will contain a keyUsage of digitalSignature while the PKI user information will contain a keyUsage of keyCertSign and/or crlSign. We can't fix this up at the PnP processing level because the request object will be in the high state once it's instantiated and no changes to the attributes can be made (the PKI user information is a special case that can be added to an object in the high state but which modifies attributes in it as if it were still in the low state). To avoid the attribute conflict, if we find this situation in the request/pkiUser combination we delete the keyUsage in the request to allow it to be replaced by the pkiUser keyUsage. Hardcoding in this special case isn't very elegant but it's the only way to make the PnP PKI issue work without requiring that the user explicitly specify that they want to be a CA in the request's keyUsage, which makes it rather non-PnP and would also lead to slightly strange requests since basicConstraints can't be specified in requests while the CA keyUsage can */ status = getAttributeFieldValue( certInfoPtr->attributes, CRYPT_CERTINFO_KEYUSAGE, CRYPT_ATTRIBUTE_NONE, &value ); if( cryptStatusOK( status ) && value == CRYPT_KEYUSAGE_DIGITALSIGNATURE ) { status = getAttributeFieldValue( pkiUserAttributes, CRYPT_CERTINFO_KEYUSAGE, CRYPT_ATTRIBUTE_NONE, &value ); if( cryptStatusOK( status ) && ( value & KEYUSAGE_CA ) ) { /* The certificate contains a digitalSignature keyUsage and the PKI user information contains a CA usage, delete the certificate's keyUsage to make way for the PKI user's CA keyUsage */ status = deleteCompleteAttribute( &certInfoPtr->attributes, &certInfoPtr->attributeCursor, CRYPT_CERTINFO_KEYUSAGE, certInfoPtr->currentSelection.dnPtr ); if( cryptStatusError( status ) ) return( status ); } } /* Copy the attributes from the PKI user information into the certificate */ status = copyAttributes( &certInfoPtr->attributes, pkiUserAttributes, &certInfoPtr->errorLocus, &certInfoPtr->errorType ); if( cryptStatusError( status ) ) return( status ); /* Perform any special-case adjustments on attributes that may be required after they've been copied from the PKI user to the certificate request */ return( adjustPkiUserAttributes( certInfoPtr ) ); }
QgsVectorLayerProperties::QgsVectorLayerProperties( QgsVectorLayer *lyr, QWidget * parent, Qt::WFlags fl ) : QDialog( parent, fl ), layer( lyr ), mRendererDialog( 0 ) { setupUi( this ); connect( buttonBox, SIGNAL( accepted() ), this, SLOT( accept() ) ); connect( buttonBox, SIGNAL( rejected() ), this, SLOT( reject() ) ); connect( buttonBox->button( QDialogButtonBox::Apply ), SIGNAL( clicked() ), this, SLOT( apply() ) ); connect( this, SIGNAL( accepted() ), this, SLOT( apply() ) ); connect( mAddAttributeButton, SIGNAL( clicked() ), this, SLOT( addAttribute() ) ); connect( mDeleteAttributeButton, SIGNAL( clicked() ), this, SLOT( deleteAttribute() ) ); connect( mToggleEditingButton, SIGNAL( clicked() ), this, SLOT( toggleEditing() ) ); connect( this, SIGNAL( toggleEditing( QgsMapLayer* ) ), QgisApp::instance(), SLOT( toggleEditing( QgsMapLayer* ) ) ); connect( layer, SIGNAL( editingStarted() ), this, SLOT( editingToggled() ) ); connect( layer, SIGNAL( editingStopped() ), this, SLOT( editingToggled() ) ); connect( layer, SIGNAL( attributeAdded( int ) ), this, SLOT( attributeAdded( int ) ) ); connect( layer, SIGNAL( attributeDeleted( int ) ), this, SLOT( attributeDeleted( int ) ) ); mAddAttributeButton->setIcon( QgisApp::getThemeIcon( "/mActionNewAttribute.png" ) ); mDeleteAttributeButton->setIcon( QgisApp::getThemeIcon( "/mActionDeleteAttribute.png" ) ); mToggleEditingButton->setIcon( QgisApp::getThemeIcon( "/mActionToggleEditing.png" ) ); // Create the Label dialog tab QVBoxLayout *layout = new QVBoxLayout( labelOptionsFrame ); layout->setMargin( 0 ); labelDialog = new QgsLabelDialog( layer->label(), labelOptionsFrame ); layout->addWidget( labelDialog ); labelOptionsFrame->setLayout( layout ); connect( labelDialog, SIGNAL( labelSourceSet() ), this, SLOT( setLabelCheckBox() ) ); // Create the Actions dialog tab QVBoxLayout *actionLayout = new QVBoxLayout( actionOptionsFrame ); actionLayout->setMargin( 0 ); const QgsFieldMap &fields = layer->pendingFields(); actionDialog = new QgsAttributeActionDialog( layer->actions(), fields, actionOptionsFrame ); actionLayout->addWidget( actionDialog ); reset(); if ( layer->dataProvider() )//enable spatial index button group if supported by provider { int capabilities = layer->dataProvider()->capabilities(); if ( !( capabilities&QgsVectorDataProvider::CreateSpatialIndex ) ) { pbnIndex->setEnabled( false ); } } updateButtons(); leSpatialRefSys->setText( layer->srs().toProj4() ); leSpatialRefSys->setCursorPosition( 0 ); connect( sliderTransparency, SIGNAL( valueChanged( int ) ), this, SLOT( sliderTransparency_valueChanged( int ) ) ); tabWidget->setCurrentIndex( 0 ); } // QgsVectorLayerProperties ctor