annotate cinst/main.c @ 323:31ba7ed4d50f

Made is_elevated portable.
author Sascha Wilde <wilde@intevation.de>
date Mon, 07 Apr 2014 13:20:34 +0200
parents f17226aa2e09
children eff8e7ce4dae
rev   line source
137
4904fe01055d Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents: 126
diff changeset
1 /**
4904fe01055d Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents: 126
diff changeset
2 * @file main.c
4904fe01055d Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents: 126
diff changeset
3 * @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
4 *
92108a2120f1 Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
5 * 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
6 * privileges. When run with elevated privileges this
92108a2120f1 Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
7 * process will modify system wide certificate stores.
92108a2120f1 Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
8 * Otherwise only the users certificate stores are modified.
92108a2120f1 Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
9 *
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
10 * The first parameter to this process should be list=<file_name>
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
11 * of the certificate list to work on. The second parameter should
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
12 * be instruction=<instruction_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
13 *
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
14 * instruction_file_name should be the absolute path to an
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
15 * instructions file formatted as:
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
16 *
59
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
17 * I:<certificate>
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
18 * R:<certificate>
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
19 *
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
20 * Line breaks can be system dependent in the Instructions file.
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
21 *
59
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
22 * It will only execute the instructions if the
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
23 * I and R instructions are also part of the signed
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
24 * 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
25 * 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
26 *
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
27 * 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
28 * 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
29 * are part of the list.
25
92108a2120f1 Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
30 *
92108a2120f1 Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
31 **/
92108a2120f1 Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
32 #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
33 #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
34 #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
35 #include <assert.h>
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
36 #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
37
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
38 #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
39 #include "listutil.h"
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
40 #include "logging.h"
60
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
41 #include "errorcodes.h"
137
4904fe01055d Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents: 126
diff changeset
42 #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
43 #include "nssstore.h"
125
24fb90ef8f6a Fix install_certificates_win.
Andre Heinecke <aheinecke@intevation.de>
parents: 116
diff changeset
44
68
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
45 /* The certificate list + instructions may only be so long as
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
46 * twice the accepted certificatelist size */
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
47 #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
48
59
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
49 /* @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
50 *
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
51 * Reads instructions from an input file into the to_install
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
52 * and to_remove buffers.
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
53 *
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
54 * Lines starting with I: are treated as install instructions.
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
55 * Lines starting with R: are treated as remove instructions.
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
56 * Other lines are ignored.
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
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 * 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
59 *
60
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
60 * 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
61 * even when an error is returned.
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
62 *
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
63 * @param[in] file_name absolute path to the instructions file.
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
64 * @param[out] to_install strv of installation instructions or NULL
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
65 * @param[out] to_remove strv of remove instructions or NULL
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
66 *
60
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
67 * @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
68 */
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
69 static int
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
70 read_instructions_file (char *file_name, char ***to_install,
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
71 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
72 {
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
73 int lines_read = 0;
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
74 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
75 FILE *f = NULL;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
76 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
77
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
78 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
79 {
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
80 printf ("Error invalid parameters.\n");
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
81 return -1;
90
899fcddb92d0 Check parameters in readInput
Andre Heinecke <aheinecke@intevation.de>
parents: 68
diff changeset
82 }
899fcddb92d0 Check parameters in readInput
Andre Heinecke <aheinecke@intevation.de>
parents: 68
diff changeset
83
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
84 f = fopen (file_name, "rb");
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
85 if (f == NULL)
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
86 return ERR_NO_INSTRUCTIONS;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
87
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
88 fseek (f, 0, SEEK_END);
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
89 file_size = ftell (f);
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
90 if (file_size <= 0)
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
91 {
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
92 fclose (f);
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
93 return ERR_NO_INSTRUCTIONS;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
94 }
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
95
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
96 fseek (f, 0, SEEK_SET);
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
97
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
98 if (file_size + 1 == 0)
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 fclose (f);
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
101 return ERR_INVALID_INSTRUCTIONS;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
102 }
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
103
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
104 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
105 {
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
106 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
107 if (len <= 3)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
108 {
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
109 printf ("Line too short.\n");
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
110 return ERR_INVALID_INPUT;
91
80ab2168760f Also add output size handling to str_append_str
Andre Heinecke <aheinecke@intevation.de>
parents: 90
diff changeset
111 }
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
112 if (lines_read++ > MAX_LINES)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
113 {
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
114 printf ("Too many lines\n");
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
115 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
116 }
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
117 if (*buf == 'I')
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
118 {
291
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
119 char *trimmed = buf+2;
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
120 /* Remove leading I: and trailing whitespace */
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
121 str_trim(&trimmed);
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
122 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
123 continue;
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
124 }
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
125 if (*buf == 'R')
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
126 {
291
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
127 char *trimmed = buf+2;
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
128 /* Remove leading R: and trailing whitespace */
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
129 str_trim(&trimmed);
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
130 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
131 continue;
59
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
132 }
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
133 }
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
134
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
135 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
136 }
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
137
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
138 /** @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
139 *
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
140 * 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
141 * for installation.
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
142 *
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
143 * @param[in] all_certs strv of all valid certificates in a list
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
144 * @param[in] to_validate strv of instructions
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
145 *
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
146 * @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
147 */
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
148 int
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
149 validate_instructions (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
150 {
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
151 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
152
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
153 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
154 {
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
155 /* Invalid parameters */
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
156 return -1;
148
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
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
159 if (to_validate == NULL)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
160 {
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
161 /* Nothing is valid */
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
162 return 0;
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
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
165 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
166 {
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
167 bool found = false;
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
168 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
169 {
291
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
170 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
171 0)
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 found = true;
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
174 break;
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 (!found)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
178 {
291
5ab445e6a4da Trim instruction lines to avoid line ending trouble
Andre Heinecke <aheinecke@intevation.de>
parents: 290
diff changeset
179 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
180 return ERR_INVALID_INSTRUCTIONS;
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 }
65
e4088afd5281 Comment out validate instructions for now to avoid unused warnings
Andre Heinecke <aheinecke@intevation.de>
parents: 64
diff changeset
183
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
184 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
185 }
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
186
68
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
187
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
188 int
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
189 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
190 {
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
191 /* 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
192 char **to_install = NULL,
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
193 **to_remove = NULL,
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
194 **all_valid_certs = NULL;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
195 int ret = -1;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
196
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
197 char *certificate_list = NULL,
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
198 *certificate_file_name = NULL,
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
199 *instruction_file_name = NULL;
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
200 size_t list_len = 0;
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
201 list_status_t list_status;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
202 bool do_uninstall = false;
60
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
203
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
204 /* Some very static argument parsing. list= and instructions= is only
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
205 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
206 a user looks at the detailed uac dialog. */
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
207 if (argc != 3 || strncmp(argv[1], "list=", 5) != 0 ||
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
208 strncmp(argv[2], "instructions=", 13) != 0)
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
209 {
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
210 ERRORPRINTF ("Invalid arguments.\n"
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
211 "Expected arguments: list=<certificate_list> \n"
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
212 " instructions=<instructions_file>|uninstall\n");
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
213 return ERR_INVALID_PARAMS;
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
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
216 certificate_file_name = strchr(argv[1], '=') + 1;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
217 instruction_file_name = strchr(argv[2], '=') + 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 if (!certificate_file_name || !instruction_file_name)
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
220 {
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
221 ERRORPRINTF ("Invalid arguments.\n"
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
222 "Expected arguments: list=<certificate_list> \n"
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
223 " instructions=<instructions_file>|uninstall\n");
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
224 return ERR_INVALID_PARAMS;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
225 }
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
226
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
227 if (strncmp(instruction_file_name, "uninstall", 9) == 0)
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
228 {
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
229 do_uninstall = true;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
230 instruction_file_name = NULL;
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
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
233 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
234 &list_len);
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
235
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
236 if (list_status != Valid)
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 if (list_status == InvalidSignature)
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
239 {
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
240 return ERR_INVALID_SIGNATURE;
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
241 }
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
242
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
243 return ERR_INVALID_INPUT_NO_LIST;
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
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
246 all_valid_certs = get_certs_from_list (certificate_list, list_len);
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
247
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
248 if (!all_valid_certs)
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 /* Impossible */
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
251 return -1;
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
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
254
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
255 /* For uninstall we are done now */
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
256 if (do_uninstall)
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
257 {
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
258 #ifdef WIN32
302
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
259 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
260 if (ret != 0)
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
261 {
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
262 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
263 }
299
ccb00bf48b75 Fix misplaced endif
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
264 #endif
313
f17226aa2e09 Temporary build fix for windows. Also Use putenv in test
Andre Heinecke <aheinecke@intevation.de>
parents: 302
diff changeset
265 #ifndef WIN32 /* TODO Remove ifdef once it is implemented */
302
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
266 ret = write_stores_nss (NULL, all_valid_certs);
313
f17226aa2e09 Temporary build fix for windows. Also Use putenv in test
Andre Heinecke <aheinecke@intevation.de>
parents: 302
diff changeset
267 #endif
302
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
268 return ret;
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
269 }
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 ret = read_instructions_file (instruction_file_name, &to_install,
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
272 &to_remove);
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
273
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
274 if (ret)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
275 {
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
276 return ret;
60
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
277 }
6acb1dae6185 Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents: 59
diff changeset
278
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
279 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
280 {
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
281 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
282 }
fb9f78f7ab2f Improve error handling free memory before exiting. Include line endings in Marker lines
Andre Heinecke <aheinecke@intevation.de>
parents: 60
diff changeset
283
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
284 /* Check that the instructions are ok to execute */
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
285 if (to_install)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
286 {
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
287 ret = validate_instructions (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
288 if (ret)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
289 {
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
290 return ret;
148
095d0e7f8ed4 Add instruction verification and handle uninstall command in input
Andre Heinecke <aheinecke@intevation.de>
parents: 137
diff changeset
291 }
64
fb9f78f7ab2f Improve error handling free memory before exiting. Include line endings in Marker lines
Andre Heinecke <aheinecke@intevation.de>
parents: 60
diff changeset
292 }
68
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
293
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
294 if (to_remove)
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
295 {
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
296 ret = validate_instructions (all_valid_certs, to_remove);
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
297 if (ret)
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
298 {
289
9ad00a3255f4 Change cinst from stdin input to use arguments.
Andre Heinecke <aheinecke@intevation.de>
parents: 247
diff changeset
299 return ret;
68
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
300 }
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
301 }
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
302
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
303 #ifdef WIN32
302
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
304 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
305 if (ret != 0)
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
306 {
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
307 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
308 }
68
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
309 #endif
313
f17226aa2e09 Temporary build fix for windows. Also Use putenv in test
Andre Heinecke <aheinecke@intevation.de>
parents: 302
diff changeset
310 #ifndef WIN32 /* TODO Remove ifdef once it is implemented */
302
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
311 ret = write_stores_nss (to_install, to_remove);
313
f17226aa2e09 Temporary build fix for windows. Also Use putenv in test
Andre Heinecke <aheinecke@intevation.de>
parents: 302
diff changeset
312 #endif
302
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
313 if (ret != 0)
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
314 {
fac7e1b0e558 Add nss store calling function and use it in cinst
Andre Heinecke <andre.heinecke@intevation.de>
parents: 299
diff changeset
315 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
316 }
68
8ffbb48528ae Add certificate installation for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 65
diff changeset
317
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
318 /* Make valgrind happy */
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
319 strv_free (to_install);
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
320 strv_free (to_remove);
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
321 free (certificate_list);
59
3f6378647371 Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents: 26
diff changeset
322
163
8cfcd38a9bb3 Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents: 161
diff changeset
323 return 0;
25
92108a2120f1 Move certificatelist to common. Add cinst directory
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
324 }

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