mcabber/src/settings.c
author Mikael Berthe <mikael@lilotux.net>
Fri, 27 Apr 2007 00:37:57 +0200
changeset 1197 6f602d3270a4
parent 1192 7b8765c10abb
child 1203 c96fef31ff96
permissions -rw-r--r--
Add /pgp [-]force With this command it becomes possible to enforce PGP encryption without checking if the remote client has PGP support. It can be used to send encrypted offline messages too.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     1
/*
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     2
 * settings.c   -- Configuration stuff
393
f8f3c7493457 Whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 378
diff changeset
     3
 *
699
ee03b56b93ee Update Copyright (2006)
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
     4
 * Copyright (C) 2005, 2006 Mikael Berthe <bmikael@lists.lilotux.net>
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     5
 *
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License as published by
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     8
 * the Free Software Foundation; either version 2 of the License, or (at
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     9
 * your option) any later version.
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    10
 *
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    11
 * This program is distributed in the hope that it will be useful, but
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    12
 * WITHOUT ANY WARRANTY; without even the implied warranty of
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    14
 * General Public License for more details.
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    15
 *
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    17
 * along with this program; if not, write to the Free Software
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    19
 * USA
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    20
 */
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    21
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    22
#include <strings.h>
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    23
#include <stdlib.h>
280
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
    24
#include <ctype.h>
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    25
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    26
#include "settings.h"
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    27
#include "commands.h"
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    28
#include "utils.h"
378
2e6c7b1440d1 Improve debugging/logging
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
    29
#include "logprint.h"
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    30
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
    31
static GHashTable *option;
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
    32
static GHashTable *alias;
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
    33
static GHashTable *binding;
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    34
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    35
#ifdef HAVE_GPGME     /* PGP settings */
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    36
static GHashTable *pgpopt;
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    37
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    38
typedef struct {
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    39
  gchar *pgp_keyid;   /* KeyId the contact is supposed to use */
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    40
  guint pgp_disabled; /* If TRUE, PGP is disabled for outgoing messages */
1197
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
    41
  guint pgp_force;    /* If TRUE, PGP is used w/o negotiation */
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    42
} T_pgpopt;
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    43
#endif
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    44
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
    45
