annotate cinst/mozilla.c @ 1070:f110a3f6e387

(issue114) Fine tune ACL propagation using mkdir_p the ACL of the parent directories would propagate to all subdirectories and objects in the directory. Now we only use ACL propagation in the last directory to make sure that files we might create in that directory inherit the correct (resitricted) ACL
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 10 Sep 2014 16:41:36 +0200
parents 317ee9dc4684
children 1e429faf7c84
rev   line source
404
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 390
diff changeset
1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 390
diff changeset
2 * Software engineering by Intevation GmbH
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 390
diff changeset
3 *
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 390
diff changeset
4 * This file is Free Software under the GNU GPL (v>=2)
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 390
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY!
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 390
diff changeset
6 * See LICENSE.txt for details.
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 390
diff changeset
7 */
121
4bb5f295987b Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents: 119
diff changeset
8 /**
4bb5f295987b Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents: 119
diff changeset
9 * @file
4bb5f295987b Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents: 119
diff changeset
10 * @brief Mozilla installation process
99
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
11 *
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
12 * Reads from a file given on command line or stdin a list of
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
13 * instructions in the form:
99
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
14 *
1053
78798d3af8f0 Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents: 1012
diff changeset
15 * I:\<base64 DER econded certificate\> <BR>
78798d3af8f0 Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents: 1012
diff changeset
16 * R:\<base64 DER econded certificate\>
99
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
17 * ...
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
18 *
238
dd417a2ff9cd Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents: 235
diff changeset
19 * With one instruction per line. the maximum size of an input
1053
78798d3af8f0 Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents: 1012
diff changeset
20 * line is 9999 characters (including the \\r\\n) at the end of the line.
99
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
21 *
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
22 * Certificates marked with I: will be installed and the ones
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
23 * marked with R: will be searched and if available removed from
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
24 * the databases.
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
25 *
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
26 * This tool tries to find all NSS databases the user has
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
27 * access to and to execute the instructions on all of them.
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
28 *
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
29 * If the tool is executed with a UID of 0 or with admin privileges under
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
30 * windows it will not look into the user directories but instead try
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
31 * to write the system wide defaults.
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
32 *
99
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
33 * If there are other processes accessing the databases the caller
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
34 * has to ensure that those are terminated before this process is
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
35 * executed.
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
36 *
238
dd417a2ff9cd Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents: 235
diff changeset
37 * If the same certificate is marked to be installed and to be removed
dd417a2ff9cd Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents: 235
diff changeset
38 * in one call the behavior is undefined. This should be avoided and
dd417a2ff9cd Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents: 235
diff changeset
39 * may lead to errors.
dd417a2ff9cd Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents: 235
diff changeset
40 *
99
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
41 * Returns 0 on success (Even when no stores where found) an error value
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
42 * as defined in errorcodes.h otherwise.
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
43 *
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
44 * Success messages are written to stdout. Errors to stderr. For logging
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
45 * purposes each installation / removal of a certificate will be reported
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
46 * with the profile name that it modified.
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
47 *
1060
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
48 * To get more verbose output add the --debug parameter
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
49 * as the last parameter on the command line.
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
50 *
99
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
51 */
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
52
235
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
53 /**
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
54 * @brief Needs to be defined to get strnlen()
235
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
55 */
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
56 #define _POSIX_C_SOURCE 200809L
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
57
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
58 /* REMOVEME: */
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
59 #include <unistd.h>
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
60
269
f7471604bb31 Deletion of certificates implemented.
Sascha Wilde <wilde@intevation.de>
parents: 268
diff changeset
61 #include <cert.h>
f7471604bb31 Deletion of certificates implemented.
Sascha Wilde <wilde@intevation.de>
parents: 268
diff changeset
62 #include <certdb.h>
f7471604bb31 Deletion of certificates implemented.
Sascha Wilde <wilde@intevation.de>
parents: 268
diff changeset
63 #include <certt.h>
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
64 #include <dirent.h>
224
689b94dd89a9 Wrote FindNSS to build against nss without pkg-config support (Windows).
Sascha Wilde <wilde@intevation.de>
parents: 223
diff changeset
65 #include <nss.h>
689b94dd89a9 Wrote FindNSS to build against nss without pkg-config support (Windows).
Sascha Wilde <wilde@intevation.de>
parents: 223
diff changeset
66 #include <pk11pub.h>
1012
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
67 #include <secerr.h>
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
68 #include <stdbool.h>
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
69 #include <stdio.h>
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
70 #include <stdlib.h>
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
71 #include <string.h>
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
72 #include <sys/types.h>
989
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
73 #include <sys/stat.h>
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
74
230
92b1e5ed2d5f Cleanup and documentation in debugging macros.
Sascha Wilde <wilde@intevation.de>
parents: 229
diff changeset
75 #define DEBUGPREFIX "MOZ-"
252
bd7fb50078b4 Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents: 246
diff changeset
76 #include "logging.h"
230
92b1e5ed2d5f Cleanup and documentation in debugging macros.
Sascha Wilde <wilde@intevation.de>
parents: 229
diff changeset
77
261
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
78 #include "certhelp.h"
226
d7788db3bdde Make locale includes distinguishable from system includes.
Sascha Wilde <wilde@intevation.de>
parents: 224
diff changeset
79 #include "errorcodes.h"
d7788db3bdde Make locale includes distinguishable from system includes.
Sascha Wilde <wilde@intevation.de>
parents: 224
diff changeset
80 #include "portpath.h"
d7788db3bdde Make locale includes distinguishable from system includes.
Sascha Wilde <wilde@intevation.de>
parents: 224
diff changeset
81 #include "strhelp.h"
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
82 #include "nss-secitemlist.h"
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
83 #include "util.h"
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
84
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
85 #ifndef _WIN32
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
86 #define CONFDIRS ".mozilla", ".thunderbird"
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
87 /* Default installation directory of ubuntu 14.4 is respected */
989
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
88 #define MOZILLA_DEFAULTS "/usr/lib/thunderbird/defaults", "/usr/lib/firefox/browser/defaults"
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
89 #define MOZILLA_DBNAMES "cert8.db", "key3.db", "secmod.db"
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
90 #define NSSSHARED ".pki/nssdb"
988
ca89cf228a5b (issue86) Write nss shared db defaults into /etc/skel
Andre Heinecke <andre.heinecke@intevation.de>
parents: 986
diff changeset
91 #define NSSSHARED_GLOBAL "/etc/skel/.pki/nssdb"
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
92 #define TARGET_LINUX 1
985
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
93 #define DIRSEP "/"
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
94 #else
985
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
95 #define MOZILLA_DEFAULTS "Mozilla Firefox\\browser\\defaults", "Mozilla Thunderbird\\defaults"
989
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
96 #define MOZILLA_DBNAMES NULL
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
97 #define CONFDIRS "Mozilla", "Thunderbird"
311
4ffc9f31b61a Fixed windows build.
Sascha Wilde <wilde@intevation.de>
parents: 309
diff changeset
98 #define NSSSHARED ""
989
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
99 #define TARGET_LINUX NULL
985
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
100 #define DIRSEP "\\"
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
101 #endif
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
102
229
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
103 /**
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
104 * @brief Length of string buffers used
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
105 *
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
106 * The maximal length of input is defined as 9999 (+ terminating \0).
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
107 * We use it for other other input puffers besides the IPC input, too.
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
108 * (One size fits all).
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
109 */
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
110 #define LINEBUFLEN 10000
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
111
909
18e3ad073b38 Use strtok_r/strtok_s instead of strtok.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
112 #ifdef _WIN32
18e3ad073b38 Use strtok_r/strtok_s instead of strtok.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
113 #define STRTOK_R strtok_s
18e3ad073b38 Use strtok_r/strtok_s instead of strtok.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
114 #else
18e3ad073b38 Use strtok_r/strtok_s instead of strtok.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
115 #define STRTOK_R strtok_r
18e3ad073b38 Use strtok_r/strtok_s instead of strtok.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
116 #endif
18e3ad073b38 Use strtok_r/strtok_s instead of strtok.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
117
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
118 /**
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
119 * @brief Global Return Code
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
120 *
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
121 * This will be retuned by the programm and might be set to an
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
122 * error code on fatal errors and to and warning code on non-fatal
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
123 * errors. In case of mor than one warning the warning codes will be
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
124 * ORed together.
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
125 */
317
46fd11699646 Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents: 315
diff changeset
126 int exit_code = 0;
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
127
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
128 /**
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
129 * @brief Return configuration base directory.
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
130 * @returns A pointer to a string containing the path to the base
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
131 * directory holding the configuration directories for e.g. mozilla
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
132 * and thunderbird.
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
133 */
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
134 static char *
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
135 get_conf_basedir()
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
136 {
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
137 char *cdir, *envvar;
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
138
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
139 if (TARGET_LINUX)
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
140 envvar = "HOME" ;
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
141 else
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
142 envvar = "APPDATA";
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
143
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
144 if ((cdir = getenv(envvar)) != NULL)
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
145 return cdir;
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
146 else
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
147 {
1060
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
148 ERRORPRINTF("FATAL! No %s in environment.\n", envvar);
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
149 exit(ERR_MOZ_HOMELESS);
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
150 }
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
151 }
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
152
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
153 /**
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
154 * @brief Get a list of all mozilla profile directories
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
155 *
232
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
156 * Parse the profiles.ini and extract all profile paths from that.
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
157 * The expected data is in the form:
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
158 *
1053
78798d3af8f0 Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents: 1012
diff changeset
159 * [Profile99]<BR>
78798d3af8f0 Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents: 1012
diff changeset
160 * IsRelative=1<BR>
78798d3af8f0 Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents: 1012
diff changeset
161 * Path=Example/foo.bar
232
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
162 *
1053
78798d3af8f0 Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents: 1012
diff changeset
163 * or<BR>
78798d3af8f0 Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents: 1012
diff changeset
164 * [Profile0]<BR>
78798d3af8f0 Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents: 1012
diff changeset
165 * IsRelative=0<BR>
78798d3af8f0 Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents: 1012
diff changeset
166 * Path=c:\\foo\\bar\\baz
232
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
167 *
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
168 * Mozilla also accepts the ini file on Windows even if it is UTF-16
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
169 * encoded but never writes UTF-16 on its own. So currently we ignore
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
170 * this special case.
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
171 *
121
4bb5f295987b Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents: 119
diff changeset
172 * @param[in] inifile_name path of the profile.ini to read.
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
173 * @return NULL terminated array of strings containing containing the
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
174 * absolute path of the profile directories. The array needs to
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
175 * be freed by the caller.
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
176 */
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
177 static char **
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
178 get_profile_dirs (char *inifile_name)
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
179 {
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
180 char **dirs = NULL;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
181 char *inifile_dirname;
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
182 FILE *inifile;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
183 char line[LINEBUFLEN];
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
184 char *key;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
185 char *value;
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
186 char *path = NULL;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
187 char *fqpath;
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
188 bool inprofile = false;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
189 bool relative_path = false;
909
18e3ad073b38 Use strtok_r/strtok_s instead of strtok.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
190 char *saveptr;
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
191
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
192 if ((inifile = fopen(inifile_name, "r")) != NULL)
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
193 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
194 DEBUGPRINTF("Searching for profile paths in: '%s'\n", inifile_name);
175
6fa0e12ae1d2 Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents: 174
diff changeset
195
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
196 inifile_dirname = port_dirname(inifile_name);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
197 while (fgets(line, LINEBUFLEN, inifile) != NULL)
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
198 {
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
199 /* Determine if we are in an profile section */
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
200 if (str_starts_with(line, "[Profile"))
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
201 {
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
202 relative_path = false;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
203 inprofile = true;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
204 }
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
205 else if (line[0] == '[')
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
206 inprofile = false;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
207
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
208 /* If we are in a profile parse path related stuff */
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
209 if (inprofile)
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
210 {
909
18e3ad073b38 Use strtok_r/strtok_s instead of strtok.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
211 saveptr = NULL;
18e3ad073b38 Use strtok_r/strtok_s instead of strtok.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
212 key = STRTOK_R(line, "=", &saveptr);
18e3ad073b38 Use strtok_r/strtok_s instead of strtok.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
213 value = STRTOK_R(NULL, "=", &saveptr);
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
214 str_trim(&value);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
215 if (str_equal(key, "Path"))
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
216 {
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
217 if (relative_path)
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
218 xasprintf(&path, "%s/%s", inifile_dirname, value);
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
219 else
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
220 xasprintf(&path, "%s", value);
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
221 if ((fqpath = port_realpath(path)) != NULL)
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
222 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
223 DEBUGPRINTF("Found profile path: '%s'\n", fqpath);
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
224 strv_append(&dirs, fqpath, strlen(fqpath));
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
225 free (fqpath);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
226 }
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
227 else
175
6fa0e12ae1d2 Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents: 174
diff changeset
228 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
229 DEBUGPRINTF("WARN! Non existent profile path: '%s'\n", path);
317
46fd11699646 Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents: 315
diff changeset
230 exit_code |= WARN_MOZ_PROFILE_DOES_NOT_EXIST;
175
6fa0e12ae1d2 Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents: 174
diff changeset
231 }
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
232 free(path);
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
233 }
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
234 else if (str_equal(key, "IsRelative") &&
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
235 str_starts_with(value, "1"))
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
236 relative_path = true;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
237 }
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
238 }
179
8fafd0fc2173 get_profile_dirs(): close filedescriptor again. (found by cppcheck)
Bernhard Reiter <bernhard@intevation.de>
parents: 177
diff changeset
239 fclose(inifile);
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
240 }
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
241 else
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
242 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
243 DEBUGPRINTF("WARN! Could not open ini file: '%s'\n", inifile_name);
317
46fd11699646 Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents: 315
diff changeset
244 exit_code |= WARN_MOZ_FAILED_TO_OPEN_INI;
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
245 }
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
246 return dirs;
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
247 }
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
248
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
249 /**
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
250 * @brief Search for mozilla profiles.ini files
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
251 *
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
252 * Use well known paths and heuristics to find the current users
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
253 * profiles.ini files on GNU/Linux and Windows systems.
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
254 *
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
255 * @return NULL terminated array of strings containing the absolute
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
256 * path of the profiles.ini files. The array needs to be freed by the
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
257 * caller.
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
258 */
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
259 static char **
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
260 get_profile_inis ()
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
261 {
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
262 char **inis = NULL;
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
263 char *mozpath, *fqpath, *subpath, *ppath;
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
264 DIR *mozdir;
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
265 struct dirent *mozdirent;
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
266 char *confbase = get_conf_basedir();
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
267 const char *confdirs[] = { CONFDIRS, NULL };
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
268
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
269 for (int i=0; confdirs[i] != NULL; i++)
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
270 {
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
271 xasprintf(&mozpath,"%s/%s", confbase, confdirs[i]);
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
272 if ((mozdir = opendir(mozpath)) != NULL)
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
273 {
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
274 while ((mozdirent = readdir(mozdir)) != NULL)
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
275 {
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
276 xasprintf(&subpath, "%s/%s/%s",
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
277 confbase,
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
278 confdirs[i],
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
279 mozdirent->d_name);
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
280 if (port_isdir(subpath)
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
281 && (strcmp(mozdirent->d_name, "..") != 0))
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
282 {
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
283 xasprintf(&ppath, "%s/%s/%s/%s",
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
284 confbase,
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
285 confdirs[i],
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
286 mozdirent->d_name,
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
287 "profiles.ini");
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
288 DEBUGPRINTF("checking for %s...\n", ppath);
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
289 if ((fqpath = port_realpath(ppath)) != NULL)
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
290 {
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
291 strv_append(&inis, fqpath, strlen(fqpath));
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
292 DEBUGPRINTF("Found mozilla ini file: '%s'\n", fqpath);
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
293 free(fqpath);
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
294 }
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
295 free(ppath);
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
296 }
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
297 free(subpath);
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
298 }
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
299 closedir(mozdir);
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
300 }
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
301 else
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
302 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
303 DEBUGPRINTF("Could not open %s/%s\n", confbase, confdirs[i]);
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
304 }
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
305 free(mozpath);
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
306 }
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
307 if (inis == NULL)
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
308 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
309 DEBUGPRINTF("No ini files found - will do nothing!\n");
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
310 }
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
311 return inis;
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
312 }
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
313
989
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
314
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
315 /** @brief make the default nss databases readable.
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
316 *
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
317 * This uses the static paths definied in this code to ensure
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
318 * that only the defaults are touched.
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
319 *
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
320 */
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
321 #ifndef WIN32
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
322 static void
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
323 make_defaults_readable()
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
324 {
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
325 const char *confdirs[] = { MOZILLA_DEFAULTS, NULL };
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
326 const char *filenames[] = { MOZILLA_DBNAMES, NULL };
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
327
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
328 mode_t access_mask = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
329
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
330 for (int i=0; confdirs[i] != NULL; i++)
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
331 {
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
332 for (int j=0; filenames[j] != NULL; j++)
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
333 {
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
334 char *realpath = NULL,
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
335 *path = NULL;
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
336 xasprintf (&path, "%s/profile/%s", confdirs[i], filenames[j]);
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
337 realpath = port_realpath(path);
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
338 xfree(path);
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
339 if (!realpath)
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
340 {
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
341 syslog_error_printf("Failed to find %s \n", realpath);
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
342 continue;
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
343 }
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
344 if (chmod(realpath, access_mask))
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
345 {
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
346 syslog_error_printf("Failed to set access_mask on file.\n");
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
347 }
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
348 xfree (realpath);
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
349 }
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
350 }
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
351 }
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
352 #endif
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
353
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
354 /**
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
355 * @brief Collect the default profile directories for mozilla software
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
356 *
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
357 * If the default directory is found but not the profiles subdirectory
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
358 * this will create the profiles subdirectory.
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
359 *
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
360 * @return NULL terminated array of strings containing the absolute path
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
361 * to the default profile directories. Needs to be freed by the caller.
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
362 */
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
363 static char**
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
364 get_default_profile_dirs()
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
365 {
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
366 char **retval = NULL;
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
367
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
368 const char *confdirs[] = { MOZILLA_DEFAULTS, NULL };
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
369
985
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
370 #ifdef _WIN32
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
371 char *program_files = get_program_files_folder();
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
372 if (!program_files)
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
373 {
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
374 ERRORPRINTF ("Failed to look up program files folder.\n");
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
375 return NULL;
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
376 }
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
377 #endif
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
378
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
379 for (int i=0; confdirs[i] != NULL; i++)
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
380 {
985
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
381 char *realpath = NULL,
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
382 *profile_dir = NULL;
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
383 #ifndef _WIN32
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
384 realpath = port_realpath(confdirs[i]);
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
385 #else
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
386 /* As on linux we only respect the default installation directory
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
387 mozilla firefox and thunderbird change their registry key with
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
388 each version as the key includes the version number. It would
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
389 be error prone to search the system for every instance. So we
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
390 only check the default installation directories. */
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
391 xasprintf(&realpath, "%s" DIRSEP "%s", program_files, confdirs[i]);
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
392 #endif
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
393 if (realpath == NULL)
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
394 {
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
395 DEBUGPRINTF ("Did not find directory: '%s'\n", confdirs[i]);
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
396 continue;
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
397 }
985
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
398 xasprintf(&profile_dir, "%s" DIRSEP "profile", realpath);
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
399 xfree(realpath);
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
400 if (port_isdir(profile_dir))
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
401 {
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
402 DEBUGPRINTF("Found default directory: '%s'\n", profile_dir);
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
403 /* All is well */
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
404 strv_append (&retval, profile_dir, strlen(profile_dir));
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
405 xfree(profile_dir);
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
406 profile_dir = NULL;
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
407 continue;
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
408 }
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
409 else
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
410 {
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
411 /* Create the directory */
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
412 if (port_fileexits(profile_dir))
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
413 {
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
414 DEBUGPRINTF ("Path: '%s' is not a directory but it exists. Skipping.\n",
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
415 profile_dir);
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
416 xfree(profile_dir);
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
417 profile_dir = NULL;
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
418 continue;
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
419 }
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
420 else
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
421 {
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
422 /* Lets create it */
1070
f110a3f6e387 (issue114) Fine tune ACL propagation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1060
diff changeset
423 if (!port_mkdir_p(profile_dir, true))
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
424 {
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
425 ERRORPRINTF ("Failed to create directory: '%s'\n", profile_dir);
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
426 xfree(profile_dir);
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
427 profile_dir = NULL;
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
428 continue;
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
429 }
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
430 strv_append (&retval, profile_dir, strlen(profile_dir));
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
431 xfree(profile_dir);
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
432 profile_dir = NULL;
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
433 }
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
434 }
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
435 }
986
66f6361fba1b Fix linux build
Andre Heinecke <andre.heinecke@intevation.de>
parents: 985
diff changeset
436 #ifdef WIN32
985
1743895b39b8 (issue86) Install into default profile folders on windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 975
diff changeset
437 xfree (program_files);
986
66f6361fba1b Fix linux build
Andre Heinecke <andre.heinecke@intevation.de>
parents: 985
diff changeset
438 #endif
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
439 return retval;
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
440 }
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
441
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
442 /**
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
443 * @brief Collect all mozilla profile directories of current user.
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
444 * @return NULL terminated array of strings containing the absolute
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
445 * path of the profile directories. The array needs to be freed by the
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
446 * caller.
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
447 */
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
448 static char**
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
449 get_all_nssdb_dirs()
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
450 {
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
451 char **mozinis, **pdirs;
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
452 char **alldirs = NULL;
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
453
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
454 if (is_elevated())
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
455 {
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
456 #ifndef _WIN32
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
457 /* NSS Shared db does not exist under windows. */
1070
f110a3f6e387 (issue114) Fine tune ACL propagation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1060
diff changeset
458 if (!port_mkdir_p(NSSSHARED_GLOBAL, false))
988
ca89cf228a5b (issue86) Write nss shared db defaults into /etc/skel
Andre Heinecke <andre.heinecke@intevation.de>
parents: 986
diff changeset
459 {
ca89cf228a5b (issue86) Write nss shared db defaults into /etc/skel
Andre Heinecke <andre.heinecke@intevation.de>
parents: 986
diff changeset
460 ERRORPRINTF("Failed to create nssshared skeleton directory. \n");
ca89cf228a5b (issue86) Write nss shared db defaults into /etc/skel
Andre Heinecke <andre.heinecke@intevation.de>
parents: 986
diff changeset
461 }
ca89cf228a5b (issue86) Write nss shared db defaults into /etc/skel
Andre Heinecke <andre.heinecke@intevation.de>
parents: 986
diff changeset
462 else
ca89cf228a5b (issue86) Write nss shared db defaults into /etc/skel
Andre Heinecke <andre.heinecke@intevation.de>
parents: 986
diff changeset
463 {
ca89cf228a5b (issue86) Write nss shared db defaults into /etc/skel
Andre Heinecke <andre.heinecke@intevation.de>
parents: 986
diff changeset
464 strv_append(&alldirs, "sql:" NSSSHARED_GLOBAL, strlen("sql:" NSSSHARED_GLOBAL));
ca89cf228a5b (issue86) Write nss shared db defaults into /etc/skel
Andre Heinecke <andre.heinecke@intevation.de>
parents: 986
diff changeset
465 }
975
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
466 #endif
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
467 pdirs = get_default_profile_dirs();
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
468 if (pdirs != NULL)
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
469 {
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
470 for (int i=0; pdirs[i] != NULL; i++)
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
471 {
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
472 strv_append(&alldirs, pdirs[i], strlen(pdirs[i]));
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
473 }
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
474 strv_free(pdirs);
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
475 }
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
476 return alldirs;
b3695a3399de (issue86) Install into default directories on Linux
Andre Heinecke <andre.heinecke@intevation.de>
parents: 945
diff changeset
477 }
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
478 /* Search Mozilla/Firefox/Thunderbird profiles */
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
479 if ((mozinis = get_profile_inis()) != NULL)
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
480 {
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
481 for (int i=0; mozinis[i] != NULL; i++)
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
482 {
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
483 pdirs =
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
484 get_profile_dirs(mozinis[i]);
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
485 if (pdirs != NULL)
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
486 {
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
487 for (int i=0; pdirs[i] != NULL; i++)
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
488 {
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
489 strv_append(&alldirs, pdirs[i], strlen(pdirs[i]));
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
490 }
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
491 strv_free(pdirs);
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
492 }
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
493 }
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
494 strv_free(mozinis);
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
495 }
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
496 /* Search for NSS shared DB (used by Chrome/Chromium on GNU/Linux) */
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
497 if (TARGET_LINUX)
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
498 {
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
499 char *path, *fqpath, *sqlpath;
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
500 xasprintf(&path, "%s/%s", get_conf_basedir(), NSSSHARED);
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
501 if ((fqpath = port_realpath(path)) != NULL)
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
502 {
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
503 xasprintf(&sqlpath, "sql:%s", fqpath);
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
504 strv_append(&alldirs, sqlpath, strlen(sqlpath));
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
505 free(sqlpath);
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
506 free(fqpath);
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
507 }
320
1628615d904e Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents: 317
diff changeset
508 free(path);
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
509 }
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
510 return alldirs;
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
511 }
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
512
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
513 #ifdef DEBUGOUTPUT
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
514 /**
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
515 * @brief list certificates from nss certificate store
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
516 * @param[in] confdir the directory with the certificate store
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
517 */
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
518 static void
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
519 DEBUG_nss_list_certs (char *confdir)
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
520 {
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
521 CERTCertList *list;
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
522 CERTCertListNode *node;
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
523 char *name;
224
689b94dd89a9 Wrote FindNSS to build against nss without pkg-config support (Windows).
Sascha Wilde <wilde@intevation.de>
parents: 223
diff changeset
524
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
525 if (NSS_Initialize(confdir, "", "", "secmod.db", NSS_INIT_READONLY)
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
526 == SECSuccess)
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
527 {
283
fb9e14f4b4c9 Show which store is listed in debug certificate listings.
Sascha Wilde <wilde@intevation.de>
parents: 281
diff changeset
528 DEBUGPRINTF("Listing certs in \"%s\"\n", confdir);
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
529 list = PK11_ListCerts(PK11CertListAll, NULL);
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
530 for (node = CERT_LIST_HEAD(list); !CERT_LIST_END(node, list);
905
698b6a9bd75e Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents: 625
diff changeset
531 node = CERT_LIST_NEXT(node))
698b6a9bd75e Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents: 625
diff changeset
532 {
698b6a9bd75e Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents: 625
diff changeset
533 name = node->appData;
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
534
905
698b6a9bd75e Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents: 625
diff changeset
535 DEBUGPRINTF("Found certificate \"%s\"\n", name);
698b6a9bd75e Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents: 625
diff changeset
536 }
945
56ca8f2fd433 Add comment about a leak in NSS
Andre Heinecke <andre.heinecke@intevation.de>
parents: 909
diff changeset
537 /* According to valgrind this leaks memory in the list.
56ca8f2fd433 Add comment about a leak in NSS
Andre Heinecke <andre.heinecke@intevation.de>
parents: 909
diff changeset
538 We could not find API documentation to better free this
56ca8f2fd433 Add comment about a leak in NSS
Andre Heinecke <andre.heinecke@intevation.de>
parents: 909
diff changeset
539 so we accept the leakage here in case of debug. */
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
540 CERT_DestroyCertList(list);
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
541 NSS_Shutdown();
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
542 }
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
543 else
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
544 {
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
545 DEBUGPRINTF("Could not open nss certificate store in %s!\n", confdir);
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
546 }
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
547 }
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
548 #endif
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
549
261
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
550 /**
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
551 * @brief Create a string with the name for cert in SECItem.
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
552 *
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
553 * Should be freed by caller.
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
554 * @param[in] secitemp ponts to an SECItem holding the DER certificate.
1053
78798d3af8f0 Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents: 1012
diff changeset
555 * @returns a string of the from "CN of Subject - O of Subject"
261
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
556 */
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
557 static char *
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
558 nss_cert_name(SECItem *secitemp)
390
eab288779e07 Added debug output in NSS_cert_name on failure
Andre Heinecke <andre.heinecke@intevation.de>
parents: 332
diff changeset
559 {
eab288779e07 Added debug output in NSS_cert_name on failure
Andre Heinecke <andre.heinecke@intevation.de>
parents: 332
diff changeset
560 char *cn_str, *o_str, *name;
261
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
561 size_t name_len;
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
562 cn_str = x509_parse_subject(secitemp->data, secitemp->len, CERT_OID_CN);
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
563 o_str = x509_parse_subject(secitemp->data, secitemp->len, CERT_OID_O);
332
81a205fc651e Do not exit on error
Andre Heinecke <aheinecke@intevation.de>
parents: 322
diff changeset
564 if (!cn_str || !o_str)
81a205fc651e Do not exit on error
Andre Heinecke <aheinecke@intevation.de>
parents: 322
diff changeset
565 {
1060
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
566 ERRORPRINTF("FATAL: Could not parse certificate!");
332
81a205fc651e Do not exit on error
Andre Heinecke <aheinecke@intevation.de>
parents: 322
diff changeset
567 exit(ERR_INVALID_CERT);
81a205fc651e Do not exit on error
Andre Heinecke <aheinecke@intevation.de>
parents: 322
diff changeset
568 }
261
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
569 name_len = strlen(cn_str) + strlen(o_str) + 4;
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
570 name = (char *)xmalloc(name_len);
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
571 snprintf(name, name_len, "%s - %s", cn_str, o_str);
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
572 free(cn_str);
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
573 free(o_str);
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
574 return name;
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
575 }
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
576
276
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
577 /**
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
578 * @brief Convert a base64 encoded DER certificate to SECItem
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
579 * @param[in] b64 pointer to the base64 encoded certificate
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
580 * @param[in] b64len length of the base64 encoded certificate
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
581 * @param[out] secitem pointer to the SECItem in which to store the
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
582 * raw DER certifiacte.
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
583 * @returns true on success and false on failure
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
584 */
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
585 static bool
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
586 base64_to_secitem(char *b64, size_t b64len, SECItem *secitem)
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
587 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
588 unsigned char *dercert = NULL;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
589 size_t dercertlen;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
590
245
fbd74e2370de Error out, when base64 decode results in empty data.
Sascha Wilde <wilde@intevation.de>
parents: 244
diff changeset
591 if ((str_base64_decode((char **)(&dercert), &dercertlen,
fbd74e2370de Error out, when base64 decode results in empty data.
Sascha Wilde <wilde@intevation.de>
parents: 244
diff changeset
592 b64, b64len) == 0) &&
fbd74e2370de Error out, when base64 decode results in empty data.
Sascha Wilde <wilde@intevation.de>
parents: 244
diff changeset
593 (dercertlen > 0))
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
594 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
595 secitem->data = dercert;
246
1efe494c3d2b Explicit tyoe cast to fix warning on 64bit Jessie.
Sascha Wilde <wilde@intevation.de>
parents: 245
diff changeset
596 secitem->len = (unsigned int) dercertlen;
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
597 return true;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
598 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
599 else
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
600 {
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
601 DEBUGPRINTF("Base64 decode failed for: %s\n", b64);
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
602 }
261
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
603 return false;
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
604 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
605
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
606 /**
277
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
607 * @brief Store DER certificate in mozilla store.
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
608 * @param[in] pdir the mozilla profile directory with the certificate
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
609 * store to manipulate.
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
610 * @param[in] dercert pointer to a SECItem holding the DER certificate
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
611 * to install
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
612 * @returns true on success and false on failure
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
613 */
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
614 static bool
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
615 import_cert(char *pdir, SECItem *dercert)
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
616 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
617 PK11SlotInfo *pk11slot = NULL;
309
fa37384b86b6 Add trust "Trusted CA to issue server certificates" to certs on install.
Sascha Wilde <wilde@intevation.de>
parents: 308
diff changeset
618 CERTCertTrust *trust = NULL;
fa37384b86b6 Add trust "Trusted CA to issue server certificates" to certs on install.
Sascha Wilde <wilde@intevation.de>
parents: 308
diff changeset
619 CERTCertificate *cert = NULL;
277
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
620 bool success = false;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
621 char *cert_name = nss_cert_name(dercert);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
622
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
623 DEBUGPRINTF("INSTALLING cert: '%s' to: %s\n", cert_name, pdir);
493
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
624 pk11slot = PK11_GetInternalKeySlot();
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
625 cert = CERT_DecodeCertFromPackage((char *)dercert->data,
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
626 (int)dercert->len);
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
627 trust = (CERTCertTrust *)xmalloc(sizeof(CERTCertTrust));
595
2c4eb4435a40 Set trust also for S/MIME and Codesigning
Andre Heinecke <aheinecke@intevation.de>
parents: 564
diff changeset
628 CERT_DecodeTrustString(trust, "C,C,C");
1012
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
629 if (PK11_ImportCert(pk11slot, cert, CK_INVALID_HANDLE,
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
630 cert_name, PR_FALSE) == SECSuccess)
277
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
631 {
1012
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
632 if(CERT_ChangeCertTrust(CERT_GetDefaultCertDB(), cert, trust) == SECSuccess)
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
633 {
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
634 log_certificate_der (pdir, dercert->data, dercert->len, true);
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
635 success = true;
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
636 }
277
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
637 }
1012
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
638 /* This could have happened on either the import cert or
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
639 the cert change trust. If Import Cert fails with that
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
640 error the certificate has in fact been added but with
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
641 random trist bits. See NSS Bug 595861.
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
642 Reference code can be found in gnome evolution under
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
643 smime/lib/e-cert-db.c */
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
644 if(PORT_GetError() == SEC_ERROR_TOKEN_NOT_LOGGED_IN)
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
645 {
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
646 if (PK11_NeedUserInit (pk11slot))
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
647 {
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
648 PK11_InitPin (pk11slot, "", "");
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
649 }
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
650 if (PK11_Authenticate (pk11slot, PR_TRUE, NULL) != SECSuccess)
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
651 {
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
652 DEBUGPRINTF("Failed to authenticate.\n");
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
653 }
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
654 else if(CERT_ChangeCertTrust(CERT_GetDefaultCertDB(), cert, trust) == SECSuccess)
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
655 {
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
656 log_certificate_der (pdir, dercert->data, dercert->len, true);
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
657 success = true;
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
658 }
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
659 }
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
660
a80abef948fa (issue86) Initialize NSS db with empty pin in case it needs it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 989
diff changeset
661 if (!success)
277
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
662 {
493
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
663 DEBUGPRINTF("Failed to install certificate '%s' to '%s'!\n", cert_name, pdir);
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
664 ERRORPRINTF("Error installing certificate err: %i\n", PORT_GetError());
277
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
665 }
493
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
666 CERT_DestroyCertificate (cert);
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
667 free(trust);
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
668 PK11_FreeSlot(pk11slot);
277
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
669
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
670 free(cert_name);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
671 return success;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
672 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
673
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
674 /**
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
675 * @brief Remove DER certificate from mozilla store.
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
676 * @param[in] pdir the mozilla profile directory with the certificate
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
677 * store to manipulate.
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
678 * @param[in] dercert pointer to a SECItem holding the DER certificate
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
679 * to remove
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
680 * @returns true on success and false on failure
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
681 */
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
682 static bool
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
683 remove_cert(char *pdir, SECItem *dercert)
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
684 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
685 PK11SlotInfo *pk11slot = NULL;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
686 bool success = false;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
687 char *cert_name = nss_cert_name(dercert);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
688 CERTCertificate *cert = NULL;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
689
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
690 DEBUGPRINTF("REMOVING cert: '%s' from: %s\n", cert_name, pdir);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
691 if (NSS_Initialize(pdir, "", "", "secmod.db", 0) == SECSuccess)
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
692 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
693 pk11slot = PK11_GetInternalKeySlot();
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
694 cert = PK11_FindCertFromDERCertItem(pk11slot,
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
695 dercert, NULL);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
696 if (cert != NULL)
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
697 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
698 if (SEC_DeletePermCertificate(cert) == SECSuccess)
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
699 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
700 success = true;
625
2303caf56dbb Add logging function for der data and add logging to NSS installation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 595
diff changeset
701 log_certificate_der (pdir, dercert->data, dercert->len, false);
277
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
702 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
703 else
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
704 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
705 DEBUGPRINTF("Failed to remove certificate '%s' from '%s'!\n", cert_name, pdir);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
706 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
707 CERT_DestroyCertificate(cert);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
708 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
709 else
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
710 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
711 DEBUGPRINTF("Could not find Certificate '%s' in store '%s'.\n", cert_name, pdir);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
712 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
713 PK11_FreeSlot(pk11slot);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
714 NSS_Shutdown();
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
715 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
716 else
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
717 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
718 DEBUGPRINTF("Could not open nss certificate store in %s!\n", pdir);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
719 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
720 free(cert_name);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
721 return success;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
722 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
723
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
724 /**
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
725 * @brief Apply a function to a list of certificates and profiles
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
726 *
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
727 * The function must have the signature:
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
728 *
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
729 * bool function(char *pdir, SECItem der_cert)
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
730 *
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
731 * where pdir is the path of an profile and der_cert is an raw DER
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
732 * formatted certificate. The function must return true on success
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
733 * and false on failure.
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
734 *
625
2303caf56dbb Add logging function for der data and add logging to NSS installation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 595
diff changeset
735 * This function is intended for use with the import_cert and
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
736 * remove_cert functions.
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
737 *
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
738 * @param[in] fn the function to apply
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
739 * @param[inout] certs a secitem list holding the certificates
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
740 * the list will be change (emptied)!
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
741 * @param[in] pdirs the NULL terminated list of profile directories
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
742 * @returns true on success and false on failure
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
743 */
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
744 bool
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
745 apply_to_certs_and_profiles(bool fn(char *, SECItem *),
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
746 seciteml_t **certs, char **pdirs)
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
747 {
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
748 bool success = true;
280
6c4b3ff4a356 Fixed white space.
Sascha Wilde <wilde@intevation.de>
parents: 279
diff changeset
749
493
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
750 for (int i=0; pdirs[i] != NULL; i++)
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
751 {
493
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
752 seciteml_t *iter = *certs;
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
753 if (NSS_Initialize(pdirs[i], "", "", "secmod.db", 0) != SECSuccess)
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
754 {
493
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
755 DEBUGPRINTF("Could not open nss certificate store in %s!\n", pdirs[i]);
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
756 continue;
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
757 }
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
758
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
759 while (iter != NULL && iter->item != NULL)
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
760 {
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
761 SECItem *cert = iter->item;
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
762 if (! (*fn)(pdirs[i], cert))
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
763 success = false;
493
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
764 iter = iter->next;
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
765 }
493
48d7b956bd98 Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents: 489
diff changeset
766 NSS_Shutdown();
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
767 }
280
6c4b3ff4a356 Fixed white space.
Sascha Wilde <wilde@intevation.de>
parents: 279
diff changeset
768
564
f115da3645d5 Free secitem list after usage.
Andre Heinecke <aheinecke@intevation.de>
parents: 493
diff changeset
769 seciteml_free(certs);
f115da3645d5 Free secitem list after usage.
Andre Heinecke <aheinecke@intevation.de>
parents: 493
diff changeset
770
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
771 return success;
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
772 }
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
773
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
774 /**
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
775 * @brief Parse IPC commands from standard input.
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
776 *
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
777 * Reads command lines (R: and I:) from standard input and puts the
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
778 * certificates to process in two SECItem lists holding the
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
779 * certificates in DER format.
1053
78798d3af8f0 Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents: 1012
diff changeset
780 * @param[inout] stream from standard input
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
781 * @param[inout] install_list list of SECItems with certifiactes to install
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
782 * @param[inout] remove_list list of SECItems with certifiactes to remove
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
783 */
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
784 static void
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
785 parse_commands (FILE *stream,
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
786 seciteml_t **install_list, seciteml_t **remove_list)
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
787 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
788 char inpl[LINEBUFLEN];
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
789 size_t inpllen;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
790 bool parserr = true;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
791 SECItem secitem;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
792
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
793 while ( fgets(inpl, LINEBUFLEN, stream) != NULL )
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
794 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
795 inpllen = strnlen(inpl, LINEBUFLEN);
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
796 /* Validate input line:
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
797 * - must be (much) longer than 3 characters
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
798 * - must start with "*:"
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
799 */
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
800 if ((inpllen > 3) && (inpl[1] == ':'))
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
801 /* Now parse Input */
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
802 switch(inpl[0])
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
803 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
804 case 'R':
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
805 parserr = true;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
806 DEBUGPRINTF("Request to remove certificate: %s\n", &inpl[2]);
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
807 if (base64_to_secitem(&inpl[2], inpllen - 2, &secitem))
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
808 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
809 seciteml_push(remove_list, &secitem);
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
810 parserr = false;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
811 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
812 break;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
813 case 'I':
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
814 parserr = true;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
815 DEBUGPRINTF("Request to install certificate: %s\n", &inpl[2]);
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
816 if (base64_to_secitem(&inpl[2], inpllen - 2, &secitem))
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
817 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
818 seciteml_push(install_list, &secitem);
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
819 parserr = false;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
820 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
821 break;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
822 default:
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
823 parserr = true;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
824 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
825 else
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
826 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
827 parserr = true;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
828 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
829
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
830 if (parserr)
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
831 {
1060
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
832 ERRORPRINTF("FATAL: Invalid input: %s\n", inpl);
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
833 exit(ERR_MOZ_INVALID_INPUT);
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
834 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
835 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
836 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
837
1060
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
838 bool g_debug = false;
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
839
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
840 int
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
841 main (int argc, char **argv)
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
842 {
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
843 char **dbdirs;
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
844 seciteml_t *certs_to_remove = NULL;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
845 seciteml_t *certs_to_add = NULL;
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
846 FILE *input_stream;
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
847
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
848 switch (argc)
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
849 {
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
850 case 1:
322
e30c9fee111a Typo in debug output.
Sascha Wilde <wilde@intevation.de>
parents: 320
diff changeset
851 DEBUGPRINTF("Opening STDIN for input...\n");
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
852 input_stream = stdin;
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
853 break;
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
854 case 2:
1060
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
855 if (strcmp(argv[1], "--debug") == 0)
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
856 {
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
857 g_debug = true;
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
858 DEBUGPRINTF("Opening STDIN for input...\n");
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
859 input_stream = stdin;
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
860 break;
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
861 }
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
862 case 3:
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
863 DEBUGPRINTF("Opening %s for input...\n", argv[1]);
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
864 if ((input_stream = fopen(argv[1], "r")) == NULL)
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
865 {
1060
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
866 ERRORPRINTF ("FATAL: Could not open %s for reading!\n",
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
867 argv[1]);
317
46fd11699646 Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents: 315
diff changeset
868 exit_code = ERR_MOZ_FAILED_TO_OPEN_INPUT;
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
869 goto exit;
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
870 }
1060
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
871 if (argc == 3 && strcmp(argv[2], "--debug") == 0)
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
872 {
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
873 g_debug = true;
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
874 }
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
875 break;
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
876 default:
1060
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
877 ERRORPRINTF("FATAL: Wrong number of arguments!\n");
317
46fd11699646 Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents: 315
diff changeset
878 exit_code = ERR_MOZ_WRONG_ARGC;
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
879 goto exit;
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
880 }
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
881
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
882 dbdirs =
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
883 get_all_nssdb_dirs();
235
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
884
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
885 if (dbdirs != NULL)
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
886 {
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
887 parse_commands(input_stream, &certs_to_add, &certs_to_remove);
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
888
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
889 #ifdef DEBUGOUTPUT
284
a0c5eba8eb41 Added missing line breaks in debug output.
Sascha Wilde <wilde@intevation.de>
parents: 283
diff changeset
890 DEBUGPRINTF("OLD List of installed certs:\n");
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
891 for (int i=0; dbdirs[i] != NULL; i++)
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
892 DEBUG_nss_list_certs(dbdirs[i]);
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
893 #endif
263
1fa607af6332 Next baby step: we can import certificates!
Sascha Wilde <wilde@intevation.de>
parents: 261
diff changeset
894
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
895 if (! apply_to_certs_and_profiles(remove_cert, &certs_to_remove, dbdirs))
317
46fd11699646 Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents: 315
diff changeset
896 exit_code |= WARN_MOZ_COULD_NOT_REMOVE_CERT;
280
6c4b3ff4a356 Fixed white space.
Sascha Wilde <wilde@intevation.de>
parents: 279
diff changeset
897
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
898 if (! apply_to_certs_and_profiles(import_cert, &certs_to_add, dbdirs))
317
46fd11699646 Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents: 315
diff changeset
899 exit_code |= WARN_MOZ_COULD_NOT_ADD_CERT;
280
6c4b3ff4a356 Fixed white space.
Sascha Wilde <wilde@intevation.de>
parents: 279
diff changeset
900
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
901 #ifdef DEBUGOUTPUT
284
a0c5eba8eb41 Added missing line breaks in debug output.
Sascha Wilde <wilde@intevation.de>
parents: 283
diff changeset
902 DEBUGPRINTF("NEW List of installed certs:\n");
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
903 for (int i=0; dbdirs[i] != NULL; i++)
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
904 DEBUG_nss_list_certs(dbdirs[i]);
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
905 #endif
280
6c4b3ff4a356 Fixed white space.
Sascha Wilde <wilde@intevation.de>
parents: 279
diff changeset
906
989
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
907 #ifndef WIN32
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
908 if (is_elevated())
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
909 {
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
910 make_defaults_readable();
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
911 }
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
912 #endif
1cd1bfe82fc2 (issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 988
diff changeset
913
308
ab69d268b5c8 Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents: 284
diff changeset
914 strv_free(dbdirs);
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
915 }
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
916
905
698b6a9bd75e Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents: 625
diff changeset
917 fclose(input_stream);
315
b832231640ab Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents: 312
diff changeset
918
905
698b6a9bd75e Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents: 625
diff changeset
919 exit:
317
46fd11699646 Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents: 315
diff changeset
920 exit(exit_code);
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
921 }

http://wald.intevation.org/projects/trustbridge/