X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/1d08c1e0c0de0d321883ece1c36bce851fe893c7..dcbbebd768c6444e2fbf83de2b3dc6c76b513a54:/h/prototypes.h diff --git a/h/prototypes.h b/h/prototypes.h index bc5b6a56..a89fe734 100644 --- a/h/prototypes.h +++ b/h/prototypes.h @@ -1,6 +1,4 @@ - -/* - * prototypes.h -- various prototypes +/* prototypes.h -- various prototypes * * If you modify functions here, please document their current behavior * as much as practical. @@ -18,6 +16,7 @@ char *etcpath(char *); struct msgs_array; void add_profile_entry (const char *, const char *); +void inform(char *fmt, ...); void adios (const char *, const char *, ...) NORETURN; void admonish (char *, char *, ...); void advertise (const char *, char *, const char *, va_list); @@ -53,7 +52,6 @@ int context_foil (char *); void context_read (void); void context_replace (char *, char *); void context_save (void); -char *copy (const char *, char *); char **copyip (char **, char **, int); void cpydata (int, int, const char *, const char *); void cpydgst (int, int, char *, char *); @@ -167,7 +165,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); @@ -203,7 +203,7 @@ char *get_term_stringcap(char *capability); * arg1..argN - Arguments 1-N. * * Returns a tparm and tputs-processed string, or NULL if there was a problem - * initializating the terminal or retrieving the capability. + * initialising the terminal or retrieving the capability. */ char *get_term_stringparm(char *capability, long arg1, long arg2); @@ -256,12 +256,11 @@ int m_gmprot (void); char *m_maildir (char *); char *m_mailpath (char *); char *m_name (int); -int m_putenv (char *, char *); int m_rand (unsigned char *, size_t); char *m_mktemp(const char *, int *, FILE **); char *m_mktemp2(const char *, const char *, int *, FILE **); char *m_mktemps(const char *pfx, const char *suffix, int *, FILE **); -char *get_temp_dir(); +char *get_temp_dir(void); /* * Create a subprocess and redirect our standard output to it. @@ -310,11 +309,11 @@ void nmh_clear_screen(void); char *nmh_getpass(const char *); char *new_fs (char *, char *, char *); char *path(char *, int); -int peekc(FILE *ib); int pidwait (pid_t, int); int pidstatus (int, FILE *, char *); char *pluspath(char *); void print_help (char *, struct swit *, int); +void print_intro (FILE *, int); void print_sw (const char *, const struct swit *, char *, FILE *); void print_version (char *); void push (void); @@ -322,11 +321,26 @@ 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 (); -void scan_reset_m_getfld_state (); +void scan_finished(void); int seq_addmsg (struct msgs *, char *, int, int, int); int seq_addsel (struct msgs *, char *, int, int); char *seq_bits (struct msgs *); @@ -399,7 +413,6 @@ char *snprintb (char *buffer, size_t size, unsigned flags, char *bitfield); int ssequal (const char *, const char *); int stringdex (char *, char *); char *trimcpy (char *); -int unputenv (char *); /* * Remove quotes and quoted-pair sequences from RFC-5322 atoms. @@ -478,26 +491,76 @@ 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 **); /* * credentials management */ -void init_credentials_file (); -int nmh_get_credentials (char *, char *, int, nmh_creds_t); +void init_credentials_file(void); /* - * temporary file management + * 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-terminated 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 */ int nmh_init(const char *argv0, int read_context); + +/* + * temporary file management + */ int m_unlink(const char *); void unregister_for_removal(int remove_files);