static inline GHashTable *get_hash(guint type)
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    46
{
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
    47
  if      (type == SETTINGS_TYPE_OPTION)  return option;
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
    48
  else if (type == SETTINGS_TYPE_ALIAS)   return alias;
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
    49
  else if (type == SETTINGS_TYPE_BINDING) return binding;
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    50
  return NULL;
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    51
}
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    52
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    53
/* -- */
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    54
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    55
void settings_init(void)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    56
{
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
    57
  option  = g_hash_table_new_full(&g_str_hash, &g_str_equal, &g_free, &g_free);
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
    58
  alias   = g_hash_table_new_full(&g_str_hash, &g_str_equal, &g_free, &g_free);
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
    59
  binding = g_hash_table_new_full(&g_str_hash, &g_str_equal, &g_free, &g_free);
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    60
#ifdef HAVE_GPGME
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    61
  pgpopt = g_hash_table_new(&g_str_hash, &g_str_equal);
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    62
#endif
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    63
}
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
    64
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    65
//  cfg_read_file(filename, mainfile)
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    66
// Read and parse config file "filename".  If filename is NULL,
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    67
// try to open the configuration file at the default locations.
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    68
// mainfile must be set to TRUE for the startup config file.
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    69
// If mainfile is TRUE, the permissions of the configuration file will
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    70
// be fixed if they're insecure.
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    71
//
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    72
int cfg_read_file(char *filename, guint mainfile)
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    73
{
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    74
  FILE *fp;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    75
  char *buf;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    76
  char *line, *eol;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    77
  unsigned int ln = 0;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    78
  int err = 0;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    79
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    80
  if (!filename) {
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    81
    // Use default config file locations
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    82
    char *home;
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    83
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    84
    if (!mainfile) {
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    85
      scr_LogPrint(LPRINT_LOGNORM, "No file name provided");
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    86
      return -1;
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    87
    }
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    88
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
    89
    home = getenv("HOME");
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    90
    if (!home) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
    91
      scr_LogPrint(LPRINT_LOG, "Can't find home dir!");
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    92
      fprintf(stderr, "Can't find home dir!\n");
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    93
      return -1;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    94
    }
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    95
    filename = g_new(char, strlen(home)+24);
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    96
    sprintf(filename, "%s/.mcabber/mcabberrc", home);
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    97
    if ((fp = fopen(filename, "r")) == NULL) {
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    98
      // 2nd try...
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
    99
      sprintf(filename, "%s/.mcabberrc", home);
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   100
      if ((fp = fopen(filename, "r")) == NULL) {
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   101
        fprintf(stderr, "Cannot open config file!\n");
895
b461d7ee6d96 Minor changes
Mikael Berthe <mikael@lilotux.net>
parents: 872
diff changeset
   102
        g_free(filename);
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   103
        return -1;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   104
      }
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   105
    }
362
d8f147d6e872 Check directory and config file permissions
Mikael Berthe <mikael@lilotux.net>
parents: 341
diff changeset
   106
    // Check configuration file permissions
d8f147d6e872 Check directory and config file permissions
Mikael Berthe <mikael@lilotux.net>
parents: 341
diff changeset
   107
    // As it could contain sensitive data, we make it user-readable only
d8f147d6e872 Check directory and config file permissions
Mikael Berthe <mikael@lilotux.net>
parents: 341
diff changeset
   108
    checkset_perm(filename, TRUE);
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   109
    scr_LogPrint(LPRINT_LOGNORM, "Reading %s", filename);
362
d8f147d6e872 Check directory and config file permissions
Mikael Berthe <mikael@lilotux.net>
parents: 341
diff changeset
   110
    // Check mcabber dir.  There we just warn, we don't change the modes
d8f147d6e872 Check directory and config file permissions
Mikael Berthe <mikael@lilotux.net>
parents: 341
diff changeset
   111
    sprintf(filename, "%s/.mcabber/", home);
d8f147d6e872 Check directory and config file permissions
Mikael Berthe <mikael@lilotux.net>
parents: 341
diff changeset
   112
    checkset_perm(filename, FALSE);
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   113
    g_free(filename);
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   114
    filename = NULL;
362
d8f147d6e872 Check directory and config file permissions
Mikael Berthe <mikael@lilotux.net>
parents: 341
diff changeset
   115
  } else {
d8f147d6e872 Check directory and config file permissions
Mikael Berthe <mikael@lilotux.net>
parents: 341
diff changeset
   116
    if ((fp = fopen(filename, "r")) == NULL) {
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   117
      const char *msg = "Cannot open configuration file";
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   118
      if (mainfile)
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   119
        perror(msg);
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   120
      else
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   121
        scr_LogPrint(LPRINT_LOGNORM, "%s (%s).", msg, filename);
872
a0ddc43b421e Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 867
diff changeset
   122
      return -2;
362
d8f147d6e872 Check directory and config file permissions
Mikael Berthe <mikael@lilotux.net>
parents: 341
diff changeset
   123
    }
d8f147d6e872 Check directory and config file permissions
Mikael Berthe <mikael@lilotux.net>
parents: 341
diff changeset
   124
    // Check configuration file permissions (see above)
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   125
    // We don't change the permissions if that's not the main file.
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   126
    checkset_perm(filename, mainfile);
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   127
    scr_LogPrint(LPRINT_LOGNORM, "Reading %s", filename);
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   128
  }
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   129
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   130
  buf = g_new(char, 512);
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   131
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   132
  while (fgets(buf+1, 511, fp) != NULL) {
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   133
    // The first char is reserved to add a '/', to make a command line
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   134
    line = buf+1;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   135
    ln++;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   136
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   137
    // Strip leading spaces
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   138
    while (isspace(*line))
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   139
      line++;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   140
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   141
    // Make eol point to the last char of the line
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   142
    for (eol = line ; *eol ; eol++)
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   143
      ;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   144
    if (eol > line)
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   145
      eol--;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   146
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   147
    // Strip trailing spaces
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   148
    while (eol > line && isspace(*eol))
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   149
      *eol-- = 0;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   150
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   151
    // Ignore empty lines and comments
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   152
    if ((*line == '\n') || (*line == '\0') || (*line == '#'))
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   153
      continue;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   154
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   155
    // We only allow assignments line, except for commands "pgp" and "source"
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   156
    if ((strchr(line, '=') != NULL) ||
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   157
        startswith(line, "pgp ") || startswith(line, "source ")) {
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   158
      // Only accept the set, alias, bind, pgp and source commands
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   159
      if (!startswith(line, "set ")   && !startswith(line, "bind ") &&
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   160
          !startswith(line, "alias ") && !startswith(line, "pgp ")  &&
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   161
          !startswith(line, "source ")) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
   162
        scr_LogPrint(LPRINT_LOGNORM,
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
   163
                     "Error in configuration file (l. %d): bad command", ln);
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   164
        err++;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   165
        continue;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   166
      }
967
303408ef5e5d Configurable command character
Alexis Hildebrandt
parents: 895
diff changeset
   167
      // Set the leading COMMAND_CHAR to build a command line
303408ef5e5d Configurable command character
Alexis Hildebrandt
parents: 895
diff changeset
   168
      // and process the command
303408ef5e5d Configurable command character
Alexis Hildebrandt
parents: 895
diff changeset
   169
      *(--line) = COMMAND_CHAR;
1187
16abe7ec3056 Fix a conflict between verbatim multiline mode and the key binding system
Mikael Berthe <mikael@lilotux.net>
parents: 1141
diff changeset
   170
      process_command(line, TRUE);
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   171
    } else {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
   172
      scr_LogPrint(LPRINT_LOGNORM,
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
   173
                   "Error in configuration file (l. %d): no assignment", ln);
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   174
      err++;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   175
    }
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   176
  }
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   177
  g_free(buf);
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   178
  fclose(fp);
