summary refs log tree commit diff
path: root/src/nm-auth-subject.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-auth-subject.c')
-rw-r--r--src/nm-auth-subject.c48
1 files changed, 33 insertions, 15 deletions
diff --git a/src/nm-auth-subject.c b/src/nm-auth-subject.c
index 86b873f0..eb496b28 100644
--- a/src/nm-auth-subject.c
+++ b/src/nm-auth-subject.c
@@ -37,10 +37,6 @@
 #include "nm-enum-types.h"
 #include "NetworkManagerUtils.h"
 
-G_DEFINE_TYPE (NMAuthSubject, nm_auth_subject, G_TYPE_OBJECT)
-
-#define NM_AUTH_SUBJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_AUTH_SUBJECT, NMAuthSubjectPrivate))
-
 enum {
 	PROP_0,
 	PROP_SUBJECT_TYPE,
@@ -61,6 +57,30 @@ typedef struct {
 	} unix_process;
 } NMAuthSubjectPrivate;
 
+struct _NMAuthSubject {
+	GObject parent;
+	NMAuthSubjectPrivate _priv;
+};
+
+struct _NMAuthSubjectClass {
+	GObjectClass parent;
+};
+
+G_DEFINE_TYPE (NMAuthSubject, nm_auth_subject, G_TYPE_OBJECT)
+
+#define NM_AUTH_SUBJECT_GET_PRIVATE(self) \
+	({ \
+		/* preserve the const-ness of self. Unfortunately, that
+		 * way, @self cannot be a void pointer */ \
+		typeof (self) _self = (self); \
+		\
+		/* Get compiler error if variable is of wrong type */ \
+		_nm_unused const NMAuthSubject *_self2 = (_self); \
+		\
+		nm_assert (NM_IS_AUTH_SUBJECT (_self)); \
+		&_self->_priv; \
+	})
+
 /**************************************************************/
 
 #define CHECK_SUBJECT(self, error_value) \
@@ -252,7 +272,7 @@ nm_auth_subject_new_internal (void)
 static void
 get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
-	NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (object);
+	NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE ((NMAuthSubject *) object);
 
 	switch (prop_id) {
 	case PROP_SUBJECT_TYPE:
@@ -276,7 +296,7 @@ get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 static void
 set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
-	NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (object);
+	NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE ((NMAuthSubject *) object);
 	NMAuthSubjectType subject_type;
 	const char *str;
 	gulong id;
@@ -317,8 +337,10 @@ set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *p
 }
 
 static void
-_clear_private (NMAuthSubjectPrivate *priv)
+_clear_private (NMAuthSubject *self)
 {
+	NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (self);
+
 	priv->subject_type = NM_AUTH_SUBJECT_TYPE_INVALID;
 	priv->unix_process.pid = G_MAXULONG;
 	priv->unix_process.uid = G_MAXULONG;
@@ -328,7 +350,7 @@ _clear_private (NMAuthSubjectPrivate *priv)
 static void
 nm_auth_subject_init (NMAuthSubject *self)
 {
-	_clear_private (NM_AUTH_SUBJECT_GET_PRIVATE (self));
+	_clear_private (self);
 }
 
 static void
@@ -363,7 +385,7 @@ constructed (GObject *object)
 			/* Is the process already gone? Then fail creation of the auth subject
 			 * by clearing the type. */
 			if (kill (priv->unix_process.pid, 0) != 0)
-				_clear_private (priv);
+				_clear_private (self);
 
 			/* Otherwise, although we didn't detect a start_time, the process is still around.
 			 * That could be due to procfs mounted with hidepid. So just accept the request.
@@ -378,16 +400,14 @@ constructed (GObject *object)
 		break;
 	}
 
-	_clear_private (priv);
+	_clear_private (self);
 	g_return_if_reached ();
 }
 
 static void
 finalize (GObject *object)
 {
-	NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (object);
-
-	_clear_private (priv);
+	_clear_private ((NMAuthSubject *) object);
 
 	G_OBJECT_CLASS (nm_auth_subject_parent_class)->finalize (object);
 }
@@ -397,8 +417,6 @@ nm_auth_subject_class_init (NMAuthSubjectClass *config_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (config_class);
 
-	g_type_class_add_private (config_class, sizeof (NMAuthSubjectPrivate));
-
 	/* virtual methods */
 	object_class->get_property = get_property;
 	object_class->set_property = set_property;