Mercurial > trustbridge
annotate cinst/windowsstore.c @ 1307:2bacaec6e101
(perf) Use cached values to deterimine elevation.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 13 Oct 2014 12:32:13 +0200 |
parents | 265583011f24 |
children | 32a44cfb78c0 |
rev | line source |
---|---|
404 | 1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik |
2 * Software engineering by Intevation GmbH | |
3 * | |
4 * This file is Free Software under the GNU GPL (v>=2) | |
5 * and comes with ABSOLUTELY NO WARRANTY! | |
6 * See LICENSE.txt for details. | |
7 */ | |
137
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
8 #ifdef WIN32 |
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
9 |
161
a4b1c77f3e6a
Change install_certificates_win to generic write_stores_win
Andre Heinecke <aheinecke@intevation.de>
parents:
149
diff
changeset
|
10 #include <stdio.h> |
a4b1c77f3e6a
Change install_certificates_win to generic write_stores_win
Andre Heinecke <aheinecke@intevation.de>
parents:
149
diff
changeset
|
11 |
137
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
12 #include "windowsstore.h" |
161
a4b1c77f3e6a
Change install_certificates_win to generic write_stores_win
Andre Heinecke <aheinecke@intevation.de>
parents:
149
diff
changeset
|
13 #include "errorcodes.h" |
a4b1c77f3e6a
Change install_certificates_win to generic write_stores_win
Andre Heinecke <aheinecke@intevation.de>
parents:
149
diff
changeset
|
14 #include "listutil.h" |
a4b1c77f3e6a
Change install_certificates_win to generic write_stores_win
Andre Heinecke <aheinecke@intevation.de>
parents:
149
diff
changeset
|
15 #include "strhelp.h" |
253
3595ea4fd3fb
Use getLastErrorMsg from logging
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
16 #include "logging.h" |
321
824ef90a6721
Move is_elevated into common/util.c file for better reuse
Andre Heinecke <aheinecke@intevation.de>
parents:
262
diff
changeset
|
17 #include "util.h" |
1288
265583011f24
(issue123) Add possibility to open native certificate dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
18 #include "certhelp.h" |
222
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
19 |
219
57bef180d560
Add debug output and make windowsstore linkable from C++ code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
218
diff
changeset
|
20 void |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
21 do_remove(HCERTSTORE hStore, char **to_remove) |
137
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
22 { |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
23 PCCERT_CONTEXT pCert = NULL; |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
24 unsigned int i = 0; |
624
736e95c63b86
Log access to windows stores
Andre Heinecke <andre.heinecke@intevation.de>
parents:
504
diff
changeset
|
25 bool elevated = is_elevated(); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
26 |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
27 if (!to_remove) |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
28 { |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
29 return; |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
30 } |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
31 |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
32 for (i=0; to_remove[i]; i++) |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
33 { |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
34 PCCERT_CONTEXT pc_to_remove = NULL; |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
35 |
222
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
36 pc_to_remove = b64_to_cert_context(to_remove[i], |
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
37 strnlen(to_remove[i], MAX_LINE_LENGTH)); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
38 |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
39 if (pc_to_remove == NULL) |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
40 { |
253
3595ea4fd3fb
Use getLastErrorMsg from logging
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
41 char *error = getLastErrorMsg(); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
42 if (error) |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
43 { |
626
f595fcbe3e76
Replace "normal printfs" with DEBUG / ERROR printf macros
Andre Heinecke <andre.heinecke@intevation.de>
parents:
624
diff
changeset
|
44 ERRORPRINTF ("Failed to create cert context: %s \n", error); |
253
3595ea4fd3fb
Use getLastErrorMsg from logging
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
45 free (error); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
46 } |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
47 continue; |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
48 } |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
49 |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
50 pCert = CertFindCertificateInStore (hStore, |
218
8fb12af98960
According to MSDN you Must also provide message encoding flag.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
217
diff
changeset
|
51 X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
52 0, |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
53 CERT_FIND_EXISTING, |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
54 pc_to_remove, |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
55 NULL); |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
56 |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
57 CertFreeCertificateContext (pc_to_remove); |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
58 |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
59 if (pCert == NULL) |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
60 { |
626
f595fcbe3e76
Replace "normal printfs" with DEBUG / ERROR printf macros
Andre Heinecke <andre.heinecke@intevation.de>
parents:
624
diff
changeset
|
61 ERRORPRINTF ("Did not find certificate\n"); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
62 continue; |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
63 } |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
64 |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
65 if (!CertDeleteCertificateFromStore (pCert)) |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
66 { |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
67 /* From MSDN: |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
68 The CertDeleteCertificateFromStore function always frees |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
69 pCertContext by calling the CertFreeCertificateContext |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
70 function, even if an error is encountered. */ |
253
3595ea4fd3fb
Use getLastErrorMsg from logging
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
71 char *error = getLastErrorMsg(); |
626
f595fcbe3e76
Replace "normal printfs" with DEBUG / ERROR printf macros
Andre Heinecke <andre.heinecke@intevation.de>
parents:
624
diff
changeset
|
72 ERRORPRINTF ("Error deleting certificate. %s", error); |
253
3595ea4fd3fb
Use getLastErrorMsg from logging
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
73 free (error); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
74 continue; |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
75 } |
624
736e95c63b86
Log access to windows stores
Andre Heinecke <andre.heinecke@intevation.de>
parents:
504
diff
changeset
|
76 log_certificate (elevated ? "Local Machine" : "Current User", |
736e95c63b86
Log access to windows stores
Andre Heinecke <andre.heinecke@intevation.de>
parents:
504
diff
changeset
|
77 to_remove[i], false); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
78 } |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
79 return; |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
80 } |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
81 |
219
57bef180d560
Add debug output and make windowsstore linkable from C++ code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
218
diff
changeset
|
82 void |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
83 do_install(HCERTSTORE hStore, char **to_install) |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
84 { |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
85 int i = 0, |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
86 ret = -1; |
624
736e95c63b86
Log access to windows stores
Andre Heinecke <andre.heinecke@intevation.de>
parents:
504
diff
changeset
|
87 bool elevated = is_elevated(); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
88 |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
89 if (!to_install) |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
90 { |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
91 return; |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
92 } |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
93 |
217
83a015f2e078
Remove leftover incrementation of i from former loop style. Fixes a crash when adding only one
Andre Heinecke <andre.heinecke@intevation.de>
parents:
215
diff
changeset
|
94 for (i = 0; to_install[i]; i++) |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
95 { |
222
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
96 PCCERT_CONTEXT pc_to_add = NULL; |
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
97 PCCERT_CONTEXT found_cert = NULL; |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
98 |
222
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
99 pc_to_add = b64_to_cert_context(to_install[i], |
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
100 strnlen(to_install[i], MAX_LINE_LENGTH)); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
101 |
222
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
102 if (pc_to_add == NULL) |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
103 { |
222
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
104 continue; |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
105 } |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
106 |
222
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
107 found_cert = CertFindCertificateInStore (hStore, |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
626
diff
changeset
|
108 X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
626
diff
changeset
|
109 0, |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
626
diff
changeset
|
110 CERT_FIND_EXISTING, |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
626
diff
changeset
|
111 pc_to_add, |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
626
diff
changeset
|
112 NULL); |
222
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
113 if (found_cert != NULL) |
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
114 { |
626
f595fcbe3e76
Replace "normal printfs" with DEBUG / ERROR printf macros
Andre Heinecke <andre.heinecke@intevation.de>
parents:
624
diff
changeset
|
115 DEBUGPRINTF ("Certificate already in store\n"); |
222
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
116 CertFreeCertificateContext (found_cert); |
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
117 CertFreeCertificateContext (pc_to_add); |
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
118 continue; |
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
119 } |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
120 |
222
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
121 ret = CertAddCertificateContextToStore (hStore, |
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
122 pc_to_add, |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
123 CERT_STORE_ADD_ALWAYS, |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
124 NULL); |
222
53ea9b975d1c
Cleanup windowsstore.c
Andre Heinecke <aheinecke@intevation.de>
parents:
219
diff
changeset
|
125 CertFreeCertificateContext (pc_to_add); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
126 if (!ret) |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
127 { |
253
3595ea4fd3fb
Use getLastErrorMsg from logging
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
128 char *error = getLastErrorMsg(); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
129 if (error) |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
130 { |
626
f595fcbe3e76
Replace "normal printfs" with DEBUG / ERROR printf macros
Andre Heinecke <andre.heinecke@intevation.de>
parents:
624
diff
changeset
|
131 ERRORPRINTF ("Failed to add certificate: %s \n", error); |
253
3595ea4fd3fb
Use getLastErrorMsg from logging
Andre Heinecke <aheinecke@intevation.de>
parents:
247
diff
changeset
|
132 free (error); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
133 } |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
134 } |
624
736e95c63b86
Log access to windows stores
Andre Heinecke <andre.heinecke@intevation.de>
parents:
504
diff
changeset
|
135 log_certificate (elevated ? "Local Machine" : "Current User", |
736e95c63b86
Log access to windows stores
Andre Heinecke <andre.heinecke@intevation.de>
parents:
504
diff
changeset
|
136 to_install[i], true); |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
137 } |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
138 return; |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
139 } |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
140 |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
141 int |
247
4de97f74d038
Check for process elevation and write into system store accordingly
Andre Heinecke <aheinecke@intevation.de>
parents:
222
diff
changeset
|
142 write_stores_win (char **to_install, char **to_remove) |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
143 { |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
144 HCERTSTORE hStore = NULL; |
137
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
145 |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
146 if (!to_install && !to_remove) |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
147 { |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
148 /* Nothing to do */ |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
149 return 0; |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
150 } |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
151 |
247
4de97f74d038
Check for process elevation and write into system store accordingly
Andre Heinecke <aheinecke@intevation.de>
parents:
222
diff
changeset
|
152 if (!is_elevated()) |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
153 { |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
154 hStore = CertOpenStore (CERT_STORE_PROV_SYSTEM, 0, |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
155 0, CERT_SYSTEM_STORE_CURRENT_USER, L"Root"); |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
156 } |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
157 else |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
158 { |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
159 hStore = CertOpenStore (CERT_STORE_PROV_SYSTEM, 0, |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
160 0, CERT_SYSTEM_STORE_LOCAL_MACHINE, L"Root"); |
137
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
161 } |
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
162 |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
163 if (!hStore) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
164 { |
504
3cf72c5282e8
Redirect errorprintf to output debug string on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
404
diff
changeset
|
165 ERRORPRINTF ("Failed to access store.\n"); |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
166 return ERR_STORE_ACCESS_DENIED; |
137
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
167 } |
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
168 |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
169 /* Do the actual work */ |
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
170 do_install (hStore, to_install); |
137
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
171 |
215
292e2cb60ef0
Add removal of certificates
Andre Heinecke <andre.heinecke@intevation.de>
parents:
185
diff
changeset
|
172 do_remove (hStore, to_remove); |
161
a4b1c77f3e6a
Change install_certificates_win to generic write_stores_win
Andre Heinecke <aheinecke@intevation.de>
parents:
149
diff
changeset
|
173 |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
174 if (hStore) |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
175 { |
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
176 CertCloseStore (hStore, 0); |
137
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
177 } |
163
8cfcd38a9bb3
Change coding style for cinst main / windowsstore to GNU
Andre Heinecke <aheinecke@intevation.de>
parents:
161
diff
changeset
|
178 return 0; |
137
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
179 } |
4904fe01055d
Factor out windows specific parts
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
180 #endif // WIN32 |