Back to index

lightdm  1.3.2
Classes | Functions
x-authority.c File Reference
#include <string.h>
#include "x-authority.h"
#include "x-common.h"

Go to the source code of this file.

Classes

struct  XAuthorityPrivate
struct  XAuthorityRecordPrivate

Functions

 G_DEFINE_TYPE (XAuthority, x_authority, G_TYPE_OBJECT)
 G_DEFINE_TYPE (XAuthorityRecord, x_authority_record, G_TYPE_OBJECT)
XAuthorityx_authority_new (void)
gboolean x_authority_load (XAuthority *authority, const gchar *filename, GError **error)
XAuthorityRecordx_authority_match_local (XAuthority *authority, const gchar *authorization_name)
XAuthorityRecordx_authority_match_localhost (XAuthority *authority, const gchar *authorization_name)
XAuthorityRecordx_authority_match_inet (XAuthority *authority, GInetAddress *address, const gchar *authorization_name)
static void x_authority_init (XAuthority *authority)
static void x_authority_finalize (GObject *object)
static void x_authority_class_init (XAuthorityClass *klass)
guint16 x_authority_record_get_authorization_data_length (XAuthorityRecord *record)
const guint8 * x_authority_record_get_authorization_data (XAuthorityRecord *record)
gboolean x_authority_record_check_cookie (XAuthorityRecord *record, const guint8 *cookie_data, guint16 cookie_data_length)
static void x_authority_record_init (XAuthorityRecord *record)
static void x_authority_record_finalize (GObject *object)
static void x_authority_record_class_init (XAuthorityRecordClass *klass)

Class Documentation

struct XAuthorityPrivate

Definition at line 19 of file xauthority.c.

Class Members
guint8 * address
gsize address_length
guint8 * authorization_data
gsize authorization_data_length
gchar * authorization_name
guint16 family
gchar * number
GList * records
struct XAuthorityRecordPrivate

Definition at line 11 of file x-authority.c.

Class Members
guint8 * address
guint16 address_length
guint8 * authorization_data
guint16 authorization_data_length
gchar * authorization_name
guint16 family
gchar * number

Function Documentation

G_DEFINE_TYPE ( XAuthority  ,
x_authority  ,
G_TYPE_OBJECT   
)
G_DEFINE_TYPE ( XAuthorityRecord  ,
x_authority_record  ,
G_TYPE_OBJECT   
)
static void x_authority_class_init ( XAuthorityClass klass) [static]

Definition at line 170 of file x-authority.c.

{
    GObjectClass *object_class = G_OBJECT_CLASS (klass);
    object_class->finalize = x_authority_finalize;
    g_type_class_add_private (klass, sizeof (XAuthorityPrivate));
}

Here is the call graph for this function:

static void x_authority_finalize ( GObject *  object) [static]

Definition at line 163 of file x-authority.c.

{
    XAuthority *authority = (XAuthority *) object;
    g_list_free_full (authority->priv->records, g_object_unref);
}

Here is the caller graph for this function:

static void x_authority_init ( XAuthority authority) [static]

Definition at line 157 of file x-authority.c.

{
    authority->priv = G_TYPE_INSTANCE_GET_PRIVATE (authority, x_authority_get_type (), XAuthorityPrivate);
}

Here is the call graph for this function:

gboolean x_authority_load ( XAuthority authority,
const gchar *  filename,
GError **  error 
)

Definition at line 32 of file x-authority.c.

{
    guint8 *xauth_data;
    gsize xauth_length;
    gsize offset = 0;

    if (!g_file_get_contents (filename, (gchar **) &xauth_data, &xauth_length, error))
        return FALSE;

    while (offset < xauth_length)
    {
        XAuthorityRecord *record;
        guint16 length;

        record = g_object_new (x_authority_record_get_type (), NULL);
        record->priv->family = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
        record->priv->address_length = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
        record->priv->address = read_string8 (xauth_data, xauth_length, record->priv->address_length, &offset);
        length = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
        record->priv->number = (gchar *) read_string8 (xauth_data, xauth_length, length, &offset);
        length = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
        record->priv->authorization_name = (gchar *) read_string8 (xauth_data, xauth_length, length, &offset);
        record->priv->authorization_data_length = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
        record->priv->authorization_data = read_string8 (xauth_data, xauth_length, record->priv->authorization_data_length, &offset);

        authority->priv->records = g_list_append (authority->priv->records, record);
    }

    return TRUE;
}

Here is the call graph for this function:

Here is the caller graph for this function:

