2007-12-12 20:14:54 +03:00
/*
* Unix SMB / CIFS implementation .
* NetApi Support
2008-01-07 20:36:06 +03:00
* Copyright ( C ) Guenther Deschner 2007 - 2008
2007-12-12 20:14:54 +03:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , see < http : //www.gnu.org/licenses/>.
*/
2007-12-14 14:22:20 +03:00
# ifndef __LIB_NETAPI_H__
# define __LIB_NETAPI_H__
2008-01-11 16:47:52 +03:00
/****************************************************************
NET_API_STATUS
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-04-08 04:42:50 +04:00
typedef enum {
NET_API_STATUS_SUCCESS = 0
} NET_API_STATUS ;
2008-01-25 17:46:11 +03:00
2008-04-09 15:47:51 +04:00
# define ERROR_MORE_DATA ( 234L )
2008-01-25 17:46:11 +03:00
/****************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-04-08 20:43:51 +04:00
# ifndef _HEADER_misc
struct GUID {
uint32_t time_low ;
uint16_t time_mid ;
uint16_t time_hi_and_version ;
uint8_t clock_seq [ 2 ] ;
uint8_t node [ 6 ] ;
} ;
# endif /* _HEADER_misc */
# ifndef _HEADER_libnetapi
2008-05-28 03:18:05 +04:00
# ifndef MAXSUBAUTHS
# define MAXSUBAUTHS 15 /* max sub authorities in a SID */
# endif
struct domsid {
uint8_t sid_rev_num ;
uint8_t num_auths ;
uint8_t id_auth [ 6 ] ;
uint32_t sub_auths [ MAXSUBAUTHS ] ;
} ;
2008-04-08 20:43:51 +04:00
struct DOMAIN_CONTROLLER_INFO {
const char * domain_controller_name ;
const char * domain_controller_address ;
uint32_t domain_controller_address_type ;
struct GUID domain_guid ;
const char * domain_name ;
2008-04-10 23:23:59 +04:00
const char * dns_forest_name ;
2008-04-08 20:43:51 +04:00
uint32_t flags ;
const char * dc_site_name ;
const char * client_site_name ;
} ;
2008-04-10 23:31:12 +04:00
struct SERVER_INFO_1005 {
const char * sv1005_comment ;
} ;
2008-04-08 20:43:51 +04:00
2008-04-09 14:38:22 +04:00
struct USER_INFO_0 {
const char * usri0_name ;
} ;
struct USER_INFO_1 {
const char * usri1_name ;
const char * usri1_password ;
uint32_t usri1_password_age ;
uint32_t usri1_priv ;
const char * usri1_home_dir ;
const char * usri1_comment ;
uint32_t usri1_flags ;
const char * usri1_script_path ;
} ;
2008-04-16 00:30:06 +04:00
struct NET_DISPLAY_USER {
const char * usri1_name ;
const char * usri1_comment ;
uint32_t usri1_flags ;
const char * usri1_full_name ;
uint32_t usri1_user_id ;
uint32_t usri1_next_index ;
} ;
struct NET_DISPLAY_MACHINE {
const char * usri2_name ;
const char * usri2_comment ;
uint32_t usri2_flags ;
uint32_t usri2_user_id ;
uint32_t usri2_next_index ;
} ;
struct NET_DISPLAY_GROUP {
const char * grpi3_name ;
const char * grpi3_comment ;
uint32_t grpi3_group_id ;
uint32_t grpi3_attributes ;
uint32_t grpi3_next_index ;
} ;
2008-05-28 03:18:05 +04:00
struct GROUP_INFO_0 {
const char * grpi0_name ;
} ;
struct GROUP_INFO_1 {
const char * grpi1_name ;
const char * grpi1_comment ;
} ;
struct GROUP_INFO_2 {
const char * grpi2_name ;
const char * grpi2_comment ;
uint32_t grpi2_group_id ;
uint32_t grpi2_attributes ;
} ;
struct GROUP_INFO_3 {
const char * grpi3_name ;
const char * grpi3_comment ;
struct domsid grpi3_group_sid ;
uint32_t grpi3_attributes ;
} ;
2008-06-02 14:54:17 +04:00
struct GROUP_INFO_1002 {
const char * grpi1002_comment ;
} ;
struct GROUP_INFO_1005 {
uint32_t grpi1005_attributes ;
} ;
2008-04-08 20:43:51 +04:00
# endif /* _HEADER_libnetapi */
/****************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-12-12 20:14:54 +03:00
struct libnetapi_ctx {
2008-01-07 22:06:41 +03:00
char * debuglevel ;
char * error_string ;
2007-12-18 04:15:49 +03:00
char * username ;
char * workgroup ;
char * password ;
2008-01-07 22:03:32 +03:00
char * krb5_cc_env ;
2008-04-13 21:22:24 +04:00
int use_kerberos ;
2007-12-12 20:14:54 +03:00
} ;
2008-01-07 22:03:32 +03:00
/****************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-12-18 04:29:50 +03:00
NET_API_STATUS libnetapi_init ( struct libnetapi_ctx * * ctx ) ;
2008-04-10 23:52:03 +04:00
/****************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-12-18 04:29:50 +03:00
NET_API_STATUS libnetapi_free ( struct libnetapi_ctx * ctx ) ;
2008-04-10 23:52:03 +04:00
/****************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
NET_API_STATUS libnetapi_getctx ( struct libnetapi_ctx * * ctx ) ;
/****************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
NET_API_STATUS libnetapi_set_debuglevel ( struct libnetapi_ctx * ctx ,
const char * debuglevel ) ;
/****************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
NET_API_STATUS libnetapi_set_username ( struct libnetapi_ctx * ctx ,
const char * username ) ;
/****************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
NET_API_STATUS libnetapi_set_password ( struct libnetapi_ctx * ctx ,
const char * password ) ;
/****************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
NET_API_STATUS libnetapi_set_workgroup ( struct libnetapi_ctx * ctx ,
const char * workgroup ) ;
/****************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-04-13 21:22:24 +04:00
NET_API_STATUS libnetapi_set_use_kerberos ( struct libnetapi_ctx * ctx ) ;
/****************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-01-11 16:47:23 +03:00
const char * libnetapi_errstr ( NET_API_STATUS status ) ;
2008-04-10 23:52:03 +04:00
/****************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
const char * libnetapi_get_error_string ( struct libnetapi_ctx * ctx ,
NET_API_STATUS status ) ;
2008-01-11 16:47:23 +03:00
2008-01-07 22:06:41 +03:00
/****************************************************************
2008-01-18 03:56:01 +03:00
NetApiBufferFree
2008-01-07 22:06:41 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-01-08 13:53:38 +03:00
NET_API_STATUS NetApiBufferFree ( void * buffer ) ;
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* NetJoinDomain
*
* @ brief Join a computer to a domain or workgroup
*
* @ param [ in ] server The server name to connect to
* @ param [ in ] domain The domain or workgroup to join
* @ param [ in ] account_ou The organizational Unit to create the computer account
* in ( AD only )
* @ param [ in ] account The domain account used for joining a domain
* @ param [ in ] password The domain account ' s password used for joining a domain
* @ param [ in ] join_flags Bitmask field to define specific join features
* @ return NET_API_STATUS
*
* example netdomjoin / netdomjoin . c
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-12-12 20:14:54 +03:00
2008-04-08 04:42:50 +04:00
NET_API_STATUS NetJoinDomain ( const char * server /* [in] */ ,
const char * domain /* [in] [ref] */ ,
const char * account_ou /* [in] */ ,
const char * account /* [in] */ ,
const char * password /* [in] */ ,
uint32_t join_flags /* [in] */ ) ;
2008-01-18 03:56:01 +03:00
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* NetUnjoinDomain
*
* @ brief Unjoin a computer from a domain or workgroup
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] account The domain account used for unjoining a domain
* @ param [ in ] password The domain account ' s password used for unjoining a domain
* @ param [ in ] unjoin_flags Bitmask field to define specific unjoin features
* @ return NET_API_STATUS
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-01-18 03:56:01 +03:00
2008-04-08 04:42:50 +04:00
NET_API_STATUS NetUnjoinDomain ( const char * server_name /* [in] */ ,
const char * account /* [in] */ ,
const char * password /* [in] */ ,
uint32_t unjoin_flags /* [in] */ ) ;
2008-01-18 03:56:01 +03:00
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* NetGetJoinInformation
*
* @ brief Unjoin a computer from a domain or workgroup
*
* @ param [ in ] server_name The server name to connect to
* @ param [ out ] name_buffer Returns the name of the workgroup or domain
* @ param [ out ] name_type Returns the type of that name
* @ return NET_API_STATUS
*
* example netdomjoin - gui / netdomjoin - gui . c
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-01-18 03:56:01 +03:00
2008-04-08 04:42:50 +04:00
NET_API_STATUS NetGetJoinInformation ( const char * server_name /* [in] */ ,
const char * * name_buffer /* [out] [ref] */ ,
uint16_t * name_type /* [out] [ref] */ ) ;
2007-12-14 14:22:20 +03:00
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* NetGetJoinableOUs
*
* @ brief Query for the list of joinable organizational Units that can be used
* for joining AD
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] domain The AD domain to query
* @ param [ in ] account The domain account used for the query
* @ param [ in ] password The domain account ' s password used for the query
* @ param [ out ] ou_count The number of ous returned
* @ param [ out ] ous Returned string array containing the ous
* @ return NET_API_STATUS
*
* example netdomjoin - gui / netdomjoin - gui . c
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-01-18 05:14:08 +03:00
2008-04-08 04:42:50 +04:00
NET_API_STATUS NetGetJoinableOUs ( const char * server_name /* [in] */ ,
const char * domain /* [in] [ref] */ ,
const char * account /* [in] */ ,
const char * password /* [in] */ ,
uint32_t * ou_count /* [out] [ref] */ ,
const char * * * ous /* [out] [ref] */ ) ;
2008-01-18 05:14:08 +03:00
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* NetServerGetInfo
*
* @ brief Get Information on a server
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] level The level to define which information is requested
* @ param [ out ] buffer The returned buffer carrying the SERVER_INFO structure
* @ return NET_API_STATUS
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-01-18 03:56:01 +03:00
2008-04-08 04:42:50 +04:00
NET_API_STATUS NetServerGetInfo ( const char * server_name /* [in] */ ,
uint32_t level /* [in] */ ,
uint8_t * * buffer /* [out] [ref] */ ) ;
2008-01-18 03:56:01 +03:00
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* NetServerSetInfo
*
* @ brief Get Information on a server
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] level The level to define which information is set
* @ param [ in ] buffer The buffer carrying the SERVER_INFO structure
* @ param [ out ] parm_error On failure returns the invalid SERVER_INFO member
* @ return NET_API_STATUS
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-01-18 03:56:01 +03:00
2008-04-08 04:42:50 +04:00
NET_API_STATUS NetServerSetInfo ( const char * server_name /* [in] */ ,
uint32_t level /* [in] */ ,
uint8_t * buffer /* [in] [ref] */ ,
uint32_t * parm_error /* [out] [ref] */ ) ;
2007-12-21 17:51:00 +03:00
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* NetGetDCName
*
* @ brief Query for the PDC for a given domain
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] domain_name The name of the domain to lookup
* @ param [ out ] buffer The name of the domain to lookup
* @ return NET_API_STATUS
*
* example getdc / getdc . c
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-01-18 03:56:01 +03:00
2008-04-08 04:42:50 +04:00
NET_API_STATUS NetGetDCName ( const char * server_name /* [in] */ ,
const char * domain_name /* [in] */ ,
uint8_t * * buffer /* [out] [ref] */ ) ;
2008-01-18 03:56:01 +03:00
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* NetGetAnyDCName
*
* @ brief Query for any DC for a given domain
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] domain_name The name of the domain to lookup
* @ param [ out ] buffer The name of the domain to lookup
* @ return NET_API_STATUS
*
* example getdc / getdc . c
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-01-18 03:56:01 +03:00
2008-04-08 04:42:50 +04:00
NET_API_STATUS NetGetAnyDCName ( const char * server_name /* [in] */ ,
const char * domain_name /* [in] */ ,
uint8_t * * buffer /* [out] [ref] */ ) ;
2007-12-21 17:51:00 +03:00
2008-04-08 20:43:51 +04:00
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* DsGetDcName
*
* @ brief Lookup a DC for a given domain and return information structure
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] domain_name The name of the domain to lookup ( cannot be NULL )
* @ param [ in ] domain_guid The GUID of the domain to lookup ( optional )
* @ param [ in ] site_name The name of the site the DC should reside in
* @ param [ in ] flags A bitmask to request specific features supported by the DC
* @ param [ out ] dc_info Pointer to a DOMAIN_CONTROLLER_INFO structure
* @ return NET_API_STATUS
*
* example dsgetdc / dsgetdc . c
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-04-08 20:43:51 +04:00
NET_API_STATUS DsGetDcName ( const char * server_name /* [in] [unique] */ ,
const char * domain_name /* [in] [ref] */ ,
struct GUID * domain_guid /* [in] [unique] */ ,
const char * site_name /* [in] [unique] */ ,
uint32_t flags /* [in] */ ,
struct DOMAIN_CONTROLLER_INFO * * dc_info /* [out] [ref] */ ) ;
2008-04-09 14:38:22 +04:00
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* NetUserAdd
*
* @ brief Create a user on a given server
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] level The level of the USER_INFO structure passed in ( Currently
* only level 1 is supported )
* @ param [ in ] buffer The buffer carrying the USER_INFO structure
* @ param [ out ] parm_error In case of error returns the failing member of the
* structure
* @ return NET_API_STATUS
*
* example user / user_add . c
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-04-09 14:38:22 +04:00
NET_API_STATUS NetUserAdd ( const char * server_name /* [in] */ ,
uint32_t level /* [in] */ ,
uint8_t * buffer /* [in] [ref] */ ,
uint32_t * parm_error /* [out] [ref] */ ) ;
2008-04-09 15:35:49 +04:00
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* NetUserDel
*
* @ brief Delete a user on a given server
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] user_name The user account to delete
* @ return NET_API_STATUS
*
* example user / user_del . c
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-04-09 15:35:49 +04:00
NET_API_STATUS NetUserDel ( const char * server_name /* [in] */ ,
const char * user_name /* [in] */ ) ;
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* NetUserEnum
*
* @ brief Enumerate accounts 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 [ in ] filter The account flags filter 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 user / user_enum . c
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-04-09 15:47:51 +04:00
NET_API_STATUS NetUserEnum ( const char * server_name /* [in] */ ,
uint32_t level /* [in] */ ,
uint32_t filter /* [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] */ ) ;
2008-04-16 12:03:06 +04:00
/************************************************************/ /**
*
* NetQueryDisplayInformation
*
* @ brief Enumerate accounts on a server
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] level The enumeration level used for the query
* @ param [ in ] idx The index to start the the display enumeration at
* @ param [ in ] entries_requested The number of entries requested
* @ param [ in ] prefmaxlen The requested maximal buffer size
* @ param [ out ] entries_read The number of returned entries
* @ param [ out ] buffer The returned display information buffer
* @ return NET_API_STATUS
*
* example user / user_dispinfo . c
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-04-13 21:23:42 +04:00
NET_API_STATUS NetQueryDisplayInformation ( const char * server_name /* [in] [unique] */ ,
uint32_t level /* [in] */ ,
uint32_t idx /* [in] */ ,
uint32_t entries_requested /* [in] */ ,
uint32_t prefmaxlen /* [in] */ ,
uint32_t * entries_read /* [out] [ref] */ ,
void * * buffer /* [out] [noprint,ref] */ ) ;
2008-05-28 03:18:05 +04:00
/************************************************************/ /**
*
* NetGroupAdd
*
* @ brief Create Domain Group
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] level The level used for the new group creation
* @ param [ in ] buf The buffer containing the group structure
* @ param [ out ] parm_err The returned parameter error number if any
* @ return NET_API_STATUS
*
* example group / group_add . c
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
NET_API_STATUS NetGroupAdd ( const char * server_name /* [in] */ ,
uint32_t level /* [in] */ ,
uint8_t * buf /* [in] [ref] */ ,
uint32_t * parm_err /* [out] [ref] */ ) ;
/************************************************************/ /**
*
* NetGroupDel
*
* @ brief Delete Domain Group
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] group_name The name of the group that is going to be deleted
* @ return NET_API_STATUS
*
* example group / group_del . c
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
NET_API_STATUS NetGroupDel ( const char * server_name /* [in] */ ,
const char * group_name /* [in] */ ) ;
2008-06-02 14:54:17 +04:00
/************************************************************/ /**
*
* NetGroupSetInfo
*
* @ brief Set Domain Group Information
*
* @ param [ in ] server_name The server name to connect to
* @ param [ in ] group_name The name of the group that is going to be modified
* @ param [ in ] level The level defining the structure type in buf
* @ param [ in ] buf The buffer containing a GROUP_INFO_X structure
* @ param [ out ] parm_err The returned parameter error number if any
* @ return NET_API_STATUS
*
* example group / group_setinfo . c
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
NET_API_STATUS NetGroupSetInfo ( const char * server_name /* [in] */ ,
const char * group_name /* [in] */ ,
uint32_t level /* [in] */ ,
uint8_t * buf /* [in] [ref] */ ,
uint32_t * parm_err /* [out] [ref] */ ) ;
2007-12-14 14:22:20 +03:00
# endif