s3: Add NTLMSSP_FEATURE_CCACHE
[ira/wip.git] / source3 / include / reg_objects.h
index 3df701f61cced8fc79fe60fe062b1a45f721108c..8d220ebdf5823e0c27885894809fb2ee43d82649 100644 (file)
 #ifndef _REG_OBJECTS_H /* _REG_OBJECTS_H */
 #define _REG_OBJECTS_H
 
-/* structure to contain registry values */
+/* low level structure to contain registry values */
 
-typedef struct {
+struct regval_blob {
        fstring         valuename;
        uint16          type;
        /* this should be encapsulated in an RPC_DATA_BLOB */
        uint32          size;   /* in bytes */
        uint8           *data_p;
-} REGISTRY_VALUE;
+};
 
 /*
  * A REG_SZ string is not necessarily NULL terminated. When retrieving it from
@@ -58,19 +58,15 @@ struct registry_value {
 
 /* container for registry values */
 
-typedef struct {
+struct regval_ctr {
        uint32          num_values;
-       REGISTRY_VALUE  **values;
+       struct regval_blob **values;
        int seqnum;
-} REGVAL_CTR;
+};
 
 /* container for registry subkey names */
 
-typedef struct {
-       uint32          num_subkeys;
-       char            **subkeys;
-       int seqnum;
-} REGSUBKEY_CTR;
+struct regsubkey_ctr;
 
 /*
  *
@@ -105,9 +101,16 @@ typedef struct {
 #define KEY_CURRENT_VERSION    "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
 #define KEY_PERFLIB            "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib"
 #define KEY_PERFLIB_009                "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009"
+#define KEY_GROUP_POLICY       "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Group Policy"
+#define KEY_WINLOGON           "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon"
 #define KEY_SMBCONF            "HKLM\\SOFTWARE\\Samba\\smbconf"
+#define KEY_SAMBA_GROUP_POLICY "HKLM\\SOFTWARE\\Samba\\Group Policy"
 #define KEY_TREE_ROOT          ""
 
+#define KEY_GP_MACHINE_POLICY          "HKLM\\Software\\Policies"
+#define KEY_GP_MACHINE_WIN_POLICY      "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies"
+#define KEY_GP_USER_POLICY             "HKCU\\Software\\Policies"
+#define KEY_GP_USER_WIN_POLICY         "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies"
 /*
  * Registry key types
  *     Most keys are going to be GENERIC -- may need a better name?
@@ -123,12 +126,14 @@ typedef struct {
  * for virtual registry view 
  */ 
  
-typedef struct {
+struct registry_ops {
        /* functions for enumerating subkeys and values */      
-       int     (*fetch_subkeys)( const char *key, REGSUBKEY_CTR *subkeys);
-       int     (*fetch_values) ( const char *key, REGVAL_CTR *val );
-       bool    (*store_subkeys)( const char *key, REGSUBKEY_CTR *subkeys );
-       bool    (*store_values)( const char *key, REGVAL_CTR *val );
+       int     (*fetch_subkeys)( const char *key, struct regsubkey_ctr *subkeys);
+       int     (*fetch_values) ( const char *key, struct regval_ctr *val );
+       bool    (*store_subkeys)( const char *key, struct regsubkey_ctr *subkeys );
+       WERROR  (*create_subkey)(const char *key, const char *subkey);
+       WERROR  (*delete_subkey)(const char *key, const char *subkey);
+       bool    (*store_values)( const char *key, struct regval_ctr *val );
        bool    (*reg_access_check)( const char *keyname, uint32 requested,
                                     uint32 *granted,
                                     const NT_USER_TOKEN *token );
@@ -136,29 +141,29 @@ typedef struct {
                              struct security_descriptor **psecdesc);
        WERROR (*set_secdesc)(const char *key,
                              struct security_descriptor *sec_desc);
-       bool    (*subkeys_need_update)(REGSUBKEY_CTR *subkeys);
-       bool    (*values_need_update)(REGVAL_CTR *values);
-} REGISTRY_OPS;
+       bool    (*subkeys_need_update)(struct regsubkey_ctr *subkeys);
+       bool    (*values_need_update)(struct regval_ctr *values);
+};
 
-typedef struct {
+struct registry_hook {
        const char      *keyname;       /* full path to name of key */
-       REGISTRY_OPS    *ops;           /* registry function hooks */
-} REGISTRY_HOOK;
+       struct registry_ops     *ops;   /* registry function hooks */
+};
 
 
 /* structure to store the registry handles */
 
-typedef struct _RegistryKey {
+struct registry_key_handle {
        uint32          type;
        char            *name;          /* full name of registry key */
        uint32          access_granted;
-       REGISTRY_HOOK   *hook;  
-} REGISTRY_KEY;
+       struct registry_ops     *ops;
+};
 
 struct registry_key {
-       REGISTRY_KEY *key;
-       REGSUBKEY_CTR *subkeys;
-       REGVAL_CTR *values;
+       struct registry_key_handle *key;
+       struct regsubkey_ctr *subkeys;
+       struct regval_ctr *values;
        struct nt_user_token *token;
 };