pidl uid_t and gid_t

Andrew Bartlett abartlet at samba.org
Tue Mar 1 00:37:36 MST 2011


On Tue, 2011-03-01 at 08:33 +0100, Stefan (metze) Metzmacher wrote:
> Hi Andrew,
> 
> > commit 646aefd998c1af366dcaee6cbc2bad9359a71f45
> > Author: Andrew Bartlett <abartlet at samba.org>
> > Date:   Fri Feb 11 18:45:32 2011 +1100
> > 
> >     pidl Add support for uid_t and gid_t types
> >     
> >     These are mapped to uint64_t, which should be big enough.  This is
> >     proposed to be used for internal Samba representations, where it would
> >     be more painful to convert all the callers to an uint64_t calling
> >     convention.
> >     
> >     Andrew Bartlett
> 
> > +/*
> > +  push a gid_t
> > +*/
> > +_PUBLIC_ enum ndr_err_code ndr_push_gid_t(struct ndr_push *ndr, int ndr_flags, gid_t g)
> > +{
> > +	return ndr_push_udlong(ndr, NDR_SCALARS, (uint64_t)g);
> > +}
> > +
> > +/*
> > +  pull a gid_t
> > +*/
> > +_PUBLIC_ enum ndr_err_code ndr_pull_gid_t(struct ndr_pull *ndr, int ndr_flags, gid_t *g)
> > +{
> > +	uint64_t gg;
> > +	NDR_CHECK(ndr_pull_udlong(ndr, ndr_flags, &gg));
> > +	*g = (gid_t)gg;
> > +	if (unlikely(gg != *g)) {
> > +		DEBUG(0,(__location__ ": gid_t pull doesn't fit 0x%016llx\n",
> > +			 (unsigned long long)gg));
> > +		return NDR_ERR_NDR64;
> > +	}
> > +	return NDR_ERR_SUCCESS;
> > +}
> > +
> > +
> > +/*
> >    pull a ipv4address
> >  */
> >  _PUBLIC_ enum ndr_err_code ndr_pull_ipv4address(struct ndr_pull *ndr, int ndr_flags, const char **address)
> > @@ -1050,6 +1100,16 @@ _PUBLIC_ void ndr_print_time_t(struct ndr_print *ndr, const char *name, time_t t
> >  	}
> >  }
> >  
> > +_PUBLIC_ void ndr_print_uid_t(struct ndr_print *ndr, const char *name, uid_t u)
> > +{
> > +	ndr_print_dlong(ndr, name, u);
> > +}
> > +
> > +_PUBLIC_ void ndr_print_gid_t(struct ndr_print *ndr, const char *name, gid_t g)
> > +{
> > +	ndr_print_dlong(ndr, name, g);
> > +}
> > +
> >  _PUBLIC_ void ndr_print_union(struct ndr_print *ndr, const char *name, int level, const char *type)
> >  {
> >  	if (ndr->flags & LIBNDR_PRINT_ARRAY_HEX) {
> > diff --git a/pidl/lib/Parse/Pidl/NDR.pm b/pidl/lib/Parse/Pidl/NDR.pm
> > index 3edb9b7..5ade5c1 100644
> > --- a/pidl/lib/Parse/Pidl/NDR.pm
> > +++ b/pidl/lib/Parse/Pidl/NDR.pm
> > @@ -66,6 +66,8 @@ my $scalar_alignment = {
> >  	'string' => 4,
> >  	'string_array' => 4, #???
> >  	'time_t' => 4,
> > +	'uid_t' => 8,
> > +	'gid_t' => 8,
> >  	'NTTIME' => 4,
> >  	'NTTIME_1sec' => 4,
> >  	'NTTIME_hyper' => 8,
> 
> udlong aligns to 4 byte and not to 8 as hyper would do.

Thanks.  I guess it would be better to map it to a hyper then?

Andrew Bartlett

-- 
Andrew Bartlett                                http://samba.org/~abartlet/
Authentication Developer, Samba Team           http://samba.org
Samba Developer, Cisco Inc.



More information about the samba-technical mailing list