Mercurial > trustbridge
annotate cinst/certificate-installer.c @ 1395:a2574a029322
Fix Base 64 signature size calculation.
If the signature byte size is not equally dividable
by three the base 64 encoding needs three additional bytes.
The value is now fixed to avoid such errors in the future.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 26 Jan 2015 13:17:32 +0100 |
parents | 12ed0b72e9f5 |
children |
rev | line source |
---|---|
404 | 1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik |
2 * Software engineering by Intevation GmbH | |
3 * | |
4 * This file is Free Software under the GNU GPL (v>=2) | |
5 * and comes with ABSOLUTELY NO WARRANTY! | |
6 * See LICENSE.txt for details. | |
7 */ | |
137
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
126
diff
changeset
|
8 /** |
1176
c8f698ca6355
(issue128) Rename cinst to trustbridge-certificate-installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1162
diff
changeset
|
9 * @file certificate-installer.c |
c8f698ca6355
(issue128) Rename cinst to trustbridge-certificate-installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1162
diff
changeset
|
10 * @brief Main entry point for the certificate install process. |
25
92108a2120f1
Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
11 * |
1176
c8f698ca6355
(issue128) Rename cinst to trustbridge-certificate-installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1162
diff
changeset
|
12 * The certificate installer process may or may not be run with elevated |
25
92108a2120f1
Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
13 * privileges. When run with elevated privileges this |
92108a2120f1
Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
14 * process will modify system wide certificate stores. |
92108a2120f1
Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
15 * Otherwise only the users certificate stores are modified. |
92108a2120f1
Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
16 * |
1053
78798d3af8f0
Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents:
944
diff
changeset
|
17 * The first parameter to this process should be list=\<file_name\> |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
18 * of the certificate list to work on. The second parameter should |
1053
78798d3af8f0
Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents:
944
diff
changeset
|
19 * be choices=\<choices_file_name\>|uninstall |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
20 * |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
21 * choices_file_name should be the absolute path to an |
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
22 * choices file formatted as: |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
23 * |
1053
78798d3af8f0
Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents:
944
diff
changeset
|
24 * I:\<certificate\><BR> |
78798d3af8f0
Fixed doxygen build warnings.
Emanuel Schuetze <emanuel@intevation.de>
parents:
944
diff
changeset
|
25 * R:\<certificate\> |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
26 * |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
27 * Line breaks can be system dependent in the Choices file. |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
28 * |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
29 * It will only execute the choices if the |
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
30 * I and R choices are also part of the signed |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
31 * certificate list. The signature is validated with the |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
32 * built in key. |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
33 * |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
34 * The special instruction "uninstall" will cause the installer |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
35 * to remove all certificates (Even those marked with I) that |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
36 * are part of the list. |
25
92108a2120f1
Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
37 * |
1060
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
38 * For more verbose debug output add --debug to the call. |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
39 * |
25
92108a2120f1
Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
40 **/ |
92108a2120f1
Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
41 #include <stdio.h> |
64
fb9f78f7ab2f
Improve error handling free memory before exiting. Include line endings in Marker lines
Andre Heinecke <aheinecke@intevation.de>
parents:
60
diff
changeset
|
42 #include <stdlib.h> |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
43 #include <string.h> |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
44 #include <assert.h> |
148
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
45 #include <stdbool.h> |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
46 |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
47 #include "strhelp.h" |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
48 #include "listutil.h" |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
49 #include "logging.h" |
60
6acb1dae6185
Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents:
59
diff
changeset
|
50 #include "errorcodes.h" |
137
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
126
diff
changeset
|
51 #include "windowsstore.h" |
302
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
52 #include "nssstore.h" |
1157
fd7d04bb37cb
(issue36) Add encoding aware port_fopen function and use it
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1072
diff
changeset
|
53 #include "portpath.h" |
125
24fb90ef8f6a
Fix install_certificates_win.
Andre Heinecke <aheinecke@intevation.de>
parents:
116
diff
changeset
|
54 |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
55 /* The certificate list + choices may only be so long as |
68
8ffbb48528ae
Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents:
65
diff
changeset
|
56 * twice the accepted certificatelist size */ |
8ffbb48528ae
Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents:
65
diff
changeset
|
57 #define MAX_INPUT_SIZE MAX_LINE_LENGTH * MAX_LINES * 2 |
8ffbb48528ae
Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents:
65
diff
changeset
|
58 |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
59 /* @brief Read stdin into data structures. |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
60 * |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
61 * Reads choices from an input file into the to_install |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
62 * and to_remove buffers. |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
63 * |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
64 * Lines starting with I: are treated as install choices. |
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
65 * Lines starting with R: are treated as remove choices. |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
66 * Other lines are ignored. |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
67 * |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
68 * Terminates in OOM conditions. |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
69 * |
60
6acb1dae6185
Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents:
59
diff
changeset
|
70 * The caller needs to free the memory allocated by this function |
6acb1dae6185
Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents:
59
diff
changeset
|
71 * even when an error is returned. |
6acb1dae6185
Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents:
59
diff
changeset
|
72 * |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
73 * @param[in] file_name absolute path to the choices file. |
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
74 * @param[out] to_install strv of installation choices or NULL |
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
75 * @param[out] to_remove strv of remove choices or NULL |
148
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
76 * |
60
6acb1dae6185
Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents:
59
diff
changeset
|
77 * @returns: 0 on success. An error code otherwise. |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
78 */ |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
79 static int |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
80 read_choices_file (char *file_name, char ***to_install, |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
667
diff
changeset
|
81 char ***to_remove) |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
82 { |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
83 int lines_read = 0; |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
84 char buf[MAX_LINE_LENGTH + 2]; |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
85 FILE *f = NULL; |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
86 long file_size; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
87 |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
88 if (*to_install || *to_remove) |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
89 { |
626
f595fcbe3e76
Replace "normal printfs" with DEBUG / ERROR printf macros
Andre Heinecke <andre.heinecke@intevation.de>
parents:
501
diff
changeset
|
90 ERRORPRINTF ("Error invalid parameters.\n"); |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
91 return -1; |
90
899fcddb92d0
Check parameters in readInput
Andre Heinecke <aheinecke@intevation.de>
parents:
68
diff
changeset
|
92 } |
899fcddb92d0
Check parameters in readInput
Andre Heinecke <aheinecke@intevation.de>
parents:
68
diff
changeset
|
93 |
1157
fd7d04bb37cb
(issue36) Add encoding aware port_fopen function and use it
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1072
diff
changeset
|
94 f = port_fopen_rb(file_name, false); |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
95 if (f == NULL) |
667
fb69aef056ea
Be more verbose in error logging
Andre Heinecke <andre.heinecke@intevation.de>
parents:
626
diff
changeset
|
96 { |
fb69aef056ea
Be more verbose in error logging
Andre Heinecke <andre.heinecke@intevation.de>
parents:
626
diff
changeset
|
97 ERRORPRINTF ("Failed to open file: %s\n", file_name); |
fb69aef056ea
Be more verbose in error logging
Andre Heinecke <andre.heinecke@intevation.de>
parents:
626
diff
changeset
|
98 return ERR_NO_INSTRUCTIONS; |
fb69aef056ea
Be more verbose in error logging
Andre Heinecke <andre.heinecke@intevation.de>
parents:
626
diff
changeset
|
99 } |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
100 |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
101 fseek (f, 0, SEEK_END); |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
102 file_size = ftell (f); |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
103 if (file_size <= 0) |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
104 { |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
105 fclose (f); |
667
fb69aef056ea
Be more verbose in error logging
Andre Heinecke <andre.heinecke@intevation.de>
parents:
626
diff
changeset
|
106 ERRORPRINTF ("File size error: %s\n", file_name); |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
107 return ERR_NO_INSTRUCTIONS; |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
108 } |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
109 |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
110 fseek (f, 0, SEEK_SET); |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
111 |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
112 if (file_size + 1 == 0) |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
113 { |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
114 fclose (f); |
667
fb69aef056ea
Be more verbose in error logging
Andre Heinecke <andre.heinecke@intevation.de>
parents:
626
diff
changeset
|
115 ERRORPRINTF ("File seek error: %s\n", file_name); |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
116 return ERR_INVALID_INSTRUCTIONS; |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
117 } |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
118 |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
119 while (fgets (buf, MAX_LINE_LENGTH + 1, f) ) |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
120 { |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
121 size_t len = strlen (buf); /* fgets ensures buf is terminated */ |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
122 if (len <= 3) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
123 { |
626
f595fcbe3e76
Replace "normal printfs" with DEBUG / ERROR printf macros
Andre Heinecke <andre.heinecke@intevation.de>
parents:
501
diff
changeset
|
124 ERRORPRINTF ("Line too short.\n"); |
339
5fa58979cb3a
Fix ressource leak found by cppcheck
Andre Heinecke <aheinecke@intevation.de>
parents:
325
diff
changeset
|
125 fclose (f); |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
126 return ERR_INVALID_INPUT; |
91
80ab2168760f
Also add output size handling to str_append_str
Andre Heinecke <aheinecke@intevation.de>
parents:
90
diff
changeset
|
127 } |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
128 if (lines_read++ > MAX_LINES) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
129 { |
626
f595fcbe3e76
Replace "normal printfs" with DEBUG / ERROR printf macros
Andre Heinecke <andre.heinecke@intevation.de>
parents:
501
diff
changeset
|
130 ERRORPRINTF ("Too many lines\n"); |
339
5fa58979cb3a
Fix ressource leak found by cppcheck
Andre Heinecke <aheinecke@intevation.de>
parents:
325
diff
changeset
|
131 fclose (f); |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
132 return ERR_TOO_MUCH_INPUT; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
133 } |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
134 if (*buf == 'I') |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
135 { |
291
5ab445e6a4da
Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents:
290
diff
changeset
|
136 char *trimmed = buf+2; |
5ab445e6a4da
Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents:
290
diff
changeset
|
137 /* Remove leading I: and trailing whitespace */ |
5ab445e6a4da
Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents:
290
diff
changeset
|
138 str_trim(&trimmed); |
5ab445e6a4da
Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents:
290
diff
changeset
|
139 strv_append (to_install, trimmed, strlen(trimmed)); |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
140 continue; |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
141 } |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
142 if (*buf == 'R') |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
143 { |
291
5ab445e6a4da
Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents:
290
diff
changeset
|
144 char *trimmed = buf+2; |
5ab445e6a4da
Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents:
290
diff
changeset
|
145 /* Remove leading R: and trailing whitespace */ |
5ab445e6a4da
Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents:
290
diff
changeset
|
146 str_trim(&trimmed); |
5ab445e6a4da
Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents:
290
diff
changeset
|
147 strv_append (to_remove, trimmed, strlen(trimmed)); |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
148 continue; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
149 } |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
150 } |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
151 |
339
5fa58979cb3a
Fix ressource leak found by cppcheck
Andre Heinecke <aheinecke@intevation.de>
parents:
325
diff
changeset
|
152 fclose (f); |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
153 return 0; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
154 } |
148
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
155 |
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
156 /** @brief Check that the insturctions match to the list |
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
157 * |
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
158 * Only certificates part of the certificate_list are allowed |
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
159 * for installation. |
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
160 * |
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
161 * @param[in] all_certs strv of all valid certificates in a list |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
162 * @param[in] to_validate strv of choices |
148
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
163 * |
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
164 * @returns 0 on success, an error otherwise |
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
165 */ |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
166 int |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
167 validate_choices (char **all_certs, char **to_validate) |
64
fb9f78f7ab2f
Improve error handling free memory before exiting. Include line endings in Marker lines
Andre Heinecke <aheinecke@intevation.de>
parents:
60
diff
changeset
|
168 { |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
169 int i = 0, j = 0; |
148
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
170 |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
171 if (!all_certs || strv_length (all_certs) < 1) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
172 { |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
173 /* Invalid parameters */ |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
174 return -1; |
148
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
175 } |
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
176 |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
177 if (to_validate == NULL) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
178 { |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
179 /* Nothing is valid */ |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
180 return 0; |
148
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
181 } |
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
182 |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
183 for (i = 0; to_validate[i]; i++) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
184 { |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
185 bool found = false; |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
186 for (j = 0; all_certs[j]; j++) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
187 { |
291
5ab445e6a4da
Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents:
290
diff
changeset
|
188 if (strncmp (to_validate[i], all_certs[j], MAX_LINE_LENGTH) == |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
189 0) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
190 { |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
191 found = true; |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
192 break; |
148
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
193 } |
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
194 } |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
195 if (!found) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
196 { |
291
5ab445e6a4da
Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents:
290
diff
changeset
|
197 DEBUGPRINTF ("Failed to find certificate; \n%s\n", to_validate[i]); |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
198 return ERR_INVALID_INSTRUCTIONS; |
148
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
199 } |
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
200 } |
65
e4088afd5281
Comment out validate instructions for now to avoid unused warnings
Andre Heinecke <aheinecke@intevation.de>
parents:
64
diff
changeset
|
201 |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
202 return 0; |
64
fb9f78f7ab2f
Improve error handling free memory before exiting. Include line endings in Marker lines
Andre Heinecke <aheinecke@intevation.de>
parents:
60
diff
changeset
|
203 } |
148
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
204 |
1315
12ed0b72e9f5
(issue162) Change DO_RELEASE_BUILD to IS_TAG_BUILD to determine g_debug initializatation
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1176
diff
changeset
|
205 #ifdef IS_TAG_BUILD |
1060
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
206 bool g_debug = false; |
1072
1e429faf7c84
(issue46) Default to debug output on if RELEASE_BUILD is not defined
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1060
diff
changeset
|
207 #else |
1e429faf7c84
(issue46) Default to debug output on if RELEASE_BUILD is not defined
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1060
diff
changeset
|
208 bool g_debug = true; |
1e429faf7c84
(issue46) Default to debug output on if RELEASE_BUILD is not defined
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1060
diff
changeset
|
209 #endif |
68
8ffbb48528ae
Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents:
65
diff
changeset
|
210 |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
211 int |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
212 main (int argc, char **argv) |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
213 { |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
214 char **to_install = NULL, |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
667
diff
changeset
|
215 **to_remove = NULL, |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
667
diff
changeset
|
216 **all_valid_certs = NULL; |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
217 int ret = -1; |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
218 |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
219 char *certificate_list = NULL, |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
667
diff
changeset
|
220 *certificate_file_name = NULL, |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
667
diff
changeset
|
221 *choices_file_name = NULL; |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
222 size_t list_len = 0; |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
223 list_status_t list_status; |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
224 bool do_uninstall = false; |
60
6acb1dae6185
Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents:
59
diff
changeset
|
225 |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
226 /* Some very static argument parsing. list= and choices= is only |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
227 added to make it more transparent how this programm is called if |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
228 a user looks at the detailed uac dialog. */ |
1060
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
229 if ((argc != 3 && argc != 4) || strncmp(argv[1], "list=", 5) != 0 || |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
667
diff
changeset
|
230 strncmp(argv[2], "choices=", 8) != 0) |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
231 { |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
232 ERRORPRINTF ("Invalid arguments.\n" |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
233 "Expected arguments: list=<certificate_list> \n" |
1060
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
234 " choices=<choices_file>|uninstall\n" |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
235 "Optional: --debug\n"); |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
236 return ERR_INVALID_PARAMS; |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
237 } |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
238 |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
239 certificate_file_name = strchr(argv[1], '=') + 1; |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
240 choices_file_name = strchr(argv[2], '=') + 1; |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
241 |
1060
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
242 if (argc == 4 && strncmp(argv[3], "--debug", 7) == 0) |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
243 { |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
244 g_debug = true; |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
245 } |
317ee9dc4684
(issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1053
diff
changeset
|
246 |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
247 if (!certificate_file_name || !choices_file_name) |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
248 { |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
249 ERRORPRINTF ("Invalid arguments.\n" |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
250 "Expected arguments: list=<certificate_list> \n" |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
251 " choices=<choices_file>|uninstall\n"); |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
252 return ERR_INVALID_PARAMS; |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
253 } |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
254 |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
255 if (strncmp(choices_file_name, "uninstall", 9) == 0) |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
256 { |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
257 do_uninstall = true; |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
258 choices_file_name = NULL; |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
259 } |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
260 |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
261 list_status = read_and_verify_list (certificate_file_name, &certificate_list, |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
262 &list_len); |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
263 |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
264 if (list_status != Valid) |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
265 { |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
266 if (list_status == InvalidSignature) |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
267 { |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
268 ERRORPRINTF ("Failed to verify signature.\n"); |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
269 return ERR_INVALID_SIGNATURE; |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
270 } |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
271 |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
272 ERRORPRINTF ("Failed to read certificate list.\n"); |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
273 return ERR_INVALID_INPUT_NO_LIST; |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
274 } |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
275 |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
276 all_valid_certs = get_certs_from_list (certificate_list, list_len); |
944
76c410aff382
Fix two "memory leaks"
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
277 free (certificate_list); |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
278 |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
279 if (!all_valid_certs) |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
280 { |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
281 /* Impossible */ |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
282 return -1; |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
283 } |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
284 |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
285 |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
286 /* For uninstall we are done now */ |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
287 if (do_uninstall) |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
288 { |
290
b460d2cf088d
Move ifdef for write_stores_win call lower so that do_uninstall is no longer unused on linux
Andre Heinecke <aheinecke@intevation.de>
parents:
289
diff
changeset
|
289 #ifdef WIN32 |
302
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
290 ret = write_stores_win (NULL, all_valid_certs); |
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
291 if (ret != 0) |
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
292 { |
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
293 ERRORPRINTF ("Failed to write windows stores retval: %i\n", ret); |
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
294 } |
299
ccb00bf48b75
Fix misplaced endif
Andre Heinecke <aheinecke@intevation.de>
parents:
297
diff
changeset
|
295 #endif |
302
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
296 ret = write_stores_nss (NULL, all_valid_certs); |
944
76c410aff382
Fix two "memory leaks"
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
297 strv_free (all_valid_certs); |
302
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
298 return ret; |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
299 } |
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
300 |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
301 ret = read_choices_file (choices_file_name, &to_install, |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
667
diff
changeset
|
302 &to_remove); |
148
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
303 |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
304 if (ret) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
305 { |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
306 ERRORPRINTF ("Failed to read choices file\n"); |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
307 return ret; |
60
6acb1dae6185
Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents:
59
diff
changeset
|
308 } |
6acb1dae6185
Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents:
59
diff
changeset
|
309 |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
310 if (!strv_length (to_install) && !strv_length (to_remove) ) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
311 { |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
312 ERRORPRINTF ("Failed to read choices file\n"); |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
313 return ERR_NO_INSTRUCTIONS; |
64
fb9f78f7ab2f
Improve error handling free memory before exiting. Include line endings in Marker lines
Andre Heinecke <aheinecke@intevation.de>
parents:
60
diff
changeset
|
314 } |
fb9f78f7ab2f
Improve error handling free memory before exiting. Include line endings in Marker lines
Andre Heinecke <aheinecke@intevation.de>
parents:
60
diff
changeset
|
315 |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
316 /* Check that the choices are ok to execute */ |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
317 if (to_install) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
318 { |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
319 ret = validate_choices (all_valid_certs, to_install); |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
320 if (ret) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
321 { |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
322 ERRORPRINTF ("Failed to validate choices\n"); |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
323 return ret; |
148
095d0e7f8ed4
Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents:
137
diff
changeset
|
324 } |
64
fb9f78f7ab2f
Improve error handling free memory before exiting. Include line endings in Marker lines
Andre Heinecke <aheinecke@intevation.de>
parents:
60
diff
changeset
|
325 } |
68
8ffbb48528ae
Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents:
65
diff
changeset
|
326 |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
327 if (to_remove) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
328 { |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
329 ret = validate_choices (all_valid_certs, to_remove); |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
330 if (ret) |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
331 { |
382
124f08a85532
Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents:
339
diff
changeset
|
332 ERRORPRINTF ("Failed to validate removal choices\n"); |
289
9ad00a3255f4
Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
333 return ret; |
68
8ffbb48528ae
Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents:
65
diff
changeset
|
334 } |
8ffbb48528ae
Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents:
65
diff
changeset
|
335 } |
8ffbb48528ae
Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents:
65
diff
changeset
|
336 |
944
76c410aff382
Fix two "memory leaks"
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
337 strv_free (all_valid_certs); |
76c410aff382
Fix two "memory leaks"
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
338 |
68
8ffbb48528ae
Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents:
65
diff
changeset
|
339 #ifdef WIN32 |
302
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
340 ret = write_stores_win (to_install, to_remove); |
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
341 if (ret != 0) |
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
342 { |
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
343 ERRORPRINTF ("Failed to write windows stores retval: %i\n", ret); |
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
344 } |
68
8ffbb48528ae
Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents:
65
diff
changeset
|
345 #endif |
302
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
346 ret = write_stores_nss (to_install, to_remove); |
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
347 if (ret != 0) |
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
348 { |
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
349 ERRORPRINTF ("Failed to write nss stores"); |
fac7e1b0e558
Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents:
299
diff
changeset
|
350 } |
68
8ffbb48528ae
Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents:
65
diff
changeset
|
351 |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
352 /* Make valgrind happy */ |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
353 strv_free (to_install); |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
354 strv_free (to_remove); |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
26
diff
changeset
|
355 |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
356 return 0; |
25
92108a2120f1
Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
357 } |