2 Unix SMB/CIFS implementation.
4 provides interfaces to libnet calls from ejs scripts
6 Copyright (C) Rafal Szczesniak 2005-2007
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "lib/appweb/ejs/ejs.h"
24 #include "libnet/libnet.h"
25 #include "scripting/ejs/smbcalls.h"
26 #include "events/events.h"
27 #include "auth/credentials/credentials.h"
35 UserInfo.HomeDirectory
40 UserInfo.AllowPasswordChange
41 UserInfo.ForcePasswordChange
43 struct MprVar mprCreateUserInfo(TALLOC_CTX *mem_ctx, struct libnet_UserInfo *info)
45 const char *name = "UserInfo";
47 struct MprVar mprUserInfo;
48 struct MprVar mprAccountName, mprFullName, mprDescription;
49 struct MprVar mprHomeDir, mprHomeDrive, mprComment;
50 struct MprVar mprLogonScript;
51 struct MprVar mprAcctExpiry, mprAllowPassChange, mprForcePassChange;
53 if (info == NULL || mem_ctx == NULL) {
54 mprUserInfo = mprCreateNullVar();
58 mprUserInfo = mprObject(name);
60 mprAccountName = mprString(info->out.account_name);
61 mprFullName = mprString(info->out.full_name);
62 mprDescription = mprString(info->out.description);
63 mprHomeDir = mprString(info->out.home_directory);
64 mprHomeDrive = mprString(info->out.home_drive);
65 mprComment = mprString(info->out.comment);
66 mprLogonScript = mprString(info->out.logon_script);
67 mprAcctExpiry = mprString(timestring(mem_ctx, info->out.acct_expiry->tv_sec));
68 mprAllowPassChange = mprString(timestring(mem_ctx, info->out.allow_password_change->tv_sec));
69 mprForcePassChange = mprString(timestring(mem_ctx, info->out.force_password_change->tv_sec));
71 status = mprSetVar(&mprUserInfo, "AccountName", mprAccountName);
72 if (!NT_STATUS_IS_OK(status)) goto done;
73 status = mprSetVar(&mprUserInfo, "FullName", mprFullName);
74 if (!NT_STATUS_IS_OK(status)) goto done;
75 status = mprSetVar(&mprUserInfo, "Description", mprDescription);
76 if (!NT_STATUS_IS_OK(status)) goto done;
77 status = mprSetVar(&mprUserInfo, "HomeDirectory", mprHomeDir);
78 if (!NT_STATUS_IS_OK(status)) goto done;
79 status = mprSetVar(&mprUserInfo, "HomeDrive", mprHomeDrive);
80 if (!NT_STATUS_IS_OK(status)) goto done;
81 status = mprSetVar(&mprUserInfo, "Comment", mprComment);
82 if (!NT_STATUS_IS_OK(status)) goto done;
83 status = mprSetVar(&mprUserInfo, "LogonScript", mprLogonScript);
84 if (!NT_STATUS_IS_OK(status)) goto done;
85 status = mprSetVar(&mprUserInfo, "AcctExpiry", mprAcctExpiry);
86 if (!NT_STATUS_IS_OK(status)) goto done;
87 status = mprSetVar(&mprUserInfo, "AllowPasswordChange", mprAllowPassChange);
88 if (!NT_STATUS_IS_OK(status)) goto done;
89 status = mprSetVar(&mprUserInfo, "ForcePasswordChange", mprForcePassChange);
90 if (!NT_STATUS_IS_OK(status)) goto done;
100 UserListCtx.ResumeIndex
102 UserListCtx.EndOfList
105 struct MprVar mprUserListCtx(TALLOC_CTX *mem_ctx, struct libnet_UserList *list, NTSTATUS result)
107 const char *name = "UserListCtx";
110 struct MprVar mprListCtx, mprUserList;
111 struct MprVar mprUser, mprSid, mprUsername;
114 if (list == NULL || mem_ctx == NULL) {
115 mprListCtx = mprCreateNullVar();
119 endOfList = (NT_STATUS_EQUAL(result, NT_STATUS_NO_MORE_ENTRIES) ||
120 NT_STATUS_IS_OK(result));
122 mprUserList = mprArray("Users");
123 for (i = 0; i < list->out.count; i++) {
124 struct userlist u = list->out.users[i];
126 /* get userlist fields */
127 mprSid = mprString(u.sid);
128 mprUsername = mprString(u.username);
130 /* create userlist object */
131 mprUser = mprObject("User");
132 mprSetVar(&mprUser, "Username", mprUsername);
133 mprSetVar(&mprUser, "SID", mprSid);
135 /* add the object to the array being constructed */
136 mprAddArray(&mprUserList, i, mprUser);
139 mprListCtx = mprObject(name);
140 status = mprSetVar(&mprListCtx, "Users", mprUserList);
141 if (!NT_STATUS_IS_OK(status)) goto done;
142 status = mprSetVar(&mprListCtx, "Count", mprCreateIntegerVar(list->out.count));
143 if (!NT_STATUS_IS_OK(status)) goto done;
144 status = mprSetVar(&mprListCtx, "ResumeIndex", mprCreateIntegerVar((int)list->out.resume_index));
145 if (!NT_STATUS_IS_OK(status)) goto done;
146 status = mprSetVar(&mprListCtx, "EndOfList", mprCreateBoolVar(endOfList));
147 if (!NT_STATUS_IS_OK(status)) goto done;
148 status = mprSetVar(&mprListCtx, "Status", mprNTSTATUS(result));
156 Returns UserListCtx.ResumeIndex out of passed UserListCtx
158 unsigned int mprListGetResumeIndex(struct MprVar *listCtx)
161 unsigned int resume = 0;
162 struct MprVar *mprResumeIndex;
163 if (listCtx == NULL) return 0;
165 mprResumeIndex = listCtx;
166 status = mprGetVar(&mprResumeIndex, "ResumeIndex");
167 if (!NT_STATUS_IS_OK(status)) goto done;
169 resume = (unsigned int) mprVarToInteger(mprResumeIndex);