package org.ovirt.engine.core.bll; import java.util.Collections; import java.util.Map; import org.ovirt.engine.core.bll.adbroker.AdActionType; import org.ovirt.engine.core.bll.adbroker.LdapCreateComputerAccountParameters; import org.ovirt.engine.core.bll.adbroker.LdapFactory; import org.ovirt.engine.core.bll.adbroker.LdapIsComputerWithSameNameExistsParameters; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.CreateComputerAccountParameters; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.RefObject; import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.DbFacade; // Wrong domain handling in IsComputerWithTheSameNameExists ad command public class CreateComputerAccountCommand<T extends CreateComputerAccountParameters> extends CommandBase<T> { public CreateComputerAccountCommand(T parameters) { super(parameters); } @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? AuditLogType.AD_COMPUTER_ACCOUNT_SUCCEEDED : AuditLogType.AD_COMPUTER_ACCOUNT_FAILED; } private String privateComputerName; public String getComputerName() { return privateComputerName; } private void setComputerName(String value) { privateComputerName = value; } @Override protected boolean canDoAction() { boolean returnValue = true; String user = null; String password = null; String domain = null; Guid vmId = getParameters().getVmId(); RefObject<String> tempRefObject = new RefObject<String>(user); RefObject<String> tempRefObject2 = new RefObject<String>(password); RefObject<String> tempRefObject3 = new RefObject<String>(domain); GetActualCredentials(tempRefObject, tempRefObject2, tempRefObject3); user = tempRefObject.argvalue; password = tempRefObject2.argvalue; domain = tempRefObject3.argvalue; VmStatic vmStatic = DbFacade.getInstance().getVmStaticDAO().get(vmId); if (vmStatic != null) { setComputerName(vmStatic.getvm_name()); returnValue = ((Boolean) LdapFactory .getInstance(getParameters().getDomain()) .RunAdAction(AdActionType.IsComputerWithTheSameNameExists, new LdapIsComputerWithSameNameExistsParameters(domain, user, password, getComputerName())) .getReturnValue()).booleanValue(); if (returnValue) { addCanDoActionMessage(VdcBllMessages.DIRECTORY_COMPUTER_WITH_THE_SAME_NAME_ALREADY_EXITS); } } else { addCanDoActionMessage(VdcBllMessages.VAR__ACTION__CREATE); addCanDoActionMessage(VdcBllMessages.VAR__TYPE__COMPUTER_ACCOUNT); addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_EXIST); } return !returnValue; } @Override protected void executeCommand() { String user = null; String password = null; String domain = null; RefObject<String> tempRefObject = new RefObject<String>(user); RefObject<String> tempRefObject2 = new RefObject<String>(password); RefObject<String> tempRefObject3 = new RefObject<String>(domain); GetActualCredentials(tempRefObject, tempRefObject2, tempRefObject3); user = tempRefObject.argvalue; password = tempRefObject2.argvalue; domain = tempRefObject3.argvalue; setSucceeded(LdapFactory .getInstance(getParameters().getDomain()) .RunAdAction( AdActionType.CreateComputerAccount, new LdapCreateComputerAccountParameters(domain, user, password, getParameters().getPath(), getComputerName())).getSucceeded()); } /** * Gets the actual credentials. * * @param user * The user. * @param password * The password. * @param domain * The domain. */ private void GetActualCredentials(RefObject<String> user, RefObject<String> password, RefObject<String> domain) { user.argvalue = StringHelper.isNullOrEmpty(getParameters().getUserName()) ? getCurrentUser().getUserName() : getParameters().getUserName(); password.argvalue = StringHelper.isNullOrEmpty(getParameters().getUserPassword()) ? getCurrentUser() .getPassword() : getParameters().getUserPassword(); domain.argvalue = StringHelper.isNullOrEmpty(getParameters().getDomain()) ? getCurrentUser() .getDomainControler() : getParameters().getDomain(); } @Override public Map<Guid, VdcObjectType> getPermissionCheckSubjects() { // Not needed for admin operations. return Collections.emptyMap(); } }