[Samba] Lookup sid with libsmbclient (invoked from c# on mono)

Aurélien Aptel aaptel at suse.com
Mon Oct 12 16:23:21 UTC 2020


Vincent Le Toux via samba <samba at lists.samba.org> writes:
> Indeed, rpcclient is the program I looked for the first time.
>
> I cannot invoke it in a command line because I have at least 1000 SID to
> resolve
> (I discover them one by one so I'll have to run rpcclient at least 1000
> times)

You can pass multiples SID at a time to these commands. But you would
have to batch the resolving in your app.

>
> I looked at rpcclient source code, but there is no easy function such as
> "connect" that can be used easily from libsmbclient
>
> Thinking about Smb_negox for example. I cannot just call structure->member
> because I'll to translate all structure.
> Working with pointer (IntPtr in c#) is much simpler.

You can write a very simple C wrapper and call the wrapper from C#.

So you would have:

rpcwrapper.c:
    void* init_connection(const char *user, const char *pw)
    {
        // establish connection and return handle
    }
    
    const char* name_to_sid(void *con, const char *name)
    {
        // use con to resolve and return sid
    }
    
    const char* sid_to_name(void *con, const char *sid)
    {
        // use con to resolve and return name
    }
    
    void free_connection(void *con)
    {
        // release con handle
    }

This wrapper would link against the same libs as rpcclient binary and
would compile to librpcwrapper.so. From C you can #include all the
struct definitions you need or copy them from the source code.

Then from C# you just load librpcwrapper.so and call those simple functions.

Cheers,
-- 
Aurélien Aptel / SUSE Labs Samba Team
GPG: 1839 CB5F 9F5B FB9B AA97  8C99 03C8 A49B 521B D5D3
SUSE Software Solutions Germany GmbH, Maxfeldstr. 5, 90409 Nürnberg, DE
GF: Felix Imendörffer, Mary Higgins, Sri Rasiah HRB 247165 (AG München)



More information about the samba mailing list