Mercurial > trustbridge
annotate cinst/mozilla.c @ 856:797aa8d9c785
(issue48) Fallback to HKEY_USERS on hive load failure
If the hive can not be loaded it might mean that the user
is currently logged on. In that case we can access his
registry via HKEY_USERS.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Thu, 31 Jul 2014 12:56:26 +0200 |
parents | 2303caf56dbb |
children | 698b6a9bd75e |
rev | line source |
---|---|
404 | 1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik |
2 * Software engineering by Intevation GmbH | |
3 * | |
4 * This file is Free Software under the GNU GPL (v>=2) | |
5 * and comes with ABSOLUTELY NO WARRANTY! | |
6 * See LICENSE.txt for details. | |
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 * |
238
dd417a2ff9cd
Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents:
235
diff
changeset
|
15 * I:<base64 DER econded certificate> |
dd417a2ff9cd
Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents:
235
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 |
dd417a2ff9cd
Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents:
235
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 * |
bc1e6732f43c
Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents:
44
diff
changeset
|
29 * 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
|
30 * 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
|
31 * executed. |
bc1e6732f43c
Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents:
44
diff
changeset
|
32 * |
238
dd417a2ff9cd
Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents:
235
diff
changeset
|
33 * 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
|
34 * 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
|
35 * may lead to errors. |
dd417a2ff9cd
Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents:
235
diff
changeset
|
36 * |
99
bc1e6732f43c
Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents:
44
diff
changeset
|
37 * 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
|
38 * as defined in errorcodes.h otherwise. |
bc1e6732f43c
Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents:
44
diff
changeset
|
39 * |
bc1e6732f43c
Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents:
44
diff
changeset
|
40 * 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
|
41 * 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
|
42 * with the profile name that it modified. |
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 */ |
bc1e6732f43c
Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents:
44
diff
changeset
|
45 |
235
0c4d65a7cd14
Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents:
232
diff
changeset
|
46 /** |
0c4d65a7cd14
Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents:
232
diff
changeset
|
47 * @brief Needs to eb defined to get strnlen() |
0c4d65a7cd14
Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents:
232
diff
changeset
|
48 */ |
0c4d65a7cd14
Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents:
232
diff
changeset
|
49 #define _POSIX_C_SOURCE 200809L |
0c4d65a7cd14
Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents:
232
diff
changeset
|
50 |
0c4d65a7cd14
Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents:
232
diff
changeset
|
51 /* REMOVEME: */ |
0c4d65a7cd14
Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents:
232
diff
changeset
|
52 #include <unistd.h> |
0c4d65a7cd14
Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents:
232
diff
changeset
|
53 |
269
f7471604bb31
Deletion of certificates implemented.
Sascha Wilde <wilde@intevation.de>
parents:
268
diff
changeset
|
54 #include <cert.h> |
f7471604bb31
Deletion of certificates implemented.
Sascha Wilde <wilde@intevation.de>
parents:
268
diff
changeset
|
55 #include <certdb.h> |
f7471604bb31
Deletion of certificates implemented.
Sascha Wilde <wilde@intevation.de>
parents:
268
diff
changeset
|
56 #include <certt.h> |
173
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
57 #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
|
58 #include <nss.h> |
689b94dd89a9
Wrote FindNSS to build against nss without pkg-config support (Windows).
Sascha Wilde <wilde@intevation.de>
parents:
223
diff
changeset
|
59 #include <pk11pub.h> |
119
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
60 #include <stdbool.h> |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
61 #include <stdio.h> |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
62 #include <stdlib.h> |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
63 #include <string.h> |
173
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
64 #include <sys/types.h> |
119
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
65 |
230
92b1e5ed2d5f
Cleanup and documentation in debugging macros.
Sascha Wilde <wilde@intevation.de>
parents:
229
diff
changeset
|
66 #define DEBUGPREFIX "MOZ-" |
252
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
246
diff
changeset
|
67 #include "logging.h" |
230
92b1e5ed2d5f
Cleanup and documentation in debugging macros.
Sascha Wilde <wilde@intevation.de>
parents:
229
diff
changeset
|
68 |
261
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
69 #include "certhelp.h" |
226
d7788db3bdde
Make locale includes distinguishable from system includes.
Sascha Wilde <wilde@intevation.de>
parents:
224
diff
changeset
|
70 #include "errorcodes.h" |
d7788db3bdde
Make locale includes distinguishable from system includes.
Sascha Wilde <wilde@intevation.de>
parents:
224
diff
changeset
|
71 #include "portpath.h" |
d7788db3bdde
Make locale includes distinguishable from system includes.
Sascha Wilde <wilde@intevation.de>
parents:
224
diff
changeset
|
72 #include "strhelp.h" |
244
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
73 #include "nss-secitemlist.h" |
228
19de529ce7fb
Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents:
227
diff
changeset
|
74 |
113
02ad0922c01f
Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents:
110
diff
changeset
|
75 #ifndef _WIN32 |
197
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
76 #define CONFDIRS ".mozilla", ".thunderbird" |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
77 #define NSSSHARED ".pki/nssdb" |
223
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
78 #define TARGET_LINUX 1 |
113
02ad0922c01f
Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents:
110
diff
changeset
|
79 #else |
197
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
80 #define CONFDIRS "Mozilla", "Thunderbird" |
311 | 81 #define NSSSHARED "" |
223
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
82 #define TARGET_LINUX 0 |
113
02ad0922c01f
Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents:
110
diff
changeset
|
83 #endif |
02ad0922c01f
Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents:
110
diff
changeset
|
84 |
229 | 85 /** |
86 * @brief Length of string buffers used | |
87 * | |
88 * The maximal length of input is defined as 9999 (+ terminating \0). | |
89 * We use it for other other input puffers besides the IPC input, too. | |
90 * (One size fits all). | |
91 */ | |
92 #define LINEBUFLEN 10000 | |
147
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
93 |
119
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
94 /** |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
95 * @brief Global Return Code |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
96 * |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
97 * 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
|
98 * 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
|
99 * 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
|
100 * ORed together. |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
101 */ |
317
46fd11699646
Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents:
315
diff
changeset
|
102 int exit_code = 0; |
44
b3e8e047bc2c
Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
103 |
b3e8e047bc2c
Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
104 /** |
194
d4e97c9b199f
Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents:
181
diff
changeset
|
105 * @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
|
106 * @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
|
107 * 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
|
108 * and thunderbird. |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
109 */ |
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
110 static char * |
194
d4e97c9b199f
Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents:
181
diff
changeset
|
111 get_conf_basedir() |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
112 { |
194
d4e97c9b199f
Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents:
181
diff
changeset
|
113 char *cdir, *envvar; |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
114 |
223
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
115 if (TARGET_LINUX) |
194
d4e97c9b199f
Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents:
181
diff
changeset
|
116 envvar = "HOME" ; |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
117 else |
194
d4e97c9b199f
Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents:
181
diff
changeset
|
118 envvar = "APPDATA"; |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
119 |
194
d4e97c9b199f
Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents:
181
diff
changeset
|
120 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
|
121 return cdir; |
d4e97c9b199f
Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents:
181
diff
changeset
|
122 else |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
123 { |
228
19de529ce7fb
Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents:
227
diff
changeset
|
124 DEBUGPRINTF("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
|
125 exit(ERR_MOZ_HOMELESS); |
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
126 } |
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
127 } |
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
128 |
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
129 /** |
119
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
130 * @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
|
131 * |
232 | 132 * Parse the profiles.ini and extract all profile paths from that. |
133 * The expected data is in the form: | |
134 * | |
135 * [Profile99] | |
136 * IsRelative=1 | |
137 * Path=Example/fooo.bar | |
138 * | |
139 * or | |
140 * [Profile0] | |
141 * IsRelative=0 | |
142 * Path=c:\foo\bar\baz | |
143 * | |
144 * Mozilla also accepts the ini file on Windows even if it is UTF-16 | |
145 * encoded but never writes UTF-16 on its own. So currently we ignore | |
146 * this special case. | |
44
b3e8e047bc2c
Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
147 * |
121
4bb5f295987b
Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents:
119
diff
changeset
|
148 * @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
|
149 * @return NULL terminated array of strings containing containing the |
b3e8e047bc2c
Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
150 * 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
|
151 * be freed by the caller. |
b3e8e047bc2c
Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
152 */ |
119
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
153 static char ** |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
154 get_profile_dirs (char *inifile_name) |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
155 { |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
156 char **dirs = NULL; |
147
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
157 char *inifile_dirname; |
119
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
158 FILE *inifile; |
147
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
159 char line[LINEBUFLEN]; |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
160 char *key; |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
161 char *value; |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
162 char *path = NULL; |
147
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
163 char *fqpath; |
119
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
164 bool inprofile = false; |
147
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
165 bool relative_path = false; |
44
b3e8e047bc2c
Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
166 |
119
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
167 if ((inifile = fopen(inifile_name, "r")) != NULL) |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
168 { |
228
19de529ce7fb
Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents:
227
diff
changeset
|
169 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
|
170 |
147
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
171 inifile_dirname = port_dirname(inifile_name); |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
172 while (fgets(line, LINEBUFLEN, inifile) != NULL) |
119
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
173 { |
147
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
174 /* Determine if we are in an profile section */ |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
175 if (str_starts_with(line, "[Profile")) |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
176 { |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
177 relative_path = false; |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
178 inprofile = true; |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
179 } |
119
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
180 else if (line[0] == '[') |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
181 inprofile = false; |
147
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
182 |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
183 /* If we are in a profile parse path related stuff */ |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
184 if (inprofile) |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
185 { |
157
a46a4b443410
Use strtok instead of strsep for portability.
Sascha Wilde <wilde@intevation.de>
parents:
147
diff
changeset
|
186 key = strtok(line, "="); |
a46a4b443410
Use strtok instead of strsep for portability.
Sascha Wilde <wilde@intevation.de>
parents:
147
diff
changeset
|
187 value = strtok(NULL, "="); |
147
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
188 str_trim(&value); |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
189 if (str_equal(key, "Path")) |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
190 { |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
191 if (relative_path) |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
192 xasprintf(&path, "%s/%s", inifile_dirname, value); |
147
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
193 else |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
194 xasprintf(&path, "%s", value); /* FIXME: LOOKS STUPID! */ |
147
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
195 if ((fqpath = port_realpath(path)) != NULL) |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
196 { |
228
19de529ce7fb
Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents:
227
diff
changeset
|
197 DEBUGPRINTF("Found profile path: '%s'\n", fqpath); |
147
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
198 strv_append(&dirs, fqpath, strlen(fqpath)); |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
199 free (fqpath); |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
200 } |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
201 else |
175
6fa0e12ae1d2
Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents:
174
diff
changeset
|
202 { |
228
19de529ce7fb
Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents:
227
diff
changeset
|
203 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
|
204 exit_code |= WARN_MOZ_PROFILE_DOES_NOT_EXIST; |
175
6fa0e12ae1d2
Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents:
174
diff
changeset
|
205 } |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
206 free(path); |
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 else if (str_equal(key, "IsRelative") && |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
209 str_starts_with(value, "1")) |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
210 relative_path = true; |
fc9af77b06b9
Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents:
130
diff
changeset
|
211 } |
119
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
212 } |
179
8fafd0fc2173
get_profile_dirs(): close filedescriptor again. (found by cppcheck)
Bernhard Reiter <bernhard@intevation.de>
parents:
177
diff
changeset
|
213 fclose(inifile); |
119
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
214 } |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
215 else |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
216 { |
228
19de529ce7fb
Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents:
227
diff
changeset
|
217 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
|
218 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
|
219 } |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
220 return dirs; |
24ca8e2ceecf
First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents:
113
diff
changeset
|
221 } |
44
b3e8e047bc2c
Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
222 |
173
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
223 /** |
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
224 * @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
|
225 * |
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
226 * 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
|
227 * 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
|
228 * |
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
229 * @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
|
230 * 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
|
231 * caller. |
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
232 */ |
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
233 static char ** |
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
234 get_profile_inis () |
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
235 { |
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
236 char **inis = NULL; |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
237 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
|
238 DIR *mozdir; |
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
239 struct dirent *mozdirent; |
194
d4e97c9b199f
Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents:
181
diff
changeset
|
240 char *confbase = get_conf_basedir(); |
197
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
241 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
|
242 |
197
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
243 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
|
244 { |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
245 xasprintf(&mozpath,"%s/%s", confbase, confdirs[i]); |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
246 if ((mozdir = opendir(mozpath)) != NULL) |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
247 { |
197
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
248 while ((mozdirent = readdir(mozdir)) != NULL) |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
249 { |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
250 xasprintf(&subpath, "%s/%s/%s", |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
251 confbase, |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
252 confdirs[i], |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
253 mozdirent->d_name); |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
254 if (port_isdir(subpath) |
197
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
255 && (strcmp(mozdirent->d_name, "..") != 0)) |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
256 { |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
257 xasprintf(&ppath, "%s/%s/%s/%s", |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
258 confbase, |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
259 confdirs[i], |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
260 mozdirent->d_name, |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
261 "profiles.ini"); |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
262 DEBUGPRINTF("checking for %s...\n", ppath); |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
263 if ((fqpath = port_realpath(ppath)) != NULL) |
197
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
264 { |
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
265 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
|
266 DEBUGPRINTF("Found mozilla ini file: '%s'\n", fqpath); |
197
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
267 free(fqpath); |
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
268 } |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
269 free(ppath); |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
270 } |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
271 free(subpath); |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
272 } |
197
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
273 closedir(mozdir); |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
274 } |
197
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
275 else |
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
276 { |
228
19de529ce7fb
Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents:
227
diff
changeset
|
277 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
|
278 } |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
279 free(mozpath); |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
280 } |
197
5d380b662198
Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents:
195
diff
changeset
|
281 if (inis == NULL) |
180
344b8a79ad2e
Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents:
177
diff
changeset
|
282 { |
228
19de529ce7fb
Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents:
227
diff
changeset
|
283 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
|
284 } |
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
285 return inis; |
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
286 } |
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
287 |
223
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
288 /** |
231 | 289 * @brief Collect all mozilla profile directories of current user. |
290 * @return NULL terminated array of strings containing the absolute | |
291 * path of the profile directories. The array needs to be freed by the | |
292 * caller. | |
293 */ | |
294 static char** | |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
295 get_all_nssdb_dirs() |
231 | 296 { |
297 char **mozinis, **pdirs; | |
298 char **alldirs = NULL; | |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
299 /* Search Mozilla/Firefox/Thunderbird profiles */ |
231 | 300 if ((mozinis = get_profile_inis()) != NULL) |
301 { | |
302 for (int i=0; mozinis[i] != NULL; i++) | |
303 { | |
304 pdirs = | |
305 get_profile_dirs(mozinis[i]); | |
306 if (pdirs != NULL) | |
307 { | |
308 for (int i=0; pdirs[i] != NULL; i++) | |
309 { | |
310 strv_append(&alldirs, pdirs[i], strlen(pdirs[i])); | |
311 } | |
312 strv_free(pdirs); | |
313 } | |
314 } | |
315 strv_free(mozinis); | |
316 } | |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
317 /* 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
|
318 if (TARGET_LINUX) |
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
319 { |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
320 char *path, *fqpath, *sqlpath; |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
321 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
|
322 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
|
323 { |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
324 xasprintf(&sqlpath, "sql:%s", fqpath); |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
325 strv_append(&alldirs, sqlpath, strlen(sqlpath)); |
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
326 free(sqlpath); |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
327 free(fqpath); |
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
328 } |
320
1628615d904e
Replaced snprintf and static buffers with xasprintf.
Sascha Wilde <wilde@intevation.de>
parents:
317
diff
changeset
|
329 free(path); |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
330 } |
231 | 331 return alldirs; |
332 } | |
333 | |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
334 #ifdef DEBUGOUTPUT |
231 | 335 /** |
223
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
336 * @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
|
337 * @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
|
338 */ |
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
339 static void |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
340 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
|
341 { |
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
342 CERTCertList *list; |
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
343 CERTCertListNode *node; |
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
344 char *name; |
224
689b94dd89a9
Wrote FindNSS to build against nss without pkg-config support (Windows).
Sascha Wilde <wilde@intevation.de>
parents:
223
diff
changeset
|
345 |
223
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
346 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
|
347 == SECSuccess) |
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
348 { |
283
fb9e14f4b4c9
Show which store is listed in debug certificate listings.
Sascha Wilde <wilde@intevation.de>
parents:
281
diff
changeset
|
349 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
|
350 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
|
351 for (node = CERT_LIST_HEAD(list); !CERT_LIST_END(node, list); |
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
352 node = CERT_LIST_NEXT(node)) { |
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
353 name = node->appData; |
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
354 |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
355 DEBUGPRINTF("Found certificate \"%s\"\n", name); |
223
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
356 } |
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
357 CERT_DestroyCertList(list); |
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
358 NSS_Shutdown(); |
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
359 } |
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
360 else |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
361 { |
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
362 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
|
363 } |
223
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
364 } |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
365 #endif |
223
d29997e09177
NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents:
197
diff
changeset
|
366 |
261
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
367 /** |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
368 * @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
|
369 * |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
370 * Should be freed by caller. |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
371 * @param[in] secitemp ponts to an SECItem holding the DER certificate. |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
372 * @retruns a string of the from "CN of Subject - O of Subject" |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
373 */ |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
374 static char * |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
375 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
|
376 { |
eab288779e07
Added debug output in NSS_cert_name on failure
Andre Heinecke <andre.heinecke@intevation.de>
parents:
332
diff
changeset
|
377 char *cn_str, *o_str, *name; |
261
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
378 size_t name_len; |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
379 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
|
380 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
|
381 if (!cn_str || !o_str) |
81a205fc651e
Do not exit on error
Andre Heinecke <aheinecke@intevation.de>
parents:
322
diff
changeset
|
382 { |
81a205fc651e
Do not exit on error
Andre Heinecke <aheinecke@intevation.de>
parents:
322
diff
changeset
|
383 DEBUGPRINTF("FATAL: Could not parse certificate!"); |
81a205fc651e
Do not exit on error
Andre Heinecke <aheinecke@intevation.de>
parents:
322
diff
changeset
|
384 exit(ERR_INVALID_CERT); |
81a205fc651e
Do not exit on error
Andre Heinecke <aheinecke@intevation.de>
parents:
322
diff
changeset
|
385 } |
261
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
386 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
|
387 name = (char *)xmalloc(name_len); |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
388 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
|
389 free(cn_str); |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
390 free(o_str); |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
391 return name; |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
392 } |
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
393 |
276
ea9c5bbc6496
Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents:
269
diff
changeset
|
394 /** |
ea9c5bbc6496
Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents:
269
diff
changeset
|
395 * @brief Convert a base64 encoded DER certificate to SECItem |
ea9c5bbc6496
Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents:
269
diff
changeset
|
396 * @param[in] b64 pointer to the base64 encoded certificate |
ea9c5bbc6496
Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents:
269
diff
changeset
|
397 * @param[in] b64len length of the base64 encoded certificate |
ea9c5bbc6496
Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents:
269
diff
changeset
|
398 * @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
|
399 * raw DER certifiacte. |
ea9c5bbc6496
Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents:
269
diff
changeset
|
400 * @returns true on success and false on failure |
ea9c5bbc6496
Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents:
269
diff
changeset
|
401 */ |
244
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
402 static bool |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
403 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
|
404 { |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
405 unsigned char *dercert = NULL; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
406 size_t dercertlen; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
407 |
245
fbd74e2370de
Error out, when base64 decode results in empty data.
Sascha Wilde <wilde@intevation.de>
parents:
244
diff
changeset
|
408 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
|
409 b64, b64len) == 0) && |
fbd74e2370de
Error out, when base64 decode results in empty data.
Sascha Wilde <wilde@intevation.de>
parents:
244
diff
changeset
|
410 (dercertlen > 0)) |
244
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
411 { |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
412 secitem->data = dercert; |
246
1efe494c3d2b
Explicit tyoe cast to fix warning on 64bit Jessie.
Sascha Wilde <wilde@intevation.de>
parents:
245
diff
changeset
|
413 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
|
414 return true; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
415 } |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
416 else |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
417 { |
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
418 DEBUGPRINTF("Base64 decode failed for: %s\n", b64); |
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
419 } |
261
7707191ddb01
New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents:
252
diff
changeset
|
420 return false; |
244
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
421 } |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
422 |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
423 /** |
277
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
424 * @brief Store DER certificate in mozilla store. |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
425 * @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
|
426 * store to manipulate. |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
427 * @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
|
428 * to install |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
429 * @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
|
430 */ |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
431 static bool |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
432 import_cert(char *pdir, SECItem *dercert) |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
433 { |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
434 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
|
435 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
|
436 CERTCertificate *cert = NULL; |
277
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
437 bool success = false; |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
438 char *cert_name = nss_cert_name(dercert); |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
439 |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
440 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
|
441 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
|
442 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
|
443 (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
|
444 trust = (CERTCertTrust *)xmalloc(sizeof(CERTCertTrust)); |
595
2c4eb4435a40
Set trust also for S/MIME and Codesigning
Andre Heinecke <aheinecke@intevation.de>
parents:
564
diff
changeset
|
445 CERT_DecodeTrustString(trust, "C,C,C"); |
493
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
446 if ((PK11_ImportCert(pk11slot, cert, CK_INVALID_HANDLE, |
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
447 cert_name, PR_FALSE) |
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
448 == SECSuccess) && |
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
449 (CERT_ChangeCertTrust(CERT_GetDefaultCertDB(), cert, trust) |
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
450 == SECSuccess)) |
277
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
451 { |
625
2303caf56dbb
Add logging function for der data and add logging to NSS installation
Andre Heinecke <andre.heinecke@intevation.de>
parents:
595
diff
changeset
|
452 log_certificate_der (pdir, dercert->data, dercert->len, true); |
493
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
453 success = true; |
277
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
454 } |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
455 else |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
456 { |
493
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
457 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
|
458 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
|
459 } |
493
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
460 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
|
461 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
|
462 PK11_FreeSlot(pk11slot); |
277
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
463 |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
464 free(cert_name); |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
465 return success; |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
466 } |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
467 |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
468 /** |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
469 * @brief Remove DER certificate from mozilla store. |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
470 * @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
|
471 * store to manipulate. |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
472 * @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
|
473 * to remove |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
474 * @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
|
475 */ |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
476 static bool |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
477 remove_cert(char *pdir, SECItem *dercert) |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
478 { |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
479 PK11SlotInfo *pk11slot = NULL; |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
480 bool success = false; |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
481 char *cert_name = nss_cert_name(dercert); |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
482 CERTCertificate *cert = NULL; |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
483 |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
484 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
|
485 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
|
486 { |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
487 pk11slot = PK11_GetInternalKeySlot(); |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
488 cert = PK11_FindCertFromDERCertItem(pk11slot, |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
489 dercert, NULL); |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
490 if (cert != NULL) |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
491 { |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
492 if (SEC_DeletePermCertificate(cert) == SECSuccess) |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
493 { |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
494 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
|
495 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
|
496 } |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
497 else |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
498 { |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
499 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
|
500 } |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
501 CERT_DestroyCertificate(cert); |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
502 } |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
503 else |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
504 { |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
505 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
|
506 } |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
507 PK11_FreeSlot(pk11slot); |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
508 NSS_Shutdown(); |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
509 } |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
510 else |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
511 { |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
512 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
|
513 } |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
514 free(cert_name); |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
515 return success; |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
516 } |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
517 |
22408d797c92
Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents:
276
diff
changeset
|
518 /** |
279
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
519 * @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
|
520 * |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
521 * The function must have the signature: |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
522 * |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
523 * 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
|
524 * |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
525 * 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
|
526 * 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
|
527 * and false on failure. |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
528 * |
625
2303caf56dbb
Add logging function for der data and add logging to NSS installation
Andre Heinecke <andre.heinecke@intevation.de>
parents:
595
diff
changeset
|
529 * 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
|
530 * remove_cert functions. |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
531 * |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
532 * @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
|
533 * @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
|
534 * the list will be change (emptied)! |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
535 * @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
|
536 * @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
|
537 */ |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
538 bool |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
539 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
|
540 seciteml_t **certs, char **pdirs) |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
541 { |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
542 bool success = true; |
280 | 543 |
493
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
544 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
|
545 { |
493
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
546 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
|
547 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
|
548 { |
493
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
549 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
|
550 continue; |
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
551 } |
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
552 |
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
553 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
|
554 { |
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
555 SECItem *cert = iter->item; |
279
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
556 if (! (*fn)(pdirs[i], cert)) |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
557 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
|
558 iter = iter->next; |
279
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
559 } |
493
48d7b956bd98
Change loop order of installation to only call NSS_Initialize once per db
Andre Heinecke <aheinecke@intevation.de>
parents:
489
diff
changeset
|
560 NSS_Shutdown(); |
279
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
561 } |
280 | 562 |
564
f115da3645d5
Free secitem list after usage.
Andre Heinecke <aheinecke@intevation.de>
parents:
493
diff
changeset
|
563 seciteml_free(certs); |
f115da3645d5
Free secitem list after usage.
Andre Heinecke <aheinecke@intevation.de>
parents:
493
diff
changeset
|
564 |
279
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
565 return success; |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
566 } |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
567 |
cb5f082e90c5
Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents:
278
diff
changeset
|
568 /** |
244
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
569 * @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
|
570 * |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
571 * 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
|
572 * 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
|
573 * certificates in DER format. |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
574 * @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
|
575 * @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
|
576 */ |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
577 static void |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
578 parse_commands (FILE *stream, |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
579 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
|
580 { |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
581 char inpl[LINEBUFLEN]; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
582 size_t inpllen; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
583 bool parserr = true; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
584 SECItem secitem; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
585 |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
586 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
|
587 { |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
588 inpllen = strnlen(inpl, LINEBUFLEN); |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
589 /* Validate input line: |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
590 * - 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
|
591 * - must start with "*:" |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
592 */ |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
593 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
|
594 /* Now parse Input */ |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
595 switch(inpl[0]) |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
596 { |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
597 case 'R': |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
598 parserr = true; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
599 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
|
600 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
|
601 { |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
602 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
|
603 parserr = false; |
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 break; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
606 case 'I': |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
607 parserr = true; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
608 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
|
609 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
|
610 { |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
611 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
|
612 parserr = false; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
613 } |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
614 break; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
615 default: |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
616 parserr = true; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
617 } |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
618 else |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
619 { |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
620 parserr = true; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
621 } |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
622 |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
623 if (parserr) |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
624 { |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
625 DEBUGPRINTF("FATAL: Invalid input: %s\n", inpl); |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
626 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
|
627 } |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
628 } |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
629 } |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
630 |
173
a9e4454dee97
Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents:
157
diff
changeset
|
631 |
113
02ad0922c01f
Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents:
110
diff
changeset
|
632 int |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
633 main (int argc, char **argv) |
113
02ad0922c01f
Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents:
110
diff
changeset
|
634 { |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
635 char **dbdirs; |
244
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
636 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
|
637 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
|
638 FILE *input_stream; |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
639 |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
640 switch (argc) |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
641 { |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
642 case 1: |
322 | 643 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
|
644 input_stream = stdin; |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
645 break; |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
646 case 2: |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
647 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
|
648 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
|
649 { |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
650 DEBUGPRINTF("FATAL: Could not open %s for reading!\n", |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
651 argv[1]); |
317
46fd11699646
Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents:
315
diff
changeset
|
652 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
|
653 goto exit; |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
654 } |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
655 break; |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
656 default: |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
657 DEBUGPRINTF("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
|
658 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
|
659 goto exit; |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
660 } |
244
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
661 |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
662 dbdirs = |
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
663 get_all_nssdb_dirs(); |
235
0c4d65a7cd14
Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents:
232
diff
changeset
|
664 |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
665 if (dbdirs != NULL) |
231 | 666 { |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
667 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
|
668 |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
669 #ifdef DEBUGOUTPUT |
284
a0c5eba8eb41
Added missing line breaks in debug output.
Sascha Wilde <wilde@intevation.de>
parents:
283
diff
changeset
|
670 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
|
671 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
|
672 DEBUG_nss_list_certs(dbdirs[i]); |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
673 #endif |
263
1fa607af6332
Next baby step: we can import certificates!
Sascha Wilde <wilde@intevation.de>
parents:
261
diff
changeset
|
674 |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
675 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
|
676 exit_code |= WARN_MOZ_COULD_NOT_REMOVE_CERT; |
280 | 677 |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
678 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
|
679 exit_code |= WARN_MOZ_COULD_NOT_ADD_CERT; |
280 | 680 |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
681 #ifdef DEBUGOUTPUT |
284
a0c5eba8eb41
Added missing line breaks in debug output.
Sascha Wilde <wilde@intevation.de>
parents:
283
diff
changeset
|
682 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
|
683 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
|
684 DEBUG_nss_list_certs(dbdirs[i]); |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
685 #endif |
280 | 686 |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
687 strv_free(dbdirs); |
231 | 688 } |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
689 |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
690 fclose(input_stream); |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
691 |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
692 exit: |
317
46fd11699646
Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents:
315
diff
changeset
|
693 exit(exit_code); |
44
b3e8e047bc2c
Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
694 } |