2025-04-27 07:49:33 -04:00

806 lines
25 KiB
C

/********************************************************************/
/** Microsoft LAN Manager **/
/** Copyright (c) 1987-2001 Microsoft Corporation, All Rights Reserved **/
/********************************************************************/
/********************************************************************
* *
* About this file ... ACCESS.H *
* *
* This file contains information about the NetUser, NetGroup, *
* NetAccess, and NetAccounts APIs. There is a section for each *
* set of APIs. Each section contains: *
* *
* Function prototypes. *
* *
* Data structure templates. *
* *
* Definition of special values. *
* *
* *
* NOTE: You must include NETCONS.H before this file, since this *
* file depends on values defined in NETCONS.H. *
* *
* This file is always included by LAN.H *
* *
********************************************************************/
/****************************************************************
* *
* User Class *
* *
****************************************************************/
#if (defined( INCL_NETUSER ) || !defined( LAN_INCLUDED )) \
&& !defined( NETUSER_INCLUDED )
#define NETUSER_INCLUDED
/****************************************************************
* *
* Function prototypes - USER *
* *
****************************************************************/
extern API_FUNCTION
NetUserAdd ( const char far * pszServer,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer );
extern API_FUNCTION
NetUserDel ( const char far * pszServer,
char far * pszUserName );
extern API_FUNCTION
NetUserEnum ( const char far * pszServer,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short far * pcEntriesRead,
unsigned short far * pcTotalAvail );
extern API_FUNCTION
NetUserGetInfo ( const char far * pszServer,
char far * pszUserName,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short far * pcbTotalAvail );
extern API_FUNCTION
NetUserSetInfo ( const char far * pszServer,
char far * pszUserName,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
short sParmNum );
extern API_FUNCTION
NetUserPasswordSet ( const char far * pszServer,
char far * pszUserName,
char far * pszOldPassword,
char far * pszNewPassword );
extern API_FUNCTION
NetUserGetGroups ( const char far * pszServer,
const char far * pszUserName,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short far * pcEntriesRead,
unsigned short far * pcTotalAvail );
extern API_FUNCTION
NetUserSetGroups ( const char far * pszServer,
const char far * pszUserName,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short cEntries );
extern API_FUNCTION
NetUserModalsGet ( const char far * pszServer,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short far * pcbTotalAvail );
extern API_FUNCTION
NetUserModalsSet ( const char far * pszServer,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
short sParmNum );
extern API_FUNCTION
NetUserValidate ( char far * pszReserved,
char far * pszUserName,
char far * pszPassword,
unsigned short far * pusPrivilege );
extern API_FUNCTION
NetUserValidate2 ( char far * pszReserved1,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short usReserved2,
unsigned short far * pcbTotalAvail );
/****************************************************************
* *
* Data structure templates - USER *
* *
****************************************************************/
struct user_info_0 {
char usri0_name[UNLEN+1];
}; /* user_info_0 */
struct user_info_1 {
char usri1_name[UNLEN+1];
char usri1_pad_1;
char usri1_password[ENCRYPTED_PWLEN];/* See note below */
long usri1_password_age;
unsigned short usri1_priv; /* See values below */
char far * usri1_home_dir;
char far * usri1_comment;
unsigned short usri1_flags; /* See values below */
char far * usri1_script_path;
}; /* user_info_1 */
/*
* NOTE: The maximum length of a user password is PWLEN. The
* field usri1_password contains extra room for transporting
* the encrypted form of the password over the network. When
* setting the user's password, check length vs. PWLEN, not
* the size of this field. PWLEN is defined in NETCONS.H.
*/
struct user_info_2 {
char usri2_name[UNLEN+1];
char usri2_pad_1;
char usri2_password[ENCRYPTED_PWLEN];
long usri2_password_age;
unsigned short usri2_priv;
char far * usri2_home_dir;
char far * usri2_comment;
unsigned short usri2_flags;
char far * usri2_script_path;
unsigned long usri2_auth_flags;
char far * usri2_full_name;
char far * usri2_usr_comment;
char far * usri2_parms;
char far * usri2_workstations;
long usri2_last_logon;
long usri2_last_logoff;
long usri2_acct_expires;
unsigned long usri2_max_storage;
unsigned short usri2_units_per_week;
unsigned char far * usri2_logon_hours;
unsigned short usri2_bad_pw_count;
unsigned short usri2_num_logons;
char far * usri2_logon_server;
unsigned short usri2_country_code;
unsigned short usri2_code_page;
}; /* user_info_2 */
struct user_info_10 {
char usri10_name[UNLEN+1];
char usri10_pad_1;
char far * usri10_comment;
char far * usri10_usr_comment;
char far * usri10_full_name;
}; /* user_info_10 */
struct user_info_11 {
char usri11_name[UNLEN+1];
char usri11_pad_1;
char far * usri11_comment;
char far * usri11_usr_comment;
char far * usri11_full_name;
unsigned short usri11_priv;
unsigned long usri11_auth_flags;
long usri11_password_age;
char far * usri11_home_dir;
char far * usri11_parms;
long usri11_last_logon;
long usri11_last_logoff;
unsigned short usri11_bad_pw_count;
unsigned short usri11_num_logons;
char far * usri11_logon_server;
unsigned short usri11_country_code;
char far * usri11_workstations;
unsigned long usri11_max_storage;
unsigned short usri11_units_per_week;
char far * usri11_logon_hours;
unsigned short usri11_code_page;
}; /* user_info_11 */
/*
* For User Modals
*/
struct user_modals_info_0 {
unsigned short usrmod0_min_passwd_len;
unsigned long usrmod0_max_passwd_age;
unsigned long usrmod0_min_passwd_age;
unsigned long usrmod0_force_logoff;
unsigned short usrmod0_password_hist_len;
unsigned short usrmod0_reserved1;
}; /* user_modals_info_0 */
struct user_modals_info_1 {
unsigned short usrmod1_role;
char far * usrmod1_primary;
}; /* user_modals_info_1 */
/*
* For User Logon Validation
*/
struct user_logon_req_1 {
char usrreq1_name[UNLEN+1];
char usrreq1_pad_1;
char usrreq1_password[SESSION_PWLEN];
char far * usrreq1_workstation;
}; /* user_logon_req_1 */
struct user_logon_info_0 {
char usrlog0_eff_name[UNLEN+1];
char usrlog0_pad_1;
}; /* user_logon_info_0 */
struct user_logon_info_1 {
unsigned short usrlog1_code;
char usrlog1_eff_name[UNLEN+1];
char usrlog1_pad_1;
unsigned short usrlog1_priv;
unsigned long usrlog1_auth_flags;
unsigned short usrlog1_num_logons;
unsigned short usrlog1_bad_pw_count;
unsigned long usrlog1_last_logon;
unsigned long usrlog1_last_logoff;
unsigned long usrlog1_logoff_time;
unsigned long usrlog1_kickoff_time;
long usrlog1_password_age;
unsigned long usrlog1_pw_can_change;
unsigned long usrlog1_pw_must_change;
char far * usrlog1_computer;
char far * usrlog1_domain;
char far * usrlog1_script_path;
unsigned long usrlog1_reserved1;
}; /* user_logon_info_1 */
struct user_logon_info_2 {
char usrlog2_eff_name[UNLEN+1];
char usrlog2_pad_1;
char far * usrlog2_computer;
char far * usrlog2_full_name;
char far * usrlog2_usrcomment;
unsigned long usrlog2_logon_time;
}; /* user_logon_info_2 */
struct user_logoff_req_1 {
char usrlfreq1_name[UNLEN+1];
char usrlfreq1_pad_1;
char usrlfreq1_workstation[CNLEN+1];
}; /* user_logoff_req_1 */
struct user_logoff_info_1 {
unsigned short usrlogf1_code;
unsigned long usrlogf1_duration;
unsigned short usrlogf1_num_logons;
}; /* user_logoff_info_1 */
/****************************************************************
* *
* Special values and constants - USER *
* *
****************************************************************/
/*
* Bit masks for field usriX_flags of user_info_X (X = 0/1).
*/
#define UF_SCRIPT 0x1
#define UF_ACCOUNTDISABLE 0x2
#define UF_DELETE_PROHIBITED 0x4
#define UF_HOMEDIR_REQUIRED 0x8
#define UF_LOCKOUT 0x10
#define UF_PASSWD_NOTREQD 0x20
#define UF_PASSWD_CANT_CHANGE 0x40
/*
* Bit masks for field usri2_auth_flags of user_info_2.
*/
#define AF_OP_PRINT 0x1
#define AF_OP_COMM 0x2
#define AF_OP_SERVER 0x4
#define AF_OP_ACCOUNTS 0x8
/*
* UAS role manifests under NETLOGON
*/
#define UAS_ROLE_STANDALONE 0
#define UAS_ROLE_MEMBER 1
#define UAS_ROLE_BACKUP 2
#define UAS_ROLE_PRIMARY 3
/*
* Values for parmnum for NetUserSetInfo.
*/
/* LM1.0 style */
#define U1_ALL 0
#define U1_NAME 1
#define U1_PAD 2
#define U1_PASSWD 3
#define U1_PASSWDAGE 4
#define U1_PRIV 5
#define U1_DIR 6
#define U1_COMMENT 7
#define U1_USER_FLAGS 8
#define U1_SCRIPT_PATH 9
/* LM2.0 style */
#ifndef PARMNUM_ALL
#define PARMNUM_ALL 0
#endif
#define PARMNUM_NAME 1
#define PARMNUM_PAD 2
#define PARMNUM_PASSWD 3
#define PARMNUM_PASSWDAGE 4
#define PARMNUM_PRIV 5
#define PARMNUM_DIR 6
#define PARMNUM_COMMENT 7
#define PARMNUM_USER_FLAGS 8
#define PARMNUM_SCRIPT_PATH 9
#define PARMNUM_AUTH_FLAGS 10
#define PARMNUM_FULL_NAME 11
#define PARMNUM_USR_COMMENT 12
#define PARMNUM_PARMS 13
#define PARMNUM_WORKSTATIONS 14
#define PARMNUM_LAST_LOGON 15
#define PARMNUM_LAST_LOGOFF 16
#define PARMNUM_ACCT_EXPIRES 17
#define PARMNUM_MAX_STORAGE 18
#define PARMNUM_UNITS_PER_WEEK 19
#define PARMNUM_LOGON_HOURS 20
#define PARMNUM_BADPW_COUNT 21
#define PARMNUM_NUM_LOGONS 22
#define PARMNUM_LOGON_SERVER 23
#define PARMNUM_COUNTRY_CODE 24
#define PARMNUM_CODE_PAGE 25
/*
* For SetInfo call (parmnum 0) when password change not required
*/
#define NULL_USERSETINFO_PASSWD " "
#define TIMEQ_FOREVER ((unsigned long) -1L)
#define USER_MAXSTORAGE_UNLIMITED ((unsigned long) -1L)
#define USER_NO_LOGOFF ((unsigned long) -1L)
#define UNITS_PER_DAY 24
#define UNITS_PER_WEEK UNITS_PER_DAY * 7
/*
* Privilege levels (user_info_X field usriX_priv (X = 0/1)).
*/
#define USER_PRIV_MASK 0x3
#define USER_PRIV_GUEST 0
#define USER_PRIV_USER 1
#define USER_PRIV_ADMIN 2
/*
* user modals related defaults
*/
#define MAX_PASSWD_LEN PWLEN
#define DEF_MIN_PWLEN 6
#define DEF_PWUNIQUENESS 5
#define DEF_MAX_PWHIST 8
#define DEF_MAX_PWAGE TIMEQ_FOREVER /* forever */
#define DEF_MIN_PWAGE (unsigned long) 0L /* 0 days */
#define DEF_FORCE_LOGOFF (unsigned long) 0xffffffff /* never */
#define DEF_MAX_BADPW 0 /* no limit*/
#define ONE_DAY (unsigned long) 01*24*3600 /* 01 day */
/*
* User Logon Validation (codes returned)
*/
#define VALIDATED_LOGON 0
#define PASSWORD_EXPIRED 2
#define NON_VALIDATED_LOGON 3
#define VALID_LOGOFF 1
/*
* parmnum manifests for user modals
*/
#define MODAL0_PARMNUM_ALL 0
#define MODAL0_PARMNUM_MIN_LEN 1
#define MODAL0_PARMNUM_MAX_AGE 2
#define MODAL0_PARMNUM_MIN_AGE 3
#define MODAL0_PARMNUM_FORCEOFF 4
#define MODAL0_PARMNUM_HISTLEN 5
#define MODAL0_PARMNUM_RESERVED1 6
#define MODAL1_PARMNUM_ALL 0
#define MODAL1_PARMNUM_ROLE 1
#define MODAL1_PARMNUM_PRIMARY 2
#endif /* NETUSER_INCLUDED */
/****************************************************************
* *
* Group Class *
* *
****************************************************************/
#if (defined( INCL_NETGROUP ) || !defined( LAN_INCLUDED )) \
&& !defined( NETGROUP_INCLUDED )
#define NETGROUP_INCLUDED
/****************************************************************
* *
* Function prototypes - GROUP *
* *
****************************************************************/
extern API_FUNCTION
NetGroupAdd ( const char far * pszServer,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer );
extern API_FUNCTION
NetGroupDel ( const char far * pszServer,
char far * pszGroupName );
extern API_FUNCTION
NetGroupEnum ( const char far * pszServer,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short far * pcEntriesRead,
unsigned short far * pcTotalAvail );
extern API_FUNCTION
NetGroupAddUser ( const char far * pszServer,
char far * pszGroupName,
char far * pszUserName );
extern API_FUNCTION
NetGroupDelUser ( const char far * pszServer,
char far * pszGroupName,
char far * pszUserName );
extern API_FUNCTION
NetGroupGetUsers ( const char far * pszServer,
const char far * pszGroupName,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short far * pcEntriesRead,
unsigned short far * pcTotalAvail );
extern API_FUNCTION
NetGroupSetUsers ( const char far * pszServer,
const char far * pszGroupName,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short cEntries );
extern API_FUNCTION
NetGroupGetInfo ( const char far * pszServer,
char far * pszGroupName,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short far * pcbTotalAvail );
extern API_FUNCTION
NetGroupSetInfo ( const char far * pszServer,
char far * pszGroupName,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
short sParmNum );
/****************************************************************
* *
* Data structure templates - GROUP *
* *
****************************************************************/
struct group_info_0 {
char grpi0_name[GNLEN+1];
}; /* group_info_0 */
struct group_info_1 {
char grpi1_name[GNLEN+1];
char grpi1_pad;
char far * grpi1_comment;
}; /* group_info_1 */
struct group_users_info_0 {
char grui0_name[UNLEN+1];
}; /* group_users_info_0 */
/****************************************************************
* *
* Special values and constants - GROUP *
* *
****************************************************************/
#define GROUPIDMASK 0x8000 /* MSB set if uid refers to a group */
/*
* Predefined group for all normal users, administrators and guests
* LOCAL is a special group for pinball local security.
*/
#define GROUP_SPECIALGRP_USERS "USERS"
#define GROUP_SPECIALGRP_ADMINS "ADMINS"
#define GROUP_SPECIALGRP_GUESTS "GUESTS"
#define GROUP_SPECIALGRP_LOCAL "LOCAL"
/*
* parmnum manifests for SetInfo calls (only comment is settable)
*/
#define GRP1_PARMNUM_ALL 0
#define GRP1_PARMNUM_NAME 1
#define GRP1_PARMNUM_COMMENT 2
#endif /* NETGROUP_INCLUDED */
/****************************************************************
* *
* Access Class *
* *
****************************************************************/
#if (defined( INCL_NETACCESS ) || !defined( LAN_INCLUDED )) \
&& !defined( NETACCESS_INCLUDED )
#define NETACCESS_INCLUDED
/****************************************************************
* *
* Function prototypes - ACCESS *
* *
****************************************************************/
extern API_FUNCTION
NetAccessAdd ( const char far * pszServer,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer );
extern API_FUNCTION
NetAccessCheck ( char far * pszReserved,
char far * pszUserName,
char far * pszResource,
unsigned short usOperation,
unsigned short far * pusResult );
extern API_FUNCTION
NetAccessDel ( const char far * pszServer,
char far * pszResource );
extern API_FUNCTION
NetAccessEnum ( const char far * pszServer,
char far * pszBasePath,
short fsRecursive,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short far * pcEntriesRead,
unsigned short far * pcTotalAvail );
extern API_FUNCTION
NetAccessGetInfo ( const char far * pszServer,
char far * pszResource,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short far * pcbTotalAvail );
extern API_FUNCTION
NetAccessSetInfo ( const char far * pszServer,
char far * pszResource,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
short sParmNum );
extern API_FUNCTION
NetAccessGetUserPerms ( char far * pszServer,
char far * pszUgName,
char far * pszResource,
unsigned short far * pusPerms );
/****************************************************************
* *
* Data structure templates - ACCESS *
* *
****************************************************************/
struct access_list {
char acl_ugname[UNLEN+1];
char acl_ugname_pad_1;
short acl_access;
}; /* access_list */
struct access_info_0 {
char far * acc0_resource_name;
}; /* access_info_0 */
struct access_info_1 {
char far * acc1_resource_name;
short acc1_attr; /* See values below */
short acc1_count;
}; /* access_info_1 */
/****************************************************************
* *
* Special values and constants - ACCESS *
* *
****************************************************************/
/*
* Maximum number of permission entries for each resource.
*/
#define MAXPERMENTRIES 64
/*
* Bit values for the access permissions. ACCESS_ALL is a handy
* way to specify maximum permissions. These are used in
* acl_access field of access_list structures.
*/
#define ACCESS_NONE 0
#define ACCESS_ALL (ACCESS_READ|ACCESS_WRITE|ACCESS_CREATE|ACCESS_EXEC|ACCESS_DELETE|ACCESS_ATRIB|ACCESS_PERM)
#define ACCESS_READ 0x1
#define ACCESS_WRITE 0x2
#define ACCESS_CREATE 0x4
#define ACCESS_EXEC 0x8
#define ACCESS_DELETE 0x10
#define ACCESS_ATRIB 0x20
#define ACCESS_PERM 0x40
#define ACCESS_GROUP 0x8000
/*
* Bit values for the acc1_attr field of the access_info_1 structure.
* Only one bit is currently defined.
*/
#define ACCESS_AUDIT 0x1
/*
* Parmnum value for NetAccessSetInfo.
*/
#define ACCESS_ATTR_PARMNUM 2
/*
* ACCESS_LETTERS defines a letter for each bit position in
* the acl_access field of struct access_list. Note that some
* bits have a corresponding letter of ' ' (space).
*/
#define ACCESS_LETTERS "RWCXDAP "
#endif /* NETACCESS_INCLUDED */
/****************************************************************
* *
* Domain Class *
* *
****************************************************************/
#if (defined( INCL_NETDOMAIN ) || !defined( LAN_INCLUDED )) \
&& !defined( NETDOMAIN_INCLUDED )
#define NETDOMAIN_INCLUDED
/****************************************************************
* *
* Function prototypes - DOMAIN *
* *
****************************************************************/
extern API_FUNCTION
NetGetDCName ( const char far * pszServer,
const char far * pszDomain,
char far * pbBuffer,
unsigned short cbBuffer );
extern API_FUNCTION
NetLogonEnum ( const char far * pszServer,
short sLevel,
char far * pbBuffer,
unsigned short cbBuffer,
unsigned short far * pcEntriesRead,
unsigned short far * pcTotalAvail );
/****************************************************************
* *
* Special values and constants - DOMAIN *
* *
****************************************************************/
#define LOGON_INFO_UNKNOWN -1
#endif /* NETDOMAIN_INCLUDED */
/****************************************************************
* *
* Accounts Class *
* *
****************************************************************/
#if (defined( INCL_NETACCOUNTS ) || !defined( LAN_INCLUDED )) \
&& !defined( NETACCOUNTS_INCLUDED )
#define NETACCOUNTS_INCLUDED
/****************************************************************
* *
* Function prototypes - ACCOUNTS *
* *
****************************************************************/
extern API_FUNCTION
NetAccountsReplicate( char far * pszServer,
unsigned long ulReserved );
#endif /* NETACCOUNTS_INCLUDED */