Juan Hernandez has uploaded a new change for review.

Change subject: core: Generic make GUID from LDAP
......................................................................

core: Generic make GUID from LDAP

Currently we have the code to make GUIDs from LDAP ids inside the LDAP
mapper classes. To make the LDAP layer more general it is convenient to
have this logic only in one place.

Change-Id: I8d7098020d57a17a8e22fe1d97dcc81d603e1ac4
Signed-off-by: Juan Hernandez <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ADUserContextMapper.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/IPAUserContextMapper.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ITDSGroupContextMapper.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ITDSUserContextMapper.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapBrokerUtils.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSGroupContextMapper.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSUserContextMapper.java
A 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/LdapUtils.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/ADUserContextMapper.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/IPAUserContextMapper.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/ITDSUserContextMapper.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/RHDSUserContextMapper.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/kerberos/JndiAction.java
13 files changed, 110 insertions(+), 80 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/93/14993/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ADUserContextMapper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ADUserContextMapper.java
index 3d96806..a0cf5a2 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ADUserContextMapper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ADUserContextMapper.java
@@ -21,7 +21,7 @@
 import org.springframework.ldap.core.DirContextAdapter;
 
 import org.ovirt.engine.core.common.businessentities.LdapUser;
-import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.LdapUtils;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 
@@ -51,10 +51,8 @@
         user = new LdapUser();
 
         try {
-            Object adObjectGuid = attributes.get(objectguid.name()).get(0);
-            byte[] guidBytes = (byte[]) adObjectGuid;
-            Guid guid = new Guid(guidBytes,false);
-            user.setUserId(guid);
+            Object ldapId = attributes.get(objectguid.name()).get(0);
+            user.setUserId(LdapUtils.makeGuidFromLdapId(ldapId));
 
             // Getting other string properties
             Attribute att = attributes.get(userprincipalname.name());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/IPAUserContextMapper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/IPAUserContextMapper.java
index 42ff031..1ab666d 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/IPAUserContextMapper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/IPAUserContextMapper.java
@@ -21,7 +21,7 @@
 import org.springframework.ldap.core.DirContextAdapter;
 
 import org.ovirt.engine.core.common.businessentities.LdapUser;
-import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.LdapUtils;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 
@@ -50,11 +50,9 @@
         LdapUser user;
         user = new LdapUser();
 
-        // user's Guid
-        String objectGuid;
         try {
-            objectGuid = (String)attributes.get(ipaUniqueId.name()).get(0);
-            user.setUserId(Guid.createGuidFromString(objectGuid));
+            Object ldapId = attributes.get(ipaUniqueId.name()).get(0);
+            user.setUserId(LdapUtils.makeGuidFromLdapId(ldapId));
 
             // Getting other string properties
             Attribute att = attributes.get(krbPrincipalname.name());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ITDSGroupContextMapper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ITDSGroupContextMapper.java
index 33a76c0..cb60d13 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ITDSGroupContextMapper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ITDSGroupContextMapper.java
@@ -10,7 +10,7 @@
 import javax.naming.directory.Attribute;
 import javax.naming.directory.Attributes;
 
-import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.LdapUtils;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 import org.springframework.ldap.core.ContextMapper;
@@ -54,7 +54,7 @@
             String distinguishedName = searchResult.getNameInNamespace();
             distinguishedName = 
LdapBrokerUtils.hadleNameEscaping(distinguishedName);
             GroupSearchResult groupSearchResult =
-                    new 
GroupSearchResult(Guid.createGuidFromString(LdapBrokerUtils.getGuidFromNsUniqueId(objectGuid)),
+                    new 
GroupSearchResult(LdapUtils.makeGuidFromLdapId(objectGuid),
                             memberOf,
                             distinguishedName);
             return groupSearchResult;
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ITDSUserContextMapper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ITDSUserContextMapper.java
index 3cd0742..11ddef3 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ITDSUserContextMapper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/ITDSUserContextMapper.java
@@ -13,7 +13,7 @@
 import javax.naming.directory.Attributes;
 
 import org.ovirt.engine.core.common.businessentities.LdapUser;
-import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.LdapUtils;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 import org.springframework.ldap.core.ContextMapper;
@@ -43,11 +43,9 @@
         LdapUser user;
         user = new LdapUser();
 
-        // user's Guid
-        String objectGuid;
         try {
-            objectGuid = 
(String)attributes.get(uniqueIdentifier.name()).get(0);
-            user.setUserId(Guid.createGuidFromString(objectGuid));
+            Object ldapId = attributes.get(uniqueIdentifier.name()).get(0);
+            user.setUserId(LdapUtils.makeGuidFromLdapId(ldapId));
 
             // Getting other string properties
             Attribute att = attributes.get(uid.name());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapBrokerUtils.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapBrokerUtils.java
index 98e0111..a66dfb1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapBrokerUtils.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/LdapBrokerUtils.java
@@ -372,19 +372,6 @@
         AuditLogDirector.log(msg, auditLogType);
     }
 
-    public static String getGuidFromNsUniqueId(String nsUniqueId) {
-        // 12345678-12345678-12345678-12345678 -->
-        // 12345678-1234-5678-1234-567812345678
-        StringBuilder sb = new StringBuilder();
-        sb.append(nsUniqueId.substring(0, 13))
-                .append("-")
-                .append(nsUniqueId.substring(13, 22))
-                .append("-")
-                .append(nsUniqueId.substring(22, 26))
-                .append(nsUniqueId.substring(27, 35));
-        return sb.toString();
-    }
-
     /**
      * set ldap configuration with ConfigValue data
      *
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSGroupContextMapper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSGroupContextMapper.java
index 770ebde..3ab73d9 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSGroupContextMapper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSGroupContextMapper.java
@@ -10,7 +10,7 @@
 import javax.naming.directory.Attribute;
 import javax.naming.directory.Attributes;
 
-import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.LdapUtils;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 import org.springframework.ldap.core.ContextMapper;
@@ -53,7 +53,7 @@
             String distinguishedName = searchResult.getNameInNamespace();
             distinguishedName = 
LdapBrokerUtils.hadleNameEscaping(distinguishedName);
             GroupSearchResult groupSearchResult =
-                    new 
GroupSearchResult(Guid.createGuidFromString(LdapBrokerUtils.getGuidFromNsUniqueId(objectGuid)),
+                    new 
GroupSearchResult(LdapUtils.makeGuidFromLdapId(objectGuid),
                             memberOf,
                             distinguishedName);
             return groupSearchResult;
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSUserContextMapper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSUserContextMapper.java
index 0865d1b..91da290 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSUserContextMapper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/RHDSUserContextMapper.java
@@ -18,7 +18,7 @@
 import javax.naming.directory.Attributes;
 
 import org.ovirt.engine.core.common.businessentities.LdapUser;
-import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.LdapUtils;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 import org.springframework.ldap.core.ContextMapper;
@@ -49,11 +49,9 @@
         LdapUser user;
         user = new LdapUser();
 
-        // user's Guid
-        String objectGuid;
         try {
-            objectGuid = (String) attributes.get(nsUniqueId.name()).get(0);
-            
user.setUserId(Guid.createGuidFromString(LdapBrokerUtils.getGuidFromNsUniqueId(objectGuid)));
+            Object ldapId = attributes.get(nsUniqueId.name()).get(0);
+            user.setUserId(LdapUtils.makeGuidFromLdapId(ldapId));
 
             // Getting other string properties
             Attribute att = attributes.get(uid.name());
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/LdapUtils.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/LdapUtils.java
new file mode 100644
index 0000000..e97d603
--- /dev/null
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/LdapUtils.java
@@ -0,0 +1,58 @@
+package org.ovirt.engine.core.utils;
+
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.binary.Hex;
+import org.apache.log4j.Logger;
+import org.ovirt.engine.core.compat.Guid;
+
+public class LdapUtils {
+    // The log:
+    private static final Logger log = Logger.getLogger(LdapUtils.class);
+
+    /**
+     * Makes a GUID from an identifier obtained from LDAP assuming that it will
+     * fit into the 128 bits of the GUID.
+     *
+     * @param ldapId the id from the LDAP server
+     * @return the GUID corresponding to the given LDAP identifier, or
+     *   <code>null</code> if the LDAP identifier can't be transformed into
+     *   a GUID
+     */
+    public static Guid makeGuidFromLdapId(Object ldapId) {
+        // The only LDAP server that returns a binary id is Active Directory
+        // and in this case we need to reverse the order of some of the bytes:
+        if (ldapId instanceof byte[]) {
+            byte[] idBytes = (byte[]) ldapId;
+            return new Guid(idBytes, true);
+        }
+
+        // The rest of the LDAP servers return string representations of the
+        // ids, but with varied layouts, specially when it comes to the 
location
+        // of the dashes, so it is better if we remove all the dashes before
+        // decoding it:
+        if (ldapId instanceof String) {
+            String idText = (String) ldapId;
+            idText.replaceAll("-", "");
+            byte[] idBytes;
+            try {
+                idBytes = Hex.decodeHex(idText.toCharArray());
+            }
+            catch (DecoderException exception) {
+                log.error(
+                    "Error decoding LDAP id \"" + idText + "\", will " +
+                    "return null.",
+                    exception
+                );
+                return null;
+            }
+            return new Guid(idBytes, false);
+        }
+
+        // This should never happen:
+        log.error(
+            "LDAP id \"" + ldapId + "\" is of an unknown type \"" +
+            ldapId.getClass().getName() + "\", will return null."
+        );
+        return null;
+    }
+}
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/ADUserContextMapper.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/ADUserContextMapper.java
index e1d3941..8c4fc30 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/ADUserContextMapper.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/ADUserContextMapper.java
@@ -5,6 +5,7 @@
 import javax.naming.NamingException;
 import javax.naming.directory.Attributes;
 
+import org.ovirt.engine.core.utils.LdapUtils;
 import org.springframework.ldap.core.ContextMapper;
 import org.springframework.ldap.core.DirContextAdapter;
 
@@ -24,9 +25,8 @@
         }
 
         try {
-            Object objectGuid = attributes.get("objectGUID").get();
-            byte[] guid = (byte[]) objectGuid;
-            return ((new org.ovirt.engine.core.compat.Guid(guid, 
false)).toString());
+            Object ldapId = attributes.get("objectGUID").get();
+            return LdapUtils.makeGuidFromLdapId(ldapId);
         } catch (NamingException e) {
             System.err.println(ERROR_PREFIX + "Failed getting user GUID");
             return null;
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/IPAUserContextMapper.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/IPAUserContextMapper.java
index 7756a3d..a3242c2 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/IPAUserContextMapper.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/IPAUserContextMapper.java
@@ -5,6 +5,7 @@
 import javax.naming.NamingException;
 import javax.naming.directory.Attributes;
 
+import org.ovirt.engine.core.utils.LdapUtils;
 import org.springframework.ldap.core.ContextMapper;
 import org.springframework.ldap.core.DirContextAdapter;
 
@@ -24,7 +25,8 @@
         }
 
         try {
-            return attributes.get("ipaUniqueId").get(0);
+            Object ldapId = attributes.get("ipaUniqueId").get();
+            return LdapUtils.makeGuidFromLdapId(ldapId);
         } catch (NamingException e) {
             System.err.println(ERROR_PREFIX + "Failed getting user GUID");
             return null;
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/ITDSUserContextMapper.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/ITDSUserContextMapper.java
index 881e3e2..58e7941 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/ITDSUserContextMapper.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/ITDSUserContextMapper.java
@@ -5,6 +5,7 @@
 import javax.naming.NamingException;
 import javax.naming.directory.Attributes;
 
+import org.ovirt.engine.core.utils.LdapUtils;
 import org.springframework.ldap.core.ContextMapper;
 import org.springframework.ldap.core.DirContextAdapter;
 
@@ -24,7 +25,8 @@
         }
 
         try {
-            return attributes.get("uid").get(0);
+            Object ldapId = attributes.get("uniqueIdentifier").get();
+            return LdapUtils.makeGuidFromLdapId(ldapId);
         } catch (NamingException e) {
             System.err.println(ERROR_PREFIX + "Failed getting user GUID");
             return null;
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/RHDSUserContextMapper.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/RHDSUserContextMapper.java
index 8edd9cc..e39e93a 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/RHDSUserContextMapper.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ipa/RHDSUserContextMapper.java
@@ -6,24 +6,11 @@
 import javax.naming.NamingException;
 import javax.naming.directory.Attributes;
 
-import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.LdapUtils;
 import org.springframework.ldap.core.ContextMapper;
 import org.springframework.ldap.core.DirContextAdapter;
 
 public class RHDSUserContextMapper implements ContextMapper {
-    public static String getGuidFromNsUniqueId(String nsUniqueId) {
-        // 12345678-12345678-12345678-12345678 -->
-        // 12345678-1234-5678-1234-567812345678
-        StringBuilder sb = new StringBuilder();
-        sb.append(nsUniqueId.substring(0, 13))
-                .append("-")
-                .append(nsUniqueId.substring(13, 22))
-                .append("-")
-                .append(nsUniqueId.substring(22, 26))
-                .append(nsUniqueId.substring(27, 35));
-        return sb.toString();
-    }
-
     @Override
     public Object mapFromContext(Object ctx) {
 
@@ -39,8 +26,8 @@
         }
 
         try {
-            String objectGuid = (String) attributes.get("nsUniqueId").get(0);
-            return 
Guid.createGuidFromString(getGuidFromNsUniqueId(objectGuid));
+            Object ldapId = attributes.get("nsUniqueId").get(0);
+            return LdapUtils.makeGuidFromLdapId(ldapId);
         } catch (NamingException e) {
             System.err.println(ERROR_PREFIX + "Failed getting user GUID");
             return null;
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/kerberos/JndiAction.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/kerberos/JndiAction.java
index 201fb1d..cff9a8f 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/kerberos/JndiAction.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/kerberos/JndiAction.java
@@ -10,6 +10,7 @@
 import javax.naming.Context;
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
 import javax.naming.directory.DirContext;
 import javax.naming.directory.InitialDirContext;
 import javax.naming.directory.SearchControls;
@@ -17,10 +18,11 @@
 import javax.security.sasl.SaslException;
 
 import org.apache.log4j.Logger;
+import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.ldap.LdapProviderType;
 import org.ovirt.engine.core.ldap.LdapSRVLocator;
 import org.ovirt.engine.core.ldap.RootDSEData;
-import org.ovirt.engine.core.utils.ipa.RHDSUserContextMapper;
+import org.ovirt.engine.core.utils.LdapUtils;
 
 /**
  * JAAS Privileged action to be run when KerbersUtil successfully 
authenticates. This action performs ldap query to
@@ -183,28 +185,28 @@
     }
 
     private String guidFromResults(SearchResult sr) throws NamingException {
-        String guidString = "";
-
-        try {
-            if (ldapProviderType.equals(LdapProviderType.ipa)) {
-                String ipaUniqueId = (String) 
sr.getAttributes().get("ipaUniqueId").get();
-                guidString += ipaUniqueId;
-            } else if (ldapProviderType.equals(LdapProviderType.rhds)) {
-                String nsUniqueId = (String) 
sr.getAttributes().get("nsUniqueId").get();
-                guidString += 
RHDSUserContextMapper.getGuidFromNsUniqueId(nsUniqueId);
-            } else if (ldapProviderType.equals(LdapProviderType.itds)) {
-                String uniqueId = (String) 
sr.getAttributes().get("uniqueIdentifier").get();
-                guidString += uniqueId;
-            } else {
-                Object objectGuid = sr.getAttributes().get("objectGUID").get();
-                byte[] guid = (byte[]) objectGuid;
-                guidString += ((new org.ovirt.engine.core.compat.Guid(guid, 
false)).toString());
-            }
-        } catch (NullPointerException ne) {
-            System.out.println("LDAP connection successful. But no guid 
found");
-            guidString = null;
+        String idName = null;
+        switch (ldapProviderType) {
+        case ipa:
+            idName = "ipaUniqueId";
+            break;
+        case rhds:
+            idName = "nsUniqueId";
+            break;
+        case itds:
+            idName = "uniqueIdentifier";
+            break;
+        default:
+            idName = "objectGUID";
         }
-        return guidString;
+        Attribute idAttribute = sr.getAttributes().get(idName);
+        if (idAttribute == null) {
+            System.out.println("LDAP connection successful. But no guid 
found");
+            return null;
+        }
+        Object idValue = idAttribute.get();
+        Guid id = LdapUtils.makeGuidFromLdapId(idValue);
+        return id.toString();
     }
 
     private String prepareQuery() {


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8d7098020d57a17a8e22fe1d97dcc81d603e1ac4
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Juan Hernandez <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to