Hi Jason,

Jason McIntyre wrote on Sun, Jul 05, 2009 at 05:46:06PM +0100:
> On Tue, Jun 30, 2009 at 08:56:36AM -0300, Joao Salvatti wrote:

>> Isn't the header file <sys/types.h> absent in the manual page
>> authenticate(3)?

Yes, it is absent, but grepping /usr/share/man/cat3 for "types.h"
tells me that sys/types.h is not mentioned in a single section 3
manual page.

>> The use of its functions, such as auth_userokay(),
>> will never compile without the inclusion of that header.

Right, even without actually using any of the functions,
including either <login_cap.h> or <bsd_auth.h> without including
<sys/types.h> will make your program not compile.

The header <login_cap.h> uses quad_t and uid_t.
The type quad_t is a non-POSIX type defined in <sys/types.h>.
The type uid_t is required by POSIX in <sys/types.h>.

The header <bsd_auth.h> uses size_t.
The type size_t is required by POSIX in <sys/types.h>.

> no one has replied to this yet, i think. so, the man page is right or
> wrong? any takers?

I guess the manual is fine, but i'm not sure these two header files
are correct.  Lots of other header files include <sys/types.h>,
both some traditional BSD headers like <db.h> and some POSIX headers
like <fcntl.h>.

Probably, this went unnoticed because most programs including
the headers <login_cap.h> and <bsd_auth.h> also include some
of the other headers including <sys/types.h>, like <pwd.h>,
<stdio.h>, <stdlib.h> and <unistd.h>...

If i understand correctly, headers using types from <sys/types.h>
ought to include <sys/types.h>
 - unconditionally, if they are POSIX headers and the use of the
   type is mandated by POSIX
 - protected by __BSD_VISIBLE or the appropriate feature macro
   like __XPG_VISIBLE, if they are POSIX headers and if the use
   is not mandated by POSIX, but by a lesser standard
 - protected by __BSD_VISIBLE only, if they are POSIX headers and
   if the use is not mandated by a standard
 - unconditionally, if they are not POSIX headers

Here, the latter case applies, so i suggest the following diff.
Feel free to apply the cluestick in case i got this wrong...

Yours,
  Ingo


Index: bsd_auth.h
===================================================================
RCS file: /cvs/src/include/bsd_auth.h,v
retrieving revision 1.9
diff -u -p -r1.9 bsd_auth.h
--- bsd_auth.h  6 Jan 2006 18:53:04 -0000       1.9
+++ bsd_auth.h  5 Jul 2009 19:51:35 -0000
@@ -52,6 +52,8 @@ typedef enum {
 } auth_item_t;
 
 #include <sys/cdefs.h>
+#include <sys/types.h>
+
 __BEGIN_DECLS
 struct passwd;
 struct login_cap;
Index: login_cap.h
===================================================================
RCS file: /cvs/src/include/login_cap.h,v
retrieving revision 1.13
diff -u -p -r1.13 login_cap.h
--- login_cap.h 28 Jan 2005 17:17:22 -0000      1.13
+++ login_cap.h 5 Jul 2009 19:51:35 -0000
@@ -88,6 +88,8 @@ typedef struct login_cap {
 } login_cap_t;
 
 #include <sys/cdefs.h>
+#include <sys/types.h>
+
 __BEGIN_DECLS
 struct passwd;

Reply via email to