summaryrefslogtreecommitdiff
path: root/source4/scripting/ejs/smbcalls_rand.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/scripting/ejs/smbcalls_rand.c')
-rw-r--r--source4/scripting/ejs/smbcalls_rand.c92
1 files changed, 92 insertions, 0 deletions
diff --git a/source4/scripting/ejs/smbcalls_rand.c b/source4/scripting/ejs/smbcalls_rand.c
new file mode 100644
index 0000000000..d07c6ce233
--- /dev/null
+++ b/source4/scripting/ejs/smbcalls_rand.c
@@ -0,0 +1,92 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ provide access to randomisation functions
+
+ Copyright (C) Andrew Tridgell 2005
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "scripting/ejs/smbcalls.h"
+#include "lib/ejs/ejs.h"
+#include "system/passwd.h"
+
+/*
+ usage:
+ var i = random();
+*/
+static int ejs_random(MprVarHandle eid, int argc, struct MprVar **argv)
+{
+ mpr_Return(eid, mprCreateIntegerVar(generate_random()));
+ return 0;
+}
+
+/*
+ usage:
+ var s = randpass(len);
+*/
+static int ejs_randpass(MprVarHandle eid, int argc, struct MprVar **argv)
+{
+ char *s;
+ if (argc != 1 || !mprVarIsNumber(argv[0]->type)) {
+ ejsSetErrorMsg(eid, "randpass invalid arguments");
+ return -1;
+ }
+ s = generate_random_str(mprMemCtx(), mprToInt(argv[0]));
+ mpr_Return(eid, mprString(s));
+ talloc_free(s);
+ return 0;
+}
+
+/*
+ usage:
+ var guid = randguid();
+*/
+static int ejs_randguid(MprVarHandle eid, int argc, struct MprVar **argv)
+{
+ struct GUID guid = GUID_random();
+ char *s = GUID_string(mprMemCtx(), &guid);
+ mpr_Return(eid, mprString(s));
+ talloc_free(s);
+ return 0;
+}
+
+/*
+ usage:
+ var sid = randsid();
+*/
+static int ejs_randsid(MprVarHandle eid, int argc, struct MprVar **argv)
+{
+ char *s = talloc_asprintf(mprMemCtx(), "S-1-5-21-%8u-%8u-%8u",
+ (unsigned)generate_random(),
+ (unsigned)generate_random(),
+ (unsigned)generate_random());
+ mpr_Return(eid, mprString(s));
+ talloc_free(s);
+ return 0;
+}
+
+/*
+ setup C functions that be called from ejs
+*/
+void smb_setup_ejs_random(void)
+{
+ ejsDefineCFunction(-1, "random", ejs_random, NULL, MPR_VAR_SCRIPT_HANDLE);
+ ejsDefineCFunction(-1, "randpass", ejs_randpass, NULL, MPR_VAR_SCRIPT_HANDLE);
+ ejsDefineCFunction(-1, "randguid", ejs_randguid, NULL, MPR_VAR_SCRIPT_HANDLE);
+ ejsDefineCFunction(-1, "randsid", ejs_randsid, NULL, MPR_VAR_SCRIPT_HANDLE);
+}