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

Diff of /trunk/Src/wptSigList.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2 by twoaday, Mon Jan 31 11:02:21 2005 UTC revision 23 by twoaday, Fri Sep 30 10:10:16 2005 UTC
# Line 31  Line 31 
31  #include "wptW32API.h"  #include "wptW32API.h"
32    
33    
34    /* Is the given signature an user-id signature? */
35  #define IS_UID_CERT(_class) ((_class) >= 0x10 && (_class) <= 0x13)  #define IS_UID_CERT(_class) ((_class) >= 0x10 && (_class) <= 0x13)
36    
37    
38    /* Create a signature list control in @lv with the parent window
39       given in @ctrl.
40       Return value: 0 on success. */
41  static int  static int
42  siglist_build( listview_ctrl_t * lv, HWND ctrl )  siglist_build (listview_ctrl_t * lv, HWND ctrl)
43  {  {
44      struct listview_ctrl_s *c;      struct listview_ctrl_s *c;
45      struct listview_column_s implist[] = {      struct listview_column_s implist[] = {
# Line 58  siglist_build( listview_ctrl_t * lv, HWN Line 63  siglist_build( listview_ctrl_t * lv, HWN
63      listview_set_ext_style( c );      listview_set_ext_style( c );
64      *lv = c;      *lv = c;
65      return 0;      return 0;
66  } /* siglist_build */  }
67    
68    
69    /* Delete the signature control in @lv. */
70  void  void
71  siglist_delete( listview_ctrl_t lv )  siglist_delete( listview_ctrl_t lv )
72  {  {
73      if( lv ) {      if( lv ) {
74          listview_release( lv );          listview_release( lv );
75      }      }
76  } /* siglist_delete */  }
77    
78    
79    /* Indent the string in @old with the level @ilvl.
80        Return value: indented string. */
81  static char *  static char *
82  indent_string( const char * old, int ilvl )  indent_string (const char * old, int ilvl)
83  {  {
84      char * p;      char * p;
85      int i;      int i;
86    
87      p = new char[strlen( old ) + 1 + ilvl];      p = new char[strlen (old) + 1 + ilvl];
88      if( !p )      if (!p)
89          BUG( NULL );          BUG (NULL);
90      for( i = 0; i < ilvl; i++ )      for (i = 0; i < ilvl; i++)
91          p[i] = ' ';          p[i] = ' ';
92      strcpy( p+i, old );      strcpy (p+i, old);
93      return p;      return p;
94  } /* indent_string */  }
95    
96    
97    /* Add an userid signature with the index @idx from the userid @uid
98       to the sig list control @lv.
99       Return value: 0 on success. */
100  static int  static int
101  siglist_add_key( listview_ctrl_t lv, gpgme_key_t key, int idx )  siglist_add_key( listview_ctrl_t lv, gpgme_user_id_t uid, int idx)
102  {  {
103        gpgme_key_sig_t ks;
104        gpgme_key_t     key=NULL;
105      char t[128];      char t[128];
106      const char *attr;      const char *attr;
107      const char *s;      const char *s;
     int sig_class;  
108      int rc = 0, key_attr, root = 0;      int rc = 0, key_attr, root = 0;
109            
110      s = gpgme_key_get_string_attr( key, GPGME_ATTR_SIG_KEYID, NULL, idx );      ks = get_nth_uid_sig (uid, idx);
     root = s && strlen( s )? 0 : 1;  
111    
112      sig_class = gpgme_key_get_ulong_attr( key, GPGME_ATTR_SIG_CLASS, NULL, idx );      if( !IS_UID_CERT( ks->sig_class ) )
     if( !IS_UID_CERT( sig_class ) && !root )  
113          return 0;          return 0;
114    
115      rc = listview_add_item( lv, " " );      rc = listview_add_item (lv, " ");
116      if( rc )          if( rc )    
117          return rc;          return rc;
118    
119      attr = gpgme_key_get_string_attr( key, GPGME_ATTR_SIG_ISSUER, NULL, idx );      get_pubkey (ks->keyid, &key);
120      if( attr && strlen( attr ) ) {      if (key) {
121          char * uid = utf8_to_wincp (attr, strlen (attr)), * p;          attr = key->uids->uid;
122          p = root? m_strdup( uid ) : indent_string( uid, 2 );          if( attr && strlen( attr ) ) {
123          listview_add_sub_item( lv, 0, 0, p );              char * uid = utf8_to_wincp (attr, strlen (attr)), * p;
124          free( uid );              p = indent_string( uid, 2 );
125          free_if_alloc( p );              listview_add_sub_item( lv, 0, 0, p );
126                free( uid );
127                free_if_alloc( p );
128            }
129            else
130                listview_add_sub_item( lv, 0, 0, _("  user ID not found") );
131      }      }
     else  
         listview_add_sub_item( lv, 0, 0, _("  user ID not found") );  
132    
133      if( root )      if( root )
134          return 0;          return 0;
135    
136      key_attr = gpgme_key_get_ulong_attr( key, GPGME_ATTR_SIG_STAT, NULL, idx );      switch (gpg_error ((gpg_err_code_t)ks->status)) {
137      if( key_attr == GPGME_SIG_STAT_NONE )            case GPG_ERR_NO_ERROR:     s = "YES";   break;
138          return WPTERR_GENERAL;      case GPG_ERR_NO_PUBKEY:    s = "NOKEY"; break;
139      switch (key_attr) {      case GPG_ERR_BAD_SIGNATURE:s = "NO";    break;
140      case GPGME_SIG_STAT_GOOD: s = "YES";   break;      default:                   s = "ERROR"; break;
     case GPGME_SIG_STAT_NOKEY:s = "NOKEY"; break;  
     case GPGME_SIG_STAT_BAD:  s = "NO";    break;  
     case GPGME_SIG_STAT_NOSIG:s = "NOSIG"; break;  
     case GPGME_SIG_STAT_ERROR:  
     default:                  s = "ERROR"; break;  
141      }      }
142      listview_add_sub_item( lv, 0, 1, s );      listview_add_sub_item( lv, 0, 1, s );
143    
144      switch (sig_class) {      switch (ks->sig_class) {
145      case 0x10: strcpy (t, " "); break;      case 0x10: strcpy (t, " "); break;
146      case 0x11: strcpy (t, "1"); break;      case 0x11: strcpy (t, "1"); break;
147      case 0x12: strcpy (t, "2"); break;      case 0x12: strcpy (t, "2"); break;
148      case 0x13: strcpy (t, "3"); break;      case 0x13: strcpy (t, "3"); break;
149      }      }
150      key_attr = gpgme_key_get_ulong_attr (key, GPGME_ATTR_SIG_FLAGS, NULL, idx);          
151      if (key_attr)      strcat (t, " ");
152          strcat (t, " ");      if (!ks->exportable)
     if (key_attr & GPGME_SIGF_LOCAL)  
153          strcat (t, "L");          strcat (t, "L");
154      if (key_attr & GPGME_SIGF_NREV)      /*if (key_attr & GPGME_SIGF_NREV)
155          strcat (t, "R");          strcat (t, "R");*/
156      listview_add_sub_item (lv, 0, 2, t);      listview_add_sub_item (lv, 0, 2, t);
157    
158      key_attr = gpgme_key_get_ulong_attr( key, GPGME_ATTR_SIG_CREATED, NULL, idx );      key_attr = ks->timestamp;
159      if( key_attr ) {      if( key_attr ) {
160          s = get_key_created( key_attr );          s = get_key_created( key_attr );
161          listview_add_sub_item( lv, 0, 3, s );          listview_add_sub_item( lv, 0, 3, s );
162      }      }
163            
164      attr = gpgme_key_get_string_attr( key, GPGME_ATTR_SIG_KEYID, NULL, idx );      attr = ks->keyid;
165      if( attr && strlen( attr ) == 16 ) {      if( attr && strlen( attr ) == 16 ) {
166          _snprintf( t, sizeof t -1, "0x%s", attr + 8 );          _snprintf( t, sizeof t -1, "0x%s", attr + 8 );
167          listview_add_sub_item( lv, 0, 4, t );          listview_add_sub_item( lv, 0, 4, t );
168      }      }
169    
170      key_attr = gpgme_key_get_ulong_attr (key, GPGME_ATTR_SIG_EXPIRES, NULL, idx);      key_attr = ks->expires;
171      if (key_attr)      if (key_attr) {
     {  
172          s = get_key_created (key_attr);          s = get_key_created (key_attr);
173          listview_add_sub_item (lv, 0, 5, s);          listview_add_sub_item (lv, 0, 5, s);
174      }      }
175    
176      key_attr = gpgme_key_get_ulong_attr( key, GPGME_ATTR_SIG_ALGO, NULL, idx );      attr = get_key_pubalgo (ks->pubkey_algo);
     attr = gpgme_key_expand_attr( GPGME_ATTR_ALGO, key_attr );  
177      if( attr )      if( attr )
178          listview_add_sub_item( lv, 0, 6, (char *)attr );          listview_add_sub_item( lv, 0, 6, (char *)attr );
179            
180      return 0;      return 0;
181  } /* siglist_add_key */  }
182    
183    
184    /* Load a signature list with the signatures of the key with
185       the keyID @keyid. The parent window is in @ctrl.
186       Return value is the handle to the listview control. */
187  listview_ctrl_t  listview_ctrl_t
188  siglist_load( HWND ctrl, const char *keyid )  siglist_load (HWND ctrl, const char *keyid)
189  {      {    
190      gpgme_key_t key;      gpgme_key_t key;
191        gpgme_user_id_t u;
192      listview_ctrl_t lv;      listview_ctrl_t lv;
193      int rc = 0, i;      int rc = 0, i;
194    
195      if( siglist_build( &lv, ctrl ) )      if (siglist_build (&lv, ctrl))
196          BUG( NULL );          BUG (NULL);
197      rc = get_pubkey( keyid, &key );      rc = get_pubkey(keyid, &key);
198      if( rc )      if (rc)
199          BUG( NULL );          BUG (NULL);
200      for( i = 0; i < gpgme_key_count_items( key, GPGME_ATTR_SIG_KEYID ); i++ ) {  
201          rc = siglist_add_key( lv, key, i );      for (u=key->uids; u; u = u->next) {    
202          if( rc )          rc = listview_add_item (lv, " ");
203            if( rc )        
204              break;              break;
205            listview_add_sub_item (lv, 0, 0, u->uid);
206            for (i=0; i < count_uid_sigs (u); i++) {
207                rc = siglist_add_key( lv, u, i );
208                if( rc )
209                    break;
210            }
211      }      }
212      if( rc ) {      if( rc ) {
213          siglist_delete( lv );          siglist_delete( lv );
214          lv = NULL;          lv = NULL;
215      }      }
216      return lv;      return lv;
217  } /* siglist_load */  }

Legend:
Removed from v.2  
changed lines
  Added in v.23

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26