|
Packit Service |
c6b9b0 |
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
Packit Service |
c6b9b0 |
/*
|
|
Packit Service |
c6b9b0 |
* Copyright © 2012 – 2017 Red Hat, Inc.
|
|
Packit Service |
c6b9b0 |
*
|
|
Packit Service |
c6b9b0 |
* This library is free software; you can redistribute it and/or
|
|
Packit Service |
c6b9b0 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
c6b9b0 |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
c6b9b0 |
* version 2 of the License, or (at your option) any later version.
|
|
Packit Service |
c6b9b0 |
*
|
|
Packit Service |
c6b9b0 |
* This library is distributed in the hope that it will be useful,
|
|
Packit Service |
c6b9b0 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
c6b9b0 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
c6b9b0 |
* Lesser General Public License for more details.
|
|
Packit Service |
c6b9b0 |
*
|
|
Packit Service |
c6b9b0 |
* You should have received a copy of the GNU Lesser General
|
|
Packit Service |
c6b9b0 |
* Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit Service |
c6b9b0 |
*/
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
#include "config.h"
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
#include "goakerberosidentityinquiry.h"
|
|
Packit Service |
c6b9b0 |
#include "goaidentityinquiryprivate.h"
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
#include <string.h>
|
|
Packit Service |
c6b9b0 |
#include <glib/gi18n.h>
|
|
Packit Service |
c6b9b0 |
#include <gio/gio.h>
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
struct _GoaKerberosIdentityInquiryPrivate
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaIdentity *identity;
|
|
Packit Service |
c6b9b0 |
char *name;
|
|
Packit Service |
c6b9b0 |
char *banner;
|
|
Packit Service |
c6b9b0 |
GList *queries;
|
|
Packit Service |
c6b9b0 |
int number_of_queries;
|
|
Packit Service |
c6b9b0 |
int number_of_unanswered_queries;
|
|
Packit Service |
c6b9b0 |
gboolean is_failed;
|
|
Packit Service |
c6b9b0 |
};
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
typedef struct
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaIdentityInquiry *inquiry;
|
|
Packit Service |
c6b9b0 |
krb5_prompt *kerberos_prompt;
|
|
Packit Service |
c6b9b0 |
gboolean is_answered;
|
|
Packit Service |
c6b9b0 |
} GoaKerberosIdentityQuery;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void identity_inquiry_interface_init (GoaIdentityInquiryInterface *
|
|
Packit Service |
c6b9b0 |
interface);
|
|
Packit Service |
c6b9b0 |
static void initable_interface_init (GInitableIface *interface);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
G_DEFINE_TYPE_WITH_CODE (GoaKerberosIdentityInquiry,
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry,
|
|
Packit Service |
c6b9b0 |
G_TYPE_OBJECT,
|
|
Packit Service |
c6b9b0 |
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
|
|
Packit Service |
c6b9b0 |
initable_interface_init)
|
|
Packit Service |
c6b9b0 |
G_IMPLEMENT_INTERFACE (GOA_TYPE_IDENTITY_INQUIRY,
|
|
Packit Service |
c6b9b0 |
identity_inquiry_interface_init));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static gboolean
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_initable_init (GInitable * initable,
|
|
Packit Service |
c6b9b0 |
GCancellable *cancellable,
|
|
Packit Service |
c6b9b0 |
GError ** error)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
if (g_cancellable_set_error_if_cancelled (cancellable, error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
return FALSE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return TRUE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
initable_interface_init (GInitableIface *interface)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
interface->init = goa_kerberos_identity_inquiry_initable_init;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static GoaKerberosIdentityQuery *
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_query_new (GoaIdentityInquiry * inquiry,
|
|
Packit Service |
c6b9b0 |
krb5_prompt * kerberos_prompt)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityQuery *query;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
query = g_slice_new (GoaKerberosIdentityQuery);
|
|
Packit Service |
c6b9b0 |
query->inquiry = inquiry;
|
|
Packit Service |
c6b9b0 |
query->kerberos_prompt = kerberos_prompt;
|
|
Packit Service |
c6b9b0 |
query->is_answered = FALSE;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return query;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_query_free (GoaKerberosIdentityQuery *query)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_slice_free (GoaKerberosIdentityQuery, query);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_dispose (GObject *object)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityInquiry *self = GOA_KERBEROS_IDENTITY_INQUIRY (object);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_clear_object (&self->priv->identity);
|
|
Packit Service |
c6b9b0 |
g_clear_pointer (&self->priv->name, (GDestroyNotify) g_free);
|
|
Packit Service |
c6b9b0 |
g_clear_pointer (&self->priv->banner, (GDestroyNotify) g_free);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
G_OBJECT_CLASS (goa_kerberos_identity_inquiry_parent_class)->dispose (object);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_finalize (GObject *object)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityInquiry *self = GOA_KERBEROS_IDENTITY_INQUIRY (object);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_list_free_full (self->priv->queries, (GDestroyNotify) goa_kerberos_identity_query_free);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
G_OBJECT_CLASS (goa_kerberos_identity_inquiry_parent_class)->finalize (object);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_class_init (GoaKerberosIdentityInquiryClass *klass)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GObjectClass *object_class;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
object_class = G_OBJECT_CLASS (klass);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
object_class->dispose = goa_kerberos_identity_inquiry_dispose;
|
|
Packit Service |
c6b9b0 |
object_class->finalize = goa_kerberos_identity_inquiry_finalize;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_type_class_add_private (klass, sizeof (GoaKerberosIdentityInquiryPrivate));
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_init (GoaKerberosIdentityInquiry *self)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
|
|
Packit Service |
c6b9b0 |
GOA_TYPE_KERBEROS_IDENTITY_INQUIRY,
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityInquiryPrivate);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
GoaIdentityInquiry *
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_new (GoaKerberosIdentity * identity,
|
|
Packit Service |
c6b9b0 |
const char *name,
|
|
Packit Service |
c6b9b0 |
const char *banner,
|
|
Packit Service |
c6b9b0 |
krb5_prompt prompts[], int number_of_prompts)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GObject *object;
|
|
Packit Service |
c6b9b0 |
GoaIdentityInquiry *inquiry;
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityInquiry *self;
|
|
Packit Service |
c6b9b0 |
GError *error;
|
|
Packit Service |
c6b9b0 |
int i;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_KERBEROS_IDENTITY (identity), NULL);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (number_of_prompts > 0, NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
object = g_object_new (GOA_TYPE_KERBEROS_IDENTITY_INQUIRY, NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
inquiry = GOA_IDENTITY_INQUIRY (object);
|
|
Packit Service |
c6b9b0 |
self = GOA_KERBEROS_IDENTITY_INQUIRY (object);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
/* FIXME: make these construct properties */
|
|
Packit Service |
c6b9b0 |
self->priv->identity = g_object_ref (identity);
|
|
Packit Service |
c6b9b0 |
self->priv->name = g_strdup (name);
|
|
Packit Service |
c6b9b0 |
self->priv->banner = g_strdup (banner);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self->priv->number_of_queries = 0;
|
|
Packit Service |
c6b9b0 |
for (i = 0; i < number_of_prompts; i++)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityQuery *query;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
query = goa_kerberos_identity_query_new (inquiry, &prompts[i]);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self->priv->queries = g_list_prepend (self->priv->queries, query);
|
|
Packit Service |
c6b9b0 |
self->priv->number_of_queries++;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
self->priv->queries = g_list_reverse (self->priv->queries);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self->priv->number_of_unanswered_queries = self->priv->number_of_queries;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
error = NULL;
|
|
Packit Service |
c6b9b0 |
if (!g_initable_init (G_INITABLE (self), NULL, &error))
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
g_debug ("%s", error->message);
|
|
Packit Service |
c6b9b0 |
g_error_free (error);
|
|
Packit Service |
c6b9b0 |
g_object_unref (self);
|
|
Packit Service |
c6b9b0 |
return NULL;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return inquiry;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static GoaIdentity *
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_get_identity (GoaIdentityInquiry *inquiry)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityInquiry *self;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_KERBEROS_IDENTITY_INQUIRY (inquiry), NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self = GOA_KERBEROS_IDENTITY_INQUIRY (inquiry);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return self->priv->identity;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static char *
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_get_name (GoaIdentityInquiry *inquiry)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityInquiry *self;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_KERBEROS_IDENTITY_INQUIRY (inquiry), NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self = GOA_KERBEROS_IDENTITY_INQUIRY (inquiry);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return g_strdup (self->priv->name);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static char *
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_get_banner (GoaIdentityInquiry *inquiry)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityInquiry *self;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_KERBEROS_IDENTITY_INQUIRY (inquiry), NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self = GOA_KERBEROS_IDENTITY_INQUIRY (inquiry);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return g_strdup (self->priv->banner);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static gboolean
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_is_complete (GoaIdentityInquiry *inquiry)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityInquiry *self;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_KERBEROS_IDENTITY_INQUIRY (inquiry), FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self = GOA_KERBEROS_IDENTITY_INQUIRY (inquiry);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return self->priv->number_of_unanswered_queries == 0 || self->priv->is_failed;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static gboolean
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_is_failed (GoaIdentityInquiry *inquiry)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityInquiry *self;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_KERBEROS_IDENTITY_INQUIRY (inquiry), FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self = GOA_KERBEROS_IDENTITY_INQUIRY (inquiry);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return self->priv->is_failed;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_mark_query_answered (GoaKerberosIdentityInquiry * self,
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityQuery * query)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
if (query->is_answered)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
return;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
query->is_answered = TRUE;
|
|
Packit Service |
c6b9b0 |
self->priv->number_of_unanswered_queries--;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (self->priv->number_of_unanswered_queries == 0)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
_goa_identity_inquiry_emit_complete (GOA_IDENTITY_INQUIRY (self));
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_fail (GoaKerberosIdentityInquiry *self)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
self->priv->is_failed = TRUE;
|
|
Packit Service |
c6b9b0 |
_goa_identity_inquiry_emit_complete (GOA_IDENTITY_INQUIRY (self));
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_answer_query (GoaIdentityInquiry * inquiry,
|
|
Packit Service |
c6b9b0 |
GoaIdentityQuery *query,
|
|
Packit Service |
c6b9b0 |
const char *answer)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityInquiry *self;
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityQuery *kerberos_query = (GoaKerberosIdentityQuery *) query;
|
|
Packit Service |
c6b9b0 |
size_t answer_length;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_if_fail (GOA_IS_KERBEROS_IDENTITY_INQUIRY (inquiry));
|
|
Packit Service |
c6b9b0 |
g_return_if_fail (inquiry == kerberos_query->inquiry);
|
|
Packit Service |
c6b9b0 |
g_return_if_fail (!goa_kerberos_identity_inquiry_is_complete (inquiry));
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self = GOA_KERBEROS_IDENTITY_INQUIRY (inquiry);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
answer_length = strlen (answer);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (kerberos_query->kerberos_prompt->reply->length < answer_length)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_fail (self);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
strncpy (kerberos_query->kerberos_prompt->reply->data,
|
|
Packit Service |
c6b9b0 |
answer, kerberos_query->kerberos_prompt->reply->length);
|
|
Packit Service |
c6b9b0 |
kerberos_query->kerberos_prompt->reply->length = (unsigned int) answer_length;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_mark_query_answered (self, kerberos_query);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_iter_init (GoaIdentityInquiryIter * iter,
|
|
Packit Service |
c6b9b0 |
GoaIdentityInquiry * inquiry)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityInquiry *self = GOA_KERBEROS_IDENTITY_INQUIRY (inquiry);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
iter->data = self->priv->queries;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static GoaIdentityQuery *
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_inquiry_iter_next (GoaIdentityInquiryIter * iter,
|
|
Packit Service |
c6b9b0 |
GoaIdentityInquiry * inquiry)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaIdentityQuery *query;
|
|
Packit Service |
c6b9b0 |
GList *node;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
node = iter->data;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (node == NULL)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
return NULL;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
query = (GoaIdentityQuery *) node->data;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
node = node->next;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
iter->data = node;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return query;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static GoaIdentityQueryMode
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_query_get_mode (GoaIdentityInquiry * inquiry,
|
|
Packit Service |
c6b9b0 |
GoaIdentityQuery * query)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityQuery *kerberos_query = (GoaKerberosIdentityQuery *) query;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_KERBEROS_IDENTITY_INQUIRY (inquiry),
|
|
Packit Service |
c6b9b0 |
GOA_KERBEROS_IDENTITY_QUERY_MODE_INVISIBLE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (inquiry == kerberos_query->inquiry,
|
|
Packit Service |
c6b9b0 |
GOA_KERBEROS_IDENTITY_QUERY_MODE_INVISIBLE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if (kerberos_query->kerberos_prompt->hidden)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
return GOA_KERBEROS_IDENTITY_QUERY_MODE_INVISIBLE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
else
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
return GOA_KERBEROS_IDENTITY_QUERY_MODE_VISIBLE;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static char *
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_query_get_prompt (GoaIdentityInquiry * inquiry,
|
|
Packit Service |
c6b9b0 |
GoaIdentityQuery * query)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityQuery *kerberos_query = (GoaKerberosIdentityQuery *) query;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_KERBEROS_IDENTITY_INQUIRY (inquiry),
|
|
Packit Service |
c6b9b0 |
GOA_KERBEROS_IDENTITY_QUERY_MODE_INVISIBLE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (inquiry == kerberos_query->inquiry, NULL);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return g_strdup (kerberos_query->kerberos_prompt->prompt);
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static gboolean
|
|
Packit Service |
c6b9b0 |
goa_kerberos_identity_query_is_answered (GoaIdentityInquiry * inquiry,
|
|
Packit Service |
c6b9b0 |
GoaIdentityQuery * query)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
GoaKerberosIdentityQuery *kerberos_query = (GoaKerberosIdentityQuery *) query;
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (GOA_IS_KERBEROS_IDENTITY_INQUIRY (inquiry),
|
|
Packit Service |
c6b9b0 |
GOA_KERBEROS_IDENTITY_QUERY_MODE_INVISIBLE);
|
|
Packit Service |
c6b9b0 |
g_return_val_if_fail (inquiry == kerberos_query->inquiry, FALSE);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
return kerberos_query->is_answered;
|
|
Packit Service |
c6b9b0 |
}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
static void
|
|
Packit Service |
c6b9b0 |
identity_inquiry_interface_init (GoaIdentityInquiryInterface *interface)
|
|
Packit Service |
c6b9b0 |
{
|
|
Packit Service |
c6b9b0 |
interface->get_identity = goa_kerberos_identity_inquiry_get_identity;
|
|
Packit Service |
c6b9b0 |
interface->get_name = goa_kerberos_identity_inquiry_get_name;
|
|
Packit Service |
c6b9b0 |
interface->get_banner = goa_kerberos_identity_inquiry_get_banner;
|
|
Packit Service |
c6b9b0 |
interface->is_complete = goa_kerberos_identity_inquiry_is_complete;
|
|
Packit Service |
c6b9b0 |
interface->is_failed = goa_kerberos_identity_inquiry_is_failed;
|
|
Packit Service |
c6b9b0 |
interface->answer_query = goa_kerberos_identity_inquiry_answer_query;
|
|
Packit Service |
c6b9b0 |
interface->iter_init = goa_kerberos_identity_inquiry_iter_init;
|
|
Packit Service |
c6b9b0 |
interface->iter_next = goa_kerberos_identity_inquiry_iter_next;
|
|
Packit Service |
c6b9b0 |
interface->get_mode = goa_kerberos_identity_query_get_mode;
|
|
Packit Service |
c6b9b0 |
interface->get_prompt = goa_kerberos_identity_query_get_prompt;
|
|
Packit Service |
c6b9b0 |
interface->is_answered = goa_kerberos_identity_query_is_answered;
|
|
Packit Service |
c6b9b0 |
}
|