[samba-jp:20424] Re: 共有の権限をWindows側のプログラムで取得したいのですが

市川孝文@アイロベックス ichikawa @ ilovex.co.jp
2008年 10月 3日 (金) 21:58:32 JST


市川@アイロベックスです。


お返事が遅くなりまして申し訳ありません。

> おそらく、Win32のNetShareEnum関数(以下)を使うと同じことができると思います。
> http://msdn.microsoft.com/ja-jp/library/cc446966.aspx
> 共有名の一覧くらいは得ることができます。
> ただ、共有の「権限」の情報が得られるかどうかはわかりません。

いただきましたヒントを元に、試行錯誤をしてみまして、
どうやら NetShareGetInfoと SHARE_INFO_502の組み合わせで、
sambaの共有の権限についてもなんとか取れるところまで行けそうです。
今度はアカウント名やそれ以前に SIDを取り出すことが
うまくできていないのでまだ一進一退の最中ではありますが・・・。



ちなみにですが、共有ではなく、ファイル/フォルダの権限についてなら、
.NetFrameworkのライブラリだけでリモート先の sambaからでも
権限一覧が取得できるようなのです。

DirectoryInfo dirInfo = new DirectoryInfo(@"\\server\share\filename");
DirectorySecurity dirSecurity = dirInfo.GetAccessControl();
AuthorizationRuleCollection authRuleCol
  = dirSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
foreach (FileSystemAccessRule fsysRule in authRuleCol) {
  Console.WriteLine( "{0} {1} {2} {3} {4} {5}"
   , fsysRule.IdentityReference.Value
/* , fsysRule.IdentityReference.Translate(typeof(NTAccount)).Value */
   , fsysRule.InheritanceFlags.ToString()
   , fsysRule.IsInherited
   , fsysRule.PropagationFlags.ToString()
   , fsysRule.AccessControlType.ToString()
   , fsysRule.FileSystemRights.ToString()
 );
}

共有に関しても同じようなライブラリがあれば苦労しないのですけれど・・・。

これ以上は sambaからは逸脱してしまいそうなので、とりあえずご報告まで。
ありがとうございました。
---
市川孝文@株式会社アイロベックス

-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: smime.p7s
型:         application/x-pkcs7-signature
サイズ:     2860 バイト
説明:       S/MIME Cryptographic Signature
URL:        </mailman/archives/samba-jp/attachments/20081003/9a1081b8/attachment.bin>


samba-jp メーリングリストの案内