LDAP DN and unique ID of user object available in Java API (issue #1302); LDAP DN...
authorVictor Kirhenshtein <victor@netxms.org>
Sun, 2 Oct 2016 19:36:15 +0000 (22:36 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Sun, 2 Oct 2016 19:36:15 +0000 (22:36 +0300)
include/nms_cscp.h
src/java/client/netxms-base/src/main/java/org/netxms/base/NXCPCodes.java
src/java/client/netxms-client/src/main/java/org/netxms/client/users/AbstractUserObject.java
src/java/netxms-eclipse/UserManager/src/org/netxms/ui/eclipse/usermanager/views/UserManagementView.java
src/java/netxms-eclipse/UserManager/src/org/netxms/ui/eclipse/usermanager/views/helpers/UserComparator.java
src/java/netxms-eclipse/UserManager/src/org/netxms/ui/eclipse/usermanager/views/helpers/UserLabelProvider.java
src/server/core/userdb_objects.cpp
src/server/include/nms_users.h
webui/webapp/UserManager/src/org/netxms/ui/eclipse/usermanager/views/UserManagementView.java
webui/webapp/UserManager/src/org/netxms/ui/eclipse/usermanager/views/helpers/UserComparator.java
webui/webapp/UserManager/src/org/netxms/ui/eclipse/usermanager/views/helpers/UserLabelProvider.java

index af3abe8..4200159 100644 (file)
@@ -1134,6 +1134,8 @@ typedef struct
 #define VID_SSH_PROXY               ((UINT32)548)
 #define VID_ZONE_PROXY              ((UINT32)549)
 #define VID_MESSAGE_LENGTH          ((UINT32)550)
+#define VID_LDAP_DN                 ((UINT32)551)
+#define VID_LDAP_ID                 ((UINT32)552)
 
 // Base variabe for single threshold in message
 #define VID_THRESHOLD_BASE          ((UINT32)0x00800000)
index 69d10a1..76ce5a0 100644 (file)
@@ -921,6 +921,9 @@ public class NXCPCodes
    public static final long VID_SSH_PASSWORD = 547;
    public static final long VID_SSH_PROXY = 548;
    public static final long VID_ZONE_PROXY = 549;
+   public static final long VID_MESSAGE_LENGTH = 550;
+   public static final long VID_LDAP_DN = 551;
+   public static final long VID_LDAP_ID = 552;
 
        public static final long VID_ACL_USER_BASE = 0x00001000L;
        public static final long VID_ACL_USER_LAST = 0x00001FFFL;
index 77693fd..0c1ca99 100644 (file)
@@ -66,6 +66,8 @@ public abstract class AbstractUserObject
        protected long systemRights;
        protected int flags;
        protected String description;
+       protected String ldapDn;
+       protected String ldapId;
        protected Map<String, String> customAttributes = new HashMap<String, String>(0);
 
        /**
@@ -89,6 +91,8 @@ public abstract class AbstractUserObject
                this.systemRights = src.systemRights;
                this.flags = src.flags;
                this.description = src.description;
+               this.ldapDn = src.ldapDn;
+               this.ldapId = src.ldapId;
                this.customAttributes = new HashMap<String, String>(0);
                Iterator<Entry<String, String>> it  = src.customAttributes.entrySet().iterator();
                while(it.hasNext())
@@ -110,6 +114,8 @@ public abstract class AbstractUserObject
                systemRights = msg.getFieldAsInt64(NXCPCodes.VID_USER_SYS_RIGHTS);
                description = msg.getFieldAsString(NXCPCodes.VID_USER_DESCRIPTION);
                guid = msg.getFieldAsUUID(NXCPCodes.VID_GUID);
+               ldapDn = msg.getFieldAsString(NXCPCodes.VID_LDAP_DN);
+      ldapId = msg.getFieldAsString(NXCPCodes.VID_LDAP_ID);
                
                int count = msg.getFieldAsInt32(NXCPCodes.VID_NUM_CUSTOM_ATTRIBUTES);
                long varId = NXCPCodes.VID_CUSTOM_ATTRIBUTES_BASE;
@@ -192,6 +198,22 @@ public abstract class AbstractUserObject
        }
 
        /**
+    * @return the ldapDn
+    */
+   public String getLdapDn()
+   {
+      return ldapDn;
+   }
+
+   /**
+    * @return the ldapId
+    */
+   public String getLdapId()
+   {
+      return ldapId;
+   }
+
+   /**
         * @return the systemRights
         */
        public long getSystemRights()
index a0f3494..e4467ba 100644 (file)
@@ -76,6 +76,7 @@ public class UserManagementView extends ViewPart
    public static final int COLUMN_SOURCE = 4;
    public static final int COLUMN_AUTH_METHOD = 5;
        public static final int COLUMN_GUID = 6;
+   public static final int COLUMN_LDAP_DN = 7;
 
        private TableViewer viewer;
        private NXCSession session;
@@ -107,9 +108,10 @@ public class UserManagementView extends ViewPart
                      Messages.get().UserManagementView_Description, 
                      Messages.get().UserManagementView_Source, 
                      Messages.get().UserManagementView_Authentication, 
-                     Messages.get().UserManagementView_GUID 
+                     Messages.get().UserManagementView_GUID,
+                     "LDAP DN"
                   };
-               final int[] widths = { 100, 80, 180, 250, 80, 170, 250 };
+               final int[] widths = { 100, 80, 180, 250, 80, 170, 250, 400 };
                viewer = new SortableTableViewer(parent, names, widths, 0, SWT.UP, SortableTableViewer.DEFAULT_STYLE);
                viewer.setContentProvider(new ArrayContentProvider());
                viewer.setLabelProvider(new UserLabelProvider());
index 73c33a8..488fa5a 100644 (file)
@@ -76,6 +76,9 @@ public class UserComparator extends ViewerComparator
             break;
          case UserManagementView.COLUMN_GUID:
             result = ((AbstractUserObject)e1).getGuid().toString().compareTo(((AbstractUserObject)e2).getGuid().toString());
+            break;
+         case UserManagementView.COLUMN_LDAP_DN:
+            result = ((AbstractUserObject)e1).getLdapDn().compareToIgnoreCase(((AbstractUserObject) e2).getLdapDn());
             break;
                        case UserManagementView.COLUMN_NAME:
                                result = ((AbstractUserObject)e1).getName().compareToIgnoreCase(((AbstractUserObject) e2).getName());
index e54f5f6..f10c446 100644 (file)
@@ -83,6 +83,8 @@ public class UserLabelProvider extends DecoratingLabelProvider implements ITable
             return (element instanceof User) ? ((User) element).getFullName() : null;
          case UserManagementView.COLUMN_GUID:
             return ((AbstractUserObject)element).getGuid().toString();
+         case UserManagementView.COLUMN_LDAP_DN:
+            return ((AbstractUserObject)element).getLdapDn();
                        case UserManagementView.COLUMN_NAME:
                                return ((AbstractUserObject)element).getName();
          case UserManagementView.COLUMN_SOURCE:
index d299c1d..8be5ba1 100644 (file)
@@ -84,7 +84,7 @@ UserDatabaseObject::UserDatabaseObject(DB_HANDLE hdb, DB_RESULT hResult, int row
        m_flags = DBGetFieldULong(hResult, row, 3);
        DBGetField(hResult, row, 4, m_description, MAX_USER_DESCR);
        m_guid = DBGetFieldGUID(hResult, row, 5);
-       m_userDn = DBGetField(hResult, row, 6, NULL, 0);
+       m_ldapDn = DBGetField(hResult, row, 6, NULL, 0);
        m_ldapId = DBGetField(hResult, row, 7, NULL, 0);
 }
 
@@ -96,7 +96,7 @@ UserDatabaseObject::UserDatabaseObject()
    m_id = 0;
    m_guid = uuid::generate();
    m_name[0] = 0;
-   m_userDn = NULL;
+   m_ldapDn = NULL;
    m_ldapId = NULL;
        m_systemRights = 0;
        m_description[0] = 0;
@@ -114,8 +114,8 @@ UserDatabaseObject::UserDatabaseObject(UINT32 id, const TCHAR *name)
        m_systemRights = 0;
        m_description[0] = 0;
        m_flags = UF_MODIFIED;
-       m_userDn = NULL;
-       m_ldapId= NULL;
+       m_ldapDn = NULL;
+       m_ldapId = NULL;
 }
 
 /**
@@ -123,8 +123,8 @@ UserDatabaseObject::UserDatabaseObject(UINT32 id, const TCHAR *name)
  */
 UserDatabaseObject::~UserDatabaseObject()
 {
-   safe_free(m_userDn);
-   safe_free(m_ldapId);
+   free(m_ldapDn);
+   free(m_ldapId);
 }
 
 /**
@@ -154,6 +154,8 @@ void UserDatabaseObject::fillMessage(NXCPMessage *msg)
    msg->setField(VID_USER_SYS_RIGHTS, m_systemRights);
    msg->setField(VID_USER_DESCRIPTION, m_description);
    msg->setField(VID_GUID, m_guid);
+   msg->setField(VID_LDAP_DN, m_ldapDn);
+   msg->setField(VID_LDAP_ID, m_ldapId);
    m_attributes.fillMessage(msg, VID_NUM_CUSTOM_ATTRIBUTES, VID_CUSTOM_ATTRIBUTES_BASE);
 }
 
@@ -311,10 +313,10 @@ void UserDatabaseObject::setDn(const TCHAR *dn)
 {
    if(dn == NULL)
       return;
-   if(m_userDn != NULL && !_tcscmp(m_userDn, dn))
+   if(m_ldapDn != NULL && !_tcscmp(m_ldapDn, dn))
       return;
-   free(m_userDn);
-   m_userDn = _tcsdup_ex(dn);
+   free(m_ldapDn);
+   m_ldapDn = _tcsdup_ex(dn);
    m_flags |= UF_MODIFIED;
 }
 
@@ -531,7 +533,7 @@ bool User::saveToDatabase(DB_HANDLE hdb)
    DBBind(hStmt, 15, DB_SQLTYPE_INTEGER, (UINT32)m_disabledUntil);
    DBBind(hStmt, 16, DB_SQLTYPE_INTEGER, (UINT32)m_lastLogin);
    DBBind(hStmt, 17, DB_SQLTYPE_VARCHAR, m_xmppId, DB_BIND_STATIC);
-   DBBind(hStmt, 18, DB_SQLTYPE_TEXT, m_userDn, DB_BIND_STATIC);
+   DBBind(hStmt, 18, DB_SQLTYPE_TEXT, m_ldapDn, DB_BIND_STATIC);
    DBBind(hStmt, 19, DB_SQLTYPE_VARCHAR, m_ldapId, DB_BIND_STATIC);
    DBBind(hStmt, 20, DB_SQLTYPE_INTEGER, m_id);
 
@@ -810,7 +812,7 @@ bool Group::saveToDatabase(DB_HANDLE hdb)
    DBBind(hStmt, 3, DB_SQLTYPE_INTEGER, m_flags);
    DBBind(hStmt, 4, DB_SQLTYPE_VARCHAR, m_description, DB_BIND_STATIC);
    DBBind(hStmt, 5, DB_SQLTYPE_VARCHAR, m_guid);
-   DBBind(hStmt, 6, DB_SQLTYPE_TEXT, m_userDn, DB_BIND_STATIC);
+   DBBind(hStmt, 6, DB_SQLTYPE_TEXT, m_ldapDn, DB_BIND_STATIC);
    DBBind(hStmt, 7, DB_SQLTYPE_VARCHAR, m_ldapId, DB_BIND_STATIC);
    DBBind(hStmt, 8, DB_SQLTYPE_INTEGER, m_id);
 
index ae7340e..a594d85 100644 (file)
@@ -189,7 +189,7 @@ protected:
        UINT64 m_systemRights;
        UINT32 m_flags;
        StringMap m_attributes;         // Custom attributes
-   TCHAR *m_userDn;
+   TCHAR *m_ldapDn;
    TCHAR *m_ldapId;
 
        bool loadCustomAttributes(DB_HANDLE hdb);
@@ -214,7 +214,7 @@ public:
        UINT64 getSystemRights() const { return m_systemRights; }
        UINT32 getFlags() const { return m_flags; }
    TCHAR *getGuidAsText(TCHAR *buffer) const { return m_guid.toString(buffer); }
-   const TCHAR *getDn() const { return m_userDn; }
+   const TCHAR *getDn() const { return m_ldapDn; }
    const TCHAR *getLdapId() const { return m_ldapId; }
 
    bool isGroup() const { return (m_id & GROUP_FLAG) != 0; }
index a0f3494..e4467ba 100644 (file)
@@ -76,6 +76,7 @@ public class UserManagementView extends ViewPart
    public static final int COLUMN_SOURCE = 4;
    public static final int COLUMN_AUTH_METHOD = 5;
        public static final int COLUMN_GUID = 6;
+   public static final int COLUMN_LDAP_DN = 7;
 
        private TableViewer viewer;
        private NXCSession session;
@@ -107,9 +108,10 @@ public class UserManagementView extends ViewPart
                      Messages.get().UserManagementView_Description, 
                      Messages.get().UserManagementView_Source, 
                      Messages.get().UserManagementView_Authentication, 
-                     Messages.get().UserManagementView_GUID 
+                     Messages.get().UserManagementView_GUID,
+                     "LDAP DN"
                   };
-               final int[] widths = { 100, 80, 180, 250, 80, 170, 250 };
+               final int[] widths = { 100, 80, 180, 250, 80, 170, 250, 400 };
                viewer = new SortableTableViewer(parent, names, widths, 0, SWT.UP, SortableTableViewer.DEFAULT_STYLE);
                viewer.setContentProvider(new ArrayContentProvider());
                viewer.setLabelProvider(new UserLabelProvider());
index 73c33a8..488fa5a 100644 (file)
@@ -76,6 +76,9 @@ public class UserComparator extends ViewerComparator
             break;
          case UserManagementView.COLUMN_GUID:
             result = ((AbstractUserObject)e1).getGuid().toString().compareTo(((AbstractUserObject)e2).getGuid().toString());
+            break;
+         case UserManagementView.COLUMN_LDAP_DN:
+            result = ((AbstractUserObject)e1).getLdapDn().compareToIgnoreCase(((AbstractUserObject) e2).getLdapDn());
             break;
                        case UserManagementView.COLUMN_NAME:
                                result = ((AbstractUserObject)e1).getName().compareToIgnoreCase(((AbstractUserObject) e2).getName());
index 1813138..0980813 100644 (file)
@@ -68,14 +68,14 @@ public class UserLabelProvider extends DecoratingLabelProvider implements ITable
                {
          case UserManagementView.COLUMN_AUTH_METHOD:
             if (!(element instanceof User))
-               return "";
+               return ""; //$NON-NLS-1$
             try
             {
                return AUTH_METHOD[((User)element).getAuthMethod()];
             }
             catch(ArrayIndexOutOfBoundsException e)
             {
-               return "Unknown";
+               return Messages.get().UserLabelProvider_Unknown;
             }
          case UserManagementView.COLUMN_DESCRIPTION:
             return ((AbstractUserObject)element).getDescription();
@@ -83,10 +83,12 @@ public class UserLabelProvider extends DecoratingLabelProvider implements ITable
             return (element instanceof User) ? ((User) element).getFullName() : null;
          case UserManagementView.COLUMN_GUID:
             return ((AbstractUserObject)element).getGuid().toString();
+         case UserManagementView.COLUMN_LDAP_DN:
+            return ((AbstractUserObject)element).getLdapDn();
                        case UserManagementView.COLUMN_NAME:
                                return ((AbstractUserObject)element).getName();
          case UserManagementView.COLUMN_SOURCE:
-            return ((((AbstractUserObject)element).getFlags() & AbstractUserObject.LDAP_USER) != 0) ? "LDAP" : "Local";
+            return ((((AbstractUserObject)element).getFlags() & AbstractUserObject.LDAP_USER) != 0) ? Messages.get().UserLabelProvider_LDAP : Messages.get().UserLabelProvider_Local;
                        case UserManagementView.COLUMN_TYPE:
                                return (element instanceof User) ? Messages.get().UserLabelProvider_User : Messages.get().UserLabelProvider_Group;
                }