1*5e7646d2SAndroid Build Coastguard Worker /* 2*5e7646d2SAndroid Build Coastguard Worker * Authorization definitions for the CUPS scheduler. 3*5e7646d2SAndroid Build Coastguard Worker * 4*5e7646d2SAndroid Build Coastguard Worker * Copyright 2007-2014 by Apple Inc. 5*5e7646d2SAndroid Build Coastguard Worker * Copyright 1997-2006 by Easy Software Products, all rights reserved. 6*5e7646d2SAndroid Build Coastguard Worker * 7*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more information. 8*5e7646d2SAndroid Build Coastguard Worker */ 9*5e7646d2SAndroid Build Coastguard Worker 10*5e7646d2SAndroid Build Coastguard Worker /* 11*5e7646d2SAndroid Build Coastguard Worker * Include necessary headers... 12*5e7646d2SAndroid Build Coastguard Worker */ 13*5e7646d2SAndroid Build Coastguard Worker 14*5e7646d2SAndroid Build Coastguard Worker #include <pwd.h> 15*5e7646d2SAndroid Build Coastguard Worker 16*5e7646d2SAndroid Build Coastguard Worker 17*5e7646d2SAndroid Build Coastguard Worker /* 18*5e7646d2SAndroid Build Coastguard Worker * HTTP authorization types and levels... 19*5e7646d2SAndroid Build Coastguard Worker */ 20*5e7646d2SAndroid Build Coastguard Worker 21*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_DEFAULT -1 /* Use DefaultAuthType */ 22*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_NONE 0 /* No authentication */ 23*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_BASIC 1 /* Basic authentication */ 24*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_NEGOTIATE 2 /* Kerberos authentication */ 25*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_AUTO 3 /* Kerberos or Basic, depending on configuration of server */ 26*5e7646d2SAndroid Build Coastguard Worker 27*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_ANON 0 /* Anonymous access */ 28*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_USER 1 /* Must have a valid username/password */ 29*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_GROUP 2 /* Must also be in a named group */ 30*5e7646d2SAndroid Build Coastguard Worker 31*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_ALLOW 0 /* Allow access */ 32*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_DENY 1 /* Deny access */ 33*5e7646d2SAndroid Build Coastguard Worker 34*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_NAME 0 /* Authorize host by name */ 35*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_IP 1 /* Authorize host by IP */ 36*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_INTERFACE 2 /* Authorize host by interface */ 37*5e7646d2SAndroid Build Coastguard Worker 38*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_SATISFY_ALL 0 /* Satisfy both address and auth */ 39*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_SATISFY_ANY 1 /* Satisfy either address or auth */ 40*5e7646d2SAndroid Build Coastguard Worker 41*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_LIMIT_DELETE 1 /* Limit DELETE requests */ 42*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_LIMIT_GET 2 /* Limit GET requests */ 43*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_LIMIT_HEAD 4 /* Limit HEAD requests */ 44*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_LIMIT_OPTIONS 8 /* Limit OPTIONS requests */ 45*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_LIMIT_POST 16 /* Limit POST requests */ 46*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_LIMIT_PUT 32 /* Limit PUT requests */ 47*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_LIMIT_TRACE 64 /* Limit TRACE requests */ 48*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_LIMIT_ALL 127 /* Limit all requests */ 49*5e7646d2SAndroid Build Coastguard Worker #define CUPSD_AUTH_LIMIT_IPP 128 /* Limit IPP requests */ 50*5e7646d2SAndroid Build Coastguard Worker 51*5e7646d2SAndroid Build Coastguard Worker #define IPP_ANY_OPERATION (ipp_op_t)0 52*5e7646d2SAndroid Build Coastguard Worker /* Any IPP operation */ 53*5e7646d2SAndroid Build Coastguard Worker #define IPP_BAD_OPERATION (ipp_op_t)-1 54*5e7646d2SAndroid Build Coastguard Worker /* No IPP operation */ 55*5e7646d2SAndroid Build Coastguard Worker 56*5e7646d2SAndroid Build Coastguard Worker 57*5e7646d2SAndroid Build Coastguard Worker /* 58*5e7646d2SAndroid Build Coastguard Worker * HTTP access control structures... 59*5e7646d2SAndroid Build Coastguard Worker */ 60*5e7646d2SAndroid Build Coastguard Worker 61*5e7646d2SAndroid Build Coastguard Worker typedef struct 62*5e7646d2SAndroid Build Coastguard Worker { 63*5e7646d2SAndroid Build Coastguard Worker unsigned address[4], /* IP address */ 64*5e7646d2SAndroid Build Coastguard Worker netmask[4]; /* IP netmask */ 65*5e7646d2SAndroid Build Coastguard Worker } cupsd_ipmask_t; 66*5e7646d2SAndroid Build Coastguard Worker 67*5e7646d2SAndroid Build Coastguard Worker typedef struct 68*5e7646d2SAndroid Build Coastguard Worker { 69*5e7646d2SAndroid Build Coastguard Worker size_t length; /* Length of name */ 70*5e7646d2SAndroid Build Coastguard Worker char *name; /* Name string */ 71*5e7646d2SAndroid Build Coastguard Worker } cupsd_namemask_t; 72*5e7646d2SAndroid Build Coastguard Worker 73*5e7646d2SAndroid Build Coastguard Worker typedef struct 74*5e7646d2SAndroid Build Coastguard Worker { 75*5e7646d2SAndroid Build Coastguard Worker int type; /* Mask type */ 76*5e7646d2SAndroid Build Coastguard Worker union 77*5e7646d2SAndroid Build Coastguard Worker { 78*5e7646d2SAndroid Build Coastguard Worker cupsd_namemask_t name; /* Host/Domain name */ 79*5e7646d2SAndroid Build Coastguard Worker cupsd_ipmask_t ip; /* IP address/network */ 80*5e7646d2SAndroid Build Coastguard Worker } mask; /* Mask data */ 81*5e7646d2SAndroid Build Coastguard Worker } cupsd_authmask_t; 82*5e7646d2SAndroid Build Coastguard Worker 83*5e7646d2SAndroid Build Coastguard Worker typedef struct 84*5e7646d2SAndroid Build Coastguard Worker { 85*5e7646d2SAndroid Build Coastguard Worker char *location; /* Location of resource */ 86*5e7646d2SAndroid Build Coastguard Worker size_t length; /* Length of location string */ 87*5e7646d2SAndroid Build Coastguard Worker ipp_op_t op; /* IPP operation */ 88*5e7646d2SAndroid Build Coastguard Worker int limit, /* Limit for these types of requests */ 89*5e7646d2SAndroid Build Coastguard Worker order_type, /* Allow or Deny */ 90*5e7646d2SAndroid Build Coastguard Worker type, /* Type of authentication */ 91*5e7646d2SAndroid Build Coastguard Worker level, /* Access level required */ 92*5e7646d2SAndroid Build Coastguard Worker satisfy; /* Satisfy any or all limits? */ 93*5e7646d2SAndroid Build Coastguard Worker cups_array_t *names, /* User or group names */ 94*5e7646d2SAndroid Build Coastguard Worker *allow, /* Allow lines */ 95*5e7646d2SAndroid Build Coastguard Worker *deny; /* Deny lines */ 96*5e7646d2SAndroid Build Coastguard Worker http_encryption_t encryption; /* To encrypt or not to encrypt... */ 97*5e7646d2SAndroid Build Coastguard Worker } cupsd_location_t; 98*5e7646d2SAndroid Build Coastguard Worker 99*5e7646d2SAndroid Build Coastguard Worker typedef struct cupsd_client_s cupsd_client_t; 100*5e7646d2SAndroid Build Coastguard Worker 101*5e7646d2SAndroid Build Coastguard Worker 102*5e7646d2SAndroid Build Coastguard Worker /* 103*5e7646d2SAndroid Build Coastguard Worker * Globals... 104*5e7646d2SAndroid Build Coastguard Worker */ 105*5e7646d2SAndroid Build Coastguard Worker 106*5e7646d2SAndroid Build Coastguard Worker VAR cups_array_t *Locations VALUE(NULL); 107*5e7646d2SAndroid Build Coastguard Worker /* Authorization locations */ 108*5e7646d2SAndroid Build Coastguard Worker #ifdef HAVE_SSL 109*5e7646d2SAndroid Build Coastguard Worker VAR http_encryption_t DefaultEncryption VALUE(HTTP_ENCRYPT_REQUIRED); 110*5e7646d2SAndroid Build Coastguard Worker /* Default encryption for authentication */ 111*5e7646d2SAndroid Build Coastguard Worker #endif /* HAVE_SSL */ 112*5e7646d2SAndroid Build Coastguard Worker 113*5e7646d2SAndroid Build Coastguard Worker 114*5e7646d2SAndroid Build Coastguard Worker /* 115*5e7646d2SAndroid Build Coastguard Worker * Prototypes... 116*5e7646d2SAndroid Build Coastguard Worker */ 117*5e7646d2SAndroid Build Coastguard Worker 118*5e7646d2SAndroid Build Coastguard Worker extern int cupsdAddIPMask(cups_array_t **masks, 119*5e7646d2SAndroid Build Coastguard Worker const unsigned address[4], 120*5e7646d2SAndroid Build Coastguard Worker const unsigned netmask[4]); 121*5e7646d2SAndroid Build Coastguard Worker extern void cupsdAddLocation(cupsd_location_t *loc); 122*5e7646d2SAndroid Build Coastguard Worker extern void cupsdAddName(cupsd_location_t *loc, char *name); 123*5e7646d2SAndroid Build Coastguard Worker extern int cupsdAddNameMask(cups_array_t **masks, char *name); 124*5e7646d2SAndroid Build Coastguard Worker extern void cupsdAuthorize(cupsd_client_t *con); 125*5e7646d2SAndroid Build Coastguard Worker extern int cupsdCheckAccess(unsigned ip[4], const char *name, size_t namelen, cupsd_location_t *loc); 126*5e7646d2SAndroid Build Coastguard Worker extern int cupsdCheckAuth(unsigned ip[4], const char *name, size_t namelen, cups_array_t *masks); 127*5e7646d2SAndroid Build Coastguard Worker extern int cupsdCheckGroup(const char *username, 128*5e7646d2SAndroid Build Coastguard Worker struct passwd *user, 129*5e7646d2SAndroid Build Coastguard Worker const char *groupname); 130*5e7646d2SAndroid Build Coastguard Worker extern cupsd_location_t *cupsdCopyLocation(cupsd_location_t *loc); 131*5e7646d2SAndroid Build Coastguard Worker extern void cupsdDeleteAllLocations(void); 132*5e7646d2SAndroid Build Coastguard Worker extern cupsd_location_t *cupsdFindBest(const char *path, http_state_t state); 133*5e7646d2SAndroid Build Coastguard Worker extern cupsd_location_t *cupsdFindLocation(const char *location); 134*5e7646d2SAndroid Build Coastguard Worker extern void cupsdFreeLocation(cupsd_location_t *loc); 135*5e7646d2SAndroid Build Coastguard Worker extern http_status_t cupsdIsAuthorized(cupsd_client_t *con, const char *owner); 136*5e7646d2SAndroid Build Coastguard Worker extern cupsd_location_t *cupsdNewLocation(const char *location); 137