fixing enum_privs and get_dispname server code.
authorJean-François Micouleau <jfm@samba.org>
Thu, 22 Nov 2001 17:19:59 +0000 (17:19 +0000)
committerJean-François Micouleau <jfm@samba.org>
Thu, 22 Nov 2001 17:19:59 +0000 (17:19 +0000)
That works as expected now.

J.F.
(This used to be commit f2766932d693fc601b2c3e7853e61f751435ec3c)

source3/rpc_server/srv_lsa_nt.c

index b114bd2d57727ee92c335e8519e7051b9a54241d..da5b866f17e6dfdfadc2d2a5db6cc2c474234360 100644 (file)
@@ -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;
+       }
 }
 
 /***************************************************************************