org.bluez.ProfileManager

title: org.bluez.ProfileManager(5)

text:
# org.bluez.ProfileManager(5)

## NAME
org.bluez.ProfileManager - BlueZ D-Bus ProfileManager API documentation

## INTERFACE
Service

org.bluez

Interface

org.bluez.ProfileManager1

Object path

/org/bluez

### void RegisterProfile(object profile, string uuid, dict options)
Registers profile agent.

The object path defines the path of the profile that will be called when there is a connection and must implement org.bluez.Profile(5) interface.

If an application disconnects from the bus all its registered profiles will be removed.

Possible uuid values:

"0000111f-0000-1000-8000-00805f9b34fb"

HFP AG, default profile Version is 1.7, profile Features is 0b001001 and RFCOMM channel is 13. Authentication is required.

"0000111e-0000-1000-8000-00805f9b34fb"

HFP HS, default profile Version is 1.7, profile Features is 0b000000 and RFCOMM channel is 7. Authentication is required.

"00001112-0000-1000-8000-00805f9b34fb"

HSP AG, default profile Version is 1.2, RFCOMM channel is 12 and Authentication is required. Does not support any Features, option is ignored.

"00001108-0000-1000-8000-00805f9b34fb"

HSP HS, default profile Version is 1.2, profile Features is 0b0 and RFCOMM channel is 6. Authentication is required. Features is one bit value, specify capability of Remote Audio Volume Control (by default turned off).

"<vendor UUID>"

Vendor defined UUID, no defaults, must set options.

Possible options values:

string Name

Human readable name for the profile

string Service

The primary service class UUID (if different from the actual profile UUID).

string Role

For asymmetric profiles that do not have UUIDs available to uniquely identify each side this parameter allows specifying the precise local role. Possible values:

"client"

"server"

uint16 Channel

RFCOMM channel number that is used for client and server UUIDs. If applicable it will be used in the SDP record as well.

uint16 PSM

PSM number that is used for client and server UUIDs. If applicable it will be used in the SDP record as well.

boolean RequireAuthentication

Pairing is required before connections will be established. No devices will be connected if not paired.

boolean RequireAuthorization

Request authorization before any connection will be established.

boolean AutoConnect

In case of a client UUID this will force connection of the RFCOMM or L2CAP channels when a remote device is connected.

string ServiceRecord

Provide a manual SDP record.

uint16 Version

Profile version (for SDP record)

uint16 Features

Profile features (for SDP record)

Possible errors:

org.bluez.Error.InvalidArguments

org.bluez.Error.AlreadyExists

### void UnregisterProfile(object profile)
Unregisters profile object that has been previously registered using RegisterProfile.

The object path parameter must match the same value that has been used on registration.

Possible errors:

org.bluez.Error.DoesNotExist


org.bluez.Telephony

package: libbluez-devel

title: org.bluez.Telephony(5)

text:
# org.bluez.Telephony(5)

## NAME
org.bluez.Telephony1 - BlueZ D-Bus Telephony Audio Gateway API documentation

## INTERFACE
Service

org.bluez

Interface

org.bluez.Telephony1 [experimental]

Object path

[variable prefix]/{hci0,hci1,...}/dev_{BDADDR}/telephony#

Used by

bluetoothctl-telephony(1)

### object Dial(string uri)
The uri is comprised of the URI scheme followed by the Caller ID (this could be a telephone number or username), separated by a colon.

Examples of common URI schemes can be found in Internet Assigned Numbers Authority (IANA) URI Schemes: https://iana.org/assignments/uri-schemes/uri-schemes.xhtml

This initiates a new outgoing call. Returns the object path to the newly created call.

For HFP the URI is "tel:" followed by the telephone number.

