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