Yair Zaslavsky has uploaded a new change for review.

Change subject: core, tools: Supporting change password Url presentation
......................................................................

core, tools: Supporting change password Url presentation

The following patch introduces a new ability - in case of
password expireation, the user will see besides the message
that the password expired a link to a web-based system that will
allow him changing his password (this is an external system to oVirt,
such as IPA).
In order to set these URLs, a new optional parameter was introduced to
manage-domains, named changePasswordUrl

Change-Id: I8eb0f858e26bdefffe526623d025fac47791711e
Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com>
---
M 
backend/manager/modules/authentication/src/main/java/org/ovirt/engine/core/authentication/nop/NopAuthenticationResult.java
M 
backend/manager/modules/authentication/src/main/java/org/ovirt/engine/core/authentication/result/BooleanAuthenticationResult.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/authentication/provisional/ProvisionalAuthenticationResult.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/authentication/provisional/ProvisionalAuthenticator.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/LoginBaseCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/authentication/AuthenticationResult.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
M 
backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ConfigurationProvider.java
M 
backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
M packaging/bin/engine-manage-domains.sh
M packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
14 files changed, 133 insertions(+), 31 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/50/23250/1

diff --git 
a/backend/manager/modules/authentication/src/main/java/org/ovirt/engine/core/authentication/nop/NopAuthenticationResult.java
 
b/backend/manager/modules/authentication/src/main/java/org/ovirt/engine/core/authentication/nop/NopAuthenticationResult.java
index ac37708..44c2cc5 100644
--- 
a/backend/manager/modules/authentication/src/main/java/org/ovirt/engine/core/authentication/nop/NopAuthenticationResult.java
+++ 
b/backend/manager/modules/authentication/src/main/java/org/ovirt/engine/core/authentication/nop/NopAuthenticationResult.java
@@ -4,7 +4,6 @@
 import java.util.List;
 
 import org.ovirt.engine.core.authentication.AuthenticationResult;
-import org.ovirt.engine.core.common.errors.VdcBllMessages;
 
 public class NopAuthenticationResult extends AuthenticationResult<Object> {
 
@@ -18,7 +17,7 @@
     }
 
     @Override
-    public List<VdcBllMessages> resolveMessage() {
+    public List<String> resolveMessage() {
         return Collections.emptyList();
     }
 }
diff --git 
a/backend/manager/modules/authentication/src/main/java/org/ovirt/engine/core/authentication/result/BooleanAuthenticationResult.java
 
b/backend/manager/modules/authentication/src/main/java/org/ovirt/engine/core/authentication/result/BooleanAuthenticationResult.java
index 7c3c291..8468545 100644
--- 
a/backend/manager/modules/authentication/src/main/java/org/ovirt/engine/core/authentication/result/BooleanAuthenticationResult.java
+++ 
b/backend/manager/modules/authentication/src/main/java/org/ovirt/engine/core/authentication/result/BooleanAuthenticationResult.java
@@ -4,7 +4,6 @@
 import java.util.List;
 
 import org.ovirt.engine.core.authentication.AuthenticationResult;
-import org.ovirt.engine.core.common.errors.VdcBllMessages;
 
 public class BooleanAuthenticationResult extends AuthenticationResult<Boolean> 
{
 
@@ -18,7 +17,7 @@
     }
 
     @Override