The telephone number must be a string containing the following characters: [0-9+*#,ABCD]{1,80} The character set can contain numbers, +, *, #, , and the letters A to D. Besides this sanity checking no further number validation is performed. It is assumed that the gateway and/or the network will perform further validation.

If telephone number is an empty string, it will try to call last dialed number.

NOTE: If an active call (single or multiparty) exists, then it is automatically put on hold if the dial procedure is successful.

Possible Errors:

org.bluez.Error.InvalidState

org.bluez.Error.InvalidArguments

org.bluez.Error.NotSupported

org.bluez.Error.Failed

Examples:

bluetoothctl

> telephony.dial <number> [telephony]

### void SwapCalls()
Swaps Active and Held calls. The effect of this is that all calls (0 or more including calls in a multi-party conversation) that were Active are now Held, and all calls (0 or more) that were Held are now Active.

GSM specification does not allow calls to be swapped in the case where Held, Active and Waiting calls exist. Some modems implement this anyway, thus it is manufacturer specific whether this method will succeed in the case of Held, Active and Waiting calls.

Possible Errors: :org.bluez.Error.InvalidState :org.bluez.Error.Failed

### void ReleaseAndAnswer()
Releases currently active call (0 or more) and answers the currently waiting call. Please note that if the current call is a multiparty call, then all parties in the multi-party call will be released.

Possible Errors: :org.bluez.Error.InvalidState :org.bluez.Error.Failed

### void ReleaseAndSwap()
Releases currently active call (0 or more) and activates any currently held calls. Please note that if the current call is a multiparty call, then all parties in the multi-party call will be released.

Possible Errors: :org.bluez.Error.InvalidState :org.bluez.Error.Failed

### void HoldAndAnswer()
Puts the current call (including multi-party calls) on hold and answers the currently waiting call. Calling this function when a user already has a both Active and Held calls is invalid, since in GSM a user can have only a single Held call at a time.

Possible Errors: :org.bluez.Error.InvalidState :org.bluez.Error.Failed

### void HangupAll()
Releases all calls except waiting calls. This includes multiparty calls.

Possible Errors: :org.bluez.Error.InvalidState :org.bluez.Error.Failed

Examples:

bluetoothctl

> telephony.hangup-all [telephony]

### void HangupActive()
Releases active calls. This includes multiparty active calls.

Possible Errors: :org.bluez.Error.InvalidState :org.bluez.Error.Failed

### void HangupHeld()
Releases held calls except waiting calls. This includes multiparty held calls.

Possible Errors: :org.bluez.Error.InvalidState :org.bluez.Error.Failed

### array{object} CreateMultiparty()
Joins active and held calls together into a multi-party call. If one of the calls is already a multi-party call, then the other call is added to the multiparty conversation. Returns the new list of calls participating in the multiparty call.

There can only be one subscriber controlled multi-party call according to the GSM specification.

Possible Errors: :org.bluez.Error.InvalidState :org.bluez.Error.Failed

### void SendTones(string tones)
Sends the DTMF tones to the network. The tones have a fixed duration. Tones can be one of: '0' - '9', '*', '#', 'A', 'B', 'C', 'D'. The last four are typically not used in normal circumstances.

Possible Errors: :org.bluez.Error.InvalidState :org.bluez.Error.InvalidArgs :org.bluez.Error.Failed

### string UUID [readonly]
UUID of the profile which the Telephony Audio Gateway is for.

### array{string} SupportedURISchemes [readonly]
Contains the list of supported URI schemes.

### string State [readonly]
Contains the state of the current connection.

Possible values:

"connecting"

RFComm connection in progress

"slc_connecting"

Service Level Connection in progress

"connected"

RFComm and Service Level Connection are connected

"disconnecting"

No further use of this object is allowed, it will be destroyed shortly

### boolean Service [readonly]
Network service availability.

### byte Signal [readonly]
Network level signal from 0 to 5.

### boolean Roaming [readonly]
Network roaming usage.

### byte BattChg [readonly]
Battery level from 0 to 5.

### string OperatorName [readonly, optional]
Operator name

### boolean InbandRingtone [readonly]
In-band Ringtone availability.


org.bluez.Thermometer

title: org.bluez.Thermometer(5)

text:
# org.bluez.Thermometer(5)

## NAME
org.bluez.Thermometer - BlueZ D-Bus Health Thermometer API documentation

## INTERFACE
Service

org.bluez

Interface

org.bluez.Thermometer1

Object path

[variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX

### boolean Intermediate [readonly]
True if the thermometer supports intermediate measurement notifications.

### uint16 Interval (optional) [readwrite]
The Measurement Interval defines the time (in seconds) between measurements. This interval is not related to the intermediate measurements and must be defined into a valid range. Setting it to zero means that no periodic measurements will be taken.

### uint16 Maximum (optional) [readonly]
Defines the maximum value allowed for the interval between periodic measurements.

### uint16 Minimum (optional) [readonly]
Defines the minimum value allowed for the interval between periodic measurements.

## AUTHOR
Santiago Carot-Nemesio <sancane@gmail.com>


org.bluez.ThermometerManager

title: org.bluez.ThermometerManager(5)

text:
# org.bluez.ThermometerManager(5)

## NAME
org.bluez.ThermometerManager - BlueZ D-Bus Health ThermometerManager API documentation

## INTERFACE
Service

org.bluez

Interface

org.bluez.ThermometerManager1

Object path

[variable prefix]/{hci0,hci1,...}

### void RegisterWatcher(object agent)
Registers a watcher to monitor scanned measurements. This agent will be notified about final temperature measurements.

Possible Errors:

org.bluez.Error.InvalidArguments

### void UnregisterWatcher(object agent)
Unregisters a watcher.

### void EnableIntermediateMeasurement(object agent)
Enables intermediate measurement notifications for this agent. Intermediate measurements will be enabled only for thermometers which support it.

Possible Errors:

org.bluez.Error.InvalidArguments

### void DisableIntermediateMeasurement(object agent)
Disables intermediate measurement notifications for this agent. It will disable notifications in thermometers when the last agent removes the watcher for intermediate measurements.

Possible Errors:

org.bluez.Error.InvalidArguments

org.bluez.Error.NotFound

## AUTHOR
Santiago Carot-Nemesio <sancane@gmail.com>


org.bluez.ThermometerWatcher

title: org.bluez.ThermometerWatcher(5)

text:
# org.bluez.ThermometerWatcher(5)

## NAME
org.bluez.ThermometerWatcher - BlueZ D-Bus Health Thermometer Watcher API documentation

## INTERFACE
Service

unique name

Interface

org.bluez.ThermometerWatcher1

Object path

freely definable

### void MeasurementReceived(dict measurement)
This callback gets called when a measurement has been scanned in the thermometer.

Possible measurement values:

int16 Exponent

int32 Mantissa

Exponent and Mantissa values as extracted from float value defined by IEEE-11073-20601. Measurement value is calculated as (Mantissa) * (10^Exponent)

For special cases Exponent is set to 0 and Mantissa is set to one of following values:

Value

Description

+(2^23 - 1)

NaN (invalid or missing data)

-(2^23)

NRes

+(2^23 - 2)

+Infinity

-(2^23 - 2)

-Infinity

string Unit

Possible values: "celsius" or

"fahrenheit"

uint64 Time (optional)

Time of measurement, if supported by device. Expressed in seconds since epoch.

string Type (optional)

Only present if measurement type is known.

Possible values: "armpit", "body",

"ear", "finger", "intestines", "mouth", "rectum", "toe", "tympanum"

string Measurement

Possible values: "final" or "intermediate"

## AUTHOR
Santiago Carot-Nemesio <sancane@gmail.com>


org.bluez.obex.Agent

title: org.bluez.obex.Agent(5)

text:
# org.bluez.obex.Agent(5)

## NAME
org.bluez.obex.Agent - BlueZ D-Bus OBEX Agent API documentation

## INTERFACE
Service

unique name

Interface

org.bluez.obex.Agent1

Object path

freely definable

### void Release()
This method gets called when obexd(8) daemon unregisters the agent.

An agent can use it to do cleanup tasks. There is no need to unregister the agent, because when this method gets called it has already been unregistered.

### string AuthorizePush(object transfer)
This method gets called when the obexd(8) needs to accept/reject a Bluetooth object push request.

Returns the full path (including the filename) or the folder name suffixed with '/' where the object shall be stored.

The transfer object, see org.bluez.obex.Transfer(5) will contain a Filename property that contains the default location and name that can be returned.

Possible errors:

org.bluez.obex.Error.Rejected

org.bluez.obex.Error.Canceled

### void Cancel()
This method gets called to indicate that the agent request failed before a reply was returned. It cancels the previous request.


org.bluez.obex.AgentManager

title: org.bluez.obex.AgentManager(5)

text:
# org.bluez.obex.AgentManager(5)

## NAME
org.bluez.obex.AgentManager - BlueZ D-Bus OBEX AgentManager API documentation

## INTERFACE
Service

org.bluez.obex

Interface

org.bluez.obex.AgentManager1

Object path

/org/bluez/obex

### void RegisterAgent(object agent)
Registers an agent, which must implement org.bluez.obex.Agent(5), to request authorization of the user to accept/reject objects.

Object push service needs to authorize each received object.

Possible errors:

org.bluez.obex.Error.AlreadyExists

### void UnregisterAgent(object agent)
Unregisters the agent that has been previously registered using RegisterAgent().

The object path parameter must match the same value that has been used on registration.

Possible errors:

org.bluez.obex.Error.DoesNotExist


org.bluez.obex.Client

title: org.bluez.obex.Client(5)

text:
# org.bluez.obex.Client(5)

## NAME
org.bluez.obex.Client - BlueZ D-Bus OBEX Client API documentation

## INTERFACE
Service

org.bluez.obex

Interface

org.bluez.obex.Client1

Object path

/org/bluez/obex

### object CreateSession(string destination, dict args)
Connects to the destination address and then proceed to create an OBEX session object which implements org.bluez.obex.Session(5) interface.

The last parameter is a dictionary to hold optional or type-specific parameters.

Possible args values:

string Target

Type of session to be created. Possible values:

"ftp"

"map"

"opp"

"pbap"

"sync"

"bip-avrcp"

string Source

Local address to be used.

byte Channel

Channel to be used.

uint16 PSM

L2CAP PSM to be used.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### void RemoveSession(object session)
Disconnects and removes session previously created by CreateSession() aborting any pending transfers.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.NotAuthorized


org.bluez.obex.FileTransfer

title: org.bluez.obex.FileTransfer(5)

text:
# org.bluez.obex.FileTransfer(5)

## NAME
org.bluez.obex.FileTransfer - BlueZ D-Bus OBEX FileTransfer API documentation

## INTERFACE
Service

org.bluez.obex

Interface

org.bluez.obex.FileTransfer1

Object path

[Session object path]

### void ChangeFolder(string folder)
Changes the current folder of the remote device.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### void CreateFolder(string folder)
Creates a new folder in the remote device.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### array{dict} ListFolder()
Returns a dictionary containing information about the current folder content.

Possible return values:

string Name

Object name in UTF-8 format.

string Type

Either "folder" or "file".

uint64 Size

Object size or number of items in folder.

string Permission

Group, owner and other permission.

uint64 Modified

Last change.

uint64 Accessed

Last access.

uint64 Created

Creation date.

Possible errors:

org.bluez.obex.Error.Failed

### object, dict GetFile(string targetfile, string sourcefile)
Copies the contents of the source file (from remote device) to the target file (on local filesystem).

If an empty target file is given, a name will be automatically generated for the temporary file.

The returned path represents the newly created transfer, which should be used to find out if the content has been successfully transferred or if the operation fails.

The properties of this transfer are also returned along with the object path, to avoid a call to GetProperties, see org.bluez.obex.Transfer(5) for the possible list of properties.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### object, dict PutFile(string sourcefile, string targetfile)
Copies the contents of the source file (from local filesystem) to the target file (on remote device).

The returned path represents the newly created transfer, which should be used to find out if the content has been successfully transferred or if the operation fails.

The properties of this transfer are also returned along with the object path, to avoid a call to GetProperties, see org.bluez.obex.Transfer(5) for the possible list of properties.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### void CopyFile(string sourcefile, string targetfile)
Copies the contents from source file to target file on the remote device.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### void MoveFile(string sourcefile, string targetfile)
Moves a file within the remote device from source file to the target file.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### void Delete(string file)
Deletes the specified file/folder.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed


org.bluez.obex.Image

title: org.bluez.obex.Image(5)

text:
# org.bluez.obex.Image(5)

## NAME
org.bluez.obex.Image - BlueZ D-Bus OBEX Image API documentation

## INTERFACE
Service

org.bluez.obex

Interface

org.bluez.obex.Image1 [experimental]

Object path

[Session object path]

### object, dict Get(string targetfile, string handle, dict description)
Retrieves the image corresponding to the handle and the description, as one of the descriptions retrieved by GetImageProperties, and store it in a local file.

If the "transform" property description exists it should be set to one of the value listed by GetImageProperties for this description.

If description is an empty dict, the native image will be retrieved.

Possible errors: org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### array{dict} Properties(string handle)
Retrieves the image properties corresponding to the handle.

The first dict entry is mandatory and correspond to 'handle' and 'name' of the image.

The second dict entry is mandatory and correspond to the native description ('type':'native') of the image.

The following dict entries are optional and correspond to variant descriptions of the image. If the 'transform' entry exists in the description, it lists the available possible image transformations and should be set to one of them before using the description as parameter to GetImage.

Possible property values:

string type

Type of dict properties. Mandatory for each dict. Possible values:

"native"

"variant"

string encoding

File encoding format. Possible values:

"BMP"

"GIF"

"JPEG"

"JPEG2000"

"PNG"

"WBMP"

string pixel

File encoding format size of form "<width>*<height>".

uint64 size

File size.

uint64 maxsize

File maximum size.

string transformation

List of available transformations separated by space. Possible values:

"crop"

"fill"

"stretch"

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### object, dict GetThumbnail(string targetfile, string handle)
Retrieves the image thumbnail corresponding to the handle and store it in a local file.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed


org.bluez.obex.Message

title: org.bluez.obex.Message(5)

text:
# org.bluez.obex.Message(5)

## NAME
org.bluez.obex.Message - BlueZ D-Bus OBEX Message API documentation

## INTERFACE
Service

org.bluez.obex

Interface

org.bluez.obex.Message1

Object path

[Session object path]/message{#}

### object, dict Get(string targetfile, boolean attachment)
Download message and store it in the target file.

If an empty target file is given, a temporary file will be automatically generated.

The returned path represents the newly created transfer, which should be used to find out if the content has been successfully transferred or if the operation fails.

The properties of this transfer are also returned along with the object path, to avoid a call to GetProperties, see org.bluez.obex.Transfer(5) for the possible list of properties.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### string Folder [readonly]
Folder which the message belongs to

### string Subject [readonly]
Message subject

### string Timestamp [readonly]
Message timestamp

### string Sender [readonly]
Message sender name

### string SenderAddress [readonly]
Message sender address

### string ReplyTo [readonly]
Message Reply-To address

### string Recipient [readonly]
Message recipient name

### string RecipientAddress [readonly]
Message recipient address

### string Type [readonly]
Message type

Possible values:

"email"

"sms-gsm"

"sms-cdma"

"mms"

### uint64 Size [readonly]
Message size in bytes

### string Status [readonly]
Message reception status

Possible values:

"complete"

"fractioned"

"notification"

### boolean Priority [readonly]
Message priority flag

### boolean Read [read/write]
Message read flag

### boolean Deleted [writeonly]
Message deleted flag

### boolean Sent [readonly]
Message sent flag

### boolean Protected [readonly]
Message protected flag

### string DeliveryStatus [readonly] [optional]
Message delivery status

Possible values:

"delivered"

"sent"

"unknown"

### uint64 ConversationId [readonly] [required]
Message conversation id sent by Server which servers as Unique identification of the conversation.

### string ConversationName [readonly] [optional]
Human readable name of the conversation

### string Direction [readonly] [required]
Indicate the direction of the message

Possible values:

"incoming"

"outgoing"

"outgoingdraft"

"outgoingpending"

### string AttachmentMimeTypes [readonly] [optional]
MIME type of the attachment


org.bluez.obex.MessageAccess

title: org.bluez.obex.MessageAccess(5)

text:
# org.bluez.obex.MessageAccess(5)

## NAME
org.bluez.obex.MessageAccess - BlueZ D-Bus OBEX MessageAccess API documentation

## INTERFACE
Service

org.bluez.obex

Interface

org.bluez.obex.MessageAccess1

Object path

[Session object path]

### void SetFolder(string name)
Set working directory for current session.

Possible name:

Directory name or '..[/dir]'.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### array{dict} ListFolders(dict filter)
Returns a dictionary containing information about the current folder content.

Possible filter:

uint16 Offset (default 0)

Offset of the first item.

uint16 MaxCount (default 1024)

Maximum number of items.

Possible return:

string Name

Folder name

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### array{string} ListFilterFields()
Return all available fields that can be used in Fields filter.

Possible values:

"subject"

"timestamp"

"sender"

"sender-address"

"recipient"

"recipient-address"

"type"

"size"

"status"

"text"

"attachment"

"priority"

"read"

"sent"

"protected"

"replyto"

Possible errors: None

### array{object, dict} ListMessages(string folder, dict filter)
Returns an array containing the messages objects found in the given subfolder of the current folder, or in the current folder if folder is empty.

Possible Filters:

uint16 Offset (default 0)

Offset of the first item.

uint16 MaxCount (default 1024):

Maximum number of items.

byte SubjectLength (default 256)

Maximum length of the Subject property in the message.

array{string} Fields

Message fields, default is all values. See ListFilterFields() for possible values.

array{string} Types

Filter messages by type. Possible values:

"sms"

"email"

"mms"

string PeriodBegin

Filter messages by starting period. Possible values:

Date in "YYYYMMDDTHHMMSS" format.

string PeriodEnd

Filter messages by ending period. Possible values:

Date in "YYYYMMDDTHHMMSS" format.

boolean Read

Filter messages by read flag. Possible values:

True for read or False for unread

string Recipient

Filter messages by recipient address.

string Sender

Filter messages by sender address.

boolean Priority

Filter messages by priority flag. Possible values:

True for high priority or False for non-high priority.

Each message is represented by an object path, which implements org.bluez.obex.Message(5) interface, followed by a dictionary of its properties.

### void UpdateInbox(void)
Requests remote to update its inbox.

Possible errors:

org.bluez.obex.Error.Failed

### object, dict PushMessage(string sourcefile, string folder, dict args)
Transfers a message (in bMessage format) to the remote device.

The message is transferred either to the given subfolder of the current folder, or to the current folder if folder is empty.

Possible args: Transparent, Retry, Charset

The returned path represents the newly created transfer, which should be used to find out if the content has been successfully transferred or if the operation fails.

The properties of this transfer are also returned along with the object path, to avoid a call to GetProperties, see org.bluez.obex.Transfer(5) for the possible list of properties.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### array{string} SupportedTypes [readonly]
List of supported message types.

Possible values:

"EMAIL"

Email messages.

"SMS_GSM"

GSM short messages.

"SMS_CDMA"

CDMA short messages.

"MMS"

MMS messages.

"IM"

Instant messaging.


org.bluez.obex.ObjectPush

title: org.bluez.obex.ObjectPush(5)

text:
# org.bluez.obex.ObjectPush(5)

## NAME
org.bluez.obex.ObjectPush - BlueZ D-Bus OBEX ObjectPush API documentation

## INTERFACE
Service

org.bluez.obex

Interface

org.bluez.obex.ObjectPush1

Object path

[Session object path]

### object, dict SendFile(string sourcefile)
Sends local file to the remote device.

The returned path represents the newly created transfer, which should be used to find out if the content has been successfully transferred or if the operation fails.

The properties of this transfer are also returned along with the object path, to avoid a call to GetProperties, see org.bluez.obex.Transfer(5) for the possible list of properties.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### object, dict PullBusinessCard(string targetfile)
Request the business card from a remote device and store it in the local file.

If an empty target file is given, a name will be automatically generated for the temporary file.

The returned path represents the newly created transfer, which should be used to find out if the content has been successfully transferred or if the operation fails.

The properties of this transfer are also returned along with the object path, to avoid a call to GetProperties, see org.bluez.obex.Transfer(5) for the possible list of properties.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### object, dict ExchangeBusinessCards(string clientfile, string targetfile)
Push the client's business card to the remote device and then retrieve the remote business card and store it in a local file.

If an empty target file is given, a name will be automatically generated for the temporary file.

The returned path represents the newly created transfer, which should be used to find out if the content has been successfully transferred or if the operation fails.

The properties of this transfer are also returned along with the object path, to avoid a call to GetProperties, see org.bluez.obex.Transfer(5) for the possible list of properties.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed


org.bluez.obex.PhonebookAccess

title: org.bluez.obex.PhonebookAccess(5)

text:
# org.bluez.obex.PhonebookAccess(5)

## NAME
org.bluez.obex.PhonebookAccess - BlueZ D-Bus OBEX PhonebookAccess API documentation

## INTERFACE
Service

org.bluez.obex

Interface

org.bluez.obex.PhonebookAccess1

Object path

[Session object path]

### void Select(string location, string phonebook)
Selects the phonebook object for other operations.

Should be call before all the other operations.

Possible location values:

"int", "internal" (default)

Store in the Internal memory.

"sim{#}"

Store in the sim number.

Possible phonebook values:

"pb"

Store as contact.

"ich"

Store as incoming call.

"och"

Store as outgoing call.

"mch"

Store as missing call.

"cch"

Store as a combination of incoming, outgoing and missing call.

"spd":

Store as speed dials entry ( only for "internal" )

"fav":

Store as favorites entry ( only for "internal" )

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### object, dict PullAll(string targetfile, dict filters)
Returns the entire phonebook object from the PSE server in plain string with vcard format, and store it in a local file.

If an empty target file is given, a name will be automatically generated for the temporary file.

The returned path represents the newly created transfer, which should be used to find out if the content has been successfully transferred or if the operation fails.

The properties of this transfer are also returned along with the object path, to avoid a call to GetProperties, see org.bluez.obex.Transfer(5) for the possible list of properties.

Possible filters:

string Format

Items vcard format. Possible values:

"vcard21" (default)

"vcard30"

string Order

Items order. Possible values:

""

"indexed"

"alphanumeric"

"phonetic"

uint16 Offset (default 0)

Offset of the first item.

uint16 MaxCount (default 65535)

Maximum number of items.

array{string} Fields (default all fields)

Item vcard fields. See ListFilterFields() for possible values.

array{string} FilterAll

Filter items by fields using AND logic, cannot be used together with FilterAny. See ListFilterFields() for possible values.

array{string} FilterAny

Filter items by fields using OR logic, cannot be used together with FilterAll. See ListFilterFields() for possible values.

bool ResetNewMissedCalls

Reset new the missed calls items, shall only be used for folders mch and cch.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Forbidden

### array{string vcard, string name} List(dict filters)
Returns array of vcard-listing data where every entry consists of a pair of strings containing the vcard handle and the contact name.

For example:

"1.vcf"

"John"

Possible filters:

string Order

Contact order. Possible values:

""

"indexed"

"alphanumeric"

"phonetic"

uint16 Offset

Start offset.

uint16 MaxCount

Maximum number of contacts.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Forbidden

### object, dict Pull(string vcard, string targetfile, dict filters)
Retrieves the vcard in the current phonebook object and store it in a local file.

If an empty target file is given, a name will be automatically generated for the temporary file.

The returned path represents the newly created transfer, which should be used to find out if the content has been successfully transferred or if the operation fails.

The properties of this transfer are also returned along with the object path, to avoid a call to GetProperties, see org.bluez.obex.Transfer(5) for the possible list of properties.

Possible filters:

string Format

Contact data format. Possible values:

""

"vcard21"

"vcard30"

array{string} Fields

See ListFilterFields() for possible values.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Forbidden

org.bluez.obex.Error.Failed

### array{string vcard, string name} Search(string field, string value, dict filters)
Searches for entries matching the given condition and return an array of vcard-listing data where every entry consists of a pair of strings containing the vcard handle and the contact name.

Possible field values:

"name" (default)

Search by name.

"number"

Search by number.

"sound"

Search by sound.

value: the string value to search for

Possible filters:

string Order

Contact order. Possible values:

""

"indexed"

"alphanumeric"

"phonetic"

uint16 Offset

Start offset.

uint16 MaxCount

Maximum number of contacts.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Forbidden

org.bluez.obex.Error.Failed

### uint16 GetSize()
Returns the number of entries in the selected phonebook object that are actually used (i.e. indexes that correspond to non-NULL entries).

Possible errors:

org.bluez.obex.Error.Forbidden

org.bluez.obex.Error.Failed

### void UpdateVersion()
Attempts to update PrimaryCounter and SecondaryCounter.

Possible errors:

org.bluez.obex.Error.NotSupported

org.bluez.obex.Error.Forbidden

org.bluez.obex.Error.Failed

### array{string} ListFilterFields()
Returns all Available fields that can be used in Fields filter.

Possible return:

"VERSION"

"FN"

"N"

"PHOTO"

"BDAY"

"ADR"

"LABEL"

"TEL"

"EMAIL"

"MAILER"

"TZ"

"GEO"

"TITLE"

"ROLE"

"LOGO"

"AGENT"

"ORG"

"NOTE"

"REV"

"SOUND"

"URL"

"UID"

"KEY"

"NICKNAME"

"CATEGORIES"

"PROID"

"CLASS"

"SORT-STRING"

"X-IRMC-CALL-DATETIME"

"X-BT-SPEEDDIALKEY"

"X-BT-UCI"

"X-BT-UID"

"BIT-{#}"

Possible errors: None

### string Folder [readonly]
Current folder.

### string DatabaseIdentifier [readonly, optional]
128 bits persistent database identifier.

Possible values:

32-character hexadecimal such as A1A2A3A4B1B2C1C2D1D2E1E2E3E4E5E6

### string PrimaryCounter [readonly, optional]
128 bits primary version counter.

Possible values:

32-character hexadecimal such as A1A2A3A4B1B2C1C2D1D2E1E2E3E4E5E6

### string SecondaryCounter [readonly, optional]
128 bits secondary version counter.

Possible values:

32-character hexadecimal such as A1A2A3A4B1B2C1C2D1D2E1E2E3E4E5E6

### bool FixedImageSize [readonly, optional]
Indicate support for fixed image size.

Possible values:

True if image is JPEG 300x300 pixels otherwise False.


org.bluez.obex.Session

title: org.bluez.obex.Session(5)

text:
# org.bluez.obex.Session(5)

## NAME
org.bluez.obex.Session - BlueZ D-Bus OBEX Client API documentation

## INTERFACE
Service

org.bluez.obex

Interface

org.bluez.obex.Session1

Object path

/org/bluez/obex/server/session{#} or /org/bluez/obex/client/session{#}

### string GetCapabilities()
Get remote device capabilities.

Possible errors:

org.bluez.obex.Error.NotSupported

org.bluez.obex.Error.Failed

### string Source [readonly]
Bluetooth adapter address

### string Destination [readonly]
Bluetooth device address

### byte Channel [readonly]
Bluetooth channel

### uint16 PSM [readonly]
Bluetooth L2CAP PSM

### string Target [readonly]
Target UUID

### string Root [readonly]
Root path


org.bluez.obex.Synchronization

title: org.bluez.obex.Synchronization(5)

text:
# org.bluez.obex.Synchronization(5)

## NAME
org.bluez.obex.Synchronization - BlueZ D-Bus OBEX Synchronization API documentation

## INTERFACE
Service

org.bluez.obex

Interface

org.bluez.obex.Synchronization1

Object path

[Session object path]

### void SetLocation(string location)
Sets the phonebook object store location for other operations. Should be called before all the other operations.

Possible location:

"int" ( "internal" which is default )

Store in the interval memory.

"sim{#}"

Store in sim card number #.

Possible errors:

org.bluez.obex.Error.InvalidArguments

### object, dict GetPhonebook(string targetfile)
Retrieves an entire Phonebook Object store from remote device, and stores it in a local file.

If an empty target file is given, a name will be automatically calculated for the temporary file.

The returned path represents the newly created transfer, which should be used to find out if the content has been successfully transferred or if the operation fails.

The properties of this transfer are also returned along with the object path, to avoid a call to GetProperties, see org.bluez.obex.Transfer(5) for the possible list of properties.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed

### object, dict PutPhonebook(string sourcefile)
Sends an entire Phonebook Object store to remote device.

The returned path represents the newly created transfer, which should be used to find out if the content has been successfully transferred or if the operation fails.

The properties of this transfer are also returned along with the object path, to avoid a call to GetProperties, see org.bluez.obex.Transfer(5) for the possible list of properties.

Possible errors:

org.bluez.obex.Error.InvalidArguments

org.bluez.obex.Error.Failed


org.bluez.obex.Transfer

title: org.bluez.obex.Transfer(5)

text:
# org.bluez.obex.Transfer(5)

## NAME
org.bluez.obex.Transfer - BlueZ D-Bus OBEX Transfer API documentation

## INTERFACE
Service

org.bluez.obex

Interface

org.bluez.obex.Transfer1

Object path

[Session object path]/transfer{#}

### void Cancel()
Cancels the current transference.

Possible errors:

org.bluez.obex.Error.NotAuthorized

org.bluez.obex.Error.InProgress

org.bluez.obex.Error.Failed

### void Suspend()
Suspends transference.

Possible errors:

org.bluez.obex.Error.NotAuthorized

org.bluez.obex.Error.NotInProgress

If transfer is still in with Status "queued".

### void Resume()
Resumes transference previously suspended with use of Suspend() method.

Possible errors:

org.bluez.obex.Error.NotAuthorized

org.bluez.obex.Error.NotInProgress

If transfer is still in with Status "queued".

### string Status [readonly]
Indicates the current status of the transfer.

Possible values:

"queued"

"active"

"suspended"

"complete"

"error"

### object Session [readonly]
The object path of the session the transfer belongs to.

### string Name [readonly, optional]
Name of the object being transferred.

Either Name or Type or both will be present.

### string Type [readonly, optional]
Type of the object transferred being transferred.

Either Name or Type or both will be present.

### uint64 Time [readonly, optional]
Time of the object being transferred if this is provided by the remote party.

### uint64 Size [readonly, optional]
Size of the object being transferred.

If the size is unknown, then this property will not be present.

### uint64 Transferred [readonly, optional]
Number of bytes transferred.

For transfers with Status set to "queued", this value will not be present.

### string Filename [readonly, optional]
Complete name of the file being received or sent.

For incoming object push transaction, this will be the proposed default location and name. It can be overwritten by the AuthorizePush() in org.bluez.obex.Agent(5) and will be then updated accordingly.


cdb

package: libcdb-devel

title: cdb(5)

summary: Constant DataBase file format

text:
# cdb(5)

## NAME
cdb - Constant DataBase file format

## DESCRIPTION
A cdb database is a single file used to map `keys' to `values', having records of (key,value) pairs. File consists of 3 parts: toc (table of contents), data and index (hash tables).

Toc has fixed length of 2048 bytes, containing 256 pointers to hash tables inside index sections. Every pointer consists of position of a hash table in bytes from the beginning of a file, and a size of a hash table in entries, both are 4-bytes (32 bits) unsigned integers in little-endian form. Hash table length may have zero length, meaning that corresponding hash table is empty.

Right after toc section, data section follows without any alingment. It consists of series of records, each is a key length, value (data) length, key and value. Again, key and value length are 4-byte unsigned integers. Each next record follows previous without any special alignment.

After data section, index (hash tables) section follows. It should be looked to in conjunction with toc section, where each of max 256 hash tables are defined. Index section consists of series of hash tables, with starting position and length defined in toc section. Every hash table is a sequence of records each holds two numbers: key's hash value and record position inside data section (bytes from the beginning of a file to first byte of key length starting data record). If record position is zero, then this is an empty hash table slot, pointed to nowhere.

CDB hash function is

```
  hv = ((hv << 5) + hv) ^ c
```

for every single c byte of a key, starting with hv = 5381. Toc section indexed by (hv % 256), i.e. hash value modulo 256 (number of entries in toc section).

In order to find a record, one should: first, compute the hash value (hv) of a key. Second, look to hash table number hv modulo 256. If it is empty, then there is no such key exists. If it is not empty, then third, loop by slots inside that hash table, starting from slot with number hv divided by 256 modulo length of that table, or ((hv / 256) % htlen), searching for this hv in hash table. Stop search on empty slot (if record position is zero) or when all slots was probed (note cyclic search, jumping from end to beginning of a table). When hash value in question is found in hash table, look to key of corresponding record, comparing it with key in question. If them of the same length and equals to each other, then record is found, overwise, repeat with next hash table slot. Note that there may be several records with the same key.

## SEE ALSO
cdb(1), cdb(3).

## AUTHOR
The tinycdb package written by Michael Tokarev <mjt@corpit.ru>, based on ideas and shares file format with original cdb library by Dan Bernstein.

## LICENSE
Public domain.


crypt

package: libcrypt

title: crypt(5)

text:
# crypt(5)

## NAME
crypt — storage format for hashed passphrases and available hashing methods

## DESCRIPTION
The hashing methods implemented by crypt(3) are designed only to process user passphrases for storage and authentication; they are not suitable for use as general-purpose cryptographic hashes.

Passphrase hashing is not a replacement for strong passphrases. It is always possible for an attacker with access to the hashed passphrases to guess and check possible cleartext passphrases. However, with a strong hashing method, guessing will be too slow for the attacker to discover a strong passphrase.

All of the hashing methods use a “salt” to perturb the hash function, so that the same passphrase may produce many possible hashes. Newer methods accept longer salt strings. The salt should be chosen at random for each user. Salt defeats a number of attacks:

- It is not possible to hash a passphrase once and then test it against each account's stored hash; the hash calculation must be repeated for each account.

- It is not possible to tell whether two accounts use the same passphrase without successfully guessing one of the phrases.

- Tables of precalculated hashes of commonly used passphrases must have an entry for each possible salt, which makes them impractically large.

All of the hashing methods are also deliberately engineered to be slow; they use many iterations of an underlying cryptographic primitive to increase the cost of each guess. The newer hashing methods allow the number of iterations to be adjusted, using the “CPU time cost” parameter to crypt_gensalt(3). This makes it possible to keep the hash slow as hardware improves.

## FORMAT OF HASHED PASSPHRASES
All of the hashing methods supported by crypt(3) produce a hashed passphrase which consists of four components: prefix, options, salt, and hash. The prefix controls which hashing method is to be used, and is the appropriate string to pass to crypt_gensalt(3) to select that method. The contents of options, salt, and hash are up to the method. Depending on the method, the prefix and options components may be empty.

The setting argument to crypt(3) must begin with the first three components of a valid hashed passphrase, but anything after that is ignored. This makes authentication simple: hash the input passphrase using the stored passphrase as the setting, and then compare the result to the stored passphrase.

Hashed passphrases are always entirely printable ASCII, and do not contain any whitespace or the characters ‘:’, ‘;’, ‘*’, ‘!’, or ‘\’. (These characters are used as delimiters and special markers in the passwd(5) and shadow(5) files.)

The syntax of each component of a hashed passphrase is up to the hashing method. ‘$’ characters usually delimit components, and the salt and hash are usually encoded as numerals in base 64. The details of this base-64 encoding vary among hashing methods. The common “base64” encoding specified by RFC 4648 is usually not used.

## AVAILABLE HASHING METHODS
This is a list of all the hashing methods supported by crypt(3), in decreasing order of strength. Many of the older methods are now considered too weak to use for new passphrases. The hashed passphrase format is expressed with extended regular expressions (see regex(7)) and does not show the division into prefix, options, salt, and hash.

### yescrypt
yescrypt is a scalable passphrase hashing scheme designed by Solar Designer, which is based on Colin Percival's scrypt. Recommended for new hashes.

Prefix

"$y$"

Hashed passphrase format

\$y\$[./A-Za-z0-9]+\$[./A-Za-z0-9]{,86}\$[./A-Za-z0-9]{43}

Maximum passphrase length

unlimited

Hash size

256 bits

Salt size

up to 512 (128+ recommended) bits

CPU time cost parameter

1 to 11 (logarithmic)

### gost-yescrypt
gost-yescrypt uses the output from the yescrypt hashing method in place of a hmac message. Thus, the yescrypt crypto properties are superseded by the GOST R 34.11-2012 (Streebog) hash function with a 256 bit digest. This hashing method is useful in applications that need modern passphrase hashing methods, but require to rely on the cryptographic properties of GOST algorithms. The GOST R 34.11-2012 (Streebog) hash function has been published by the IETF as RFC 6986. Recommended for new hashes.

Prefix

"$gy$"

Hashed passphrase format

\$gy\$[./A-Za-z0-9]+\$[./A-Za-z0-9]{,86}\$[./A-Za-z0-9]{43}

Maximum passphrase length

unlimited

Hash size

256 bits

Salt size

up to 512 (128+ recommended) bits

CPU time cost parameter

1 to 11 (logarithmic)

### scrypt
scrypt is a password-based key derivation function created by Colin Percival, originally for the Tarsnap online backup service. The algorithm was specifically designed to make it costly to perform large-scale custom hardware attacks by requiring large amounts of memory. In 2016, the scrypt algorithm was published by IETF as RFC 7914.

Prefix

"$7$"

Hashed passphrase format

\$7\$[./A-Za-z0-9]{11,97}\$[./A-Za-z0-9]{43}

Maximum passphrase length

unlimited

Hash size

256 bits

Salt size

up to 512 (128+ recommended) bits

CPU time cost parameter

6 to 11 (logarithmic)

### bcrypt
A hash based on the Blowfish block cipher, modified to have an extra-expensive key schedule. Originally developed by Niels Provos and David Mazieres for OpenBSD and also supported on recent versions of FreeBSD and NetBSD, on Solaris 10 and newer, and on several GNU/*/Linux distributions.

Prefix

"$2b$"

Hashed passphrase format

\$2[abxy]\$[0-9]{2}\$[./A-Za-z0-9]{53}

Maximum passphrase length

72 characters

Hash size

184 bits

Salt size

128 bits

CPU time cost parameter

4 to 31 (logarithmic)

The alternative prefix "$2y$" is equivalent to "$2b$". It exists for historical reasons only. The alternative prefixes "$2a$" and "$2x$" provide bug-compatibility with crypt_blowfish 1.0.4 and earlier, which incorrectly processed characters with the 8th bit set.

### sha512crypt
A hash based on SHA-2 with 512-bit output, originally developed by Ulrich Drepper for GNU libc. Supported on Linux but not common elsewhere. Acceptable for new hashes. The default CPU time cost parameter is 5000, which is too low for modern hardware.

Prefix

"$6$"

Hashed passphrase format

\$6\$(rounds=[1-9][0-9]+\$)?[^$:\n]{1,16}\$[./0-9A-Za-z]{86}

Maximum passphrase length

unlimited

Hash size

512 bits

Salt size

6 to 96 bits

CPU time cost parameter

1000 to 999,999,999

### sha256crypt
A hash based on SHA-2 with 256-bit output, originally developed by Ulrich Drepper for GNU libc. Supported on Linux but not common elsewhere. Acceptable for new hashes. The default CPU time cost parameter is 5000, which is too low for modern hardware.

Prefix

"$5$"

Hashed passphrase format

\$5\$(rounds=[1-9][0-9]+\$)?[^$:\n]{1,16}\$[./0-9A-Za-z]{43}

Maximum passphrase length

unlimited

Hash size

256 bits

Salt size

6 to 96 bits

CPU time cost parameter

1000 to 999,999,999

### sha1crypt
A hash based on HMAC-SHA1. Originally developed by Simon Gerraty for NetBSD. Not as weak as the DES-based hashes below, but SHA1 is so cheap on modern hardware that it should not be used for new hashes.

Prefix

"$sha1"

Hashed passphrase format

\$sha1\$[1-9][0-9]+\$[./0-9A-Za-z]{1,64}\$[./0-9A-Za-z]{8,64}[./0-9A-Za-z]{32}

Maximum passphrase length

unlimited

Hash size

160 bits

Salt size

6 to 384 bits

CPU time cost parameter

4 to 4,294,967,295

### SunMD5
A hash based on the MD5 algorithm, with additional cleverness to make precomputation difficult, originally developed by Alec David Muffet for Solaris. Not adopted elsewhere, to our knowledge. Not as weak as the DES-based hashes below, but MD5 is so cheap on modern hardware that it should not be used for new hashes.

Prefix

"$md5"

Hashed passphrase format

\$md5(,rounds=[1-9][0-9]+)?\$[./0-9A-Za-z]{8}\${1,2}[./0-9A-Za-z]{22}

Maximum passphrase length

unlimited

Hash size

128 bits

Salt size

48 bits

CPU time cost parameter

4096 to 4,294,963,199

### md5crypt
A hash based on the MD5 algorithm, originally developed by Poul-Henning Kamp for FreeBSD. Supported on most free Unixes and newer versions of Solaris. Not as weak as the DES-based hashes below, but MD5 is so cheap on modern hardware that it should not be used for new hashes. CPU time cost is not adjustable.

Prefix

"$1$"

Hashed passphrase format

\$1\$[^$:\n]{1,8}\$[./0-9A-Za-z]{22}

Maximum passphrase length

unlimited

Hash size

128 bits

Salt size

6 to 48 bits

CPU time cost parameter

1000

### bsdicrypt (BSDI extended DES)
A weak extension of traditional DES, which eliminates the length limit, increases the salt size, and makes the time cost tunable. It originates with BSDI and is also available on at least NetBSD, OpenBSD, and FreeBSD due to the use of David Burren's FreeSec library. It is better than bigcrypt and traditional DES, but still should not be used for new hashes.

Prefix

"_"

Hashed passphrase format

_[./0-9A-Za-z]{19}

Maximum passphrase length

unlimited (ignores 8th bit)

Hash size

64 bits

Effective key size

56 bits

Salt size

24 bits

CPU time cost parameter

1 to 16,777,215 (must be odd)

### bigcrypt
A weak extension of traditional DES, available on some System V-derived Unixes. All it does is raise the length limit from 8 to 128 characters, and it does this in a crude way that allows attackers to guess chunks of a long passphrase in parallel. It should not be used for new hashes.

Prefix

""

(empty string)

Hashed passphrase format

[./0-9A-Za-z]{13,178}

Maximum passphrase length

128 characters (ignores 8th bit)

Hash size

up to 1024 bits

Effective key size

up to 896 bits

Salt size

12 bits

CPU time cost parameter

25

### descrypt (Traditional DES)
The original hashing method from Unix V7, based on the DES block cipher. Because DES is cheap on modern hardware, because there are only 4096 possible salts and 2**56 possible hashes, and because it truncates passphrases to 8 characters, it is feasible to discover any passphrase hashed with this method. It should only be used if you absolutely have to generate hashes that will work on an old operating system that supports nothing else.

Prefix

""

(empty string)

Hashed passphrase format

[./0-9A-Za-z]{13}

Maximum passphrase length

8 characters (ignores 8th bit)

Hash size

64 bits

Effective key size

56 bits

Salt size

12 bits

CPU time cost parameter

25

### NT
The hashing method used for network authentication in some versions of the SMB/CIFS protocol. Available, for cross-compatibility's sake, on FreeBSD. Based on MD4. Has no salt or tunable cost parameter. Like traditional DES, it is so weak that any passphrase hashed with this method is guessable. It should only be used if you absolutely have to generate hashes that will work on an old operating system that supports nothing else.

Prefix

"$3$"

Hashed passphrase format

\$3\$\$[0-9a-f]{32}

Maximum passphrase length

unlimited

Hash size

256 bits

Salt size

0 bits

CPU time cost parameter

1

## SEE ALSO
crypt(3), crypt_gensalt(3), getpwent(3), passwd(5), shadow(5), pam(8)

Niels Provos and David Mazieres, A Future-Adaptable Password Scheme, Proceedings of the 1999 USENIX Annual Technical Conference, https://www.usenix.org/events/usenix99/provos.html, June 1999.

Robert Morris and Ken Thompson, Password Security: A Case History, Communications of the ACM, 11, 22, http://wolfram.schneider.org/bsd/7thEdManVol2/password/password.pdf, 1979.


ppdcfile

package: libcups-devel

title: ppdcfile(5)

text:
# ppdcfile(5)

## NAME
ppdcfile - cups ppd compiler source file format (deprecated)

## DESCRIPTION
The CUPS PPD compiler reads meta files that contain descriptions of one or more PPD files to be generated by ppdc(1). This man page provides a quick reference to the supported keywords and should be used in conjunction with the online help for CUPS.

The source file format is plain ASCII text that can be edited using your favorite text editor. Comments are supported using the C (/* ... */) and C++ (// ...) comment mechanisms.

Printer driver information can be grouped and shared using curly braces ({ ... }); PPD files are written when a close brace or end-of-file is seen and a PCFileName directive has been defined.

Directives may be placed anywhere on a line and are followed by one or more values. The following is a list of the available directives and the values they accept:

\#define name value

\#elif {name | value}

\#else

\#endif

\#font name encoding "version" charset status

\#if {name | value}

\#include <filename>

\#include "filename"

\#media name width length

\#media "name/text" width length

\#po locale "filename"

Attribute name "" value

Attribute name keyword value

Attribute name "keyword/text" value

Choice name "code"

Choice "name/text" "code"

ColorDevice boolean-value

ColorModel name colorspace colororder compression

ColorModel "name/text" colorspace colororder compression

ColorProfile resolution/mediatype gamma density matrix

Copyright "text"

CustomMedia name width length left bottom right top "size-code" "region-code"

CustomMedia "name/text" width length left bottom right top "size-code" "region-code"

Cutter boolean-value

Darkness temperature name

Darkness temperature "name/text"

DriverType type

Duplex type

Filter mime-type cost program

Finishing name

Finishing "name/text"

Font *

Font name encoding "version" charset status

Group name

Group "name/text"

HWMargins left bottom right top

InputSlot position name

InputSlot position "name/text"

Installable name

Installable "name/text"

LocAttribute name "keyword/text" value

ManualCopies boolean-value

Manufacturer "name"

MaxSize width length

MediaSize name

MediaType type name

MediaType type "name/text"

MinSize width length

ModelName "name"

ModelNumber number

Option name type section order

Option "name/text" type section order

PCFileName "filename.ppd"

Resolution colorspace bits-per-color row-count row-feed row-step name

Resolution colorspace bits-per-color row-count row-feed row-step "name/text"

SimpleColorProfile resolution/mediatype density yellow-density red-density gamma red-adjust green-adjust blue-adjust

Throughput pages-per-minute

UIConstraints "*Option1 *Option2"

UIConstraints "*Option1 Choice1 *Option2"

UIConstraints "*Option1 *Option2 Choice2"

UIConstraints "*Option1 Choice1 *Option2 Choice2"

VariablePaperSize boolean-value

Version number

## NOTES
PPD files are deprecated and will no longer be supported in a future feature release of CUPS. Printers that do not support IPP can be supported using applications such as ippeveprinter(1).

## SEE ALSO
ppdc(1), ppdhtml(1), ppdi(1), ppdmerge(1), ppdpo(1), CUPS Online Help (http://localhost:631/help)

## COPYRIGHT
Copyright © 2020-2024 by OpenPrinting.


dat.conf

package: libdapl

title: dat.conf(5)

text:
# dat.conf(5)

## NAME
dat.conf - configuration file for static registration of user-level DAT rdma providers

## DESCRIPTION
The DAT (direct access transport) architecture supports the use of multiple DAT providers within a single consumer application. Consumers implicitly select a provider using the Interface Adapter name parameter passed to dat_ia_open().

The subsystem that maps Interface Adapter names to provider implementations is known as the DAT registry. When a consumer calls dat_ia_open(), the appropriate provider is found and notified of the consumer's request to access the IA. After this point, all DAT API calls acting on DAT objects are automatically directed to the appropriate provider entry points.

A persistent, administratively configurable database is used to store mappings from IA names to provider information. This provider information includes: the file system path to the provider library object, version information, and thread safety information. The location and format of the registry is platform dependent. This database is known as the Static Registry (SR) and is provided via entries in the dat.conf file. The process of adding a provider entry is termed Static Registration.

## Registry File Format

* All characters after # on a line are ignored (comments).

* Lines on which there are no characters other than whitespace

and comments are considered blank lines and are ignored.

* Non-blank lines must have seven whitespace separated fields.

These fields may contain whitespace if the field is quoted

with double quotes. Within fields quoated with double quotes,

the backslash or qoute are valid escape sequences:

* Each non-blank line will contain the following fields:

- The IA Name.

- The API version of the library:

[k|u]major.minor where "major" and "minor" are both integers

in decimal format. User-level examples: "u2.0".

- Whether the library is thread-safe: [threadsafe|nonthreadsafe]

- Whether this is the default section: [default|nondefault]

- The library image, version included, to be loaded.

- The vendor id and version of DAPL provider: id.major.minor

- ia params, IA specific parameters - device name and port

- platform params, (not used)

## OpenFabrics RDMA providers:

Provider options for different CM services

1. cma - OpenFabrics rdma_cm - uses rdma_cm services for connections

- requires IPoIB and SA/SM services for IB

- netdev used for device name, without port designation (ia_params)

- Supports any transport rdma_cm supports including IB, iWARP, RoCEE

- libdaplofa (2.0)

2. scm - uDAPL socket based CM - exchanges CM information over sockets

- eliminates the need for rdma_cm, IPoIB, and SA for IB

- verbs device used for device name with port designation (ia_param)

- Supports IB, RoCEE. Doesn't support iWARP

- libdaploscm (2.0)

3. ucm - uDAPL unreliable IB CM - exchanges CM information via IB UD QP's

- eliminates the need for sockets or rdma_cm

- verbs device used for device name with port designation (ia_param)

- Supports IB only, no name service.

- libdaploucm (2.0)

## Example entries for each OpenFabrics provider

1. cma - OpenFarbrics rdma_cm examples

ofa-v2-ib0 u2.0 nonthreadsafe default libdaplofa.so.2 dapl.2.0 "ib0 0" ""

ofa-v2-iwarp u2.0 nonthreadsafe default libdaplofa.so.2 dapl.2.0 "eth2 0" ""

ofa-v2-cma-roe-eth2 u2.0 nonthreadsafe default libdaplofa.so.2 dapl.2.0 "eth2 0" ""

ofa-v2-cma-roe-eth3 u2.0 nonthreadsafe default libdaplofa.so.2 dapl.2.0 "eth3 0" ""

NOTE: The OpenFabrics CMA providers use <ia_params> to specify the device with one of the following:

network address, network hostname, or netdev name; along with port number.

2. scm - uDAPL socket based CM v2.0 examples

ofa-v2-mlx4_0-1 u2.0 nonthreadsafe default libdaploscm.so.2 dapl.2.0 "mlx4_0 1" ""

ofa-v2-mlx4_0-2 u2.0 nonthreadsafe default libdaploscm.so.2 dapl.2.0 "mlx4_0 2" ""

ofa-v2-mlx5_1-1 u2.0 nonthreadsafe default libdaploscm.so.2 dapl.2.0 "mlx5_1 1" ""

ofa-v2-ehca0-1 u2.0 nonthreadsafe default libdaploscm.so.2 dapl.2.0 "ehca0 1" ""

ofa-v2-scm-roe-mlx5_0-1 u2.0 nonthreadsafe default libdaploscm.so.2 dapl.2.0 "mlx5_0 1" ""

3. ucm - uDAPL unreliable IB CM examples

ofa-v2-mlx4_0-1u u2.0 nonthreadsafe default libdaploucm.so.2 dapl.2.0 "mlx4_0 1" ""

ofa-v2-mlx4_0-2u u2.0 nonthreadsafe default libdaploucm.so.2 dapl.2.0 "mlx4_0 2" ""

ofa-v2-ipath0-1u u2.0 nonthreadsafe default libdaploucm.so.2 dapl.2.0 "ipath0 1" ""

ofa-v2-ehca0-1u u2.0 nonthreadsafe default libdaploucm.so.2 dapl.2.0 "ehca0 1" ""

Note: OpenIB- and ofa-v2- IA names are unique mappings, reserved for OpenFabrics providers.

The default location for this configuration file is /etc/dat.conf.

The file location may be overridden with the environment variable DAT_OVERRIDE=/your_own_directory/your_dat.conf.


libdskrc

package: libdsk-progs

title: libdskrc(5)

text:
# libdskrc(5)

## NAME
libdskrc - Custom format definitions for LibDSK programs

## DESCRIPTION
The libdskrc file contains definitions of disk geometries, which can be used by the LibDsk utilities dsktrans(1) , dskid(1) and dskform(1)

The file consists of one or more sections, each describing one disk layout. Each section begins with the format name in square brackets, and continues until the next section begins. Within each section are one or more entries of the form

variable = value

Anything after a semicolon or hash character is treated as a comment and ignored. Blank lines are also ignored.

## PARAMETERS
For each geometry, the entries listed below can be present. If not all the values are present, LibDsk will use default values from its "pcw180" format (40 tracks, 9 sectors, single-sided, MFM).

description = DESC

The description of the format as shown by (for example) dskform --help.

sides = TREATMENT

How a double-sided disk is handled. This can either be alt (sides alternate -- used by most PC-hosted operating systems), outback (use side 0 tracks 0-79, then side 1 tracks 79-0 -- used by 144FEAT CP/M disks), or outout (use side 0 tracks 0-79, then side 1 tracks 0-79 -- used by some Acorn formats). If the disk is single-sided, this parameter can be omitted.

cylinders = COUNT

Sets the number of cylinders (usually 40 or 80).

heads = COUNT

Sets the number of heads (usually 1 or 2 for single- or double-sided).

sectors = COUNT

Sets the number of sectors per track.

secbase = NUMBER

Sets the first sector number on a track. Usually 1; some Acorn formats use 0.

secsize = COUNT

Sets the size of a sector in bytes. This should be a power of 2.

datarate = VALUE

Sets the rate at which the disk should be accessed. This is one of HD (1.4Mb or 1.2Mb), DD (360k or 720k disc in 1.2Mb drive), SD (360k or 720k disc in 1.4Mb, 720k or 360k drive), ED (2.8Mb).

rwgap = VALUE

Set the read/write gap.

fmtgap = VALUE

Set the format gap.

fm = Y or N

Set the recording mode. Y for FM, N for MFM.

multitrack = Y or N

Set multitrack mode; this only affects attempts to read normal data from tracks containing deleted data (or vice versa). Y for yes, N for no.

skipdeleted = Y or N

Skip deleted data when searching for non-deleted data (or vice versa). Y for yes, N for no.

## FILES
$HOME/.libdskrc

User-specified format list.

/usr/local/share/LibDsk/libdskrc

System-wide format list.

## SEE ALSO
dsktrans(1) , dskform(1) , dskid(1)

## AUTHOR
John Elliott <seasip.webmaster@gmail.com>.


editrc

title: editrc(5)

summary: configuration file for editline library

text:
# editrc(5)

## NAME
editrc — configuration file for editline library

## SYNOPSIS
editrc

## DESCRIPTION
The editrc file defines various settings to be used by the editline(3) library.

The format of each line is:

[prog:]command [arg ...]

command is one of the editline(3) builtin commands. Refer to BUILTIN COMMANDS for more information.

prog is the program name string that a program defines when it calls el_init(3) to set up editline(3), which is usually argv[0]. command will be executed for any program which matches prog.

prog may also be a regex(3) style regular expression, in which case command will be executed for any program that matches the regular expression.

If prog is absent, command is executed for all programs.

## BUILTIN COMMANDS
The editline library has some builtin commands, which affect the way that the line editing and history functions operate. These are based on similar named builtins present in the tcsh(1) shell.

The following builtin commands are available:

bind [-aeklrsv] [key [command]]

Without options and arguments, list all bound keys and macros, and the editor command or input string to which each one is bound. If only key is supplied, show the binding for that key or macro. If key command is supplied, bind the editor command to that key or macro. The options are as follows:

-a

List or change key bindings in the vi(1) mode alternate (command mode) key map.

-e

Bind all keys to the standard GNU Emacs-like bindings.

-k

key is interpreted as a symbolic arrow key name, which may be one of up, down, left or right.

-l

List all editor commands and a short description of each.

-r

Remove the binding of the key or macro key.

-s

Define a keyboard macro rather than a key binding or command macro: command is taken as a literal string and appended to the input queue whenever key is typed. Bound keys and macros in command are themselves reinterpreted, and this continues for ten levels of interpretation.

-v

Bind all keys to the standard vi(1)-like bindings.

The editline(7) manual documents all editor commands and contains more information about macros and the input queue.

key and command can contain control characters of the form ‘^character’ (e.g. ‘^A’), and the following backslashed escape sequences:

\a

Bell

\b

Backspace

\e

Escape

\f

Formfeed

\n

Newline

\r

Carriage return

\t

Horizontal tab

\v

Vertical tab

\nnn

The ASCII character corresponding to the octal number nnn.

‘\’ nullifies the special meaning of the following character, if it has any, notably ‘\’ and ‘^’.

echotc [-sv] arg ...

Exercise terminal capabilities given in arg. If arg is ‘baud’, ‘cols’, ‘lines’, ‘rows’, ‘meta’, or ‘tabs’, the value of that capability is printed, with “yes” or “no” indicating that the terminal does or does not have that capability. -s returns an empty string for non-existent capabilities, rather than causing an error. -v causes messages to be verbose.

edit [on | off]

Enable or disable the editline functionality in a program.

history list | size n | unique n

The ‘list’ command lists all entries in the history. The ‘size’ command sets the history size to n entries. The ‘unique’ command controls if history should keep duplicate entries. If n is non zero, only keep unique history entries. If n is zero, then keep all entries (the default).

settc cap val

Set the terminal capability cap to val, as defined in termcap(5). No sanity checking is done.

setty [-a] [-d] [-q] [-x] [+mode] [-mode] [mode] [char=c]

Control which tty modes that editrc won't allow the user to change. -d, -q or -x tells setty to act on the ‘edit’, ‘quote’ or ‘execute’ set of tty modes respectively; defaulting to -x. Without other arguments, setty lists the modes in the chosen set which are fixed on (+mode) or off (-mode). -a lists all tty modes in the chosen set regardless of the setting. With +mode, -mode or mode, fixes mode on or off or removes control of mode in the chosen set.

Setty can also be used to set tty characters to particular values using char=value. If value is empty then the character is set to _POSIX_VDISABLE.

telltc

List the values of all the terminal capabilities (see termcap(5)).

## ENVIRONMENT
EDITRC

Names the default configuration file for the editline(3) library.

## FILES
~/.editrc

Last resort user configuration file for the editline(3) library if no other file is specified.

## SEE ALSO
editline(3), regex(3), termcap(5), editline(7)

## AUTHORS
The editline library was written by Christos Zoulas, and this manual was written by Luke Mewburn, with some sections inspired by tcsh(1).


libgii.conf

package: libgii

title: libgii.conf(5)

text:
# libgii.conf(5)

## NAME
libgii.conf : LibGII configuration file format

## DESCRIPTION
/etc/ggi/libgii.conf is the configuration file that defines what input module are available and where libgii is supposed to find them. It consists of lines defining target locations (mapping a target name a function name) and target aliases (fake targets that actually calls other target with a specific set of parameters).

The format is common to all GGI libraries. It is defined by libgg. See ggLoadConfig(3) for additional information on file inclusions and other generic options.

## EXAMPLES
These examples show how to use the generic configuration mechanism proposed by LibGG with LibGII.

The first example defines three input modules (or targets) for which initialization function is found in three different dynamic libraries (.so files), under the default LibGII input symbol: GIIdlinit:

```
input-stdin                   input/stdin.so
input-x                       input/x.so
input-xwin                    input/xwin.so
```

In the second example, the two inputs are implemented in a single dynamic library, but they each have their own initialization functions in this library. Their name is separated from the path by a :.

input-x input/x.so:GIIdl_x input-xwin input/x.so:GIIdl_xwin

The third example defines only one real target input-x, located in shared object input/x.so under the symbol GIIdl_x. input-xwin is an alias that will resolve to target input-x with the option string -be-xwin to be passed to the target function (GIIdl_x in input/x.so). input-x input/x.so:GIIdl_x alias input-xwin input-x:-be-xwin

The last examples defines two inputs, with two possible location for their implementation. The first two lines are the same as in example 2. The other two states that these two inputs can also be found (if the previous fail) as a built-in modules. The /gii-builtins path points to the LibGII built-in symbol namespace. In this case both input would be found in this namespace under the default symbol GIIdlinit. The initialization function will be given the requested target name to know which implementation to use. input-x input/x.so:GIIdl_x input-xwin input/x.so:GIIdl_xwin

input-x /gii-builtins input-xwin /gii-builtins

## SEE ALSO
ggLoadConfig(3)


gmobile.udev

package: libgmobile

title: gmobile.udev(5)

summary: Device configuration for gmobile

text:
# gmobile.udev(5)

## NAME
gmobile.udev - Device configuration for gmobile

## DESCRIPTION
gmobile allows one to configure certain aspects through udev's hwdb

The following properties are supported:

## WAKEUP KEYS
An input device's wakeup keys specify which keys unblank the screen of an idle device. By default all keys are wakeup keys. The default can be changed on a per keyboard level via

```
GM_WAKEUP_KEY_DEFAULT=0
```

The behaviour of individual keys can be changed by giving their keycodes e.g.

```
GM_WAKEUP_KEY_<keycode>=[0|1]
```

The keycode is the linux event code.

Note that gmobile merely provides that information. The Wayland compositor is responsible for applying it.

For details on how to add these properties to hwdb see below.

## CONFIGURING HWDB
The hwdb contains a set of match rules that assign udev properties that become available when the device is connected. This section only describes the hwdb in relation to gmobile, it is not full documentation on how the hwdb works. For that please see the hwdb(7) man page.

gmobile's use of the hwdb is limited to properties systemd and custom rules files (where available) provide.

### Querying the hwdb
gmobile currently only uses device nodes in the form of /dev/input/eventX where X is the number of the specific device. Running libinput debug-events lists all devices currently available to libinput and their event node name:

```
$> sudo libinput debug-events
-event0   DEVICE_ADDED            gpio-keys                         seat0 default group1  cap:k
-event2   DEVICE_ADDED            30370000.snvs:snvs-powerkey       seat0 default group2  cap:k
-event3   DEVICE_ADDED            generic ft5x06 (f0)               seat0 default group3  cap:t ntouches 10 calib
...
```

Note the event node name for your device and translate it into a syspath in the form of /sys/class/input/eventX. This path can be supplied to udevadm info

```
$> udevadm info -p /sys/class/input/event0/
P: /devices/platform/gpio-keys/input/input0/event0
M: event0
R: 0
U: input
D: c 13:64
N: input/event0
L: 0
S: input/by-path/platform-gpio-keys-event
E: DEVPATH=/devices/platform/gpio-keys/input/input0/event0
E: SUBSYSTEM=input
E: DEVNAME=/dev/input/event0
E: MAJOR=13
E: MINOR=64
E: USEC_INITIALIZED=5327886
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_PATH=platform-gpio-keys
E: ID_PATH_TAG=platform-gpio-keys
E: GM_WAKEUP_KEY_114=0
E: GM_WAKEUP_KEY_115=0
…
```

Lines starting with E: are udev properties available to applications. Properties added by gmobile all have a GM_ prefix. They are only present if a hwdb entry matches.

### Reloading the hwdb
The actual hwdb is stored in a binary file on-disk and must be updated manually whenever a .hwdb file changes. This is required both when a user manually edits the .hwdb file or when gmobile ships an updated set of entries.

To update the binary file on-disk, run:

```
sudo systemd-hwdb update
```

Then, to trigger a reload of all properties on your device, run:

```
sudo udevadm trigger /sys/class/input/eventX
```

Then check with udevadm info whether the properties were updated, see Querying the hwdb. If a new property does not appear on the device, use udevadm test to check for error messages by udev and the hwdb (e.g. syntax errors in the udev rules files).

```
sudo udevadm test /sys/class/input/eventX
```

### Modifying the hwdb
This section applies to users that need to add, change, or remove a hwdb entry for their device. Note that the hwdb is not part of the public API and may change at any time. Once a device has been made to work, the change must be submitted to the gmobile repository.

hwdb entries are only applied if a udev rules calls out to the hwdb with the right match format. gmobile ships with a set of rules to query the hwdb, the different rules are reflected by their prefix. Again, this is not part of the public API. gmobile's matches are composed of a literal "gmobile", then either the device name (prefixed with name:) followed by the machine's first device tree compatible (prefixed with dt:) or dmi modalias. For example:

```
gmobile:name:gpio-keys:dt:purism,librem5*
```

The device name is available in the device's /sys/class/input/eventX/device/name while the device tree compatible is available in /sys/firmware/devicetree/base/compatible.

The hwdb match string is the first portion of the hwdb entry. The second portion is the property to set. Each hwdb entry may match on multiple devices and may apply multiple properties. For example:

```
gmobile:name:gpio-keys:dt:purism,librem5*

  GM_WAKEUP_KEY_114=0

  GM_WAKEUP_KEY_115=0
```

In the example above the matching gpio-keys device will have both properties applied.

The hwdb does not allow removing properties. Where a property must be unset, it should be set to 0.

For testing any user-specific hwdb entries should be placed in a file /etc/udev/hwdb.d/99-gmobile.hwdb but please make sure to submit them upstream as the hwdb format might change without notice.

## SEE ALSO
hwdb(7) systemd-hwdb(8) phoc(1)


libguestfs-tools.conf

package: libguestfs

title: libguestfs-tools.conf(5)

summary: configuration file for guestfish, guestmount, virt\-rescue

text:
# libguestfs-tools.conf(5)

## NAME
libguestfs-tools.conf - configuration file for guestfish, guestmount, virt-rescue

## SYNOPSIS

```
 /etc/libguestfs-tools.conf
 $XDG_CONFIG_DIRS/libguestfs/libguestfs-tools.conf
 $HOME/.libguestfs-tools.rc
 $XDG_CONFIG_HOME/libguestfs/libguestfs-tools.conf
```

## DESCRIPTION
libguestfs-tools.conf (or $HOME/.libguestfs-tools.rc) changes the defaults for the following programs only:

- guestfish(1)

- guestmount(1)

- virt-rescue(1)

There is currently only one setting which is controlled by this file. Adding (or uncommenting):

```
 read_only = true;
```

changes these programs so they act as if the --ro flag was given on the command line. You can use this to make the programs safe against accidental modification of a live guest (users would have to explicitly add the --rw flag to modify guests). This is not the default because it is not backwards compatible. See also "OPENING DISKS FOR READ AND WRITE" in guestfish(1).

Note that the semicolon is required.

This file is parsed by the libconfig library. For more information about the format, see: http://www.hyperrealm.com/libconfig/libconfig_manual.html

## FILE LOCATION
The order of the configuration files being read is, by importance:

- $XDG_CONFIG_HOME/libguestfs/libguestfs-tools.conf ($XDG_CONFIG_HOME is $HOME/.config if not set).

- $HOME/.libguestfs-tools.rc

- $XDG_CONFIG_DIRS/libguestfs/libguestfs-tools.conf (where $XDG_CONFIG_DIRS means any of the directories in that environment variable, or just /etc/xdg if not set)

- /etc/libguestfs-tools.conf

This means local users can override the system configuration by copying the configuration file (or creating it anew) into $XDG_CONFIG_HOME/libguestfs/libguestfs-tools.conf.

/etc/libguestfs-tools.conf and $HOME/.libguestfs-tools.rc are the old non-XDG paths which are read for compatibility.

## SEE ALSO
"OPENING DISKS FOR READ AND WRITE" in guestfish(1), guestmount(1), virt-rescue(1), http://libguestfs.org/, http://standards.freedesktop.org/basedir-spec/latest/.

## AUTHORS
Richard W.M. Jones ("rjones at redhat dot com")

## COPYRIGHT
Copyright (C) 2011-2025 Red Hat Inc.

## LICENSE
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

## BUGS
To get a list of bugs against libguestfs, use this link: https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools

To report a new bug against libguestfs, use this link: https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools

When reporting a bug, please supply:

- The version of libguestfs.

- Where you got libguestfs (eg. which Linux distro, compiled from source, etc)

- Describe the bug accurately and give a way to reproduce it.

- Run libguestfs-test-tool(1) and paste the complete, unedited output into the bug report.