]> git.samba.org - ira/wip.git/blobdiff - source3/include/passdb.h
r10656: BIG merge from trunk. Features not copied over
[ira/wip.git] / source3 / include / passdb.h
index db6bc2ac75ec9d5d2a80df6887dabf030d136502..e985ab582dcbe666fd5b2a66563165d949ecd9af 100644 (file)
@@ -195,7 +195,7 @@ typedef struct sam_passwd
                const struct pdb_methods *backend_private_methods;
                void *backend_private_data; 
                void (*backend_private_data_free_fn)(void **);
-       } private;
+       } private_u;
 
        /* Lets see if the remaining code can get the hint that you
           are meant to use the pdb_...() functions. */
@@ -221,7 +221,7 @@ typedef struct sam_group {
 
                uint32 mem_num;                 /* Number of member SIDs */
                DOM_SID *members;               /* SID array */
-       } private;
+       } private_g;
 
 } SAM_GROUP;
 
@@ -232,6 +232,34 @@ struct acct_info
     uint32 rid; /* domain-relative RID */
 };
 
+struct samr_displayentry {
+       uint32 idx;
+       uint32 rid;
+       uint16 acct_flags;
+       const char *account_name;
+       const char *fullname;
+       const char *description;
+};
+
+enum pdb_search_type {
+       PDB_USER_SEARCH,
+       PDB_GROUP_SEARCH,
+       PDB_ALIAS_SEARCH
+};
+
+struct pdb_search {
+       TALLOC_CTX *mem_ctx;
+       enum pdb_search_type type;
+       struct samr_displayentry *cache;
+       uint32 num_entries;
+       ssize_t cache_size;
+       BOOL search_ended;
+       void *private_data;
+       BOOL (*next_entry)(struct pdb_search *search,
+                          struct samr_displayentry *entry);
+       void (*search_end)(struct pdb_search *search);
+};
+
 /*****************************************************************
  Functions to be implemented by the new (v2) passdb API 
 ****************************************************************/
@@ -241,7 +269,7 @@ struct acct_info
  * this SAMBA will load. Increment this if *ANY* changes are made to the interface. 
  */
 
-#define PASSDB_INTERFACE_VERSION 5
+#define PASSDB_INTERFACE_VERSION 9
 
 typedef struct pdb_context 
 {
@@ -251,7 +279,7 @@ typedef struct pdb_context
        /* These functions are wrappers for the functions listed above.
           They may do extra things like re-reading a SAM_ACCOUNT on update */
 
-       NTSTATUS (*pdb_setsampwent)(struct pdb_context *, BOOL update);
+       NTSTATUS (*pdb_setsampwent)(struct pdb_context *, BOOL update, uint16 acb_mask);
        
        void (*pdb_endsampwent)(struct pdb_context *);
        
@@ -267,6 +295,8 @@ typedef struct pdb_context
        
        NTSTATUS (*pdb_delete_sam_account)(struct pdb_context *, SAM_ACCOUNT *username);
 
+       NTSTATUS (*pdb_update_login_attempts)(struct pdb_context *context, SAM_ACCOUNT *sam_acct, BOOL success);
+
        NTSTATUS (*pdb_getgrsid)(struct pdb_context *context, GROUP_MAP *map, DOM_SID sid);
        
        NTSTATUS (*pdb_getgrgid)(struct pdb_context *context, GROUP_MAP *map, gid_t gid);
@@ -287,6 +317,12 @@ typedef struct pdb_context
                                           GROUP_MAP **rmap, int *num_entries,
                                           BOOL unix_only);
 
+       NTSTATUS (*pdb_enum_group_members)(struct pdb_context *context,
+                                          TALLOC_CTX *mem_ctx,
+                                          const DOM_SID *group,
+                                          uint32 **member_rids,
+                                          int *num_members);
+
        NTSTATUS (*pdb_enum_group_memberships)(struct pdb_context *context,
                                               const char *username,
                                               gid_t primary_gid,
@@ -302,12 +338,6 @@ typedef struct pdb_context
        NTSTATUS (*pdb_delete_alias)(struct pdb_context *context,
                                     const DOM_SID *sid);
 
-       NTSTATUS (*pdb_enum_aliases)(struct pdb_context *context,
-                                    const DOM_SID *domain_sid,
-                                    uint32 start_idx, uint32 num_entries,
-                                    uint32 *num_aliases,
-                                    struct acct_info **aliases);
-
        NTSTATUS (*pdb_get_aliasinfo)(struct pdb_context *context,
                                      const DOM_SID *sid,
                                      struct acct_info *info);
@@ -329,10 +359,37 @@ typedef struct pdb_context
                                      DOM_SID **members, int *num_members);
 
        NTSTATUS (*pdb_enum_alias_memberships)(struct pdb_context *context,
+                                              TALLOC_CTX *mem_ctx,
+                                              const DOM_SID *domain_sid,
                                               const DOM_SID *members,
                                               int num_members,
-                                              DOM_SID **aliases,
-                                              int *num_aliases);
+                                              uint32 **alias_rids,
+                                              int *num_alias_rids);
+
+       NTSTATUS (*pdb_lookup_rids)(struct pdb_context *context,
+                                   TALLOC_CTX *mem_ctx,
+                                   const DOM_SID *domain_sid,
+                                   int num_rids,
+                                   uint32 *rids,
+                                   const char ***names,
+                                   uint32 **attrs);
+
+       NTSTATUS (*pdb_get_account_policy)(struct pdb_context *context,
+                                          int policy_index, uint32 *value);
+
+       NTSTATUS (*pdb_set_account_policy)(struct pdb_context *context,
+                                          int policy_index, uint32 value);
+
+       NTSTATUS (*pdb_get_seq_num)(struct pdb_context *context, time_t *seq_num);
+
+       BOOL (*pdb_search_users)(struct pdb_context *context,
+                                struct pdb_search *search,
+                                uint16 acct_flags);
+       BOOL (*pdb_search_groups)(struct pdb_context *context,
+                                 struct pdb_search *search);
+       BOOL (*pdb_search_aliases)(struct pdb_context *context,
+                                  struct pdb_search *search,
+                                  const DOM_SID *sid);
 
        void (*free_fn)(struct pdb_context **);
        
