~ubuntu-branches/ubuntu/karmic/gnupg2/karmic-updates

« back to all changes in this revision

Viewing changes to kbx/keybox-init.c

  • Committer: Bazaar Package Importer
  • Author(s): Eric Dorland
  • Date: 2009-03-08 22:46:47 UTC
  • mfrom: (1.1.11 upstream)
  • Revision ID: james.westby@ubuntu.com-20090308224647-gq17gatcl71lrc2k
Tags: 2.0.11-1
* New upstream release. (Closes: #496663)
* debian/control: Make the description a little more distinctive than
  gnupg v1's. Thanks Jari Aalto. (Closes: #496323)

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
static KB_NAME kb_names;
31
31
 
32
32
 
33
 
/* 
34
 
  Register a filename for plain keybox files.  Returns a pointer to be
35
 
  used to create a handles etc or NULL to indicate that it has already
36
 
  been registered */
 
33
/* Register a filename for plain keybox files.  Returns a pointer to
 
34
   be used to create a handles and so on.  Returns NULL to indicate
 
35
   that FNAME has already been registered.  */
37
36
void *
38
37
keybox_register_file (const char *fname, int secret)
39
38
{
50
49
    return NULL;
51
50
  strcpy (kr->fname, fname);
52
51
  kr->secret = !!secret;
 
52
 
 
53
  kr->handle_table = NULL;
 
54
  kr->handle_table_size = 0;
 
55
 
53
56
  /* kr->lockhd = NULL;*/
54
57
  kr->is_locked = 0;
55
58
  kr->did_full_scan = 0;
83
86
{
84
87
  KEYBOX_HANDLE hd;
85
88
  KB_NAME resource = token;
 
89
  int idx;
86
90
 
87
91
  assert (resource && !resource->secret == !secret);
88
92
  hd = xtrycalloc (1, sizeof *hd);
90
94
    {
91
95
      hd->kb = resource;
92
96
      hd->secret = !!secret;
 
97
      if (!resource->handle_table)
 
98
        {
 
99
          resource->handle_table_size = 3;
 
100
          resource->handle_table = xtrycalloc (resource->handle_table_size,
 
101
                                               sizeof *resource->handle_table);
 
102
          if (!resource->handle_table)
 
103
            {
 
104
              resource->handle_table_size = 0;
 
105
              xfree (hd);
 
106
              return NULL;
 
107
            }
 
108
        }
 
109
      for (idx=0; idx < resource->handle_table_size; idx++)
 
110
        if (!resource->handle_table[idx])
 
111
          {
 
112
            resource->handle_table[idx] = hd;
 
113
            break;
 
114
          }
 
115
      if (!(idx < resource->handle_table_size))
 
116
        {
 
117
          KEYBOX_HANDLE *tmptbl;
 
118
          size_t newsize;
 
119
 
 
120
          newsize = resource->handle_table_size + 5;
 
121
          tmptbl = xtryrealloc (resource->handle_table, 
 
122
                                newsize * sizeof (*tmptbl));
 
123
          if (!tmptbl)
 
124
            {
 
125
              xfree (hd);
 
126
              return NULL;
 
127
            }
 
128
          resource->handle_table = tmptbl;
 
129
          resource->handle_table_size = newsize;
 
130
          resource->handle_table[idx] = hd;
 
131
          for (idx++; idx < resource->handle_table_size; idx++)
 
132
            resource->handle_table[idx] = NULL;
 
133
        }
93
134
    }
94
135
  return hd;
95
136
}
99
140
{
100
141
  if (!hd)
101
142
    return;
 
143
  if (hd->kb->handle_table)
 
144
    {
 
145
      int idx;
 
146
      for (idx=0; idx < hd->kb->handle_table_size; idx++)
 
147
        if (hd->kb->handle_table[idx] == hd)
 
148
          hd->kb->handle_table[idx] = NULL;
 
149
    }
102
150
  _keybox_release_blob (hd->found.blob);
103
151
  if (hd->fp)
104
152
    {
128
176
  return 0;
129
177
}
130
178
 
 
179
 
 
180
/* Close the file of the resource identified by HD.  For consistent
 
181
   results this fucntion closes the files of all handles pointing to
 
182
   the resource identified by HD.  */
 
183
void 
 
184
_keybox_close_file (KEYBOX_HANDLE hd)
 
185
{
 
186
  int idx;
 
187
  KEYBOX_HANDLE roverhd;
 
188
 
 
189
  if (!hd || !hd->kb || !hd->kb->handle_table)
 
190
    return;
 
191
 
 
192
  for (idx=0; idx < hd->kb->handle_table_size; idx++)
 
193
    if ((roverhd = hd->kb->handle_table[idx]))
 
194
      {
 
195
        if (roverhd->fp)
 
196
          {
 
197
            fclose (roverhd->fp);
 
198
            roverhd->fp = NULL;
 
199
          }
 
200
      }
 
201
  assert (!hd->fp);
 
202
}