1192
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   179
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   180
  if (filename)
7b8765c10abb New command: /source
Mikael Berthe <mikael@lilotux.net>
parents: 1187
diff changeset
   181
    scr_LogPrint(LPRINT_LOGNORM, "Loaded %s.", filename);
341
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   182
  return err;
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   183
}
dea407d53fe6 Improve configuration file reading
Mikael Berthe <mikael@lilotux.net>
parents: 337
diff changeset
   184
280
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   185
//  parse_assigment(assignment, pkey, pval)
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   186
// Read assignment and split it to key, value
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   187
//
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   188
// If this is an assignment, the function will return TRUE and
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   189
// set *pkey and *pval (*pval is set to NULL if value field is empty).
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   190
//
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   191
// If this isn't a assignment (no = char), the function will set *pval
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   192
// to NULL and return FALSE.
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   193
//
774
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 764
diff changeset
   194
// The caller should g_free() *pkey and *pval (if not NULL) after use.
1074
b2fc694a8228 Fix a few memory leaks after calls to parse_assigment()
Mikael Berthe <mikael@lilotux.net>
parents: 1070
diff changeset
   195
guint parse_assigment(gchar *assignment, gchar **pkey, gchar **pval)
280
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   196
{
293
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   197
  char *key, *val, *t, *p;
280
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   198
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   199
  *pkey = *pval = NULL;
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   200
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   201
  key = assignment;
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   202
  // Remove leading spaces in option name
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   203
  while ((!isalnum(*key)) && (*key != '=') && *key) {
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   204
    //if (!isblank(*key))
293
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   205
    //  scr_LogPrint("Error in assignment parsing!");
280
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   206
    key++;
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   207
  }
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   208
  if (!*key) return FALSE; // Empty assignment
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   209
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   210
  if (*key == '=') {
293
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   211
    //scr_LogPrint("Cannot parse assignment!");
280
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   212
    return FALSE;
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   213
  }
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   214
  // Ok, key points to the option name
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   215
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   216
  for (val = key+1 ; *val && (*val != '=') ; val++)
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   217
    if (!isalnum(*val) && !isblank(*val) && (*val != '_') && (*val != '-')) {
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   218
      // Key should only have alnum chars...
293
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   219
      //scr_LogPrint("Error in assignment parsing!");
280
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   220
      return FALSE;
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   221
    }
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   222
  // Remove trailing spaces in option name:
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   223
  for (t = val-1 ; t > key && isblank(*t) ; t--)
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   224
    ;
293
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   225
  // Check for embedded whitespace characters
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   226
  for (p = key; p < t; p++) {
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   227
    if (isblank(*p)) {
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   228
      //scr_LogPrint("Error in assignment parsing!"
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   229
      //             " (Name should not contain space chars)");
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   230
      return FALSE;
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   231
    }
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   232
  }
d0295e735768 Assignment lvalue (key, option name, alias...) cannnot contain spaces
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
   233
280
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   234
  *pkey = g_strndup(key, t+1-key);
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   235
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   236
  if (!*val) return FALSE; // Not an assignment
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   237
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   238
  // Remove leading and trailing spaces in option value:
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   239
  for (val++; *val && isblank(*val) ; val++) ;
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   240
  for (t = val ; *t ; t++) ;
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   241
  for (t-- ; t >= val && isblank(*t) ; t--) ;
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   242
282
87d6ac21cd1b Fix "Cannot unset option" bug
Mikael Berthe <mikael@lilotux.net>
parents: 281
diff changeset
   243
  if (t < val) return TRUE; // no value (variable reset for example)
280
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   244
337
3a25be278864 Values can be enclosed by quotes in assignments
Mikael Berthe <mikael@lilotux.net>
parents: 336
diff changeset
   245
  // If the value begins and ends with quotes ("), these quotes are
3a25be278864 Values can be enclosed by quotes in assignments
Mikael Berthe <mikael@lilotux.net>
parents: 336
diff changeset
   246
  // removed and whitespace is not stripped
3a25be278864 Values can be enclosed by quotes in assignments
Mikael Berthe <mikael@lilotux.net>
parents: 336
diff changeset
   247
  if ((t>val) && (*val == '"' && *t == '"')) {
3a25be278864 Values can be enclosed by quotes in assignments
Mikael Berthe <mikael@lilotux.net>
parents: 336
diff changeset
   248
    val++;
3a25be278864 Values can be enclosed by quotes in assignments
Mikael Berthe <mikael@lilotux.net>
parents: 336
diff changeset
   249
    t--;
3a25be278864 Values can be enclosed by quotes in assignments
Mikael Berthe <mikael@lilotux.net>
parents: 336
diff changeset
   250
  }
280
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   251
  *pval = g_strndup(val, t+1-val);
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   252
  return TRUE;
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   253
}
68ce34b4243b Add parse_assigment() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
   254
