diff options
Diffstat (limited to 'services/samba/ldb.esp')
-rw-r--r-- | services/samba/ldb.esp | 675 |
1 files changed, 0 insertions, 675 deletions
diff --git a/services/samba/ldb.esp b/services/samba/ldb.esp deleted file mode 100644 index f69abde388..0000000000 --- a/services/samba/ldb.esp +++ /dev/null @@ -1,675 +0,0 @@ -<% -/* - * Copyright: - * (C) 2006 by Derrell Lipman - * All rights reserved - * - * License: - * LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/ - */ - -/* - * JSON-RPC mappings to the ldb ejs functions - */ - -/* We'll be saving resources in the session */ -jsonrpc_include("resources.esp"); - - -/** - * Local function to determine if the requested database is one which we allow - * access to. - * - * @param dbRequested - * Name of the database which is being requested to be opened - * - * @return - * true if access is allowed; false otherwise. - */ -function accessAllowed(dbRequested) -{ - /* Databases allowed to connect to */ - dbAllowed = new Array(); - dbAllowed[dbAllowed.length] = "sam.ldb"; - - for (var i = 0; i < dbAllowed.length; i++) - { - if (dbRequested == dbAllowed[i]) - { - return true; - } - } - - return false; -} - - -/** - * Connect to a database - * - * @param params[0] - * Database name - * - * @param params[1..n] - * Option (e.g. "modules:modlist") - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: The resource id to be used for future access to the database - * Failure: error event - * - * @note - * Credentials or session_info may be set up first. - */ -function _connect(params, error) -{ - if (params.length < 1) - { - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <db_name> [<option> ...]"); - return error; - } - - /* First, see if this database was already opened */ - var resourceId = session.resources.find("ldb:" + params[0], error); - if (resourceId != undefined) - { - /* It was. Give 'em the resource id */ - return resourceId; - } - - /* Ensure that the database name is one that is allowed to be opened */ - if (! accessAllowed(params[0])) - { - error.setError(-1, "Invalid or disallowed database name"); - return error; - } - - /* Get access to loadparm functions */ - var lp = loadparm_init(); - - /* Determine the private directory */ - var private_dir = lp.get("private dir"); - - /* Database was not previously opened. Connect to it. */ - ldb = ldb_init(); - ldb.session_info = session.authinfo.session_info; - ldb.credentials = session.authinfo.credentials; - var ret = ldb.connect(private_dir + "/" + params[0]); - if (ret && ldb.db) - { - return session.resources.set(ldb, "ldb:" + params[0], error); - } - else - { - error.setError(-1, "ldb.connect failed"); - return error; - } -} -jsonrpc.method.connect = _connect; - - -/** - * Close a database - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: True - * Failure: Will only fail with invalid parameters, and throws an error - */ -function _close(params, error) -{ - if (params.length != 1) - { - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <resource_id>"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - var ret = ldb.close(); - - /* If close succeeded, release the stored resource */ - if (ret) - { - session.resources.release(params[0], error); - } - - return ret; -} -jsonrpc.method.close = _close; - - -/** - * Begin a transaction - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: True - * Failure: False - */ -function _transaction_start(params, error) -{ - if (params.length != 1) - { - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <resource_id>"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - return ldb.transaction_start(); -} -jsonrpc.method.transaction_start = _transaction_start; - - -/** - * Cancel a transaction - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: True - * Failure: False - */ -function _transaction_cancel(params, error) -{ - if (params.length != 1) - { - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <resource_id>"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - return ldb.transaction_cancel(); -} -jsonrpc.method.transaction_cancel = _transaction_cancel; - - -/** - * Commit a transaction - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: True - * Failure: False - */ -function _transaction_commit(params, error) -{ - if (params.length != 1) - { - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <resource_id>"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - return ldb.transaction_commit(); -} -jsonrpc.method.transaction_commit = _transaction_commit; - - -/** - * Issue a Search request - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param params[1] - * Search expression - * - * @param params[2] - * Base DN - * - * @param params[3] - * Scope: "default", "base", "one" or "subtree" - * - * @param params[4] - * Attributes: an array object - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: found object - * Failure: `undefined` - * - * @note - * If params[4] is missing, assume no attributes - * If params[3..4] are missing, also assume "default" scope - * If params[2..4] are missing, also assume null base DN - */ -function _search(params, error) -{ - if (params.length < 2 || params.length > 5) - { - error.setOrigin(jsonrpc.Constant.ErrorOrigin.Server); - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: " + - "<resource_id> <expr> [<baseDN> [<scope> [<attrs>]]]"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - /* Retrieve parameters */ - var expr = params[1]; - var baseDN = params[2]; - var scope = params[3]; - var attrs = params[4]; - - /* Fill in optional parameters */ - if (params.length < 3) baseDN = null; - if (params.length < 4) scope = "one"; - if (params.length < 5) attrs = null; - - /* Determine scope value */ - if (scope == "base") - { - scope = ldb.SCOPE_BASE; - } - else if (scope == "one") - { - scope = ldb.SCOPE_ONE; - } - else if (scope == "subtree") - { - scope = ldb.SCOPE_SUBTREE; - } - else if (scope == "default") - { - scope = ldb.SCOPE_DEFAULT; - } - else - { - error.setOrigin(jsonrpc.Constant.ErrorOrigin.Server); - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "invalid scope: " + scope); - return error; - } - - var res = ldb.search(expr, baseDN, scope, attrs); - - if (res.error != 0) { - error.setError(res.error, res.errstr); - return error; - } - - return res.msgs; -} -jsonrpc.method.search = _search; - - -/** - * Add data to the database - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param params[1] - * An LDIF string representing the data to be added - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: True - * Failure: False - */ -function _add(params, error) -{ - if (params.length != 2) - { - error.setOrigin(jsonrpc.Constant.ErrorOrigin.Server); - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <resource_id> <ldif>"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - var res = ldb.add(params[1]); - if (res.error != 0) { - error.setError(res.error, res.errstr); - return error; - } - - return true; -} -jsonrpc.method.add = _add; - - -/** - * Modify data in the database - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param params[1] - * An LDIF string representing the data to be modified - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: True - * Failure: False - */ -function _modify(params, error) -{ - if (params.length != 2) - { - error.setOrigin(jsonrpc.Constant.ErrorOrigin.Server); - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <resource_id> <ldif>"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - var res = ldb.modify(params[1]); - if (res.error != 0) { - error.setError(res.error, res.errstr); - return error; - } - - return true; -} -jsonrpc.method.modify = _modify; - - -/** - * Delete data from the database - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param params[1] - * The DN to be located and deleted - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: True - * Failure: False - */ -function _del(params, error) -{ - if (params.length != 2) - { - error.setOrigin(jsonrpc.Constant.ErrorOrigin.Server); - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <resource_id> <dn>"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - var res = ldb.del(params[1]); - if (res.error != 0) { - error.setError(res.error, res.errstr); - return error; - } - - return true; -} -jsonrpc.method.del = _del; - - -/** - * Rename data in the database - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param params[1] - * The DN to be renamed - * - * @param params[2] - * The new name for the DN being renamed - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: True - * Failure: False - */ -function _rename(params, error) -{ - if (params.length != 3) - { - error.setOrigin(jsonrpc.Constant.ErrorOrigin.Server); - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <resource_id> <old_dn> <new_dn>"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - var res = ldb.rename(params[1], params[2]); - if (res.error != 0) { - error.setError(res.error, res.errstr); - return error; - } - - return true; -} -jsonrpc.method.rename = _rename; - - -/** - * Base64-encode a string - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param params[1] - * The string to be base64 encoded - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: encoded string - * Failure: `undefined` - */ -function _base64encode(params, error) -{ - if (params.length != 2) - { - error.setOrigin(jsonrpc.Constant.ErrorOrigin.Server); - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <resource_id> <string_to_be_encoded>"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - return ldb.base64encode(params[1]); -} -jsonrpc.method.base64encode = _base64encode; - - -/** - * Base64-decode a string - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param params[1] - * The string to be base64 decoded - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: decoded string - * Failure: `undefined` - */ -function _base64decode(params, error) -{ - if (params.length != 2) - { - error.setOrigin(jsonrpc.Constant.ErrorOrigin.Server); - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <resource_id> <string_to_be_decoded>"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - return ldb.base64decode(params[1]); -} -jsonrpc.method.base64decode = _base64decode; - - -/** - * escape a DN - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param params[1] - * The DN to be escaped - * - * @param error - * An object of class JsonRpcError. - * - * @return - * Success: escaped string - * Failure: undefined - */ -function _base64decode(params, error) -{ - if (params.length != 2) - { - error.setOrigin(jsonrpc.Constant.ErrorOrigin.Server); - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <resource_id> <string_to_be_decoded>"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - return ldb.base64decode(params[1]); -} -jsonrpc.method.base64decode = _base64decode; - - -/** - * Retrieve a description of the most recent error - * - * @param params[0] - * The resource id of the open database, previously returned by connect() - * - * @param error - * An object of class JsonRpcError. - * - * @return - * The most recent error string for the ldb specified by the resource id - */ -function _errstring(params, error) -{ - if (params.length != 1) - { - error.setOrigin(jsonrpc.Constant.ErrorOrigin.Server); - error.setError(jsonrpc.Constant.ServerError.ParameterMismatch, - "usage: <resource_id>"); - return error; - } - - ldb = session.resources.get(params[0], error); - if (ldb["__type"] == "_JsonRpcError") - { - return ldb; - } - - return ldb.errstring(); -} -jsonrpc.method.errstring = _errstring; - - - - -/* - * Local Variables: - * mode: c - * End: - */ -%> |