/[winpt]/trunk/Src/wptRegistry.cpp
ViewVC logotype

Annotation of /trunk/Src/wptRegistry.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 172 - (hide annotations)
Mon Jan 30 13:47:35 2006 UTC (19 years, 1 month ago) by twoaday
File size: 18170 byte(s)
2006-01-30  Timo Schulz  <ts@g10code.de>
 
        * WinPT.cpp (check_readonly_attr): New.
        (load_gpg_env): Use it here.
        * wptRegistry.cpp (regist_int_winpt): Make sure
        the register extension is only offered once to the user.
         

1 werner 36 /* wptRegistry.cpp - W32 Registry access
2     * Copyright (C) 2000-2005 Timo Schulz
3     *
4     * This file is part of WinPT.
5     *
6     * WinPT is free software; you can redistribute it and/or
7     * modify it under the terms of the GNU General Public License
8     * as published by the Free Software Foundation; either version 2
9     * of the License, or (at your option) any later version.
10     *
11     * WinPT is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14     * General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with WinPT; if not, write to the Free Software Foundation,
18     * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19     */
20    
21     #ifdef HAVE_CONFIG_H
22     #include <config.h>
23     #endif
24    
25     #include <windows.h>
26     #include <stdio.h>
27    
28     #include "wptErrors.h"
29     #include "wptW32API.h"
30     #include "wptGPG.h"
31     #include "wptRegistry.h"
32     #include "wptKeyserver.h"
33     #include "wptTypes.h"
34     #include "wptNLS.h"
35     #include "wptVersion.h"
36    
37     #define rc_ok(rc) ((rc) == ERROR_SUCCESS)
38    
39 twoaday 172 #define WINPT_REG "Software\\WinPT"
40 werner 48
41 werner 36 struct reg_hotkey_s reg_hotkeys[] = {
42 twoaday 69 {"ClipEncrypt", "", 0},
43     {"ClipDecrypt", "", 0},
44     {"ClipSign", "", 0},
45     {"ClipSignEnc", "", 0},
46     {"CwsEncrypt", "", 0},
47     {"CwsDecrypt", "", 0},
48     {"CwsSign", "", 0},
49     {"CwsSignEnc", "", 0},
50     {NULL, "", 0}
51 werner 36 };
52    
53 twoaday 172 /* Global WinPT registry prefereneces. */
54 werner 36 winpt_reg_prefs_s reg_prefs;
55    
56    
57 twoaday 128 /* Return != 0 if GPG4win is installed. */
58     int
59     is_gpg4win_installed (void)
60     {
61     char *p;
62    
63     p = get_reg_entry_gpg4win (NULL);
64     if (!p)
65     return 0;
66     if (dir_exist_check (p)) {
67     free_if_alloc (p);
68     return 0;
69     }
70     free_if_alloc (p);
71     return -1;
72     }
73    
74    
75 twoaday 117 /* Return != 0 if GPGee is installed. */
76     int
77     is_gpgee_installed (void)
78     {
79     HKEY hk;
80     LONG ec;
81    
82     ec = RegOpenKeyEx (HKEY_CURRENT_USER, "Software\\GPGee", 0, KEY_READ, &hk);
83     if (ec == ERROR_SUCCESS) {
84     RegCloseKey (hk);
85     return -1;
86     }
87    
88     return 0;
89     }
90    
91    
92     /* Free all members in the registry preference struct. */
93 werner 36 void
94     free_reg_prefs (void)
95     {
96     free_if_alloc (reg_prefs.backup.path);
97     free_if_alloc (reg_prefs.kserv_conf);
98     free_if_alloc (reg_prefs.homedir);
99     memset (&reg_prefs, 0, sizeof reg_prefs);
100 twoaday 117 }
101 werner 36
102    
103     /* Register the given WinPT filetype. */
104     static int
105     regist_single_filetype (gpg_filetype *gfile)
106     {
107 twoaday 128 char icon[256];
108     char prog[256];
109 werner 36
110     memset (&icon, 0, sizeof (icon));
111     GetModuleFileName (glob_hinst, prog, sizeof (prog)-1);
112     _snprintf (icon, sizeof (icon) -1, "%s,%d", prog, gfile->nicon);
113     return create_file_type (prog, gfile->ext, gfile->descr, icon);
114 twoaday 117 }
115 werner 36
116    
117     /* Install the GPG related into the W32 resgistry, if the entry already
118     exists the function returns immediately. */
119     int
120     regist_inst_gnupg (int create_mokey)
121     {
122     int rc;
123     HKEY reg;
124    
125     rc = RegOpenKeyEx( HKEY_CURRENT_USER, "Software\\GNU\\GnuPG", 0, KEY_READ, &reg );
126     if( rc_ok( rc ) ) {
127     RegCloseKey( reg );
128     return 0;
129     }
130     rc = RegCreateKey( HKEY_CURRENT_USER, "Software\\GNU\\GnuPG", &reg );
131     if( !rc_ok( rc ) )
132     return WPTERR_REGISTRY;
133     RegCloseKey( reg );
134     if( create_mokey ) {
135     rc = RegOpenKeyEx( HKEY_CURRENT_USER, "Control Panel\\MingW32\\NLS", 0, KEY_READ, &reg );
136     if( rc_ok( rc ) ) {
137     RegCloseKey( reg );
138     return 0;
139     }
140     rc = RegCreateKey( HKEY_CURRENT_USER, "Control Panel\\MingW32\\NLS", &reg );
141     if( !rc_ok( rc ) )
142     return WPTERR_REGISTRY;
143     RegCloseKey( reg );
144     }
145    
146     return 0;
147 twoaday 128 }
148 werner 36
149    
150 twoaday 117 /* Install WinPT into the W32 registry, if the entry already
151 twoaday 85 exists the function returns immediately. @with_ext can be
152     used to register some file types (if 1). @created contains
153     1 if the registry key was created.
154     Return value: 0 on success. */
155 werner 36 int
156 twoaday 117 regist_inst_winpt (int with_ext, int *created)
157 twoaday 129 {
158 werner 36 HKEY reg;
159 twoaday 80 char *p = NULL;
160     char modpath[MAX_PATH+1];
161 twoaday 172 int rc, i, id, n;
162 werner 36
163 twoaday 129 gpg_filetype gpg_filetypes[] = {
164     {_("GPG Detached Signature"), ".sig", 1},
165     {_("GPG Encrypted Data"), ".gpg", 2},
166     {_("GPG Armored Data"), ".asc", 2},
167     {0}
168     };
169    
170 twoaday 85 if (created)
171 werner 36 *created = 0;
172 twoaday 172 if (is_gpgee_installed ())
173 werner 36 with_ext = 0;
174    
175 twoaday 85 rc = RegOpenKeyEx (HKEY_CURRENT_USER, WINPT_REG, 0, KEY_READ, &reg);
176 twoaday 117 if (rc_ok (rc)) {
177 twoaday 85 RegCloseKey (reg);
178     rc = RegOpenKeyEx (HKEY_CURRENT_USER, WINPT_REG"\\Keyserver", 0, KEY_READ, &reg);
179 twoaday 167 if (!rc_ok (rc)) {
180 twoaday 85 RegCreateKey (HKEY_CURRENT_USER, WINPT_REG"\\Keyserver", &reg);
181     RegCloseKey (reg);
182 werner 36 }
183     p = get_reg_entry_keyserver ("Default");
184     if (!p) {
185     char buf[16];
186     sprintf (buf, "%d", HKP_PORT);
187     set_reg_entry_keyserver ("Default_Port", buf);
188     set_reg_entry_keyserver ("Default", DEF_HKP_KEYSERVER);
189     }
190 twoaday 85 free_if_alloc (p);
191 werner 36 return 0;
192     }
193 twoaday 117 rc = RegCreateKey (HKEY_CURRENT_USER, WINPT_REG, &reg);
194 twoaday 85 if (!rc_ok (rc))
195 werner 36 return WPTERR_REGISTRY;
196 twoaday 85 if (created)
197 werner 36 *created = 1;
198 twoaday 85 RegCloseKey (reg);
199 twoaday 172 if (with_ext) {
200     id = msg_box (NULL, _("WinPT can register some GPG file types for you so they can "
201     "be processed with a double click in the explorer.\n"
202     "Do you want to continue?"), _("WinPT"), MB_YESNO|MB_INFO);
203     if (id == IDYES) {
204     for (i = 0; gpg_filetypes[i].ext; i++) {
205     rc = RegOpenKeyEx (HKEY_CLASSES_ROOT, gpg_filetypes[i].ext, 0, KEY_READ, &reg);
206     if (rc_ok (rc)) {
207     RegCloseKey (reg);
208     id = log_box (_("WinPT WARNING"), MB_YESNO|MB_INFO,
209     _("It seems there was already a '%s' file type registered by another application.\n"
210     "Do you want to overwrite it?"), gpg_filetypes[i].ext);
211     if (id == IDNO)
212     continue;
213     }
214     regist_single_filetype (&gpg_filetypes[i]);
215     }
216     }
217     }
218 twoaday 80 if ((n=GetModuleFileName (NULL, modpath, MAX_PATH-1)) > 0) {
219     while (n-- > 0) {
220     if (modpath[n] == '\\') {
221     modpath[n] = 0;
222     break;
223     }
224     }
225 twoaday 117 set_reg_entry (HKEY_CURRENT_USER, WINPT_REG, "Install Directory", modpath);
226 twoaday 80 }
227 werner 36 return 0;
228 twoaday 80 }
229 werner 36
230    
231     /* Create a new filetype in the W32 registry.
232     We should really care of errors! Otherwise we can damage the registry! */
233     int
234 twoaday 128 create_file_type (const char *exefile, const char *ext,
235     const char *extname, char *iconfile)
236 werner 36 {
237     int rc;
238     HKEY reg = NULL;
239     char deficon[256], defexec[256], p_exefile[256];
240    
241    
242     rc = RegCreateKey( HKEY_CLASSES_ROOT, ext, &reg );
243     if( rc_ok( rc ) )
244     rc = RegSetValueEx( reg, NULL, 0, REG_SZ, (byte *)extname, strlen( extname ) );
245     if( rc_ok( rc ) )
246     rc = RegCloseKey( reg );
247     if( rc_ok( rc ) )
248     rc = RegCreateKey( HKEY_CLASSES_ROOT, extname, &reg );
249     if( rc_ok( rc ) )
250     rc = RegSetValueEx( reg, NULL, 0, REG_SZ, (byte *) extname, strlen( extname ) );
251     if( rc_ok( rc ) )
252     rc = RegCloseKey( reg );
253     if( !rc_ok( rc ) ) {
254     rc = WPTERR_REGISTRY;
255     goto leave;
256     }
257    
258     memset( &deficon, 0, sizeof deficon );
259     _snprintf( deficon, sizeof deficon - 1, "%s\\DefaultIcon", extname );
260     memset( &defexec, 0, sizeof defexec );
261     _snprintf( defexec, sizeof defexec - 1, "%s\\shell\\open\\command", extname );
262     memset( &p_exefile, 0, sizeof p_exefile );
263     _snprintf( p_exefile, sizeof p_exefile - 1, "%s %%1", exefile );
264    
265     rc = RegCreateKey( HKEY_CLASSES_ROOT, deficon, &reg );
266     if( rc_ok( rc ) )
267     rc = RegSetValueEx(reg, NULL, 0, REG_SZ, (byte *)iconfile, strlen( iconfile ) );
268     if( rc_ok( rc ) )
269     rc = RegCloseKey( reg );
270     if( rc_ok( rc ) )
271     rc = RegCreateKey( HKEY_CLASSES_ROOT, defexec, &reg );
272     if( rc_ok( rc ) )
273     rc = RegSetValueEx( reg, NULL, 0, REG_SZ, (byte *)p_exefile, strlen( exefile ) );
274     if( rc_ok( rc ) )
275     rc = RegCloseKey( reg );
276     if( !rc_ok( rc ) ) {
277     rc = WPTERR_REGISTRY;
278     goto leave;
279     }
280    
281     leave:
282     if( reg )
283     RegCloseKey( reg );
284     return rc;
285     } /* create_file_type */
286    
287    
288     /* Expand a string with %foo% entries so that %foo% will
289     be replaced with its actual value. */
290     static char *
291     expand_path (const char *path)
292     {
293     DWORD len;
294     char *p;
295    
296     len = ExpandEnvironmentStrings (path, NULL, 0);
297     if (!len)
298     return NULL;
299     len += 1;
300     p = new char[len+1];
301 twoaday 128 if (!p)
302 werner 36 return NULL;
303     len = ExpandEnvironmentStrings (path, p, len);
304     if (!len) {
305     free_if_alloc (p);
306     return NULL;
307     }
308     return p;
309 twoaday 128 }
310 werner 36
311    
312     /* Retrieve a registry entry with the directory given in @dir
313     and the key given in @key.
314     Return value is the value or NULL otherwise. */
315     char*
316     get_reg_entry (HKEY root_key, const char * dir, const char * key)
317     {
318     int rc;
319     char text[384] = {0};
320 twoaday 69 DWORD nbytes, type;
321 werner 36 HKEY reg_key = NULL;
322 twoaday 128 char * p = NULL;
323 werner 36
324     rc = RegOpenKeyEx (root_key, dir, 0, KEY_QUERY_VALUE, &reg_key);
325     if( !rc_ok( rc ) )
326     goto leave;
327     nbytes = sizeof (text) - 1;
328     type = REG_SZ;
329    
330     rc = RegQueryValueEx (reg_key, key, 0, &type, (BYTE *)&text, &nbytes);
331     if (!rc_ok (rc) || !nbytes)
332     goto leave;
333    
334     if (type == REG_EXPAND_SZ && strchr (text, '%'))
335     p = expand_path (text);
336     else {
337     p = new char[nbytes + 1];
338     if (!p)
339     BUG (0);
340     memcpy (p, text, nbytes);
341     p[nbytes] = '\0';
342     }
343    
344     leave:
345     if (reg_key)
346     RegCloseKey (reg_key);
347     return p;
348     }
349    
350    
351     /* XXX: use REG_EXPAND_SZ to support multi user environments.
352     keep this type and do not overwrite it with REG_SZ. */
353    
354     /* Set a registry entry. */
355     int
356     set_reg_entry (HKEY root_key, const char *dir, const char *key,
357     const char *value)
358     {
359     int rc = 0;
360     HKEY reg_key;
361    
362     rc = RegOpenKeyEx( root_key, dir, 0, KEY_WRITE, &reg_key );
363     if( !rc_ok( rc ) )
364     return WPTERR_REGISTRY;
365     rc = RegSetValueEx( reg_key, key, 0, REG_SZ, (BYTE *)value, strlen( value ) );
366     if( !rc_ok( rc ) )
367     rc = WPTERR_REGISTRY;
368     RegCloseKey( reg_key );
369     return rc;
370     } /* set_reg_entry */
371    
372    
373     int
374     set_reg_key( HKEY root_key, const char * dir, const char * key,
375     const char * value )
376     {
377     int rc = 0;
378     HKEY reg_key;
379    
380     rc = RegOpenKeyEx( root_key, dir, 0, KEY_WRITE, &reg_key );
381     if( !rc_ok( rc ) )
382     return WPTERR_REGISTRY;
383    
384     rc = RegSetValueEx( reg_key, key, 0, REG_SZ, (BYTE *)value, strlen( value ) );
385     if( !rc_ok( rc ) ) {
386     if ( RegCreateKey( root_key, key, &reg_key ) != ERROR_SUCCESS ) {
387     rc = WPTERR_REGISTRY;
388     goto leave;
389     }
390     rc = RegSetValueEx( reg_key, key, 0, REG_SZ, (BYTE *)value, strlen( value ) );
391     if ( !rc_ok( rc ) )
392     rc = WPTERR_REGISTRY;
393     }
394    
395     leave:
396     RegCloseKey( reg_key );
397     return rc;
398     } /* set_reg_key */
399    
400    
401     int
402     set_reg_entry_gpg (const char * key, const char * value)
403     {
404     return set_reg_entry (HKEY_CURRENT_USER, "Software\\GNU\\GnuPG", key, value);
405     }
406    
407    
408     int
409     set_reg_entry_mo (const char * value)
410     {
411     return set_reg_entry (HKEY_CURRENT_USER, "Control Panel\\Mingw32\\NLS",
412     "MODir", value);
413     }
414    
415    
416 twoaday 167 char*
417 werner 36 get_reg_entry_gpg (const char *key)
418     {
419 twoaday 167 char *p;
420     p = get_reg_entry (HKEY_CURRENT_USER, "Software\\GNU\\GnuPG", key);
421     if (!p || strlen (p) == 0) {
422     free_if_alloc (p);
423     return NULL;
424     }
425     return p;
426 werner 36 }
427    
428    
429 twoaday 73 /* Return if possible the GPG4Win installation directory concatenated
430     with the string in @path if given. */
431     char*
432     get_reg_entry_gpg4win (const char *path)
433     {
434     char *p, *pp;
435     p = get_reg_entry (HKEY_LOCAL_MACHINE,
436     "Software\\GNU\\GnuPG", "Install Directory");
437     if (!p)
438     return NULL;
439     if (!path)
440     return p;
441     pp = new char[strlen (p) + strlen (path) + 4];
442     if (!pp)
443     BUG (NULL);
444     sprintf (pp, "%s\\%s", p, path);
445     free_if_alloc (p);
446     return pp;
447     }
448    
449    
450     char*
451     get_reg_entry_mo (void)
452 werner 36 {
453 twoaday 76 char *p, *pp;
454     const char *lang;
455 twoaday 117
456 twoaday 73 p = get_reg_entry (HKEY_CURRENT_USER,
457     "Control Panel\\Mingw32\\NLS", "MODir");
458 twoaday 76 if (p)
459     return p;
460 twoaday 117
461 twoaday 76 lang = get_gettext_langid ();
462 twoaday 117 if (!lang)
463     return NULL;
464 twoaday 76 pp = new char[strlen ("share\\xxxxx\\locale\\LC_MESSAGES")+8];
465 twoaday 117 if (!pp)
466 twoaday 76 BUG (NULL);
467     sprintf (pp, "share\\locale\\%s\\LC_MESSAGES", lang);
468     p = get_reg_entry_gpg4win (pp);
469     free_if_alloc (pp);
470 twoaday 73 return p;
471 werner 36 }
472    
473    
474     /* All valid configuration commands. */
475     static const char * cfg [] = {
476     NULL,
477     "CacheTime",
478     "WordWrap",
479     "FastMode",
480     "Viewer",
481     "KeylistMode",
482     "WipeMode",
483     "AlwaysTrust",
484     "AutoBackup",
485     "BackupMode",
486     "DisableHotkeys",
487     "NoCompressMultiMedia",
488     "Expert",
489     "FMProgressBar",
490     };
491    
492    
493     int
494     set_reg_winpt_single (int id, int val)
495     {
496     char buf[64];
497     int rc;
498    
499     sprintf (buf, "%d", val);
500     rc = set_reg_entry (HKEY_CURRENT_USER, WINPT_REG, cfg[id], buf);
501     return rc;
502     }
503    
504    
505     int
506     get_reg_winpt_single (int id)
507     {
508 twoaday 128 char * buf = NULL;
509 werner 36 int val = 0;
510    
511     buf = get_reg_entry (HKEY_CURRENT_USER, WINPT_REG, cfg[id]);
512     if (buf && *buf != ' ')
513     val = 1;
514     else if (!buf)
515     val = -1;
516     free_if_alloc (buf);
517     return val;
518     }
519    
520    
521     /* Saves the winpt preferences in the registry. */
522     int
523     set_reg_winpt_prefs (winpt_reg_prefs_s * opt)
524     {
525     char buf[128];
526 twoaday 73 size_t i;
527     int rc = 0;
528 werner 36
529     for (i=1; i < DIM (cfg); i++) {
530     switch (i) {
531     case CFG_CACHETIME:
532     sprintf (buf, "%d", opt->cache_time);
533     break;
534     case CFG_WORDWRAP:
535     sprintf (buf, "%d", opt->word_wrap);
536     break;
537     case CFG_WIPEMODE:
538     sprintf (buf, "%d", opt->wipe_mode);
539     break;
540     case CFG_FASTMODE:
541     sprintf (buf, "%d", opt->use_tmpfiles);
542     break;
543     case CFG_NOZIP_MMEDIA:
544     sprintf (buf, "%d", opt->no_zip_mmedia);
545     break;
546     case CFG_VIEWER:
547     sprintf (buf, "%d", opt->use_viewer);
548     break;
549     case CFG_KEYLISTMODE:
550     sprintf (buf, "%d", opt->keylist_mode);
551     break;
552     case CFG_ALWAYSTRUST:
553     sprintf (buf, "%d", opt->always_trust);
554     break;
555     case CFG_AUTOBACKUP:
556     sprintf (buf, "%d", opt->auto_backup);
557     break;
558     case CFG_AUTOBAKMODE:
559     sprintf (buf, "%d", opt->backup.mode);
560     break;
561     case CFG_DISHOTKEYS:
562     sprintf (buf, "%d", opt->no_hotkeys);
563     break;
564     case CFG_EXPERT:
565     sprintf (buf, "%d", opt->expert);
566     break;
567    
568     case CFG_FM_PROGRESS:
569     sprintf (buf, "%d", opt->fm.progress);
570     break;
571     }
572     rc = set_reg_entry (HKEY_CURRENT_USER, WINPT_REG, cfg[i], buf);
573     if (rc)
574     goto leave;
575     }
576    
577     if (opt->backup.path) {
578     rc = set_reg_entry (HKEY_CURRENT_USER, WINPT_REG, "BackupPath",
579     opt->backup.path);
580     if (rc)
581     goto leave;
582     }
583    
584     for (i=0; reg_hotkeys[i].reg_entry; i++) {
585     strcpy (buf, " ");
586     if (reg_hotkeys[i].enabled)
587     strcpy (buf, reg_hotkeys[i].key);
588     rc = set_reg_key (HKEY_CURRENT_USER, WINPT_REG,
589     reg_hotkeys[i].reg_entry, buf);
590     if (rc)
591     break;
592     }
593    
594     leave:
595     if (rc) {
596     msg_box (NULL, _("Could not write to Registry."), _("Preferences"), MB_ERR);
597     return rc;
598     }
599     return 0;
600     }
601    
602    
603     int
604     set_reg_winpt_flag (const char * name, int val)
605     {
606     return set_reg_entry (HKEY_CURRENT_USER, WINPT_REG, name, val? "1" : "0");
607     } /* set_reg_winpt_flag */
608    
609    
610     int
611     get_reg_winpt_flag (const char * name)
612     {
613     char * buf;
614     int flag = 0;
615    
616     buf = get_reg_entry (HKEY_CURRENT_USER, WINPT_REG, name);
617     if (buf && buf[0] == '1')
618     flag = 1;
619     else if (!buf || buf && buf[0] != '0')
620     flag = -1;
621     free_if_alloc (buf);
622     return flag;
623     } /* get_reg_winpt_flag */
624    
625    
626     /* Retrieve the winpt preferences from the registry. */
627     int
628     get_reg_winpt_prefs (winpt_reg_prefs_s * opt)
629     {
630 twoaday 117 char *val = NULL;
631 twoaday 73 size_t i;
632 werner 36
633     for (i=1; i < DIM (cfg); i++) {
634     val = get_reg_entry (HKEY_CURRENT_USER, WINPT_REG, cfg[i]);
635     if (!val || *val == ' ') {
636     free_if_alloc (val);
637     continue;
638     }
639     switch (i) {
640     case CFG_CACHETIME:
641     opt->cache_time = atol (val);
642     /* We do NOT support passphrase caching for more than an hour.
643     * Perhaps we should allow it, but for now we silently drop this.
644     */
645     if (opt->cache_time > 3600)
646     opt->cache_time = 3600;
647     break;
648     case CFG_WORDWRAP:
649     opt->word_wrap = atol (val);
650     break;
651     case CFG_FASTMODE:
652     opt->use_tmpfiles = atol (val);
653     break;
654     case CFG_NOZIP_MMEDIA:
655     opt->no_zip_mmedia = atol (val);
656     break;
657     case CFG_VIEWER:
658     opt->use_viewer = atol (val);
659     break;
660     case CFG_KEYLISTMODE:
661     opt->keylist_mode = atol (val);
662     break;
663     case CFG_WIPEMODE:
664     opt->wipe_mode = atol (val);
665     break;
666     case CFG_DISHOTKEYS:
667     opt->no_hotkeys = atol (val);
668     break;
669     case CFG_ALWAYSTRUST:
670     opt->always_trust = atol (val);
671     break;
672     case CFG_AUTOBACKUP:
673     opt->auto_backup = atol (val);
674     break;
675     case CFG_AUTOBAKMODE:
676     opt->backup.mode = atol (val);
677     break;
678     case CFG_EXPERT:
679     opt->expert = atol (val);
680     break;
681    
682     case CFG_FM_PROGRESS:
683     opt->fm.progress = atol (val);
684     break;
685     }
686     free_if_alloc (val);
687     }
688    
689     val = get_reg_entry (HKEY_CURRENT_USER, WINPT_REG, "BackupPath");
690     if (val && val[0] != ' ')
691     opt->backup.path = m_strdup (val);
692     free_if_alloc (val);
693    
694     for (i=0; reg_hotkeys[i].reg_entry; i++) {
695     val = get_reg_entry (HKEY_CURRENT_USER, WINPT_REG, reg_hotkeys[i].reg_entry);
696     if (val && val[0] != ' ') {
697     reg_hotkeys[i].key[0] = *val;
698     reg_hotkeys[i].enabled = 1;
699     }
700     else
701     reg_hotkeys[i].enabled = 0;
702     free_if_alloc (val);
703     }
704     return 0;
705     } /* get_reg_winpt_prefs */
706    
707    
708     char*
709     get_reg_entry_keyserver (const char *name)
710     {
711     char * p = get_reg_entry (HKEY_CURRENT_USER, WINPT_REG"\\Keyserver", name);
712     if (p && !strcmp (p, "")) {
713     free_if_alloc (p);
714     return NULL;
715     }
716     return p;
717     }
718    
719    
720     void
721     get_reg_proxy_prefs (char ** host, int * port, char ** user, char ** pass)
722     {
723     if (host)
724     *host = get_reg_entry_keyserver ("Host");
725     if (user)
726     *user = get_reg_entry_keyserver ("User");
727     if (pass)
728     *pass = get_reg_entry_keyserver ("Pass");
729     if (port) {
730     char * p = get_reg_entry_keyserver ("Port");
731     if (p) {
732     *port = atol (p);
733     free_if_alloc (p);
734     }
735     }
736     } /* get_reg_proxy_prefs */
737    
738    
739     int
740     set_reg_entry_keyserver( const char * name, const char * val )
741     {
742     return set_reg_entry( HKEY_CURRENT_USER, WINPT_REG"\\Keyserver", name, val );
743     } /* set_reg_entry_keyserver */
744    
745    
746     int
747     set_reg_proxy_prefs( const char * host, int port, const char * user, const char * pass )
748     {
749     int rc;
750    
751     rc = set_reg_entry_keyserver( "Host", host? host : "" );
752     if( !rc ) {
753     char buf[32];
754     sprintf( buf, "%d", port );
755     rc = set_reg_entry_keyserver( "Port", buf );
756     }
757     if( !rc )
758     rc = set_reg_entry_keyserver( "User", user? user : "" );
759     if( !rc )
760     rc = set_reg_entry_keyserver( "Pass", pass? pass : "" );
761     return rc;
762     } /* set_reg_proxy_prefs */

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26