summaryrefslogtreecommitdiff
path: root/source3/include/ads.h
blob: 78d2fcf4b52dbcdeca5220321feb01e3e14a84f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
  header for ads (active directory) library routines

  basically this is a wrapper around ldap
*/

typedef struct {
	void *ld;
	char *realm;
	char *workgroup;
	char *ldap_server;
	char *ldap_server_name;
	char *kdc_server;
	int ldap_port;
	char *bind_path;
	time_t last_attempt;
	char *password;
	char *user_name;
	char *server_realm;
	struct in_addr ldap_ip;
} ADS_STRUCT;

typedef struct {
	char *printerName;
	char *serverName;
	char *shortServerName;
	char *versionNumber;
	char *uNCName;
	char **description;
	char *assetNumber;
	char *bytesPerMinute;
	char *defaultPriority;
	char *driverName;
	char *driverVersion;
	char *location;
	char *operatingSystem;
	char *operatingSystemHotfix;
	char *operatingSystemServicePack;
	char *operatingSystemVersion;
	char *physicalLocationObject;
	char **portName;
	char *printAttributes;
	char **printBinNames;
	char *printCollate;
	char *printColor;
	char *printDuplexSupported;
	char *printEndTime;
	char *printFOrmName;
	char *printKeepPrintedJobs;
	char **printLanguage;
	char *printMACAddress;
	char *printMaxCopies;
	char *printMaxResolutionSupported;
	char *printMaxXExtent;
	char *printMaxYExtent;
	char **printMediaReady;
	char **printMediaSupported;
	char *printMemory;
	char *printMinXExtent;
	char *printMinYExtent;
	char *printNetworkAddress;
	char *printNotify;
	char *printNumberUp;
	char **printOrientationsSupported;
	char *printOwner;
	char *printPagesPerMinute;
	char *printRate;
	char *printRateUnit;
	char *printSeparatorFile;
	char **printShareName;
	char *printSpooling;
	char *printStaplingSupported;
	char *printStartTime;
	char *printStatus;
	char *priority;
} ADS_PRINTER_ENTRY;

/* there are 4 possible types of errors the ads subsystem can produce */
enum ads_error_type {ADS_ERROR_KRB5, ADS_ERROR_GSS, 
		     ADS_ERROR_LDAP, ADS_ERROR_SYSTEM};

typedef struct {
	enum ads_error_type error_type;
	int rc;
	/* For error_type = ADS_ERROR_GSS minor_status describe GSS API error */
	/* Where rc represents major_status of GSS API error */
	int minor_status;
} ADS_STATUS;

#ifdef HAVE_ADS
typedef LDAPMod **ADS_MODLIST;
#else
typedef void **ADS_MODLIST;
#endif

/* macros to simplify error returning */
#define ADS_ERROR(rc) ads_build_error(ADS_ERROR_LDAP, rc, 0)
#define ADS_ERROR_SYSTEM(rc) ads_build_error(ADS_ERROR_SYSTEM, rc, 0)
#define ADS_ERROR_KRB5(rc) ads_build_error(ADS_ERROR_KRB5, rc, 0)
#define ADS_ERROR_GSS(rc, minor) ads_build_error(ADS_ERROR_GSS, rc, minor)

#define ADS_ERR_OK(status) ((status).rc == 0)
#define ADS_SUCCESS ADS_ERROR(0)

/* time between reconnect attempts */
#define ADS_RECONNECT_TIME 5

/* timeout on searches */
#define ADS_SEARCH_TIMEOUT 10

/* ldap control oids */
#define ADS_PAGE_CTL_OID "1.2.840.113556.1.4.319"
#define ADS_NO_REFERRALS_OID "1.2.840.113556.1.4.1339"
#define ADS_SERVER_SORT_OID "1.2.840.113556.1.4.473"

#define UF_DONT_EXPIRE_PASSWD           0x10000
#define UF_MNS_LOGON_ACCOUNT            0x20000
#define UF_SMARTCARD_REQUIRED           0x40000
#define UF_TRUSTED_FOR_DELEGATION       0x80000
#define UF_NOT_DELEGATED               0x100000
#define UF_USE_DES_KEY_ONLY            0x200000
#define UF_DONT_REQUIRE_PREAUTH        0x400000

#define UF_TEMP_DUPLICATE_ACCOUNT       0x0100
#define UF_NORMAL_ACCOUNT               0x0200
#define UF_INTERDOMAIN_TRUST_ACCOUNT    0x0800
#define UF_WORKSTATION_TRUST_ACCOUNT    0x1000
#define UF_SERVER_TRUST_ACCOUNT         0x2000

/* account types */
#define ATYPE_GROUP               0x10000000
#define ATYPE_USER                0x30000000