@@ -349,7 +406,7 @@ typedef struct pdb_methods
        struct pdb_methods *next;
        struct pdb_methods *prev;
 
-       NTSTATUS (*setsampwent)(struct pdb_methods *, BOOL update);
+       NTSTATUS (*setsampwent)(struct pdb_methods *, BOOL update, uint16 acb_mask);
        
        void (*endsampwent)(struct pdb_methods *);
        
@@ -365,6 +422,8 @@ typedef struct pdb_methods
        
        NTSTATUS (*delete_sam_account)(struct pdb_methods *, SAM_ACCOUNT *username);
        
+       NTSTATUS (*update_login_attempts)(struct pdb_methods *methods, SAM_ACCOUNT *sam_acct, BOOL success);
+
        NTSTATUS (*getgrsid)(struct pdb_methods *methods, GROUP_MAP *map, DOM_SID sid);
 
        NTSTATUS (*getgrgid)(struct pdb_methods *methods, GROUP_MAP *map, gid_t gid);
@@ -385,6 +444,12 @@ typedef struct pdb_methods
                                       GROUP_MAP **rmap, int *num_entries,
                                       BOOL unix_only);
 
+       NTSTATUS (*enum_group_members)(struct pdb_methods *methods,
+                                      TALLOC_CTX *mem_ctx,
+                                      const DOM_SID *group,
+                                      uint32 **member_rids,
+                                      int *num_members);
+
        NTSTATUS (*enum_group_memberships)(struct pdb_methods *methods,
                                           const char *username,
                                           gid_t primary_gid,
@@ -400,11 +465,6 @@ typedef struct pdb_methods
        NTSTATUS (*delete_alias)(struct pdb_methods *methods,
                                 const DOM_SID *sid);
 
-       NTSTATUS (*enum_aliases)(struct pdb_methods *methods,
-                                const DOM_SID *domain_sid,
-                                uint32 start_idx, uint32 max_entries,
-                                uint32 *num_aliases, struct acct_info **info);
-
        NTSTATUS (*get_aliasinfo)(struct pdb_methods *methods,
                                  const DOM_SID *sid,
                                  struct acct_info *info);
@@ -421,9 +481,37 @@ typedef struct pdb_methods
                                  const DOM_SID *alias, DOM_SID **members,
                                  int *num_members);
        NTSTATUS (*enum_alias_memberships)(struct pdb_methods *methods,
+                                          TALLOC_CTX *mem_ctx,
+                                          const DOM_SID *domain_sid,
                                           const DOM_SID *members,
                                           int num_members,
-                                          DOM_SID **aliases, int *num);
+                                          uint32 **alias_rids,
+                                          int *num_alias_rids);
+
+       NTSTATUS (*lookup_rids)(struct pdb_methods *methods,
+                               TALLOC_CTX *mem_ctx,
+                               const DOM_SID *domain_sid,
+                               int num_rids,
+                               uint32 *rids,
+                               const char ***names,
+                               uint32 **attrs);
+
+       NTSTATUS (*get_account_policy)(struct pdb_methods *methods,
+                                      int policy_index, uint32 *value);
+
+       NTSTATUS (*set_account_policy)(struct pdb_methods *methods,
+                                      int policy_index, uint32 value);
+
+       NTSTATUS (*get_seq_num)(struct pdb_methods *methods, time_t *seq_num);
+
+       BOOL (*search_users)(struct pdb_methods *methods,
+                            struct pdb_search *search,
+                            uint16 acct_flags);
+       BOOL (*search_groups)(struct pdb_methods *methods,
+                             struct pdb_search *search);
+       BOOL (*search_aliases)(struct pdb_methods *methods,
+                              struct pdb_search *search,
+                              const DOM_SID *sid);
 
        void *private_data;  /* Private data of some kind */