001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.geronimo.corba.security.config.css; 018 019 import java.io.Serializable; 020 021 import org.apache.commons.logging.Log; 022 import org.apache.commons.logging.LogFactory; 023 import org.omg.CORBA.Any; 024 import org.omg.CORBA.UserException; 025 import org.omg.CSI.EstablishContext; 026 import org.omg.CSI.SASContextBody; 027 import org.omg.CSI.SASContextBodyHelper; 028 import org.omg.IOP.SecurityAttributeService; 029 import org.omg.IOP.ServiceContext; 030 031 import org.apache.geronimo.corba.security.config.ConfigUtil; 032 import org.apache.geronimo.corba.security.config.tss.TSSCompoundSecMechConfig; 033 import org.apache.geronimo.corba.util.Util; 034 035 036 /** 037 * @version $Rev: 503274 $ $Date: 2007-02-03 10:19:18 -0800 (Sat, 03 Feb 2007) $ 038 */ 039 public class CSSCompoundSecMechConfig implements Serializable { 040 041 private final static Log log = LogFactory.getLog(CSSCompoundSecMechConfig.class); 042 043 private short supports; 044 private short requires; 045 private CSSTransportMechConfig transport_mech; 046 private CSSASMechConfig as_mech; 047 private CSSSASMechConfig sas_mech; 048 049 public CSSTransportMechConfig getTransport_mech() { 050 return transport_mech; 051 } 052 053 public void setTransport_mech(CSSTransportMechConfig transport_mech) { 054 this.transport_mech = transport_mech; 055 this.supports |= transport_mech.getSupports(); 056 this.requires |= transport_mech.getRequires(); 057 } 058 059 public CSSASMechConfig getAs_mech() { 060 return as_mech; 061 } 062 063 public void setAs_mech(CSSASMechConfig as_mech) { 064 this.as_mech = as_mech; 065 this.supports |= as_mech.getSupports(); 066 this.requires |= as_mech.getRequires(); 067 } 068 069 public CSSSASMechConfig getSas_mech() { 070 return sas_mech; 071 } 072 073 public void setSas_mech(CSSSASMechConfig sas_mech) { 074 this.sas_mech = sas_mech; 075 this.supports |= sas_mech.getSupports(); 076 this.requires |= sas_mech.getRequires(); 077 } 078 079 public boolean canHandle(TSSCompoundSecMechConfig requirement) { 080 081 if (log.isDebugEnabled()) { 082 log.debug("canHandle()"); 083 log.debug(" CSS SUPPORTS: " + ConfigUtil.flags(supports)); 084 log.debug(" CSS REQUIRES: " + ConfigUtil.flags(requires)); 085 log.debug(" TSS SUPPORTS: " + ConfigUtil.flags(requirement.getSupports())); 086 log.debug(" TSS REQUIRES: " + ConfigUtil.flags(requirement.getRequires())); 087 } 088 089 if ((supports & requirement.getRequires()) != requirement.getRequires()) return false; 090 if ((requires & requirement.getSupports()) != requires) return false; 091 092 if (!transport_mech.canHandle(requirement.getTransport_mech())) return false; 093 if (!as_mech.canHandle(requirement.getAs_mech())) return false; 094 if (!sas_mech.canHandle(requirement.getSas_mech())) return false; 095 096 return true; 097 } 098 099 public ServiceContext generateServiceContext() throws UserException { 100 101 if (as_mech instanceof CSSNULLASMechConfig && sas_mech.getIdentityToken() instanceof CSSSASITTAbsent) return null; 102 103 EstablishContext msg = new EstablishContext(); 104 105 msg.client_context_id = 0; 106 msg.client_authentication_token = as_mech.encode(); 107 msg.authorization_token = sas_mech.encodeAuthorizationElement(); 108 msg.identity_token = sas_mech.encodeIdentityToken(); 109 110 ServiceContext context = new ServiceContext(); 111 112 SASContextBody sas = new SASContextBody(); 113 sas.establish_msg(msg); 114 Any sas_any = Util.getORB().create_any(); 115 SASContextBodyHelper.insert(sas_any, sas); 116 context.context_data = Util.getCodec().encode_value(sas_any); 117 118 context.context_id = SecurityAttributeService.value; 119 120 return context; 121 } 122 123 public String toString() { 124 StringBuffer buf = new StringBuffer(); 125 toString("", buf); 126 return buf.toString(); 127 } 128 129 void toString(String spaces, StringBuffer buf) { 130 String moreSpaces = spaces + " "; 131 buf.append(spaces).append("CSSCompoundSecMechConfig: [\n"); 132 buf.append(moreSpaces).append("SUPPORTS: ").append(ConfigUtil.flags(supports)).append("\n"); 133 buf.append(moreSpaces).append("REQUIRES: ").append(ConfigUtil.flags(requires)).append("\n"); 134 transport_mech.toString(moreSpaces, buf); 135 as_mech.toString(moreSpaces, buf); 136 sas_mech.toString(moreSpaces, buf); 137 buf.append(spaces).append("]\n"); 138 } 139 140 }