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
133
134
135
136
137
138
139
140
141
142
|
/*
* "$Id: client.h 6383 2007-03-21 20:01:20Z mike $"
*
* Client definitions for the Common UNIX Printing System (CUPS) scheduler.
*
* Copyright 1997-2006 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
* file is missing or damaged please contact Easy Software Products
* at:
*
* Attn: CUPS Licensing Information
* Easy Software Products
* 44141 Airport View Drive, Suite 204
* Hollywood, Maryland 20636 USA
*
* Voice: (301) 373-9600
* EMail: cups-info@cups.org
* WWW: http://www.cups.org
*/
#ifdef HAVE_AUTHORIZATION_H
# include <Security/Authorization.h>
#endif /* HAVE_AUTHORIZATION_H */
/*
* HTTP client structure...
*/
struct cupsd_client_s
{
http_t http; /* HTTP client connection */
ipp_t *request, /* IPP request information */
*response; /* IPP response information */
cupsd_location_t *best; /* Best match for AAA */
time_t start; /* Request start time */
http_state_t operation; /* Request operation */
off_t bytes; /* Bytes transferred for this request */
char username[33], /* Username from Authorization: line */
password[33], /* Password from Authorization: line */
uri[HTTP_MAX_URI],
/* Localized URL/URI for GET/PUT */
*filename, /* Filename of output file */
*command, /* Command to run */
*options, /* Options for command */
*query_string; /* QUERY_STRING environment variable */
int file; /* Input/output file */
int file_ready; /* Input ready on file/pipe? */
int pipe_pid; /* Pipe process ID (or 0 if not a pipe) */
int sent_header, /* Non-zero if sent HTTP header */
got_fields, /* Non-zero if all fields seen */
field_col; /* Column within line */
cups_lang_t *language; /* Language to use */
#ifdef HAVE_SSL
int auto_ssl; /* Automatic test for SSL/TLS */
#endif /* HAVE_SSL */
http_addr_t clientaddr; /* Client address */
char servername[256];/* Server name for connection */
int serverport; /* Server port for connection */
#ifdef HAVE_GSSAPI
int no_negotiate; /* Don't offer WWW-Authenticate: Negotiate */
gss_buffer_desc gss_output_token;
/* Output token for Negotiate header */
gss_cred_id_t gss_delegated_cred;
/* Credentials from client header */
#endif /* HAVE_GSSAPI */
#ifdef HAVE_AUTHORIZATION_H
AuthorizationRef authref; /* Authorization ref */
#endif /* HAVE_AUTHORIZATION_H */
};
#define HTTP(con) &((con)->http)
/*
* HTTP listener structure...
*/
typedef struct
{
int fd; /* File descriptor for this server */
http_addr_t address; /* Bind address of socket */
http_encryption_t encryption; /* To encrypt or not to encrypt... */
} cupsd_listener_t;
/*
* Globals...
*/
VAR int ListenBackLog VALUE(SOMAXCONN),
/* Max backlog of pending connections */
LocalPort VALUE(631);
/* Local port to use */
VAR http_encryption_t LocalEncryption VALUE(HTTP_ENCRYPT_IF_REQUESTED);
/* Local port encryption to use */
VAR cups_array_t *Listeners VALUE(NULL);
/* Listening sockets */
VAR cups_array_t *Clients VALUE(NULL);
/* HTTP clients */
VAR http_addrlist_t *ServerAddrs VALUE(NULL);
/* Server address(es) */
VAR char *ServerHeader VALUE(NULL);
/* Server header in requests */
VAR int CGIPipes[2] VALUE2(-1,-1);
/* Pipes for CGI error/debug output */
VAR cupsd_statbuf_t *CGIStatusBuffer VALUE(NULL);
/* Status buffer for pipes */
/*
* Prototypes...
*/
extern void cupsdAcceptClient(cupsd_listener_t *lis);
extern void cupsdCloseAllClients(void);
extern int cupsdCloseClient(cupsd_client_t *con);
extern void cupsdDeleteAllListeners(void);
extern int cupsdFlushHeader(cupsd_client_t *con);
extern void cupsdPauseListening(void);
extern int cupsdProcessIPPRequest(cupsd_client_t *con);
extern void cupsdReadClient(cupsd_client_t *con);
extern void cupsdResumeListening(void);
extern int cupsdSendCommand(cupsd_client_t *con, char *command,
char *options, int root);
extern int cupsdSendError(cupsd_client_t *con, http_status_t code,
int auth_type);
extern int cupsdSendHeader(cupsd_client_t *con, http_status_t code,
char *type, int auth_type);
extern void cupsdShutdownClient(cupsd_client_t *con);
extern void cupsdStartListening(void);
extern void cupsdStopListening(void);
extern void cupsdUpdateCGI(void);
extern void cupsdWriteClient(cupsd_client_t *con);
/*
* End of "$Id: client.h 6383 2007-03-21 20:01:20Z mike $".
*/
|