]> git.ipfire.org Git - thirdparty/cups.git/blame - scheduler/auth.h
Merge changes from CUPS 1.3.1.
[thirdparty/cups.git] / scheduler / auth.h
CommitLineData
ef416fc2 1/*
db1f069b 2 * "$Id: auth.h 6780 2007-08-08 20:50:42Z mike $"
ef416fc2 3 *
4 * Authorization definitions for the Common UNIX Printing System (CUPS)
5 * scheduler.
6 *
bc44d920 7 * Copyright 2007 by Apple Inc.
bd7854cb 8 * Copyright 1997-2006 by Easy Software Products, all rights reserved.
ef416fc2 9 *
10 * These coded instructions, statements, and computer programs are the
bc44d920 11 * property of Apple Inc. and are protected by Federal copyright
12 * law. Distribution and use rights are outlined in the file "LICENSE.txt"
13 * which should have been included with this file. If this file is
14 * file is missing or damaged, see the license at "http://www.cups.org/".
ef416fc2 15 */
16
17/*
18 * Include necessary headers...
19 */
20
21#include <pwd.h>
22
23
24/*
25 * HTTP authorization types and levels...
26 */
27
7ff4fea9 28#define AUTH_DEFAULT -1 /* Use DefaultAuthType */
ef416fc2 29#define AUTH_NONE 0 /* No authentication */
30#define AUTH_BASIC 1 /* Basic authentication */
31#define AUTH_DIGEST 2 /* Digest authentication */
32#define AUTH_BASICDIGEST 3 /* Basic authentication w/passwd.md5 */
7594b224 33#define AUTH_NEGOTIATE 4 /* Kerberos authentication */
ef416fc2 34
35#define AUTH_ANON 0 /* Anonymous access */
36#define AUTH_USER 1 /* Must have a valid username/password */
37#define AUTH_GROUP 2 /* Must also be in a named group */
38
39#define AUTH_ALLOW 0 /* Allow access */
40#define AUTH_DENY 1 /* Deny access */
41
42#define AUTH_NAME 0 /* Authorize host by name */
43#define AUTH_IP 1 /* Authorize host by IP */
44#define AUTH_INTERFACE 2 /* Authorize host by interface */
45
46#define AUTH_SATISFY_ALL 0 /* Satisfy both address and auth */
47#define AUTH_SATISFY_ANY 1 /* Satisfy either address or auth */
48
49#define AUTH_LIMIT_DELETE 1 /* Limit DELETE requests */
50#define AUTH_LIMIT_GET 2 /* Limit GET requests */
51#define AUTH_LIMIT_HEAD 4 /* Limit HEAD requests */
52#define AUTH_LIMIT_OPTIONS 8 /* Limit OPTIONS requests */
53#define AUTH_LIMIT_POST 16 /* Limit POST requests */
54#define AUTH_LIMIT_PUT 32 /* Limit PUT requests */
55#define AUTH_LIMIT_TRACE 64 /* Limit TRACE requests */
56#define AUTH_LIMIT_ALL 127 /* Limit all requests */
57#define AUTH_LIMIT_IPP 128 /* Limit IPP requests */
58
59#define IPP_ANY_OPERATION (ipp_op_t)0
60 /* Any IPP operation */
61#define IPP_BAD_OPERATION (ipp_op_t)-1
62 /* No IPP operation */
63
64
65/*
66 * HTTP access control structures...
67 */
68
69typedef struct
70{
71 unsigned address[4], /* IP address */
72 netmask[4]; /* IP netmask */
73} cupsd_ipmask_t;
74
75typedef struct
76{
77 int length; /* Length of name */
78 char *name; /* Name string */
79} cupsd_namemask_t;
80
81typedef struct
82{
83 int type; /* Mask type */
84 union
85 {
86 cupsd_namemask_t name; /* Host/Domain name */
87 cupsd_ipmask_t ip; /* IP address/network */
88 } mask; /* Mask data */
89} cupsd_authmask_t;
90
91typedef struct
92{
bd7854cb 93 char *location; /* Location of resource */
ef416fc2 94 ipp_op_t op; /* IPP operation */
95 int limit, /* Limit for these types of requests */
96 length, /* Length of location string */
97 order_type, /* Allow or Deny */
98 type, /* Type of authentication */
99 level, /* Access level required */
100 satisfy; /* Satisfy any or all limits? */
101 int num_names; /* Number of names */
102 char **names; /* User or group names */
103 int num_allow; /* Number of Allow lines */
104 cupsd_authmask_t *allow; /* Allow lines */
105 int num_deny; /* Number of Deny lines */
106 cupsd_authmask_t *deny; /* Deny lines */
107 http_encryption_t encryption; /* To encrypt or not to encrypt... */
108} cupsd_location_t;
109
110typedef struct cupsd_client_s cupsd_client_t;
111
112
113/*
114 * Globals...
115 */
116
bd7854cb 117VAR cups_array_t *Locations VALUE(NULL);
ef416fc2 118 /* Authorization locations */
119VAR int DefaultAuthType VALUE(AUTH_BASIC);
120 /* Default AuthType, if not specified */
4744bd90 121#ifdef HAVE_SSL
122VAR http_encryption_t DefaultEncryption VALUE(HTTP_ENCRYPT_REQUIRED);
123 /* Default encryption for authentication */
124#endif /* HAVE_SSL */
ef416fc2 125
126
127/*
128 * Prototypes...
129 */
130
131extern cupsd_location_t *cupsdAddLocation(const char *location);
132extern void cupsdAddName(cupsd_location_t *loc, char *name);
133extern void cupsdAllowHost(cupsd_location_t *loc, char *name);
134extern void cupsdAllowIP(cupsd_location_t *loc, unsigned address[4],
135 unsigned netmask[4]);
136extern void cupsdAuthorize(cupsd_client_t *con);
137extern int cupsdCheckAuth(unsigned ip[4], char *name, int namelen,
138 int num_masks, cupsd_authmask_t *masks);
139extern int cupsdCheckGroup(const char *username,
140 struct passwd *user,
141 const char *groupname);
142extern cupsd_location_t *cupsdCopyLocation(cupsd_location_t **loc);
143extern void cupsdDeleteAllLocations(void);
144extern void cupsdDeleteLocation(cupsd_location_t *loc);
145extern void cupsdDenyHost(cupsd_location_t *loc, char *name);
146extern void cupsdDenyIP(cupsd_location_t *loc, unsigned address[4],
147 unsigned netmask[4]);
148extern cupsd_location_t *cupsdFindBest(const char *path, http_state_t state);
149extern cupsd_location_t *cupsdFindLocation(const char *location);
ef416fc2 150extern http_status_t cupsdIsAuthorized(cupsd_client_t *con, const char *owner);
151
152
153/*
db1f069b 154 * End of "$Id: auth.h 6780 2007-08-08 20:50:42Z mike $".
ef416fc2 155 */