mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-07-07 18:35:46 +00:00
admin: Introduce virAdmServer structure
This is the key structure of all management operations performed on the daemon/clients. An admin client needs to be able to identify another client (either admin or non-privileged client) to perform an action on it. This identification includes a server the client is connected to, thus a client-side representation of a server is needed. Signed-off-by: Erik Skultety <eskultet@redhat.com>
This commit is contained in:
parent
159a37f659
commit
c50a834b80
@ -42,6 +42,14 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
typedef struct _virAdmConnect virAdmConnect;
|
typedef struct _virAdmConnect virAdmConnect;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virAdmServer:
|
||||||
|
*
|
||||||
|
* a virAdmServer is a private structure and client-side representation of
|
||||||
|
* a remote server object
|
||||||
|
*/
|
||||||
|
typedef struct _virAdmServer virAdmServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virAdmConnectPtr:
|
* virAdmConnectPtr:
|
||||||
*
|
*
|
||||||
@ -51,6 +59,15 @@ typedef struct _virAdmConnect virAdmConnect;
|
|||||||
*/
|
*/
|
||||||
typedef virAdmConnect *virAdmConnectPtr;
|
typedef virAdmConnect *virAdmConnectPtr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virAdmServerPtr:
|
||||||
|
*
|
||||||
|
* a virAdmServerPtr is a pointer to a virAdmServer structure,
|
||||||
|
* this is the type used to reference client-side representation of a
|
||||||
|
* remote server object throughout all the APIs.
|
||||||
|
*/
|
||||||
|
typedef virAdmServer *virAdmServerPtr;
|
||||||
|
|
||||||
virAdmConnectPtr virAdmConnectOpen(const char *name, unsigned int flags);
|
virAdmConnectPtr virAdmConnectOpen(const char *name, unsigned int flags);
|
||||||
int virAdmConnectClose(virAdmConnectPtr conn);
|
int virAdmConnectClose(virAdmConnectPtr conn);
|
||||||
|
|
||||||
|
@ -32,12 +32,20 @@
|
|||||||
*/
|
*/
|
||||||
const ADMIN_STRING_MAX = 4194304;
|
const ADMIN_STRING_MAX = 4194304;
|
||||||
|
|
||||||
|
/* Upper limit on list of servers */
|
||||||
|
const ADMIN_SERVER_LIST_MAX = 16384;
|
||||||
|
|
||||||
/* A long string, which may NOT be NULL. */
|
/* A long string, which may NOT be NULL. */
|
||||||
typedef string admin_nonnull_string<ADMIN_STRING_MAX>;
|
typedef string admin_nonnull_string<ADMIN_STRING_MAX>;
|
||||||
|
|
||||||
/* A long string, which may be NULL. */
|
/* A long string, which may be NULL. */
|
||||||
typedef admin_nonnull_string *admin_string;
|
typedef admin_nonnull_string *admin_string;
|
||||||
|
|
||||||
|
/* A server which may NOT be NULL */
|
||||||
|
struct admin_nonnull_server {
|
||||||
|
admin_nonnull_string name;
|
||||||
|
};
|
||||||
|
|
||||||
/*----- Protocol. -----*/
|
/*----- Protocol. -----*/
|
||||||
struct admin_connect_open_args {
|
struct admin_connect_open_args {
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
/* -*- c -*- */
|
/* -*- c -*- */
|
||||||
|
struct admin_nonnull_server {
|
||||||
|
admin_nonnull_string name;
|
||||||
|
};
|
||||||
struct admin_connect_open_args {
|
struct admin_connect_open_args {
|
||||||
u_int flags;
|
u_int flags;
|
||||||
};
|
};
|
||||||
|
@ -65,6 +65,9 @@ virClassPtr virAdmConnectCloseCallbackDataClass;
|
|||||||
static void virAdmConnectDispose(void *obj);
|
static void virAdmConnectDispose(void *obj);
|
||||||
static void virAdmConnectCloseCallbackDataDispose(void *obj);
|
static void virAdmConnectCloseCallbackDataDispose(void *obj);
|
||||||
|
|
||||||
|
virClassPtr virAdmServerClass;
|
||||||
|
static void virAdmServerDispose(void *obj);
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virDataTypesOnceInit(void)
|
virDataTypesOnceInit(void)
|
||||||
{
|
{
|
||||||
@ -94,6 +97,7 @@ virDataTypesOnceInit(void)
|
|||||||
|
|
||||||
DECLARE_CLASS_LOCKABLE(virAdmConnect);
|
DECLARE_CLASS_LOCKABLE(virAdmConnect);
|
||||||
DECLARE_CLASS_LOCKABLE(virAdmConnectCloseCallbackData);
|
DECLARE_CLASS_LOCKABLE(virAdmConnectCloseCallbackData);
|
||||||
|
DECLARE_CLASS(virAdmServer);
|
||||||
|
|
||||||
#undef DECLARE_CLASS_COMMON
|
#undef DECLARE_CLASS_COMMON
|
||||||
#undef DECLARE_CLASS_LOCKABLE
|
#undef DECLARE_CLASS_LOCKABLE
|
||||||
@ -859,3 +863,34 @@ virAdmConnectCloseCallbackDataDispose(void *obj)
|
|||||||
|
|
||||||
virObjectUnlock(cb_data);
|
virObjectUnlock(cb_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virAdmServerPtr
|
||||||
|
virAdmGetServer(virAdmConnectPtr conn, const char *name)
|
||||||
|
{
|
||||||
|
virAdmServerPtr ret = NULL;
|
||||||
|
|
||||||
|
if (virDataTypesInitialize() < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if (!(ret = virObjectNew(virAdmServerClass)))
|
||||||
|
goto error;
|
||||||
|
if (VIR_STRDUP(ret->name, name) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
ret->conn = virObjectRef(conn);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
error:
|
||||||
|
virObjectUnref(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
virAdmServerDispose(void *obj)
|
||||||
|
{
|
||||||
|
virAdmServerPtr srv = obj;
|
||||||
|
VIR_DEBUG("release server srv=%p name=%s", srv, srv->name);
|
||||||
|
|
||||||
|
VIR_FREE(srv->name);
|
||||||
|
virObjectUnref(srv->conn);
|
||||||
|
}
|
||||||
|
@ -42,6 +42,7 @@ extern virClassPtr virStorageVolClass;
|
|||||||
extern virClassPtr virStoragePoolClass;
|
extern virClassPtr virStoragePoolClass;
|
||||||
|
|
||||||
extern virClassPtr virAdmConnectClass;
|
extern virClassPtr virAdmConnectClass;
|
||||||
|
extern virClassPtr virAdmServerClass;
|
||||||
|
|
||||||
# define virCheckConnectReturn(obj, retval) \
|
# define virCheckConnectReturn(obj, retval) \
|
||||||
do { \
|
do { \
|
||||||
@ -317,6 +318,30 @@ extern virClassPtr virAdmConnectClass;
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
# define virCheckAdmServerReturn(obj, retval) \
|
||||||
|
do { \
|
||||||
|
virAdmServerPtr _srv = (obj); \
|
||||||
|
if (!virObjectIsClass(_srv, virAdmServerClass) || \
|
||||||
|
!virObjectIsClass(_srv->conn, virAdmConnectClass)) { \
|
||||||
|
virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INVALID_CONN, \
|
||||||
|
__FILE__, __FUNCTION__, __LINE__, \
|
||||||
|
__FUNCTION__); \
|
||||||
|
virDispatchError(NULL); \
|
||||||
|
return retval; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
# define virCheckAdmServerGoto(obj, label) \
|
||||||
|
do { \
|
||||||
|
virAdmServerPtr _srv = (obj); \
|
||||||
|
if (!virObjectIsClass(_srv, virAdmServerClass) || \
|
||||||
|
!virObjectIsClass(_srv->conn, virAdmConnectClass)) { \
|
||||||
|
virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INVALID_CONN, \
|
||||||
|
__FILE__, __FUNCTION__, __LINE__, \
|
||||||
|
__FUNCTION__); \
|
||||||
|
goto label; \
|
||||||
|
} \
|
||||||
|
} while (0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* VIR_DOMAIN_DEBUG:
|
* VIR_DOMAIN_DEBUG:
|
||||||
* @dom: domain
|
* @dom: domain
|
||||||
@ -417,6 +442,17 @@ struct _virAdmConnect {
|
|||||||
virAdmConnectCloseCallbackDataPtr closeCallback;
|
virAdmConnectCloseCallbackDataPtr closeCallback;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _virAdmServer:
|
||||||
|
*
|
||||||
|
* Internal structure associated to a daemon server
|
||||||
|
*/
|
||||||
|
struct _virAdmServer {
|
||||||
|
virObject object;
|
||||||
|
virAdmConnectPtr conn; /* pointer back to the admin connection */
|
||||||
|
char *name; /* the server external name */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _virDomain:
|
* _virDomain:
|
||||||
@ -601,4 +637,6 @@ virDomainSnapshotPtr virGetDomainSnapshot(virDomainPtr domain,
|
|||||||
|
|
||||||
virAdmConnectPtr virAdmConnectNew(void);
|
virAdmConnectPtr virAdmConnectNew(void);
|
||||||
|
|
||||||
|
virAdmServerPtr virAdmGetServer(virAdmConnectPtr conn,
|
||||||
|
const char *name);
|
||||||
#endif /* __VIR_DATATYPES_H__ */
|
#endif /* __VIR_DATATYPES_H__ */
|
||||||
|
@ -9,6 +9,10 @@
|
|||||||
xdr_admin_connect_get_lib_version_ret;
|
xdr_admin_connect_get_lib_version_ret;
|
||||||
xdr_admin_connect_open_args;
|
xdr_admin_connect_open_args;
|
||||||
|
|
||||||
|
# datatypes.h
|
||||||
|
virAdmGetServer;
|
||||||
|
virAdmServerClass;
|
||||||
|
|
||||||
# Let emacs know we want case-insensitive sorting
|
# Let emacs know we want case-insensitive sorting
|
||||||
# Local Variables:
|
# Local Variables:
|
||||||
# sort-fold-case: t
|
# sort-fold-case: t
|
||||||
|
Loading…
Reference in New Issue
Block a user