mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
netapi: add info21_to_USER_INFO_2 and support level 2 in NetUserEnum/GetInfo.
Guenther
This commit is contained in:
parent
391aaf1627
commit
1f1587423b
@ -769,6 +769,45 @@ static NTSTATUS info21_to_USER_INFO_1(TALLOC_CTX *mem_ctx,
|
|||||||
/****************************************************************
|
/****************************************************************
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
|
|
||||||
|
static NTSTATUS info21_to_USER_INFO_2(TALLOC_CTX *mem_ctx,
|
||||||
|
const struct samr_UserInfo21 *i21,
|
||||||
|
uint32_t auth_flag,
|
||||||
|
struct USER_INFO_2 *i)
|
||||||
|
{
|
||||||
|
ZERO_STRUCTP(i);
|
||||||
|
|
||||||
|
i->usri2_name = talloc_strdup(mem_ctx, i21->account_name.string);
|
||||||
|
NT_STATUS_HAVE_NO_MEMORY(i->usri2_name);
|
||||||
|
i->usri2_password = NULL;
|
||||||
|
i->usri2_password_age = time(NULL) - nt_time_to_unix(i21->last_password_change);
|
||||||
|
i->usri2_priv = samr_rid_to_priv_level(i21->rid);
|
||||||
|
i->usri2_home_dir = talloc_strdup(mem_ctx, i21->home_directory.string);
|
||||||
|
i->usri2_comment = talloc_strdup(mem_ctx, i21->description.string);
|
||||||
|
i->usri2_flags = samr_acb_flags_to_netapi_flags(i21->acct_flags);
|
||||||
|
i->usri2_script_path = talloc_strdup(mem_ctx, i21->logon_script.string);
|
||||||
|
i->usri2_auth_flags = auth_flag;
|
||||||
|
i->usri2_full_name = talloc_strdup(mem_ctx, i21->full_name.string);
|
||||||
|
i->usri2_usr_comment = talloc_strdup(mem_ctx, i21->comment.string);
|
||||||
|
i->usri2_parms = talloc_strndup(mem_ctx, (const char *)i21->parameters.array, i21->parameters.size/2);
|
||||||
|
i->usri2_workstations = talloc_strdup(mem_ctx, i21->workstations.string);
|
||||||
|
i->usri2_last_logon = nt_time_to_unix(i21->last_logon);
|
||||||
|
i->usri2_last_logoff = nt_time_to_unix(i21->last_logoff);
|
||||||
|
i->usri2_acct_expires = nt_time_to_unix(i21->acct_expiry);
|
||||||
|
i->usri2_max_storage = USER_MAXSTORAGE_UNLIMITED; /* FIXME */
|
||||||
|
i->usri2_units_per_week = i21->logon_hours.units_per_week;
|
||||||
|
i->usri2_logon_hours = (uint8_t *)talloc_memdup(mem_ctx, i21->logon_hours.bits, 21);
|
||||||
|
i->usri2_bad_pw_count = i21->bad_password_count;
|
||||||
|
i->usri2_num_logons = i21->logon_count;
|
||||||
|
i->usri2_logon_server = talloc_strdup(mem_ctx, "\\\\*");
|
||||||
|
i->usri2_country_code = i21->country_code;
|
||||||
|
i->usri2_code_page = i21->code_page;
|
||||||
|
|
||||||
|
return NT_STATUS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************
|
||||||
|
****************************************************************/
|
||||||
|
|
||||||
static NTSTATUS info21_to_USER_INFO_10(TALLOC_CTX *mem_ctx,
|
static NTSTATUS info21_to_USER_INFO_10(TALLOC_CTX *mem_ctx,
|
||||||
const struct samr_UserInfo21 *i21,
|
const struct samr_UserInfo21 *i21,
|
||||||
struct USER_INFO_10 *i)
|
struct USER_INFO_10 *i)
|
||||||
@ -850,6 +889,7 @@ static NTSTATUS libnetapi_samr_lookup_user_map_USER_INFO(TALLOC_CTX *mem_ctx,
|
|||||||
|
|
||||||
struct USER_INFO_0 info0;
|
struct USER_INFO_0 info0;
|
||||||
struct USER_INFO_1 info1;
|
struct USER_INFO_1 info1;
|
||||||
|
struct USER_INFO_2 info2;
|
||||||
struct USER_INFO_10 info10;
|
struct USER_INFO_10 info10;
|
||||||
struct USER_INFO_20 info20;
|
struct USER_INFO_20 info20;
|
||||||
struct USER_INFO_23 info23;
|
struct USER_INFO_23 info23;
|
||||||
@ -904,6 +944,14 @@ static NTSTATUS libnetapi_samr_lookup_user_map_USER_INFO(TALLOC_CTX *mem_ctx,
|
|||||||
ADD_TO_ARRAY(mem_ctx, struct USER_INFO_1, info1,
|
ADD_TO_ARRAY(mem_ctx, struct USER_INFO_1, info1,
|
||||||
(struct USER_INFO_1 **)buffer, num_entries);
|
(struct USER_INFO_1 **)buffer, num_entries);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
status = info21_to_USER_INFO_2(mem_ctx, info21, auth_flag, &info2);
|
||||||
|
NT_STATUS_NOT_OK_RETURN(status);
|
||||||
|
|
||||||
|
ADD_TO_ARRAY(mem_ctx, struct USER_INFO_2, info2,
|
||||||
|
(struct USER_INFO_2 **)buffer, num_entries);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
status = info21_to_USER_INFO_10(mem_ctx, info21, &info10);
|
status = info21_to_USER_INFO_10(mem_ctx, info21, &info10);
|
||||||
@ -970,11 +1018,11 @@ WERROR NetUserEnum_r(struct libnetapi_ctx *ctx,
|
|||||||
switch (r->in.level) {
|
switch (r->in.level) {
|
||||||
case 0:
|
case 0:
|
||||||
case 1:
|
case 1:
|
||||||
|
case 2:
|
||||||
case 10:
|
case 10:
|
||||||
case 20:
|
case 20:
|
||||||
case 23:
|
case 23:
|
||||||
break;
|
break;
|
||||||
case 2:
|
|
||||||
case 3:
|
case 3:
|
||||||
case 11:
|
case 11:
|
||||||
return WERR_NOT_SUPPORTED;
|
return WERR_NOT_SUPPORTED;
|
||||||
@ -1400,11 +1448,11 @@ WERROR NetUserGetInfo_r(struct libnetapi_ctx *ctx,
|
|||||||
switch (r->in.level) {
|
switch (r->in.level) {
|
||||||
case 0:
|
case 0:
|
||||||
case 1:
|
case 1:
|
||||||
|
case 2:
|
||||||
case 10:
|
case 10:
|
||||||
case 20:
|
case 20:
|
||||||
case 23:
|
case 23:
|
||||||
break;
|
break;
|
||||||
case 2:
|
|
||||||
case 3:
|
case 3:
|
||||||
case 4:
|
case 4:
|
||||||
case 11:
|
case 11:
|
||||||
|
Loading…
Reference in New Issue
Block a user