From owner-freebsd-hackers Sat May 5 17:12:17 2001 Delivered-To: freebsd-hackers@freebsd.org Received: from bazooka.unixfreak.org (bazooka.unixfreak.org [63.198.170.138]) by hub.freebsd.org (Postfix) with ESMTP id 8546D37B42C for ; Sat, 5 May 2001 17:12:07 -0700 (PDT) (envelope-from dima@unixfreak.org) Received: from spike.unixfreak.org (spike [63.198.170.139]) by bazooka.unixfreak.org (Postfix) with ESMTP id 3A4903E0B for ; Sat, 5 May 2001 17:12:07 -0700 (PDT) To: hackers@freebsd.org Subject: Man page for struct ucred/xucred Date: Sat, 05 May 2001 17:12:07 -0700 From: Dima Dorfman Message-Id: <20010506001207.3A4903E0B@bazooka.unixfreak.org> Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG I wrote a rather short manual page about struct ucred, struct xucred, and the routines used to manipulate the former. There really isn't all that much to write about, but I thought it'd be useful to have something that describes the cr* functions even though the code isn't hard to find or particularly difficult to understand. In addition it mentions that struct ucred shouldn't be exported to the userland; it may seem obvious, but implicit traditions are rarely a good thing. While writing this I also noticed that there's no routine to make a struct xucred from a struct ucred. Should there be one? I think so. Perhaps something with an API of void crxucred(struct ucred *cr, struct xucred *xcr); would be useful. Diff against /dev/null for the man page attached. Comments? Suggestions? Thanks, Dima Dorfman dima@unixfreak.org --- /dev/null Sat May 5 16:12:17 2001 +++ ucred.9 Sat May 5 16:49:03 2001 @@ -0,0 +1,108 @@ +.\" +.\" Copyright (c) 2001 Dima Dorfman +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd May 5, 2001 +.Dt UCRED 9 +.Os +.Sh NAME +.Nm ucred , +.Nm xucred +.Nd structures to describe user credentials in the kernel and userland +.Sh SYNOPSIS +.Fd #include +.Fd #include +.Ft struct ucred * +.Fn crget "void" +.Ft void +.Fn crhold "struct ucred *cr" +.Ft void +.Fn crfree "struct ucred *cr" +.Ft struct ucred * +.Fn crcopy "struct ucred *cr" +.Ft struct ucred * +.Fn crdup "struct ucred *cr" +.Sh DESCRIPTION +The +.Ft ucred +structure describes the user credentials within the kernel. +The +.Ft xucred +structure describes the same user credentials in the userland. +A +.Ft struct ucred +should never be exported to the userland; +instead, it should be converted into a +.Ft struct xucred . +.Pp +The following kernel functions exist to facilitate the maintenance of +user credentials structures within the kernel. +.Pp +.Bl -tag -width crcopy +.It Fn crget +Allocate the memory for and return a zeroed structure. +The reference count is set to 1. +.It Fn crhold +Increment the reference count of +.Fa cr . +.It Fn crfree +Decrement the reference count of +.Fa cr . +If the reference count drops to 0, +the memory for the structure is deallocated. +.It Fn crcopy +Make a copy and subsequently free +.Fa cr . +If the reference count was 1, +this is equivilent to just assigning the address of +.Fa cr +to the new variable. +Otherwise, it is equivilent to calling +.Fn crdup +and +.Fn crfree . +.It Fn crdup +Allocate memory for a new structure and populate its contents with +those from +.Fa cr . +The reference count of the new structure is set to 1. +.El +.Sh NOTES +The +.Dv cr_uid +member of +.Ft struct ucred +should never be inspected directly to determine whether the user +associated with this credentials structure should have superuser +privileges. +Instead, one of the +.Xr suser 9 +functions should be used. +.Sh BUGS +There is no routine to convert a +.Ft struct ucred +into a +.Ft struct xucred . To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message