281
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 280
diff changeset
   255
void settings_set(guint type, const gchar *key, const gchar *value)
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   256
{
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   257
  GHashTable *hash;
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   258
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   259
  hash = get_hash(type);
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   260
  if (!hash)
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   261
    return;
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   262
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   263
  if (!value) {
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   264
    g_hash_table_remove(hash, key);
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   265
  } else {
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   266
    g_hash_table_insert(hash, g_strdup(key), g_strdup(value));
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   267
  }
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   268
}
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   269
281
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 280
diff changeset
   270
void settings_del(guint type, const gchar *key)
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   271
{
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   272
  settings_set(type, key, NULL);
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   273
}
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   274
281
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 280
diff changeset
   275
const gchar *settings_get(guint type, const gchar *key)
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   276
{
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   277
  GHashTable *hash;
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   278
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   279
  hash = get_hash(type);
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   280
  if (!hash)
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   281
    return NULL;
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   282
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   283
  return g_hash_table_lookup(hash, key);
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   284
}
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   285
281
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 280
diff changeset
   286
int settings_get_int(guint type, const gchar *key)
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   287
{
281
f562b9af2de7 Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents: 280
diff changeset
   288
  const gchar *setval = settings_get(type, key);
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   289
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   290
  if (setval) return atoi(setval);
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   291
  return 0;
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   292
}
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   293
294
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   294
//  settings_get_status_msg(status)
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   295
// Return a string with the current status message:
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   296
// - if there is a user-defined message ("message" option),
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   297
//   return this message
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   298
// - if there is a user-defined message for the given status (and no
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   299
//   generic user message), it is returned
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
   300
// - if no message is found, return NULL
294
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   301
const gchar *settings_get_status_msg(enum imstatus status)
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   302
{
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   303
  const gchar *rstatus = settings_opt_get("message");
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   304
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   305
  if (rstatus) return rstatus;
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   306
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   307
  switch(status) {
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   308
    case available:
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
   309
        rstatus = settings_opt_get("message_avail");
294
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   310
        break;
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   311
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   312
    case freeforchat:
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
   313
        rstatus = settings_opt_get("message_free");
294
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   314
        break;
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   315
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   316
    case dontdisturb:
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
   317
        rstatus = settings_opt_get("message_dnd");
294
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   318
        break;
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   319
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   320
    case notavail:
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
   321
        rstatus = settings_opt_get("message_notavail");
294
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   322
        break;
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   323
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   324
    case away:
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
   325
        rstatus = settings_opt_get("message_away");
294
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   326
        break;
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   327
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
   328
    default: // offline, invisible
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 393
diff changeset
   329
        break;
294
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   330
  }
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   331
  return rstatus;
871e53769084 Allow one status message per Jabber status
Mikael Berthe <mikael@lilotux.net>
parents: 293
diff changeset
   332
}
576
8b3db0b555a1 Add Vim modelines
Mikael Berthe <mikael@lilotux.net>
parents: 521
diff changeset
   333
867
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 780
diff changeset
   334
//  settings_foreach(type, pfunction, param)
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 780
diff changeset
   335
