annotate cinst/main.c @ 1070:f110a3f6e387

(issue114) Fine tune ACL propagation using mkdir_p the ACL of the parent directories would propagate to all subdirectories and objects in the directory. Now we only use ACL propagation in the last directory to make sure that files we might create in that directory inherit the correct (resitricted) ACL
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 10 Sep 2014 16:41:36 +0200
parents 317ee9dc4684
children 1e429faf7c84
rev   line source
404
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 382
diff changeset
1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 382
diff changeset
2 * Software engineering by Intevation GmbH
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 382
diff changeset
3 *
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 382
diff changeset
4 * This file is Free Software under the GNU GPL (v>=2)
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 382
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY!
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 382
diff changeset
6 * See LICENSE.txt for details.
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 382
diff changeset
7 */
137
4904fe01055d Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents: 126
diff changeset
8 /**
4904fe01055d Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents: 126
diff changeset
9 * @file main.c
4904fe01055d Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents: 126
diff changeset
10 * @brief Main entry point for the cinst process.
25
92108a2120f1 Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
11 *
92108a2120f1 Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
12 * The cinst process may or may not be run with elevated
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"
125
24fb90ef8f6a Fix install_certificates_win.
Andre Heinecke <aheinecke@intevation.de>
parents: 116
diff changeset
53
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
54 /* 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
55 * twice the accepted certificatelist size */
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
56 #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
57
59
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
58 /* @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
59 *
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
60 * 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
61 * and to_remove buffers.
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
62 *
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
63 * Lines starting with I: are treated as install choices.
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
64 * 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
65 * Other lines are ignored.
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
66 *
59
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
67 * 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
68 *
60
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
69 * 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
70 * even when an error is returned.
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
71 *
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
72 * @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
73 * @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
74 * @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
75 *
60
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
76 * @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
77 */
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
78 static int
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
79 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
80 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
81 {
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
82 int lines_read = 0;
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
83 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
84 FILE *f = NULL;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
85 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
86
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
87 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
88 {
626
f595fcbe3e76 Replace "normal printfs" with DEBUG / ERROR printf macros
Andre Heinecke <andre.heinecke@intevation.de>
parents: 501
diff changeset
89 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
90 return -1;
90
899fcddb92d0 Check parameters in readInput
Andre Heinecke <aheinecke@intevation.de>
parents: 68
diff changeset
91 }
899fcddb92d0 Check parameters in readInput
Andre Heinecke <aheinecke@intevation.de>
parents: 68
diff changeset
92
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
93 f = fopen (file_name, "rb");
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
94 if (f == NULL)
667
fb69aef056ea Be more verbose in error logging
Andre Heinecke <andre.heinecke@intevation.de>
parents: 626
diff changeset
95 {
fb69aef056ea Be more verbose in error logging
Andre Heinecke <andre.heinecke@intevation.de>
parents: 626
diff changeset
96 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
97 return ERR_NO_INSTRUCTIONS;
fb69aef056ea Be more verbose in error logging
Andre Heinecke <andre.heinecke@intevation.de>
parents: 626
diff changeset
98 }
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
99
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
100 fseek (f, 0, SEEK_END);
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
101 file_size = ftell (f);
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
102 if (file_size <= 0)
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
103 {
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
104 fclose (f);
667
fb69aef056ea Be more verbose in error logging
Andre Heinecke <andre.heinecke@intevation.de>
parents: 626
diff changeset
105 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
106 return ERR_NO_INSTRUCTIONS;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
107 }
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 fseek (f, 0, SEEK_SET);
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
110
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
111 if (file_size + 1 == 0)
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
112 {
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
113 fclose (f);
667
fb69aef056ea Be more verbose in error logging
Andre Heinecke <andre.heinecke@intevation.de>
parents: 626
diff changeset
114 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
115 return ERR_INVALID_INSTRUCTIONS;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
116 }
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 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
119 {
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
120 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
121 if (len <= 3)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
122 {
626
f595fcbe3e76 Replace "normal printfs" with DEBUG / ERROR printf macros
Andre Heinecke <andre.heinecke@intevation.de>
parents: 501
diff changeset
123 ERRORPRINTF ("Line too short.\n");
339
5fa58979cb3a Fix ressource leak found by cppcheck
Andre Heinecke <aheinecke@intevation.de>
parents: 325
diff changeset
124 fclose (f);
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
125 return ERR_INVALID_INPUT;
91
80ab2168760f Also add output size handling to str_append_str
Andre Heinecke <aheinecke@intevation.de>
parents: 90
diff changeset
126 }
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
127 if (lines_read++ > MAX_LINES)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
128 {
626
f595fcbe3e76 Replace "normal printfs" with DEBUG / ERROR printf macros
Andre Heinecke <andre.heinecke@intevation.de>
parents: 501
diff changeset
129 ERRORPRINTF ("Too many lines\n");
339
5fa58979cb3a Fix ressource leak found by cppcheck
Andre Heinecke <aheinecke@intevation.de>
parents: 325
diff changeset
130 fclose (f);
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
131 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
132 }
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
133 if (*buf == 'I')
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
134 {
291
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
135 char *trimmed = buf+2;
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
136 /* Remove leading I: and trailing whitespace */
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
137 str_trim(&trimmed);
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
138 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
139 continue;
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
140 }
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
141 if (*buf == 'R')
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
142 {
291
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
143 char *trimmed = buf+2;
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
144 /* Remove leading R: and trailing whitespace */
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
145 str_trim(&trimmed);
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
146 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
147 continue;
59
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
148 }
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
339
5fa58979cb3a Fix ressource leak found by cppcheck
Andre Heinecke <aheinecke@intevation.de>
parents: 325
diff changeset
151 fclose (f);
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
152 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
153 }
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
154
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
155 /** @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
156 *
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
157 * 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
158 * for installation.
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
159 *
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
160 * @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
161 * @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
162 *
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
163 * @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
164 */
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
165 int
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
166 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
167 {
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
168 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
169
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
170 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
171 {
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
172 /* Invalid parameters */
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
173 return -1;
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
174 }
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
175
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
176 if (to_validate == NULL)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
177 {
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
178 /* Nothing is valid */
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
179 return 0;
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
180 }
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
181
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
182 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
183 {
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
184 bool found = false;
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
185 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
186 {
291
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
187 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
188 0)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
189 {
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
190 found = true;
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
191 break;
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
192 }
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
193 }
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
194 if (!found)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
195 {
291
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
196 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
197 return ERR_INVALID_INSTRUCTIONS;
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
198 }
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
199 }
65
e4088afd5281 Comment out validate instructions for now to avoid unused warnings
Andre Heinecke <aheinecke@intevation.de>
parents: 64
diff changeset
200
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
201 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
202 }
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
203
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
204 bool g_debug = false;
68
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
205
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
206 int
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
207 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
208 {
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
209 /* TODO handle wchar arguments on Windows or do conversion dance */
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
210 char **to_install = NULL,
905
698b6a9bd75e Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents: 667
diff changeset
211 **to_remove = NULL,
698b6a9bd75e Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents: 667
diff changeset
212 **all_valid_certs = NULL;
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
213 int ret = -1;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
214
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
215 char *certificate_list = NULL,
905
698b6a9bd75e Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents: 667
diff changeset
216 *certificate_file_name = NULL,
698b6a9bd75e Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents: 667
diff changeset
217 *choices_file_name = NULL;
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
218 size_t list_len = 0;
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
219 list_status_t list_status;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
220 bool do_uninstall = false;
60
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
221
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
222 /* 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
223 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
224 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
225 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
226 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
227 {
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
228 ERRORPRINTF ("Invalid arguments.\n"
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
229 "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
230 " 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
231 "Optional: --debug\n");
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
232 return ERR_INVALID_PARAMS;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
233 }
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
234
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
235 certificate_file_name = strchr(argv[1], '=') + 1;
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
236 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
237
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
238 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
239 {
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1053
diff changeset
240 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
241 }
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
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
243 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
244 {
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
245 ERRORPRINTF ("Invalid arguments.\n"
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
246 "Expected arguments: list=<certificate_list> \n"
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
247 " choices=<choices_file>|uninstall\n");
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
248 return ERR_INVALID_PARAMS;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
249 }
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
250
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
251 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
252 {
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
253 do_uninstall = true;
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
254 choices_file_name = NULL;
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
255 }
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 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
258 &list_len);
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 if (list_status != Valid)
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
261 {
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
262 if (list_status == InvalidSignature)
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
263 {
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
264 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
265 return ERR_INVALID_SIGNATURE;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
266 }
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 read certificate list.\n");
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
269 return ERR_INVALID_INPUT_NO_LIST;
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
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
272 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
273 free (certificate_list);
289
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 if (!all_valid_certs)
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
276 {
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
277 /* Impossible */
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
278 return -1;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
279 }
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
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
282 /* For uninstall we are done now */
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
283 if (do_uninstall)
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
284 {
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
285 #ifdef WIN32
302
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
286 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
287 if (ret != 0)
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
288 {
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
289 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
290 }
299
ccb00bf48b75 Fix misplaced endif
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
291 #endif
302
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
292 ret = write_stores_nss (NULL, all_valid_certs);
944
76c410aff382 Fix two "memory leaks"
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
293 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
294 return ret;
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
295 }
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
296
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
297 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
298 &to_remove);
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
299
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
300 if (ret)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
301 {
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
302 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
303 return ret;
60
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
304 }
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
305
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
306 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
307 {
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
308 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
309 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
310 }
fb9f78f7ab2f Improve error handling free memory before exiting. Include line endings in Marker lines
Andre Heinecke <aheinecke@intevation.de>
parents: 60
diff changeset
311
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
312 /* 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
313 if (to_install)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
314 {
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
315 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
316 if (ret)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
317 {
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
318 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
319 return ret;
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
320 }
64
fb9f78f7ab2f Improve error handling free memory before exiting. Include line endings in Marker lines
Andre Heinecke <aheinecke@intevation.de>
parents: 60
diff changeset
321 }
68
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
322
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
323 if (to_remove)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
324 {
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
325 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
326 if (ret)
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
327 {
382
124f08a85532 Rename instructions to choices
Andre Heinecke <andre.heinecke@intevation.de>
parents: 339
diff changeset
328 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
329 return ret;
68
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
330 }
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
331 }
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
332
944
76c410aff382 Fix two "memory leaks"
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
333 strv_free (all_valid_certs);
76c410aff382 Fix two "memory leaks"
Andre Heinecke <andre.heinecke@intevation.de>
parents: 905
diff changeset
334
68
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
335 #ifdef WIN32
302
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
336 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
337 if (ret != 0)
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
338 {
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
339 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
340 }
68
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
341 #endif
302
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
342 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
343 if (ret != 0)
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
344 {
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
345 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
346 }
68
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
347
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
348 /* Make valgrind happy */
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
349 strv_free (to_install);
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
350 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
351
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
352 return 0;
25
92108a2120f1 Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
353 }

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