Hi,

I'm working on updating openchange to reflect the MS-OXCPERM
specification. So far I've updated the IDL (see below), and also
done some changes in libmapi (mostly to rename GetTable to
be GetPermissionsTable and ModifyTable to be 
ModifyPermissions (so it matches the ROP name, and is a bit
more descriptive).

I've got a mapitest covering GetPermissionsTable, and some 
early work on testing ModifyPermissions.

This is the diffstat:
 Makefile                                |    2
 exchange.idl                            |   58 ++++++-----
 libmapi/IMAPIContainer.c                |   89 +++++++++--------
 libmapi/simple_mapi.c                   |  144 +++++++++++++--------------
 torture/mapi_permissions.c              |    4
 utils/mapitest/module.c                 |   22 ++++
 utils/mapitest/modules/module_oxcperm.c |  165 ++++++++++++++++++++++++++++++++
 7 files changed, 343 insertions(+), 141 deletions(-)

Thoughts on such a change?

Index: exchange.idl                                      
===================================================================
--- exchange.idl        (revision 1730)                            
+++ exchange.idl        (working copy)                             
@@ -838,9 +838,9 @@                                                
                        op_MAPI_CopyTo                          = 0x39,
                        op_MAPI_CopyToStream                    = 0x3a,
                        op_MAPI_CloneStream                     = 0x3b,
-                       op_MAPI_GetTable                        = 0x3e,
+                       op_MAPI_GetPermissionsTable             = 0x3e,
                        op_MAPI_GetRulesTable                   = 0x3f,
-                       op_MAPI_ModifyTable                     = 0x40,
+                       op_MAPI_ModifyPermissions               = 0x40,
                        op_MAPI_ModifyRules                     = 0x41,
                        op_MAPI_GetOwningServers                = 0x42,
                        op_MAPI_LongTermIdFromId                = 0x43,
@@ -1074,17 +1074,6 @@                                                 
                ROW_REMOVE      =       0x4                            
        } ulRowFlags;                                                  
                                                                       
-       typedef [flag(NDR_NOALIGN)] struct {                           
-               ulRowFlags                              ulRowFlags;    
-               mapi_SPropValue_array                   lpProps;       
-       } mapi_SRow;                                                   
-                                                                      
-       typedef [flag(NDR_NOALIGN)] struct {                           
-               uint8                                   padding;       
-               uint16                                  cEntries;      
-               mapi_SRow                               aEntries[cEntries];
-       } mapi_SRowList;                                                   
-                                                                          
        /**************************/                                       
        /* EcDoRpc Function 0x1   */                                       
        typedef [nopush,nopull,flag(NDR_NOALIGN)] struct {                 
@@ -2525,13 +2514,17 @@                                                    
                                                                           
        /*************************/                                        
        /* EcDoRpc Function 0x3e */                                        
+       typedef [bitmap8bit] bitmap {                                      
+               IncludeFreeBusy = 0x02                                     
+       } PermissionsTableFlags;                                           
+                                                                          
        typedef [flag(NDR_NOALIGN)] struct {                               
-               uint8           handle_idx;                                
-               uint8           padding;                                   
-       } GetTable_req;                                                    
+               uint8                   handle_idx;                        
+               PermissionsTableFlags   TableFlags;                        
+       } GetPermissionsTable_req;                                         
                                                                           
        typedef [flag(NDR_NOALIGN)] struct {                               
-       } GetTable_repl;                                                   
+       } GetPermissionsTable_repl;                                        
                                                                           
        /*************************/                                        
        /* EcDoRpc Function 0x3f */                                        
@@ -2549,14 +2542,29 @@                                                    
                                                                           
        /*************************/                                        
        /* EcDoRpc Function 0x40 */                                        