-    public List<VdcBllMessages> resolveMessage() {
+    public List<String> resolveMessage() {
         return Collections.emptyList();
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/authentication/provisional/ProvisionalAuthenticationResult.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/authentication/provisional/ProvisionalAuthenticationResult.java
index 2081bcb..5235d61 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/authentication/provisional/ProvisionalAuthenticationResult.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/authentication/provisional/ProvisionalAuthenticationResult.java
@@ -1,15 +1,41 @@
 package org.ovirt.engine.core.authentication.provisional;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.ovirt.engine.core.authentication.AuthenticationResult;
 import org.ovirt.engine.core.bll.adbroker.UserAuthenticationResult;
+import org.ovirt.engine.core.common.config.Config;
+import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 
 public class ProvisionalAuthenticationResult extends 
AuthenticationResult<UserAuthenticationResult> {
 
-    public ProvisionalAuthenticationResult(UserAuthenticationResult 
detailedInfo) {
+
+    private static Map<String, String> passwordChangeUrlsPerDomain = null;
+    private String domain;
+
+    public ProvisionalAuthenticationResult(String domain, 
UserAuthenticationResult detailedInfo) {
         super(detailedInfo);
+        // Assumption - loading of provisional authenticators is done in 
serial way
+        // no need to double check pattern
+        if (passwordChangeUrlsPerDomain == null) {
+            passwordChangeUrlsPerDomain = new HashMap<String, String>();
+            String changePasswordUrl = Config.<String> 
getValue(ConfigValues.ChangePasswordUrl);
+            String[] pairs = changePasswordUrl.split(",");
+            for (String pair : pairs) {
+                // Split the pair in such a way that if the URL contains :, it 
will not be split to strings
+                String[] pairParts = pair.split(":", 2);
+                if (pairParts.length >= 2) {
+                    passwordChangeUrlsPerDomain.put(pairParts[0], 
pairParts[1]);
+                }
+            }
+        }
+        this.domain = domain;
+
     }
 
     @Override
@@ -18,8 +44,25 @@
     }
 
     @Override
-    public List<VdcBllMessages> resolveMessage() {
-        return detailedInfo.getErrorMessages();
+    public List<String> resolveMessage() {
+        Iterator<VdcBllMessages> it = 
detailedInfo.getErrorMessages().iterator();
+        List<String> result = new ArrayList<>();
+        while (it.hasNext()) {
+            VdcBllMessages current = it.next();
+            if (current == VdcBllMessages.USER_PASSWORD_EXPIRED) {
+                String passwordChangeUrl = 
passwordChangeUrlsPerDomain.get(domain);
+                if (passwordChangeUrl != null) {
+                    
result.add(VdcBllMessages.USER_PASSWORD_EXPIRED_CHANGE_URL_PROVIDED.name());
+                    result.add(String.format("$URL %1$s", passwordChangeUrl));
+                } else {
+                    result.add(current.name());
+                }
+            } else {
+                result.add(current.name());
+
+            }
+        }
+        return result;
     }
 
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/authentication/provisional/ProvisionalAuthenticator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/authentication/provisional/ProvisionalAuthenticator.java
index 2a4e3a8..a78d969 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/authentication/provisional/ProvisionalAuthenticator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/authentication/provisional/ProvisionalAuthenticator.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.authentication.provisional;
 
+import java.util.Map;
+
 import org.ovirt.engine.core.authentication.AuthenticationResult;
 import org.ovirt.engine.core.authentication.PasswordAuthenticator;
 import org.ovirt.engine.core.bll.adbroker.AdActionType;
@@ -18,6 +20,8 @@
      * The name of the domain.
      */
     private String domain;
+
+    private static Map<String, String> passwordChangeUrlsPerDomain = null;
 
     /**
      * The reference to the LDAP broker that implements the authentication.
@@ -39,6 +43,6 @@
             new LdapUserPasswordBaseParameters(domain, name, password)
         );
         UserAuthenticationResult authResult = (UserAuthenticationResult) 
ldapResult.getReturnValue();
-        return new ProvisionalAuthenticationResult(authResult);
+        return new ProvisionalAuthenticationResult(domain, authResult);
     }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/LoginBaseCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/LoginBaseCommand.java
index 352710a..5a8112f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/LoginBaseCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/LoginBaseCommand.java
@@ -144,8 +144,8 @@
                 loginName,
                 profileName
             );
-            for (VdcBllMessages msg : result.resolveMessage()) {
-                addCanDoActionMessage(msg);
+            for (String msg : result.resolveMessage()) {
+                getReturnValue().getCanDoActionMessages().add(msg);
             }
             return false;
         }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/authentication/AuthenticationResult.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/authentication/AuthenticationResult.java
index f29ba91..8e0ef10 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/authentication/AuthenticationResult.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/authentication/AuthenticationResult.java
@@ -2,8 +2,6 @@
 
 import java.util.List;
 
-import org.ovirt.engine.core.common.errors.VdcBllMessages;
-
 /**
  * This class represents a result returned by an Authenticator
  */
@@ -33,5 +31,5 @@
      * Resolves the detailed information into VdcBll messages
      * @return
      */
-    public abstract List<VdcBllMessages> resolveMessage();
+    public abstract List<String> resolveMessage();
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
index 73502bd..c6081ea 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
@@ -1586,5 +1586,9 @@
     @DefaultValueAttribute("10")
     MaxNumOfTriesToRunFailedAutoStartVm,
 
+    @TypeConverterAttribute(String.class)
+    @DefaultValueAttribute("")
+    ChangePasswordUrl,
+
     Invalid;
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
index 9a96f64..adc09a8 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
@@ -381,6 +381,7 @@
     USER_FAILED_TO_AUTHENTICATE(ErrorType.NO_AUTHENTICATION),
     USER_FAILED_TO_AUTHENTICATE_KERBEROS_ERROR(ErrorType.NO_AUTHENTICATION),
     USER_PASSWORD_EXPIRED(ErrorType.NO_AUTHENTICATION),
+    USER_PASSWORD_EXPIRED_CHANGE_URL_PROVIDED(ErrorType.NO_AUTHENTICATION),
     USER_ACCOUNT_DISABLED(ErrorType.NO_AUTHENTICATION),
     USER_PERMISSION_DENIED(ErrorType.NO_AUTHENTICATION),
     USER_MUST_EXIST_IN_DB(ErrorType.NO_AUTHENTICATION),
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
index 5c584a2..24aea03 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -913,6 +913,7 @@
 
 #Suspected (not in use?)
 USER_PASSWORD_EXPIRED=Cannot Login. User Password has expired, Please change 
your password.
+USER_PASSWORD_EXPIRED_CHANGE_URL_PROVIDED=Cannot Login. User Password has 
expired. Use the following URL to change the password: ${URL} 
 USER_CANNOT_LOGIN_DOMAIN_NOT_SUPPORTED=Cannot Login. The Domain provided is 
not configured, please contact your system administrator.
 VM_POOL_CANNOT_DECREASE_VMS_FROM_POOL=Cannot decrease VMs from VM-Pool.
 
diff --git 
a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ConfigurationProvider.java
 
b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ConfigurationProvider.java
index 314a43c..f519f6c 100644
--- 
a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ConfigurationProvider.java
+++ 
b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ConfigurationProvider.java
@@ -3,12 +3,12 @@
 import static org.ovirt.engine.core.common.config.ConfigValues.AdUserId;
 import static org.ovirt.engine.core.common.config.ConfigValues.AdUserName;
 import static org.ovirt.engine.core.common.config.ConfigValues.AdUserPassword;
+import static 
org.ovirt.engine.core.common.config.ConfigValues.ChangePasswordUrl;
 import static org.ovirt.engine.core.common.config.ConfigValues.DomainName;
 import static 
org.ovirt.engine.core.common.config.ConfigValues.LDAPProviderTypes;
 import static 
org.ovirt.engine.core.common.config.ConfigValues.LDAPSecurityAuthentication;
-import static org.ovirt.engine.core.common.config.ConfigValues.LdapServers;
 import static org.ovirt.engine.core.common.config.ConfigValues.LDAPServerPort;
-
+import static org.ovirt.engine.core.common.config.ConfigValues.LdapServers;
 
 import java.io.BufferedWriter;
 import java.io.File;
@@ -34,7 +34,7 @@
             String adUserId,
             String ldapProviderTypes,
             String engineConfigExecutable,
-            String engineConfigProperties, String ldapServerPort) {
+            String engineConfigProperties, String ldapServerPort, String 
passwordChangeUrls) {
         super();
         configVals.put(AdUserName, adUserName);
         configVals.put(AdUserPassword, adUserPassword);
@@ -44,6 +44,7 @@
         configVals.put(AdUserId, adUserId);
         configVals.put(LDAPProviderTypes, ldapProviderTypes);
         configVals.put(LDAPServerPort, ldapServerPort);
+        configVals.put(ChangePasswordUrl, passwordChangeUrls);
         this.engineConfigExecutable = engineConfigExecutable;
         this.engineConfigProperties = engineConfigProperties;
     }
diff --git 
a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java
 
b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java
index a8d57f5..bf5c4c7 100644
--- 
a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java
+++ 
b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java
@@ -97,6 +97,7 @@
         provider,
         forceDelete,
         ldapServers,
+        changePasswordUrl,
     }
 
     public enum ActionType {
@@ -251,6 +252,11 @@
             if (ldapPort == null) {
                 ldapPort = DEFAULT_LDAP_SERVER_PORT;
             }
+            String changePasswordUrl =
+                    getConfigValue(engineConfigExecutable, 
engineConfigProperties, ConfigValues.ChangePasswordUrl);
+            if (changePasswordUrl == null) {
+                changePasswordUrl = "";
+            }
 
             configurationProvider =
                     new ConfigurationProvider(adUserName,
@@ -261,7 +267,7 @@
                             adUserId,
                             ldapProviderTypes,
                             
utilityConfiguration.getEngineConfigExecutablePath(),
-                            engineConfigProperties, ldapPort);
+                            engineConfigProperties, ldapPort, 
changePasswordUrl);
 
         } catch (Throwable e) {
             throw new 
ManageDomainsResult(ManageDomainsResultEnum.FAILED_READING_CURRENT_CONFIGURATION,
 e.getMessage());
@@ -333,6 +339,21 @@
             sb.append(" " + t.name() + "\n");
         }
         throw new 
ManageDomainsResult(ManageDomainsResultEnum.INVALID_ARGUMENT_FOR_COMMAND, 
sb.toString());
+    }
+
+    protected String getChangePasswordUrl(CLIParser parser) throws 
ManageDomainsResult {
+        String changePasswordUrl = 
parser.getArg(Arguments.changePasswordUrl.name());
+        if (StringUtils.isEmpty(changePasswordUrl)) {
+            throw new 
ManageDomainsResult(ManageDomainsResultEnum.INVALID_ARGUMENT_FOR_COMMAND,
+                    "Password change URL must not be empty");
+        }
+        try {
+            URL url = new URL(changePasswordUrl);
+        } catch (MalformedURLException e) {
+            throw new 
ManageDomainsResult(ManageDomainsResultEnum.INVALID_ARGUMENT_FOR_COMMAND,
+                    "The provided string for Password change URL is not a 
valid URL");
+        }
+        return changePasswordUrl;
     }
 
     private String getPasswordInput(CLIParser parser) throws 
ManageDomainsResult {
@@ -498,6 +519,7 @@
         List<String> ldapServers = getLdapServers(parser, domainName);
         validateKdcServers(authMode, domainName);
         domainNameEntry.setValueForDomain(domainName, null);
+        String changePasswordUrl = getChangePasswordUrl(parser);
 
         String currentAdUserNameEntry = 
configurationProvider.getConfigValue(ConfigValues.AdUserName);
         String currentAdUserPasswordEntry = 
configurationProvider.getConfigValue(ConfigValues.AdUserPassword);
@@ -506,6 +528,7 @@
         String currentAdUserIdEntry = 
configurationProvider.getConfigValue(ConfigValues.AdUserId);
         String currentLDAPProviderTypes = 
configurationProvider.getConfigValue(ConfigValues.LDAPProviderTypes);
         String ldapServerPort = 
configurationProvider.getConfigValue(ConfigValues.LDAPServerPort);
+        String currentChangePasswordUrl = 
configurationProvider.getConfigValue(ConfigValues.ChangePasswordUrl);
 
         DomainsConfigurationEntry adUserNameEntry =
                 new DomainsConfigurationEntry(currentAdUserNameEntry, 
DOMAIN_SEPERATOR, VALUE_SEPERATOR);
@@ -519,6 +542,9 @@
                 new DomainsConfigurationEntry(currentAdUserIdEntry, 
DOMAIN_SEPERATOR, VALUE_SEPERATOR);
         DomainsConfigurationEntry ldapProviderTypesEntry =
                 new DomainsConfigurationEntry(currentLDAPProviderTypes, 
DOMAIN_SEPERATOR, VALUE_SEPERATOR);
+        DomainsConfigurationEntry changePasswordUrlEntry =
+                new DomainsConfigurationEntry(currentChangePasswordUrl, 
DOMAIN_SEPERATOR, VALUE_SEPERATOR);
+
 
         LdapProviderType ldapProviderType = getLdapProviderType(parser);
         adUserNameEntry.setValueForDomain(domainName, userName);
@@ -526,6 +552,8 @@
         authModeEntry.setValueForDomain(domainName, authMode);
         ldapProviderTypesEntry.setValueForDomain(domainName, 
ldapProviderType.name());
         setLdapServersPerDomain(domainName, ldapServersEntry, 
StringUtils.join(ldapServers, ","));
+        changePasswordUrlEntry.setValueForDomain(domainName, 
changePasswordUrl);
+
 
 
         testConfiguration(domainName,
@@ -550,7 +578,7 @@
                 authModeEntry,
                 ldapServersEntry,
                 adUserIdEntry,
-                ldapProviderTypesEntry);
+                ldapProviderTypesEntry, changePasswordUrlEntry);
 
         printSuccessMessage(domainName, "added");
     }
