|  | #ifndef CREDENTIAL_H | 
|  | #define CREDENTIAL_H | 
|  |  | 
|  | #include "string-list.h" | 
|  |  | 
|  | struct credential { | 
|  | struct string_list helpers; | 
|  | unsigned approved:1, | 
|  | configured:1, | 
|  | quit:1, | 
|  | use_http_path:1; | 
|  |  | 
|  | char *username; | 
|  | char *password; | 
|  | char *protocol; | 
|  | char *host; | 
|  | char *path; | 
|  | }; | 
|  |  | 
|  | #define CREDENTIAL_INIT { STRING_LIST_INIT_DUP } | 
|  |  | 
|  | void credential_init(struct credential *); | 
|  | void credential_clear(struct credential *); | 
|  |  | 
|  | void credential_fill(struct credential *); | 
|  | void credential_approve(struct credential *); | 
|  | void credential_reject(struct credential *); | 
|  |  | 
|  | int credential_read(struct credential *, FILE *); | 
|  | void credential_write(const struct credential *, FILE *); | 
|  |  | 
|  | /* | 
|  | * Parse a url into a credential struct, replacing any existing contents. | 
|  | * | 
|  | * Ifthe url can't be parsed (e.g., a missing "proto://" component), the | 
|  | * resulting credential will be empty but we'll still return success from the | 
|  | * "gently" form. | 
|  | * | 
|  | * If we encounter a component which cannot be represented as a credential | 
|  | * value (e.g., because it contains a newline), the "gently" form will return | 
|  | * an error but leave the broken state in the credential object for further | 
|  | * examination.  The non-gentle form will issue a warning to stderr and return | 
|  | * an empty credential. | 
|  | */ | 
|  | void credential_from_url(struct credential *, const char *url); | 
|  | int credential_from_url_gently(struct credential *, const char *url, int quiet); | 
|  |  | 
|  | int credential_match(const struct credential *have, | 
|  | const struct credential *want); | 
|  |  | 
|  | #endif /* CREDENTIAL_H */ |