Subject: Re: kauth and access to process credentials
To: Christos Zoulas <christos@astron.com>
From: Steven M. Bellovin <smb@cs.columbia.edu>
List: tech-kern
Date: 02/18/2007 15:13:39
On Sun, 18 Feb 2007 19:06:19 +0000 (UTC)
christos@astron.com (Christos Zoulas) wrote:

>
> 
> The problem is that once the #defines or inlines exist in a header,
> users of the defines/inlines will include that header to get the
> definitions. At this point both the structure and the defines/inlines
> become visible to the users, and nobody can prevent the users to use
> the field members of the functions directly instead of going through
> the inlines.

"You can't make something foolproof because fools are so smart".  

C isn't an object-oriented language where we can really hide that
stuff.  All we can do is provide the proper interfaces, and shoot down
any patches that Do the Wrong Thing.

> 
> There is an ugly way to prevent this, by using cpp macros to destroy
> the member definitions after the inline function is defined. Eg.
> 
> struct foo {
> 	int foo_id;
> };
> 
> static __inline int
> get_foo_id(const struct foo *p) {
> 	return p->foo_id;
> }
> 
> #define foo_id error
> 
I'm not sure if I should say "cool" or "ouch"!



		--Steve Bellovin, http://www.cs.columbia.edu/~smb