/[winpt]/trunk/Src/wptSigList.cpp
ViewVC logotype

Annotation of /trunk/Src/wptSigList.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 36 - (hide annotations)
Thu Oct 27 15:25:13 2005 UTC (19 years, 4 months ago) by werner
File size: 5397 byte(s)
First set of changes to use autotools for building.
1 werner 36 /* wptSigList.cpp - Listview for key signatures
2     * Copyright (C) 2001-2005 Timo Schulz
3     * Copyright (C) 2005 g10 Code GmbH
4     *
5     * This file is part of WinPT.
6     *
7     * WinPT is free software; you can redistribute it and/or
8     * modify it under the terms of the GNU General Public License
9     * as published by the Free Software Foundation; either version 2
10     * of the License, or (at your option) any later version.
11     *
12     * WinPT is distributed in the hope that it will be useful,
13     * but WITHOUT ANY WARRANTY; without even the implied warranty of
14     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15     * General Public License for more details.
16     *
17     * You should have received a copy of the GNU General Public License
18     * along with WinPT; if not, write to the Free Software Foundation,
19     * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20     */
21    
22     #ifdef HAVE_CONFIG_H
23     #include <config.h>
24     #endif
25    
26     #include <windows.h>
27     #include <windows.h>
28     #include <time.h>
29    
30     #include "wptGPG.h"
31     #include "wptCommonCtl.h"
32     #include "wptKeylist.h"
33     #include "wptNLS.h"
34     #include "wptUTF8.h"
35     #include "wptErrors.h"
36     #include "wptTypes.h"
37     #include "wptW32API.h"
38    
39    
40     /* Is the given signature an user-id signature? */
41     #define IS_UID_CERT(_class) ((_class) >= 0x10 && (_class) <= 0x13)
42    
43    
44     /* Create a signature list control in @lv with the parent window
45     given in @ctrl.
46     Return value: 0 on success. */
47     static int
48     siglist_build (listview_ctrl_t * lv, HWND ctrl)
49     {
50     struct listview_ctrl_s *c;
51     struct listview_column_s implist[] = {
52     {0, 240, (char *)_("User ID")},
53     {1, 50, (char *)_("Valid")},
54     {2, 40, (char *)_("Class")},
55     {3, 68, (char *)_("Creation")},
56     {4, 80, (char *)_("Key ID")},
57     {5, 68, (char *)_("Expiration")},
58     {6, 56, (char *)_("Algorithm")},
59     {0, 0, NULL}
60     };
61     int j, rc = 0;
62    
63     rc = listview_new (&c);
64     if (rc)
65     return rc;
66     c->ctrl = ctrl;
67     for ( j=0; implist[j].fieldname != NULL; j++ )
68     listview_add_column( c, &implist[j] );
69     listview_set_ext_style( c );
70     *lv = c;
71     return 0;
72     }
73    
74    
75     /* Delete the signature control in @lv. */
76     void
77     siglist_delete( listview_ctrl_t lv )
78     {
79     if( lv ) {
80     listview_release( lv );
81     }
82     }
83    
84    
85     /* Indent the string in @old with the level @ilvl.
86     Return value: indented string. */
87     static char *
88     indent_string (const char * old, int ilvl)
89     {
90     char * p;
91     int i;
92    
93     p = new char[strlen (old) + 1 + ilvl];
94     if (!p)
95     BUG (NULL);
96     for (i = 0; i < ilvl; i++)
97     p[i] = ' ';
98     strcpy (p+i, old);
99     return p;
100     }
101    
102    
103     /* Add an userid signature @ks from the userid @uid to the sig list
104     control @lv.
105     Return value: 0 on success. */
106     static int
107     siglist_add_key (listview_ctrl_t lv, gpgme_user_id_t uid, gpgme_key_sig_t ks)
108     {
109     gpgme_key_t key=NULL;
110     char t[128];
111     const char *attr;
112     const char *s;
113     int rc = 0, key_attr;
114    
115     if (ks && !IS_UID_CERT (ks->sig_class))
116     return 0;
117    
118     rc = listview_add_item (lv, " ");
119     if( rc )
120     return rc;
121    
122     attr = NULL;
123     if (!uid) {
124     get_pubkey (ks->keyid, &key);
125     if (key)
126     attr = key->uids->uid;
127     }
128     else
129     attr = uid->uid;
130     if (attr && strlen (attr)) {
131     char *uid_utf8 = utf8_to_wincp (attr, strlen (attr));
132     char *p = uid? m_strdup (uid_utf8) : indent_string (uid_utf8, 2);
133     listview_add_sub_item (lv, 0, 0, p);
134     free (uid_utf8);
135     free_if_alloc (p);
136     }
137     else
138     listview_add_sub_item (lv, 0, 0, _(" user ID not found"));
139    
140     if (uid)
141     return 0;
142    
143     switch (gpgme_err_code (ks->status)) {
144     case GPG_ERR_NO_ERROR: s = "YES"; break;
145     case GPG_ERR_NO_PUBKEY: s = "NOKEY"; break;
146     case GPG_ERR_BAD_SIGNATURE:s = "NO"; break;
147     default: s = "ERROR"; break;
148     }
149     listview_add_sub_item( lv, 0, 1, s );
150    
151     switch (ks->sig_class) {
152     case 0x10: strcpy (t, " "); break;
153     case 0x11: strcpy (t, "1"); break;
154     case 0x12: strcpy (t, "2"); break;
155     case 0x13: strcpy (t, "3"); break;
156     }
157    
158     strcat (t, " ");
159     if (!ks->exportable)
160     strcat (t, "L");
161     /*if (key_attr & GPGME_SIGF_NREV)
162     strcat (t, "R");*/
163     listview_add_sub_item (lv, 0, 2, t);
164    
165     key_attr = ks->timestamp;
166     if( key_attr ) {
167     s = get_key_created( key_attr );
168     listview_add_sub_item( lv, 0, 3, s );
169     }
170    
171     attr = ks->keyid;
172     if( attr && strlen( attr ) == 16 ) {
173     _snprintf (t, sizeof t -1, "0x%s", attr + 8);
174     listview_add_sub_item( lv, 0, 4, t );
175     }
176    
177     key_attr = ks->expires;
178     if (key_attr) {
179     s = get_key_created (key_attr);
180     listview_add_sub_item (lv, 0, 5, s);
181     }
182    
183     attr = get_key_pubalgo (ks->pubkey_algo);
184     if( attr )
185     listview_add_sub_item( lv, 0, 6, (char *)attr );
186    
187     return 0;
188     }
189    
190    
191     /* Load a signature list with the signatures of the key with
192     the keyID @keyid. The parent window is in @ctrl.
193     Return value is the handle to the listview control. */
194     listview_ctrl_t
195     siglist_load (HWND ctrl, const char *keyid)
196     {
197     gpgme_key_t key;
198     gpgme_user_id_t u;
199     gpgme_key_sig_t s;
200     listview_ctrl_t lv;
201     int rc, i=0;
202    
203     if (siglist_build (&lv, ctrl))
204     BUG (NULL);
205     rc = get_pubkey(keyid, &key);
206     if (rc)
207     BUG (NULL);
208    
209     /* XXX: the root item is at the end but should come first. */
210     for (u=key->uids; u; u = u->next) {
211     siglist_add_key (lv, u, NULL);
212     for (s = u->signatures; s; s = s->next) {
213     rc = siglist_add_key (lv, NULL, s);
214     if (rc)
215     break;
216     }
217     }
218     if (rc) {
219     siglist_delete (lv);
220     lv = NULL;
221     }
222     return lv;
223     }

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26