~ubuntu-branches/ubuntu/trusty/gq/trusty

« back to all changes in this revision

Viewing changes to src/configfile.c

  • Committer: Bazaar Package Importer
  • Author(s): Barry deFreese
  • Date: 2009-10-25 23:34:56 UTC
  • mfrom: (1.1.4 upstream) (3.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20091025233456-i794n3yg2cff930j
Tags: 1.3.4-1
* QA upload.
  + Set maintainer to Debian QA Group <packages@qa.debian.org>.
* New upstream release. (Closes: #534705).
  + Does not segfault on amd64. (Closes: #444312).
  + Remove all existing patches and change patch system to quilt.
  + Replace dpatch build-dep with quilt.
* 01_desktop_file.diff - Remove encoding and bogus categories 
  from desktop file.
* Copy in config.{sub,guess} on configure, rm them on clean.
  + Add build-dep on autotools-dev.
* Make clean not ignore errors.
* Add copyright holders and version path to GPL (GPL-2).
* Update watch file to use SF redirector. (Closes: #449749).
* Bump debhelper build-dep and compat to 5.
* Bump Standards Version to 3.8.3.
  + Menu policy transition.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23
23
*/
24
24
 
25
 
/* $Id: configfile.c 975 2006-09-07 18:44:41Z herzi $ */
 
25
/* $Id$ */
26
26
 
27
27
#include <stdio.h>
28
28
#include <string.h>
39
39
#include <glib/gi18n.h>
40
40
 
41
41
#include "common.h"
42
 
#include "configfile.h"
 
42
#include "debug.h"
 
43
#include "encode.h"             /* gq_codeset */
 
44
#include "errorchain.h"
 
45
#include "filter.h"
43
46
#include "gq-keyring.h"
44
47
#include "gq-server-list.h"
45
 
#include "template.h"
46
 
#include "util.h"
47
 
#include "filter.h"
48
 
#include "encode.h"             /* gq_codeset */
49
 
#include "errorchain.h"
50
 
#include "debug.h"
 
48
#include "gq-utilities.h"
 
49
#include "gq-xml.h"
51
50
#include "ldif.h"  /* for b64_encode */
52
51
#include "syntax.h"
53
 
#include "gq-xml.h"
 
52
#include "template.h"
54
53
 
55
54
struct gq_config *config;
56
55
GList *transient_servers = NULL;
57
56
 
58
 
const struct tokenlist token_searchargument[] = {
59
 
     { SEARCHARG_BEGINS_WITH, "Begins with",    NULL },
60
 
     { SEARCHARG_ENDS_WITH,   "Ends with",      NULL },
61
 
     { SEARCHARG_CONTAINS,    "Contains",       NULL },
62
 
     { SEARCHARG_EQUALS,      "Equals",         NULL },
63
 
     { 0, "",                                   NULL }
64
 
};
65
 
 
66
57
const struct tokenlist token_bindtype[] = {
67
 
     { BINDTYPE_SIMPLE,    "Simple",            NULL },
68
 
     { BINDTYPE_KERBEROS,  "Kerberos",          NULL },
69
 
     { BINDTYPE_SASL,      "SASL",              NULL },
 
58
     { GQ_BIND_SIMPLE,    "Simple",             NULL },
 
59
     { GQ_BIND_KERBEROS,  "Kerberos",           NULL },
 
60
     { GQ_BIND_SASL,      "SASL",               NULL },
70
61
     { 0, "",                                   NULL }
71
62
};
72
63
 
312
303
}
313
304
 
314
305
 
315
 
void config_write_string(struct writeconfig *wc,
316
 
                         const char *value,
317
 
                         const char *entity, GHashTable *attr)
 
306
void
 
307
config_write_string(struct writeconfig* wc,
 
308
                    const char        * value,
 
309
                    const char        * entity,
 
310
                    GHashTable        * attr)
318
311
{
319
312
     GString *outstr = g_string_sized_new(1024);
320
313
     gunichar c;
321
314
 
322
315
     start_tag(outstr, entity, attr);
323
316
 
324
 
     for(c = g_utf8_get_char(value); c ;
 
317
     for(c = value ? g_utf8_get_char(value) : '\0'; c ;
325
318
         value = g_utf8_next_char(value), c = g_utf8_get_char(value)) {
326
319
          switch(c) {
327
320
          case '<':
384
377
}
385
378
 
386
379
static void
387
 
write_server(GQServerList* list, GqServer* server, gpointer user_data) {
388
 
        gpointer* wc_and_cfg = user_data;
389
 
        struct writeconfig* wc = wc_and_cfg[0];
390
 
        struct gq_config * cfg = wc_and_cfg[1];
 
380
write_server(GQServerList* list      G_GNUC_UNUSED,
 
381
             GqServer    * server,
 
382
             gpointer      user_data)
 
383
{
 
384
        struct writeconfig* wc = user_data;
391
385
 
392
386
/*        GString *pw = g_string_new(); */
393
387
          config_write(wc, "<ldapserver>\n");
394
388
          wc->indent++;
395
389
 
396
 
          config_write_string(wc, server->name, "name", NULL);
397
 
          config_write_string(wc, server->ldaphost, "ldaphost", NULL);
398
 
          config_write_int(wc, server->ldapport, "ldapport", NULL);
399
 
          config_write_string_ne(wc, server->basedn, "basedn", NULL);
400
 
          config_write_string_ne(wc, server->binddn, "binddn", NULL);
401
 
 
402
 
          if (cfg->config_version == 0) {
403
 
               config_write_string_ne(wc, server->bindpw, "bindpw", NULL);
404
 
          } else if(server->bindpw && *server->bindpw) {
405
 
               gq_keyring_save_server_password(server);
406
 
          }
407
 
 
408
 
          if(server->bindtype != DEFAULT_BINDTYPE)
409
 
               config_write_string_ne(wc, detokenize(token_bindtype, server->bindtype), "bindtype", NULL);
410
 
          config_write_string_ne(wc, server->searchattr,
411
 
                                 "search-attribute", NULL);
412
 
          if(server->maxentries != DEFAULT_MAXENTRIES)
413
 
               config_write_int(wc, server->maxentries, "maxentries", NULL);
414
 
          if(server->cacheconn != DEFAULT_CACHECONN)
415
 
               config_write_bool(wc, server->cacheconn, 
416
 
                                 "cache-connection", NULL);
417
 
          if(server->enabletls != DEFAULT_ENABLETLS)
418
 
               config_write_bool(wc, server->enabletls, "enable-tls", NULL);
 
390
        config_write_string(wc, gq_server_get_name(server), "name", NULL);
 
391
        config_write_string(wc, gq_server_get_host(server), "ldaphost", NULL);
 
392
        config_write_int   (wc, gq_server_get_port(server), "ldapport", NULL);
 
393
        config_write_string_ne(wc, server->basedn, "basedn", NULL);
 
394
        config_write_string_ne(wc, gq_server_get_bind_dn(server), "binddn", NULL);
 
395
 
 
396
        config_write_string_ne(wc, detokenize(token_bindtype, gq_server_get_bind_type(server)),
 
397
                               "bindtype", NULL);
 
398
        config_write_string_ne(wc, gq_server_get_search_attribute(server),
 
399
                               "search-attribute", NULL);
 
400
        config_write_bool(wc, gq_server_get_cache_connection(server),
 
401
                          "cache-connection", NULL);
 
402
        config_write_bool(wc, gq_server_get_use_tls(server), "enable-tls", NULL);
419
403
          if(server->local_cache_timeout != DEFAULT_LOCAL_CACHE_TIMEOUT)
420
404
               config_write_int(wc, server->local_cache_timeout, 
421
405
                                "local-cache-timeout", NULL);
422
 
          if(server->ask_pw != DEFAULT_ASK_PW)
423
 
               config_write_bool(wc, server->ask_pw, "ask-pw", NULL);
424
 
          if(server->hide_internal != DEFAULT_HIDE_INTERNAL)
425
 
               config_write_bool(wc, server->hide_internal, 
426
 
                                 "hide-internal", NULL);
427
 
          if(server->show_ref != DEFAULT_SHOW_REF)
 
406
        config_write_bool(wc, gq_server_get_ask_pw(server), "ask-pw", NULL);
 
407
        config_write_bool(wc, gq_server_get_hide_internals(server), 
 
408
                          "hide-internal", NULL);
 
409
        if(server->show_ref != DEFAULT_SHOW_REF)
428
410
               config_write_bool(wc, server->show_ref, "show-ref", NULL);
429
411
 
430
 
          wc->indent--;
431
 
          config_write(wc, "</ldapserver>\n\n");
 
412
        wc->indent--;
 
413
        config_write(wc, "</ldapserver>\n\n");
432
414
}
433
415
 
434
416
static gboolean save_config_internal(int write_context,
436
418
                                     const char *rcpath)
437
419
{
438
420
     GList *templatelist, *oclist, *filterlist;
439
 
     GqServer *server;
440
421
     struct gq_template *template;
441
422
     struct gq_filter *filter;
442
423
     struct writeconfig *wc;
443
424
     char *tmprcpath;
444
425
     struct stat sfile;
445
426
     int mode = S_IRUSR|S_IWUSR;
446
 
     GList *I;
447
427
     gboolean ok = FALSE;
448
 
     gpointer wc_and_cfg[2] = {
449
 
             NULL,
450
 
             cfg
451
 
     };
452
428
 
453
429
     if (cfg->config_version > CURRENT_CONFIG_VERSION) {
454
430
          error_push(write_context,
457
433
     }
458
434
 
459
435
     wc = new_writeconfig();
460
 
     wc_and_cfg[0] = wc;
461
436
 
462
437
     /* write to temp file... */
463
438
     tmprcpath = g_malloc(strlen(rcpath) + 10);
494
469
     }
495
470
 
496
471
     config_write_bool(wc, cfg->confirm_mod, "confirm-mod", NULL);
497
 
     config_write_string(wc, detokenize(token_searchargument, 
498
 
                                        cfg->search_argument),
499
 
                         "search-argument", NULL);
500
472
     config_write_bool(wc, cfg->showdn, "show-dn", NULL);
501
473
     config_write_bool(wc, cfg->showoc, "show-oc", NULL);
502
474
     config_write_bool(wc, cfg->show_rdn_only, "show-rdn-only", NULL);
524
496
     config_write(wc, "\n");
525
497
 
526
498
     /* ldapservers */
527
 
     gq_server_list_foreach(gq_server_list_get(), write_server, wc_and_cfg);
 
499
     gq_server_list_foreach(gq_server_list_get(), write_server, wc);
528
500
 
529
501
     /* templates */
530
502
     templatelist = cfg->templates;
651
623
     cfg->filters   = NULL;
652
624
 
653
625
     cfg->confirm_mod = 0;
654
 
     cfg->search_argument = SEARCHARG_BEGINS_WITH;
655
626
     cfg->showdn = TRUE;
656
627
     cfg->showoc = TRUE;
657
628
     cfg->show_rdn_only = TRUE;
694
665
     if (config->config_version < CURRENT_CONFIG_VERSION
695
666
         && (config->asked_version < CURRENT_CONFIG_VERSION ||
696
667
             (config->asked_version == CURRENT_CONFIG_VERSION &&
697
 
              (time(NULL) - config->last_asked) > 31*86400))) {
698
 
          int rc = question_popup(_("Upgrade configuration?"),
 
668
              (time(NULL) - config->last_asked) > 31*86400)))
 
669
        {
 
670
#warning "FIXME: set a parent window"
 
671
          int rc = question_popup(NULL,
 
672
                                  _("Upgrade configuration?"),
699
673
                                  _("Do you want to upgrade to the latest configuration file version?\nIf you say no you may not be able to use all functionalities.\nIf you say yes you may not be able to use your configuration with older versions of gq.\n"));
700
674
 
701
675
          config->asked_version = CURRENT_CONFIG_VERSION;
709
683
 
710
684
     if(!gq_server_list_n_servers(list)) {
711
685
          /* no ldapserver defined in configfile */
712
 
          default_server = gq_server_new();
713
 
 
714
 
          g_free(default_server->name);
715
 
          g_free(default_server->ldaphost);
716
 
          g_free(default_server->searchattr);
717
 
          default_server->name = g_strdup("localhost");
718
 
          default_server->ldaphost = g_strdup("localhost");
719
 
          default_server->searchattr = g_strdup("cn");
720
 
          default_server->ldapport = 389;
721
 
 
 
686
          default_server = gq_server_new(NULL);
 
687
 
 
688
          gq_server_set_name(default_server, "localhost");
722
689
          gq_server_list_add(list, default_server);
723
690
     }
724
691
 
728
695
 
729
696
static gboolean attr_remove(gpointer key,
730
697
                            gpointer value,
731
 
                            gpointer user_data)
 
698
                            gpointer user_data G_GNUC_UNUSED)
732
699
{
733
700
     g_free(key);
734
701
     free_attr_settings((struct attr_settings *)value);
761
728
}
762
729
 
763
730
void free_config(struct gq_config *cfg) {
764
 
     GqServer *server;
765
 
     GList *I;
766
 
 
767
 
     g_assert(cfg);
 
731
     g_return_if_fail(cfg);
768
732
 
769
733
     if (cfg->schemaserver) g_free(cfg->schemaserver);
770
734
     cfg->schemaserver = NULL;
771
735
 
772
 
     /* free malloc'd ldapservers */
773
 
     g_object_unref(gq_server_list_get());
774
 
 
775
736
     /* free templates */
776
737
     g_list_foreach(cfg->templates, (GFunc) free_template, NULL);
777
738
     g_list_free(cfg->templates);