annotate cinst/mozilla.c @ 214:aab742690bee

Fix check for selected items and wait for bytes written. According to the documentation closing the write channel should suffice. But in testing it did not sent over everything.
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 26 Mar 2014 17:17:19 +0100
parents 5d380b662198
children d29997e09177
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 *
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
7 * I:<base64 DER econded certificate>\r\n
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
8 * R:<base64 DER econded certificate>\r\n
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 *
130
ffb20e76e7d0 Fix max line length documentation
Andre Heinecke <aheinecke@intevation.de>
parents: 121
diff changeset
11 * The maximum size of an input line is 9999 characters
99
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
12 * (including the \r\n) at the end of the line.
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 *
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
25 * 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
26 * as defined in errorcodes.h otherwise.
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
27 *
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
28 * 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
29 * 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
30 * with the profile name that it modified.
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 */
bc1e6732f43c Add specification and some cleanups
Andre Heinecke <aheinecke@intevation.de>
parents: 44
diff changeset
33
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
34 /* @brief IniParser for mozilla profiles.ini
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
35 *
110
0c8ea71a89cd fixed whitespace.
Sascha Wilde <wilde@intevation.de>
parents: 99
diff changeset
36 * Parse data to find values formed in
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
37 *
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
38 * [Profile99]
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
39 * IsRelative=1
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
40 * Path=Profiles/fooo.bar
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
41 *
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
42 * or
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
43 * [Profile0]
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
44 * IsRelative=0
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
45 * Path=c:\foo\bar\baz
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
46 *
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
47 * Mozilla also accepts the ini file on Windows even if it is UTF-16
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
48 * encoded.
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
49 * */
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
50
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
51 #include <dirent.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
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
58 #include <debug.h>
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
59 #include <errorcodes.h>
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
60 #include <portpath.h>
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
61 #include <strhelp.h>
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
62
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
63 #ifndef _WIN32
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
64 #define CONFDIRS ".mozilla", ".thunderbird"
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
65 #define LINUX 1
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
66 #else
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
67 #define CONFDIRS "Mozilla", "Thunderbird"
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
68 #define LINUX 0
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
69 #endif
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
70
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
71 #define LINEBUFLEN 1000
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
72
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
73 /**
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
74 * @brief Global Return Code
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
75 *
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
76 * 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
77 * 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
78 * 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
79 * ORed together.
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
80 */
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
81 int return_code = 0;
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
82
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
83 /**
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
84 * @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
85 * @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
86 * 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
87 * and thunderbird.
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
88 */
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
89 static char *
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
90 get_conf_basedir()
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
91 {
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
92 char *cdir, *envvar;
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
93
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
94 if (LINUX)
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
95 envvar = "HOME" ;
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
96 else
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
97 envvar = "APPDATA";
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
98
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
99 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
100 return cdir;
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
101 else
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 DEBUGFPRINT("DEBUG: 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
104 exit(ERR_MOZ_HOMELESS);
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
105 }
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
106 }
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
107
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
108 /**
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
109 * @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
110 *
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
111 * Read the profiles.ini and extract all profile paths from that.
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
112 *
121
4bb5f295987b Fix doxygen documentation.
Sascha Wilde <wilde@intevation.de>
parents: 119
diff changeset
113 * @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
114 * @return NULL terminated array of strings containing containing the
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
115 * 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
116 * be freed by the caller.
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
117 */
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
118 static char **
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
119 get_profile_dirs (char *inifile_name)
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
120 {
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
121 char **dirs = NULL;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
122 char *inifile_dirname;
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
123 FILE *inifile;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
124 char line[LINEBUFLEN];
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
125 char *key;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
126 char *value;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
127 char path[LINEBUFLEN];
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
128 char *fqpath;
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
129 bool inprofile = false;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
130 bool relative_path = false;
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
131
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
132 if ((inifile = fopen(inifile_name, "r")) != NULL)
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
133 {
175
6fa0e12ae1d2 Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents: 174
diff changeset
134 DEBUGFPRINT("DEBUG: Searching for profile paths in: '%s'\n", inifile_name);
6fa0e12ae1d2 Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents: 174
diff changeset
135
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
136 inifile_dirname = port_dirname(inifile_name);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
137 while (fgets(line, LINEBUFLEN, inifile) != NULL)
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
138 {
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
139 /* Determine if we are in an profile section */
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
140 if (str_starts_with(line, "[Profile"))
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
141 {
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
142 relative_path = false;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
143 inprofile = true;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
144 }
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
145 else if (line[0] == '[')
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
146 inprofile = false;
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
148 /* If we are in a profile parse path related stuff */
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
149 if (inprofile)
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
150 {
157
a46a4b443410 Use strtok instead of strsep for portability.
Sascha Wilde <wilde@intevation.de>
parents: 147
diff changeset
151 key = strtok(line, "=");
a46a4b443410 Use strtok instead of strsep for portability.
Sascha Wilde <wilde@intevation.de>
parents: 147
diff changeset
152 value = strtok(NULL, "=");
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
153 str_trim(&value);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
154 if (str_equal(key, "Path"))
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
155 {
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
156 if (relative_path)
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
157 snprintf(path, LINEBUFLEN, "%s/%s", inifile_dirname, value);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
158 else
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
159 strncpy(path, value, LINEBUFLEN);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
160 if ((fqpath = port_realpath(path)) != NULL)
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
161 {
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
162 DEBUGFPRINT("DEBUG: Found profile path: '%s'\n", fqpath);
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
163 strv_append(&dirs, fqpath, strlen(fqpath));
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
164 free (fqpath);
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
165 }
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
166 else
175
6fa0e12ae1d2 Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents: 174
diff changeset
167 {
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
168 DEBUGFPRINT("DEBUG: WARN! Non existent profile path: '%s'\n", path);
175
6fa0e12ae1d2 Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents: 174
diff changeset
169 return_code |= WARN_MOZ_PROFILE_DOES_NOT_EXIST;
6fa0e12ae1d2 Added more debug output.
Sascha Wilde <wilde@intevation.de>
parents: 174
diff changeset
170 }
147
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
171 }
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
172 else if (str_equal(key, "IsRelative") &&
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
173 str_starts_with(value, "1"))
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
174 relative_path = true;
fc9af77b06b9 Completed profile.ini parser.
Sascha Wilde <wilde@intevation.de>
parents: 130
diff changeset
175 }
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
176 }
179
8fafd0fc2173 get_profile_dirs(): close filedescriptor again. (found by cppcheck)
Bernhard Reiter <bernhard@intevation.de>
parents: 177
diff changeset
177 fclose(inifile);
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
178 }
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
179 else
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
180 {
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
181 DEBUGFPRINT("DEBUG: 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
182 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
183 }
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
184 return dirs;
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
185 }
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
186
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
187 /**
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
188 * @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
189 *
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
190 * 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
191 * 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
192 *
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
193 * @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
194 * 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
195 * caller.
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
196 */
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
197 static char **
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
198 get_profile_inis ()
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
199 {
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
200 char **inis = NULL;
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
201 char path[LINEBUFLEN];
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
202 char *fqpath;
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
203 DIR *mozdir;
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
204 struct dirent *mozdirent;
194
d4e97c9b199f Use %APPDATA% as config bse dir on windows. Much simpler.
Sascha Wilde <wilde@intevation.de>
parents: 181
diff changeset
205 char *confbase = get_conf_basedir();
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
206 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
207
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
208 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
209 {
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
210 snprintf(path, LINEBUFLEN, "%s/%s",
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
211 confbase,
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
212 confdirs[i]);
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
213 if ((mozdir = opendir(path)) != NULL)
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
214 {
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
215 while ((mozdirent = readdir(mozdir)) != NULL)
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
216 {
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
217 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
218 confbase,
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
219 confdirs[i],
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
220 mozdirent->d_name);
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
221 if (port_isdir(path)
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
222 && (strcmp(mozdirent->d_name, "..") != 0))
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
223 {
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
224 snprintf(path, LINEBUFLEN, "%s/%s/%s/%s",
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
225 confbase,
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
226 confdirs[i],
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
227 mozdirent->d_name,
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
228 "profiles.ini");
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
229 DEBUGFPRINT("DEBUG: checking for %s...\n", path);
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
230 if ((fqpath = port_realpath(path)) != NULL)
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
231 {
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
232 strv_append(&inis, fqpath, strlen(fqpath));
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
233 DEBUGFPRINT("DEBUG: Found mozilla ini file: '%s'\n", fqpath);
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
234 free(fqpath);
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
235 }
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
236 }
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
237 }
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
238 closedir(mozdir);
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 else
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
241 {
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
242 DEBUGFPRINT("DEBUG: Could not open %s/%s\n", confbase, confdirs[i]);
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
243 }
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
244 }
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
245 if (inis == NULL)
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
246 {
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
247 DEBUGFPRINT("DEBUG: No ini files found - will do nothing!\n");
180
344b8a79ad2e Implemented detection profile paths for Windows Vista/7.
Sascha Wilde <wilde@intevation.de>
parents: 177
diff changeset
248 exit(WARN_MOZ_NO_PROFILES);
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
249 }
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
250 return inis;
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
251 }
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
252
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
253
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
254 int
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
255 main ()
113
02ad0922c01f Start over (only leave comments).
Sascha Wilde <wilde@intevation.de>
parents: 110
diff changeset
256 {
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
257 int x = 0;
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
258 int y = 0;
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
259 char **mozinis, **pdirs;
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
260 if ((mozinis = get_profile_inis()) != NULL)
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
261 while (mozinis[y] != NULL)
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
262 {
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
263 pdirs =
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
264 get_profile_dirs(mozinis[y++]);
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
265 if (pdirs != NULL)
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
266 {
197
5d380b662198 Search for thunderbird profiles, too.
Sascha Wilde <wilde@intevation.de>
parents: 195
diff changeset
267 x = 0;
173
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
268 while (pdirs[x] != NULL)
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
269 puts(pdirs[x++]);
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
270 strv_free(pdirs);
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
271 }
a9e4454dee97 Implemented searching $HOME/.mozilla for profiles.ini on Linux.
Sascha Wilde <wilde@intevation.de>
parents: 157
diff changeset
272 }
119
24ca8e2ceecf First step of simple mozilla ini parser
Sascha Wilde <wilde@intevation.de>
parents: 113
diff changeset
273 exit(return_code);
44
b3e8e047bc2c Commit first scratch of mozilla installer
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
274 }

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