svn commit: samba r20881 - in
branches/SAMBA_4_0/source/scripting/ejs/ejsnet: .
mimir at samba.org
mimir at samba.org
Thu Jan 18 21:50:25 GMT 2007
Author: mimir
Date: 2007-01-18 21:50:24 +0000 (Thu, 18 Jan 2007)
New Revision: 20881
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=20881
Log:
Sorting out NetUsrCtx methods. Still a couple of things left.
rafal
Modified:
branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c
Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c
===================================================================
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c 2007-01-18 19:18:43 UTC (rev 20880)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c 2007-01-18 21:50:24 UTC (rev 20881)
@@ -37,7 +37,7 @@
/*
Usage:
- usrCtx = net.UserMgr(domain);
+ usrCtx = net.UserMgr(domain = <default from credentials>);
*/
int ejs_net_userman(MprVarHandle eid, int argc, struct MprVar **argv)
{
@@ -46,68 +46,102 @@
const char *userman_domain = NULL;
struct MprVar *obj = NULL;
- ctx = mprGetThisPtr(eid, "ctx");
- mem_ctx = talloc_new(mprMemCtx());
-
+ /* fetch the arguments: domain name */
if (argc == 0) {
+ /* default domain name is supplied in credentials */
userman_domain = cli_credentials_get_domain(ctx->cred);
} else if (argc == 1 && mprVarIsString(argv[0]->type)) {
+ /* domain name can also be specified explicitly
+ (e.g. to connect remote domain) */
userman_domain = talloc_strdup(ctx, mprToString(argv[0]));
} else {
ejsSetErrorMsg(eid, "too many arguments");
goto done;
}
+
+ /* libnet context */
+ ctx = mprGetThisPtr(eid, "ctx");
+ if (ctx == NULL) {
+ ejsSetErrorMsg(eid, "ctx property returns null pointer");
+ goto done;
+ }
- if (!userman_domain) {
+ mem_ctx = talloc_new(mprMemCtx());
+
+ /* any domain name must be specified anyway */
+ if (userman_domain == NULL) {
ejsSetErrorMsg(eid, "a domain must be specified for user management");
goto done;
}
+
+ /* create 'net user' subcontext */
+ obj = mprInitObject(eid, "NetUsrCtx", argc, argv);
- obj = mprInitObject(eid, "NetUsrCtx", argc, argv);
+ /* add properties */
mprSetPtrChild(obj, "ctx", ctx);
mprSetPtrChild(obj, "domain", userman_domain);
+ /* add methods */
mprSetStringCFunction(obj, "Create", ejs_net_createuser);
mprSetStringCFunction(obj, "Delete", ejs_net_deleteuser);
mprSetStringCFunction(obj, "Info", ejs_net_userinfo);
mprSetCFunction(obj, "List", ejs_net_userlist);
- return 0;
done:
talloc_free(mem_ctx);
- return -1;
+ return 0;
}
+/*
+ Usage:
+ NTSTATUS = NetUsrCtx.Create(Username)
+*/
static int ejs_net_createuser(MprVarHandle eid, int argc, char **argv)
{
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
TALLOC_CTX *mem_ctx;
struct libnet_context *ctx;
const char *userman_domain = NULL;
+ const char *username = NULL;
struct libnet_CreateUser req;
- if (argc != 1) {
- ejsSetErrorMsg(eid, "argument 1 must be a string");
- return -1;
+ mem_ctx = talloc_new(mprMemCtx());
+ if (mem_ctx == NULL) {
+ ejsSetErrorMsg(eid, "could not create memory context - out of memory");
+ goto done;
}
+ /* fetch the arguments: username */
+ if (argc == 0) {
+ ejsSetErrorMsg(eid, "too little arguments");
+ goto done;
+
+ } else if (argc == 1) {
+ username = argv[0];
+
+ } else {
+ ejsSetErrorMsg(eid, "too many arguments");
+ goto done;
+ }
+
+ /* libnet context */
ctx = mprGetThisPtr(eid, "ctx");
- if (!ctx) {
+ if (ctx == NULL) {
ejsSetErrorMsg(eid, "ctx property returns null pointer");
- return -1;
+ goto done;
}
+ /* domain where the account is to be created */
userman_domain = mprGetThisPtr(eid, "domain");
- if (!userman_domain) {
+ if (userman_domain == NULL) {
ejsSetErrorMsg(eid, "domain property returns null pointer");
- return -1;
+ goto done;
}
- mem_ctx = talloc_new(mprMemCtx());
-
+ /* call the libnet function */
req.in.domain_name = userman_domain;
req.in.user_name = argv[0];
@@ -116,83 +150,125 @@
ejsSetErrorMsg(eid, "%s", req.out.error_string);
}
+done:
talloc_free(mem_ctx);
mpr_Return(eid, mprNTSTATUS(status));
return 0;
}
+/*
+ Usage:
+ NTSTATUS = NetUsrCtx.Delete(Username)
+*/
static int ejs_net_deleteuser(MprVarHandle eid, int argc, char **argv)
{
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
TALLOC_CTX *mem_ctx;
struct libnet_context *ctx;
const char *userman_domain = NULL;
+ const char *username = NULL;
struct libnet_DeleteUser req;
- if (argc != 1) {
- ejsSetErrorMsg(eid, "argument 1 must be a string");
- return -1;
+ mem_ctx = talloc_new(mprMemCtx());
+ if (mem_ctx == NULL) {
+ ejsSetErrorMsg(eid, "could not create memory context - out of memory");
+ goto done;
}
+ /* fetch the arguments: username */
+ if (argc == 0) {
+ ejsSetErrorMsg(eid, "too little arguments");
+ goto done;
+
+ } else if (argc == 1) {
+ username = argv[0];
+
+ } else {
+ ejsSetErrorMsg(eid, "too many arguments");
+ goto done;
+ }
+
+ /* libnet context */
ctx = mprGetThisPtr(eid, "ctx");
- if (!ctx) {
+ if (ctx == NULL) {
ejsSetErrorMsg(eid, "ctx property returns null pointer");
- return -1;
+ goto done;
}
-
+
+ /* domain where the account is to be deleted */
userman_domain = mprGetThisPtr(eid, "domain");
if (!userman_domain) {
ejsSetErrorMsg(eid, "domain property returns null pointer");
- return -1;
+ goto done;
}
- mem_ctx = talloc_new(mprMemCtx());
-
+ /* call the libnet function */
req.in.domain_name = userman_domain;
- req.in.user_name = argv[0];
+ req.in.user_name = username;
status = libnet_DeleteUser(ctx, mem_ctx, &req);
if (!NT_STATUS_IS_OK(status)) {
ejsSetErrorMsg(eid, "%s", req.out.error_string);
}
+done:
talloc_free(mem_ctx);
mpr_Return(eid, mprNTSTATUS(status));
return 0;
}
+/*
+ Usage:
+ UserInfo = NetUsrCtx.Info(Username)
+*/
static int ejs_net_userinfo(MprVarHandle eid, int argc, char **argv)
{
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
TALLOC_CTX *mem_ctx;
struct libnet_context *ctx;
- const char *userman_domain;
+ const char *userman_domain = NULL;
+ const char *username = NULL;
struct libnet_UserInfo req;
struct MprVar mprUserInfo;
- if (argc != 1) {
- ejsSetErrorMsg(eid, "argument 1 must be a string");
- return -1;
+ mem_ctx = talloc_new(mprMemCtx());
+ if (mem_ctx == NULL) {
+ ejsSetErrorMsg(eid, "could not create memory context - out of memory");
+ goto done;
}
+
+ /* fetch the arguments: username */
+ if (argc == 0) {
+ ejsSetErrorMsg(eid, "too little arguments");
+ goto done;
+ } else if (argc == 1) {
+ username = argv[0];
+
+ } else {
+ ejsSetErrorMsg(eid, "too many arguments");
+ goto done;
+ }
+
+ /* libnet context */
ctx = mprGetThisPtr(eid, "ctx");
if (ctx == NULL) {
ejsSetErrorMsg(eid, "ctx property returns null pointer");
- return -1;
+ goto done;
}
-
+
+ /* domain where the user account is to be queried */
userman_domain = mprGetThisPtr(eid, "domain");
if (userman_domain == NULL) {
ejsSetErrorMsg(eid, "domain property returns null pointer");
return -1;
}
- mem_ctx = talloc_new(mprMemCtx());
-
+ /* call the libnet function */
req.in.domain_name = userman_domain;
- req.in.user_name = argv[0];
+ req.in.user_name = username;
status = libnet_UserInfo(ctx, mem_ctx, &req);
if (!NT_STATUS_IS_OK(status)) {
@@ -213,19 +289,30 @@
}
+/*
+ Usage:
+ UserListCtx = NetUsrCtx.List(UserListCtx)
+*/
static int ejs_net_userlist(MprVarHandle eid, int argc, struct MprVar **argv)
{
TALLOC_CTX *mem_ctx;
NTSTATUS status;
struct libnet_context *ctx;
const char *userlist_domain;
+ int page_size = 10; /* TODO: this should be specified in a nicer way */
struct libnet_UserList req;
struct MprVar mprListCtx, *mprInListCtx;
mem_ctx = talloc_new(mprMemCtx());
+ if (mem_ctx == NULL) {
+ ejsSetErrorMsg(eid, "could not create memory context - out of memory");
+ goto done;
+ }
+ /* fetch the arguments */
if (argc == 0) {
ejsSetErrorMsg(eid, "too little arguments");
+ goto done;
} else if (argc == 1) {
if (mprVarIsObject(argv[0]->type)) {
@@ -234,6 +321,7 @@
req.in.resume_index = mprListGetResumeIndex(mprInListCtx);
} else {
+ /* this is a first call */
req.in.resume_index = 0;
}
@@ -242,20 +330,23 @@
goto done;
}
+ /* libnet context */
ctx = mprGetThisPtr(eid, "ctx");
- if (!ctx) {
+ if (ctx == NULL) {
ejsSetErrorMsg(eid, "ctx property returns null pointer");
- return -1;
+ goto done;
}
-
+
+ /* domain where user accounts are to be enumerated */
userlist_domain = mprGetThisPtr(eid, "domain");
- if (!userlist_domain) {
+ if (userlist_domain == NULL) {
ejsSetErrorMsg(eid, "domain property returns null pointer");
- return -1;
+ goto done;
}
+ /* call the libnet function */
req.in.domain_name = userlist_domain;
- req.in.page_size = 10; /* TODO: this should be specified in a nicer way */
+ req.in.page_size = page_size;
status = libnet_UserList(ctx, mem_ctx, &req);
if (!NT_STATUS_IS_OK(status) &&
More information about the samba-cvs
mailing list