From 77255b7f9c5204c8ced541730562e028772b5d35 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sat, 30 Apr 2005 08:38:32 +0000 Subject: r6527: Resurrect getntacl utility program. At the moment we only display the output of ndr_print_xattr_NTACL() to stdout. (This used to be commit b32c159c384c988385f13bbb16e610d825820e18) --- source4/utils/getntacl.c | 105 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 102 insertions(+), 3 deletions(-) (limited to 'source4/utils/getntacl.c') diff --git a/source4/utils/getntacl.c b/source4/utils/getntacl.c index 87cc280fcc..8d857d206a 100644 --- a/source4/utils/getntacl.c +++ b/source4/utils/getntacl.c @@ -3,7 +3,7 @@ Get NT ACLs from UNIX files. - Copyright (C) Tim Potter 2004 + Copyright (C) Tim Potter 2005 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,9 +22,108 @@ #include "includes.h" #include "system/filesys.h" +#include "libcli/security/security.h" +#include "librpc/gen_ndr/ndr_xattr.h" -int main(int argc, char **argv) +#if HAVE_XATTR_SUPPORT + +/* eww - crappy dependencies */ + +NTSTATUS samdb_privilege_setup(struct security_token *token) +{ + token->privilege_mask = 0; + return NT_STATUS_OK; +} + +static void ntacl_print_debug_helper(struct ndr_print *ndr, const char *format, ...) _PRINTF_ATTRIBUTE(2,3) { - printf("This utility disabled until rewritten\n"); + va_list ap; + char *s = NULL; + int i; + + va_start(ap, format); + vasprintf(&s, format, ap); + va_end(ap); + + for (i=0;idepth;i++) { + printf(" "); + } + + printf("%s\n", s); + free(s); +} + +static NTSTATUS get_ntacl(char *filename, struct xattr_NTACL **ntacl, + ssize_t *ntacl_len) +{ + DATA_BLOB blob; + ssize_t size; + NTSTATUS result; + struct ndr_pull *ndr; + struct ndr_print *pr; + + *ntacl = talloc(NULL, struct xattr_NTACL); + + size = getxattr(filename, XATTR_NTACL_NAME, NULL, 0); + + if (size < 0) { + fprintf(stderr, "get_ntacl: %s\n", strerror(errno)); + return NT_STATUS_INTERNAL_ERROR; + } + + blob.data = talloc_size(*ntacl, size); + blob.length = getxattr(filename, XATTR_NTACL_NAME, blob.data, size); + + if (blob.length < 0) { + fprintf(stderr, "get_ntacl: %s\n", strerror(errno)); + return NT_STATUS_INTERNAL_ERROR; + } + + ndr = ndr_pull_init_blob(&blob, NULL); + + result = ndr_pull_xattr_NTACL(ndr, NDR_SCALARS|NDR_BUFFERS, *ntacl); + + if (NT_STATUS_IS_OK(result)) { + pr = talloc(*ntacl, struct ndr_print); + pr->print = ntacl_print_debug_helper; + pr->depth = 0; + pr->flags = 0; + + ndr_print_xattr_NTACL(pr, filename, *ntacl); + } + + return result; +} + +static void print_ntacl(struct xattr_NTACL *ntacl) +{ +} + +int main(int argc, char *argv[]) +{ + struct xattr_NTACL *ntacl; + ssize_t ntacl_len; + + if (argc != 2) { + fprintf(stderr, "Usage: getntacl FILENAME\n"); + return 1; + } + + + get_ntacl(argv[1], &ntacl, &ntacl_len); + + print_ntacl(ntacl); + + return 0; +} + +#else + +int main(int argc, char *argv[]) +{ + printf("getntacl: not compiled with xattr support!\n"); return 1; + } + +#endif -- cgit