@@ -627,6 +655,7 @@
         String currentAdUserIdEntry = 
configurationProvider.getConfigValue(ConfigValues.AdUserId);
         String currentLdapProviderTypeEntry = 
configurationProvider.getConfigValue(ConfigValues.LDAPProviderTypes);
         String ldapServerPort = 
configurationProvider.getConfigValue(ConfigValues.LDAPServerPort);
+        String currentChangePasswordUrl = 
configurationProvider.getConfigValue(ConfigValues.ChangePasswordUrl);
 
 
         DomainsConfigurationEntry adUserNameEntry =
@@ -639,6 +668,9 @@
                 new DomainsConfigurationEntry(currentAdUserIdEntry, 
DOMAIN_SEPERATOR, VALUE_SEPERATOR);
         DomainsConfigurationEntry ldapProviderTypeEntry =
                 new DomainsConfigurationEntry(currentLdapProviderTypeEntry, 
DOMAIN_SEPERATOR, VALUE_SEPERATOR);
+        DomainsConfigurationEntry changePaswordUrlEntry =
+                new DomainsConfigurationEntry(currentChangePasswordUrl, 
DOMAIN_SEPERATOR, VALUE_SEPERATOR);
+
 
         if (userName != null) {
             adUserNameEntry.setValueForDomain(domainName, userName);
@@ -663,6 +695,9 @@
         if (ldapProviderType != null) {
             ldapProviderTypeEntry.setValueForDomain(domainName, 
ldapProviderType.name());
         }
+        if (parser.hasArg(Arguments.changePasswordUrl.name())) {
+            changePaswordUrlEntry.setValueForDomain(domainName, 
getChangePasswordUrl(parser));
+        }
 
         testConfiguration(domainName,
                 domainNameEntry,
@@ -685,7 +720,8 @@
                 authModeEntry,
                 ldapServersEntry,
                 adUserIdEntry,
-                ldapProviderTypeEntry);
+                ldapProviderTypeEntry,
+                changePaswordUrlEntry);
 
         printSuccessMessage(domainName, "edited");
     }
