netapi: fix public header for USER_INFO_4.
[jra/samba/.git] / source3 / lib / netapi / netapi.h
index 9c3468d055261a00598fc45cbffe62742c24d7af..1dc933a9d9f0a068151bdf377f6474fc27b1f778 100644 (file)
 #ifndef __LIB_NETAPI_H__
 #define __LIB_NETAPI_H__
 
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
 /****************************************************************
  NET_API_STATUS
 ****************************************************************/
@@ -29,6 +33,8 @@ typedef enum {
 
 #define ERROR_MORE_DATA        ( 234L )
 
+#define ENCRYPTED_PWLEN        ( 16 )
+
 /****************************************************************
 ****************************************************************/
 
@@ -75,6 +81,8 @@ struct DOMAIN_CONTROLLER_INFO {
 #define FILTER_WORKSTATION_TRUST_ACCOUNT       ( 0x0010 )
 #define FILTER_SERVER_TRUST_ACCOUNT    ( 0x0020 )
 
+#define TIMEQ_FOREVER  ( (uint32_t)-1L )
+
 struct SERVER_INFO_1005 {
        const char * sv1005_comment;
 };
@@ -177,7 +185,7 @@ struct USER_INFO_4 {
        const char * usri4_logon_server;
        uint32_t usri4_country_code;
        uint32_t usri4_code_page;
-       struct dom_sid *usri4_user_sid;/* [unique] */
+       struct domsid *usri4_user_sid;/* [unique] */
        uint32_t usri4_primary_group_id;
        const char * usri4_profile;
        const char * usri4_home_dir_drive;
@@ -222,6 +230,37 @@ struct USER_INFO_20 {
        uint32_t usri20_user_id;
 };
 
+struct USER_INFO_21 {
+       uint8_t *usri21_password;
+};
+
+struct USER_INFO_22 {
+       const char * usri22_name;
+       uint8_t *usri22_password;
+       uint32_t usri22_password_age;
+       uint32_t usri22_priv;
+       const char * usri22_home_dir;
+       const char * usri22_comment;
+       uint32_t usri22_flags;
+       uint32_t usri22_script_path;
+       uint32_t usri22_auth_flags;
+       const char * usri22_full_name;
+       const char * usri22_usr_comment;
+       const char * usri22_parms;
+       const char * usri22_workstations;
+       uint32_t usri22_last_logon;
+       uint32_t usri22_last_logoff;
+       uint32_t usri22_acct_expires;
+       uint32_t usri22_max_storage;
+       uint32_t usri22_units_per_week;
+       uint8_t *usri22_logon_hours;/* [unique] */
+       uint32_t usri22_bad_pw_count;
+       uint32_t usri22_num_logons;
+       const char * usri22_logon_server;
+       uint32_t usri22_country_code;
+       uint32_t usri22_code_page;
+};
+
 struct USER_INFO_23 {
        const char * usri23_name;
        const char * usri23_full_name;
@@ -230,10 +269,139 @@ struct USER_INFO_23 {
        struct domsid *usri23_user_sid;/* [unique] */
 };
 
+struct USER_INFO_1003 {
+       const char * usri1003_password;
+};
+
+struct USER_INFO_1005 {
+       uint32_t usri1005_priv;
+};
+
+struct USER_INFO_1006 {
+       const char * usri1006_home_dir;
+};
+
 struct USER_INFO_1007 {
        const char * usri1007_comment;
 };
 
+struct USER_INFO_1008 {
+       uint32_t usri1008_flags;
+};
+
+struct USER_INFO_1009 {
+       const char * usri1009_script_path;
+};
+
+struct USER_INFO_1010 {
+       uint32_t usri1010_auth_flags;
+};
+
+struct USER_INFO_1011 {
+       const char * usri1011_full_name;
+};
+
+struct USER_INFO_1012 {
+       const char * usri1012_usr_comment;
+};
+
+struct USER_INFO_1013 {
+       const char * usri1013_parms;
+};
+
+struct USER_INFO_1014 {
+       const char * usri1014_workstations;
+};
+
+struct USER_INFO_1017 {
+       uint32_t usri1017_acct_expires;
+};
+
+struct USER_INFO_1018 {
+       uint32_t usri1018_max_storage;
+};
+
+struct USER_INFO_1020 {
+       uint32_t usri1020_units_per_week;
+       uint8_t *usri1020_logon_hours;/* [unique] */
+};
+
+struct USER_INFO_1023 {
+       const char * usri1023_logon_server;
+};
+
+struct USER_INFO_1024 {
+       uint32_t usri1024_country_code;
+};
+
+struct USER_INFO_1025 {
+       uint32_t usri1025_code_page;
+};
+
+struct USER_INFO_1051 {
+       uint32_t usri1051_primary_group_id;
+};
+
+struct USER_INFO_1052 {
+       const char * usri1052_profile;
+};
+
+struct USER_INFO_1053 {
+       const char * usri1053_home_dir_drive;
+};
+
+struct USER_MODALS_INFO_0 {
+       uint32_t usrmod0_min_passwd_len;
+       uint32_t usrmod0_max_passwd_age;
+       uint32_t usrmod0_min_passwd_age;
+       uint32_t usrmod0_force_logoff;
+       uint32_t usrmod0_password_hist_len;
+};
+
+struct USER_MODALS_INFO_1 {
+       uint32_t usrmod1_role;
+       const char * usrmod1_primary;
+};
+
+struct USER_MODALS_INFO_2 {
+       const char * usrmod2_domain_name;
+       struct domsid *usrmod2_domain_id;/* [unique] */
+};
+
+struct USER_MODALS_INFO_3 {
+       uint32_t usrmod3_lockout_duration;
+       uint32_t usrmod3_lockout_observation_window;
+       uint32_t usrmod3_lockout_threshold;
+};
+
+struct USER_MODALS_INFO_1001 {
+       uint32_t usrmod1001_min_passwd_len;
+};
+
+struct USER_MODALS_INFO_1002 {
+       uint32_t usrmod1002_max_passwd_age;
+};
+
+struct USER_MODALS_INFO_1003 {
+       uint32_t usrmod1003_min_passwd_age;
+};
+
+struct USER_MODALS_INFO_1004 {
+       uint32_t usrmod1004_force_logoff;
+};
+
+struct USER_MODALS_INFO_1005 {
+       uint32_t usrmod1005_password_hist_len;
+};
+
+struct USER_MODALS_INFO_1006 {
+       uint32_t usrmod1006_role;
+};
+
+struct USER_MODALS_INFO_1007 {
+       const char * usrmod1007_primary;
+};
+
 struct NET_DISPLAY_USER {
        const char * usri1_name;
        const char * usri1_comment;
@@ -290,6 +458,15 @@ struct GROUP_INFO_1005 {
        uint32_t grpi1005_attributes;
 };
 
+struct GROUP_USERS_INFO_0 {
+       const char * grui0_name;
+};
+
+struct GROUP_USERS_INFO_1 {
+       const char * grui1_name;
+       uint32_t grui1_attributes;
+};
+
 struct LOCALGROUP_INFO_0 {
        const char * lgrpi0_name;
 };
@@ -303,6 +480,39 @@ struct LOCALGROUP_INFO_1002 {
        const char * lgrpi1002_comment;
 };
 
+enum SID_NAME_USE {
+       SidTypeUser=1,
+       SidTypeGroup=2,
+       SidTypeDomain=3,
+       SidTypeAlias=4,
+       SidTypeWellKnownGroup=5,
+       SidTypeDeletedAccount=6,
+       SidTypeInvalid=7,
+       SidTypeUnknown=8,
+       SidTypeComputer=9,
+       SidTypeLabel=10
+};
+
+struct LOCALGROUP_MEMBERS_INFO_0 {
+       struct domsid *lgrmi0_sid;/* [unique] */
+};
+
+struct LOCALGROUP_MEMBERS_INFO_1 {
+       struct domsid *lgrmi1_sid;/* [unique] */
+       enum SID_NAME_USE lgrmi1_sidusage;
+       const char * lgrmi1_name;
+};
+
+struct LOCALGROUP_MEMBERS_INFO_2 {
+       struct domsid *lgrmi2_sid;/* [unique] */
+       enum SID_NAME_USE lgrmi2_sidusage;
+       const char * lgrmi2_domainandname;
+};
+
+struct LOCALGROUP_MEMBERS_INFO_3 {
+       const char * lgrmi3_domainandname;
+};
+
 struct TIME_OF_DAY_INFO {
        uint32_t tod_elapsedt;
        uint32_t tod_msecs;
@@ -331,6 +541,7 @@ struct libnetapi_ctx {
        char *password;
        char *krb5_cc_env;
        int use_kerberos;
+       int disable_policy_handle_cache;
 
        void *private_data;
 };
@@ -390,6 +601,12 @@ const char *libnetapi_errstr(NET_API_STATUS status);
 const char *libnetapi_get_error_string(struct libnetapi_ctx *ctx,
                                       NET_API_STATUS status);
 
+/****************************************************************
+ NetApiBufferAllocate
+****************************************************************/
+
+NET_API_STATUS NetApiBufferAllocate(uint32_t byte_count,
+                                   void **buffer);
 
 /****************************************************************
  NetApiBufferFree
@@ -404,7 +621,7 @@ NET_API_STATUS NetApiBufferFree(void *buffer);
  * @brief Convert a domain sid into a string
  *
  * @param[in] sid A pointer to a sid structure
- * @param[in] sid_string A pointer that holds a pointer to a sid string. Caller
+ * @param[in,out] sid_string A pointer that holds a pointer to a sid string. Caller
  * needs to free with free(3)
  * @return bool
  ***************************************************************/
@@ -412,6 +629,21 @@ NET_API_STATUS NetApiBufferFree(void *buffer);
 int  ConvertSidToStringSid(const struct domsid *sid,
                           char **sid_string);
 
+/************************************************************//**
+ *
+ * ConvertStringSidToSid
+ *
+ * @brief Convert a string into a domain sid
+ *
+ * @param[in] sid_string A pointer to a sid string.
+ * @param[in,out] sid A pointer that holds a pointer to a sid structure.
+ * Caller needs to free with free(3)
+ * @return bool
+ ***************************************************************/
+
+int ConvertStringSidToSid(const char *sid_string,
+                         struct domsid **sid);
+
 /************************************************************//**
  *
  * NetJoinDomain
@@ -715,7 +947,7 @@ NET_API_STATUS NetUserGetInfo(const char * server_name /* [in] */,
  * @param[in] server_name The server name to connect to
  * @param[in] user_name The name of the user that is going to be modified
  * @param[in] level The level defining the requested USER_INFO_X structure
- * @param[in] buf The buffer containing a USER_INFO_X structure
+ * @param[in] buffer The buffer containing a USER_INFO_X structure
  * @param[out] parm_err The returned parameter error number if any
  * @return NET_API_STATUS
  *
@@ -728,6 +960,71 @@ NET_API_STATUS NetUserSetInfo(const char * server_name /* [in] */,
                              uint8_t *buffer /* [in] [ref] */,
                              uint32_t *parm_err /* [out] [ref] */);
 
+/************************************************************//**
+ *
+ * NetUserModalsGet
+ *
+ * @brief Get SAM domain and password information
+ *
+ * @param[in] server_name The server name to connect to
+ * @param[in] level The level defining which USER_MODALS_INFO_X buffer to query
+ * @param[out] buffer The returned USER_MODALS_INFO_X buffer
+ * @return NET_API_STATUS
+ *
+ * example user/user_modalsget.c
+ ***************************************************************/
+
+NET_API_STATUS NetUserModalsGet(const char * server_name /* [in] */,
+                               uint32_t level /* [in] */,
+                               uint8_t **buffer /* [out] [ref] */);
+
+/************************************************************//**
+ *
+ * NetUserModalsSet
+ *
+ * @brief Set SAM domain and password information
+ *
+ * @param[in] server_name The server name to connect to
+ * @param[in] level The level defining which USER_MODALS_INFO_X buffer to query
+ * @param[out] buffer The buffer conntaing a USER_MODALS_INFO_X structure
+ * @param[out] parm_err The returned parameter error number if any
+ * @return NET_API_STATUS
+ *
+ * example user/user_modalsset.c
+ ***************************************************************/
+
+NET_API_STATUS NetUserModalsSet(const char * server_name /* [in] */,
+                               uint32_t level /* [in] */,
+                               uint8_t *buffer /* [in] [ref] */,
+                               uint32_t *parm_err /* [out] [ref] */);
+
+/************************************************************//**
+ *
+ * NetUserGetGroups
+ *
+ * @brief Enumerate grouplist of a user on a server
+ *
+ * @param[in] server_name The server name to connect to
+ * @param[in] user_name The user name to query
+ * @param[in] level The enumeration level used for the query (Currently only
+ * level 0 is supported)
+ * @param[out] buffer The returned enumeration buffer
+ * @param[in] prefmaxlen The requested maximal buffer size
+ * @param[out] entries_read The number of returned entries
+ * @param[out] total_entries The number of total entries
+ * @return NET_API_STATUS
+ *
+ * example user/user_getgroups.c
+ ***************************************************************/
+
+NET_API_STATUS NetUserGetGroups(const char * server_name /* [in] */,
+                               const char * user_name /* [in] */,
+                               uint32_t level /* [in] */,
+                               uint8_t **buffer /* [out] [ref] */,
+                               uint32_t prefmaxlen /* [in] */,
+                               uint32_t *entries_read /* [out] [ref] */,
+                               uint32_t *total_entries /* [out] [ref] */);
+
 /************************************************************//**
  *
  * NetQueryDisplayInformation
@@ -898,6 +1195,35 @@ NET_API_STATUS NetGroupDelUser(const char * server_name /* [in] */,
                               const char * group_name /* [in] */,
                               const char * user_name /* [in] */);
 
+/************************************************************//**
+ *
+ * NetGroupGetUsers
+ *
+ * @brief Get Users for a group on a server
+ *
+ * @param[in] server_name The server name to connect to
+ * @param[in] group_name The group name to enumerate users for
+ * @param[in] level The enumeration level used for the query
+ * @param[out] buffer The returned enumeration buffer
+ * @param[in] prefmaxlen The requested maximal buffer size
+ * @param[out] entries_read The number of returned entries
+ * @param[out] total_entries The number of total entries
+ * @param[in,out] resume_handle A handle passed in and returned for resuming
+ * operations
+ * @return NET_API_STATUS
+ *
+ * example group/group_getusers.c
+ ***************************************************************/
+
+NET_API_STATUS NetGroupGetUsers(const char * server_name /* [in] */,
+                               const char * group_name /* [in] */,
+                               uint32_t level /* [in] */,
+                               uint8_t **buffer /* [out] [ref] */,
+                               uint32_t prefmaxlen /* [in] */,
+                               uint32_t *entries_read /* [out] [ref] */,
+                               uint32_t *total_entries /* [out] [ref] */,
+                               uint32_t *resume_handle /* [in,out] [ref] */);
+
 /************************************************************//**
  *
  * NetLocalGroupAdd
@@ -978,6 +1304,133 @@ NET_API_STATUS NetLocalGroupSetInfo(const char * server_name /* [in] */,
                                    uint8_t *buf /* [in] [ref] */,
                                    uint32_t *parm_err /* [out] [ref] */);
 
+/************************************************************//**
+ *
+ * NetLocalGroupEnum
+ *
+ * @brief Enumerate local groups on a server
+ *
+ * @param[in] server_name The server name to connect to
+ * @param[in] level The enumeration level used for the query (Currently only
+ * level 0 is supported)
+ * @param[out] buffer The returned enumeration buffer
+ * @param[in] prefmaxlen The requested maximal buffer size
+ * @param[out] entries_read The number of returned entries
+ * @param[out] total_entries The number of total entries
+ * @param[in,out] resume_handle A handle passed in and returned for resuming
+ * operations
+ * @return NET_API_STATUS
+ *
+ * example localgroup/localgroup_enum.c
+ ***************************************************************/
+
+NET_API_STATUS NetLocalGroupEnum(const char * server_name /* [in] */,
+                                uint32_t level /* [in] */,
+                                uint8_t **buffer /* [out] [ref] */,
+                                uint32_t prefmaxlen /* [in] */,
+                                uint32_t *entries_read /* [out] [ref] */,
+                                uint32_t *total_entries /* [out] [ref] */,
+                                uint32_t *resume_handle /* [in,out] [ref] */);
+
+/************************************************************//**
+ *
+ * NetLocalGroupAddMembers
+ *
+ * @brief Add Members to a Local Group
+ *
+ * @param[in] server_name The server name to connect to
+ * @param[in] group_name The name of the group that is going to modified
+ * @param[in] level The level defining the LOCALGROUP_MEMBERS_INFO_X structure
+ * @param[in] buffer The buffer containing a LOCALGROUP_MEMBERS_INFO_X structure
+ * @param[in] total_entries The number of LOCALGROUP_MEMBERS_INFO_X entries in
+ * the buffer
+ * @return NET_API_STATUS
+ *
+ * example localgroup/localgroup_addmembers.c
+ ***************************************************************/
+
+NET_API_STATUS NetLocalGroupAddMembers(const char * server_name /* [in] */,
+                                      const char * group_name /* [in] */,
+                                      uint32_t level /* [in] */,
+                                      uint8_t *buffer /* [in] [ref] */,
+                                      uint32_t total_entries /* [in] */);
+
+/************************************************************//**
+ *
+ * NetLocalGroupDelMembers
+ *
+ * @brief Delete Members from a Local Group
+ *
+ * @param[in] server_name The server name to connect to
+ * @param[in] group_name The name of the group that is going to modified
+ * @param[in] level The level defining the LOCALGROUP_MEMBERS_INFO_X structure
+ * @param[in] buffer The buffer containing a LOCALGROUP_MEMBERS_INFO_X structure
+ * @param[in] total_entries The number of LOCALGROUP_MEMBERS_INFO_X entries in
+ * the buffer
+ * @return NET_API_STATUS
+ *
+ * example localgroup/localgroup_delmembers.c
+ ***************************************************************/
+
+NET_API_STATUS NetLocalGroupDelMembers(const char * server_name /* [in] */,
+                                      const char * group_name /* [in] */,
+                                      uint32_t level /* [in] */,
+                                      uint8_t *buffer /* [in] [ref] */,
+                                      uint32_t total_entries /* [in] */);
+
+/************************************************************//**
+ *
+ * NetLocalGroupGetMembers
+ *
+ * @brief Enumerate Members in a local group
+ *
+ * @param[in] server_name The server name to connect to
+ * @param[in] local_group_name The localgroup that is going to be queried
+ * @param[in] level The level defining the LOCALGROUP_MEMBERS_INFO_X structure
+ * @param[out] buffer The buffer containing a LOCALGROUP_MEMBERS_INFO_X
+ * structure
+ * @param[in] prefmaxlen The requested maximal buffer size
+ * @param[out] entries_read The number of LOCALGROUP_MEMBERS_INFO_X entries in the buffer
+ * @param[out] total_entries The total number of LOCALGROUP_MEMBERS_INFO_X entries for that group
+ * @param[in,out] resume_handle A handle passed in and returned for resuming
+ * operations
+ * @return NET_API_STATUS
+ *
+ * example localgroup/localgroup_getmembers.c
+ ***************************************************************/
+
+NET_API_STATUS NetLocalGroupGetMembers(const char * server_name /* [in] */,
+                                      const char * local_group_name /* [in] */,
+                                      uint32_t level /* [in] */,
+                                      uint8_t **buffer /* [out] [ref] */,
+                                      uint32_t prefmaxlen /* [in] */,
+                                      uint32_t *entries_read /* [out] [ref] */,
+                                      uint32_t *total_entries /* [out] [ref] */,
+                                      uint32_t *resume_handle /* [in,out] [ref] */);
+
+/************************************************************//**
+ *
+ * NetLocalGroupSetMembers
+ *
+ * @brief Set Members in a Local Group
+ *
+ * @param[in] server_name The server name to connect to
+ * @param[in] group_name The name of the group that is going to modified
+ * @param[in] level The level defining the LOCALGROUP_MEMBERS_INFO_X structure
+ * @param[in] buffer The buffer containing a LOCALGROUP_MEMBERS_INFO_X structure
+ * @param[in] total_entries The number of LOCALGROUP_MEMBERS_INFO_X entries in
+ * the buffer
+ * @return NET_API_STATUS
+ *
+ * example localgroup/localgroup_setmembers.c
+ ***************************************************************/
+
+NET_API_STATUS NetLocalGroupSetMembers(const char * server_name /* [in] */,
+                                      const char * group_name /* [in] */,
+                                      uint32_t level /* [in] */,
+                                      uint8_t *buffer /* [in] [ref] */,
+                                      uint32_t total_entries /* [in] */);
+
 /************************************************************//**
  *
  * NetRemoteTOD
@@ -993,5 +1446,8 @@ NET_API_STATUS NetLocalGroupSetInfo(const char * server_name /* [in] */,
 
 NET_API_STATUS NetRemoteTOD(const char * server_name /* [in] */,
                            uint8_t **buf /* [out] [ref] */);
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
 
-#endif
+#endif /* __LIB_NETAPI_H__ */