X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/37942ad83fcb6b788cceb4abe2891c92651811a7..b66fecb428871a3eb274d9370671f1eaf8c5ccec:/src/src/functions.h diff --git a/src/src/functions.h b/src/src/functions.h index 853a5fd80..c5af51652 100644 --- a/src/src/functions.h +++ b/src/src/functions.h @@ -10,6 +10,8 @@ to avoid having a lot of tiddly little headers with only a couple of lines in them. However, some functions that are used (or not used) by utility programs are in in fact in separate headers. */ +#ifndef _FUNCTIONS_H_ +#define _FUNCTIONS_H_ #ifdef EXIM_PERL @@ -44,12 +46,9 @@ extern uschar * tls_cert_fprt_md5(void *); extern uschar * tls_cert_fprt_sha1(void *); extern uschar * tls_cert_fprt_sha256(void *); -extern void * tls_client_start(int, host_item *, address_item *, - transport_instance *, -# ifdef SUPPORT_DANE - dns_answer *, -# endif - tls_support *, uschar **); +extern BOOL tls_client_start(client_conn_ctx *, smtp_connect_args *, + void *, tls_support *, uschar **); + extern void tls_close(void *, int); extern BOOL tls_could_read(void); extern int tls_export_cert(uschar *, size_t, void *); @@ -112,6 +111,7 @@ extern int auth_client_item(void *, auth_instance *, const uschar **, extern int auth_get_data(uschar **, const uschar *, int); extern int auth_get_no64_data(uschar **, uschar *); +extern int auth_prompt(const uschar *); extern int auth_read_input(const uschar *); extern void auth_show_supported(FILE *); extern uschar *auth_xtextencode(uschar *, int); @@ -211,6 +211,10 @@ extern BOOL enq_start(uschar *, unsigned); extern uschar *event_raise(uschar *, const uschar *, uschar *); extern void msg_event_raise(const uschar *, const address_item *); #endif + +extern int exim_chown_failure(int, const uschar*, uid_t, gid_t); +inline int exim_chown(const uschar*, uid_t, gid_t); +inline int exim_fchown(int, uid_t, gid_t, const uschar*); extern const uschar * exim_errstr(int); extern void exim_exit(int, const uschar *); extern void exim_nullstd(void); @@ -240,6 +244,7 @@ extern uschar * fn_hdrs_added(void); extern void gstring_reset_unused(gstring *); extern void header_add(int, const char *, ...); +extern header_line *header_add_at_position_internal(BOOL, uschar *, BOOL, int, const char *, ...); extern int header_checkname(header_line *, BOOL); extern BOOL header_match(uschar *, BOOL, BOOL, string_item *, int, ...); extern int host_address_extract_port(uschar *); @@ -357,6 +362,7 @@ extern void queue_count(void); extern void queue_run(uschar *, uschar *, BOOL); extern int random_number(int); +extern const uschar *rc_to_string(int); extern int rda_interpret(redirect_block *, int, uschar *, uschar *, uschar *, uschar *, uschar *, ugid_block *, address_item **, uschar **, error_block **, int *, uschar *); @@ -572,7 +578,7 @@ extern int verify_check_header_address(uschar **, uschar **, int, int, int, extern int verify_check_headers(uschar **); extern int verify_check_header_names_ascii(uschar **); extern int verify_check_host(uschar **); -extern int verify_check_notblind(void); +extern int verify_check_notblind(BOOL); extern int verify_check_given_host(const uschar **, const host_item *); extern int verify_check_this_host(const uschar **, unsigned int *, const uschar*, const uschar *, const uschar **); @@ -585,6 +591,39 @@ extern void version_init(void); extern BOOL write_chunk(transport_ctx *, uschar *, int); extern ssize_t write_to_fd_buf(int, const uschar *, size_t); +/* exim_chown - in some NFSv4 setups *seemes* to be an issue with + chown(, ). + + Probably because the idmapping is broken, misconfigured or set up in + an unusal way. (see Bug 2931). As I'm not sure, if this was a single + case of misconfiguration, or if there are more such broken systems + out, I try to impose as least impact as possible and for now just write + a panic log entry pointing to the bug report. You're encouraged to + contact the developers, if you experience this issue. + + fd the file descriptor (or -1 if not valid) + name the file name for error messages or for file operations, + if fd is < 0 + owner the owner + group the group + + returns 0 on success, -1 on failure */ + +inline int +exim_fchown(int fd, uid_t owner, gid_t group, const uschar *name) +{ +return (0 == fchown(fd, owner, group)) + ? 0 : exim_chown_failure(fd, name, owner, group); +} + +inline int +exim_chown(const uschar *name, uid_t owner, gid_t group) +{ +return (0 == chown(name, owner, group)) + ? 0 : exim_chown_failure(-1, name, owner, group); +} + +#endif /* _FUNCTIONS_H_ */ /* vi: aw */