mirror of
https://github.com/samba-team/samba.git
synced 2025-03-29 02:50:28 +03:00
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
This commit is contained in:
parent
9900aa4fb4
commit
646aefd998
@ -490,6 +490,8 @@ NDR_SCALAR_PROTO(dlong, int64_t)
|
||||
NDR_SCALAR_PROTO(hyper, uint64_t)
|
||||
NDR_SCALAR_PROTO(pointer, void *)
|
||||
NDR_SCALAR_PROTO(time_t, time_t)
|
||||
NDR_SCALAR_PROTO(uid_t, uid_t)
|
||||
NDR_SCALAR_PROTO(gid_t, gid_t)
|
||||
NDR_SCALAR_PROTO(NTSTATUS, NTSTATUS)
|
||||
NDR_SCALAR_PROTO(WERROR, WERROR)
|
||||
NDR_SCALAR_PROTO(NTTIME, NTTIME)
|
||||
|
@ -809,6 +809,56 @@ _PUBLIC_ enum ndr_err_code ndr_pull_time_t(struct ndr_pull *ndr, int ndr_flags,
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
push a uid_t
|
||||
*/
|
||||
_PUBLIC_ enum ndr_err_code ndr_push_uid_t(struct ndr_push *ndr, int ndr_flags, uid_t u)
|
||||
{
|
||||
return ndr_push_udlong(ndr, NDR_SCALARS, (uint64_t)u);
|
||||
}
|
||||
|
||||
/*
|
||||
pull a uid_t
|
||||
*/
|
||||
_PUBLIC_ enum ndr_err_code ndr_pull_uid_t(struct ndr_pull *ndr, int ndr_flags, uid_t *u)
|
||||
{
|
||||
uint64_t uu;
|
||||
NDR_CHECK(ndr_pull_udlong(ndr, ndr_flags, &uu));
|
||||
*u = (uid_t)uu;
|
||||
if (unlikely(uu != *u)) {
|
||||
DEBUG(0,(__location__ ": uid_t pull doesn't fit 0x%016llx\n",
|
||||
(unsigned long long)uu));
|
||||
return NDR_ERR_NDR64;
|
||||
}
|
||||
return NDR_ERR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
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
|
||||
*/
|
||||
@ -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) {
|
||||
|
@ -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,
|
||||
|
@ -895,7 +895,7 @@ sub ConvertObjectFromPythonData($$$$$$;$)
|
||||
$self->pidl("}");
|
||||
return;
|
||||
}
|
||||
if (expandAlias($actual_ctype->{NAME}) =~ /^(char|u?int[0-9]*|time_t)$/) {
|
||||
if (expandAlias($actual_ctype->{NAME}) =~ /^(char|u?int[0-9]*|time_t|uid_t|gid_t)$/) {
|
||||
$self->pidl("PY_CHECK_TYPE(&PyInt_Type, $cvar, $fail);");
|
||||
$self->pidl("$target = PyInt_AsLong($cvar);");
|
||||
return;
|
||||
@ -1103,7 +1103,7 @@ sub ConvertScalarToPython($$$)
|
||||
return "PyLong_FromLongLong($cvar)";
|
||||
}
|
||||
|
||||
if ($ctypename =~ /^(char|u?int[0-9]*|time_t)$/) {
|
||||
if ($ctypename =~ /^(char|u?int[0-9]*|time_t|uid_t|gid_t)$/) {
|
||||
return "PyInt_FromLong($cvar)";
|
||||
}
|
||||
|
||||
|
@ -48,6 +48,8 @@ my %scalars = (
|
||||
"string" => "const char *",
|
||||
"string_array" => "const char **",
|
||||
"time_t" => "time_t",
|
||||
"uid_t" => "uid_t",
|
||||
"gid_t" => "gid_t",
|
||||
"NTTIME" => "NTTIME",
|
||||
"NTTIME_1sec" => "NTTIME",
|
||||
"NTTIME_hyper" => "NTTIME",
|
||||
|
Loading…
x
Reference in New Issue
Block a user