+       typedef [bitmap8bit] bitmap {                                      
+               ModifyPerms_IncludeFreeBusy     = 0x02,                    
+               ModifyPerms_ReplaceRows         = 0x01                     
+       } ModifyPermissionsFlags;                                          
+                                                                          
        typedef [flag(NDR_NOALIGN)] struct {                               
-               mapi_SRowList           rowList;                           
-       } ModifyTable_req;                                                 
+               ulRowFlags              PermissionDataFlags;               
+               mapi_SPropValue_array   lpProps;                           
+       } PermissionData;                                                  
                                                                           
        typedef [flag(NDR_NOALIGN)] struct {                               
-               [flag(NDR_REMAINING)] DATA_BLOB remaining;                 
-       } ModifyTable_repl;                                                
+               ModifyPermissionsFlags  ModifyFlags;                       
+               uint16                  ModifyCount;                       
+               PermissionData          PermissionsData[ModifyCount];      
+       } mapi_PermissionsData;                                            
                                                                           
+       typedef [flag(NDR_NOALIGN)] struct {                               
+               mapi_PermissionsData    rowList;                           
+       } ModifyPermissions_req;                                           
+                                                                          
+       typedef [flag(NDR_NOALIGN)] struct {                               
+       } ModifyPermissions_repl;                                          
+                                                                          
        /*************************/                                        
        /* EcDoRpc Function 0x41 */                                        
        typedef [flag(NDR_NOALIGN)] struct {                               
@@ -3518,9 +3526,9 @@                                                      
                [case(op_MAPI_CopyTo)] CopyTo_req mapi_CopyTo;             
                [case(op_MAPI_CopyToStream)] CopyToStream_req mapi_CopyToStream;
                [case(op_MAPI_CloneStream)] CloneStream_req mapi_CloneStream;   
-               [case(op_MAPI_GetTable)] GetTable_req mapi_GetTable;            
+               [case(op_MAPI_GetPermissionsTable)] GetPermissionsTable_req 
mapi_GetPermissionsTable;
                [case(op_MAPI_GetRulesTable)] GetRulesTable_req 
mapi_GetRulesTable;                  
-               [case(op_MAPI_ModifyTable)] ModifyTable_req mapi_ModifyTable;   
                     
+               [case(op_MAPI_ModifyPermissions)] ModifyPermissions_req 
mapi_ModifyPermissions;      
                [case(op_MAPI_ModifyRules)] ModifyRules_req mapi_ModifyRules;   
                     
                [case(op_MAPI_GetOwningServers)] GetOwningServers_req 
mapi_GetOwningServers;         
                [case(op_MAPI_LongTermIdFromId)] LongTermIdFromId_req 
mapi_LongTermIdFromId;         
@@ -3641,9 +3649,9 @@                                                           
                     
                [case(op_MAPI_CopyTo)] CopyTo_repl mapi_CopyTo;                 
                     
                [case(op_MAPI_CopyToStream)] CopyToStream_repl 
mapi_CopyToStream;                    
                [case(op_MAPI_CloneStream)] CloneStream_repl mapi_CloneStream;  
                     
-               [case(op_MAPI_GetTable)] GetTable_repl mapi_GetTable;           
                     
+               [case(op_MAPI_GetPermissionsTable)] GetPermissionsTable_repl 
mapi_GetPermissionsTable;
                [case(op_MAPI_GetRulesTable)] GetRulesTable_repl 
mapi_GetRulesTable;                  
-               [case(op_MAPI_ModifyTable)] ModifyTable_repl mapi_ModifyTable;  
                      
+               [case(op_MAPI_ModifyPermissions)] ModifyPermissions_repl 
mapi_ModifyPermissions;      
                [case(op_MAPI_ModifyRules)] ModifyRules_repl mapi_ModifyRules;  
                      
                [case(op_MAPI_GetOwningServers)] GetOwningServers_repl 
mapi_GetOwningServers;         
                [case(op_MAPI_LongTermIdFromId)] LongTermIdFromId_repl 
mapi_LongTermIdFromId;
_______________________________________________
devel mailing list
devel@lists.openchange.org
http://mailman.openchange.org/listinfo/devel

Reply via email to