Compiler quietening
[exim.git] / src / src / functions.h
index 866865600b50da5b61afa396f5de57b7032c565d..1b1a17dcbb63ef94cba853a96452323998e55d32 100644 (file)
@@ -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 *);
@@ -106,10 +105,14 @@ extern int     auth_call_saslauthd(const uschar *, const uschar *,
                 const uschar *, const uschar *, uschar **);
 extern int     auth_check_serv_cond(auth_instance *);
 extern int     auth_check_some_cond(auth_instance *, uschar *, uschar *, int);
+extern int     auth_client_item(void *, auth_instance *, const uschar **,
+                unsigned, int, uschar *, int);
 
 
 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);
 extern int     auth_xtextdecode(uschar *, uschar **);
@@ -208,6 +211,8 @@ 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);
 extern const uschar * exim_errstr(int);
 extern void    exim_exit(int, const uschar *);
 extern void    exim_nullstd(void);
@@ -237,6 +242,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 *);
@@ -354,6 +360,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 *);
@@ -569,7 +576,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 **);
@@ -583,6 +590,40 @@ 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(<exim-uid>, <exim-gid>).
+
+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 */
+
+static inline int
+exim_fchown(int fd, uid_t owner, gid_t group, const uschar *name)
+{
+return fchown(fd, owner, group)
+  ? exim_chown_failure(fd, name, owner, group) : 0;
+}
+
+static inline int
+exim_chown(const uschar *name, uid_t owner, gid_t group)
+{
+return chown(CCS name, owner, group)
+  ? exim_chown_failure(-1, name, owner, group) : 0;
+}
+
+#endif  /* _FUNCTIONS_H_ */
+
 /* vi: aw
 */
 /* End of functions.h */