modifications to libndr support for uid_t and gid_t
authorAndrew Bartlett <abartlet@samba.org>
Fri, 11 Feb 2011 09:38:05 +0000 (20:38 +1100)
committerStefan Metzmacher <metze@samba.org>
Tue, 22 Feb 2011 18:32:54 +0000 (19:32 +0100)
librpc/ndr/libndr.h
librpc/ndr/ndr_basic.c

index 21e4bdaeec6f1e6fe4b37565d56629ccb2596312..c9e8a6272e33da46b4f10ac5e978f167622ce5c8 100644 (file)
@@ -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)
index 60d9bc5626dfbb0140714ebe7ab85f706c889375..a94705f265b9ed1d1bec8079cf6ac1a499d747c6 100644 (file)
@@ -812,19 +812,19 @@ _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 t)
+_PUBLIC_ enum ndr_err_code ndr_push_uid_t(struct ndr_push *ndr, int ndr_flags, uid_t u)
 {
-       return ndr_push_int64(ndr, ndr_flags, t);
+       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 *t)
+_PUBLIC_ enum ndr_err_code ndr_pull_uid_t(struct ndr_pull *ndr, int ndr_flags, uid_t *u)
 {
-       int64_t tt;
-       NDR_CHECK(ndr_pull_int64(ndr, ndr_flags, &tt));
-       *t = tt;
+       int64_t uu;
+       NDR_CHECK(ndr_pull_udlong(ndr, ndr_flags, (uint64_t *)&uu));
+       *u = uu;
        return NDR_ERR_SUCCESS;
 }
 
@@ -832,19 +832,19 @@ _PUBLIC_ enum ndr_err_code ndr_pull_uid_t(struct ndr_pull *ndr, int ndr_flags, u
 /*
   push a gid_t
 */
-_PUBLIC_ enum ndr_err_code ndr_push_gid_t(struct ndr_push *ndr, int ndr_flags, gid_t t)
+_PUBLIC_ enum ndr_err_code ndr_push_gid_t(struct ndr_push *ndr, int ndr_flags, gid_t g)
 {
-       return ndr_push_int64(ndr, ndr_flags, t);
+       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 *t)
+_PUBLIC_ enum ndr_err_code ndr_pull_gid_t(struct ndr_pull *ndr, int ndr_flags, gid_t *g)
 {
-       int64_t tt;
-       NDR_CHECK(ndr_pull_int64(ndr, ndr_flags, &tt));
-       *t = tt;
+       uint32_t gg;
+       NDR_CHECK(ndr_pull_uint32(ndr, ndr_flags, &gg));
+       *g = gg;
        return NDR_ERR_SUCCESS;
 }
 
@@ -1090,6 +1090,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) {