Stanislav Ievlev пишет:
> Видимо проще начать с примеров:
> Возьмем для примера пользователей.
> 
> Внешне это выглядит так (пишу не на idl, а не некотором языке):
> namespace users {
>    int max_uid;
>    int min_uid
>    [list] object account {
>          key string name; //имя будем считать ключевым параметром по
> которому различаются объекты в списке
>          string gecos;
>    }
> }
> 
> Хотелось бы иметь возможность делать следующие запросы (описываю в
> стиле языка запросов alterator, слово account не употребляю ибо пока
> не понимаю куда вставить):
> 
> /users action=list
> 
> На выходе получаю список пользователей и некоторых атрибутов
> ((name "test1" uid "111")
>  (name "test2" uid "222")
> ... )
> 
> /users name=test action read
> 
> На выходе получаю значение атрибутов пользователя
> 
> /users name=test action write gecos "zzz"
> /users name=test action delete
> /users name=test action new.
> 
> Можно ли всё это как-то "вложить" в idl, принятые в Samba4?
Выглядеть это будет примерно вот так. Специально не комментирую этот 
интерфейс, чтобы изучить, как он читается людьми, которые не имели дело 
с классическим DCE-RPC IDL.

#include "idl_types.h"
[ uuid("12345778-1234-abcd-ef00-0123456789ac"), 
 

   version(1.0),
   helpstring("User administration service") 
 

]
interface users {
        typedef struct {
                string name;
                string gecos;
                uint32 uid;
        } user_account;

        typedef struct {
                uint32  count;
                [size_is(count)]        users_account *users;
        } user_account_array;

        uint32  users_list(
                [out]   user_account_array *users,
                [out]   uint32  count
        );

        uint32  users_read(
                [in,ref]        string *name,
                [out]   user_account *account
        );

        uint32  users_write(
                [in,ref]        string *name,
                [in,ref]        user_account *account
        );

        uint32  users_delete(
                [in,ref]        string *name
        );

        uint32  users_new(
                [in,ref]        string *name,
                [out,ref]       user_account *account
        );
}

-- 
/ Alexander Bokovoy
Samba Team                      http://www.samba.org/
ALT Linux Team                  http://www.altlinux.org/
Midgard Project Ry              http://www.midgard-project.org/
_______________________________________________
devel-conf mailing list
[email protected]
https://lists.altlinux.org/mailman/listinfo/devel-conf

Ответить