// Call pfunction(param, key, value) for each setting with requested type.
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   336
void settings_foreach(guint type, void (*pfunc)(char *k, char *v, void *param),
867
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 780
diff changeset
   337
                      void *param)
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 780
diff changeset
   338
{
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   339
  GHashTable *hash;
867
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 780
diff changeset
   340
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   341
  hash = get_hash(type);
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   342
  if (!hash)
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   343
    return;
867
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 780
diff changeset
   344
1070
9eaacc0ad3a2 Use a hash for settings
Mikael Berthe <mikael@lilotux.net>
parents: 1068
diff changeset
   345
  g_hash_table_foreach(hash, (GHFunc)pfunc, param);
867
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 780
diff changeset
   346
}
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 780
diff changeset
   347
1004
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   348
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   349
//  default_muc_nickname()
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   350
// Return the user's default nickname
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   351
// The caller should free the string after use
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   352
char *default_muc_nickname(void)
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   353
{
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   354
  char *nick;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   355
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   356
  // We try the "nickname" option, then the username part of the jid.
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   357
  nick = (char*)settings_opt_get("nickname");
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   358
  if (nick)
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   359
    return g_strdup(nick);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   360
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   361
  nick = g_strdup(settings_opt_get("username"));
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   362
  if (nick) {
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   363
    char *p = strchr(nick, JID_DOMAIN_SEPARATOR);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   364
    if (p > nick)
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   365
      *p = 0;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   366
  }
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   367
  return nick;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   368
}
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 967
diff changeset
   369
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   370
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   371
/* PGP settings */
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   372
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   373
//  settings_pgp_setdisabled(jid, value)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   374
// Enable/disable PGP encryption for jid.
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   375
// (Set value to TRUE to disable encryption)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   376
void settings_pgp_setdisabled(const char *bjid, guint value)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   377
{
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   378
#ifdef HAVE_GPGME
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   379
  T_pgpopt *pgpdata;
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   380
  pgpdata = g_hash_table_lookup(pgpopt, bjid);
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   381
  if (!pgpdata) {
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   382
    // If value is 0, we do not need to create a structure (that's
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   383
    // the default value).
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   384
    if (value) {
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   385
      pgpdata = g_new0(T_pgpopt, 1);
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   386
      pgpdata->pgp_disabled = value;
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   387
      g_hash_table_insert(pgpopt, g_strdup(bjid), pgpdata);
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   388
    }
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   389
  } else {
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   390
    pgpdata->pgp_disabled = value;
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   391
    // We could remove the key/value if pgp_disabled is 0 and
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   392
    // pgp_keyid is NULL, actually.
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   393
  }
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   394
#endif
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   395
}
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   396
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   397
//  settings_pgp_getdisabled(jid)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   398
// Return TRUE if PGP encryption should be disabled for jid.
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   399
guint settings_pgp_getdisabled(const char *bjid)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   400
{
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   401
#ifdef HAVE_GPGME
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   402
  T_pgpopt *pgpdata;
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   403
  pgpdata = g_hash_table_lookup(pgpopt, bjid);
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   404
  if (pgpdata)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   405
    return pgpdata->pgp_disabled;
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   406
  else
1197
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   407
    return FALSE; // Default: not disabled
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   408
#else
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   409
  return TRUE;    // No PGP support, let's say it's disabled.
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   410
#endif
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   411
}
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   412
1197
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   413
//  settings_pgp_setforce(jid, value)
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   414
// Force (or not) PGP encryption for jid.
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   415
// When value is TRUE, PGP support will be assumed for the remote client.
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   416
void settings_pgp_setforce(const char *bjid, guint value)
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   417
{
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   418
#ifdef HAVE_GPGME
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   419
  T_pgpopt *pgpdata;
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   420
  pgpdata = g_hash_table_lookup(pgpopt, bjid);
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   421
  if (!pgpdata) {
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   422
    // If value is 0, we do not need to create a structure (that's
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   423
    // the default value).
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   424
    if (value) {
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   425
      pgpdata = g_new0(T_pgpopt, 1);
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   426
      pgpdata->pgp_force = value;
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   427
      g_hash_table_insert(pgpopt, g_strdup(bjid), pgpdata);
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   428
    }
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   429
  } else {
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   430
    pgpdata->pgp_force = value;
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   431
  }
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   432
  if (!pgpdata->pgp_keyid)
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   433
    scr_LogPrint(LPRINT_NORMAL, "Warning: the Key Id is not set!");
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   434
#endif
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   435
}
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   436
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   437
//  settings_pgp_getforce(jid)
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   438
// Return TRUE if PGP enforcement is set for jid.
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   439
guint settings_pgp_getforce(const char *bjid)
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   440
{
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   441
#ifdef HAVE_GPGME
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   442
  T_pgpopt *pgpdata;
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   443
  pgpdata = g_hash_table_lookup(pgpopt, bjid);
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   444
  if (pgpdata)
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   445
    return pgpdata->pgp_force;
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   446
  else
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   447
    return FALSE; // Default
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   448
#else
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   449
  return FALSE;   // No PGP support
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   450
#endif
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   451
}
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1192
diff changeset
   452
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   453
//  settings_pgp_setkeyid(jid, keyid)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   454
// Set the PGP KeyId for user jid.
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   455
// Use keyid = NULL to erase the previous KeyId.
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   456
void settings_pgp_setkeyid(const char *bjid, const char *keyid)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   457
{
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   458
#ifdef HAVE_GPGME
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   459
  T_pgpopt *pgpdata;
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   460
  pgpdata = g_hash_table_lookup(pgpopt, bjid);
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   461
  if (!pgpdata) {
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   462
    // If keyid is NULL, we do not need to create a structure (that's
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   463
    // the default value).
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   464
    if (keyid) {
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   465
      pgpdata = g_new0(T_pgpopt, 1);
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   466
      pgpdata->pgp_keyid = g_strdup(keyid);
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   467
      g_hash_table_insert(pgpopt, g_strdup(bjid), pgpdata);
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   468
    }
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   469
  } else {
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   470
    g_free(pgpdata->pgp_keyid);
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   471
    if (keyid)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   472
      pgpdata->pgp_keyid = g_strdup(keyid);
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   473
    else
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   474
      pgpdata->pgp_keyid = NULL;
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   475
    // We could remove the key/value if pgp_disabled is 0 and
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   476
    // pgp_keyid is NULL, actually.
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   477
  }
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   478
#endif
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   479
}
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   480
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   481
//  settings_pgp_getkeyid(jid)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   482
// Get the PGP KeyId for user jid.
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   483
const char *settings_pgp_getkeyid(const char *bjid)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   484
{
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   485
#ifdef HAVE_GPGME
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   486
  T_pgpopt *pgpdata;
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   487
  pgpdata = g_hash_table_lookup(pgpopt, bjid);
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   488
  if (pgpdata)
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   489
    return pgpdata->pgp_keyid;
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   490
#endif
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   491
  return NULL;
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   492
}
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
   493
