Mercurial > trustbridge
annotate cinst/mozilla.c @ 1070:f110a3f6e387
(issue114) Fine tune ACL propagation
using mkdir_p the ACL of the parent directories would
propagate to all subdirectories and objects in the directory.
Now we only use ACL propagation in the last directory to make
sure that files we might create in that directory inherit the
correct (resitricted) ACL
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Wed, 10 Sep 2014 16:41:36 +0200 |
parents | 317ee9dc4684 |
children | 1e429faf7c84 |
rev | line source |
---|---|
404 | 1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik |
2 * Software engineering by Intevation GmbH | |
3 * | |
4 * This file is Free Software under the GNU GPL (v>=2) | |
5 * and comes with ABSOLUTELY NO WARRANTY! | |
6 * See LICENSE.txt for details. | |
7 */ | |
121
4bb5f295987b
Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents:
119
diff
changeset
|
8 /** |
4bb5f295987b
Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents:
119
diff
changeset
|
9 * @file |
4bb5f295987b
Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents:
119
diff
changeset
|
10 * @brief Mozilla installation process |
99
bc1e6732f43c
Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents:
44
diff
changeset
|
11 * |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
12 * Reads from a file given on command line or stdin a list of |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
13 * instructions in the form: |
99
bc1e6732f43c
Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents:
44
diff
changeset
|
14 * |
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 |
1060
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
838 bool g_debug = false; |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
839 |
113
02ad0922c01f
Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents:
110
diff
changeset
|
840 int |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
841 main (int argc, char **argv) |
113
02ad0922c01f
Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents:
110
diff
changeset
|
842 { |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
843 char **dbdirs; |
244
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
844 seciteml_t *certs_to_remove = NULL; |
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
845 seciteml_t *certs_to_add = NULL; |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
846 FILE *input_stream; |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
847 |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
848 switch (argc) |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
849 { |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
850 case 1: |
322 | 851 DEBUGPRINTF("Opening STDIN for input...\n"); |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
852 input_stream = stdin; |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
853 break; |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
854 case 2: |
1060
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
855 if (strcmp(argv[1], "--debug") == 0) |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
856 { |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
857 g_debug = true; |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
858 DEBUGPRINTF("Opening STDIN for input...\n"); |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
859 input_stream = stdin; |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
860 break; |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
861 } |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
862 case 3: |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
863 DEBUGPRINTF("Opening %s for input...\n", argv[1]); |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
864 if ((input_stream = fopen(argv[1], "r")) == NULL) |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
865 { |
1060
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
866 ERRORPRINTF ("FATAL: Could not open %s for reading!\n", |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
867 argv[1]); |
317
46fd11699646
Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents:
315
diff
changeset
|
868 exit_code = ERR_MOZ_FAILED_TO_OPEN_INPUT; |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
869 goto exit; |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
870 } |
1060
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
871 if (argc == 3 && strcmp(argv[2], "--debug") == 0) |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
872 { |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
873 g_debug = true; |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
874 } |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
875 break; |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
876 default: |
1060
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
877 ERRORPRINTF("FATAL: Wrong number of arguments!\n"); |
317
46fd11699646
Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents:
315
diff
changeset
|
878 exit_code = ERR_MOZ_WRONG_ARGC; |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
879 goto exit; |
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
880 } |
244
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
881 |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
882 dbdirs = |
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
883 get_all_nssdb_dirs(); |
235
0c4d65a7cd14
Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents:
232
diff
changeset
|
884 |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
885 if (dbdirs != NULL) |
231 | 886 { |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
887 parse_commands(input_stream, &certs_to_add, &certs_to_remove); |
244
0145d2401f46
Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents:
243
diff
changeset
|
888 |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
889 #ifdef DEBUGOUTPUT |
284
a0c5eba8eb41
Added missing line breaks in debug output.
Sascha Wilde <wilde@intevation.de>
parents:
283
diff
changeset
|
890 DEBUGPRINTF("OLD List of installed certs:\n"); |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
891 for (int i=0; dbdirs[i] != NULL; i++) |
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
892 DEBUG_nss_list_certs(dbdirs[i]); |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
893 #endif |
263
1fa607af6332
Next baby step: we can import certificates!
Sascha Wilde <wilde@intevation.de>
parents:
261
diff
changeset
|
894 |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
895 if (! apply_to_certs_and_profiles(remove_cert, &certs_to_remove, dbdirs)) |
317
46fd11699646
Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents:
315
diff
changeset
|
896 exit_code |= WARN_MOZ_COULD_NOT_REMOVE_CERT; |
280 | 897 |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
898 if (! apply_to_certs_and_profiles(import_cert, &certs_to_add, dbdirs)) |
317
46fd11699646
Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents:
315
diff
changeset
|
899 exit_code |= WARN_MOZ_COULD_NOT_ADD_CERT; |
280 | 900 |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
901 #ifdef DEBUGOUTPUT |
284
a0c5eba8eb41
Added missing line breaks in debug output.
Sascha Wilde <wilde@intevation.de>
parents:
283
diff
changeset
|
902 DEBUGPRINTF("NEW List of installed certs:\n"); |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
903 for (int i=0; dbdirs[i] != NULL; i++) |
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
904 DEBUG_nss_list_certs(dbdirs[i]); |
281
0f73fe4230c1
Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents:
280
diff
changeset
|
905 #endif |
280 | 906 |
989
1cd1bfe82fc2
(issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
988
diff
changeset
|
907 #ifndef WIN32 |
1cd1bfe82fc2
(issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
988
diff
changeset
|
908 if (is_elevated()) |
1cd1bfe82fc2
(issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
988
diff
changeset
|
909 { |
1cd1bfe82fc2
(issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
988
diff
changeset
|
910 make_defaults_readable(); |
1cd1bfe82fc2
(issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
988
diff
changeset
|
911 } |
1cd1bfe82fc2
(issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
988
diff
changeset
|
912 #endif |
1cd1bfe82fc2
(issue86) Fix Firefox / Thunderbird default profile path and make created files readable.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
988
diff
changeset
|
913 |
308
ab69d268b5c8
Add NSS shared DB on Linux to stores operated on.
Sascha Wilde <wilde@intevation.de>
parents:
284
diff
changeset
|
914 strv_free(dbdirs); |
231 | 915 } |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
916 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
625
diff
changeset
|
917 fclose(input_stream); |
315
b832231640ab
Read from file instead of stdin, if given.
Sascha Wilde <wilde@intevation.de>
parents:
312
diff
changeset
|
918 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
625
diff
changeset
|
919 exit: |
317
46fd11699646
Renamed exit code from return_code to exit_code.
Sascha Wilde <wilde@intevation.de>
parents:
315
diff
changeset
|
920 exit(exit_code); |
44
b3e8e047bc2c
Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
921 } |