@@ -930,7 +966,8 @@
             DomainsConfigurationEntry authModeEntry,
             DomainsConfigurationEntry ldapServersEntry,
             DomainsConfigurationEntry adUserIdEntry,
-            DomainsConfigurationEntry ldapProviderTypeEntry) throws 
ManageDomainsResult {
+            DomainsConfigurationEntry ldapProviderTypeEntry, 
DomainsConfigurationEntry changePasswordUrlEntry)
+            throws ManageDomainsResult {
         // Update the configuration
         configurationProvider.setConfigValue(ConfigValues.AdUserName,
                 adUserNameEntry);
@@ -952,6 +989,8 @@
 
         configurationProvider.setConfigValue(ConfigValues.LDAPProviderTypes,
                 ldapProviderTypeEntry);
+
+        configurationProvider.setConfigValue(ConfigValues.ChangePasswordUrl, 
changePasswordUrlEntry);
     }
 
     public void deleteDomain(String domainName, boolean forceDelete) throws 
ManageDomainsResult {
@@ -983,6 +1022,7 @@
         String currentLdapServersEntry = 
configurationProvider.getConfigValue(ConfigValues.LdapServers);
         String currentAdUserId = 
configurationProvider.getConfigValue(ConfigValues.AdUserId);
         String ldapProviderType = 
configurationProvider.getConfigValue(ConfigValues.LDAPProviderTypes);
+        String changePasswordUrl = 
configurationProvider.getConfigValue(ConfigValues.ChangePasswordUrl);
 
         DomainsConfigurationEntry adUserNameEntry =
                 new DomainsConfigurationEntry(currentAdUserNameEntry, 
DOMAIN_SEPERATOR, VALUE_SEPERATOR);
@@ -997,12 +1037,16 @@
         DomainsConfigurationEntry ldapProviderTypeEntry =
                 new DomainsConfigurationEntry(ldapProviderType, 
DOMAIN_SEPERATOR, VALUE_SEPERATOR);
 
+        DomainsConfigurationEntry changePasswordUrlEntry =
+                new DomainsConfigurationEntry(changePasswordUrl, 
DOMAIN_SEPERATOR, VALUE_SEPERATOR);
+
         adUserNameEntry.removeValueForDomain(domainName);
         adUserIdEntry.removeValueForDomain(domainName);
         adUserPasswordEntry.removeValueForDomain(domainName);
         authModeEntry.removeValueForDomain(domainName);
         ldapServersEntry.removeValueForDomain(domainName);
         ldapProviderTypeEntry.removeValueForDomain(domainName);
+        changePasswordUrlEntry.removeValueForDomain(domainName);
 
         // Update the configuration
         setConfigurationEntries(domainNameEntry,
@@ -1011,7 +1055,7 @@
                 authModeEntry,
                 ldapServersEntry,
                 adUserIdEntry,
-                ldapProviderTypeEntry);
+                ldapProviderTypeEntry, changePasswordUrlEntry);
 
         System.out.println(String.format(DELETE_DOMAIN_SUCCESS, domainName));
     }
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
index 51800c4..3b0f89c 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
@@ -2474,10 +2474,12 @@
     @DefaultStringValue("Cannot disable VirtIO-SCSI when disks with a 
VirtIO-SCSI interface are plugged into the VM.")
     String CANNOT_DISABLE_VIRTIO_SCSI_PLUGGED_DISKS();
 
-    // Suspected (not in use?)
     @DefaultStringValue("Cannot Login. User Password has expired, Please 
change your password.")
     String USER_PASSWORD_EXPIRED();
 
+    @DefaultStringValue("Cannot Login. User Password has expired. Use the 
following URL to change the password: ${URL}")
+    String USER_PASSWORD_EXPIRED_CHANGE_URL_PROVIDED();
+
     @DefaultStringValue("Cannot Login. The Domain provided is not configured, 
please contact your system administrator.")
     String USER_CANNOT_LOGIN_DOMAIN_NOT_SUPPORTED();
 
diff --git a/packaging/bin/engine-manage-domains.sh 
b/packaging/bin/engine-manage-domains.sh
index 7eb920e..5984a2d 100755
--- a/packaging/bin/engine-manage-domains.sh
+++ b/packaging/bin/engine-manage-domains.sh
@@ -11,16 +11,17 @@
        cat << __EOF__
 engine-manage-domains: add/edit/delete/validate/list domains
 USAGE:
-        engine-manage-domains -action=ACTION [-domain=DOMAIN 
-provider=PROVIDER -user=USER -passwordFile=PASSWORD_FILE -interactive 
-configFile=PATH -addPermissions -forceDelete -ldapServers=LDAP_SERVERS] -report
+        engine-manage-domains -action=ACTION [-domain=DOMAIN 
-provider=PROVIDER -user=USER -passwordFile=PASSWORD_FILE -interactive 
-configFile=PATH -addPermissions -forceDelete -ldapServers=LDAP_SERVERS 
-changePasswordUrl] -report
 Where:
-        ACTION             action to perform (add/edit/delete/validate/list). 
See details below.
-        DOMAIN             (mandatory for add, edit and delete) the domain you 
wish to perform the action on.
-        PROVIDER           (mandatory for add, optional for edit) the LDAP 
provider type of server used for the domain. Among the supported providers IPA, 
RHDS, ITDS, ActiveDirectory and OpenLDAP.
-        USER               (optional for edit, mandatory for add) the domain 
user.
-        PASSWORD_FILE      (optional for edit, mandatory for add) a file 
containing the password in the first line.
-        interactive        alternative for using -passwordFile - read the 
password interactively.
-        PATH               (optional) use the given alternate configuration 
file.
-        LDAP_SERVERS       (optional) a comma delimited list of LDAP servers 
to be set to the domain.
+        ACTION                 action to perform 
(add/edit/delete/validate/list). See details below.
+        DOMAIN                 (mandatory for add, edit and delete) the domain 
you wish to perform the action on.
+        PROVIDER               (mandatory for add, optional for edit) the LDAP 
provider type of server used for the domain. Among the supported providers IPA, 
RHDS, ITDS, ActiveDirectory and OpenLDAP.
+        USER                   (optional for edit, mandatory for add) the 
domain user.
+        PASSWORD_FILE          (optional for edit, mandatory for add) a file 
containing the password in the first line.
+        interactive            alternative for using -passwordFile - read the 
password interactively.
+        PATH                   (optional) use the given alternate 
configuration file.
+        LDAP_SERVERS           (optional) a comma delimited list of LDAP 
servers to be set to the domain.
+        CHANGE_PASSWORD_URL    (optional) a URL to be returned to the user in 
case 
 
         Available actions:
         add
@@ -100,6 +101,7 @@
 LdapServers=
 LDAPProviderTypes=
 LDAPServerPort=
+ChangePasswordUrl=
 __EOF__
 
 #
diff --git a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql 
b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
index 07dcfa9..e7d8b06 100644
--- a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
+++ b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
@@ -609,6 +609,10 @@
 select fn_db_add_config_value('EnableVdsHaReservation','true','general');
 select 
fn_db_add_config_value('VdsHaReservationIntervalInMinutes','5','general');
 
+--Password URL change
+select fn_db_add_config_value('ChangePasswordUrl','','general');
+
+
 
------------------------------------------------------------------------------------
 --                  Update with override section
 
------------------------------------------------------------------------------------


-- 
To view, visit http://gerrit.ovirt.org/23250
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8eb0f858e26bdefffe526623d025fac47791711e
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Yair Zaslavsky <yzasl...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to