1141
5be2408a6534 Add option "max_history_blocks"
Mikael Berthe <mikael@lilotux.net>
parents: 1074
diff changeset
   494
guint get_max_history_blocks(void)
5be2408a6534 Add option "max_history_blocks"
Mikael Berthe <mikael@lilotux.net>
parents: 1074
diff changeset
   495
{
5be2408a6534 Add option "max_history_blocks"
Mikael Berthe <mikael@lilotux.net>
parents: 1074
diff changeset
   496
  int max_num_of_blocks = settings_opt_get_int("max_history_blocks");
5be2408a6534 Add option "max_history_blocks"
Mikael Berthe <mikael@lilotux.net>
parents: 1074
diff changeset
   497
  if (max_num_of_blocks < 0)
5be2408a6534 Add option "max_history_blocks"
Mikael Berthe <mikael@lilotux.net>
parents: 1074
diff changeset
   498
    max_num_of_blocks = 0;
5be2408a6534 Add option "max_history_blocks"
Mikael Berthe <mikael@lilotux.net>
parents: 1074
diff changeset
   499
  else if (max_num_of_blocks == 1)
5be2408a6534 Add option "max_history_blocks"
Mikael Berthe <mikael@lilotux.net>
parents: 1074
diff changeset
   500
    max_num_of_blocks = 2;
5be2408a6534 Add option "max_history_blocks"
Mikael Berthe <mikael@lilotux.net>
parents: 1074
diff changeset
   501
  return (guint)max_num_of_blocks;
5be2408a6534 Add option "max_history_blocks"
Mikael Berthe <mikael@lilotux.net>
parents: 1074
diff changeset
   502
}
5be2408a6534 Add option "max_history_blocks"
Mikael Berthe <mikael@lilotux.net>
parents: 1074
diff changeset
   503
580
fed6d1e4d7a9 Fix modelines
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
   504
/* vim: set expandtab cindent cinoptions=>2\:2(0:  For Vim users... */