* Copyright (c) 2004 Novell, Inc. All Rights Reserved. * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA #include "nmuserrecord.h" NMUserRecord *user_record = g_new0(NMUserRecord, 1); user_record->ref_count = 1; purple_debug(PURPLE_DEBUG_INFO, "novell", "Creating user_record, total=%d\n", _get_attribute_value(NMField *field) if (field->ptr_value == NULL) if (field->type == NMFIELD_TYPE_UTF8 || field->type == NMFIELD_TYPE_DN) { value = (char *)field->ptr_value; } else if (field->type == NMFIELD_TYPE_MV) { /* Need to handle multi-valued returns, for now * just pick the first value and return it NMField *tmp = (NMField *)field->ptr_value; ((tmp->type == NMFIELD_TYPE_UTF8) || (tmp->type == NMFIELD_TYPE_DN))) { value = (char *)tmp->ptr_value; * This creates a user_record for the reference list the * field array that is passed in should be a * NM_A_FA_USER_DETAILS array. nm_create_user_record_from_fields(NMField * details) NMUserRecord *user_record; NMField *field, *fields = details; if (details->type == NMFIELD_TYPE_ARRAY) { if (details->ptr_value == NULL) fields = (NMField *) details->ptr_value; user_record = nm_create_user_record(); if ((field = nm_locate_field(NM_A_SZ_AUTH_ATTRIBUTE, fields))) { user_record->display_id = _get_attribute_value(field); user_record->auth_attr = TRUE; if ((field = nm_locate_field(NM_A_SZ_DN, fields))) { user_record->dn = _get_attribute_value(field); if ((field = nm_locate_field("CN", fields))) { user_record->cn = _get_attribute_value(field); if ((field = nm_locate_field("Given Name", fields))) { user_record->fname = _get_attribute_value(field); if ((field = nm_locate_field("Surname", fields))) { user_record->lname = _get_attribute_value(field); if ((field = nm_locate_field("Full Name", fields))) { user_record->full_name = _get_attribute_value(field); if ((field = nm_locate_field(NM_A_SZ_STATUS, fields))) { user_record->status = atoi((char *) field->ptr_value); if ((field = nm_locate_field(NM_A_SZ_MESSAGE_BODY, fields))) { user_record->status_text = g_strdup((char *) field->ptr_value); user_record->fields = nm_copy_field_array(fields); nm_user_record_copy(NMUserRecord * dest, NMUserRecord * src) if (dest == NULL || src == NULL) dest->status = src->status; g_free(dest->status_text); dest->status_text = NULL; dest->status_text = g_strdup(src->status_text); dest->dn = g_strdup(src->dn); dest->cn = g_strdup(src->cn); g_free(dest->display_id); dest->display_id = g_strdup(src->display_id); dest->fname = g_strdup(src->fname); dest->lname = g_strdup(src->lname); dest->full_name = g_strdup(src->full_name); nm_free_fields(&dest->fields); dest->fields = nm_copy_field_array(src->fields); nm_user_record_add_ref(NMUserRecord * user_record) user_record->ref_count++; nm_release_user_record(NMUserRecord * user_record) if (--(user_record->ref_count) == 0) { purple_debug(PURPLE_DEBUG_INFO, "novell", "Releasing user_record, total=%d\n", --count); if (user_record->display_id) { g_free(user_record->display_id); if (user_record->fname) { g_free(user_record->fname); if (user_record->lname) { g_free(user_record->lname); if (user_record->full_name) { g_free(user_record->full_name); if (user_record->status_text) { g_free(user_record->status_text); nm_free_fields(&user_record->fields); nm_user_record_get_status(NMUserRecord * user_record) return user_record->status; nm_user_record_get_status_text(NMUserRecord * user_record) return user_record->status_text; nm_user_record_set_dn(NMUserRecord * user_record, const char *dn) if (user_record != NULL && dn != NULL) { user_record->dn = g_strdup(dn); nm_user_record_get_dn(NMUserRecord * user_record) nm_user_record_set_userid(NMUserRecord * user_record, const char *userid) if (user_record != NULL && userid != NULL) { user_record->cn = g_strdup(userid); nm_user_record_get_userid(NMUserRecord * user_record) nm_user_record_set_display_id(NMUserRecord * user_record, const char *display_id) if (user_record != NULL && display_id != NULL) { if (user_record->display_id) g_free(user_record->display_id); user_record->display_id = g_strdup(display_id); nm_user_record_get_display_id(NMUserRecord * user_record) if (user_record->display_id == NULL) { user_record->display_id = nm_typed_to_dotted(user_record->dn); return user_record->display_id; nm_user_record_get_full_name(NMUserRecord * user_record) if (user_record->full_name == NULL) { if (user_record->fname && user_record->lname) { user_record->full_name = g_strdup_printf("%s %s", return user_record->full_name; nm_user_record_get_first_name(NMUserRecord * user_record) return user_record->fname; nm_user_record_get_last_name(NMUserRecord * user_record) return user_record->lname; nm_user_record_get_data(NMUserRecord * user_record) return user_record->data; nm_user_record_set_data(NMUserRecord * user_record, gpointer data) user_record->data = data; nm_user_record_set_status(NMUserRecord * user_record, int status, const char *text) user_record->status = status; if (user_record->status_text) { g_free(user_record->status_text); user_record->status_text = NULL; user_record->status_text = g_strdup(text); nm_user_record_get_auth_attr(NMUserRecord *user_record) return user_record->auth_attr; nm_user_record_get_property_count(NMUserRecord * user_record) NMField *locate, *fields; if (user_record && user_record->fields) { locate = nm_locate_field(NM_A_FA_INFO_DISPLAY_ARRAY, (NMField *) user_record->fields); if (locate && (fields = (NMField *) (locate->ptr_value))) { count = (int) nm_count_fields(fields); nm_user_record_get_property(NMUserRecord * user_record, int index) NMProperty *property = NULL; NMField *field = NULL, *fields, *locate; if (user_record && user_record->fields) { locate = nm_locate_field(NM_A_FA_INFO_DISPLAY_ARRAY, (NMField *) user_record->fields); if (locate && (fields = (NMField *) (locate->ptr_value))) { int max = nm_count_fields(fields); if (field && field->tag && field->ptr_value) { property = g_new0(NMProperty, 1); property->tag = g_strdup(field->tag); property->value = _get_attribute_value(field); nm_release_property(NMProperty * property) nm_property_get_tag(NMProperty * property) nm_property_get_value(NMProperty * property)