annotate cinst/mozilla.c @ 975:b3695a3399de

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

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