XAuthorityRecord* x_authority_match_inet ( XAuthority authority,
GInetAddress *  address,
const gchar *  authorization_name 
)

Definition at line 102 of file x-authority.c.

{
    GList *link;
    guint16 family;
    gssize address_data_length;
    const guint8 *address_data;

    switch (g_inet_address_get_family (address))
    {
    case G_SOCKET_FAMILY_IPV4:
        family = XAUTH_FAMILY_INTERNET;
        break;
    case G_SOCKET_FAMILY_IPV6:
        family = XAUTH_FAMILY_INTERNET6;
        break;
    default:
        return NULL;
    }

    address_data_length = g_inet_address_get_native_size (address);
    address_data = g_inet_address_to_bytes (address);
    for (link = authority->priv->records; link; link = link->next)
    {
        XAuthorityRecord *record = link->data;
        int i;
        gboolean matches = TRUE;

        if (strcmp (record->priv->authorization_name, authorization_name) != 0)
            continue;

        if (record->priv->family == XAUTH_FAMILY_WILD)
            return record;

        if (record->priv->family != family)
            continue;

        if (record->priv->address_length != address_data_length)
            continue;

        for (i = 0; i < address_data_length; i++)
        {
            if (address_data[i] != record->priv->address[i])
            {
                matches = FALSE;
                break;
            }
        }
        if (matches)
            return record;
    }

    return NULL;
}
XAuthorityRecord* x_authority_match_local ( XAuthority authority,
const gchar *  authorization_name 
)

Definition at line 64 of file x-authority.c.

{
    GList *link;

    for (link = authority->priv->records; link; link = link->next)
    {
        XAuthorityRecord *record = link->data;
      
        if (strcmp (record->priv->authorization_name, authorization_name) != 0)
            continue;
      
        if (record->priv->family == XAUTH_FAMILY_WILD || record->priv->family == XAUTH_FAMILY_LOCAL)
            return record;
    }

    return NULL;
}

Here is the caller graph for this function:

XAuthorityRecord* x_authority_match_localhost ( XAuthority authority,
const gchar *  authorization_name 
)

Definition at line 83 of file x-authority.c.

{
    GList *link;

    for (link = authority->priv->records; link; link = link->next)
    {
        XAuthorityRecord *record = link->data;
      
        if (strcmp (record->priv->authorization_name, authorization_name) != 0)
            continue;
      
        if (record->priv->family == XAUTH_FAMILY_WILD || record->priv->family == XAUTH_FAMILY_LOCALHOST)
            return record;
    }

    return NULL;
}

Here is the caller graph for this function:

Definition at line 26 of file x-authority.c.

{
    return g_object_new (x_authority_get_type (), NULL);
}

Here is the call graph for this function:

Here is the caller graph for this function:

gboolean x_authority_record_check_cookie ( XAuthorityRecord record,
const guint8 *  cookie_data,
guint16  cookie_data_length 
)

Definition at line 190 of file x-authority.c.

{
    guint16 i;

    if (strcmp (record->priv->authorization_name, "MIT-MAGIC-COOKIE-1") != 0)
        return FALSE;
  
    if (cookie_data_length != record->priv->authorization_data_length)
        return FALSE;

    for (i = 0; i < cookie_data_length; i++)
        if (cookie_data[i] != record->priv->authorization_data[i])
            return FALSE;

    return TRUE;
}

Here is the caller graph for this function:

static void x_authority_record_class_init ( XAuthorityRecordClass klass) [static]

Definition at line 224 of file x-authority.c.

{
    GObjectClass *object_class = G_OBJECT_CLASS (klass);
    object_class->finalize = x_authority_record_finalize;
    g_type_class_add_private (klass, sizeof (XAuthorityRecordPrivate));
}

Here is the call graph for this function:

static void x_authority_record_finalize ( GObject *  object) [static]

Definition at line 214 of file x-authority.c.

{
    XAuthorityRecord *record = (XAuthorityRecord *) object;
    g_free (record->priv->address);
    g_free (record->priv->number);
    g_free (record->priv->authorization_name);
    g_free (record->priv->authorization_data);
}

Here is the caller graph for this function:

Definition at line 184 of file x-authority.c.

{
    return record->priv->authorization_data;
}

Definition at line 178 of file x-authority.c.

{
    return record->priv->authorization_data_length;
}
static void x_authority_record_init ( XAuthorityRecord record) [static]

Definition at line 208 of file x-authority.c.

{
    record->priv = G_TYPE_INSTANCE_GET_PRIVATE (record, x_authority_record_get_type (), XAuthorityRecordPrivate);
}

Here is the call graph for this function: