X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/a30e7865b46712fe346d8a91894ab68aac664901..b0aa8cdb1c264e42d4931ca24968689c73381278:/h/prototypes.h diff --git a/h/prototypes.h b/h/prototypes.h index 5252a0a0..a17d12f9 100644 --- a/h/prototypes.h +++ b/h/prototypes.h @@ -167,7 +167,9 @@ char **getarguments (char *, int, char **, int); */ char *get_charset(void); -char *getcpy (const char *); +/* Return malloc'd copy of str, or of "" if NULL, exit on failure. */ +char *getcpy(const char *str); + char *get_default_editor(void); char *getfolder(int); @@ -323,7 +325,23 @@ char *pwd (void); char *r1bindex(char *, int); void readconfig (struct node **, FILE *, const char *, int); int refile (char **, char *); -void ruserpass (char *, char **, char **); + +/* + * Read our credentials file and (optionally) ask the user for anything + * missing. + * + * Arguments: + * + * host - Hostname (to scan credentials file) + * aname - Pointer to filled-in username + * apass - Pointer to filled-in password + * flags - One or more of RUSERPASS_NO_PROMPT_USER, + * RUSERPASS_NO_PROMPT_PASSWORD + */ +void ruserpass (const char *host, char **aname, char **apass, int flags); +#define RUSERPASS_NO_PROMPT_USER 0x01 +#define RUSERPASS_NO_PROMPT_PASSWORD 0x02 + int remdir (char *); void scan_detect_mbox_style (FILE *); void scan_finished (); @@ -479,14 +497,15 @@ int writeBase64 (const unsigned char *, size_t, unsigned char *); int writeBase64raw (const unsigned char *, size_t, unsigned char *); /* - * first argument: the string to be decoded - * second argument: the decoded bytes - * third argument: number of decoded bytes - * fourth argument: non-zero for text content, and for which CR's should be skipped - * fifth argument: for an MD5 digest, it can be null + * encoded - the string to be decoded + * decoded - the decoded bytes + * len - number of decoded bytes + * skip-crs - non-zero for text content, and for which CR's should be + * skipped + * digest - for an MD5 digest, it can be null */ -int decodeBase64 (const char *, unsigned char **, size_t *, int, - unsigned char *); +int decodeBase64 (const char *encoded, unsigned char **decoded, size_t *len, + int skip_crs, unsigned char *digest); void hexify (const unsigned char *, size_t, char **); @@ -494,16 +513,55 @@ void hexify (const unsigned char *, size_t, char **); * credentials management */ void init_credentials_file (); -int nmh_get_credentials (char *, char *, int, nmh_creds_t); + +/* + * Allocate and return a credentials structure. The credentials structure + * is now opaque; you need to use accessors to get inside of it. The + * accessors will only prompt the user for missing fields if they are + * needed. + * + * Arguments: + * + * host - Hostname we're connecting to (used to search credentials file) + * user - Username we are logging in as; can be NULL. + * + * Returns NULL on error, otherwise an allocated nmh_creds structure. + */ +nmh_creds_t nmh_get_credentials (const char *host, const char *user); + +/* + * Retrieve the user from a nmh_creds structure. May prompt the user + * if one is not defined. + * + * Arguments: + * + * creds - Structure from previous nmh_get_credentials() call + * + * Returns NULL on error, otherwise a NUL-termined string containing + * the username. Points to allocated memory in the credentials structure + * that is free()d by nmh_free_credentials(). + */ +const char *nmh_cred_get_user(nmh_creds_t creds); + +/* + * Retrieve the password from an nmh_creds structure. Otherwise identical + * to nmh_cred_get_user(). + */ +const char *nmh_cred_get_password(nmh_creds_t creds); + +/* + * Free an allocated nmh_creds structure. + */ +void nmh_credentials_free(nmh_creds_t creds); /* * program initialization * - * argv0: argv[0], presumably the program name - * read_context: 0: don't read context - * 1: read context, check nmh version, and issue warning message - * if non-existent or old - * 2: read context, don't check nmh version + * argv0 - argv[0], presumably the program name + * read_context - 0: don't read context + * - 1: read context, check nmh version, and issue warning message + * if non-existent or old + * - 2: read context, don't check nmh version */ int nmh_init(const char *argv0, int read_context);