CI-44: Add an extra field "originator" to session object.

This is a key string used for distinguishing different API users sharing the same login name.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CI-44: Add the originator param to XAPI session creation

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CI-44: update internal uses of login_with_password with the originator param

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CI-44: update external components and tests with the new originator param

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CI-44: Add max_sessions_per_originator config

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CI-44: update session create/destory rbac audit functions

Based on some previous patches from Thomas Sanders.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CI-44: it seems making better sense to expire tasks before sessions

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CI-44: add max_sessions_per_user_name config variable

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
CI-44: expire sessions based on username/originator specific quota

Based on some previous patches by Thomas Sanders.

The current algorithm is implemented as follows:

  * For sessions with their own auth_user_name (other than "root"/""), they will use their independent session quota (Xapi_globs.max_sessions_per_user_name) grouped by their auth_user_name. This can happen in following cases:
    - The session creator uses an external authentication method where the username is not the default
    - The session creator is logged in as local super user (hence no username/password authentication required) but still chooses to pass an independent username argument in purpose (e.g. vmpr, sm)

  * Sessions without independent auth_user_name (e.g. without RBAC, most external API users will have to share the same super user login) can still distiguish themselves using the new "originator" param during session creation. For sessions created with the optional "originator" argument, they will use their independent session quota (Xapi_globs.max_sessions_per_originator) grouped by their originator key.

  * All the rest sessions are in the common session pool, as before, sharing the default session quota (Xapi_globs.max_sessions). Among them, internal sessions will have higher prioirty than the external ones.

Signed-off-by: Zheng Li <zheng.li@eu.citrix.com>
Merge pull request #1072 from zli/xenserver/CI-44

xenserver/CI-44