4 * Copyright (c) 2004 Novell, Inc. All Rights Reserved.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
23 #include "nmuserrecord.h"
54 nm_create_user_record()
56 NMUserRecord
*user_record
= g_new0(NMUserRecord
, 1);
58 user_record
->ref_count
= 1;
60 purple_debug(PURPLE_DEBUG_INFO
, "novell", "Creating user_record, total=%d\n",
67 _get_attribute_value(NMField
*field
)
71 if (field
->ptr_value
== NULL
)
74 if (field
->type
== NMFIELD_TYPE_UTF8
|| field
->type
== NMFIELD_TYPE_DN
) {
76 value
= (char *)field
->ptr_value
;
78 } else if (field
->type
== NMFIELD_TYPE_MV
) {
80 /* Need to handle multi-valued returns, for now
81 * just pick the first value and return it
83 NMField
*tmp
= (NMField
*)field
->ptr_value
;
85 ((tmp
->type
== NMFIELD_TYPE_UTF8
) ||
86 (tmp
->type
== NMFIELD_TYPE_DN
))) {
88 value
= (char *)tmp
->ptr_value
;
98 return g_strdup(value
);
101 * This creates a user_record for the reference list the
102 * field array that is passed in should be a
103 * NM_A_FA_USER_DETAILS array.
106 nm_create_user_record_from_fields(NMField
* details
)
108 NMUserRecord
*user_record
;
109 NMField
*field
, *fields
= details
;
111 if (details
== NULL
) {
115 if (details
->type
== NMFIELD_TYPE_ARRAY
) {
116 if (details
->ptr_value
== NULL
)
118 fields
= (NMField
*) details
->ptr_value
;
121 user_record
= nm_create_user_record();
123 if ((field
= nm_locate_field(NM_A_SZ_AUTH_ATTRIBUTE
, fields
))) {
125 if (field
->ptr_value
) {
126 user_record
->display_id
= _get_attribute_value(field
);
127 user_record
->auth_attr
= TRUE
;
131 if ((field
= nm_locate_field(NM_A_SZ_DN
, fields
))) {
133 if (field
->ptr_value
) {
134 user_record
->dn
= _get_attribute_value(field
);
138 if ((field
= nm_locate_field("CN", fields
))) {
140 if (field
->ptr_value
) {
141 user_record
->cn
= _get_attribute_value(field
);
145 if ((field
= nm_locate_field("Given Name", fields
))) {
147 if (field
->ptr_value
) {
148 user_record
->fname
= _get_attribute_value(field
);
152 if ((field
= nm_locate_field("Surname", fields
))) {
154 if (field
->ptr_value
) {
155 user_record
->lname
= _get_attribute_value(field
);
159 if ((field
= nm_locate_field("Full Name", fields
))) {
161 if (field
->ptr_value
) {
162 user_record
->full_name
= _get_attribute_value(field
);
166 if ((field
= nm_locate_field(NM_A_SZ_STATUS
, fields
))) {
168 if (field
->ptr_value
)
169 user_record
->status
= atoi((char *) field
->ptr_value
);
173 if ((field
= nm_locate_field(NM_A_SZ_MESSAGE_BODY
, fields
))) {
175 if (field
->ptr_value
)
176 user_record
->status_text
= g_strdup((char *) field
->ptr_value
);
180 user_record
->fields
= nm_copy_field_array(fields
);
186 nm_user_record_copy(NMUserRecord
* dest
, NMUserRecord
* src
)
188 if (dest
== NULL
|| src
== NULL
)
191 dest
->status
= src
->status
;
193 /* Copy status text */
194 g_free(dest
->status_text
);
195 dest
->status_text
= NULL
;
197 if (src
->status_text
)
198 dest
->status_text
= g_strdup(src
->status_text
);
205 dest
->dn
= g_strdup(src
->dn
);
212 dest
->cn
= g_strdup(src
->cn
);
214 /* Copy display id */
215 g_free(dest
->display_id
);
216 dest
->display_id
= NULL
;
219 dest
->display_id
= g_strdup(src
->display_id
);
221 /* Copy first name */
226 dest
->fname
= g_strdup(src
->fname
);
233 dest
->lname
= g_strdup(src
->lname
);
236 g_free(dest
->full_name
);
237 dest
->full_name
= NULL
;
240 dest
->full_name
= g_strdup(src
->full_name
);
246 nm_free_fields(&dest
->fields
);
249 dest
->fields
= nm_copy_field_array(src
->fields
);
253 dest
->data
= src
->data
;
257 nm_user_record_add_ref(NMUserRecord
* user_record
)
260 user_record
->ref_count
++;
264 nm_release_user_record(NMUserRecord
* user_record
)
266 if (--(user_record
->ref_count
) == 0) {
268 purple_debug(PURPLE_DEBUG_INFO
, "novell",
269 "Releasing user_record, total=%d\n", --count
);
271 g_free(user_record
->dn
);
272 g_free(user_record
->cn
);
273 g_free(user_record
->display_id
);
274 g_free(user_record
->fname
);
275 g_free(user_record
->lname
);
276 g_free(user_record
->full_name
);
277 g_free(user_record
->status_text
);
279 nm_free_fields(&user_record
->fields
);
288 nm_user_record_get_status(NMUserRecord
* user_record
)
290 if (user_record
== NULL
)
291 return (NMSTATUS_T
) - 1;
293 return user_record
->status
;
298 nm_user_record_get_status_text(NMUserRecord
* user_record
)
300 if (user_record
== NULL
)
303 return user_record
->status_text
;
307 nm_user_record_set_dn(NMUserRecord
* user_record
, const char *dn
)
309 if (user_record
!= NULL
&& dn
!= NULL
) {
310 g_free(user_record
->dn
);
312 user_record
->dn
= g_strdup(dn
);
317 nm_user_record_get_dn(NMUserRecord
* user_record
)
319 if (user_record
== NULL
)
322 return user_record
->dn
;
326 nm_user_record_set_userid(NMUserRecord
* user_record
, const char *userid
)
328 if (user_record
!= NULL
&& userid
!= NULL
) {
329 g_free(user_record
->cn
);
331 user_record
->cn
= g_strdup(userid
);
336 nm_user_record_get_userid(NMUserRecord
* user_record
)
338 if (user_record
== NULL
)
341 return user_record
->cn
;
345 nm_user_record_set_display_id(NMUserRecord
* user_record
, const char *display_id
)
347 if (user_record
!= NULL
&& display_id
!= NULL
) {
348 g_free(user_record
->display_id
);
350 user_record
->display_id
= g_strdup(display_id
);
355 nm_user_record_get_display_id(NMUserRecord
* user_record
)
357 if (user_record
== NULL
)
360 if (user_record
->display_id
== NULL
) {
361 user_record
->display_id
= nm_typed_to_dotted(user_record
->dn
);
364 return user_record
->display_id
;
368 nm_user_record_get_full_name(NMUserRecord
* user_record
)
370 if (user_record
== NULL
)
373 if (user_record
->full_name
== NULL
) {
374 if (user_record
->fname
&& user_record
->lname
) {
375 user_record
->full_name
= g_strdup_printf("%s %s",
382 return user_record
->full_name
;
386 nm_user_record_get_first_name(NMUserRecord
* user_record
)
388 if (user_record
== NULL
)
391 return user_record
->fname
;
396 nm_user_record_get_last_name(NMUserRecord
* user_record
)
398 if (user_record
== NULL
)
401 return user_record
->lname
;
405 nm_user_record_get_data(NMUserRecord
* user_record
)
407 if (user_record
== NULL
)
410 return user_record
->data
;
414 nm_user_record_set_data(NMUserRecord
* user_record
, gpointer data
)
416 if (user_record
== NULL
)
419 user_record
->data
= data
;
423 nm_user_record_set_status(NMUserRecord
* user_record
,
424 int status
, const char *text
)
426 if (user_record
== NULL
)
429 user_record
->status
= status
;
431 g_free(user_record
->status_text
);
432 user_record
->status_text
= NULL
;
435 user_record
->status_text
= g_strdup(text
);
439 nm_user_record_get_auth_attr(NMUserRecord
*user_record
)
441 if (user_record
== NULL
)
444 return user_record
->auth_attr
;
448 nm_user_record_get_property_count(NMUserRecord
* user_record
)
450 NMField
*locate
, *fields
;
454 if (user_record
&& user_record
->fields
) {
455 locate
= nm_locate_field(NM_A_FA_INFO_DISPLAY_ARRAY
,
456 (NMField
*) user_record
->fields
);
457 if (locate
&& (fields
= (NMField
*) (locate
->ptr_value
))) {
458 count
= (int) nm_count_fields(fields
);
465 nm_user_record_get_property(NMUserRecord
* user_record
, int index
)
467 NMProperty
*property
= NULL
;
468 NMField
*field
= NULL
, *fields
, *locate
;
470 if (user_record
&& user_record
->fields
) {
471 locate
= nm_locate_field(NM_A_FA_INFO_DISPLAY_ARRAY
,
472 (NMField
*) user_record
->fields
);
473 if (locate
&& (fields
= (NMField
*) (locate
->ptr_value
))) {
474 int max
= nm_count_fields(fields
);
478 field
= &fields
[index
];
479 if (field
&& field
->tag
&& field
->ptr_value
) {
480 property
= g_new0(NMProperty
, 1);
481 property
->tag
= g_strdup(field
->tag
);
482 property
->value
= _get_attribute_value(field
);
493 nm_release_property(NMProperty
* property
)
496 g_free(property
->tag
);
498 g_free(property
->value
);
505 nm_property_get_tag(NMProperty
* property
)
508 return property
->tag
;
514 nm_property_get_value(NMProperty
* property
)
517 return property
->value
;