summaryrefslogtreecommitdiff
path: root/source3/rpc_server
diff options
context:
space:
mode:
authorJean-François Micouleau <jfm@samba.org>2001-11-22 17:19:59 +0000
committerJean-François Micouleau <jfm@samba.org>2001-11-22 17:19:59 +0000
commitb09d9e3dc5f389c1911649721ee7c33f9c982deb (patch)
tree7fe37582c73896882ec2b29e8c0de7a7591bf303 /source3/rpc_server
parent33e20222e03482b20224b0b077beefb4079baa34 (diff)
downloadsamba-b09d9e3dc5f389c1911649721ee7c33f9c982deb.tar.gz
samba-b09d9e3dc5f389c1911649721ee7c33f9c982deb.tar.bz2
samba-b09d9e3dc5f389c1911649721ee7c33f9c982deb.zip
fixing enum_privs and get_dispname server code.
That works as expected now. J.F. (This used to be commit f2766932d693fc601b2c3e7853e61f751435ec3c)
Diffstat (limited to 'source3/rpc_server')
-rw-r--r--source3/rpc_server/srv_lsa_nt.c40
1 files changed, 20 insertions, 20 deletions
diff --git a/source3/rpc_server/srv_lsa_nt.c b/source3/rpc_server/srv_lsa_nt.c
index b114bd2d57..da5b866f17 100644
--- a/source3/rpc_server/srv_lsa_nt.c
+++ b/source3/rpc_server/srv_lsa_nt.c
@@ -545,19 +545,19 @@ NTSTATUS _lsa_enum_privs(pipes_struct *p, LSA_Q_ENUM_PRIVS *q_u, LSA_R_ENUM_PRIV
if (enum_context >= PRIV_ALL_INDEX)
return NT_STATUS_UNABLE_TO_FREE_VM;
- entries = (LSA_PRIV_ENTRY *)talloc_zero(p->mem_ctx, sizeof(LSA_PRIV_ENTRY) * (PRIV_ALL_INDEX-enum_context));
+ entries = (LSA_PRIV_ENTRY *)talloc_zero(p->mem_ctx, sizeof(LSA_PRIV_ENTRY) * (PRIV_ALL_INDEX-enum_context-1));
if (entries==NULL)
return NT_STATUS_NO_MEMORY;
entry = entries;
- for (i = 0; i < PRIV_ALL_INDEX-enum_context; i++, entry++) {
+ for (i = 0; i < PRIV_ALL_INDEX-enum_context-1; i++, entry++) {
init_uni_hdr(&entry->hdr_name, strlen(privs[i+1-enum_context].priv));
init_unistr2(&entry->name, privs[i+1-enum_context].priv, strlen(privs[i+1-enum_context].priv) );
entry->luid_low = privs[i+1-enum_context].se_priv;
entry->luid_high = 1;
}
- init_lsa_r_enum_privs(r_u, i+enum_context, PRIV_ALL_INDEX-enum_context, entries);
+ init_lsa_r_enum_privs(r_u, i+enum_context, PRIV_ALL_INDEX-enum_context-1, entries);
return NT_STATUS_OK;
}
@@ -570,31 +570,31 @@ NTSTATUS _lsa_priv_get_dispname(pipes_struct *p, LSA_Q_PRIV_GET_DISPNAME *q_u, L
{
fstring name_asc;
fstring desc_asc;
- int i;
+ int i=1;
if (!find_policy_by_hnd(p, &q_u->pol, NULL))
return NT_STATUS_INVALID_HANDLE;
unistr2_to_ascii(name_asc, &q_u->name, sizeof(name_asc));
- DEBUG(0,("_lsa_priv_get_dispname: %s", name_asc));
-
- for (i=1; privs[i].se_priv!=SE_PRIV_ALL; i++) {
- if ( !strcmp(name_asc, privs[i].priv)) {
-
- fstrcpy(desc_asc, privs[i].description);
-
- }
- }
- DEBUG(0,(": %s\n", desc_asc));
-
- init_uni_hdr(&r_u->hdr_desc, strlen(desc_asc));
- init_unistr2(&r_u->desc, desc_asc, strlen(desc_asc) );
+ DEBUG(10,("_lsa_priv_get_dispname: %s", name_asc));
- r_u->ptr_info=0xdeadbeef;
- r_u->lang_id=q_u->lang_id;
+ while (privs[i].se_priv!=SE_PRIV_ALL && strcmp(name_asc, privs[i].priv))
+ i++;
+
+ if (privs[i].se_priv!=SE_PRIV_ALL) {
+ DEBUG(10,(": %s\n", desc_asc));
+ init_uni_hdr(&r_u->hdr_desc, strlen(privs[i].description));
+ init_unistr2(&r_u->desc, privs[i].description, strlen(privs[i].description) );
- return NT_STATUS_OK;
+ r_u->ptr_info=0xdeadbeef;
+ r_u->lang_id=q_u->lang_id;
+ return NT_STATUS_OK;
+ } else {
+ DEBUG(10,(": doesn't exist\n"));
+ r_u->ptr_info=0;
+ return NT_STATUS_NO_SUCH_PRIVILEGE;
+ }
}
/***************************************************************************