annotate cinst/mozilla.c @ 289:9ad00a3255f4

Change cinst from stdin input to use arguments. As we have to execute this process on Windows over the shell a stdin / stdout communication is not really possible without some major hacks. So you now have to supply an instructions file and the path to the certificatelist as arguments when this process is called
author Andre Heinecke <aheinecke@intevation.de>
date Wed, 02 Apr 2014 13:52:02 +0000
parents a0c5eba8eb41
children ab69d268b5c8
rev   line source
121
4bb5f295987b Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents: 119
diff changeset
1 /**
4bb5f295987b Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents: 119
diff changeset
2 * @file
4bb5f295987b Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents: 119
diff changeset
3 * @brief Mozilla installation process
99
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
4 *
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
5 * Reads from stdin a list of instructions in the form:
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
6 *
238
dd417a2ff9cd Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents: 235
diff changeset
7 * I:<base64 DER econded certificate>
dd417a2ff9cd Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents: 235
diff changeset
8 * R:<base64 DER econded certificate>
99
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
9 * ...
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
10 *
238
dd417a2ff9cd Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents: 235
diff changeset
11 * 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
12 * 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
13 *
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
14 * 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
15 * 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
16 * the databases.
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 * 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
19 * 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
20 *
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
21 * 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
22 * 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
23 * executed.
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
24 *
238
dd417a2ff9cd Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents: 235
diff changeset
25 * 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
26 * 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
27 * may lead to errors.
dd417a2ff9cd Specifiy unspecified behavior if there is an install and
Andre Heinecke <aheinecke@intevation.de>
parents: 235
diff changeset
28 *
99
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
29 * 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
30 * as defined in errorcodes.h otherwise.
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
31 *
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
32 * 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
33 * 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
34 * with the profile name that it modified.
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
35 *
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
36 */
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
37
235
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
38 /**
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
39 * @brief Needs to eb defined to get strnlen()
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
40 */
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
41 #define _POSIX_C_SOURCE 200809L
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
42
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
43 /* REMOVEME: */
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
44 #include <unistd.h>
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
45
269
f7471604bb31 Deletion of certificates implemented.
Sascha Wilde <wilde@intevation.de>
parents: 268
diff changeset
46 #include <cert.h>
f7471604bb31 Deletion of certificates implemented.
Sascha Wilde <wilde@intevation.de>
parents: 268
diff changeset
47 #include <certdb.h>
f7471604bb31 Deletion of certificates implemented.
Sascha Wilde <wilde@intevation.de>
parents: 268
diff changeset
48 #include <certt.h>
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
49 #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
50 #include <nss.h>
689b94dd89a9 Wrote FindNSS to build against nss without pkg-config support (Windows).
Sascha Wilde <wilde@intevation.de>
parents: 223
diff changeset
51 #include <pk11pub.h>
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
52 #include <stdbool.h>
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
53 #include <stdio.h>
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
54 #include <stdlib.h>
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
55 #include <string.h>
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
56 #include <sys/types.h>
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
57
230
92b1e5ed2d5f Cleanup and documentation in debugging macros.
Sascha Wilde <wilde@intevation.de>
parents: 229
diff changeset
58 #define DEBUGPREFIX "MOZ-"
252
bd7fb50078b4 Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents: 246
diff changeset
59 #include "logging.h"
230
92b1e5ed2d5f Cleanup and documentation in debugging macros.
Sascha Wilde <wilde@intevation.de>
parents: 229
diff changeset
60
261
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
61 #include "certhelp.h"
226
d7788db3bdde Make locale includes distinguishable from system includes.
Sascha Wilde <wilde@intevation.de>
parents: 224
diff changeset
62 #include "errorcodes.h"
d7788db3bdde Make locale includes distinguishable from system includes.
Sascha Wilde <wilde@intevation.de>
parents: 224
diff changeset
63 #include "portpath.h"
d7788db3bdde Make locale includes distinguishable from system includes.
Sascha Wilde <wilde@intevation.de>
parents: 224
diff changeset
64 #include "strhelp.h"
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
65 #include "nss-secitemlist.h"
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
66
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
67 #ifndef _WIN32
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
68 #define CONFDIRS ".mozilla", ".thunderbird"
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
69 #define TARGET_LINUX 1
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
70 #else
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
71 #define CONFDIRS "Mozilla", "Thunderbird"
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
72 #define TARGET_LINUX 0
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
73 #endif
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
74
229
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
75 /**
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
76 * @brief Length of string buffers used
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
77 *
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
78 * The maximal length of input is defined as 9999 (+ terminating \0).
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
79 * 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
80 * (One size fits all).
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
81 */
e99e39d72af2 Adjusted LINEBUFLEN.
Sascha Wilde <wilde@intevation.de>
parents: 228
diff changeset
82 #define LINEBUFLEN 10000
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
83
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
84 /**
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
85 * @brief Global Return Code
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
86 *
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
87 * 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
88 * 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
89 * 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
90 * ORed together.
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
91 */
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
92 int return_code = 0;
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
93
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
94 /**
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
95 * @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
96 * @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
97 * 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
98 * and thunderbird.
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
99 */
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
100 static char *
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
101 get_conf_basedir()
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
102 {
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
103 char *cdir, *envvar;
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
104
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
105 if (TARGET_LINUX)
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
106 envvar = "HOME" ;
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
107 else
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
108 envvar = "APPDATA";
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
109
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
110 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
111 return cdir;
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
112 else
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
113 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
114 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
115 exit(ERR_MOZ_HOMELESS);
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
116 }
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
117 }
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
118
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
119 /**
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
120 * @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
121 *
232
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
122 * Parse the profiles.ini and extract all profile paths from that.
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
123 * The expected data is in the form:
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
124 *
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
125 * [Profile99]
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
126 * IsRelative=1
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
127 * Path=Example/fooo.bar
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
128 *
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
129 * or
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
130 * [Profile0]
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
131 * IsRelative=0
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
132 * Path=c:\foo\bar\baz
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
133 *
774e944c395b Cleand up doku.
Sascha Wilde <wilde@intevation.de>
parents: 231
diff changeset
134 * 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
135 * 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
136 * this special case.
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
137 *
121
4bb5f295987b Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents: 119
diff changeset
138 * @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
139 * @return NULL terminated array of strings containing containing the
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
140 * 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
141 * be freed by the caller.
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
142 */
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
143 static char **
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
144 get_profile_dirs (char *inifile_name)
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
145 {
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
146 char **dirs = NULL;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
147 char *inifile_dirname;
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
148 FILE *inifile;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
149 char line[LINEBUFLEN];
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
150 char *key;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
151 char *value;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
152 char path[LINEBUFLEN];
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
153 char *fqpath;
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
154 bool inprofile = false;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
155 bool relative_path = false;
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
156
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
157 if ((inifile = fopen(inifile_name, "r")) != NULL)
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
158 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
159 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
160
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
161 inifile_dirname = port_dirname(inifile_name);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
162 while (fgets(line, LINEBUFLEN, inifile) != NULL)
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
163 {
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
164 /* Determine if we are in an profile section */
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
165 if (str_starts_with(line, "[Profile"))
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
166 {
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
167 relative_path = false;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
168 inprofile = true;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
169 }
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
170 else if (line[0] == '[')
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
171 inprofile = false;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
172
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
173 /* If we are in a profile parse path related stuff */
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
174 if (inprofile)
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
175 {
157
a46a4b443410 Use strtok instead of strsep for portability.
Sascha Wilde <wilde@intevation.de>
parents: 147
diff changeset
176 key = strtok(line, "=");
a46a4b443410 Use strtok instead of strsep for portability.
Sascha Wilde <wilde@intevation.de>
parents: 147
diff changeset
177 value = strtok(NULL, "=");
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
178 str_trim(&value);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
179 if (str_equal(key, "Path"))
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
180 {
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
181 if (relative_path)
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
182 snprintf(path, LINEBUFLEN, "%s/%s", inifile_dirname, value);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
183 else
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
184 strncpy(path, value, LINEBUFLEN);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
185 if ((fqpath = port_realpath(path)) != NULL)
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
186 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
187 DEBUGPRINTF("Found profile path: '%s'\n", fqpath);
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
188 strv_append(&dirs, fqpath, strlen(fqpath));
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
189 free (fqpath);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
190 }
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
191 else
175
6fa0e12ae1d2 Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents: 174
diff changeset
192 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
193 DEBUGPRINTF("WARN! Non existent profile path: '%s'\n", path);
175
6fa0e12ae1d2 Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents: 174
diff changeset
194 return_code |= WARN_MOZ_PROFILE_DOES_NOT_EXIST;
6fa0e12ae1d2 Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents: 174
diff changeset
195 }
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
196 }
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
197 else if (str_equal(key, "IsRelative") &&
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
198 str_starts_with(value, "1"))
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
199 relative_path = true;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
200 }
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
201 }
179
8fafd0fc2173 get_profile_dirs(): close filedescriptor again. (found by cppcheck)
Bernhard Reiter <bernhard@intevation.de>
parents: 177
diff changeset
202 fclose(inifile);
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
203 }
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
204 else
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
205 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
206 DEBUGPRINTF("WARN! Could not open ini file: '%s'\n", inifile_name);
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
207 return_code |= WARN_MOZ_FAILED_TO_OPEN_INI;
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
208 }
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
209 return dirs;
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
210 }
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
211
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
212 /**
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
213 * @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
214 *
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
215 * 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
216 * 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
217 *
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
218 * @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
219 * 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
220 * caller.
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
221 */
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
222 static char **
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
223 get_profile_inis ()
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
224 {
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
225 char **inis = NULL;
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
226 char path[LINEBUFLEN];
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
227 char *fqpath;
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
228 DIR *mozdir;
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
229 struct dirent *mozdirent;
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
230 char *confbase = get_conf_basedir();
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
231 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
232
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
233 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
234 {
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
235 snprintf(path, LINEBUFLEN, "%s/%s",
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
236 confbase,
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
237 confdirs[i]);
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
238 if ((mozdir = opendir(path)) != NULL)
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
239 {
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
240 while ((mozdirent = readdir(mozdir)) != NULL)
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
241 {
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
242 snprintf(path, LINEBUFLEN, "%s/%s/%s",
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
243 confbase,
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
244 confdirs[i],
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
245 mozdirent->d_name);
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
246 if (port_isdir(path)
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
247 && (strcmp(mozdirent->d_name, "..") != 0))
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
248 {
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
249 snprintf(path, LINEBUFLEN, "%s/%s/%s/%s",
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
250 confbase,
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
251 confdirs[i],
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
252 mozdirent->d_name,
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
253 "profiles.ini");
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
254 DEBUGPRINTF("checking for %s...\n", path);
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
255 if ((fqpath = port_realpath(path)) != NULL)
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
256 {
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
257 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
258 DEBUGPRINTF("Found mozilla ini file: '%s'\n", fqpath);
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
259 free(fqpath);
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
260 }
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
261 }
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
262 }
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
263 closedir(mozdir);
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 else
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
266 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
267 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
268 }
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
269 }
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
270 if (inis == NULL)
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
271 {
228
19de529ce7fb Moved debug prefix to macro and added component specific prefix.
Sascha Wilde <wilde@intevation.de>
parents: 227
diff changeset
272 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
273 }
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
274 return inis;
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
275 }
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
276
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
277 /**
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
278 * @brief Collect all mozilla profile directories of current user.
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
279 * @return NULL terminated array of strings containing the absolute
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
280 * path of the profile directories. The array needs to be freed by the
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
281 * caller.
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
282 */
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
283 static char**
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
284 get_all_profile_dirs()
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
285 {
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
286 char **mozinis, **pdirs;
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
287 char **alldirs = NULL;
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
288 if ((mozinis = get_profile_inis()) != NULL)
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
289 {
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
290 for (int i=0; mozinis[i] != NULL; i++)
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
291 {
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
292 pdirs =
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
293 get_profile_dirs(mozinis[i]);
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
294 if (pdirs != NULL)
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
295 {
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
296 for (int i=0; pdirs[i] != NULL; i++)
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
297 {
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
298 strv_append(&alldirs, pdirs[i], strlen(pdirs[i]));
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
299 }
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
300 strv_free(pdirs);
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
301 }
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
302 }
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
303 strv_free(mozinis);
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
304 }
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
305 return alldirs;
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
306 }
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
307
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
308 #ifdef DEBUGOUTPUT
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
309 /**
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
310 * @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
311 * @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
312 */
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
313 static void
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
314 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
315 {
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
316 CERTCertList *list;
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
317 CERTCertListNode *node;
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
318 char *name;
224
689b94dd89a9 Wrote FindNSS to build against nss without pkg-config support (Windows).
Sascha Wilde <wilde@intevation.de>
parents: 223
diff changeset
319
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
320 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
321 == SECSuccess)
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
322 {
283
fb9e14f4b4c9 Show which store is listed in debug certificate listings.
Sascha Wilde <wilde@intevation.de>
parents: 281
diff changeset
323 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
324 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
325 for (node = CERT_LIST_HEAD(list); !CERT_LIST_END(node, list);
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
326 node = CERT_LIST_NEXT(node)) {
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
327 name = node->appData;
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
328
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
329 DEBUGPRINTF("Found certificate \"%s\"\n", name);
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
330 }
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
331 CERT_DestroyCertList(list);
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
332 NSS_Shutdown();
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
333 }
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
334 else
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
335 {
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
336 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
337 }
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
338 }
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
339 #endif
223
d29997e09177 NSS first Blood. Added code to list certs in found stores.
Sascha Wilde <wilde@intevation.de>
parents: 197
diff changeset
340
261
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
341 /**
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
342 * @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
343 *
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
344 * Should be freed by caller.
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
345 * @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
346 * @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
347 */
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
348 static char *
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
349 nss_cert_name(SECItem *secitemp)
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
350 { char *cn_str, *o_str, *name;
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
351 size_t name_len;
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
352 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
353 o_str = x509_parse_subject(secitemp->data, secitemp->len, CERT_OID_O);
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
354 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
355 name = (char *)xmalloc(name_len);
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
356 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
357 free(cn_str);
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
358 free(o_str);
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
359 return name;
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
360 }
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
361
276
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
362 /**
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
363 * @brief Convert a base64 encoded DER certificate to SECItem
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
364 * @param[in] b64 pointer to the base64 encoded certificate
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
365 * @param[in] b64len length of the base64 encoded certificate
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
366 * @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
367 * raw DER certifiacte.
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
368 * @returns true on success and false on failure
ea9c5bbc6496 Added missing function documentation.
Sascha Wilde <wilde@intevation.de>
parents: 269
diff changeset
369 */
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
370 static bool
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
371 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
372 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
373 unsigned char *dercert = NULL;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
374 size_t dercertlen;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
375
245
fbd74e2370de Error out, when base64 decode results in empty data.
Sascha Wilde <wilde@intevation.de>
parents: 244
diff changeset
376 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
377 b64, b64len) == 0) &&
fbd74e2370de Error out, when base64 decode results in empty data.
Sascha Wilde <wilde@intevation.de>
parents: 244
diff changeset
378 (dercertlen > 0))
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
379 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
380 secitem->data = dercert;
246
1efe494c3d2b Explicit tyoe cast to fix warning on 64bit Jessie.
Sascha Wilde <wilde@intevation.de>
parents: 245
diff changeset
381 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
382 return true;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
383 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
384 else
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
385 {
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
386 DEBUGPRINTF("Base64 decode failed for: %s\n", b64);
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
387 }
261
7707191ddb01 New function to generate certificate name.
Sascha Wilde <wilde@intevation.de>
parents: 252
diff changeset
388 return false;
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
389 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
390
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
391 /**
277
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
392 * @brief Store DER certificate in mozilla store.
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
393 * @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
394 * store to manipulate.
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
395 * @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
396 * to install
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
397 * @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
398 */
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
399 static bool
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
400 import_cert(char *pdir, SECItem *dercert)
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
401 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
402 PK11SlotInfo *pk11slot = NULL;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
403 bool success = false;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
404 char *cert_name = nss_cert_name(dercert);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
405
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
406 DEBUGPRINTF("INSTALLING cert: '%s' to: %s\n", cert_name, pdir);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
407 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
408 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
409 pk11slot = PK11_GetInternalKeySlot();
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
410 if (PK11_ImportDERCert(pk11slot, dercert, CK_INVALID_HANDLE,
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
411 cert_name, PR_FALSE)
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
412 == SECSuccess)
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
413 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
414 success = true;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
415 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
416 else
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
417 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
418 DEBUGPRINTF("Failed to install certificate '%s' to '%s'!\n", cert_name, pdir);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
419 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
420 PK11_FreeSlot(pk11slot);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
421 NSS_Shutdown();
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
422 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
423 else
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
424 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
425 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
426 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
427
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
428 free(cert_name);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
429 return success;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
430 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
431
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
432 /**
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
433 * @brief Remove DER certificate from mozilla store.
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
434 * @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
435 * store to manipulate.
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
436 * @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
437 * to remove
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
438 * @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
439 */
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
440 static bool
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
441 remove_cert(char *pdir, SECItem *dercert)
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
442 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
443 PK11SlotInfo *pk11slot = NULL;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
444 bool success = false;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
445 char *cert_name = nss_cert_name(dercert);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
446 CERTCertificate *cert = NULL;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
447
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
448 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
449 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
450 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
451 pk11slot = PK11_GetInternalKeySlot();
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
452 cert = PK11_FindCertFromDERCertItem(pk11slot,
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
453 dercert, NULL);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
454 if (cert != NULL)
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
455 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
456 if (SEC_DeletePermCertificate(cert) == SECSuccess)
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
457 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
458 success = true;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
459 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
460 else
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
461 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
462 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
463 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
464 CERT_DestroyCertificate(cert);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
465 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
466 else
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
467 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
468 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
469 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
470 PK11_FreeSlot(pk11slot);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
471 NSS_Shutdown();
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
472 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
473 else
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
474 {
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
475 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
476 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
477 free(cert_name);
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
478 return success;
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
479 }
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
480
22408d797c92 Factor out functions for cert install/remove.
Sascha Wilde <wilde@intevation.de>
parents: 276
diff changeset
481 /**
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
482 * @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
483 *
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
484 * The function must have the signature:
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
485 *
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
486 * 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
487 *
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
488 * 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
489 * 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
490 * and false on failure.
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
491 *
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
492 * This function is intended wor use with the import_cert and
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
493 * remove_cert functions.
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
494 *
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
495 * @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
496 * @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
497 * the list will be change (emptied)!
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
498 * @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
499 * @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
500 */
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
501 bool
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
502 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
503 seciteml_t **certs, char **pdirs)
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
504 {
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
505 SECItem *cert;
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
506 bool success = true;
280
6c4b3ff4a356 Fixed white space.
Sascha Wilde <wilde@intevation.de>
parents: 279
diff changeset
507
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
508 while ((cert = seciteml_pop(certs)) != NULL)
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
509 {
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
510 for (int i=0; pdirs[i] != NULL; i++)
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
511 {
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
512 if (! (*fn)(pdirs[i], cert))
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
513 success = false;
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
514 }
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
515 free(cert->data);
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
516 free(cert);
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
517 }
280
6c4b3ff4a356 Fixed white space.
Sascha Wilde <wilde@intevation.de>
parents: 279
diff changeset
518
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
519 return success;
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
520 }
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
521
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
522 /**
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
523 * @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
524 *
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
525 * 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
526 * 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
527 * certificates in DER format.
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
528 * @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
529 * @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
530 */
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
531 static void
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
532 parse_commands (seciteml_t **install_list, seciteml_t **remove_list)
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
533 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
534 char inpl[LINEBUFLEN];
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
535 size_t inpllen;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
536 bool parserr = true;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
537 SECItem secitem;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
538
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
539 while ( fgets(inpl, LINEBUFLEN, stdin) != NULL )
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
540 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
541 inpllen = strnlen(inpl, LINEBUFLEN);
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
542 /* Validate input line:
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
543 * - 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
544 * - must start with "*:"
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
545 */
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
546 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
547 /* Now parse Input */
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
548 switch(inpl[0])
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
549 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
550 case 'R':
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
551 parserr = true;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
552 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
553 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
554 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
555 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
556 parserr = false;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
557 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
558 break;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
559 case 'I':
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
560 parserr = true;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
561 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
562 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
563 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
564 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
565 parserr = false;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
566 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
567 break;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
568 default:
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
569 parserr = true;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
570 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
571 else
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
572 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
573 parserr = true;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
574 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
575
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
576 if (parserr)
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
577 {
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
578 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
579 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
580 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
581 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
582 }
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
583
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
584
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
585 int
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
586 main ()
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
587 {
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
588 char **pdirs;
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
589 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
590 seciteml_t *certs_to_add = NULL;
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
591
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
592 pdirs =
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
593 get_all_profile_dirs();
235
0c4d65a7cd14 Started to write input parser.
Sascha Wilde <wilde@intevation.de>
parents: 232
diff changeset
594
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
595 if (pdirs != NULL)
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
596 {
244
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
597 parse_commands(&certs_to_add, &certs_to_remove);
0145d2401f46 Input parser works. Added debug output for collected cert data.
Sascha Wilde <wilde@intevation.de>
parents: 243
diff changeset
598
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
599 #ifdef DEBUGOUTPUT
284
a0c5eba8eb41 Added missing line breaks in debug output.
Sascha Wilde <wilde@intevation.de>
parents: 283
diff changeset
600 DEBUGPRINTF("OLD List of installed certs:\n");
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
601 for (int i=0; pdirs[i] != NULL; i++)
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
602 DEBUG_nss_list_certs(pdirs[i]);
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
603 #endif
263
1fa607af6332 Next baby step: we can import certificates!
Sascha Wilde <wilde@intevation.de>
parents: 261
diff changeset
604
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
605 if (! apply_to_certs_and_profiles(remove_cert, &certs_to_remove, pdirs))
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
606 return_code |= WARN_MOZ_COULD_NOT_REMOVE_CERT;
280
6c4b3ff4a356 Fixed white space.
Sascha Wilde <wilde@intevation.de>
parents: 279
diff changeset
607
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
608 if (! apply_to_certs_and_profiles(import_cert, &certs_to_add, pdirs))
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
609 return_code |= WARN_MOZ_COULD_NOT_ADD_CERT;
280
6c4b3ff4a356 Fixed white space.
Sascha Wilde <wilde@intevation.de>
parents: 279
diff changeset
610
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
611 #ifdef DEBUGOUTPUT
284
a0c5eba8eb41 Added missing line breaks in debug output.
Sascha Wilde <wilde@intevation.de>
parents: 283
diff changeset
612 DEBUGPRINTF("NEW List of installed certs:\n");
279
cb5f082e90c5 Factor out the iteration over profiles and certs.
Sascha Wilde <wilde@intevation.de>
parents: 278
diff changeset
613 for (int i=0; pdirs[i] != NULL; i++)
281
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
614 DEBUG_nss_list_certs(pdirs[i]);
0f73fe4230c1 Fixed and optimized production build.
Sascha Wilde <wilde@intevation.de>
parents: 280
diff changeset
615 #endif
280
6c4b3ff4a356 Fixed white space.
Sascha Wilde <wilde@intevation.de>
parents: 279
diff changeset
616
231
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
617 strv_free(pdirs);
c342b93c5bd1 Refactoring.
Sascha Wilde <wilde@intevation.de>
parents: 230
diff changeset
618 }
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
619 exit(return_code);
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
620 }

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