From f315224d7c7ced4f012ddaef1a6b4f4bf7883b25 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Thu, 7 Aug 2003 15:58:28 +1000 Subject: [PATCH] - (dtucker) [defines.h] Bug #336: Add CMSG_DATA and CMSG_FIRSTHDR macros if not already defined (eg Linux with some versions of libc5), based on those from OpenBSD. --- ChangeLog | 7 +++++-- defines.h | 20 +++++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0f2f798e1..513799d3d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,7 +2,10 @@ - (dtucker) [session.c] Have session_break_req not attempt to send a break if TIOCSBRK and TIOCCBRK are not defined (eg Cygwin). - (dtucker) [canohost.c] Bug #336: Only check ip options if IP_OPTIONS is - defined (eg really old Linux). + defined (fixes compile error on really old Linuxes). + - (dtucker) [defines.h] Bug #336: Add CMSG_DATA and CMSG_FIRSTHDR macros if + not already defined (eg Linux with some versions of libc5), based on those + from OpenBSD. 20030802 - (dtucker) [monitor.h monitor_wrap.h] Remove excess ident tags. @@ -791,4 +794,4 @@ - Fix sshd BindAddress and -b options for systems using fake-getaddrinfo. Report from murple@murple.net, diagnosis from dtucker@zip.com.au -$Id: ChangeLog,v 1.2881 2003/08/07 03:29:04 dtucker Exp $ +$Id: ChangeLog,v 1.2882 2003/08/07 05:58:28 dtucker Exp $ diff --git a/defines.h b/defines.h index ec610d0db..3679ea549 100644 --- a/defines.h +++ b/defines.h @@ -25,7 +25,7 @@ #ifndef _DEFINES_H #define _DEFINES_H -/* $Id: defines.h,v 1.99 2003/06/11 12:51:32 djm Exp $ */ +/* $Id: defines.h,v 1.100 2003/08/07 05:58:28 dtucker Exp $ */ /* Constants */ @@ -577,4 +577,22 @@ struct winsize { /** end of login recorder definitions */ +#ifndef CMSG_DATA +/* given pointer to struct cmsghdr, return pointer to data */ +#define CMSG_DATA(cmsg) \ + ((u_char *)(cmsg) + (((u_int)(sizeof(struct cmsghdr)) \ + (sizeof(int) - 1)) &~ (sizeof(int) - 1))) +#endif /* CMSG_DATA */ + +#ifndef CMSG_FIRSTHDR +/* + * RFC 2292 requires to check msg_controllen, in case that the kernel returns + * an empty list for some reasons. + */ +# define CMSG_FIRSTHDR(mhdr) \ + ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \ + (struct cmsghdr *)(mhdr)->msg_control : \ + (struct cmsghdr *)NULL) +#endif /* CMSG_FIRSTHDR */ + #endif /* _DEFINES_H */