From 91ee19d25a7389caeabaedb90768b8d244611745 Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Wed, 22 Oct 2025 18:15:32 -0400 Subject: [PATCH] Update/sync docos. --- cups/cups.h | 8 +- cups/cupspm.md | 272 ++++++++++- cups/usersys.c | 11 +- doc/help/api-admin.html | 22 +- doc/help/api-filter.html | 22 +- doc/help/api-ppd.html | 22 +- doc/help/cupspm.epub | Bin 243691 -> 247183 bytes doc/help/cupspm.html | 971 +++++++++++++++++++++++++++------------ 8 files changed, 993 insertions(+), 335 deletions(-) diff --git a/cups/cups.h b/cups/cups.h index b98d36f91e..a010367d3d 100644 --- a/cups/cups.h +++ b/cups/cups.h @@ -352,13 +352,13 @@ typedef int (^cups_dest_block_t)(unsigned flags, cups_dest_t *dest); // Destination enumeration block @deprecated@ @exclude all@ # endif /* __BLOCKS__ */ -typedef const char *(*cups_oauth_cb_t)(http_t *http, const char *realm, const char *scope, const char *resource, void *user_data); +typedef const char *(*cups_oauth_cb_t)(http_t *http, const char *realm, const char *scope, const char *resource, void *cb_data); // OAuth callback @since CUPS 2.4@ typedef const char *(*cups_password_cb_t)(const char *prompt); // Password callback @deprecated@ @exclude all@ -typedef const char *(*cups_password_cb2_t)(const char *prompt, http_t *http, const char *method, const char *resource, void *user_data); +typedef const char *(*cups_password_cb2_t)(const char *prompt, http_t *http, const char *method, const char *resource, void *cb_data); // New password callback @since CUPS 1.4@ typedef int (*cups_server_cert_cb_t)(http_t *http, void *tls, cups_array_t *certs, void *user_data); @@ -509,9 +509,9 @@ extern void cupsSetDefaultDest(const char *name, const char *instance, int num_ extern void cupsSetDests(int num_dests, cups_dest_t *dests) _CUPS_PUBLIC; extern int cupsSetDests2(http_t *http, int num_dests, cups_dest_t *dests) _CUPS_PUBLIC; extern void cupsSetEncryption(http_encryption_t e) _CUPS_PUBLIC; -extern void cupsSetOAuthCB(cups_oauth_cb_t cb, void *data) _CUPS_PUBLIC; +extern void cupsSetOAuthCB(cups_oauth_cb_t cb, void *cb_data) _CUPS_PUBLIC; extern void cupsSetPasswordCB(cups_password_cb_t cb) _CUPS_DEPRECATED_MSG("Use cupsSetPasswordCB2 instead."); -extern void cupsSetPasswordCB2(cups_password_cb2_t cb, void *user_data) _CUPS_PUBLIC; +extern void cupsSetPasswordCB2(cups_password_cb2_t cb, void *cb_data) _CUPS_PUBLIC; extern void cupsSetServer(const char *server) _CUPS_PUBLIC; extern void cupsSetServerCertCB(cups_server_cert_cb_t cb, void *user_data) _CUPS_DEPRECATED; extern int cupsSetServerCredentials(const char *path, const char *common_name, int auto_create) _CUPS_PUBLIC; diff --git a/cups/cupspm.md b/cups/cupspm.md index c713c03ec6..127bd2bf4e 100644 --- a/cups/cupspm.md +++ b/cups/cupspm.md @@ -1109,41 +1109,275 @@ ippDelete(response); ``` -## Authentication +# Authentication and Authorization -CUPS normally handles authentication through the console. GUI applications -should set a password callback using the [`cupsSetPasswordCB2`](@@) function: +CUPS supports authentication and authorization using HTTP Basic, HTTP Digest, +peer credentials when communicating over domain sockets, and OAuth/OpenID +Connect. + +Peer credential authorization happens automatically when connected over a +domain socket. Other types of authentication requires the application to +handle `HTTP_STATUS_UNAUTHORIZED` responses beyond simply calling +[`cupsDoAuthentication`](@@). + + +## Authentication Using Passwords + +When you call [`cupsDoAuthentication`](@@) and the HTTP server requires the +"Basic" or "Digest" authentication schemes, CUPS normally requests a password +from the console. GUI applications should set a password callback using the +[`cupsSetPasswordCB2`](@@) function: ```c void -cupsSetPasswordCB2(cups_password_cb2_t cb, void *user_data); +cupsSetPasswordCB2(cups_password_cb2_t cb, void *cb_data); ``` -The password callback will be called when needed and is responsible for setting -the current user name using [`cupsSetUser`](@@) and returning a string: +The password callback is called when needed and is responsible for setting +the current user name using [`cupsSetUser`](@@) and returning a (password) +string: ```c const char * -cups_password_cb2(const char *prompt, http_t *http, - const char *method, const char *resource, - void *user_data); +cups_password_cb(const char *prompt, http_t *http, + const char *method, const char *resource, + void *cb_data); ``` -The `prompt` argument is a string from CUPS that should be displayed to the +The "prompt" argument is a string from CUPS that should be displayed to the user. -The `http` argument is the connection hosting the request that is being +The "http" argument is the connection hosting the request that is being authenticated. The password callback can call the [`httpGetField`](@@) and [`httpGetSubField`](@@) functions to look for additional details concerning the authentication challenge. -The `method` argument specifies the HTTP method used for the request and is -typically "POST". +The "method" argument specifies the HTTP method used for the request and is +typically "GET", "POST", or "PUT". + +The "resource" argument specifies the path or URI used for the request. + +The "cb_data" argument provides the data pointer from the +[`cupsSetPasswordCB2`](@@) call. + + +## Authorization using OAuth/OpenID Connect + +When you call [`cupsDoAuthentication`](@@) and the HTTP server requires the +"Bearer" authentication scheme, CUPS will call an OAuth callback that you +register using the [`cupsSetOAuthCB`](@@) function: + +```c +void +cupsSetOAuthCB(cups_oauth_cb_t cb, void *cb_data); +``` + +The OAuth callback is called when needed and is responsible for performing any +necessary authorization and returning an access token string: + +```c +const char * +cups_oauth_cb(http_t *http, const char *realm, const char *scope, + const char *resource, void *cb_data); +``` + +The "http" argument is the connection hosting the request that is being +authenticated. The OAuth callback can call the [`httpGetField`](@@) and +[`httpGetSubField`](@@) functions to look for additional details concerning the +authentication challenge. + +The "realm" and "scope" arguments provide the "realm" and "scope" parameters, if +any, from the "WWW-Authenticate" header. + +The "resource" argument specifies the path or URI used for the request. + +The "cb_data" argument provides the data pointer from the +[`cupsSetOAuthCB`](@@) call. + + +### OAuth Client Functions + +CUPS provides a generic OAuth/OpenID client for authorizing access to printers +and other network resources. The following functions are provided: + +- [`cupsOAuthClearTokens`](@@): Clear all cached tokens. +- [`cupsOAuthCopyAccessToken`](@@): Copy the cached access token. +- [`cupsOAuthCopyClientId`](@@): Copy the cached client ID. +- [`cupsOAuthCopyRefreshToken`](@@): Copy the cached refresh token. +- [`cupsOAuthCopyUserId`](@@): Copy the cached user ID. +- [`cupsOAuthGetAuthorizationCode`](@@): Get an authorization code using a web + browser. +- [`cupsOAuthGetClientId`](@@): Get a client ID using dynamic client + registration. +- [`cupsOAuthGetDeviceGrant`](@@): Get a device authorization grant code. +- [`cupsOAuthGetJWKS`](@@): Get the key set for an authorization server. +- [`cupsOAuthGetMetadata`](@@): Get the metadata for an authorization server. +- [`cupsOAuthGetTokens`](@@): Get access and refresh tokens for an + authorization/grant code. +- [`cupsOAuthGetUserId`](@@): Get the user ID associated with an access token. +- [`cupsOAuthMakeAuthorizationURL`](@@): Make the URL for web browser + authorization. +- [`cupsOAuthMakeBase64Random`](@@): Make a Base64-encoded string of random + bytes. +- [`cupsOAuthSaveClientData`](@@): Save a client ID and secret for an + authorization server. +- [`cupsOAuthSaveTokens`](@@): Save access and refresh tokens for an + authorization server. + +Once you have an access token you use the [`httpSetAuthString`](@@) function to +use it for a HTTP connection: + +```c +http_t *http; +char *access_token; + +httpSetAuthString(http, "Bearer", access_token); +``` + + +### Authorizing Using a Web Browser + +Users can authorize using their preferred web browser via the +[`cupsOAuthGetAuthorizationCode`](@@) function, which returns an authorization +grant code string. The following code gets the authorization server metadata, +authorizes access through the web browser, and then obtains a HTTP Bearer access +token: + +```c +http_t *http; // HTTP connection +const char *auth_uri; // Base URL for Authorization Server +cups_json_t *metadata; // Authorization Server metadata +const char *printer_uri; // Printer URI +char *auth_code; // Authorization grant code +char *access_token; // Access token +time_t access_expires; // Date/time when access token expires + +// Get the metadata for the authorization server. +metadata = cupsOAuthGetMetadata(auth_uri); + +if (metadata == NULL) +{ + // Handle error getting metadata from authorization server. +} + +// Bring up the web browser to authorize and get an authorization code. +auth_code = cupsOAuthGetAuthorizationCode(auth_uri, metadata, printer_uri, + /*scopes*/NULL, + /*redirect_uri*/NULL); + +if (auth_code == NULL) +{ + // Unable to authorize. +} + +// Get the access code from the authorization code. +access_token = cupsOAuthGetTokens(auth_uri, metadata, printer_uri, auth_code, + CUPS_OGRANT_AUTHORIZATION_CODE, + /*redirect_uri*/NULL, &access_expires); + +if (access_token == NULL) +{ + // Unable to get access token. +} + +// Set the Bearer token for authorization. +httpSetAuthString(http, "Bearer", access_token); +free(access_token); +``` + + +### Authorizing Using a Mobile Device + +Users can authorize using a mobile device via the +[`cupsOAuthGetDeviceGrant`](@@) function, which returns a JSON object with the +mobile authorization URLs, user (verification) code string, and device grant +code. The following code gets the authorization server metadata, gets the +mobile device authorization information, and then obtains a HTTP Bearer access +token: + +```c +http_t *http; // HTTP connection +const char *auth_uri; // Base URL for Authorization Server +cups_json_t *metadata; // Authorization Server metadata +const char *printer_uri; // Printer URI +cups_json_t *device_grant; // Device authorization grant object +const char *device_code; // Device grant code +const char *verify_url; // Mobile device URL +const char *verify_urlc; // Mobile device URL with user code +const char *user_code; // User code +char *access_token; // Access token +time_t access_expires; // Date/time when access token expires + +// Get the metadata for the authorization server. +metadata = cupsOAuthGetMetadata(auth_uri); + +if (metadata == NULL) +{ + // Handle error getting metadata from authorization server. +} + +// Get a device authorization grant for mobile authorization. +device_grant = cupsOAuthGetDeviceGrant(auth_uri, metadata, printer_uri, + /*scopes*/NULL); + +device_code = cupsJSONGetString( + cupsJSONFind(device_grant, CUPS_ODEVGRANT_DEVICE_CODE)); +verify_url = cupsJSONGetString( + cupsJSONFind(device_grant, CUPS_ODEVGRANT_VERIFICATION_URI)); +verify_urlc = cupsJSONGetString( + cupsJSONFind(device_grant, CUPS_ODEVGRANT_VERIFICATION_URI_COMPLETE)); +user_code = cupsJSONGetString( + cupsJSONFind(device_grant, CUPS_ODEVGRANT_USER_CODE)); + +if (device_code == NULL || verify_url == NULL || verify_urlc == NULL || + user_code == NULL) +{ + // Unable to authorize. +} + +// Show the URLs and user code to the user (links and/or QR codes). +printf("Open this URL: %s\n", verify_urlc); + +// Get the access code from the authorization code. +do +{ + // Delay check for several seconds. + sleep(5); + + // Try getting an access token. + access_token = cupsOAuthGetTokens(auth_uri, metadata, printer_uri, device_code, + CUPS_OGRANT_DEVICE_CODE, + /*redirect_uri*/NULL, &access_expires); +} +while (access_token == NULL && access_expires > 0); + // Continue checking until we have an access token or + // the device code has expired. + +if (access_token == NULL) +{ + // Unable to get access token. +} + +// Set the Bearer token for authorization. +httpSetAuthString(http, "Bearer", access_token); +free(access_token); +``` + + +### Supported OAuth Standards -The `resource` argument specifies the path used for the request. +The following standards are supported: -The `user_data` argument provides the user data pointer from the -`cupsSetPasswordCB2` call. +- [OpenID Connect Core v1.0](https://openid.net/specs/openid-connect-core-1_0.html) +- [RFC 6749: The OAuth 2.0 Authorization Framework](https://datatracker.ietf.org/doc/html/rfc6749) +- [RFC 6750: The OAuth 2.0 Authorization Framework: Bearer Token Usage](https://datatracker.ietf.org/doc/html/rfc6750) +- [RFC 7591: OAuth 2.0 Dynamic Client Registration Protocol](https://datatracker.ietf.org/doc/html/rfc7591) +- [RFC 7636: Proof Key for Code Exchange by OAuth Public Clients](https://datatracker.ietf.org/doc/html/rfc7636) +- [RFC 8252: OAuth 2.0 for Native Apps](https://datatracker.ietf.org/doc/html/rfc8252) +- [RFC 8414: OAuth 2.0 Authorization Server Metadata](https://datatracker.ietf.org/doc/html/rfc8414) +- [RFC 8628: OAuth 2.0 Device Authorization Grant](https://datatracker.ietf.org/doc/html/rfc8628) +- [RFC 8693: OAuth 2.0 Token Exchange](https://datatracker.ietf.org/doc/html/rfc8693) +- [RFC 9068: JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens](https://datatracker.ietf.org/doc/html/rfc9068) # IPP Data File API @@ -1167,7 +1401,8 @@ ipp_file_t *file = ippFileNew(parent, attr_cb, error_cb, data); The "parent" IPP data file pointer is typically used to support nested files and is normally `NULL` for a new file. The "data" argument supplies your application data to the callbacks. The "attr_cb" callback function is used to -filter IPP attributes; return `true` to include the attribute and `false` to ignore it: +filter IPP attributes; return `true` to include the attribute and `false` to +ignore it: ```c bool @@ -1214,7 +1449,8 @@ token_cb(ipp_file_t *file, void *cb_data, const char *token) } ``` -The "token" parameter contains the token to be processed. The callback can use the [`ippFileReadToken`](@@) function to read additional tokens from the file +The "token" parameter contains the token to be processed. The callback can use +the [`ippFileReadToken`](@@) function to read additional tokens from the file and the [`ippFileExpandToken`](@@) function to expand any variables in the token string. Return `false` to stop reading the file and `true` to continue. The default `NULL` callback reports an unknown token error through the error diff --git a/cups/usersys.c b/cups/usersys.c index 705ba8ff42..3c86c22450 100644 --- a/cups/usersys.c +++ b/cups/usersys.c @@ -437,8 +437,7 @@ cupsSetEncryption(http_encryption_t e) // I - New encryption preference // 'cupsSetOAuthCB()' - Set the OAuth 2.0 callback for CUPS. // // This function sets the OAuth 2.0 callback for the various CUPS APIs that -// send HTTP requests. Pass @code NULL@ to restore the default (console-based) -// callback. +// send HTTP requests. Pass `NULL` to disable OAuth authorization. // // The OAuth callback receives the HTTP connection, realm name, scope name (if // any), resource path, and the "user_data" pointer for each request that @@ -460,13 +459,13 @@ cupsSetEncryption(http_encryption_t e) // I - New encryption preference void cupsSetOAuthCB( cups_oauth_cb_t cb, // I - Callback function - void *user_data) // I - User data pointer + void *cb_data) // I - Callback data pointer { _cups_globals_t *cg = _cupsGlobals(); // Pointer to library globals cg->oauth_cb = cb; - cg->oauth_data = user_data; + cg->oauth_data = cb_data; } @@ -518,7 +517,7 @@ cupsSetPasswordCB(cups_password_cb_t cb)// I - Callback function void cupsSetPasswordCB2( cups_password_cb2_t cb, // I - Callback function - void *user_data) // I - User data pointer + void *cb_data) // I - Callback data pointer { _cups_globals_t *cg = _cupsGlobals(); // Pointer to library globals @@ -528,7 +527,7 @@ cupsSetPasswordCB2( else cg->password_cb = cb; - cg->password_data = user_data; + cg->password_data = cb_data; } diff --git a/doc/help/api-admin.html b/doc/help/api-admin.html index 1052c37184..776a98619d 100644 --- a/doc/help/api-admin.html +++ b/doc/help/api-admin.html @@ -94,13 +94,16 @@ blockquote :first-child { margin-bottom: 0; } p code, li code, p.code, pre, ul.code li { + background: rgba(127,127,127,0.25); + border: thin dotted gray; font-family: monospace; hyphens: manual; -webkit-hyphens: manual; } +p code, li code { + padding: 0 5px; +} p.code, pre, ul.code li { - background: rgba(127,127,127,0.25); - border: thin dotted gray; padding: 10px; page-break-inside: avoid; } @@ -219,6 +222,21 @@ span.string { a:link:hover, a:visited:hover, a:active { color: #f06; } + span.comment { + color: #7c7; + } + span.directive { + color: red; + } + span.number { + color: #c64; + } + span.reserved { + color: #77f; + } + span.string { + color: #f7f; + } } /* Show contents on left side in web browser */ @media screen and (min-width: 800px) { diff --git a/doc/help/api-filter.html b/doc/help/api-filter.html index 374a9f0bff..02d5a3b59a 100644 --- a/doc/help/api-filter.html +++ b/doc/help/api-filter.html @@ -94,13 +94,16 @@ blockquote :first-child { margin-bottom: 0; } p code, li code, p.code, pre, ul.code li { + background: rgba(127,127,127,0.25); + border: thin dotted gray; font-family: monospace; hyphens: manual; -webkit-hyphens: manual; } +p code, li code { + padding: 0 5px; +} p.code, pre, ul.code li { - background: rgba(127,127,127,0.25); - border: thin dotted gray; padding: 10px; page-break-inside: avoid; } @@ -219,6 +222,21 @@ span.string { a:link:hover, a:visited:hover, a:active { color: #f06; } + span.comment { + color: #7c7; + } + span.directive { + color: red; + } + span.number { + color: #c64; + } + span.reserved { + color: #77f; + } + span.string { + color: #f7f; + } } /* Show contents on left side in web browser */ @media screen and (min-width: 800px) { diff --git a/doc/help/api-ppd.html b/doc/help/api-ppd.html index 5d74c34087..5fbcdb7420 100644 --- a/doc/help/api-ppd.html +++ b/doc/help/api-ppd.html @@ -94,13 +94,16 @@ blockquote :first-child { margin-bottom: 0; } p code, li code, p.code, pre, ul.code li { + background: rgba(127,127,127,0.25); + border: thin dotted gray; font-family: monospace; hyphens: manual; -webkit-hyphens: manual; } +p code, li code { + padding: 0 5px; +} p.code, pre, ul.code li { - background: rgba(127,127,127,0.25); - border: thin dotted gray; padding: 10px; page-break-inside: avoid; } @@ -219,6 +222,21 @@ span.string { a:link:hover, a:visited:hover, a:active { color: #f06; } + span.comment { + color: #7c7; + } + span.directive { + color: red; + } + span.number { + color: #c64; + } + span.reserved { + color: #77f; + } + span.string { + color: #f7f; + } } /* Show contents on left side in web browser */ @media screen and (min-width: 800px) { diff --git a/doc/help/cupspm.epub b/doc/help/cupspm.epub index 7d3d48876a5ca7e7898ddc4a596ecacf53fbcf73..0e7fc7ff1c859e2edb8bec6f9453f694e14c6a63 100644 GIT binary patch delta 99466 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 bL(772A}UT-MIz)WIy?akSa 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 diff --git a/doc/help/cupspm.html b/doc/help/cupspm.html index 60d951462e..f92c13980b 100644 --- a/doc/help/cupspm.html +++ b/doc/help/cupspm.html @@ -94,13 +94,16 @@ blockquote :first-child { margin-bottom: 0; } p code, li code, p.code, pre, ul.code li { + background: rgba(127,127,127,0.25); + border: thin dotted gray; font-family: monospace; hyphens: manual; -webkit-hyphens: manual; } +p code, li code { + padding: 0 5px; +} p.code, pre, ul.code li { - background: rgba(127,127,127,0.25); - border: thin dotted gray; padding: 10px; page-break-inside: avoid; } @@ -219,6 +222,21 @@ span.string { a:link:hover, a:visited:hover, a:active { color: #f06; } + span.comment { + color: #7c7; + } + span.directive { + color: red; + } + span.number { + color: #c64; + } + span.reserved { + color: #77f; + } + span.string { + color: #f7f; + } } /* Show contents on left side in web browser */ @media screen and (min-width: 800px) { @@ -275,7 +293,10 @@ span.string {
  • Sending the IPP Request
  • Processing the IPP Response
  • -
  • Authentication
  • + +
  • Authentication and Authorization
  • IPP Data File API
    • Creating an IPP Data File
    • @@ -516,6 +537,7 @@ span.string {
    • cupsOAuthCopyUserId
    • cupsOAuthGetAuthorizationCode
    • cupsOAuthGetClientId
    • +
    • cupsOAuthGetDeviceGrant
    • cupsOAuthGetJWKS
    • cupsOAuthGetMetadata
    • cupsOAuthGetTokens
    • @@ -1704,22 +1726,215 @@ ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,

      Once you are done using the IPP response message, free it using the ippDelete function:

      ippDelete(response);
       
      -

      Authentication

      -

      CUPS normally handles authentication through the console. GUI applications should set a password callback using the cupsSetPasswordCB2 function:

      +

      Authentication and Authorization

      +

      CUPS supports authentication and authorization using HTTP Basic, HTTP Digest, peer credentials when communicating over domain sockets, and OAuth/OpenID Connect.

      +

      Peer credential authorization happens automatically when connected over a domain socket. Other types of authentication requires the application to handle HTTP_STATUS_UNAUTHORIZED responses beyond simply calling cupsDoAuthentication.

      +

      Authentication Using Passwords

      +

      When you call cupsDoAuthentication and the HTTP server requires the "Basic" or "Digest" authentication schemes, CUPS normally requests a password from the console. GUI applications should set a password callback using the cupsSetPasswordCB2 function:

      +
      void
      +cupsSetPasswordCB2(cups_password_cb2_t cb, void *cb_data);
      +
      +

      The password callback is called when needed and is responsible for setting the current user name using cupsSetUser and returning a (password) string:

      +
      const char *
      +cups_password_cb(const char *prompt, http_t *http,
      +                 const char *method, const char *resource,
      +                 void *cb_data);
      +
      +

      The "prompt" argument is a string from CUPS that should be displayed to the user.

      +

      The "http" argument is the connection hosting the request that is being authenticated. The password callback can call the httpGetField and httpGetSubField functions to look for additional details concerning the authentication challenge.

      +

      The "method" argument specifies the HTTP method used for the request and is typically "GET", "POST", or "PUT".

      +

      The "resource" argument specifies the path or URI used for the request.

      +

      The "cb_data" argument provides the data pointer from the cupsSetPasswordCB2 call.

      +

      Authorization using OAuth/OpenID Connect

      +

      When you call cupsDoAuthentication and the HTTP server requires the "Bearer" authentication scheme, CUPS will call an OAuth callback that you register using the cupsSetOAuthCB function:

      void
      -cupsSetPasswordCB2(cups_password_cb2_t cb, void *user_data);
      +cupsSetOAuthCB(cups_oauth_cb_t cb, void *cb_data);
       
      -

      The password callback will be called when needed and is responsible for setting the current user name using cupsSetUser and returning a string:

      +

      The OAuth callback is called when needed and is responsible for performing any necessary authorization and returning an access token string:

      const char *
      -cups_password_cb2(const char *prompt, http_t *http,
      -                  const char *method, const char *resource,
      -                  void *user_data);
      +cups_oauth_cb(http_t *http, const char *realm, const char *scope,
      +              const char *resource, void *cb_data);
      +
      +

      The "http" argument is the connection hosting the request that is being authenticated. The OAuth callback can call the httpGetField and httpGetSubField functions to look for additional details concerning the authentication challenge.

      +

      The "realm" and "scope" arguments provide the "realm" and "scope" parameters, if any, from the "WWW-Authenticate" header.

      +

      The "resource" argument specifies the path or URI used for the request.

      +

      The "cb_data" argument provides the data pointer from the cupsSetOAuthCB call.

      +

      OAuth Client Functions

      +

      CUPS provides a generic OAuth/OpenID client for authorizing access to printers and other network resources. The following functions are provided:

      + +

      Once you have an access token you use the httpSetAuthString function to use it for a HTTP connection:

      +
      http_t *http;
      +char   *access_token;
      +
      +httpSetAuthString(http, "Bearer", access_token);
      +
      +

      Authorizing Using a Web Browser

      +

      Users can authorize using their preferred web browser via the cupsOAuthGetAuthorizationCode function, which returns an authorization grant code string. The following code gets the authorization server metadata, authorizes access through the web browser, and then obtains a HTTP Bearer access token:

      +
      http_t      *http;           // HTTP connection
      +const char  *auth_uri;       // Base URL for Authorization Server
      +cups_json_t *metadata;       // Authorization Server metadata
      +const char  *printer_uri;    // Printer URI
      +char        *auth_code;      // Authorization grant code
      +char        *access_token;   // Access token
      +time_t      access_expires;  // Date/time when access token expires
      +
      +// Get the metadata for the authorization server.
      +metadata = cupsOAuthGetMetadata(auth_uri);
      +
      +if (metadata == NULL)
      +{
      +  // Handle error getting metadata from authorization server.
      +}
      +
      +// Bring up the web browser to authorize and get an authorization code.
      +auth_code = cupsOAuthGetAuthorizationCode(auth_uri, metadata, printer_uri,
      +                                          /*scopes*/NULL,
      +                                          /*redirect_uri*/NULL);
      +
      +if (auth_code == NULL)
      +{
      +  // Unable to authorize.
      +}
      +
      +// Get the access code from the authorization code.
      +access_token = cupsOAuthGetTokens(auth_uri, metadata, printer_uri, auth_code,
      +                                  CUPS_OGRANT_AUTHORIZATION_CODE,
      +                                  /*redirect_uri*/NULL, &access_expires);
      +
      +if (access_token == NULL)
      +{
      +  // Unable to get access token.
      +}
      +
      +// Set the Bearer token for authorization.
      +httpSetAuthString(http, "Bearer", access_token);
      +free(access_token);
      +
      +

      Authorizing Using a Mobile Device

      +

      Users can authorize using a mobile device via the cupsOAuthGetDeviceGrant function, which returns a JSON object with the mobile authorization URLs, user (verification) code string, and device grant code. The following code gets the authorization server metadata, gets the mobile device authorization information, and then obtains a HTTP Bearer access token:

      +
      http_t      *http;           // HTTP connection
      +const char  *auth_uri;       // Base URL for Authorization Server
      +cups_json_t *metadata;       // Authorization Server metadata
      +const char  *printer_uri;    // Printer URI
      +cups_json_t *device_grant;   // Device authorization grant object
      +const char  *device_code;    // Device grant code
      +const char  *verify_url;     // Mobile device URL
      +const char  *verify_urlc;    // Mobile device URL with user code
      +const char  *user_code;      // User code
      +char        *access_token;   // Access token
      +time_t      access_expires;  // Date/time when access token expires
      +
      +// Get the metadata for the authorization server.
      +metadata = cupsOAuthGetMetadata(auth_uri);
      +
      +if (metadata == NULL)
      +{
      +  // Handle error getting metadata from authorization server.
      +}
      +
      +// Get a device authorization grant for mobile authorization.
      +device_grant = cupsOAuthGetDeviceGrant(auth_uri, metadata, printer_uri,
      +                                       /*scopes*/NULL);
      +
      +device_code = cupsJSONGetString(
      +                  cupsJSONFind(device_grant, CUPS_ODEVGRANT_DEVICE_CODE));
      +verify_url  = cupsJSONGetString(
      +                  cupsJSONFind(device_grant, CUPS_ODEVGRANT_VERIFICATION_URI));
      +verify_urlc = cupsJSONGetString(
      +                  cupsJSONFind(device_grant, CUPS_ODEVGRANT_VERIFICATION_URI_COMPLETE));
      +user_code   = cupsJSONGetString(
      +                  cupsJSONFind(device_grant, CUPS_ODEVGRANT_USER_CODE));
      +
      +if (device_code == NULL || verify_url == NULL || verify_urlc == NULL ||
      +    user_code == NULL)
      +{
      +  // Unable to authorize.
      +}
      +
      +// Show the URLs and user code to the user (links and/or QR codes).
      +printf("Open this URL: %s\n", verify_urlc);
      +
      +// Get the access code from the authorization code.
      +do
      +{
      +  // Delay check for several seconds.
      +  sleep(5);
      +
      +  // Try getting an access token.
      +  access_token = cupsOAuthGetTokens(auth_uri, metadata, printer_uri, device_code,
      +                                    CUPS_OGRANT_DEVICE_CODE,
      +                                    /*redirect_uri*/NULL, &access_expires);
      +}
      +while (access_token == NULL && access_expires > 0);
      +       // Continue checking until we have an access token or
      +       // the device code has expired.
      +
      +if (access_token == NULL)
      +{
      +  // Unable to get access token.
      +}
      +
      +// Set the Bearer token for authorization.
      +httpSetAuthString(http, "Bearer", access_token);
      +free(access_token);
       
      -

      The prompt argument is a string from CUPS that should be displayed to the user.

      -

      The http argument is the connection hosting the request that is being authenticated. The password callback can call the httpGetField and httpGetSubField functions to look for additional details concerning the authentication challenge.

      -

      The method argument specifies the HTTP method used for the request and is typically "POST".

      -

      The resource argument specifies the path used for the request.

      -

      The user_data argument provides the user data pointer from the cupsSetPasswordCB2 call.

      +

      Supported OAuth Standards

      +

      The following standards are supported:

      +

      IPP Data File API

      The IPP data file API provides functions to read and write IPP attributes and other commands or data using a common base format that supports tools such as ipptool and ippeveprinter.

      Creating an IPP Data File

      @@ -3490,10 +3705,11 @@ You must call this function prior to cupsDN Resource path

      Return Value

      -

      0 on success, -1 on error

      +

      0 on success, -1 on error

      Discussion

      -

      This function should be called in response to a HTTP_STATUS_UNAUTHORIZED -status, prior to resubmitting your request. +

      This function performs authentication for a request. It should be called in +response to a HTTP_STATUS_UNAUTHORIZED status, prior to resubmitting your +request.

      cupsDoFileRequest

      @@ -5306,14 +5522,14 @@ or a suitable IPP_STATUS_ERROR_ value if an error occurred.

       CUPS 2.5 cupsJSONNewKey

      Create a new JSON key node.

      -cups_json_t *cupsJSONNewKey(cups_json_t *parent, cups_json_t *after, const char *value);

      +cups_json_t *cupsJSONNewKey(cups_json_t *parent, cups_json_t *after, const char *key);

      Parameters

      - +
      parent Parent JSON node or NULL for a root node
      after Previous sibling node or NULL to append to the end
      value
      key Key string

      Return Value

      @@ -6051,15 +6267,15 @@ combination. The returned user information must be freed using the

      This function performs a local/"native" OAuth authorization flow to obtain an authorization code for use with the cupsOAuthGetTokens function.

      -The "auth_uri" parameter specifies the URI for the OAuth Authorization -Server. The "metadata" parameter specifies the Authorization Server metadata +The "auth_uri" argument specifies the URI for the OAuth Authorization +Server. The "metadata" argument specifies the Authorization Server metadata as obtained using cupsOAuthCopyMetadata and/or cupsOAuthGetMetadata.

      -The "resource_uri" parameter specifies the URI for a resource (printer, web +The "resource_uri" argument specifies the URI for a resource (printer, web file, etc.) that you which to access.

      -The "scopes" parameter specifies zero or more whitespace-delimited scope +The "scopes" argument specifies zero or more whitespace-delimited scope names to request during authorization. The list of supported scope names are available from the Authorization Server metadata, for example: @@ -6068,7 +6284,7 @@ cups_json_t *metadata = cupsOAuthGetMetadata(auth_uri); cups_json_t *scopes_supported = cupsJSONFind(metadata, "scopes_supported"); -The "redirect_uri" parameter specifies a 'http:' URL with a listen address, +The "redirect_uri" argument specifies a 'http:' URL with a listen address, port, and path to use. If NULL, 127.0.0.1 on a random port is used with a path of "/".

      @@ -6098,8 +6314,8 @@ The returned authorization code must be freed using the free functi

      This function registers a client application with the specified OAuth Authorization Server.

      -The "auth_uri" parameter specifies the URI for the OAuth Authorization -Server. The "metadata" parameter specifies the Authorization Server metadata +The "auth_uri" argument specifies the URI for the OAuth Authorization +Server. The "metadata" argument specifies the Authorization Server metadata as obtained using cupsOAuthCopyMetadata and/or cupsOAuthGetMetadata.

      @@ -6116,6 +6332,77 @@ The returned "client_id" string must be freed using the freecupsOAuthGetAuthorizationCode function handles registration of local/"native" applications for you. +

      +

       CUPS 2.5 cupsOAuthGetDeviceGrant

      +

      Get a device authorization grant for the specified resource and scope(s).

      +

      +cups_json_t *cupsOAuthGetDeviceGrant(const char *auth_uri, cups_json_t *metadata, const char *resource_uri, const char *scopes);

      +

      Parameters

      + + + + + + + + + +
      auth_uriAuthorization Server URI
      metadataAuthorization Server metadata
      resource_uriResource URI
      scopesSpace-delimited scopes
      +

      Return Value

      +

      Grant data or NULL on error

      +

      Discussion

      +

      This function requests a device authorization grant for the specified +resource and scope(s). Device authorization grants allow a user to open a +web page on any device to authorize access to the resource.
      +
      +The "auth_uri" argument specifies the URI for the OAuth Authorization +Server. The "metadata" argument specifies the Authorization Server metadata +as obtained using cupsOAuthCopyMetadata and/or +cupsOAuthGetMetadata.
      +
      +The "resource_uri" argument specifies the URI for a resource (printer, web +file, etc.) that you which to access.
      +
      +The "scopes" argument specifies zero or more whitespace-delimited scope +names to request during authorization. The list of supported scope names are +available from the Authorization Server metadata, for example: + +

      +cups_json_t *metadata = cupsOAuthGetMetadata(auth_uri);
      +cups_json_t *scopes_supported = cupsJSONFind(metadata, "scopes_supported");
      +
      + +The returned JSON object must be freed using the cupsJSONDelete +function and contains the following information: + +

        +
      • CUPS_ODEVGRANT_DEVICE_CODE: The device code string to be used in + subsequent cupsOAuthGetTokens calls. +
      • +
      • CUPS_ODEVGRANT_EXPIRES_IN: The expiration date/time as a number of + seconds since the Unix epoch. +
      • +
      • CUPS_ODEVGRANT_INTERVAL: The number of seconds to wait between calls to + cupsOAuthGetTokens. +
      • +
      • CUPS_ODEVGRANT_USER_CODE: The user code to enter on the verification + web page. +
      • +
      • CUPS_ODEVGRANT_VERIFICATION_URL: The URL for the verification web page. +
      • +
      • CUPS_ODEVGRANT_VERIFICATION_URL_COMPLETE: The URL for the verification + web page with the user code filled in.
      • +
      +

      The values can be obtained using the cupsJSONFind, +@cupsJSONGetNumber@, and @cupsJSONGetString@ functions, for example: + +

      +cups_json_t *grant = cupsOAuthGetDeviceGrant(...);
      +
      +const char *verification_url = cupsJSONGetString(cupsJSONFind(grant, CUPS_ODEVGRANT_VERIFICATION_URL));
      +double interval = cupsJSONGetNumber(cupsJSONFind(grant, CUPS_ODEVGRANT_INTERVAL));
      +
      +

       CUPS 2.5 cupsOAuthGetJWKS

      Get the JWT key set for an Authorization Server.

      @@ -6173,11 +6460,11 @@ freed using the cupsJSONDelete functi resource_uri Resource URI grant_code -Authorization code or refresh token +Authorization code, device code, or refresh token grant_type Grant code type redirect_uri -Redirect URI +Redirect URI or NULL for device grants access_expires Expiration time for access token @@ -6188,16 +6475,16 @@ freed using the cupsJSONDelete functi Server. OpenID Authorization Servers also provide user identification information.

      -The "auth_uri" parameter specifies the URI for the OAuth Authorization -Server. The "metadata" parameter specifies the Authorization Server metadata +The "auth_uri" argument specifies the URI for the OAuth Authorization +Server. The "metadata" argument specifies the Authorization Server metadata as obtained using cupsOAuthCopyMetadata and/or cupsOAuthGetMetadata.

      -The "resource_uri" parameter specifies the URI for a resource (printer, web +The "resource_uri" argument specifies the URI for a resource (printer, web file, etc.) that you which to access.

      -The "grant_code" parameter specifies the code or token to use while the -"grant_type" parameter specifies the type of code: +The "grant_code" argument specifies the code or token to use while the +"grant_type" argument specifies the type of code:

      • CUPS_OGRANT_AUTHORIZATION_CODE: A user authorization grant code. @@ -6214,7 +6501,12 @@ When successful, the access token and expiration time are returned. The access token must be freed using the free function. The new refresh token and any user ID information can be obtained using the cupsOAuthCopyRefreshToken and cupsOAuthCopyUserId functions -respectively. +respectively.
        +
        +When authorizing using a device code (CUPS_OGRANT_DEVICE_CODE) and a device +access token is not yet ready, a NULL access token is returned with the +expiration time set to the next recommended query time. If the +"access_expires" value is set to 0 then the device authorization failed.

         CUPS 2.5 cupsOAuthGetUserId

        @@ -6269,15 +6561,15 @@ the overhead of communicating with the Authorization Server.

        This function makes an authorization URL for the specified authorization server and resource.

        -The "auth_uri" parameter specifies the URI for the OAuth Authorization -Server. The "metadata" parameter specifies the Authorization Server metadata +The "auth_uri" argument specifies the URI for the OAuth Authorization +Server. The "metadata" argument specifies the Authorization Server metadata as obtained using cupsOAuthCopyMetadata and/or cupsOAuthGetMetadata.

        -The "resource_uri" parameter specifies the URI for a resource (printer, web +The "resource_uri" argument specifies the URI for a resource (printer, web file, etc.) that you which to access.

        -The "scopes" parameter specifies zero or more whitespace-delimited scope +The "scopes" argument specifies zero or more whitespace-delimited scope names to request during authorization. The list of supported scope names are available from the Authorization Server metadata, for example: @@ -6286,25 +6578,25 @@ cups_json_t *metadata = cupsOAuthGetMetadata(auth_uri); cups_json_t *scopes_supported = cupsJSONFind(metadata, "scopes_supported"); -The "client_id" parameter specifies the client identifier obtained using +The "client_id" argument specifies the client identifier obtained using cupsOAuthCopyClientId and/or cupsOAuthGetClientId.

        -The "client_id" parameter is the string returned by +The "client_id" argument is the string returned by cupsOAuthCopyClientId or cupsOAuthGetClientId.

        -The "code_verifier" parameter specifies a random Base64URL-encoded string +The "code_verifier" argument specifies a random Base64URL-encoded string that is used by the Proof Key for Code Exchange [RFC7636] extension to help secure the authorization flow. The cupsOAuthMakeBase64Random function can be used to generate this string.

        -The "nonce" parameter specifies a random Base64URL-encoded string that is +The "nonce" argument specifies a random Base64URL-encoded string that is used by OpenID to validate the ID token. The cupsOAuthMakeBase64Random function can be used to generate this string.

        -The "redirect_uri" parameter specifies the URI that will receive the +The "redirect_uri" argument specifies the URI that will receive the authorization grant code.

        -The "state" parameter is a unique (random) identifier for the authorization +The "state" argument is a unique (random) identifier for the authorization request. It is provided to the redirection URI as a form parameter.

        @@ -7010,18 +7302,17 @@ so in each thread for the same setting to be used.

         CUPS 2.4 cupsSetOAuthCB

        Set the OAuth 2.0 callback for CUPS.

        -void cupsSetOAuthCB(cups_oauth_cb_t cb, void *user_data);

        +void cupsSetOAuthCB(cups_oauth_cb_t cb, void *cb_data);

        Parameters

        - - + +
        cb Callback function
        user_dataUser data pointer
        cb_dataCallback data pointer

        Discussion

        This function sets the OAuth 2.0 callback for the various CUPS APIs that -send HTTP requests. Pass NULL to restore the default (console-based) -callback.
        +send HTTP requests. Pass NULL to disable OAuth authorization.

        The OAuth callback receives the HTTP connection, realm name, scope name (if any), resource path, and the "user_data" pointer for each request that @@ -7041,13 +7332,13 @@ each thread for the same callback to be used.

         CUPS 1.4 cupsSetPasswordCB2

        Set the advanced password callback for CUPS.

        -void cupsSetPasswordCB2(cups_password_cb2_t cb, void *user_data);

        +void cupsSetPasswordCB2(cups_password_cb2_t cb, void *cb_data);

        Parameters

        - - + +
        cb Callback function
        user_dataUser data pointer
        cb_dataCallback data pointer

        Discussion

        Pass NULL to restore the default (console) password callback, which @@ -8019,7 +8310,7 @@ This function supports both Base64 and Base64url strings.

        Encoded string

        Discussion

        This function encodes a Base64 string as defined by RFC 4648. The "url" -parameter controls whether the original Base64 ("url" = false) or the +argument controls whether the original Base64 ("url" = false) or the Base64url ("url" = true) alphabet is used.

        @@ -8610,7 +8901,7 @@ ssize_t httpRead2(http_t *http, cha http HTTP connection buffer -Hostname buffer +Hostname buffer or NULL to use HTTP buffer bufsize Size of buffer @@ -8640,7 +8931,7 @@ ssize_t httpRead2(http_t *http, cha

        Discussion

        This function resolves a DNS-SD URI of the form "scheme://service-instance-name._protocol._tcp.domain/...". The "options" -parameter specifies a bitfield of resolution options including: +argument specifies a bitfield of resolution options including:

        • HTTP_RESOLVE_DEFAULT: Use default options @@ -8649,7 +8940,7 @@ parameter specifies a bitfield of resolution options including:
        • HTTP_RESOLVE_FAXOUT: Resolve the FaxOut service instead of Print (IPP/IPPS)
        -

        The "cb" parameter specifies a callback that allows resolution to be +

        The "cb" argument specifies a callback that allows resolution to be terminated. The callback is provided the "cb_data" value and returns a bool value that is true to continue and false to stop. If no callback is specified ("cb" is NULL), then this function will block up to 90 seconds @@ -8871,8 +9162,8 @@ data pointer and must return 1 to continue or 0 to error (time) out.

        Return Value

        Localized status string

        Discussion

        -

        The returned string is localized to the current POSIX locale and is based -on the status strings defined in RFC 7231. +

        This function returns a short (localized) string describing a HTTP status +code. The strings are taken from the IANA HTTP Status Code registry.

         CUPS 2.0/OS 10.10 httpURIStatusString

        @@ -8886,6 +9177,11 @@ on the status strings defined in RFC 7231.

        Return Value

        Localized status string

        +

        Discussion

        +

        This function returns a short (localized) string describing a URI status +value. + +

        httpUpdate

        Update the current HTTP state for incoming data.

        @@ -8971,10 +9267,10 @@ ssize_t httpWrite2(http_t *http, co

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -8999,10 +9295,10 @@ event notification (IPP_TAG_EVENT_NOTIFICATION), operation

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -9025,14 +9321,21 @@ event notification (IPP_TAG_EVENT_NOTIFICATION), operation

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription -(IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP). +(IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).
        +
        +The "name" argument specifies the name of the attribute, while the "value" +argument provides an IPP message containing the collection member attributes.
        +
        +

        +Note: You must call the ippDelete function on the "value" +argument to make sure the memory used by the value is released.

         CUPS 1.1.19 ippAddCollections

        @@ -9055,14 +9358,22 @@ event notification (IPP_TAG_EVENT_NOTIFICATION), operation

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription -(IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP). +(IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).
        +
        +The "name" argument specifies the name of the attribute, while the +"num_values" and "values" arguments provide IPP messages containing the +collection member attributes for each value.
        +
        +

        +Note: You must call the ippDelete function on each of the +"values" arguments to make sure the memory used by the value is released.

         CUPS 2.5 ippAddCredentialsString

        @@ -9086,10 +9397,10 @@ event notification (IPP_TAG_EVENT_NOTIFICATION), operation

        This function adds a 1setOf text attribute to an IPP message corresponding to the specified credentials string.

        -The "ipp" parameter refers to an IPP message previously created using +The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -9114,10 +9425,10 @@ event notification (IPP_TAG_EVENT_NOTIFICATION), operation

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -9144,10 +9455,10 @@ event notification (IPP_TAG_EVENT_NOTIFICATION), operation

        Discussion

        This function adds an integer or enum attribute to an IPP message.

        -The "ipp" parameter refers to an IPP message previously created using +The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -9177,10 +9488,10 @@ Supported values include enum (IPP_TAG_ENUM) and integer

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -9208,10 +9519,10 @@ Supported values include enum (IPP_TAG_ENUM) and integer

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -9236,10 +9547,10 @@ event notification (IPP_TAG_EVENT_NOTIFICATION), operation

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -9272,16 +9583,16 @@ admin-define (IPP_TAG_ADMINDEFINE).

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription (IPP_TAG_SUBSCRIPTION), or unsupported (IPP_TAG_UNSUPPORTED_GROUP).

        -The "lower" parameter must be less than or equal to the "upper" parameter.

        +The "lower" argument must be less than or equal to the "upper" argument.

        ippAddRanges

        Add ranges of values to an IPP message.

        @@ -9304,10 +9615,10 @@ The "lower" parameter must be less than or equal to the "upper&qu

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -9334,10 +9645,10 @@ event notification (IPP_TAG_EVENT_NOTIFICATION), operation

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -9366,10 +9677,10 @@ event notification (IPP_TAG_EVENT_NOTIFICATION), operation

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -9386,7 +9697,7 @@ event notification (IPP_TAG_EVENT_NOTIFICATION), operation

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        ippAddString

        Add a language-encoded string to an IPP message.

        @@ -9410,10 +9721,10 @@ the ippNew, ip

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -9426,7 +9737,7 @@ Supported string values include charset (IPP_TAG_CHARSET), keyword (`IPP_TAG_TEXTLANG`), uri (`IPP_TAG_URI`), and uriScheme (`IPP_TAG_URISCHEME`). -The "language" parameter must be non-`NULL` for nameWithLanguage and +The "language" argument must be non-`NULL` for nameWithLanguage and textWithLanguage string values and must be `NULL` for all other string values.

         CUPS 1.7 ippAddStringf

        Add a formatted string to an IPP message.

        @@ -9452,10 +9763,10 @@ textWithLanguage string values and must be `NULL` for all other string values.Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), @@ -9469,11 +9780,11 @@ Supported string values include charset (IPP_TAG_CHARSET), keyword (`IPP_TAG_TEXTLANG`), uri (`IPP_TAG_URI`), and uriScheme (`IPP_TAG_URISCHEME`). -The "language" parameter must be non-`NULL` for nameWithLanguage +The "language" argument must be non-`NULL` for nameWithLanguage and textWithLanguage string values and must be `NULL` for all other string values. -The "format" parameter uses formatting characters compatible with the +The "format" argument uses formatting characters compatible with the printf family of standard functions. Additional arguments follow it as needed. The formatted string is truncated as needed to the maximum length of the corresponding value type. @@ -9503,10 +9814,10 @@ the corresponding value type.

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), @@ -9520,11 +9831,11 @@ Supported string values include charset (IPP_TAG_CHARSET), keyword (`IPP_TAG_TEXTLANG`), uri (`IPP_TAG_URI`), and uriScheme (`IPP_TAG_URISCHEME`). -The "language" parameter must be non-`NULL` for nameWithLanguage +The "language" argument must be non-`NULL` for nameWithLanguage and textWithLanguage string values and must be `NULL` for all other string values. -The "format" parameter uses formatting characters compatible with the +The "format" argument uses formatting characters compatible with the printf family of standard functions. Additional arguments are passed in the stdarg pointer "ap". The formatted string is truncated as needed to the maximum length of the corresponding value type. @@ -9554,10 +9865,10 @@ maximum length of the corresponding value type.

        Return Value

        New attribute

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -9570,7 +9881,7 @@ Supported string values include charset (IPP_TAG_CHARSET), keyword (`IPP_TAG_TEXTLANG`), uri (`IPP_TAG_URI`), and uriScheme (`IPP_TAG_URISCHEME`). -The "language" parameter must be non-`NULL` for nameWithLanguage and +The "language" argument must be non-`NULL` for nameWithLanguage and textWithLanguage string values and must be `NULL` for all other string values.

         CUPS 1.6 ippAttributeString

        Convert the attribute's value to a string.

        @@ -9581,16 +9892,17 @@ size_t ippAttributeString(ipp_attribute_t *attr, attr Attribute buffer -String buffer or NULL +String buffer or NULL bufsize Size of string buffer

        Return Value

        -

        Number of bytes less nul

        +

        Number of bytes less nul

        Discussion

        -

        Returns the number of bytes that would be written, not including the -trailing nul. The buffer pointer can be NULL to get the required length, -just like (v)snprintf. +

        This function converts an attribute's values into a string and returns the +number of bytes that would be written, not including the trailing nul. The +buffer pointer can be NULL to get the required length, just like +(v)snprintf.

         CUPS 1.7 ippContainsInteger

        @@ -9608,9 +9920,9 @@ just like (v)snprintf.

        Return Value

        1 on a match, 0 on no match

        Discussion

        -

        Returns non-zero when the attribute contains either a matching integer or -enum value, or the value falls within one of the rangeOfInteger values for -the attribute. +

        This function returns non-zero when the attribute contains either a matching +integer or enum value, or the value falls within one of the rangeOfInteger +values for the attribute.

         CUPS 1.7 ippContainsString

        @@ -9628,8 +9940,9 @@ the attribute.

        Return Value

        1 on a match, 0 on no match

        Discussion

        -

        Returns non-zero when the attribute contains a matching charset, keyword, -naturalLanguage, mimeMediaType, name, text, uri, or uriScheme value. +

        This function returns non-zero when the attribute contains a matching +charset, keyword, naturalLanguage, mimeMediaType, name, text, uri, or +uriScheme value.

         CUPS 1.6 ippCopyAttribute

        @@ -9643,21 +9956,21 @@ naturalLanguage, mimeMediaType, name, text, uri, or uriScheme value. srcattr Attribute to copy quickcopy -1 for a referenced copy, 0 for normal +1 for a referenced copy, 0 for a new copy

        Return Value

        New attribute

        Discussion

        -

        The specified attribute, attr, is copied to the destination IPP message. -When "quickcopy" is non-zero, a "shallow" reference copy of the attribute is -created - this should only be done as long as the original source IPP message will -not be freed for the life of the destination. +

        This function copies an attribute to another IPP message. When "quickcopy" +is non-zero, a shallow reference copy of the attribute is created - this +should only be done as long as the original source IPP message will not be +freed for the life of the destination.

         CUPS 1.6 ippCopyAttributes

        Copy attributes from one IPP message to another.

        -int ippCopyAttributes(ipp_t *dst, ipp_t *src, int quickcopy, ipp_copy_cb_t cb, void *context);

        +int ippCopyAttributes(ipp_t *dst, ipp_t *src, int quickcopy, ipp_copy_cb_t cb, void *cb_data);

        Parameters

        @@ -9665,25 +9978,26 @@ not be freed for the life of the destination. - + - - + +
        dst
        src Source IPP message
        quickcopy1 for a referenced copy, 0 for normal
        1 for a referenced copy, 0 for normal
        cb Copy callback or NULL for none
        contextContext pointer
        cb_dataCallback data pointer

        Return Value

        -

        1 on success, 0 on error

        +

        1 on success, 0 on error

        Discussion

        -

        Zero or more attributes are copied from the source IPP message "src" to the -destination IPP message "dst". When "quickcopy" is non-zero, a "shallow" -reference copy of the attribute is created - this should only be done as long -as the original source IPP message will not be freed for the life of the +

        This function copies zero or more attributes from the source to the +destination IPP message. When "quickcopy" is non-zero, a shallow reference +copy of the attribute is created - this should only be done as long as the +original source IPP message will not be freed for the life of the destination.

        -The "cb" and "context" parameters provide a generic way to "filter" the -attributes that are copied - the function must return 1 to copy the attribute or -0 to skip it. The function may also choose to do a partial copy of the source attribute -itself. +The "cb" and "cb_data" arguments provide a generic way to "filter" the +attributes that are copied - the function must return 1 to copy the +attribute or 0 to skip it. The function may also choose to do a +partial copy of the source attribute itself and return 0 to tell this +function to skip it.

        ippCopyCredentialsString

        @@ -9719,13 +10033,13 @@ list of "requested-attribute" values supplied in an IPP request. All registered values are supported in addition to the CUPS IPP extension attributes.

        -The request parameter specifies the request message that was read from -the client. - +The "request" argument specifies the request message that was read from +the client.
        +
        NULL is returned if all attributes should be returned. Otherwise, the -result is a sorted array of attribute names, where cupsArrayFind(array, -"attribute-name") will return a non-NULL pointer. The array must be freed -using the cupsArrayDelete function. +result is a sorted array of attribute names, where +cupsArrayFind(array, "attribute-name") will return a non-NULL pointer. +The array must be freed using cupsArrayDelete.

        ippDateToTime

        @@ -9771,18 +10085,18 @@ time_t ippDateToTime(const attr Attribute element -Index of first value to delete (0-based) +Index of first value to delete (0-based) count Number of values to delete

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        This function deletes one or more values in an attribute. The "element" -parameter specifies the first value to delete, starting at 0. It must be +argument specifies the first value to delete, starting at 0. It must be less than the number of values returned by ippGetCount.

        -The "attr" parameter may be modified as a result of setting the value, +The "attr" argument may be modified as a result of setting the value, which will set the variable to NULL.

        Deleting all values in an attribute deletes the attribute. @@ -9813,7 +10127,7 @@ Deleting all values in an attribute deletes the attribute. Enum string

        Return Value

        -

        Enum value or -1 if unknown

        +

        Enum value or -1 if unknown

        ippErrorString

        Return a name for the given status code.

        @@ -9836,7 +10150,7 @@ ipp_status_t ippErrorValue(const Return Value

        IPP status code

        -

        ippFileClose

        +

         CUPS 2.5 ippFileClose

        Close an IPP data file.

        bool ippFileClose(ipp_file_t *file);

        @@ -9849,8 +10163,10 @@ ipp_status_t ippErrorValue(const true on success, false on error

        Discussion

        This function closes the current IPP data file. The ipp_file_t object can -be reused for another file as needed.

        -

        ippFileDelete

        +be reused for another file as needed. + +

        +

         CUPS 2.5 ippFileDelete

        Close an IPP data file and free all memory.

        bool ippFileDelete(ipp_file_t *file);

        @@ -9863,8 +10179,10 @@ be reused for another file as needed.

        true on success, false on error

        Discussion

        This function closes an IPP data file, if necessary, and frees all memory -associated with it.

        -

        ippFileExpandVars

        +associated with it. + +

        +

         CUPS 2.5 ippFileExpandVars

        Expand IPP data file and environment variables in a string.

        size_t ippFileExpandVars(ipp_file_t *file, char *dst, const char *src, size_t dstsize);

        @@ -9884,8 +10202,10 @@ size_t ippFileExpandVars(ipp_file_t *file, Discussion

        This function expands IPP data file variables of the form "$name" and environment variables of the form "$ENV[name]" in the source string to the -destination string. The

        -

        ippFileGetAttribute

        +destination string. The + +

        +

         CUPS 2.5 ippFileGetAttribute

        Get a single named attribute from an IPP data file.

        ipp_attribute_t *ippFileGetAttribute(ipp_file_t *file, const char *name, ipp_tag_t value_tag);

        @@ -9904,8 +10224,10 @@ destination string. The

        This function finds the first occurence of a named attribute in the current IPP attributes in the specified data file. Unlike ippFileGetAttributes, this function does not clear the attribute -state.

        -

        ippFileGetAttributes

        +state. + +

        +

         CUPS 2.5 ippFileGetAttributes

        Get the current set of attributes from an IPP data file.

        ipp_t *ippFileGetAttributes(ipp_file_t *file);

        @@ -9917,8 +10239,10 @@ state.

        Return Value

        IPP attributes

        Discussion

        -

        This function gets the current set of attributes from an IPP data file.

        -

        ippFileGetFilename

        +

        This function gets the current set of attributes from an IPP data file. + +

        +

         CUPS 2.5 ippFileGetFilename

        Get the filename for an IPP data file.

        const char *ippFileGetFilename(ipp_file_t *file);

        @@ -9930,8 +10254,10 @@ state.

        Return Value

        Filename

        Discussion

        -

        This function returns the filename associated with an IPP data file.

        -

        ippFileGetLineNumber

        +

        This function returns the filename associated with an IPP data file. + +

        +

         CUPS 2.5 ippFileGetLineNumber

        Get the current line number in an IPP data file.

        int ippFileGetLineNumber(ipp_file_t *file);

        @@ -9943,8 +10269,10 @@ state.

        Return Value

        Line number

        Discussion

        -

        This function returns the current line number in an IPP data file.

        -

        ippFileGetVar

        +

        This function returns the current line number in an IPP data file. + +

        +

         CUPS 2.5 ippFileGetVar

        Get the value of an IPP data file variable.

        const char *ippFileGetVar(ipp_file_t *file, const char *name);

        @@ -9959,9 +10287,11 @@ state.

        Variable value or NULL if none.

        Discussion

        This function returns the value of an IPP data file variable. NULL is -returned if the variable is not set.

        -

        ippFileNew

        -

        Create a new IPP data file object for reading or writing.

        +returned if the variable is not set. + +

        +

         CUPS 2.5 ippFileNew

        +

        Create a new IPP data file object in preparation for reading or writing.

        ipp_file_t *ippFileNew(ipp_file_t *parent, ipp_fattr_cb_t attr_cb, ipp_ferror_cb_t error_cb, void *cb_data);

        Parameters

        @@ -9978,10 +10308,14 @@ returned if the variable is not set.

        Return Value

        IPP data file

        Discussion

        -

        This function opens an IPP data file for reading (mode="r") or writing -(mode="w"). If the "parent" argument is not NULL, all variables from the -parent data file are copied to the new file.

        -

        ippFileOpen

        +

        This function creates a new IPP data file object. If the "parent" argument +is not NULL, all variables from the parent data file are copied to the new +object.
        +
        +Call the ippFileOpen function to open the IPP data file. + +

        +

         CUPS 2.5 ippFileOpen

        Open an IPP data file for reading or writing.

        bool ippFileOpen(ipp_file_t *file, const char *filename, const char *mode);

        @@ -9997,10 +10331,11 @@ parent data file are copied to the new file.

        Return Value

        true on success, false on error

        Discussion

        -

        This function opens an IPP data file for reading (mode="r") or writing -(mode="w"). If the "parent" argument is not NULL, all variables from the -parent data file are copied to the new file.

        -

        ippFileRead

        +

        This function opens the IPP data file specified by the "filename" argument +for reading ("mode" is "r") or writing ("mode" is "w"). + +

        +

         CUPS 2.5 ippFileRead

        Read an IPP data file.

        bool ippFileRead(ipp_file_t *file, ipp_ftoken_cb_t token_cb, bool with_groups);

        @@ -10015,7 +10350,17 @@ parent data file are copied to the new file.

        Return Value

        true on success, false on error

        -

        ippFileReadCollection

        +

        Discussion

        +

        This function reads tokens from an IPP data file, processes standard +directives that define attributes and values, and passes on unknown tokens +to the token callback "token_cb" for processing.
        +
        +If the "with_groups" argument is true then the "GROUP" directive will be +supported for specifying the attribute group(s) associated with any +defined attributes. + +

        +

         CUPS 2.5 ippFileReadCollection

        Read a collection from an IPP data file.

        ipp_t *ippFileReadCollection(ipp_file_t *file);

        @@ -10029,8 +10374,10 @@ parent data file are copied to the new file.

        Discussion

        This function reads a collection value from an IPP data file. Collection values are surrounded by curly braces ("{" and "}") and have "MEMBER" -directives to define member attributes in the collection.

        -

        ippFileReadToken

        +directives to define member attributes in the collection. + +

        +

         CUPS 2.5 ippFileReadToken

        Read a token from an IPP data file.

        bool ippFileReadToken(ipp_file_t *file, char *token, size_t tokensize);

        @@ -10047,8 +10394,10 @@ directives to define member attributes in the collection.

        true on success, false on error

        Discussion

        This function reads a single token or value from an IPP data file, skipping -comments and whitespace as needed.

        -

        ippFileRestorePosition

        +comments and whitespace as needed. + +

        +

         CUPS 2.5 ippFileRestorePosition

        Restore the previous position in an IPP data file.

        bool ippFileRestorePosition(ipp_file_t *file);

        @@ -10061,8 +10410,10 @@ comments and whitespace as needed.

        true on success, false on failure

        Discussion

        This function restores the previous position in an IPP data file that is open -for reading.

        -

        ippFileSavePosition

        +for reading. + +

        +

         CUPS 2.5 ippFileSavePosition

        Save the current position in an IPP data file.

        bool ippFileSavePosition(ipp_file_t *file);

        @@ -10075,8 +10426,10 @@ for reading.

        true on success, false on failure

        Discussion

        This function saves the current position in an IPP data file that is open -for reading.

        -

        ippFileSetAttributes

        +for reading. + +

        +

         CUPS 2.5 ippFileSetAttributes

        Set the attributes for an IPP data file.

        bool ippFileSetAttributes(ipp_file_t *file, ipp_t *attrs);

        @@ -10091,8 +10444,10 @@ for reading.

        true on success, false otherwise

        Discussion

        This function sets the current set of attributes for an IPP data file, -typically an empty collection created with ippNew.

        -

        ippFileSetGroupTag

        +typically an empty collection created with ippNew. + +

        +

         CUPS 2.5 ippFileSetGroupTag

        Set the group tag for an IPP data file.

        bool ippFileSetGroupTag(ipp_file_t *file, ipp_tag_t group_tag);

        @@ -10107,8 +10462,10 @@ typically an empty collection created with ippNew

        true on success, false otherwise

        Discussion

        This function sets the group tag associated with attributes that are read -from an IPP data file.

        -

        ippFileSetVar

        +from an IPP data file. + +

        +

         CUPS 2.5 ippFileSetVar

        Set an IPP data file variable to a constant value.

        bool ippFileSetVar(ipp_file_t *file, const char *name, const char *value);

        @@ -10126,8 +10483,10 @@ from an IPP data file.

        Discussion

        This function sets an IPP data file variable to a constant value. Setting the "uri" variable also initializes the "scheme", "uriuser", "hostname", -"port", and "resource" variables.

        -

        ippFileSetVarf

        +"port", and "resource" variables. + +

        +

         CUPS 2.5 ippFileSetVarf

        Set an IPP data file variable to a formatted value.

        bool ippFileSetVarf(ipp_file_t *file, const char *name, const char *value, ...);

        @@ -10147,8 +10506,10 @@ the "uri" variable also initializes the "scheme", "uriu

        Discussion

        This function sets an IPP data file variable to a formatted value. Setting the "uri" variable also initializes the "scheme", "uriuser", "hostname", -"port", and "resource" variables.

        -

        ippFileWriteAttributes

        +"port", and "resource" variables. + +

        +

         CUPS 2.5 ippFileWriteAttributes

        Write an IPP message to an IPP data file.

        bool ippFileWriteAttributes(ipp_file_t *file, ipp_t *ipp, bool with_groups);

        @@ -10167,8 +10528,10 @@ the "uri" variable also initializes the "scheme", "uriu

        This function writes an IPP message to an IPP data file using the attribute filter specified in the call to ippFileOpen. If "with_group" is true, "GROUP" directives are written as necessary to place the attributes -in the correct groups.

        -

        ippFileWriteComment

        +in the correct groups. + +

        +

         CUPS 2.5 ippFileWriteComment

        Write a comment to an IPP data file.

        bool ippFileWriteComment(ipp_file_t *file, const char *comment, ...);

        @@ -10185,8 +10548,10 @@ in the correct groups.

        true on success, false on error

        Discussion

        This function writes a comment to an IPP data file. Every line in the string -is prefixed with the "#" character and indented as needed.

        -

        ippFileWriteToken

        +is prefixed with the "#" character and indented as needed. + +

        +

         CUPS 2.5 ippFileWriteToken

        Write a token or value string to an IPP data file.

        bool ippFileWriteToken(ipp_file_t *file, const char *token);

        @@ -10201,8 +10566,10 @@ is prefixed with the "#" character and indented as needed.

        true on success, false on error

        Discussion

        This function writes a token or value string to an IPP data file, quoting -and indenting the string as needed.

        -

        ippFileWriteTokenf

        +and indenting the string as needed. + +

        +

         CUPS 2.5 ippFileWriteTokenf

        Write a formatted token or value string to an IPP data file.

        bool ippFileWriteTokenf(ipp_file_t *file, const char *token, ...);

        @@ -10219,9 +10586,11 @@ and indenting the string as needed.

        true on success, false on error

        Discussion

        This function writes a formatted token or value string to an IPP data file, -quoting and indenting the string as needed.

        +quoting and indenting the string as needed. + +

        ippFindAttribute

        -

        Find a named attribute in a request.

        +

        Find a named attribute in an IPP message.

        ipp_attribute_t *ippFindAttribute(ipp_t *ipp, const char *name, ipp_tag_t type);

        Parameters

        @@ -10240,7 +10609,7 @@ quoting and indenting the string as needed.

        message. The attribute name can contain a hierarchical list of attribute and member names separated by slashes, for example "media-col/media-size".

        ippFindNextAttribute

        -

        Find the next named attribute in a request.

        +

        Find the next named attribute in an IPP message.

        ipp_attribute_t *ippFindNextAttribute(ipp_t *ipp, const char *name, ipp_tag_t type);

        Parameters

        @@ -10267,13 +10636,13 @@ separated by slashes, for example "media-col/media-size".

        attr IPP attribute element -Value number (0-based) +Value number (0-based)

        Return Value

        -

        Boolean value or 0 on error

        +

        Boolean value or 0 on error

        Discussion

        -

        The "element" parameter specifies which value to get from 0 to -ippGetCount(attr) - 1. +

        The "element" argument specifies which value to get from 0 to +ippGetCount(attr) - 1.

         CUPS 1.6 ippGetCollection

        @@ -10285,13 +10654,13 @@ separated by slashes, for example "media-col/media-size".

        attr IPP attribute element -Value number (0-based) +Value number (0-based)

        Return Value

        Collection value or NULL on error

        Discussion

        -

        The "element" parameter specifies which value to get from 0 to -ippGetCount(attr) - 1. +

        The "element" argument specifies which value to get from 0 to +ippGetCount(attr) - 1.

         CUPS 1.6 ippGetCount

        @@ -10314,13 +10683,13 @@ separated by slashes, for example "media-col/media-size".

        attr IPP attribute element -Value number (0-based) +Value number (0-based)

        Return Value

        dateTime value or NULL

        Discussion

        -

        The "element" parameter specifies which value to get from 0 to -ippGetCount(attr) - 1. +

        The "element" argument specifies which value to get from 0 to +ippGetCount(attr) - 1.

         CUPS 2.5 ippGetFirstAttribute

        @@ -10354,13 +10723,13 @@ ipp_tag_t ippGetGroupTag(ipp_attribute_t *attr);< attr IPP attribute element -Value number (0-based) +Value number (0-based)

        Return Value

        Value or 0 on error

        Discussion

        -

        The "element" parameter specifies which value to get from 0 to -ippGetCount(attr) - 1. +

        The "element" argument specifies which value to get from 0 to +ippGetCount(attr) - 1.

        ippGetLength

        @@ -10405,15 +10774,15 @@ size_t ippGetLength(ipp_t *ipp);

        attr IPP attribute element -Value number (0-based) +Value number (0-based) datalen Length of octetString data

        Return Value

        Pointer to octetString data

        Discussion

        -

        The "element" parameter specifies which value to get from 0 to -ippGetCount(attr) - 1. +

        The "element" argument specifies which value to get from 0 to +ippGetCount(attr) - 1.

         CUPS 1.6 ippGetOperation

        @@ -10442,15 +10811,15 @@ size_t ippGetLength(ipp_t *ipp);

        attr IPP attribute element -Value number (0-based) +Value number (0-based) uppervalue Upper value of range

        Return Value

        Lower value of range or 0

        Discussion

        -

        The "element" parameter specifies which value to get from 0 to -ippGetCount(attr) - 1. +

        The "element" argument specifies which value to get from 0 to +ippGetCount(attr) - 1.

         CUPS 1.6 ippGetRequestId

        @@ -10473,7 +10842,7 @@ size_t ippGetLength(ipp_t *ipp);

        attr IPP attribute element -Value number (0-based) +Value number (0-based) yres Vertical/feed resolution units @@ -10482,8 +10851,8 @@ size_t ippGetLength(ipp_t *ipp);

        Return Value

        Horizontal/cross feed resolution or 0

        Discussion

        -

        The "element" parameter specifies which value to get from 0 to -ippGetCount(attr) - 1. +

        The "element" argument specifies which value to get from 0 to +ippGetCount(attr) - 1.

         CUPS 1.6 ippGetState

        @@ -10517,14 +10886,14 @@ ipp_status_t ippGetStatusCode(ipp_t *ipp);

        attr IPP attribute element -Value number (0-based) +Value number (0-based) language Language code (NULL for don't care)

        Return Value

        Get the string and optionally the language code for an attribute.

        -

        The "element" parameter specifies which value to get from 0 to -ippGetCount(attr) - 1. +

        The "element" argument specifies which value to get from 0 to +ippGetCount(attr) - 1.

         CUPS 1.6 ippGetValueTag

        @@ -10690,19 +11059,19 @@ respectively. attr IPP attribute element -Value number (0-based) +Value number (0-based) boolvalue Boolean value

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value.
        +The "attr" argument may be modified as a result of setting the value.

        -The "element" parameter specifies which value to set from 0 to +The "element" argument specifies which value to set from 0 to ippGetCount(attr).

        @@ -10717,19 +11086,19 @@ The "element" parameter specifies which value to set from 0 to attr IPP attribute element -Value number (0-based) +Value number (0-based) colvalue Collection value

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value.
        +The "attr" argument may be modified as a result of setting the value.

        -The "element" parameter specifies which value to set from 0 to +The "element" argument specifies which value to set from 0 to ippGetCount(attr).

        @@ -10744,19 +11113,19 @@ The "element" parameter specifies which value to set from 0 to attr IPP attribute element -Value number (0-based) +Value number (0-based) datevalue dateTime value

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value.
        +The "attr" argument may be modified as a result of setting the value.

        -The "element" parameter specifies which value to set from 0 to +The "element" argument specifies which value to set from 0 to ippGetCount(attr).

        @@ -10774,14 +11143,14 @@ The "element" parameter specifies which value to set from 0 to Group tag

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value.
        +The "attr" argument may be modified as a result of setting the value.

        -The "group" parameter specifies the IPP attribute group tag: none +The "group" argument specifies the IPP attribute group tag: none (IPP_TAG_ZERO, for member attributes), document (IPP_TAG_DOCUMENT), event notification (IPP_TAG_EVENT_NOTIFICATION), operation (IPP_TAG_OPERATION), printer (IPP_TAG_PRINTER), subscription @@ -10799,19 +11168,19 @@ event notification (IPP_TAG_EVENT_NOTIFICATION), operation attr IPP attribute element -Value number (0-based) +Value number (0-based) intvalue Integer/enum value

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value.
        +The "attr" argument may be modified as a result of setting the value.

        -The "element" parameter specifies which value to set from 0 to +The "element" argument specifies which value to set from 0 to ippGetCount(attr).

        @@ -10829,12 +11198,12 @@ The "element" parameter specifies which value to set from 0 to Attribute name

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value. +The "attr" argument may be modified as a result of setting the value.

         CUPS 1.7 ippSetOctetString

        @@ -10848,21 +11217,21 @@ The "attr" parameter may be modified as a result of setting the value. attr IPP attribute element -Value number (0-based) +Value number (0-based) data Pointer to octetString data datalen Length of octetString data

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value.
        +The "attr" argument may be modified as a result of setting the value.

        -The "element" parameter specifies which value to set from 0 to +The "element" argument specifies which value to set from 0 to ippGetCount(attr).

        @@ -10878,9 +11247,9 @@ The "element" parameter specifies which value to set from 0 to Operation ID

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        @@ -10904,21 +11273,21 @@ the ippNew, ip attr IPP attribute element -Value number (0-based) +Value number (0-based) lowervalue Lower bound for range uppervalue Upper bound for range

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value.
        +The "attr" argument may be modified as a result of setting the value.

        -The "element" parameter specifies which value to set from 0 to +The "element" argument specifies which value to set from 0 to ippGetCount(attr).

        @@ -10934,12 +11303,12 @@ The "element" parameter specifies which value to set from 0 to Request ID

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The request_id parameter must be greater than 0. +The "request_id" argument must be greater than 0.

         CUPS 1.6 ippSetResolution

        @@ -10953,7 +11322,7 @@ The request_id parameter must be greater than 0. attr IPP attribute element -Value number (0-based) +Value number (0-based) unitsvalue Resolution units xresvalue @@ -10962,14 +11331,14 @@ The request_id parameter must be greater than 0. Vertical/feed resolution

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value.
        +The "attr" argument may be modified as a result of setting the value.

        -The "element" parameter specifies which value to set from 0 to +The "element" argument specifies which value to set from 0 to ippGetCount(attr).

        @@ -10985,7 +11354,7 @@ The "element" parameter specifies which value to set from 0 to IPP state value

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

         CUPS 1.6 ippSetStatusCode

        Set the status code in an IPP response or event message.

        @@ -10998,9 +11367,9 @@ The "element" parameter specifies which value to set from 0 to Status code

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        @@ -11015,19 +11384,19 @@ the ippNew, ip attr IPP attribute element -Value number (0-based) +Value number (0-based) strvalue String value

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value.
        +The "attr" argument may be modified as a result of setting the value.

        -The "element" parameter specifies which value to set from 0 to +The "element" argument specifies which value to set from 0 to ippGetCount(attr).

        @@ -11042,24 +11411,24 @@ The "element" parameter specifies which value to set from 0 to attr IPP attribute element -Value number (0-based) +Value number (0-based) format Printf-style format string ... Additional arguments as needed

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value.
        +The "attr" argument may be modified as a result of setting the value.

        -The "element" parameter specifies which value to set from 0 to +The "element" argument specifies which value to set from 0 to ippGetCount(attr).

        -The "format" parameter uses formatting characters compatible with the +The "format" argument uses formatting characters compatible with the printf family of standard functions. Additional arguments follow it as needed. The formatted string is truncated as needed to the maximum length of the corresponding value type. @@ -11076,24 +11445,24 @@ the corresponding value type. attr IPP attribute element -Value number (0-based) +Value number (0-based) format Printf-style format string ap Pointer to additional arguments

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value.
        +The "attr" argument may be modified as a result of setting the value.

        -The "element" parameter specifies which value to set from 0 to +The "element" argument specifies which value to set from 0 to ippGetCount(attr).

        -The "format" parameter uses formatting characters compatible with the +The "format" argument uses formatting characters compatible with the printf family of standard functions. Additional arguments follow it as needed. The formatted string is truncated as needed to the maximum length of the corresponding value type. @@ -11113,12 +11482,12 @@ the corresponding value type. Value tag

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        -The "attr" parameter may be modified as a result of setting the value.
        +The "attr" argument may be modified as a result of setting the value.

        Integer (IPP_TAG_INTEGER) values can be promoted to rangeOfInteger (IPP_TAG_RANGE) values, the various string tags can be promoted to name @@ -11128,9 +11497,9 @@ Integer (IPP_TAG_INTEGER) values can be promoted to rangeOfInteger out-of-band value tags such as no-value (IPP_TAG_NOVALUE). All other changes will be rejected.

        -Promoting a string attribute to nameWithLanguage or textWithLanguage adds the language -code in the "attributes-natural-language" attribute or, if not present, the language -code for the current locale. +Promoting a string attribute to nameWithLanguage or textWithLanguage adds the +language code in the "attributes-natural-language" attribute or, if not +present, the language code for the current locale.

         CUPS 1.6 ippSetVersion

        @@ -11147,9 +11516,9 @@ code for the current locale. Minor version number (major.minor)

        Return Value

        -

        1 on success, 0 on failure

        +

        1 on success, 0 on failure

        Discussion

        -

        The "ipp" parameter refers to an IPP message previously created using +

        The "ipp" argument refers to an IPP message previously created using the ippNew, ippNewRequest, or ippNewResponse functions.

        The valid version numbers are currently 1.0, 1.1, 2.0, 2.1, and 2.2. @@ -11217,10 +11586,10 @@ ipp_tag_t ippTagValue(const Attribute

        Return Value

        -

        1 if valid, 0 otherwise

        +

        1 if valid, 0 otherwise

        Discussion

        This function validates the contents of an attribute based on the name and -value tag. 1 is returned if the attribute is valid, 0 otherwise. On +value tag. 1 is returned if the attribute is valid, 0 otherwise. On failure, cupsGetErrorString is set to a human-readable message.

        @@ -11234,7 +11603,7 @@ failure, cupsGetErrorString is se IPP message

        Return Value

        -

        1 if valid, 0 otherwise

        +

        1 if valid, 0 otherwise

        Discussion

        This function validates the contents of the IPP message, including each attribute. Like ippValidateAttribute, cupsGetErrorString is @@ -11666,7 +12035,7 @@ typedef pthread_mutex_t cups_mutex_t;

         CUPS 2.4 cups_oauth_cb_t

        OAuth callback

        -typedef const char *(*)(http_t *http, const char *realm, const char *scope, const char *resource, void *user_data)cups_oauth_cb_t; +typedef const char *(*)(http_t *http, const char *realm, const char *scope, const char *resource, void *cb_data)cups_oauth_cb_t;

        cups_ogrant_t

        OAuth Grant Types

        @@ -11701,7 +12070,7 @@ typedef struct cups_page_header_s cups_page_he

         CUPS 1.4 cups_password_cb2_t

        New password callback

        -typedef const char *(*)(const char *prompt, http_t *http, const char *method, const char *resource, void *user_data)cups_password_cb2_t; +typedef const char *(*)(const char *prompt, http_t *http, const char *method, const char *resource, void *cb_data)cups_password_cb2_t;

        cups_ptype_t

        Combined printer type/capability flags

        -- 2.47.3
  • Creating an IPP Request