]> git.proxmox.com Git - ceph.git/blame - ceph/src/dokan/dbg.cc
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / dokan / dbg.cc
CommitLineData
f67539c2
TL
1/*
2 * Copyright (C) 2021 SUSE LINUX GmbH
3 *
4 * This is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License version 2.1, as published by the Free Software
7 * Foundation. See file COPYING.
8 *
9*/
10
11#include "ceph_dokan.h"
12#include "utils.h"
13#include "dbg.h"
14
15#include "common/debug.h"
16#include "common/dout.h"
17
18#define dout_context g_ceph_context
19#define dout_subsys ceph_subsys_rbd
20#undef dout_prefix
21#define dout_prefix *_dout << "rbd-wnbd: "
22
23#define check_flag(stream, val, flag) if (val & flag) { stream << "[" #flag "]"; }
24#define check_flag_eq(stream, val, flag) if (val == flag) { stream << "[" #flag "]"; }
25
26
27void print_credentials(ostringstream& Stream, PDOKAN_FILE_INFO DokanFileInfo)
28{
29 UCHAR buffer[1024];
30 DWORD returnLength;
31 CHAR accountName[256];
32 CHAR domainName[256];
33 DWORD accountLength = sizeof(accountName) / sizeof(WCHAR);
34 DWORD domainLength = sizeof(domainName) / sizeof(WCHAR);
35 SID_NAME_USE snu;
36
37 int err = 0;
38 HANDLE handle = DokanOpenRequestorToken(DokanFileInfo);
39 if (handle == INVALID_HANDLE_VALUE) {
40 err = GetLastError();
41 derr << "DokanOpenRequestorToken failed. Error: " << err << dendl;
42 return;
43 }
44
45 if (!GetTokenInformation(handle, TokenUser, buffer,
46 sizeof(buffer), &returnLength)) {
47 err = GetLastError();
48 derr << "GetTokenInformation failed. Error: " << err << dendl;
49 CloseHandle(handle);
50 return;
51 }
52
53 CloseHandle(handle);
54
55 PTOKEN_USER tokenUser = (PTOKEN_USER)buffer;
56 if (!LookupAccountSidA(NULL, tokenUser->User.Sid, accountName,
57 &accountLength, domainName, &domainLength, &snu)) {
58 err = GetLastError();
59 derr << "LookupAccountSid failed. Error: " << err << dendl;
60 return;
61 }
62
63 Stream << "\n\tAccountName: " << accountName << ", DomainName: " << domainName;
64}
65
66void print_open_params(
67 LPCSTR FilePath,
68 ACCESS_MASK AccessMode,
69 DWORD FlagsAndAttributes,
70 ULONG ShareMode,
71 DWORD CreationDisposition,
72 ULONG CreateOptions,
73 PDOKAN_FILE_INFO DokanFileInfo)
74{
75 ostringstream o;
76 o << "CreateFile: " << FilePath << ". ";
77 print_credentials(o, DokanFileInfo);
78
79 o << "\n\tCreateDisposition: " << hex << CreationDisposition << " ";
80 check_flag_eq(o, CreationDisposition, CREATE_NEW);
81 check_flag_eq(o, CreationDisposition, OPEN_ALWAYS);
82 check_flag_eq(o, CreationDisposition, CREATE_ALWAYS);
83 check_flag_eq(o, CreationDisposition, OPEN_EXISTING);
84 check_flag_eq(o, CreationDisposition, TRUNCATE_EXISTING);
85
86 o << "\n\tShareMode: " << hex << ShareMode << " ";
87 check_flag(o, ShareMode, FILE_SHARE_READ);
88 check_flag(o, ShareMode, FILE_SHARE_WRITE);
89 check_flag(o, ShareMode, FILE_SHARE_DELETE);
90
91 o << "\n\tAccessMode: " << hex << AccessMode << " ";
92 check_flag(o, AccessMode, GENERIC_READ);
93 check_flag(o, AccessMode, GENERIC_WRITE);
94 check_flag(o, AccessMode, GENERIC_EXECUTE);
95
96 check_flag(o, AccessMode, WIN32_DELETE);
97 check_flag(o, AccessMode, FILE_READ_DATA);
98 check_flag(o, AccessMode, FILE_READ_ATTRIBUTES);
99 check_flag(o, AccessMode, FILE_READ_EA);
100 check_flag(o, AccessMode, READ_CONTROL);
101 check_flag(o, AccessMode, FILE_WRITE_DATA);
102 check_flag(o, AccessMode, FILE_WRITE_ATTRIBUTES);
103 check_flag(o, AccessMode, FILE_WRITE_EA);
104 check_flag(o, AccessMode, FILE_APPEND_DATA);
105 check_flag(o, AccessMode, WRITE_DAC);
106 check_flag(o, AccessMode, WRITE_OWNER);
107 check_flag(o, AccessMode, SYNCHRONIZE);
108 check_flag(o, AccessMode, FILE_EXECUTE);
109 check_flag(o, AccessMode, STANDARD_RIGHTS_READ);
110 check_flag(o, AccessMode, STANDARD_RIGHTS_WRITE);
111 check_flag(o, AccessMode, STANDARD_RIGHTS_EXECUTE);
112
113 o << "\n\tFlagsAndAttributes: " << hex << FlagsAndAttributes << " ";
114 check_flag(o, FlagsAndAttributes, FILE_ATTRIBUTE_ARCHIVE);
115 check_flag(o, FlagsAndAttributes, FILE_ATTRIBUTE_ENCRYPTED);
116 check_flag(o, FlagsAndAttributes, FILE_ATTRIBUTE_HIDDEN);
117 check_flag(o, FlagsAndAttributes, FILE_ATTRIBUTE_NORMAL);
118 check_flag(o, FlagsAndAttributes, FILE_ATTRIBUTE_NOT_CONTENT_INDEXED);
119 check_flag(o, FlagsAndAttributes, FILE_ATTRIBUTE_OFFLINE);
120 check_flag(o, FlagsAndAttributes, FILE_ATTRIBUTE_READONLY);
121 check_flag(o, FlagsAndAttributes, FILE_ATTRIBUTE_SYSTEM);
122 check_flag(o, FlagsAndAttributes, FILE_ATTRIBUTE_TEMPORARY);
123 check_flag(o, FlagsAndAttributes, FILE_FLAG_WRITE_THROUGH);
124 check_flag(o, FlagsAndAttributes, FILE_FLAG_OVERLAPPED);
125 check_flag(o, FlagsAndAttributes, FILE_FLAG_NO_BUFFERING);
126 check_flag(o, FlagsAndAttributes, FILE_FLAG_RANDOM_ACCESS);
127 check_flag(o, FlagsAndAttributes, FILE_FLAG_SEQUENTIAL_SCAN);
128 check_flag(o, FlagsAndAttributes, FILE_FLAG_DELETE_ON_CLOSE);
129 check_flag(o, FlagsAndAttributes, FILE_FLAG_BACKUP_SEMANTICS);
130 check_flag(o, FlagsAndAttributes, FILE_FLAG_POSIX_SEMANTICS);
131 check_flag(o, FlagsAndAttributes, FILE_FLAG_OPEN_REPARSE_POINT);
132 check_flag(o, FlagsAndAttributes, FILE_FLAG_OPEN_NO_RECALL);
133 check_flag(o, FlagsAndAttributes, SECURITY_ANONYMOUS);
134 check_flag(o, FlagsAndAttributes, SECURITY_IDENTIFICATION);
135 check_flag(o, FlagsAndAttributes, SECURITY_IMPERSONATION);
136 check_flag(o, FlagsAndAttributes, SECURITY_DELEGATION);
137 check_flag(o, FlagsAndAttributes, SECURITY_CONTEXT_TRACKING);
138 check_flag(o, FlagsAndAttributes, SECURITY_EFFECTIVE_ONLY);
139 check_flag(o, FlagsAndAttributes, SECURITY_SQOS_PRESENT);
140
141 o << "\n\tIsDirectory: " << (DokanFileInfo->IsDirectory != NULL);
142
143 o << "\n\tCreateOptions: " << hex << CreateOptions << " ";
144 check_flag(o, CreateOptions, FILE_DIRECTORY_FILE);
145 check_flag(o, CreateOptions, FILE_WRITE_THROUGH);
146 check_flag(o, CreateOptions, FILE_SEQUENTIAL_ONLY);
147 check_flag(o, CreateOptions, FILE_NO_INTERMEDIATE_BUFFERING);
148 check_flag(o, CreateOptions, FILE_SYNCHRONOUS_IO_ALERT);
149 check_flag(o, CreateOptions, FILE_SYNCHRONOUS_IO_NONALERT);
150 check_flag(o, CreateOptions, FILE_NON_DIRECTORY_FILE);
151 check_flag(o, CreateOptions, FILE_CREATE_TREE_CONNECTION);
152 check_flag(o, CreateOptions, FILE_COMPLETE_IF_OPLOCKED);
153 check_flag(o, CreateOptions, FILE_NO_EA_KNOWLEDGE);
154 check_flag(o, CreateOptions, FILE_OPEN_REMOTE_INSTANCE);
155 check_flag(o, CreateOptions, FILE_RANDOM_ACCESS);
156 check_flag(o, CreateOptions, FILE_DELETE_ON_CLOSE);
157 check_flag(o, CreateOptions, FILE_OPEN_BY_FILE_ID);
158 check_flag(o, CreateOptions, FILE_OPEN_FOR_BACKUP_INTENT);
159 check_flag(o, CreateOptions, FILE_NO_COMPRESSION);
160 check_flag(o, CreateOptions, FILE_OPEN_REQUIRING_OPLOCK);
161 check_flag(o, CreateOptions, FILE_DISALLOW_EXCLUSIVE);
162 check_flag(o, CreateOptions, FILE_RESERVE_OPFILTER);
163 check_flag(o, CreateOptions, FILE_OPEN_REPARSE_POINT);
164 check_flag(o, CreateOptions, FILE_OPEN_NO_RECALL);
165 check_flag(o, CreateOptions, FILE_OPEN_FOR_FREE_SPACE_QUERY);
166
167 // We're using a high log level since this will only be enabled with the
168 // explicit debug flag.
169 dout(0) << o.str() << dendl;
170}