X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/7c498df16cbb3d35eb8df3668ec426388f0dc974..b10c87b38c2345d15d30da5c18c823355ac506a9:/src/src/functions.h diff --git a/src/src/functions.h b/src/src/functions.h index 4193caccb..87953c413 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 @@ -49,6 +51,7 @@ extern BOOL tls_client_start(client_conn_ctx *, smtp_connect_args *, extern void tls_close(void *, int); extern BOOL tls_could_read(void); +extern void tls_daemon_init(void); extern int tls_export_cert(uschar *, size_t, void *); extern int tls_feof(void); extern int tls_ferror(void); @@ -209,6 +212,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); @@ -586,6 +591,42 @@ extern BOOL write_chunk(transport_ctx *, uschar *, int); extern ssize_t write_to_fd_buf(int, const uschar *, size_t); +#if !defined(MACRO_PREDEF) && !defined(COMPILE_UTILITY) +/* 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 */ + +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 /* !MACRO_PREDEF */ + +#endif /* _FUNCTIONS_H_ */ + /* vi: aw */ /* End of functions.h */