Revert "remove unused credentials ejs module."
[metze/samba/wip.git] / source / scripting / ejs / ejsnet / mpr_user.c
1 /* 
2    Unix SMB/CIFS implementation.
3
4    provides interfaces to libnet calls from ejs scripts
5
6    Copyright (C) Rafal Szczesniak  2005-2007
7    
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.
12    
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.
17    
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/>.
20 */
21
22 #include "includes.h"
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"
28
29
30 /*
31   Properties:
32   UserInfo.AccountName
33   UserInfo.FullName
34   UserInfo.Description
35   UserInfo.HomeDirectory
36   UserInfo.HomeDrive
37   UserInfo.Comment
38   UserInfo.LogonScript
39   UserInfo.AcctExpiry
40   UserInfo.AllowPasswordChange
41   UserInfo.ForcePasswordChange
42  */
43 struct MprVar mprCreateUserInfo(TALLOC_CTX *mem_ctx, struct libnet_UserInfo *info)
44 {
45         const char *name = "UserInfo";
46         NTSTATUS status;
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;
52
53         if (info == NULL || mem_ctx == NULL) {
54                 mprUserInfo = mprCreateNullVar();
55                 goto done;
56         }
57
58         mprUserInfo = mprObject(name);
59
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));
70
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;
91
92 done:
93         return mprUserInfo;
94 }
95
96
97 /*
98   Properties:
99   UserListCtx.Users[]
100   UserListCtx.ResumeIndex
101   UserListCtx.Count
102   UserListCtx.EndOfList
103   UserListCtx.Status
104  */
105 struct MprVar mprUserListCtx(TALLOC_CTX *mem_ctx, struct libnet_UserList *list, NTSTATUS result)
106 {
107         const char *name = "UserListCtx";
108         NTSTATUS status;
109         bool endOfList;
110         struct MprVar mprListCtx, mprUserList;
111         struct MprVar mprUser, mprSid, mprUsername;
112         int i;
113
114         if (list == NULL || mem_ctx == NULL) {
115                 mprListCtx = mprCreateNullVar();
116                 goto done;
117         }
118
119         endOfList = (NT_STATUS_EQUAL(result, NT_STATUS_NO_MORE_ENTRIES) ||
120                      NT_STATUS_IS_OK(result));
121
122         mprUserList = mprArray("Users");
123         for (i = 0; i < list->out.count; i++) {
124                 struct userlist u = list->out.users[i];
125                 
126                 /* get userlist fields */
127                 mprSid      = mprString(u.sid);
128                 mprUsername = mprString(u.username);
129                 
130                 /* create userlist object */
131                 mprUser = mprObject("User");
132                 mprSetVar(&mprUser, "Username", mprUsername);
133                 mprSetVar(&mprUser, "SID", mprSid);
134                 
135                 /* add the object to the array being constructed */
136                 mprAddArray(&mprUserList, i, mprUser);
137         }
138
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));
149
150 done:
151         return mprListCtx;
152 }
153
154
155 /*
156   Returns UserListCtx.ResumeIndex out of passed UserListCtx
157  */
158 unsigned int mprListGetResumeIndex(struct MprVar *listCtx)
159 {
160         NTSTATUS status;
161         unsigned int resume = 0;
162         struct MprVar *mprResumeIndex;
163         if (listCtx == NULL) return 0;
164         
165         mprResumeIndex = listCtx;
166         status = mprGetVar(&mprResumeIndex, "ResumeIndex");
167         if (!NT_STATUS_IS_OK(status)) goto done;
168
169         resume = (unsigned int) mprVarToInteger(mprResumeIndex);
170
171 done:
172         return resume;
173 }